1 | /* |
1 | /* |
2 | * static char *rcsid_plugins_c = |
2 | * static char *rcsid_plugins_c = |
3 | * "$Id: plugins.c,v 1.5 2006/02/22 18:53:56 elmex Exp $"; |
3 | * "$Id: plugins.c,v 1.13 2006/08/12 11:51:38 elmex 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 | |
132 | static void plugin_object_free(object *ob) |
147 | static void plugin_object_free(object *ob) |
133 | { |
148 | { |
134 | execute_global_event (EVENT_FREE_OB, ob); |
149 | execute_global_event (EVENT_FREE_OB, ob); |
135 | } |
150 | } |
136 | |
151 | |
… | |
… | |
257 | free_object(tmp); |
272 | free_object(tmp); |
258 | } else { |
273 | } else { |
259 | int rvt = 0; |
274 | int rvt = 0; |
260 | int *rv; |
275 | int *rv; |
261 | |
276 | |
262 | 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); |
263 | return *rv; |
278 | return *rv; |
264 | } |
279 | } |
265 | } |
280 | } |
266 | } |
281 | } |
267 | } |
282 | } |
… | |
… | |
271 | int execute_global_event(int eventcode, ...) |
286 | int execute_global_event(int eventcode, ...) |
272 | { |
287 | { |
273 | va_list args; |
288 | va_list args; |
274 | object* op; |
289 | object* op; |
275 | object* op2; |
290 | object* op2; |
|
|
291 | object* op3; |
|
|
292 | mapstruct *map; |
276 | player* pl; |
293 | player* pl; |
277 | char* buf; |
294 | char* buf; |
278 | int i, rt; |
295 | int i, rt, retval = 0, *tmpretval = NULL, fix; |
279 | crossfire_plugin* cp; |
296 | crossfire_plugin* cp; |
280 | if (plugins_list == NULL) |
297 | if (plugins_list == NULL) |
281 | return -1; |
298 | return -1; |
282 | |
299 | |
283 | va_start(args, eventcode); |
300 | va_start(args, eventcode); |
… | |
… | |
289 | case EVENT_TELL: |
306 | case EVENT_TELL: |
290 | /* no additional arguments */ |
307 | /* no additional arguments */ |
291 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
308 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
292 | if (cp->gevent[eventcode] != NULL) |
309 | if (cp->gevent[eventcode] != NULL) |
293 | cp->gevent[eventcode](&rt, eventcode); |
310 | cp->gevent[eventcode](&rt, eventcode); |
|
|
311 | } |
|
|
312 | break; |
|
|
313 | |
|
|
314 | case EVENT_PLAYER_LOAD: |
|
|
315 | case EVENT_PLAYER_SAVE: |
|
|
316 | /* object, filename */ |
|
|
317 | op = va_arg(args, object*); |
|
|
318 | buf = va_arg(args, char*); |
|
|
319 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
320 | if (cp->gevent[eventcode] != NULL) |
|
|
321 | cp->gevent[eventcode](&rt, eventcode, op, buf); |
|
|
322 | } |
|
|
323 | break; |
|
|
324 | |
|
|
325 | case EVENT_MAPLOAD: |
|
|
326 | case EVENT_MAPOUT: |
|
|
327 | case EVENT_MAPIN: |
|
|
328 | case EVENT_MAPCLEAN: |
|
|
329 | /* map argument */ |
|
|
330 | map = va_arg(args, mapstruct*); |
|
|
331 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
332 | if (cp->gevent[eventcode] != NULL) |
|
|
333 | cp->gevent[eventcode](&rt, eventcode, map); |
294 | } |
334 | } |
295 | break; |
335 | break; |
296 | |
336 | |
297 | case EVENT_REMOVE: |
337 | case EVENT_REMOVE: |
298 | case EVENT_MAPENTER: |
338 | case EVENT_MAPENTER: |
… | |
… | |
375 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
415 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
376 | if (cp->gevent[eventcode] != NULL) |
416 | if (cp->gevent[eventcode] != NULL) |
377 | cp->gevent[eventcode](&rt, eventcode, op, buf); |
417 | cp->gevent[eventcode](&rt, eventcode, op, buf); |
378 | } |
418 | } |
379 | break; |
419 | break; |
|
|
420 | |
|
|
421 | case EVENT_FIND_UNARMED_SKILL: |
|
|
422 | op = va_arg(args, object*); |
|
|
423 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
424 | if (cp->gevent[eventcode] != NULL) |
|
|
425 | if ((tmpretval = cp->gevent[eventcode](&rt, eventcode, op)) && *tmpretval > 0) { |
|
|
426 | retval = *tmpretval; |
|
|
427 | } |
|
|
428 | } |
|
|
429 | break; |
|
|
430 | |
|
|
431 | case EVENT_PLAYER_USE_SKILL: |
|
|
432 | case EVENT_MONSTER_USE_SKILL: |
|
|
433 | op = va_arg(args, object*); |
|
|
434 | op2 = va_arg(args, object*); |
|
|
435 | op3 = va_arg(args, object*); |
|
|
436 | fix = va_arg(args, int); |
|
|
437 | buf = va_arg(args, char*); |
|
|
438 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
439 | if (cp->gevent[eventcode] != NULL) |
|
|
440 | if ((tmpretval = cp->gevent[eventcode](&rt, eventcode, op, op2, op3, fix, buf)) && *tmpretval != 0) { |
|
|
441 | retval = *tmpretval; |
|
|
442 | } |
|
|
443 | } |
|
|
444 | break; |
|
|
445 | |
|
|
446 | case EVENT_CAST_SPELL: |
|
|
447 | op = va_arg(args, object*); |
|
|
448 | op2 = va_arg(args, object*); |
|
|
449 | op3 = va_arg(args, object*); |
|
|
450 | fix = va_arg(args, int); |
|
|
451 | buf = va_arg(args, char*); |
|
|
452 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
453 | if (cp->gevent[eventcode] != NULL) |
|
|
454 | if ((tmpretval = cp->gevent[eventcode](&rt, eventcode, op, op2, op3, fix, buf)) && *tmpretval != 0) { |
|
|
455 | retval = *tmpretval; |
|
|
456 | break; /* The first who did something wins! */ |
|
|
457 | } |
|
|
458 | } |
|
|
459 | break; |
|
|
460 | |
|
|
461 | case EVENT_EXTCMD: |
|
|
462 | /*KICK: op, parms*/ |
|
|
463 | pl = va_arg (args, player *); |
|
|
464 | buf = va_arg (args, char *); |
|
|
465 | i = va_arg (args, int); |
|
|
466 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
467 | if (cp->gevent[eventcode] != NULL) |
|
|
468 | cp->gevent[eventcode](&rt, eventcode, pl, buf, i, buf); |
|
|
469 | } |
|
|
470 | break; |
380 | } |
471 | } |
381 | va_end(args); |
472 | va_end(args); |
|
|
473 | |
382 | return 0; |
474 | return retval; |
383 | } |
475 | } |
384 | |
476 | |
385 | int plugins_init_plugin(const char* libfile) |
477 | int plugins_init_plugin(const char* libfile) |
386 | { |
478 | { |
387 | LIBPTRTYPE ptr; |
479 | LIBPTRTYPE ptr; |
… | |
… | |
392 | f_plug_postinit closefunc; |
484 | f_plug_postinit closefunc; |
393 | int i; |
485 | int i; |
394 | crossfire_plugin* cp; |
486 | crossfire_plugin* cp; |
395 | crossfire_plugin* ccp; |
487 | crossfire_plugin* ccp; |
396 | |
488 | |
|
|
489 | load_original_map_callback = plugin_load_original_map; |
|
|
490 | load_temporary_map_callback = plugin_load_temporary_map; |
|
|
491 | clean_temporary_map_callback = plugin_clean_temporary_map; |
397 | object_free_callback = plugin_object_free; |
492 | object_free_callback = plugin_object_free; |
398 | |
493 | |
399 | /* Open the plugin lib and load the required functions */ |
494 | /* Open the plugin lib and load the required functions */ |
400 | ptr = plugins_dlopen(libfile); |
495 | ptr = plugins_dlopen(libfile); |
401 | if (ptr == NULL) { |
496 | if (ptr == NULL) { |
… | |
… | |
1364 | rv = op->map; |
1459 | rv = op->map; |
1365 | *type = CFAPI_PMAP; |
1460 | *type = CFAPI_PMAP; |
1366 | break; |
1461 | break; |
1367 | |
1462 | |
1368 | case CFAPI_OBJECT_PROP_COUNT: |
1463 | case CFAPI_OBJECT_PROP_COUNT: |
1369 | rv = &op->count; |
1464 | ri = op->count; rv = &ri; |
1370 | *type = CFAPI_INT; |
1465 | *type = CFAPI_INT; |
1371 | break; |
1466 | break; |
1372 | |
1467 | |
1373 | case CFAPI_OBJECT_PROP_REFCOUNT: |
1468 | case CFAPI_OBJECT_PROP_REFCOUNT: |
1374 | rv = &op->refcount; |
1469 | ri = op->refcount; rv = &ri; |
1375 | *type = CFAPI_INT; |
1470 | *type = CFAPI_INT; |
1376 | break; |
1471 | break; |
1377 | |
1472 | |
1378 | case CFAPI_OBJECT_PROP_NAME: |
1473 | case CFAPI_OBJECT_PROP_NAME: |
1379 | rv = query_name(op); |
1474 | rv = query_name(op); |
… | |
… | |
1438 | rv = &op->speed_left; |
1533 | rv = &op->speed_left; |
1439 | *type = CFAPI_DOUBLE; |
1534 | *type = CFAPI_DOUBLE; |
1440 | break; |
1535 | break; |
1441 | |
1536 | |
1442 | case CFAPI_OBJECT_PROP_NROF: |
1537 | case CFAPI_OBJECT_PROP_NROF: |
1443 | rv = &op->nrof; |
1538 | ri = op->nrof; rv = &ri; |
1444 | *type = CFAPI_INT; |
1539 | *type = CFAPI_INT; |
1445 | break; |
1540 | break; |
1446 | |
1541 | |
1447 | case CFAPI_OBJECT_PROP_DIRECTION: |
1542 | case CFAPI_OBJECT_PROP_DIRECTION: |
1448 | rv = &op->direction; |
1543 | ri = op->direction; rv = &ri; |
1449 | *type = CFAPI_INT; |
1544 | *type = CFAPI_INT; |
1450 | break; |
1545 | break; |
1451 | |
1546 | |
1452 | case CFAPI_OBJECT_PROP_FACING: |
1547 | case CFAPI_OBJECT_PROP_FACING: |
1453 | rv = &op->facing; |
1548 | ri = op->facing; rv = &ri; |
1454 | *type = CFAPI_INT; |
1549 | *type = CFAPI_INT; |
1455 | break; |
1550 | break; |
1456 | |
1551 | |
1457 | case CFAPI_OBJECT_PROP_TYPE: |
1552 | case CFAPI_OBJECT_PROP_TYPE: |
1458 | rv = &op->type; |
1553 | ri = op->type; rv = &ri; |
1459 | *type = CFAPI_INT; |
1554 | *type = CFAPI_INT; |
1460 | break; |
1555 | break; |
1461 | |
1556 | |
1462 | case CFAPI_OBJECT_PROP_SUBTYPE: |
1557 | case CFAPI_OBJECT_PROP_SUBTYPE: |
1463 | rv = &op->subtype; |
1558 | ri = op->subtype; rv = &ri; |
1464 | *type = CFAPI_INT; |
1559 | *type = CFAPI_INT; |
1465 | break; |
1560 | break; |
1466 | |
1561 | |
1467 | case CFAPI_OBJECT_PROP_CLIENT_TYPE: |
1562 | case CFAPI_OBJECT_PROP_CLIENT_TYPE: |
1468 | rv = &op->client_type; |
1563 | ri = op->client_type; rv = &ri; |
1469 | *type = CFAPI_INT; |
1564 | *type = CFAPI_INT; |
1470 | break; |
1565 | break; |
1471 | |
1566 | |
1472 | case CFAPI_OBJECT_PROP_RESIST: |
1567 | case CFAPI_OBJECT_PROP_RESIST: |
1473 | { |
1568 | { |
1474 | int idx; |
1569 | int idx; |
1475 | idx = va_arg(args, int); |
1570 | idx = va_arg(args, int); |
1476 | rv = &op->resist[idx]; |
1571 | ri = op->resist[idx]; rv = &ri; |
1477 | } |
1572 | } |
1478 | *type = CFAPI_INT16; |
1573 | *type = CFAPI_INT; |
1479 | break; |
1574 | break; |
1480 | |
1575 | |
1481 | case CFAPI_OBJECT_PROP_ATTACK_TYPE: |
1576 | case CFAPI_OBJECT_PROP_ATTACK_TYPE: |
1482 | rv = &op->attacktype; |
1577 | ri = op->attacktype; rv = &ri; |
1483 | *type = CFAPI_INT; |
1578 | *type = CFAPI_INT; |
1484 | break; |
1579 | break; |
1485 | |
1580 | |
1486 | case CFAPI_OBJECT_PROP_PATH_ATTUNED: |
1581 | case CFAPI_OBJECT_PROP_PATH_ATTUNED: |
1487 | rv = &op->path_attuned; |
1582 | ri = op->path_attuned; rv = &ri; |
1488 | *type = CFAPI_INT; |
1583 | *type = CFAPI_INT; |
1489 | break; |
1584 | break; |
1490 | |
1585 | |
1491 | case CFAPI_OBJECT_PROP_PATH_REPELLED: |
1586 | case CFAPI_OBJECT_PROP_PATH_REPELLED: |
1492 | rv = &op->path_repelled; |
1587 | ri = op->path_repelled; rv = &ri; |
1493 | *type = CFAPI_INT; |
1588 | *type = CFAPI_INT; |
1494 | break; |
1589 | break; |
1495 | |
1590 | |
1496 | case CFAPI_OBJECT_PROP_PATH_DENIED: |
1591 | case CFAPI_OBJECT_PROP_PATH_DENIED: |
1497 | rv = &op->path_denied; |
1592 | ri = op->path_denied; rv = &ri; |
1498 | *type = CFAPI_INT; |
1593 | *type = CFAPI_INT; |
1499 | break; |
1594 | break; |
1500 | |
1595 | |
1501 | case CFAPI_OBJECT_PROP_MATERIAL: |
1596 | case CFAPI_OBJECT_PROP_MATERIAL: |
1502 | rv = &op->material; |
1597 | ri = op->material; rv = &ri; |
1503 | *type = CFAPI_INT; |
1598 | *type = CFAPI_INT; |
1504 | break; |
1599 | break; |
1505 | |
1600 | |
1506 | case CFAPI_OBJECT_PROP_MATERIAL_NAME: |
1601 | case CFAPI_OBJECT_PROP_MATERIAL_NAME: |
1507 | rv = (char*)op->materialname; |
1602 | rv = (char*)op->materialname; |
1508 | *type = CFAPI_STRING; |
1603 | *type = CFAPI_STRING; |
1509 | break; |
1604 | break; |
1510 | |
1605 | |
1511 | case CFAPI_OBJECT_PROP_MAGIC: |
1606 | case CFAPI_OBJECT_PROP_MAGIC: |
1512 | rv = &op->magic; |
1607 | ri = op->magic; rv = &ri; |
1513 | *type = CFAPI_INT; |
1608 | *type = CFAPI_INT; |
1514 | break; |
1609 | break; |
1515 | |
1610 | |
1516 | case CFAPI_OBJECT_PROP_VALUE: |
1611 | case CFAPI_OBJECT_PROP_VALUE: |
1517 | rv = &op->value; |
1612 | ri = op->value; rv = &ri; |
1518 | *type = CFAPI_INT; |
1613 | *type = CFAPI_INT; |
1519 | break; |
1614 | break; |
1520 | |
1615 | |
1521 | case CFAPI_OBJECT_PROP_LEVEL: |
1616 | case CFAPI_OBJECT_PROP_LEVEL: |
1522 | rv = &op->level; |
1617 | ri = op->level; rv = &ri; |
1523 | *type = CFAPI_INT; |
1618 | *type = CFAPI_INT; |
1524 | break; |
1619 | break; |
1525 | |
1620 | |
1526 | case CFAPI_OBJECT_PROP_LAST_HEAL: |
1621 | case CFAPI_OBJECT_PROP_LAST_HEAL: |
1527 | rv = &op->last_heal; |
1622 | ri = op->last_heal; rv = &ri; |
1528 | *type = CFAPI_INT; |
1623 | *type = CFAPI_INT; |
1529 | break; |
1624 | break; |
1530 | |
1625 | |
1531 | case CFAPI_OBJECT_PROP_LAST_SP: |
1626 | case CFAPI_OBJECT_PROP_LAST_SP: |
1532 | rv = &op->last_sp; |
1627 | ri = op->last_sp; rv = &ri; |
1533 | *type = CFAPI_INT; |
1628 | *type = CFAPI_INT; |
1534 | break; |
1629 | break; |
1535 | |
1630 | |
1536 | case CFAPI_OBJECT_PROP_LAST_GRACE: |
1631 | case CFAPI_OBJECT_PROP_LAST_GRACE: |
1537 | rv = &op->last_grace; |
1632 | ri = op->last_grace; rv = &ri; |
1538 | *type = CFAPI_INT; |
1633 | *type = CFAPI_INT; |
1539 | break; |
1634 | break; |
1540 | |
1635 | |
1541 | case CFAPI_OBJECT_PROP_LAST_EAT: |
1636 | case CFAPI_OBJECT_PROP_LAST_EAT: |
1542 | rv = &op->last_eat; |
1637 | ri = op->last_eat; rv = &ri; |
1543 | *type = CFAPI_INT; |
1638 | *type = CFAPI_INT; |
1544 | break; |
1639 | break; |
1545 | |
1640 | |
1546 | case CFAPI_OBJECT_PROP_INVISIBLE_TIME: |
1641 | case CFAPI_OBJECT_PROP_INVISIBLE_TIME: |
1547 | rv = &op->invisible; |
1642 | ri = op->invisible; rv = &ri; |
1548 | *type = CFAPI_INT; |
1643 | *type = CFAPI_INT; |
1549 | break; |
1644 | break; |
1550 | |
1645 | |
1551 | case CFAPI_OBJECT_PROP_PICK_UP: |
1646 | case CFAPI_OBJECT_PROP_PICK_UP: |
1552 | rv = &op->pick_up; |
1647 | ri = op->pick_up; rv = &ri; |
1553 | *type = CFAPI_INT; |
1648 | *type = CFAPI_INT; |
1554 | break; |
1649 | break; |
1555 | |
1650 | |
1556 | case CFAPI_OBJECT_PROP_ITEM_POWER: |
1651 | case CFAPI_OBJECT_PROP_ITEM_POWER: |
1557 | rv = &op->item_power; |
1652 | ri = op->item_power; rv = &ri; |
1558 | *type = CFAPI_INT; |
1653 | *type = CFAPI_INT; |
1559 | break; |
1654 | break; |
1560 | |
1655 | |
1561 | case CFAPI_OBJECT_PROP_GEN_SP_ARMOUR: |
1656 | case CFAPI_OBJECT_PROP_GEN_SP_ARMOUR: |
1562 | rv = &op->gen_sp_armour; |
1657 | ri = op->gen_sp_armour; rv = &ri; |
1563 | *type = CFAPI_INT; |
1658 | *type = CFAPI_INT; |
1564 | break; |
1659 | break; |
1565 | |
1660 | |
1566 | case CFAPI_OBJECT_PROP_WEIGHT: |
1661 | case CFAPI_OBJECT_PROP_WEIGHT: |
1567 | rv = &op->weight; |
1662 | ri = op->weight; rv = &ri; |
1568 | *type = CFAPI_INT; |
1663 | *type = CFAPI_INT; |
1569 | break; |
1664 | break; |
1570 | |
1665 | |
1571 | case CFAPI_OBJECT_PROP_WEIGHT_LIMIT: |
1666 | case CFAPI_OBJECT_PROP_WEIGHT_LIMIT: |
1572 | rv = &op->weight_limit; |
1667 | ri = op->weight_limit; rv = &ri; |
1573 | *type = CFAPI_INT; |
1668 | *type = CFAPI_INT; |
1574 | break; |
1669 | break; |
1575 | |
1670 | |
1576 | case CFAPI_OBJECT_PROP_CARRYING: |
1671 | case CFAPI_OBJECT_PROP_CARRYING: |
1577 | rv = &op->carrying; |
1672 | ri = op->carrying; rv = &ri; |
1578 | *type = CFAPI_INT; |
1673 | *type = CFAPI_INT; |
1579 | break; |
1674 | break; |
1580 | |
1675 | |
1581 | case CFAPI_OBJECT_PROP_GLOW_RADIUS: |
1676 | case CFAPI_OBJECT_PROP_GLOW_RADIUS: |
1582 | rv = &op->glow_radius; |
1677 | ri = op->glow_radius; rv = &ri; |
1583 | *type = CFAPI_INT; |
1678 | *type = CFAPI_INT; |
1584 | break; |
1679 | break; |
1585 | |
1680 | |
1586 | case CFAPI_OBJECT_PROP_PERM_EXP: |
1681 | case CFAPI_OBJECT_PROP_PERM_EXP: |
1587 | rv = &op->perm_exp; |
1682 | rv = &op->perm_exp; |
… | |
… | |
1602 | rv = op->attacked_by; |
1697 | rv = op->attacked_by; |
1603 | *type = CFAPI_POBJECT; |
1698 | *type = CFAPI_POBJECT; |
1604 | break; |
1699 | break; |
1605 | |
1700 | |
1606 | case CFAPI_OBJECT_PROP_RUN_AWAY: |
1701 | case CFAPI_OBJECT_PROP_RUN_AWAY: |
1607 | rv = &op->run_away; |
1702 | ri = op->run_away; rv = &ri; |
1608 | *type = CFAPI_INT; |
1703 | *type = CFAPI_INT; |
1609 | break; |
1704 | break; |
1610 | |
1705 | |
1611 | case CFAPI_OBJECT_PROP_CHOSEN_SKILL: |
1706 | case CFAPI_OBJECT_PROP_CHOSEN_SKILL: |
1612 | rv = op->chosen_skill; |
1707 | rv = op->chosen_skill; |
1613 | *type = CFAPI_POBJECT; |
1708 | *type = CFAPI_POBJECT; |
1614 | break; |
1709 | break; |
1615 | |
1710 | |
1616 | case CFAPI_OBJECT_PROP_HIDDEN: |
1711 | case CFAPI_OBJECT_PROP_HIDDEN: |
1617 | rv = &op->hide; |
1712 | ri = op->hide; rv = &ri; |
1618 | *type = CFAPI_INT; |
1713 | *type = CFAPI_INT; |
1619 | break; |
1714 | break; |
1620 | |
1715 | |
1621 | case CFAPI_OBJECT_PROP_MOVE_STATUS: |
1716 | case CFAPI_OBJECT_PROP_MOVE_STATUS: |
1622 | rv = &op->move_status; |
1717 | ri = op->move_status; rv = &ri; |
1623 | *type = CFAPI_INT; |
1718 | *type = CFAPI_INT; |
1624 | break; |
1719 | break; |
1625 | |
1720 | |
1626 | case CFAPI_OBJECT_PROP_MOVE_TYPE: |
1721 | case CFAPI_OBJECT_PROP_MOVE_TYPE: |
1627 | rv = &op->attack_movement; |
1722 | ri = op->attack_movement; rv = &ri; |
1628 | *type = CFAPI_INT; |
1723 | *type = CFAPI_INT; |
1629 | break; |
1724 | break; |
1630 | |
1725 | |
1631 | case CFAPI_OBJECT_PROP_SPELL_ITEM: |
1726 | case CFAPI_OBJECT_PROP_SPELL_ITEM: |
1632 | rv = op->spellitem; |
1727 | rv = op->spellitem; |
… | |
… | |
1652 | rv = (char*)op->custom_name; |
1747 | rv = (char*)op->custom_name; |
1653 | *type = CFAPI_STRING; |
1748 | *type = CFAPI_STRING; |
1654 | break; |
1749 | break; |
1655 | |
1750 | |
1656 | case CFAPI_OBJECT_PROP_ANIM_SPEED: |
1751 | case CFAPI_OBJECT_PROP_ANIM_SPEED: |
1657 | rv = &op->anim_speed; |
1752 | ri = op->anim_speed; rv = &ri; |
1658 | *type = CFAPI_INT; |
1753 | *type = CFAPI_INT; |
1659 | break; |
1754 | break; |
1660 | |
1755 | |
1661 | case CFAPI_OBJECT_PROP_FRIENDLY: |
1756 | case CFAPI_OBJECT_PROP_FRIENDLY: |
1662 | ri = is_friendly(op); |
1757 | ri = is_friendly(op); |
… | |
… | |
1683 | rv = &ri; |
1778 | rv = &ri; |
1684 | *type = CFAPI_INT; |
1779 | *type = CFAPI_INT; |
1685 | break; |
1780 | break; |
1686 | |
1781 | |
1687 | case CFAPI_OBJECT_PROP_LUCK: |
1782 | case CFAPI_OBJECT_PROP_LUCK: |
1688 | rv = &op->stats.luck; |
1783 | ri = op->stats.luck; rv = &ri; |
1689 | *type = CFAPI_INT; |
1784 | *type = CFAPI_INT; |
1690 | break; |
1785 | break; |
1691 | |
1786 | |
1692 | case CFAPI_OBJECT_PROP_EXP: |
1787 | case CFAPI_OBJECT_PROP_EXP: |
1693 | rv = &op->stats.exp; |
1788 | rv = &op->stats.exp; |
… | |
… | |
1730 | *type = CFAPI_POBJECT; |
1825 | *type = CFAPI_POBJECT; |
1731 | break; |
1826 | break; |
1732 | |
1827 | |
1733 | case CFAPI_OBJECT_PROP_CHEATER: |
1828 | case CFAPI_OBJECT_PROP_CHEATER: |
1734 | ri = (QUERY_FLAG(op, FLAG_WAS_WIZ)); |
1829 | ri = (QUERY_FLAG(op, FLAG_WAS_WIZ)); |
|
|
1830 | rv = &ri; |
1735 | *type = CFAPI_INT; |
1831 | *type = CFAPI_INT; |
1736 | break; |
1832 | break; |
1737 | |
1833 | |
1738 | case CFAPI_OBJECT_PROP_MERGEABLE: |
1834 | case CFAPI_OBJECT_PROP_MERGEABLE: |
1739 | { |
1835 | { |