1 /* --- Evaluation functions ---
\r
2 UrreBots select items to hunt for based on distance and if the item is valuable to them
\r
3 The returning float is added to the travel distance when searching
\r
4 Higher numbers are crummier
\r
5 -1 means definite unwanted goal*/
\r
12 if (self.ammo_shells > 40)
\r
14 if (self.items & IT_SHOTGUN)
\r
16 if (self.ammo_shells >= 100)
\r
26 if (self.ammo_nails > 120)
\r
28 else if (self.items & IT_UZI)
\r
30 if (self.ammo_nails >= 200)
\r
35 float() RocketsEval =
\r
40 if (self.ammo_rockets > 30)
\r
42 if ((self.items & IT_ROCKET_LAUNCHER) || (self.items & IT_GRENADE_LAUNCHER) || (self.items & IT_HAGAR))
\r
44 if (self.ammo_rockets >= 100)
\r
54 if ((self.items & IT_CRYLINK) || (self.items & IT_NEX) || (self.items & IT_ELECTRO))
\r
56 if (self.ammo_cells >= 100)
\r
61 float() Health5Eval =
\r
65 f2 = self.health * 0.01;
\r
73 float() Health25Eval =
\r
77 f2 = self.health * 0.01;
\r
85 float() Health100Eval =
\r
94 float() Armor5Eval =
\r
100 if (self.health < 50)
\r
105 float() Armor100Eval =
\r
111 if (self.health < 50)
\r
185 float() StrengthEval =
\r
192 return 10; // this is the goal of the gamemode, so we want these things above all else
\r
195 float(entity dompoint) DomPointEval =
\r
197 if (dompoint.enemy.team != self.team)
\r
207 /* --- ItemEvals ---
\r
208 Called at load, to give all pickable items their evaluation function
\r
209 Also assigns their current navnode (makes for faster evaluation)*/
\r
215 e = findchainflags(flags, FL_ITEM);
\r
218 e.goallist = FindCurrentNavNode((e.absmin + e.absmax)*0.5, e.mins, e.maxs);
\r
219 if (e.goallist == world)
\r
221 dprint ("Warning: Found no navnode for item\n");
\r
222 e.evalfunc = BadEval;
\r
226 if (e.netname == "shells")
\r
227 e.evalfunc = ShellsEval;
\r
228 else if (e.netname == "bullets")
\r
229 e.evalfunc = NailsEval;
\r
230 else if (e.netname == "rockets")
\r
231 e.evalfunc = RocketsEval;
\r
232 else if (e.netname == "cells")
\r
233 e.evalfunc = CellsEval;
\r
234 else if (e.netname == "5 Health")
\r
235 e.evalfunc = Health5Eval;
\r
236 else if (e.netname == "25 Health")
\r
237 e.evalfunc = Health25Eval;
\r
238 else if (e.netname == "100 Health")
\r
239 e.evalfunc = Health100Eval;
\r
240 else if (e.netname == "Armor Shard")
\r
241 e.evalfunc = Armor5Eval;
\r
242 else if (e.netname == "Armor")
\r
243 e.evalfunc = Armor100Eval;
\r
244 else if (e.netname == "Uzi")
\r
245 e.evalfunc = UEval;
\r
246 else if (e.netname == "Shotgun")
\r
247 e.evalfunc = SGEval;
\r
248 else if (e.netname == "Grenade Launcher")
\r
249 e.evalfunc = GLEval;
\r
250 else if (e.netname == "Electro")
\r
251 e.evalfunc = EEval;
\r
252 else if (e.netname == "Crylink")
\r
253 e.evalfunc = CLEval;
\r
254 else if (e.netname == "Nex Gun")
\r
255 e.evalfunc = NGEval;
\r
256 else if (e.netname == "Hagar")
\r
257 e.evalfunc = HEval;
\r
258 else if (e.netname == "Rocket Launcher")
\r
259 e.evalfunc = RLEval;
\r
260 else if (e.netname == "Strength Powerup")
\r
261 e.evalfunc = StrengthEval;
\r
262 else if (e.netname == "Invulnerability")
\r
263 e.evalfunc = InvEval;
\r
264 else if (e.classname == "dom_controlpoint")
\r
265 e.evalfunc = DomPointEval;
\r
268 dprint ("Warning: Unknown item\n");
\r
269 e.evalfunc = BadEval;
\r
276 /* --- DistEvalItems ---
\r
277 This function adds the items assigned navnode's travel cost to the item
\r
278 Used for goal evaluation*/
\r
280 void() DistEvalItems =
\r
286 e = findchainflags(flags, FL_ITEM);
\r
289 if (e.flags & FL_ONGROUND)
\r
292 e.goallist = FindCurrentNavNode((e.absmin + e.absmax)*0.5, e.mins, e.maxs);
\r
293 if (e.classname == "droppedweapon")
\r
295 if (e.netname == "Uzi")
\r
296 e.evalfunc = UEval;
\r
297 else if (e.netname == "Shotgun")
\r
298 e.evalfunc = SGEval;
\r
299 else if (e.netname == "Grenade Launcher")
\r
300 e.evalfunc = GLEval;
\r
301 else if (e.netname == "Electro")
\r
302 e.evalfunc = EEval;
\r
303 else if (e.netname == "Crylink")
\r
304 e.evalfunc = CLEval;
\r
305 else if (e.netname == "Nex Gun")
\r
306 e.evalfunc = NGEval;
\r
307 else if (e.netname == "Hagar")
\r
308 e.evalfunc = HEval;
\r
309 else if (e.netname == "Rocket Launcher")
\r
310 e.evalfunc = RLEval;
\r
313 dprint ("Warning: Unknown item\n");
\r
314 e.evalfunc = BadEval;
\r
318 e.evalfunc = RuneEval;
\r
321 dprint ("Warning: Unknown item\n");
\r
322 e.evalfunc = BadEval;
\r
326 v = e.absmin + e.absmax * 0.5;
\r
327 f = vlen(v - e.goallist.pointl);
\r
328 e.costl = e.goallist.costl + f;
\r