1 | /* |
1 | /* |
2 | * static char *rcsid_plugins_c = |
2 | * static char *rcsid_plugins_c = |
3 | * "$Id: plugins.c,v 1.1.1.2 2006/02/22 18:03:23 elmex Exp $"; |
3 | * "$Id: plugins.c,v 1.10 2006/03/28 16:08:38 root Exp $"; |
4 | */ |
4 | */ |
5 | |
5 | |
6 | /*****************************************************************************/ |
6 | /*****************************************************************************/ |
7 | /* CrossFire, A Multiplayer game for X-windows */ |
7 | /* CrossFire, A Multiplayer game for X-windows */ |
8 | /* */ |
8 | /* */ |
… | |
… | |
127 | |
127 | |
128 | /*****************************************************************************/ |
128 | /*****************************************************************************/ |
129 | /* NEW PLUGIN STUFF STARTS HERE */ |
129 | /* NEW PLUGIN STUFF STARTS HERE */ |
130 | /*****************************************************************************/ |
130 | /*****************************************************************************/ |
131 | |
131 | |
|
|
132 | static void plugin_load_original_map(mapstruct *map) |
|
|
133 | { |
|
|
134 | execute_global_event (EVENT_MAPLOAD, map); |
|
|
135 | } |
|
|
136 | |
|
|
137 | static void plugin_load_temporary_map(mapstruct *map) |
|
|
138 | { |
|
|
139 | execute_global_event (EVENT_MAPIN, map); |
|
|
140 | } |
|
|
141 | |
|
|
142 | static void plugin_clean_temporary_map(mapstruct *map) |
|
|
143 | { |
|
|
144 | execute_global_event (EVENT_MAPCLEAN, map); |
|
|
145 | } |
|
|
146 | |
|
|
147 | static void plugin_object_free(object *ob) |
|
|
148 | { |
|
|
149 | execute_global_event (EVENT_FREE_OB, ob); |
|
|
150 | } |
|
|
151 | |
132 | #ifdef WIN32 |
152 | #ifdef WIN32 |
133 | static const char *plugins_dlerror(void) |
153 | static const char *plugins_dlerror(void) |
134 | { |
154 | { |
135 | static char buf[256]; |
155 | static char buf[256]; |
136 | DWORD err; |
156 | DWORD err; |
… | |
… | |
212 | crossfire_plugin* plugin; |
232 | crossfire_plugin* plugin; |
213 | int rv = 0; |
233 | int rv = 0; |
214 | for (tmp = op->inv; tmp != NULL; tmp = next) { |
234 | for (tmp = op->inv; tmp != NULL; tmp = next) { |
215 | next = tmp->below; |
235 | next = tmp->below; |
216 | if (tmp->type == EVENT_CONNECTOR && tmp->subtype == eventcode) { |
236 | if (tmp->type == EVENT_CONNECTOR && tmp->subtype == eventcode) { |
|
|
237 | #if 0 |
217 | LOG(llevDebug, "********** EVENT HANDLER **********\n"); |
238 | LOG(llevDebug, "********** EVENT HANDLER **********\n"); |
218 | LOG(llevDebug, " - Who am I :%s\n", op->name); |
239 | LOG(llevDebug, " - Who am I :%s\n", op->name); |
219 | if (activator != NULL) |
240 | if (activator != NULL) |
220 | LOG(llevDebug, " - Activator :%s\n", activator->name); |
241 | LOG(llevDebug, " - Activator :%s\n", activator->name); |
221 | if (third != NULL) |
242 | if (third != NULL) |
… | |
… | |
225 | LOG(llevDebug, " - Event plugin :%s\n", tmp->title); |
246 | LOG(llevDebug, " - Event plugin :%s\n", tmp->title); |
226 | if (tmp->slaying != NULL) |
247 | if (tmp->slaying != NULL) |
227 | LOG(llevDebug, " - Event hook :%s\n", tmp->slaying); |
248 | LOG(llevDebug, " - Event hook :%s\n", tmp->slaying); |
228 | if (tmp->name != NULL) |
249 | if (tmp->name != NULL) |
229 | LOG(llevDebug, " - Event options :%s\n", tmp->name); |
250 | LOG(llevDebug, " - Event options :%s\n", tmp->name); |
|
|
251 | #endif |
230 | |
252 | |
231 | if (tmp->title == NULL) { |
253 | if (tmp->title == NULL) { |
232 | object *env = object_get_env_recursive(tmp); |
254 | object *env = object_get_env_recursive(tmp); |
233 | LOG(llevError, "Event object without title at %d/%d in map %s\n", env->x, env->y, env->map->name); |
255 | LOG(llevError, "Event object without title at %d/%d in map %s\n", env->x, env->y, env->map->name); |
234 | send_removed_object(tmp); |
256 | send_removed_object(tmp); |
… | |
… | |
242 | free_object(tmp); |
264 | free_object(tmp); |
243 | } else { |
265 | } else { |
244 | plugin = plugins_find_plugin(tmp->title); |
266 | plugin = plugins_find_plugin(tmp->title); |
245 | if (plugin == NULL) { |
267 | if (plugin == NULL) { |
246 | object *env = object_get_env_recursive(tmp); |
268 | object *env = object_get_env_recursive(tmp); |
247 | LOG(llevError, "The requested plugin doesn't exit: %s at %d/%d in map %s\n", tmp->title, env->x, env->y, env->map->name); |
269 | LOG(llevError, "The requested plugin doesn't exist: %s at %d/%d in map %s\n", tmp->title, env->x, env->y, env->map->name); |
248 | send_removed_object(tmp); |
270 | send_removed_object(tmp); |
249 | remove_ob(tmp); |
271 | remove_ob(tmp); |
250 | free_object(tmp); |
272 | free_object(tmp); |
251 | } else { |
273 | } else { |
252 | int rvt = 0; |
274 | int rvt = 0; |
253 | int *rv; |
275 | int *rv; |
254 | |
276 | |
255 | rv = plugin->eventfunc(&rvt, op, eventcode, activator, third, message, fix, tmp->slaying, tmp->name); |
277 | rv = plugin->eventfunc(&rvt, op, eventcode, activator, third, message, fix, tmp->slaying, tmp->name, tmp); |
256 | return *rv; |
278 | return *rv; |
257 | } |
279 | } |
258 | } |
280 | } |
259 | } |
281 | } |
260 | } |
282 | } |
… | |
… | |
264 | int execute_global_event(int eventcode, ...) |
286 | int execute_global_event(int eventcode, ...) |
265 | { |
287 | { |
266 | va_list args; |
288 | va_list args; |
267 | object* op; |
289 | object* op; |
268 | object* op2; |
290 | object* op2; |
|
|
291 | mapstruct *map; |
269 | player* pl; |
292 | player* pl; |
270 | char* buf; |
293 | char* buf; |
271 | int i, rt; |
294 | int i, rt; |
272 | crossfire_plugin* cp; |
295 | crossfire_plugin* cp; |
273 | if (plugins_list == NULL) |
296 | if (plugins_list == NULL) |
274 | return -1; |
297 | return -1; |
275 | |
298 | |
276 | va_start(args, eventcode); |
299 | va_start(args, eventcode); |
277 | |
300 | |
278 | switch (eventcode) { |
301 | switch (eventcode) { |
279 | case EVENT_BORN: |
|
|
280 | /*BORN: op*/ |
|
|
281 | op = va_arg(args, object*); |
|
|
282 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
283 | if (cp->gevent[eventcode] != NULL) |
|
|
284 | cp->gevent[eventcode](&rt, eventcode, op); |
|
|
285 | } |
|
|
286 | break; |
|
|
287 | |
302 | |
288 | case EVENT_CLOCK: |
303 | case EVENT_CLOCK: |
289 | /*CLOCK: -*/ |
304 | case EVENT_CRASH: |
|
|
305 | case EVENT_TELL: |
|
|
306 | /* no additional arguments */ |
290 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
307 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
291 | if (cp->gevent[eventcode] != NULL) |
308 | if (cp->gevent[eventcode] != NULL) |
292 | cp->gevent[eventcode](&rt, eventcode); |
309 | cp->gevent[eventcode](&rt, eventcode); |
293 | } |
310 | } |
294 | break; |
311 | break; |
295 | |
312 | |
296 | case EVENT_CRASH: |
313 | case EVENT_PLAYER_LOAD: |
|
|
314 | case EVENT_PLAYER_SAVE: |
|
|
315 | /* object, filename */ |
|
|
316 | op = va_arg(args, object*); |
|
|
317 | buf = va_arg(args, char*); |
297 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
318 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
298 | if (cp->gevent[eventcode] != NULL) |
319 | if (cp->gevent[eventcode] != NULL) |
299 | cp->gevent[eventcode](&rt, eventcode); |
320 | cp->gevent[eventcode](&rt, eventcode, op, buf); |
300 | } |
321 | } |
301 | break; |
322 | break; |
302 | |
323 | |
|
|
324 | case EVENT_MAPLOAD: |
|
|
325 | case EVENT_MAPOUT: |
|
|
326 | case EVENT_MAPIN: |
|
|
327 | case EVENT_MAPCLEAN: |
|
|
328 | /* map argument */ |
|
|
329 | map = va_arg(args, mapstruct*); |
|
|
330 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
331 | if (cp->gevent[eventcode] != NULL) |
|
|
332 | cp->gevent[eventcode](&rt, eventcode, map); |
|
|
333 | } |
|
|
334 | break; |
|
|
335 | |
|
|
336 | case EVENT_REMOVE: |
|
|
337 | case EVENT_MAPENTER: |
|
|
338 | case EVENT_MAPLEAVE: |
|
|
339 | case EVENT_BORN: |
303 | case EVENT_PLAYER_DEATH: |
340 | case EVENT_PLAYER_DEATH: |
304 | /*PLAYER_DEATH: op*/ |
341 | case EVENT_FREE_OB: |
|
|
342 | /* op argument */ |
305 | op = va_arg(args, object*); |
343 | op = va_arg(args, object*); |
306 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
344 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
307 | if (cp->gevent[eventcode] != NULL) |
345 | if (cp->gevent[eventcode] != NULL) |
308 | cp->gevent[eventcode](&rt, eventcode, op); |
346 | cp->gevent[eventcode](&rt, eventcode, op); |
309 | } |
347 | } |
… | |
… | |
337 | if (cp->gevent[eventcode] != NULL) |
375 | if (cp->gevent[eventcode] != NULL) |
338 | cp->gevent[eventcode](&rt, eventcode, pl, buf); |
376 | cp->gevent[eventcode](&rt, eventcode, pl, buf); |
339 | } |
377 | } |
340 | break; |
378 | break; |
341 | |
379 | |
342 | case EVENT_MAPENTER: |
|
|
343 | /*MAPENTER: op*/ |
|
|
344 | op = va_arg(args, object*); |
|
|
345 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
346 | if (cp->gevent[eventcode] != NULL) |
|
|
347 | cp->gevent[eventcode](&rt, eventcode, op); |
|
|
348 | } |
|
|
349 | break; |
|
|
350 | |
|
|
351 | case EVENT_MAPLEAVE: |
|
|
352 | /*MAPLEAVE: op*/ |
|
|
353 | op = va_arg(args, object*); |
|
|
354 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
355 | if (cp->gevent[eventcode] != NULL) |
|
|
356 | cp->gevent[eventcode](&rt, eventcode, op); |
|
|
357 | } |
|
|
358 | break; |
|
|
359 | |
|
|
360 | case EVENT_MAPRESET: |
380 | case EVENT_MAPRESET: |
361 | /*MAPRESET: map->path*/ |
381 | /*MAPRESET: map->path*/ |
362 | buf = va_arg(args, char*); |
382 | buf = va_arg(args, char*); |
363 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
383 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
364 | if (cp->gevent[eventcode] != NULL) |
384 | if (cp->gevent[eventcode] != NULL) |
365 | cp->gevent[eventcode](&rt, eventcode, buf); |
385 | cp->gevent[eventcode](&rt, eventcode, buf); |
366 | } |
|
|
367 | break; |
|
|
368 | |
|
|
369 | case EVENT_REMOVE: |
|
|
370 | /*REMOVE: op*/ |
|
|
371 | op = va_arg(args, object*); |
|
|
372 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
373 | if (cp->gevent[eventcode] != NULL) |
|
|
374 | cp->gevent[eventcode](&rt, eventcode, op); |
|
|
375 | } |
386 | } |
376 | break; |
387 | break; |
377 | |
388 | |
378 | case EVENT_SHOUT: |
389 | case EVENT_SHOUT: |
379 | /*SHOUT: op, parms, priority*/ |
390 | /*SHOUT: op, parms, priority*/ |
… | |
… | |
384 | if (cp->gevent[eventcode] != NULL) |
395 | if (cp->gevent[eventcode] != NULL) |
385 | cp->gevent[eventcode](&rt, eventcode, op, buf, i); |
396 | cp->gevent[eventcode](&rt, eventcode, op, buf, i); |
386 | } |
397 | } |
387 | break; |
398 | break; |
388 | |
399 | |
389 | case EVENT_TELL: |
|
|
390 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
391 | if (cp->gevent[eventcode] != NULL) |
|
|
392 | cp->gevent[eventcode](&rt, eventcode); |
|
|
393 | } |
|
|
394 | break; |
|
|
395 | |
|
|
396 | case EVENT_MUZZLE: |
400 | case EVENT_MUZZLE: |
397 | /*MUZZLE: op, parms*/ |
401 | /*MUZZLE: op, parms*/ |
398 | op = va_arg(args, object*); |
402 | op = va_arg(args, object*); |
399 | buf = va_arg(args, char*); |
403 | buf = va_arg(args, char*); |
400 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
404 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
… | |
… | |
426 | f_plug_postinit postfunc; |
430 | f_plug_postinit postfunc; |
427 | f_plug_postinit closefunc; |
431 | f_plug_postinit closefunc; |
428 | int i; |
432 | int i; |
429 | crossfire_plugin* cp; |
433 | crossfire_plugin* cp; |
430 | crossfire_plugin* ccp; |
434 | crossfire_plugin* ccp; |
|
|
435 | |
|
|
436 | load_original_map_callback = plugin_load_original_map; |
|
|
437 | load_temporary_map_callback = plugin_load_temporary_map; |
|
|
438 | clean_temporary_map_callback = plugin_clean_temporary_map; |
|
|
439 | object_free_callback = plugin_object_free; |
431 | |
440 | |
432 | /* Open the plugin lib and load the required functions */ |
441 | /* Open the plugin lib and load the required functions */ |
433 | ptr = plugins_dlopen(libfile); |
442 | ptr = plugins_dlopen(libfile); |
434 | if (ptr == NULL) { |
443 | if (ptr == NULL) { |
435 | LOG(llevError, "Error trying to load %s: %s\n", libfile, plugins_dlerror()); |
444 | LOG(llevError, "Error trying to load %s: %s\n", libfile, plugins_dlerror()); |
… | |
… | |
1397 | rv = op->map; |
1406 | rv = op->map; |
1398 | *type = CFAPI_PMAP; |
1407 | *type = CFAPI_PMAP; |
1399 | break; |
1408 | break; |
1400 | |
1409 | |
1401 | case CFAPI_OBJECT_PROP_COUNT: |
1410 | case CFAPI_OBJECT_PROP_COUNT: |
1402 | rv = &op->count; |
1411 | ri = op->count; rv = &ri; |
1403 | *type = CFAPI_INT; |
1412 | *type = CFAPI_INT; |
1404 | break; |
1413 | break; |
1405 | |
1414 | |
1406 | case CFAPI_OBJECT_PROP_REFCOUNT: |
1415 | case CFAPI_OBJECT_PROP_REFCOUNT: |
1407 | rv = &op->refcount; |
1416 | ri = op->refcount; rv = &ri; |
1408 | *type = CFAPI_INT; |
1417 | *type = CFAPI_INT; |
1409 | break; |
1418 | break; |
1410 | |
1419 | |
1411 | case CFAPI_OBJECT_PROP_NAME: |
1420 | case CFAPI_OBJECT_PROP_NAME: |
1412 | rv = query_name(op); |
1421 | rv = query_name(op); |
… | |
… | |
1471 | rv = &op->speed_left; |
1480 | rv = &op->speed_left; |
1472 | *type = CFAPI_DOUBLE; |
1481 | *type = CFAPI_DOUBLE; |
1473 | break; |
1482 | break; |
1474 | |
1483 | |
1475 | case CFAPI_OBJECT_PROP_NROF: |
1484 | case CFAPI_OBJECT_PROP_NROF: |
1476 | rv = &op->nrof; |
1485 | ri = op->nrof; rv = &ri; |
1477 | *type = CFAPI_INT; |
1486 | *type = CFAPI_INT; |
1478 | break; |
1487 | break; |
1479 | |
1488 | |
1480 | case CFAPI_OBJECT_PROP_DIRECTION: |
1489 | case CFAPI_OBJECT_PROP_DIRECTION: |
1481 | rv = &op->direction; |
1490 | ri = op->direction; rv = &ri; |
1482 | *type = CFAPI_INT; |
1491 | *type = CFAPI_INT; |
1483 | break; |
1492 | break; |
1484 | |
1493 | |
1485 | case CFAPI_OBJECT_PROP_FACING: |
1494 | case CFAPI_OBJECT_PROP_FACING: |
1486 | rv = &op->facing; |
1495 | ri = op->facing; rv = &ri; |
1487 | *type = CFAPI_INT; |
1496 | *type = CFAPI_INT; |
1488 | break; |
1497 | break; |
1489 | |
1498 | |
1490 | case CFAPI_OBJECT_PROP_TYPE: |
1499 | case CFAPI_OBJECT_PROP_TYPE: |
1491 | rv = &op->type; |
1500 | ri = op->type; rv = &ri; |
1492 | *type = CFAPI_INT; |
1501 | *type = CFAPI_INT; |
1493 | break; |
1502 | break; |
1494 | |
1503 | |
1495 | case CFAPI_OBJECT_PROP_SUBTYPE: |
1504 | case CFAPI_OBJECT_PROP_SUBTYPE: |
1496 | rv = &op->subtype; |
1505 | ri = op->subtype; rv = &ri; |
1497 | *type = CFAPI_INT; |
1506 | *type = CFAPI_INT; |
1498 | break; |
1507 | break; |
1499 | |
1508 | |
1500 | case CFAPI_OBJECT_PROP_CLIENT_TYPE: |
1509 | case CFAPI_OBJECT_PROP_CLIENT_TYPE: |
1501 | rv = &op->client_type; |
1510 | ri = op->client_type; rv = &ri; |
1502 | *type = CFAPI_INT; |
1511 | *type = CFAPI_INT; |
1503 | break; |
1512 | break; |
1504 | |
1513 | |
1505 | case CFAPI_OBJECT_PROP_RESIST: |
1514 | case CFAPI_OBJECT_PROP_RESIST: |
1506 | { |
1515 | { |
1507 | int idx; |
1516 | int idx; |
1508 | idx = va_arg(args, int); |
1517 | idx = va_arg(args, int); |
1509 | rv = &op->resist[idx]; |
1518 | ri = op->resist[idx]; rv = &ri; |
1510 | } |
1519 | } |
1511 | *type = CFAPI_INT16; |
1520 | *type = CFAPI_INT; |
1512 | break; |
1521 | break; |
1513 | |
1522 | |
1514 | case CFAPI_OBJECT_PROP_ATTACK_TYPE: |
1523 | case CFAPI_OBJECT_PROP_ATTACK_TYPE: |
1515 | rv = &op->attacktype; |
1524 | ri = op->attacktype; rv = &ri; |
1516 | *type = CFAPI_INT; |
1525 | *type = CFAPI_INT; |
1517 | break; |
1526 | break; |
1518 | |
1527 | |
1519 | case CFAPI_OBJECT_PROP_PATH_ATTUNED: |
1528 | case CFAPI_OBJECT_PROP_PATH_ATTUNED: |
1520 | rv = &op->path_attuned; |
1529 | ri = op->path_attuned; rv = &ri; |
1521 | *type = CFAPI_INT; |
1530 | *type = CFAPI_INT; |
1522 | break; |
1531 | break; |
1523 | |
1532 | |
1524 | case CFAPI_OBJECT_PROP_PATH_REPELLED: |
1533 | case CFAPI_OBJECT_PROP_PATH_REPELLED: |
1525 | rv = &op->path_repelled; |
1534 | ri = op->path_repelled; rv = &ri; |
1526 | *type = CFAPI_INT; |
1535 | *type = CFAPI_INT; |
1527 | break; |
1536 | break; |
1528 | |
1537 | |
1529 | case CFAPI_OBJECT_PROP_PATH_DENIED: |
1538 | case CFAPI_OBJECT_PROP_PATH_DENIED: |
1530 | rv = &op->path_denied; |
1539 | ri = op->path_denied; rv = &ri; |
1531 | *type = CFAPI_INT; |
1540 | *type = CFAPI_INT; |
1532 | break; |
1541 | break; |
1533 | |
1542 | |
1534 | case CFAPI_OBJECT_PROP_MATERIAL: |
1543 | case CFAPI_OBJECT_PROP_MATERIAL: |
1535 | rv = &op->material; |
1544 | ri = op->material; rv = &ri; |
1536 | *type = CFAPI_INT; |
1545 | *type = CFAPI_INT; |
1537 | break; |
1546 | break; |
1538 | |
1547 | |
1539 | case CFAPI_OBJECT_PROP_MATERIAL_NAME: |
1548 | case CFAPI_OBJECT_PROP_MATERIAL_NAME: |
1540 | rv = (char*)op->materialname; |
1549 | rv = (char*)op->materialname; |
1541 | *type = CFAPI_STRING; |
1550 | *type = CFAPI_STRING; |
1542 | break; |
1551 | break; |
1543 | |
1552 | |
1544 | case CFAPI_OBJECT_PROP_MAGIC: |
1553 | case CFAPI_OBJECT_PROP_MAGIC: |
1545 | rv = &op->magic; |
1554 | ri = op->magic; rv = &ri; |
1546 | *type = CFAPI_INT; |
1555 | *type = CFAPI_INT; |
1547 | break; |
1556 | break; |
1548 | |
1557 | |
1549 | case CFAPI_OBJECT_PROP_VALUE: |
1558 | case CFAPI_OBJECT_PROP_VALUE: |
1550 | rv = &op->value; |
1559 | ri = op->value; rv = &ri; |
1551 | *type = CFAPI_INT; |
1560 | *type = CFAPI_INT; |
1552 | break; |
1561 | break; |
1553 | |
1562 | |
1554 | case CFAPI_OBJECT_PROP_LEVEL: |
1563 | case CFAPI_OBJECT_PROP_LEVEL: |
1555 | rv = &op->level; |
1564 | ri = op->level; rv = &ri; |
1556 | *type = CFAPI_INT; |
1565 | *type = CFAPI_INT; |
1557 | break; |
1566 | break; |
1558 | |
1567 | |
1559 | case CFAPI_OBJECT_PROP_LAST_HEAL: |
1568 | case CFAPI_OBJECT_PROP_LAST_HEAL: |
1560 | rv = &op->last_heal; |
1569 | ri = op->last_heal; rv = &ri; |
1561 | *type = CFAPI_INT; |
1570 | *type = CFAPI_INT; |
1562 | break; |
1571 | break; |
1563 | |
1572 | |
1564 | case CFAPI_OBJECT_PROP_LAST_SP: |
1573 | case CFAPI_OBJECT_PROP_LAST_SP: |
1565 | rv = &op->last_sp; |
1574 | ri = op->last_sp; rv = &ri; |
1566 | *type = CFAPI_INT; |
1575 | *type = CFAPI_INT; |
1567 | break; |
1576 | break; |
1568 | |
1577 | |
1569 | case CFAPI_OBJECT_PROP_LAST_GRACE: |
1578 | case CFAPI_OBJECT_PROP_LAST_GRACE: |
1570 | rv = &op->last_grace; |
1579 | ri = op->last_grace; rv = &ri; |
1571 | *type = CFAPI_INT; |
1580 | *type = CFAPI_INT; |
1572 | break; |
1581 | break; |
1573 | |
1582 | |
1574 | case CFAPI_OBJECT_PROP_LAST_EAT: |
1583 | case CFAPI_OBJECT_PROP_LAST_EAT: |
1575 | rv = &op->last_eat; |
1584 | ri = op->last_eat; rv = &ri; |
1576 | *type = CFAPI_INT; |
1585 | *type = CFAPI_INT; |
1577 | break; |
1586 | break; |
1578 | |
1587 | |
1579 | case CFAPI_OBJECT_PROP_INVISIBLE_TIME: |
1588 | case CFAPI_OBJECT_PROP_INVISIBLE_TIME: |
1580 | rv = &op->invisible; |
1589 | ri = op->invisible; rv = &ri; |
1581 | *type = CFAPI_INT; |
1590 | *type = CFAPI_INT; |
1582 | break; |
1591 | break; |
1583 | |
1592 | |
1584 | case CFAPI_OBJECT_PROP_PICK_UP: |
1593 | case CFAPI_OBJECT_PROP_PICK_UP: |
1585 | rv = &op->pick_up; |
1594 | ri = op->pick_up; rv = &ri; |
1586 | *type = CFAPI_INT; |
1595 | *type = CFAPI_INT; |
1587 | break; |
1596 | break; |
1588 | |
1597 | |
1589 | case CFAPI_OBJECT_PROP_ITEM_POWER: |
1598 | case CFAPI_OBJECT_PROP_ITEM_POWER: |
1590 | rv = &op->item_power; |
1599 | ri = op->item_power; rv = &ri; |
1591 | *type = CFAPI_INT; |
1600 | *type = CFAPI_INT; |
1592 | break; |
1601 | break; |
1593 | |
1602 | |
1594 | case CFAPI_OBJECT_PROP_GEN_SP_ARMOUR: |
1603 | case CFAPI_OBJECT_PROP_GEN_SP_ARMOUR: |
1595 | rv = &op->gen_sp_armour; |
1604 | ri = op->gen_sp_armour; rv = &ri; |
1596 | *type = CFAPI_INT; |
1605 | *type = CFAPI_INT; |
1597 | break; |
1606 | break; |
1598 | |
1607 | |
1599 | case CFAPI_OBJECT_PROP_WEIGHT: |
1608 | case CFAPI_OBJECT_PROP_WEIGHT: |
1600 | rv = &op->weight; |
1609 | ri = op->weight; rv = &ri; |
1601 | *type = CFAPI_INT; |
1610 | *type = CFAPI_INT; |
1602 | break; |
1611 | break; |
1603 | |
1612 | |
1604 | case CFAPI_OBJECT_PROP_WEIGHT_LIMIT: |
1613 | case CFAPI_OBJECT_PROP_WEIGHT_LIMIT: |
1605 | rv = &op->weight_limit; |
1614 | ri = op->weight_limit; rv = &ri; |
1606 | *type = CFAPI_INT; |
1615 | *type = CFAPI_INT; |
1607 | break; |
1616 | break; |
1608 | |
1617 | |
1609 | case CFAPI_OBJECT_PROP_CARRYING: |
1618 | case CFAPI_OBJECT_PROP_CARRYING: |
1610 | rv = &op->carrying; |
1619 | ri = op->carrying; rv = &ri; |
1611 | *type = CFAPI_INT; |
1620 | *type = CFAPI_INT; |
1612 | break; |
1621 | break; |
1613 | |
1622 | |
1614 | case CFAPI_OBJECT_PROP_GLOW_RADIUS: |
1623 | case CFAPI_OBJECT_PROP_GLOW_RADIUS: |
1615 | rv = &op->glow_radius; |
1624 | ri = op->glow_radius; rv = &ri; |
1616 | *type = CFAPI_INT; |
1625 | *type = CFAPI_INT; |
1617 | break; |
1626 | break; |
1618 | |
1627 | |
1619 | case CFAPI_OBJECT_PROP_PERM_EXP: |
1628 | case CFAPI_OBJECT_PROP_PERM_EXP: |
1620 | rv = &op->perm_exp; |
1629 | rv = &op->perm_exp; |
… | |
… | |
1635 | rv = op->attacked_by; |
1644 | rv = op->attacked_by; |
1636 | *type = CFAPI_POBJECT; |
1645 | *type = CFAPI_POBJECT; |
1637 | break; |
1646 | break; |
1638 | |
1647 | |
1639 | case CFAPI_OBJECT_PROP_RUN_AWAY: |
1648 | case CFAPI_OBJECT_PROP_RUN_AWAY: |
1640 | rv = &op->run_away; |
1649 | ri = op->run_away; rv = &ri; |
1641 | *type = CFAPI_INT; |
1650 | *type = CFAPI_INT; |
1642 | break; |
1651 | break; |
1643 | |
1652 | |
1644 | case CFAPI_OBJECT_PROP_CHOSEN_SKILL: |
1653 | case CFAPI_OBJECT_PROP_CHOSEN_SKILL: |
1645 | rv = op->chosen_skill; |
1654 | rv = op->chosen_skill; |
1646 | *type = CFAPI_POBJECT; |
1655 | *type = CFAPI_POBJECT; |
1647 | break; |
1656 | break; |
1648 | |
1657 | |
1649 | case CFAPI_OBJECT_PROP_HIDDEN: |
1658 | case CFAPI_OBJECT_PROP_HIDDEN: |
1650 | rv = &op->hide; |
1659 | ri = op->hide; rv = &ri; |
1651 | *type = CFAPI_INT; |
1660 | *type = CFAPI_INT; |
1652 | break; |
1661 | break; |
1653 | |
1662 | |
1654 | case CFAPI_OBJECT_PROP_MOVE_STATUS: |
1663 | case CFAPI_OBJECT_PROP_MOVE_STATUS: |
1655 | rv = &op->move_status; |
1664 | ri = op->move_status; rv = &ri; |
1656 | *type = CFAPI_INT; |
1665 | *type = CFAPI_INT; |
1657 | break; |
1666 | break; |
1658 | |
1667 | |
1659 | case CFAPI_OBJECT_PROP_MOVE_TYPE: |
1668 | case CFAPI_OBJECT_PROP_MOVE_TYPE: |
1660 | rv = &op->attack_movement; |
1669 | ri = op->attack_movement; rv = &ri; |
1661 | *type = CFAPI_INT; |
1670 | *type = CFAPI_INT; |
1662 | break; |
1671 | break; |
1663 | |
1672 | |
1664 | case CFAPI_OBJECT_PROP_SPELL_ITEM: |
1673 | case CFAPI_OBJECT_PROP_SPELL_ITEM: |
1665 | rv = op->spellitem; |
1674 | rv = op->spellitem; |
… | |
… | |
1685 | rv = (char*)op->custom_name; |
1694 | rv = (char*)op->custom_name; |
1686 | *type = CFAPI_STRING; |
1695 | *type = CFAPI_STRING; |
1687 | break; |
1696 | break; |
1688 | |
1697 | |
1689 | case CFAPI_OBJECT_PROP_ANIM_SPEED: |
1698 | case CFAPI_OBJECT_PROP_ANIM_SPEED: |
1690 | rv = &op->anim_speed; |
1699 | ri = op->anim_speed; rv = &ri; |
1691 | *type = CFAPI_INT; |
1700 | *type = CFAPI_INT; |
1692 | break; |
1701 | break; |
1693 | |
1702 | |
1694 | case CFAPI_OBJECT_PROP_FRIENDLY: |
1703 | case CFAPI_OBJECT_PROP_FRIENDLY: |
1695 | ri = is_friendly(op); |
1704 | ri = is_friendly(op); |
… | |
… | |
1716 | rv = &ri; |
1725 | rv = &ri; |
1717 | *type = CFAPI_INT; |
1726 | *type = CFAPI_INT; |
1718 | break; |
1727 | break; |
1719 | |
1728 | |
1720 | case CFAPI_OBJECT_PROP_LUCK: |
1729 | case CFAPI_OBJECT_PROP_LUCK: |
1721 | rv = &op->stats.luck; |
1730 | ri = op->stats.luck; rv = &ri; |
1722 | *type = CFAPI_INT; |
1731 | *type = CFAPI_INT; |
1723 | break; |
1732 | break; |
1724 | |
1733 | |
1725 | case CFAPI_OBJECT_PROP_EXP: |
1734 | case CFAPI_OBJECT_PROP_EXP: |
1726 | rv = &op->stats.exp; |
1735 | rv = &op->stats.exp; |
… | |
… | |
1763 | *type = CFAPI_POBJECT; |
1772 | *type = CFAPI_POBJECT; |
1764 | break; |
1773 | break; |
1765 | |
1774 | |
1766 | case CFAPI_OBJECT_PROP_CHEATER: |
1775 | case CFAPI_OBJECT_PROP_CHEATER: |
1767 | ri = (QUERY_FLAG(op, FLAG_WAS_WIZ)); |
1776 | ri = (QUERY_FLAG(op, FLAG_WAS_WIZ)); |
|
|
1777 | rv = &ri; |
1768 | *type = CFAPI_INT; |
1778 | *type = CFAPI_INT; |
1769 | break; |
1779 | break; |
1770 | |
1780 | |
1771 | case CFAPI_OBJECT_PROP_MERGEABLE: |
1781 | case CFAPI_OBJECT_PROP_MERGEABLE: |
1772 | { |
1782 | { |