Also ich hab eben die Demo von LS2012 3D auf dem DS gespielt:
-> Felder zukaufbar
-> Getreide verdorrt
wenn die noch mehr so Ideen umsetzen für LS13 wird alles gut.
Von dem Spiel bin ich begeistert, werde es mir kaufen
Also ich hab eben die Demo von LS2012 3D auf dem DS gespielt:
-> Felder zukaufbar
-> Getreide verdorrt
wenn die noch mehr so Ideen umsetzen für LS13 wird alles gut.
Von dem Spiel bin ich begeistert, werde es mir kaufen
Release im Oktober, animierte Hühner und Kühe hat man gesehn, nichts umwerfendes
Den Strawmod kenn ich leider nicht. Daher kann ich dir da nicht weiterhelfen
Meinst du wie du eine Frucht zu einem hinzufügen kannst oder was meinst du?
bei mir kommt nun i am legend der geht aber nicht nur 30min
bei mir steht da nichts von der sendung heute
So da ich und vermutlich auch ein paar andere Grünweizen auf der Map verbaut haben und dieser wohl mit einem Mäher abgemäht wird gilt es nun herauszufinde wie uns das gelingt.
Das mähen habe ich schon geschafft, jedoch bleibt danach Stroh liegen, das sollte ja da dann nicht liegen, eher Chaff oder eben der gemähte Grünweizen.
Diesen könnte man dann evtl. mit einem Sammelwagen aufsammeln und zur BGA fahren.
Gemacht werden müssten:
-> Script
-> nötige Texturen
-> Umbau von Mähwerken, Hängern, Fahrzeugen
-> Zusammenfassung der Arbeit zum Tutorial?
Hier mal was ich bisher an dem Mod: LS 2011: Kuhn GMD4010 v 1 Mähwerke Mod für Landwirtschafts Simulator 2011
| modhoster.de (von Haus aus nicht ganz fehlerfrei mäht aber Gras, Gerste, Weizen) geändert habe:
--
-- KuhnGMD4010
-- Specialization for KuhnGMD4010
--
-- @author Manuel Leithner
-- @date 26/07/09
--
KuhnGMD4010 = {};
function KuhnGMD4010.prerequisitesPresent(specializations)
return SpecializationUtil.hasSpecialization(Attachable, specializations);
end;
function KuhnGMD4010:load(xmlFile)
local hydraulicsCount = Utils.getNoNil(getXMLInt(xmlFile, "vehicle.hydraulics#count"), 0);
self.hydraulics = {};
for i=1, hydraulicsCount do
local hydraulicName = string.format("vehicle.hydraulics.hydraulic%d", i);
self.hydraulics[i] = {};
self.hydraulics[i].node = Utils.indexToObject(self.components, getXMLString(xmlFile, hydraulicName .. "#index"));
self.hydraulics[i].punch = Utils.indexToObject(self.components, getXMLString(xmlFile, hydraulicName .. "#punch"));
self.hydraulics[i].translationPunch = Utils.indexToObject(self.components, getXMLString(xmlFile, hydraulicName .. "#punchFixpoint"));
self.hydraulics[i].fenderFixPoint = Utils.indexToObject(self.components, getXMLString(xmlFile, hydraulicName .. "#fixpoint"));
local ax, ay, az = getWorldTranslation(self.hydraulics[i].punch);
local bx, by, bz = getWorldTranslation(self.hydraulics[i].translationPunch);
self.hydraulics[i].punchDistance = Utils.vector3Length(ax-bx, ay-by, az-bz);
end;
self.arm = {};
self.arm.node = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.arm#index"));
local y = Utils.degToRad(Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.arm#minRot"), 0));
self.arm.minRot = {0,y,0};
y = Utils.degToRad(Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.arm#maxRot"), 0));
self.arm.maxRot = {0,y,0};
self.arm.rotTime = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.arm#rotTime"), 3) * 1000;
self.arm.liftTime = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.arm#liftTime"), 3) * 1000;
self.arm.currentRotLimit = {0};
self.supportArm = {};
self.supportArm.node = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.supportArm#index"));
self.supportArm.node2 = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.supportArm#index2"));
x = Utils.degToRad(Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.supportArm#minRot"), 0));
self.supportArm.minRot = {x,0,0};
x = Utils.degToRad(Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.supportArm#maxRot"), 0));
self.supportArm.maxRot = {x,0,0};
x = Utils.degToRad(Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.supportArm#minRot2"), 0));
self.supportArm.minRot2 = {x,0,0};
x = Utils.degToRad(Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.supportArm#maxRot2"), 0));
self.supportArm.maxRot2 = {x,0,0};
self.arm.isDown = false;
self.arm.isExpanded = false;
self.groundReferenceThreshold = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.groundReferenceNode#threshold"), 0.2);
self.groundReferenceNode = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.groundReferenceNode#index"));
if self.groundReferenceNode == nil then
self.groundReferenceNode = self.components[1].node;
end;
local mowerSound = getXMLString(xmlFile, "vehicle.mowerSound#file");
if mowerSound ~= nil and mowerSound ~= "" then
mowerSound = Utils.getFilename(mowerSound, self.baseDirectory);
self.mowerSound = createSample("mowerSound");
self.mowerSoundEnabled = false;
loadSample(self.mowerSound, mowerSound, false);
self.mowerSoundPitchOffset = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.mowerSound#pitchOffset"), 1);
self.mowerSoundVolume = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.mowerSound#volume"), 1);
end;
local numCuttingAreas = Utils.getNoNil(getXMLInt(xmlFile, "vehicle.cuttingAreas#count"), 0);
for i=1, numCuttingAreas do
local areanamei = string.format("vehicle.cuttingAreas.cuttingArea%d", i);
self.cuttingAreas[i].foldMinLimit = Utils.getNoNil(getXMLFloat(xmlFile, areanamei .. "#foldMinLimit"), 0);
self.cuttingAreas[i].foldMaxLimit = Utils.getNoNil(getXMLFloat(xmlFile, areanamei .. "#foldMaxLimit"), 1);
self.cuttingAreas[i].grassParticleSystemIndex = getXMLInt(xmlFile, areanamei .. "#particleSystemIndex");
end;
self.isTurnedOn = false;
self.wasToFast = false;
self.grassParticleSystems = {};
local i=0;
while true do
local baseName = string.format("vehicle.grassParticleSystems.grassParticleSystem(%d)", i);
local particleSystem = {};
particleSystem.ps = {};
local ps = Utils.loadParticleSystem(xmlFile, particleSystem.ps, baseName, self.components, false, nil, self.baseDirectory)
if ps == nil then
break;
end;
particleSystem.disableTime = 0;
table.insert(self.grassParticleSystems, particleSystem);
i = i+1;
end;
self.runOnlyOnce = true;
self.attacherVehicleJoint = nil;
self.mowerIsAttached = false;
self.isExpanded = false;
self.isLowered = false;
end;
function KuhnGMD4010:delete()
if self.mowerSound ~= nil then
delete(self.mowerSound);
end;
end;
function KuhnGMD4010:mouseEvent(posX, posY, isDown, isUp, button)
end;
function KuhnGMD4010:keyEvent(unicode, sym, modifier, isDown)
end;
function KuhnGMD4010:update(dt)
if self.runOnlyOnce then
setJointRotationLimit(self.componentJoints[2].jointIndex, 2, true, Utils.degToRad(0), Utils.degToRad(0));
self.runOnlyOnce = false;
end;
if self.mowerIsAttached then
for i=1, table.getn(self.attacherVehicle.attachedImplements) do
if self.attacherVehicle.attachedImplements[i].object == self then
local index = self.attacherVehicle.attachedImplements[i].jointDescIndex;
self.attacherVehicleJoint = self.attacherVehicle.attacherJoints[index];
break;
end;
end;
self.mowerIsAttached = false;
end;
if self:getIsActive() then
self.wasToFast = false;
self.isExpanded = false;
self.isLowered = false;
local x, y, z = getRotation(self.arm.node);
if y > Utils.degToRad(85) then
self.isExpanded = true;
end;
if self.arm.currentRotLimit[1] > 1 then
self.isLowered = true;
end;
end;
if self:getIsActiveForInput() then
if self.isExpanded then
if InputBinding.hasEvent(InputBinding.IMPLEMENT_EXTRA) then
self.isTurnedOn = not self.isTurnedOn;
end;
if InputBinding.hasEvent(InputBinding.LOWER_IMPLEMENT) then
self.arm.isDown = not self.arm.isDown;
end;
end;
if InputBinding.hasEvent(InputBinding.IMPLEMENT_EXTRA2) and not self.isLowered and not self.isTurnedOn then
self.arm.isExpanded = not self.arm.isExpanded;
end;
end;
if self:getIsActive() then
if self.attacherVehicleJoint ~= nil and self.isExpanded then
self.attacherVehicleJoint.moveDown = false;
end;
for k,v in pairs(self.grassParticleSystems) do
if self.time > v.disableTime then
Utils.setEmittingState(v.ps, false);
end;
end;
if self.isTurnedOn then
local toFast = self:doCheckSpeedLimit() and self.lastSpeed*3600 > 31;
if not toFast and self.arm.currentRotLimit[1] > 15 then
local x,y,z = getWorldTranslation(self.groundReferenceNode);
local foldAnimTime = self.foldAnimTime;
local area = 0;
local areaWheat = 0;
local areaBarley = 0;
local areaGreenwheat = 0;
for k, cuttingArea in pairs(self.cuttingAreas) do
local x,y,z = getWorldTranslation(cuttingArea.start);
local x1,y1,z1 = getWorldTranslation(cuttingArea.width);
local x2,y2,z2 = getWorldTranslation(cuttingArea.height);
if k == 1 then
area = Utils.updateMeadowArea(x, z, x1, z1, x2, z2);
areaWheat = Utils.cutFruitArea(FruitUtil.FRUITTYPE_WHEAT, x, z, x1, z1, x2, z2);
areaBarley = Utils.cutFruitArea(FruitUtil.FRUITTYPE_BARLEY, x, z, x1, z1, x2, z2);
areaGreenwheat = Utils.cutFruitArea(FruitUtil.FRUITTYPE_GREENWHEAT, x, z, x1, z1, x2, z2);
if self.attacherVehicle.movingDirection ~= -1 then
local ratio = g_currentMission.windrowCutLongRatio;
local area = Utils.updateFruitCutLongArea(FruitUtil.FRUITTYPE_GRASS, x, z, x1, z1, x2, z2, 0);
area = area + Utils.updateFruitCutLongArea(FruitUtil.FRUITTYPE_GRASS, x, z, x1, z1, x2, z2, 0)*ratio;
else
if areaWheat > 0 then
local old, total = Utils.getFruitWindrowArea(FruitUtil.FRUITTYPE_WHEAT, x, z, x1, z1, x2, z2);
local value = 1+math.floor(old / total + 0.7);
value = math.min(value, g_currentMission.maxWindrowValue);
Utils.updateFruitWindrowArea(FruitUtil.FRUITTYPE_WHEAT, x, z, x1, z1, x2, z2, value, true);
end;
if areaBarley > 0 then
local old, total = Utils.getFruitWindrowArea(FruitUtil.FRUITTYPE_BARLEY, x, z, x1, z1, x2, z2);
local value = 1+math.floor(old / total + 0.7);
value = math.min(value, g_currentMission.maxWindrowValue);
Utils.updateFruitWindrowArea(FruitUtil.FRUITTYPE_BARLEY, x, z, x1, z1, x2, z2, value, true);
end;
if areaGreenwheat > 0 then
local old, total = Utils.getFruitWindrowArea(FruitUtil.FRUITTYPE_GREENWHEAT, x, z, x1, z1, x2, z2);
local value = 1+math.floor(old / total + 0.7);
value = math.min(value, g_currentMission.maxWindrowValue);
Utils.updateFruitWindrowArea(FruitUtil.FRUITTYPE_GREENWHEAT, x, z, x1, z1, x2, z2, value, true);
end;
end;
if g_currentMission.environment.lastRainScale <= 0.1 and g_currentMission.environment.timeSinceLastRain > 30 then
if area > 0 or areaWheat > 0 or areaBarley > 0 then
if cuttingArea.grassParticleSystemIndex ~= nil then
ps = self.grassParticleSystems[cuttingArea.grassParticleSystemIndex+1];
if ps ~= nil then
ps.disableTime = self.time + 20;
Utils.setEmittingState(ps.ps, true);
end;
end;
end;
end;
else
if self.attacherVehicle.movingDirection ~= -1 then
if area > 0 then
local lastArea = 0;
local realArea = 0;
local spray = Utils.getDensity(g_currentMission.terrainDetailId, g_currentMission.sprayChannel, x, z, x1, z1, x2, z2);
local multi = 1;
if spray > 0 then
multi = 2;
end;
lastArea = lastArea + area*multi;
realArea = realArea + area/g_currentMission.maxFruitValue;
local old, total = Utils.getFruitCutLongArea(FruitUtil.FRUITTYPE_GRASS, x, z, x1, z1, x2, z2);
local value = 1+math.floor(old / total + 0.02);
value = math.min(value, g_currentMission.maxWindrowValue);
Utils.updateFruitWindrowArea(FruitUtil.FRUITTYPE_GRASS, x, z, x1, z1, x2, z2, value, true, false);
end;
if areaWheat > 0 then
local old, total = Utils.getFruitWindrowArea(FruitUtil.FRUITTYPE_WHEAT, x, z, x1, z1, x2, z2);
local value = 1+math.floor(old / total + 0.7);
value = math.min(value, g_currentMission.maxWindrowValue);
Utils.updateFruitWindrowArea(FruitUtil.FRUITTYPE_WHEAT, x, z, x1, z1, x2, z2, value, true);
end;
if areaBarley > 0 then
local old, total = Utils.getFruitWindrowArea(FruitUtil.FRUITTYPE_BARLEY, x, z, x1, z1, x2, z2);
local value = 1+math.floor(old / total + 0.7);
value = math.min(value, g_currentMission.maxWindrowValue);
Utils.updateFruitWindrowArea(FruitUtil.FRUITTYPE_BARLEY, x, z, x1, z1, x2, z2, value, true);
end;
if areaGreenwheat > 0 then
local old, total = Utils.getFruitWindrowArea(FruitUtil.FRUITTYPE_GREENWHEAT, x, z, x1, z1, x2, z2);
local value = 1+math.floor(old / total + 0.7);
value = math.min(value, g_currentMission.maxWindrowValue);
Utils.updateFruitWindrowArea(FruitUtil.FRUITTYPE_GREENWHEAT, x, z, x1, z1, x2, z2, value, true);
end;
end;
end;
end;
end;
if not self.mowerSoundEnabled and self:getIsActiveForSound() then
setSamplePitch(self.mowerSound, self.mowerSoundPitchOffset);
playSample(self.mowerSound, 0, self.mowerSoundVolume, 0);
self.mowerSoundEnabled = true;
end;
self.wasToFast = toFast;
else
if self.mowerSoundEnabled then
stopSample(self.mowerSound);
self.mowerSoundEnabled = false;
end;
end;
for i=1, table.getn(self.hydraulics) do
local ax, ay, az = getWorldTranslation(self.hydraulics[i].node);
local bx, by, bz = getWorldTranslation(self.hydraulics[i].fenderFixPoint);
local x, y, z = worldDirectionToLocal(getParent(self.hydraulics[i].node), bx-ax, by-ay, bz-az);
setDirection(self.hydraulics[i].node, x, y, z, 0, 1, 0);
if self.hydraulics[i].punch ~= nil then
local distance = Utils.vector3Length(ax-bx, ay-by, az-bz);
setTranslation(self.hydraulics[i].punch, 0, 0, distance-self.hydraulics[i].punchDistance);
end;
end;
local x, y, z = getRotation(self.arm.node);
local rot = {x,y,z};
self.arm.maxRot[1] = x;
self.arm.minRot[1] = x;
local newRot = Utils.getMovedLimitedValues(rot, self.arm.maxRot, self.arm.minRot, 3, self.arm.rotTime, dt, not self.arm.isExpanded);
setRotation(self.arm.node, unpack(newRot));
--if math.abs(newRot[2] - y) > 0.001 then
setJointFrame(self.componentJoints[1].jointIndex, 0, self.componentJoints[1].jointNode);
if not self.isExpanded then
setJointFrame(self.componentJoints[2].jointIndex, 0, self.componentJoints[2].jointNode);
setJointRotationLimit(self.componentJoints[2].jointIndex, 2, true, Utils.degToRad(0), Utils.degToRad(0));
else
setJointRotationLimit(self.componentJoints[2].jointIndex, 2, true, Utils.degToRad(-19), Utils.degToRad(19));
end;
--end;
x, y, z = getRotation(self.arm.node);
rot = {x,y,z};
local newRotLimit = {0,0,0};
newRotLimit = Utils.getMovedLimitedValues(self.arm.currentRotLimit, {30}, {0}, 1, self.arm.liftTime * 2, dt, not self.arm.isDown);
if math.abs(newRotLimit[1] - self.arm.currentRotLimit[1]) > 0.001 then
setJointRotationLimit(self.componentJoints[1].jointIndex, 0, true, Utils.degToRad(-newRotLimit[1]), Utils.degToRad(newRotLimit[1]));
end;
self.arm.currentRotLimit = newRotLimit;
end;
end;
function KuhnGMD4010:draw()
if self.isActive then
if self.isExpanded then
if self.isTurnedOn then
g_currentMission:addHelpButtonText(string.format(g_i18n:getText("turn_off_OBJECT"), self.typeDesc), InputBinding.IMPLEMENT_EXTRA);
else
g_currentMission:addHelpButtonText(string.format(g_i18n:getText("turn_on_OBJECT"), self.typeDesc), InputBinding.IMPLEMENT_EXTRA);
end;
if self.wasToFast then
g_currentMission:addWarning(g_i18n:getText("Dont_drive_to_fast") .. "\n" .. string.format(g_i18n:getText("Cruise_control_levelN"), "2", InputBinding.getButtonKeyName(InputBinding.SPEED_LEVEL2)), 0.07+0.022, 0.019+0.029);
end;
end;
if not self.isLowered and not self.isTurnedOn then
if self.arm.isExpanded then
g_currentMission:addHelpButtonText(string.format(g_i18n:getText("arm_fold"), self.typeDesc), InputBinding.IMPLEMENT_EXTRA2);
else
g_currentMission:addHelpButtonText(string.format(g_i18n:getText("arm_expand"), self.typeDesc), InputBinding.IMPLEMENT_EXTRA2);
end;
end;
end;
end;
function KuhnGMD4010:onAttach(attacherVehicle)
setRotation(self.supportArm.node, unpack(self.supportArm.maxRot));
setRotation(self.supportArm.node2, unpack(self.supportArm.maxRot2));
self.mowerIsAttached = true;
end;
function KuhnGMD4010:onDetach()
if self.deactivateOnDetach then
KuhnGMD4010.onDeactivate(self);
else
KuhnGMD4010.onDeactivateSounds(self)
end;
setRotation(self.supportArm.node, unpack(self.supportArm.minRot));
setRotation(self.supportArm.node2, unpack(self.supportArm.minRot2));
self.attacherVehicleJoint = nil;
end;
function KuhnGMD4010:onLeave()
if self.deactivateOnLeave then
KuhnGMD4010.onDeactivate(self);
else
KuhnGMD4010.onDeactivateSounds(self)
end;
end;
function KuhnGMD4010:onDeactivate()
KuhnGMD4010.onDeactivateSounds(self)
for k,v in pairs(self.grassParticleSystems) do
Utils.setEmittingState(v.ps, false);
end;
self.isTurnedOn = false;
end;
function KuhnGMD4010:onDeactivateSounds()
if self.mowerSoundEnabled then
stopSample(self.mowerSound);
self.mowerSoundEnabled = false;
end;
end;
Alles anzeigen
das die lua davon, Mäht, Grünweizen, gibt aber nur Heu aus
ich war da nicht dran und hab sie danach nochmal ersetzt
hab daran ja nichts gändert, Arbeite gerade daran eine windrow für Greenwheat zum laufen zu bekommen
Der fehler:
Wie entsteht der, bzw. wie kann ich ihn beheben?
Durch den Anfängerfehler mit der Clip Distance bin ich nun am Überlegen ob ich nun die Map Verschrotte oder:
510 Straßenpfosten (2Tage Arbeit)
an die 80 Schilder
Etliche Gebäude auf dem Hof
lösche und neusetze
Gemini: das mit den TransformGroups hab ich schon beim bau meiner BGA gelernt
hier zu finden:
So da sich unser Meister Yoda mal rangesetzt hat und ich nun weis was das Problem mit den FPS verursacht. Ändere ich das heute mal. Ich sag nur Anfängerfehler und Clip Distance 1000000 Hätte ich ja selbst drauf kommen können
Scheint ein Druckluft tank zu sein
Ich würde das mit der replace funkrion machen und dann mit Smooth entsprechend drüber.
Alternativ dazu kannst dir ja auch welche aus ner Map nehmen wo sie dir gefallen.
@Agramaa: Wie erntest das nun? Wie gehts bei dir weiter?
Das spiel muss ja irgendwo die textur herbekommen
Sorry. Irgendwie sind die bestimmt Modbar, der Verkehr ja auch.
So mal was von mir: