https://sketchfab.com/models/7…032ff4978a8526cd152d79353
Wurde von DAMMANN auch auf Facebook gepostet, scheint also wirklich für C&C zu sein..
https://sketchfab.com/models/7…032ff4978a8526cd152d79353
Wurde von DAMMANN auch auf Facebook gepostet, scheint also wirklich für C&C zu sein..
Nicht getestet, aber würde da sowas hier ausprobieren:
[lua]if self.attacherVehicle ~= nil and self.attacherVehicle.isMotorStarted then
rotate(self.rOBJ, 0 ,0, dt*0.03, 0 );
end;[/lua]
Das Problem liegt wohl wirklich an der Engine und somit auf der Seite von Giants.
Wenn man jedoch irgendwie an den aktuellen Rendermodus dran käme, könnte man das Problem umgehen, indem man halt alles spiegelt/rotiert.
Da das aber wohl nicht möglich ist, muss ich mir was anderes überlegen..
Bin nun selber etwas weiter gekommen..
Ich habe jetzt herausgefunden wie ich die Anzeige der Kameras drehen und spiegeln kann.
[lua]setOverlayRotation(camOverlay.overlayId, math.rad(180) , 0, 0);
setOverlayUVs(camOverlay.overlayId, 1, 0, 1, 1, 0, 0, 0, 1);[/lua]
Dadurch wird die Kamera bei Direct3D richtig angezeigt.
Jedoch hab ich nun noch das Problem, dass ich herausfinden muss, ob derzeit D3D oder OpenGL aktiviert ist.
Wird das eventuell in irgendeiner globalen Variable oder so abgespeichert?
PS: Sorry 4 Doppelpost..
Moin,
hab mal eine etwas speziellere Frage..
Ich versuche mit Hilfe der RafftnixGUI.lua eine zusätzliche Kamera als Overlay anzeigen zu lassen. Das ganze funktioniert soweit auch ganz gut.
Wenn man als Rederer jedoch Direct3D und nicht OpenGL nutzt, wird die Kamera um 180° gedreht angezeigt.
[lua]camOverlay = self.gui:createRenderOverlay(self.gui.baseElement, 0.831, 0.185+0.166, 0.166, 0.166, cam, 512, 512, getScreenAspectRatio());[/lua]
Bin da langsam am verzweifeln.. Wie kann man das beheben, dass die Kamera auch mit D3D richtig angezeigt wird?
minRot und maxRot stehen normalerweise für die niedrigste/höchste Position des Schrägförderers, wenn vom Schneidwerk nicht etwas anderes angegeben worden ist. Sprich die Position wenn du das Schneidwerk hebst/senkst.
Moin,
schau mal in der XML vom Drescher beim Attacher Joint fürs Schneidwerk. Beispiel:
Da musst du die Werte bei maxRotLimit="" ändern. Im Notfall einfach "0 0 0" eintragen.
Ich hatte vor kurzem das selbe Problem. Bei mir lags dann am Antiviren-Programm. (AVAST)
Da gibts ne Funktion namens Webschutz, nachdem ich den deaktiviert habe, hats bei mir wieder funktioniert..
Vielen Dank an euch beide.
Es funktioniert nun. Ich habe das ganze halt jetzt so wie modelleicher geschrieben hat gelöst. Zwar würde die Lösung von webalizer wohl auch funktionieren, aber die andere schien mir da "eleganter".
Tach Leute,
ich habe da mal wieder ein kleine Problem. Es geht um eine Animation die per .lua gelöst ist. Beispielsweise hier ein Auszug aus der Combine.lua:
[lua]
904 if self.isThreshing and self.rotorFan ~= nil then
905 rotate(self.rotorFan, dt*0.005, 0, 0);
906 end;[/lua]
Jetzt meine Frage: Wie kann ich die Animation ändern? Damit scheint es nämlich nicht zu funktionieren:
[lua]
self.rotorFan = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.rotorFan#index"));
[/lua]
und:
[lua]
if self.isThreshing and self.rotorFan ~= nil then
rotate(self.rotorFan, dt*0.01, 0, 0);
end;
[/lua]
Bei "0.01" kann ich jeden Wert eingeben, es wird immer die Animation aus der Combine.lua abgespielt, da es sich immer gleich schnell dreht. Auch die Animation mit einem "Backup" der self.rotorFan Variable zu lösen und die originale Variable auf, beispielsweise eine leere Transformgroup zuzuweisen um die Standard Funktion zu umgehen, funktioniert auch nicht. Leider enthält das rotate() keine Variable die man ansteuern könnte um diese dann zu verändern. Gibt es also irgendeine Möglichkeit das ganze zu lösen ohne die xml bzw i3d zu bearbeiten? Zwar könnte man das dann recht einfach lösen, indem man eine komplett neue Variable erstellt und diese dann animiert, jedoch möchte ich das gerne vermeiden und nur per .lua lösen.
So,
ich habe da wieder getestet mit deinen Änderungen, spricht:
[lua]
self.vehicle:setManualUnloading(self.manualUnloading, true);
[/lua]
und
[lua]
if manualUnloading == nil then
[/lua]
Dann kann der Client nicht abladen, Host schon.
Wenn ich aber wieder statt
[lua]if manualUnloading == nil then[/lua]
dass einfüge:
[lua]if manualUnload == nil then[/lua]
klappt es bei beiden ohne logfehler. Leider ist mir aber trotzdem eine Kleinigkeit aufgefallen, die beim Client nicht stimmt. Und zwar wird dort der Hilfetext (F1) "falsch herum" angezeigt. Sprich wenn der Client abladet steht im Hilfetext abladen starten. Beim Host ist es aber richt.
Hier mal der Hilfetext:
[lua]function manualPipe:draw()
if self.pipeOpen and self.manualUnloading then
g_currentMission:addHelpButtonText(g_i18n:getText("Stopdumpinggrain"), InputBinding.ACTIVATE_UNLOADING);
elseif self.pipeOpen then
g_currentMission:addHelpButtonText(g_i18n:getText("Startdumpinggrain"), InputBinding.ACTIVATE_UNLOADING);
end;
end;[/lua]
hier mal die :load function:
[lua]function manualPipe:load(xmlFile)
self.manualUnloading = false;
self.pipeRaycastDistance = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.pipe#raycastDistance"));
self.pipeRaycastDistance = 0.1;
[/lua]
Ich weiß nicht ob die damit was zu tun hat. Aber wieso ist beim Client dann nur der Hilfetext falsch herum? Bei Host und Client wird standardmäßig nicht abgeladen und mit einem Tastendruck auf abladen umgeschaltet.
Also, schon einmal Danke für die ganze Hilfe hier, da bin ich euch echt dankbar
Mitlerweile funktioniert es schon teilweise im MP. Leider wird ständig abgeladen und "self.manualUnloading" wird scheinbar sehr schnell ständig ein- und wieder ausgeschaltet, zumindest laut Hilfetext. Dies betrifft Client und Host. Im SP klapp alles perfekt. Die Log bleibt übrigens bei beiden fehlerfrei.
Aktuelles Setup:
[expander]
[lua]
function manualPipe:readStream(streamId, connection)
local manualUnloading = streamReadBool(streamId)
self:setManualUnloading(manualUnloading, true);
end;
function manualPipe:writeStream(streamId, connection)
streamWriteBool(streamId, self.manualUnloading);
end;
function manualPipe:setManualUnloading(manualUnloading, noEventSend)
if manualUnload == nil then
self.manualUnloading = not self.manualUnloading
else
self.manualUnloading = manualUnload
end;
if self.manualUnloading then
self.pipeRaycastDistance = 6;
else
self.pipeRaycastDistance = 0.1;
end;
manualPipeEvent.sendEvent(self, self.manualUnloading, noEventSend);
end;
[/lua]
in der update-function:
[lua]
if self.isEntered then
if self.pipeOpen and self.getIsPipeUnloadingAllowed then
if self:getIsActive() and self:getIsActiveForInput(false) and not self:hasInputConflictWithSelection() and InputBinding.hasEvent(InputBinding.ACTIVATE_UNLOADING) then
self:setManualUnloading();
end;
end;
end;
[/lua]
und das Event: (eigentlich das selbe was FIAT80-90DT gepostet hat)
[lua]
manualPipeEvent = {};
manualPipeEvent_mt = Class(manualPipeEvent, Event);
InitEventClass(manualPipeEvent, "manualPipeEvent");
function manualPipeEvent:emptyNew()
local self = Event:new(manualPipeEvent_mt );
self.className="manualPipeEvent";
return self;
end;
function manualPipeEvent:new(vehicle, manualUnloading, streamId) --Parameter vergessen! Wir brauchen eine Variable für self.manualUnloading!
local self = manualPipeEvent:emptyNew()
self.vehicle = vehicle;
self.manualUnloading = manualUnloading; -- Gleiche Namenskonventionen für eine bessere Übersichtlichkeit.
return self;
end;
function manualPipeEvent:readStream(streamId, connection)
local id = streamReadInt32(streamId);
self.vehicle = networkGetObject(id);
self.manualUnloading = streamReadBool(streamId);
self:run(connection);
end;
function manualPipeEvent:writeStream(streamId, connection)
streamWriteInt32(streamId, networkGetObjectId(self.vehicle));
streamWriteBool(streamId, self.manualUnloading);
end;
function manualPipeEvent:run(connection)
self.vehicle:setManualUnloading(self.manualUnloading);
if not connection:getIsServer() then
g_server:broadcastEvent(manualPipeEvent:new(self.vehicle, self.manualUnloading), nil, connection, self.vehicle);
end;
end;
function manualPipeEvent.sendEvent(vehicle, manualUnloading, noEventSend)
if noEventSend == nil or noEventSend == false then
if g_server ~= nil then
g_server:broadcastEvent(manualPipeEvent:new(vehicle, manualUnloading), nil, nil, vehicle);
else
g_client:getServerConnection():sendEvent(manualPipeEvent:new(vehicle, manualUnloading));
end;
end;
end;
[/lua]
[/expander]
Ich habe da auch selber noch bischen rumprobiert, aber leider immer mit ähnlichem Ergebnis.
Joa, hast PN von mir, hoffe ich
Hmm auch damit immernoch das selbe Ergebnis:
[lua]local unload = not self.manualUnloading;
self:setManualUnloading(unload);
end;[/lua]
man kanns ein-, aber dann nicht mehr ausschalten.
Okay..
Bei der unload Funktion habe ich aber ein Problem:
[lua]
function manualPipe:setManualUnloading(unload, noEventSend)
self.manualUnloading = unload;
manualPipeEvent.sendEvent(self, unload, noEventSend);
end;
[/lua]
und das hier bei dem Tastendruck:
[lua]
if self.manualUnloading then
self:setManualUnloading(false);
else
self:setManualUnloading(true);
end;
[/lua]
Naja, dann kann ich sogar im SP zwar abladen aktivieren, aber nicht mehr deaktivieren. Ich glaub da steht ich grade auf der Leitung..
Ah, okay. Das mit dem
self:setPipeRaycastDistance(6);
wusste ich jetzt noch nicht. Ich probiere es mal aus und melde mich dann wieder.
Ach, doch etwas vergessen:
[lua]function manualPipe:readStream(streamId, connection)
local unload = streamReadBool(streamId)
self:setManualUnloading(unload, true);
local state = streamReadInt8(streamId);
self:setPipeRaycastDistance(state, true);
end;
function manualPipe:writeStream(streamId, connection)
streamWriteInt8(streamId, self.pipeRaycastDistance);
streamWriteBool(streamId, self.manualUnloading);
end;[/lua]
So hab ich es derzeit drinnen.
Hallöchen,
Bei einem selbst (um-)geschriebenem Script habe ich nun versucht es MP-fähig zu bekommen.
Das Script soll eigentlich die "pipeRaycastDistance" bei Knopfdruck verschieben, um ein manuelles Abladen zu schaffen.
Im SP klappt alles wunderbar. Der Host im MP hat auch keine Probleme. Der Client hat ohne ein "Event" das Problem, dass man zwar die Taste drücken kann, dann aber nichts weiter passiert. Also habe ich mich erstmals mit den Events ausernander gesetzt
Ich liste hier mal die wichtigsten Einträge auf.
In der update function habe ich
[lua] if self:getIsActive() and self:getIsActiveForInput(false) and not self:hasInputConflictWithSelection() and InputBinding.hasEvent(InputBinding.ACTIVATE_UNLOADING) then
self:setManualUnloading()
end;[/lua]
und:
[lua] if not self.isAIThreshing then
if self.pipeOpen then
if self.grainTankFillLevel > 0 then
local trailer, trailerDistance = self:findTrailerToUnload(self.currentGrainTankFruitType);
if trailer == nil then
self:setPipeRaycastDistance()
else
self:setPipeRaycastDistance()
end;
end;
end;
end;[/lua]
dann gibts noch die hier:
[lua]function manualPipe:setManualUnloading(unload, noEventSend)
self.manualUnloading = not self.manualUnloading;
unload = self.manualUnloading;
manualPipeEvent.sendEvent(self, unload, noEventSend);
end;
[/lua]
[lua]function manualPipe:setPipeRaycastDistance(state, noEventSend)
if self.manualUnloading then
self.pipeRaycastDistance = 6;
else
self.pipeRaycastDistance = 0.1;
end;
state = self.pipeRaycastDistance;
manualPipeEvent.sendEvent(self, state, noEventSend);
end;[/lua]
Dann kommt noch das Event:
[lua]
manualPipeEvent = {};
manualPipeEvent_mt = Class(manualPipeEvent, Event);
InitEventClass(manualPipeEvent, "manualPipeEvent");
function manualPipeEvent:emptyNew() -- hoier wir ein leeres Event objekt erzeugt
local self = Event:new(manualPipeEvent_mt );
self.className="manualPipeEvent";
return self;
end;
function manualPipeEvent:new(vehicle, streamId) -- Der konsturktor des Events (erzeugt eben ein neues Event). Wir wollen das vehicle (aufrufer) und die neue richtung speichern bzw. übertragen
local self = manualPipeEvent:emptyNew()
self.vehicle = vehicle;
self.state = state;
self.unload = unload;
return self;
end;
function manualPipeEvent:readStream(streamId, connection)
local id = streamReadInt32(streamId);
self.vehicle = networkGetObject(id);
self.state = streamReadInt8(streamId);
self.unload = streamReadBool(streamId);
self:run(connection);
end;
function manualPipeEvent:writeStream(streamId, connection)
streamWriteInt32(streamId, networkGetObjectId(self.vehicle));
streamWriteInt8(streamId, self.state);
streamWriteBool(streamId, self.unload);
end;
function manualPipeEvent:run(connection)
self.vehicle:setPipeRaycastDistance(self.state, true);
self.vehicle:setManualUnloading(self.unload, true);
if not connection:getIsServer() then
g_server:broadcastEvent(manualPipeEvent:new(self.vehicle, self.state, self.unload), nil, connection, self.vehicle);
end;
end;
function manualPipeEvent.sendEvent(vehicle, state, unload, noEventSend)
if noEventSend == nil or noEventSend == false then
if g_server ~= nil then
g_server:broadcastEvent(manualPipeEvent:new(vehicle, state, unload), nil, nil, vehicle);
else
g_client:getServerConnection():sendEvent(manualPipeEvent:new(vehicle, state, unload));
end;
end;
end;
[/lua]
Naja kommt leider bei Host und Client im MP das hier in der Log:
Zeile 275 ist übrigens
self.vehicle:setPipeRaycastDistance(self.state, true);
aus der :run function des Events.
Im SP ist weiterhin alles sauber.
Ich bin mitlerweile ratlos, vielleicht weiß einer von euch weiter..
Danke für die positiven kommis :
Link vom Drescher wird leider nicht so einfach sein. Da das ein 540er glaub von den ungarn oder polen war und der erst mal generall überholt werden musste. Das ganze Modell war in einem Stück gemodet und musste erst mal auseinander geschnitten werden. Skin musste geändert werden. Log-Fehler mussten auch noch beseitigt werden, da der anscheinend vom 09er konvertiert wurde.(aber schlecht ) Naja und dann halt noch das Animieren vom Korntank und Leiter. Eigentlich würd ich den auch gerne zum Download stellen, nur hab ich keine Ahnung wo ich den/die Urmodder finden kann, wegen Genehmigung und so..
Hier mal was von mir:
Ich hoffe es gefällt euch.