LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

NPCManager

Description
This class handles all npcs
Parent
AbstractManager
Functions

addNPC

Description
Adds a new npc
Definition
addNPC(string name, string title, string imageFilename, string baseDir)
Arguments
stringnamenpc index name
stringtitlenpc real name
stringimageFilenamenpc image filename
stringbaseDirthe base directory
Return Values
booleantrueif added successful else false
Code
140function NPCManager:addNPC(name, title, imageFilename, baseDir, isBaseType)
141 if not ClassUtil.getIsValidIndexName(name) then
142 print("Warning: '"..tostring(name).."' is not a valid name for a npc. Ignoring npc!")
143 return nil
144 end
145
146 name = name:upper()
147
148 if isBaseType and self.nameToIndex[name] ~= nil then
149 print("Warning: NPC '"..tostring(name).."' already exists. Ignoring npc!")
150 return nil
151 end
152
153 local npc = self.npcs[name]
154 if npc == nil then
155 if title == nil or title == "" then
156 print("Warning: '"..tostring(title).."' is not a valid title for a npc. Ignoring npc!")
157 return nil
158 end
159 if imageFilename == nil or imageFilename == "" then
160 print("Warning: Missing npc image file for npc '"..tostring(name).."'. Ignoring npc!")
161 return nil
162 end
163
164 self.numNpcs = self.numNpcs + 1
165 npc = {}
166 npc.name = name
167 npc.title = g_i18n:convertText(title)
168 npc.index = self.numNpcs
169 npc.imageFilename = Utils.getFilename(imageFilename, baseDir)
170 npc.finishedMissions = 0
171
172 self.npcs[name] = npc
173 self.nameToIndex[name] = self.numNpcs
174 self.indexToNpc[self.numNpcs] = npc
175 else
176 if title ~= nil and title ~= "" then
177 npc.title = g_i18n:convertText(title)
178 end
179 if imageFilename ~= nil and imageFilename ~= "" then
180 npc.imageFilename = Utils.getFilename(imageFilename, baseDir)
181 end
182 end
183
184 return npc
185end

getNPCByIndex

Description
Gets a npc by index
Definition
getNPCByIndex(integer index)
Arguments
integerindexthe npc index
Return Values
tablenpcthe npc object
Code
205function NPCManager:getNPCByIndex(index)
206 if index ~= nil then
207 return self.indexToNpc[index]
208 end
209 return nil
210end

getNPCByName

Description
Gets a npc by index name
Definition
getNPCByName(string name)
Arguments
stringnamethe npc index name
Return Values
tablenpcthe npc object
Code
216function NPCManager:getNPCByName(name)
217 if name ~= nil then
218 name = name:upper()
219 return self.npcs[name]
220 end
221 return nil
222end

getRandomIndex

Description
Gets a random npc index
Definition
getRandomIndex()
Return Values
integernpcIndexa random npc index
Code
197function NPCManager:getRandomIndex()
198 return math.random(1, self.numNpcs)
199end

getRandomNPC

Description
Gets a random npc
Definition
getRandomNPC()
Return Values
tablenpca random npc object
Code
190function NPCManager:getRandomNPC()
191 return self.indexToNpc[self:getRandomIndex()]
192end

initDataStructures

Description
Initialize data structures
Definition
initDataStructures()
Code
23function NPCManager:initDataStructures()
24 self.numNpcs = 0
25 self.npcs = {}
26 self.nameToIndex = {}
27 self.indexToNpc = {}
28end

loadDefaultTypes

Description
Definition
loadDefaultTypes()
Code
32function NPCManager:loadDefaultTypes(missionInfo, baseDirectory)
33 local xmlFile = loadXMLFile("npc", "data/maps/maps_npcs.xml")
34 if xmlFile ~= 0 then
35 self:loadNPCs(xmlFile, missionInfo, baseDirectory, true)
36 delete(xmlFile)
37 end
38end

loadFromXMLFile

Description
Load data from xml savegame file
Definition
loadFromXMLFile(string filename)
Arguments
stringfilenamexml filename
Code
100function NPCManager:loadFromXMLFile(xmlFilename)
101 if xmlFilename == nil then
102 return false
103 end
104
105 local xmlFile = loadXMLFile("npcXML", xmlFilename)
106
107 if xmlFile == 0 then
108 return false
109 end
110
111 local i = 0
112 while true do
113 local key = string.format("npcs.npc(%d)", i)
114 if not hasXMLProperty(xmlFile, key) then
115 break
116 end
117
118 local name = getXMLString(xmlFile, key.."#name")
119 local npc = self:getNPCByName(name)
120 if npc ~= nil then
121 npc.finishedMissions = Utils.getNoNil(getXMLInt(xmlFile, key.."#finishedMissions"), 0)
122 else
123 print("Warning: Npc '"..tostring(name).."' not found!")
124 end
125 i = i + 1
126 end
127
128 delete(xmlFile)
129
130 return true
131end

loadMapData

Description
Load data on map load
Definition
loadMapData()
Return Values
booleantrueif loading was successful else false
Code
43function NPCManager:loadMapData(xmlFile, missionInfo, baseDirectory)
44 NPCManager:superClass().loadMapData(self)
45
46 self:loadDefaultTypes(missionInfo, baseDirectory)
47 return XMLUtil.loadDataFromMapXML(xmlFile, "npcs", baseDirectory, self, self.loadNPCs, missionInfo, baseDirectory)
48end

loadNPCs

Description
Load data on map load
Definition
loadNPCs()
Return Values
booleantrueif loading was successful else false
Code
53function NPCManager:loadNPCs(xmlFile, missionInfo, baseDirectory, isBaseType)
54
55 local i = 0
56 while true do
57 local key = string.format("map.npcs.npc(%d)", i)
58 if not hasXMLProperty(xmlFile, key) then
59 break
60 end
61
62 local name = getXMLString(xmlFile, key.."#name")
63 local title = getXMLString(xmlFile, key.."#title")
64 local imageFilename = getXMLString(xmlFile, key.."#imageFilename")
65
66 self:addNPC(name, title, imageFilename, baseDirectory, isBaseType)
67
68 i = i + 1
69 end
70
71 return true
72end

new

Description
Creating manager
Definition
new()
Return Values
tableinstanceinstance of object
Code
16function NPCManager.new(customMt)
17 local self = AbstractManager.new(customMt or NPCManager_mt)
18 return self
19end

saveToXMLFile

Description
Write data to savegame file
Definition
saveToXMLFile(string xmlFilename)
Arguments
stringxmlFilenamefile path
Return Values
booleantrueif loading was successful else false
Code
78function NPCManager:saveToXMLFile(xmlFilename)
79 -- save npcs to xml
80 local xmlFile = createXMLFile("npcsXML", xmlFilename, "npcs")
81 if xmlFile ~= nil then
82 for k, npc in ipairs(self.indexToNpc) do
83 local npcKey = string.format("npcs.npc(%d)", k-1)
84 setXMLString(xmlFile, npcKey.."#name", npc.name)
85 setXMLInt(xmlFile, npcKey.."#finishedMissions", npc.finishedMissions)
86 end
87
88 saveXMLFile(xmlFile)
89 delete(xmlFile)
90
91 return true
92 end
93
94 return false
95end