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..