Lua call stack

Eure Foren für alle Diskussionen rund ums Thema Modding.
Der Knobonaut
Posts: 4
Joined: Sun Mar 19, 2017 5:28 pm

Lua call stack

Post by Der Knobonaut »

Hallo, ich habe ein Problem beim konvertieren vom Kroeger_Agroliner_SMK_34 aus dem LS15. Andere Fehler wurden schon behoben nur das Problem mit der WarningSigns Lua Datei bleibt.

Hier die Log:
GIANTS Engine Runtime 7.0.0 (14222) 64bit (Build Date: Feb 17 2017)
Copyright (c) 2008-2016, GIANTS Software GmbH (giants-software.com), All Rights Reserved.
Copyright (c) 2003-2016, Christian Ammann and Stefan Geiger, All Rights Reserved.
Application: FarmingSimulator2017
Main System
CPU: AMD Phenom(tm) II X4 945 Processor
Memory: 8191 MB
OS: Windows NT 6.1 64-bit
Physics System
Version: 5.9.5
Thread(s): 2
Input System
Keyboard enabled
Mouse enabled
Gamepad/Joystick enabled
Force Feedback disabled
Audio System
Driver: OpenAL
Version: 1.1
Device: Generic Software
Render System
Driver: Direct 3D 11
Card Vendor: AMD/ATI
Renderer: AMD Radeon (TM) R7 370 Series
Version: 21.19.413.0 (25.1.2017)
Revision: 129
Feature level: DirectX 11 ON
Info: Effective window resolution 1600 x 900
Started 2 threads for threadpool 'Render threadpool'
Hardware Profile
Level: Custom Medium
View Distance Factor: 1.000000
Shadow Quality: 1.000000 Size: 2048 Filter-Size: 4
Shader Quality: 1
Skip Mipmaps: 1
LOD Distance Factor: 1.000000
Terrain LOD Distance Factor: 1.000000
Terrain Normal Mapping: Yes
Foliage View Distance Factor: 1.000000
Foliage Density: 0.500000
Volume Mesh Tessellation Factor: 1.000000
Tyre Tracks Segments Factor: 1.000000
Max. Number of Shadow Lights: 1
Max. Number of Lights: 512
Max. Number of Lights Per Cluster: 32
MSAA: 0
Farming Simulator 17 (Steam)
Version: 1.4.4.0 1.4.4RC8
Available Languages: en de jp pl cz fr es ru it pt hu nl cs ct br tr ro kr
Language: de
Time: 2017-10-04 14:26:04
Register configuration 'inputAttacherJoint'
Register configuration 'attacherJoint'
Register configuration 'frontloader'
Register configuration 'motor'
Register configuration 'baseColor'
Register configuration 'wheel'
Register configuration 'rimColor'
Register configuration 'design'
Register configuration 'designColor'
Register configuration 'vehicleType'
Game vehicle types loaded
Load mod: FS17_challengerMT700EFieldViper (Version: 1.0.0.0)
Load mod: FS17_valtraTSeriesCowEdition (Version: 1.0.0.0)
Load mod: Kroeger_Agroliner_SMK_34_converted (Version: 1.0.0.0)
Warning: Only zip mods are supported in multiplayer. You need to zip the mod Kroeger_Agroliner_SMK_34_converted to use it in multiplayer.
Register vehicle type: Kroeger_Agroliner_SMK_34_converted.smk34
dataS/cameraPath01.i3d (0.29) ms
dataS/cameraPath02.i3d (0.25) ms
dataS/cameraPath03.i3d (0.18) ms
data/sky/skyUS_day_night.i3d (15.50) ms
data/sky/rain.i3d (0.70) ms
data/sky/hail.i3d (0.44) ms
data/sky/dust.i3d (0.35) ms
data/maps/map01.i3d (2002.39) ms
data/objects/basketball/basketball.i3d (1.04) ms
Disabled withering
C:/Users/Administrator/Documents/My Games/FarmingSimulator2017/mods/Kroeger_Agroliner_SMK_34_converted/sigaDuo1.i3d (23.63) ms
C:/Users/Administrator/Documents/My Games/FarmingSimulator2017/mods/Kroeger_Agroliner_SMK_34_converted/sigaUno1.i3d (2.32) ms
data/vehicles/steerable/jcb/jcbFastrac8000.i3d (52.70) ms
data/objects/bigBagContainer/bigBagContainerSeeds.i3d (3.52) ms
data/objects/pallets/fertilizerTank.i3d (2.29) ms
data/objects/bigBagContainer/bigBagContainerFertilizer.i3d (2.10) ms
data/placeables/shelters/vehicleShelter.i3d (1.71) ms
data/placeables/shelters/storageShelter01.i3d (7.71) ms
data/placeables/shelters/storageShelter02.i3d (3.28) ms
data/vehicles/train/locomotive.i3d (27.92) ms
data/vehicles/train/wagonTimber.i3d (13.07) ms
data/vehicles/train/wagonWoodChips.i3d (14.34) ms
data/vehicles/train/wagonGrain.i3d (13.72) ms
data/vehicles/train/wagonSugarbeets.i3d (15.31) ms
dataS2/character/player/player01.i3d (660.27) ms
C:/Users/Administrator/Documents/My Games/FarmingSimulator2017/mods/Kroeger_Agroliner_SMK_34_converted/SMK341.i3d (277.74) ms
Warning: Old shape file format version found 'unloadingBack.i3d.shapes'.
Warning (LUA): 'getXMLString': Argument 1 has wrong type. Expected: Int. Actual: Nil
..\..\..\src\base\scripting\lua\LuaScriptSystem.cpp (640): expectedType == Value::VoidType
LUA call stack:
=C:/Users/Administrator/Documents/My Games/FarmingSimulator2017/mods/Kroeger_Agroliner_SMK_34_converted/Scripts/WarningSigns.lua (24) : getXMLString
dataS/scripts/vehicles/Vehicle.lua (627)
dataS/scripts/BaseMission.lua (767) : load
dataS/scripts/BaseMission.lua (914) : loadVehicle
dataS/scripts/shop/BuyVehicleEvent.lua (88) : loadVehiclesAtPlace
dataS/scripts/network/Connection.lua (77) : run
dataS/scripts/gui/ShopScreen.lua (1035) : sendEvent
dataS/scripts/gui/ShopConfigScreen.lua (467) : update
dataS/scripts/gui/elements/Gui.lua (306) : update
dataS/scripts/main.lua (1872) : update


Hier die Xml:

Code: Select all

--
-- WarningSigns
--
-- written by fruktor, visit: http://www.eifok-team.de
--

WarningSigns = {};

WarningSigns.modDir = g_currentModDirectory;

function WarningSigns.prerequisitesPresent(specializations)
    return true; 
end;

function WarningSigns:load(xmlFile)
	
	self.playerCallback = SpecializationUtil.callSpecializationsFunction("playerCallback"); 
	self.setSign = SpecializationUtil.callSpecializationsFunction("setSign"); 
	
	self.ws = {};
	
	local i=0;
	while true do
		local str = getXMLString(xmlFile, string.format("vehicle.warningSigns.sign(%d)#index", i));
		if str == nil then
			break;
		end;
		local node = Utils.indexToObject(self.components, str);
		if node == nil then
			print("[Error::WarningSigns] node for "..tostring(str).." does not exist");
			break;
		end;
		local trigger = Utils.indexToObject( self.components, getXMLString(xmlFile, string.format("vehicle.warningSigns.sign(%d)#trigger", i)) );
		if trigger == nil then
			print("[Error::WarningSigns] node is OK, but trigger could not be located. Check line "..tostring(i+1).." in your vehicle.xml");
		end;
		local isVis = getXMLBool(xmlFile, string.format("vehicle.warningSigns.sign(%d)#isVisible", i))
		self.ws[i+1] = {};
		self.ws[i+1].node = node;
		self.ws[i+1].trigger = trigger;
		self.ws[i+1].isVis = isVis;
		self.ws[i+1].plIR = false;
		
		addTrigger( trigger, "playerCallback", self );				
		i = i + 1;
	end;
	
end;

function WarningSigns:delete()
	for i,j in pairs(self.ws) do
		if j.trigger ~= nil then
			removeTrigger(j.trigger);
		end;
	end;
end;

function WarningSigns:readStream(streamId, connection)
	for i,j in pairs(self.ws) do
		local state = streamReadBool(streamId);
		self:setSign(i, state, true);
	end;
end;

function WarningSigns:writeStream(streamId, connection)
	for i,j in pairs(self.ws) do
		streamWriteBool(streamId, j.isVis);
	end;
end;


function WarningSigns:loadFromAttributesAndNodes(xmlFile, key, resetVehicles)
	if not resetVehicles then
		for i,j in pairs(self.ws) do
			local s = Utils.getNoNil( getXMLBool(xmlFile, key..string.format("#warningSign%d",i) ), false);
			self:setSign(i, s, true);
		end;
	end; 
    return BaseMission.VEHICLE_LOAD_OK;
end;

function WarningSigns:getSaveAttributesAndNodes(nodeIdent)	
    local attributes = '';
	for i,j in pairs(self.ws) do
		attributes = attributes .. string.format('warningSign%d="%s" ', i, tostring(j.isVis));
	end;
    return attributes, nil;
end;

function WarningSigns:mouseEvent(posX, posY, isDown, isUp, button)
end;

function WarningSigns:keyEvent(unicode, sym, modifier, isDown)
end;

function WarningSigns:update(dt)
	local plIR = false;
	local id = 0;
	for i,j in pairs(self.ws) do
		if j.plIR then
			id = i;
			plIR = true;
			break;
		end;
	end;
	
	if plIR then
		g_currentMission:addHelpButtonText( g_i18n:getText("SET_WARNING_SIGN"), InputBinding.SET_WARNING_SIGN );	
		--renderText( g_currentMission.hudAttachmentOverlay.x-0.01, g_currentMission.hudAttachmentOverlay.y, 0.02, g_i18n:getText("SHOW_WARNING_SIGN") );
		setTextColor(1.0, 1.0, 1.0, 1.0);
		setTextAlignment(RenderText.ALIGN_LEFT); 		
		renderText(0.5, 0.09, 0.02, g_i18n:getText("SET_WARNING_SIGN") );
		if InputBinding.hasEvent(InputBinding.SET_WARNING_SIGN)then
			self:setSign(id, not self.ws[id].isVis);
		end
	end;
end;

function WarningSigns:onLeave()
end;

function WarningSigns:draw()
end;

function WarningSigns:playerCallback(triggerId, otherId, onEnter, onLeave, onStay)
--print("function WarningSigns:playerCallback("..tostring(triggerId)..", "..tostring(otherId)..", "..tostring(onEnter)..", "..tostring(onLeave)..", "..tostring(onStay));
	
	local id = 0;
	for i,j in pairs(self.ws) do
		if j.trigger == triggerId then
			id = i;
			break;
		end;
	end;
	
	if id ~= 0 then
		if onEnter and g_currentMission.controlPlayer and g_currentMission.player ~= nil and otherId == g_currentMission.player.rootNode then
			self.ws[id].plIR = true;
		elseif onLeave then
			self.ws[id].plIR = false;
		end;
	end
	
end;


function WarningSigns:setSign(id, state, noEventSend)
--print("function WarningSigns:setSign("..tostring(id)..", "..tostring(state)..", "..tostring(noEventSend));
	SetSignEvent.sendEvent(self, id, state, noEventSend);
	self.ws[id].isVis = state;
	setVisibility(self.ws[id].node, state);
end;




--
--
--
--
--
SetSignEvent = {};
SetSignEvent_mt = Class(SetSignEvent, Event);

InitEventClass(SetSignEvent, "SetSignEvent");

function SetSignEvent:emptyNew()
    local self = Event:new(SetSignEvent_mt);
    self.className="SetSignEvent";
    return self;
end;

function SetSignEvent:new(object, id, state)
    local self = SetSignEvent:emptyNew()
    self.object = object;
	self.id = id;
	self.state = state;
    return self;
end;

function SetSignEvent:readStream(streamId, connection)
    local id = streamReadInt32(streamId);
    self.object = networkGetObject(id);
	self.id = streamReadInt32(streamId);
	self.state = streamReadBool(streamId);
    self:run(connection);
end;

function SetSignEvent:writeStream(streamId, connection)
    streamWriteInt32(streamId, networkGetObjectId(self.object));
	streamWriteInt32(streamId, self.id);
	streamWriteBool(streamId, self.state);
end;

function SetSignEvent:run(connection)
    self.object:setSign(self.id, self.state, true);
    if not connection:getIsServer() then
        g_server:broadcastEvent(SetSignEvent:new(self.object, self.id, self.state), nil, connection, self.object);
    end;
end;

function SetSignEvent.sendEvent(vehicle, id, state, noEventSend)
	if noEventSend == nil or noEventSend == false then
		if g_server ~= nil then
			g_server:broadcastEvent(SetSignEvent:new(vehicle, id, state), nil, nil, vehicle);
		else
			g_client:getServerConnection():sendEvent(SetSignEvent:new(vehicle, id, state));
		end;
	end;
end;

Hoffe auf schnelle Hilfe, Danke im vorraus.

Edit don_apple: log.txt in Spoiler gepackt und XML als code markiert zwecks besserer Thread Lesbarkeit.
User avatar
Aranea
Posts: 289
Joined: Thu Oct 06, 2016 9:51 pm
Location: meine Höhle

Re: Lua call stack

Post by Aranea »

der kommt wahrscheinlich daher, weil die load function im LS17 etwas verändert werden muss, das argument xmlFile gibt es so nicht mehr.

die Frage, die ich mir stelle ist allerdings wozu genau du das Script für diesen Wagen benötigst.
wäre es nicht einfacher mit Standart scripten zu arbeiten, wie zB. foldable o.ä. je nach dem was du machen willst und wie
MfG
die Spinne :hi:
FS modder & scripter
quality modding and support since 2012
viewtopic.php?f=884&t=115656
User avatar
da-hoffi
Posts: 519
Joined: Fri Aug 15, 2014 8:47 am
Contact:

Re: Lua call stack

Post by da-hoffi »

Nimmste einfach die hier: https://www.dropbox.com/s/bwrkplu03ui34 ... s.lua?dl=0

Aber Aranea hat schon Recht. grundlegend müsste beim load xmlFile erstmal durch Savegame ersetzt werden.
Was jetzt noch anders ist, hab ich mir aber nicht im details angesehen
Post Reply