LUADOC - Farming Simulator 19

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

getNPCByIndex

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

getNPCByName

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

getRandomIndex

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

getRandomNPC

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

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

loadFromXMLFile

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

loadMapData

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

loadNPCs

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

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
75function NPCManager:saveToXMLFile(xmlFilename)
76 -- save npcs to xml
77 local xmlFile = createXMLFile("npcsXML", xmlFilename, "npcs")
78 if xmlFile ~= nil then
79 for k, npc in ipairs(self.indexToNpc) do
80 local npcKey = string.format("npcs.npc(%d)", k-1)
81 setXMLString(xmlFile, npcKey.."#name", npc.name)
82 setXMLInt(xmlFile, npcKey.."#finishedMissions", npc.finishedMissions)
83 end
84
85 saveXMLFile(xmlFile)
86 delete(xmlFile)
87
88 return true
89 end
90
91 return false
92end