ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/plugins.c
(Generate patch)

Comparing deliantra/server/server/plugins.c (file contents):
Revision 1.1 by root, Fri Feb 3 07:14:36 2006 UTC vs.
Revision 1.9 by root, Fri Mar 17 02:35:08 2006 UTC

1/* 1/*
2 * static char *rcsid_plugins_c = 2 * static char *rcsid_plugins_c =
3 * "$Id: plugins.c,v 1.1 2006/02/03 07:14:36 root Exp $"; 3 * "$Id: plugins.c,v 1.9 2006/03/17 02:35:08 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
132static void plugin_load_original_map(mapstruct *map)
133{
134 execute_global_event (EVENT_MAPLOAD, map);
135}
136
137static void plugin_load_temporary_map(mapstruct *map)
138{
139 execute_global_event (EVENT_MAPIN, map);
140}
141
142static void plugin_clean_temporary_map(mapstruct *map)
143{
144 execute_global_event (EVENT_MAPCLEAN, map);
145}
146
147static void plugin_object_free(object *ob)
148{
149 execute_global_event (EVENT_FREE_OB, ob);
150}
151
132#ifdef WIN32 152#ifdef WIN32
133static const char *plugins_dlerror(void) 153static 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;
264int execute_global_event(int eventcode, ...) 286int 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_INT; 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 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines