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.8 by root, Thu Mar 16 21:08:20 2006 UTC vs.
Revision 1.13 by elmex, Sat Aug 12 11:51:38 2006 UTC

1/* 1/*
2 * static char *rcsid_plugins_c = 2 * static char *rcsid_plugins_c =
3 * "$Id: plugins.c,v 1.8 2006/03/16 21:08:20 root 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/* */
272 free_object(tmp); 272 free_object(tmp);
273 } else { 273 } else {
274 int rvt = 0; 274 int rvt = 0;
275 int *rv; 275 int *rv;
276 276
277 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);
278 return *rv; 278 return *rv;
279 } 279 }
280 } 280 }
281 } 281 }
282 } 282 }
286int execute_global_event(int eventcode, ...) 286int execute_global_event(int eventcode, ...)
287{ 287{
288 va_list args; 288 va_list args;
289 object* op; 289 object* op;
290 object* op2; 290 object* op2;
291 object* op3;
291 mapstruct *map; 292 mapstruct *map;
292 player* pl; 293 player* pl;
293 char* buf; 294 char* buf;
294 int i, rt; 295 int i, rt, retval = 0, *tmpretval = NULL, fix;
295 crossfire_plugin* cp; 296 crossfire_plugin* cp;
296 if (plugins_list == NULL) 297 if (plugins_list == NULL)
297 return -1; 298 return -1;
298 299
299 va_start(args, eventcode); 300 va_start(args, eventcode);
414 for (cp = plugins_list; cp != NULL; cp = cp->next) { 415 for (cp = plugins_list; cp != NULL; cp = cp->next) {
415 if (cp->gevent[eventcode] != NULL) 416 if (cp->gevent[eventcode] != NULL)
416 cp->gevent[eventcode](&rt, eventcode, op, buf); 417 cp->gevent[eventcode](&rt, eventcode, op, buf);
417 } 418 }
418 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;
419 } 471 }
420 va_end(args); 472 va_end(args);
473
421 return 0; 474 return retval;
422} 475}
423 476
424int plugins_init_plugin(const char* libfile) 477int plugins_init_plugin(const char* libfile)
425{ 478{
426 LIBPTRTYPE ptr; 479 LIBPTRTYPE ptr;
1406 rv = op->map; 1459 rv = op->map;
1407 *type = CFAPI_PMAP; 1460 *type = CFAPI_PMAP;
1408 break; 1461 break;
1409 1462
1410 case CFAPI_OBJECT_PROP_COUNT: 1463 case CFAPI_OBJECT_PROP_COUNT:
1411 rv = &op->count; 1464 ri = op->count; rv = &ri;
1412 *type = CFAPI_INT; 1465 *type = CFAPI_INT;
1413 break; 1466 break;
1414 1467
1415 case CFAPI_OBJECT_PROP_REFCOUNT: 1468 case CFAPI_OBJECT_PROP_REFCOUNT:
1416 rv = &op->refcount; 1469 ri = op->refcount; rv = &ri;
1417 *type = CFAPI_INT; 1470 *type = CFAPI_INT;
1418 break; 1471 break;
1419 1472
1420 case CFAPI_OBJECT_PROP_NAME: 1473 case CFAPI_OBJECT_PROP_NAME:
1421 rv = query_name(op); 1474 rv = query_name(op);
1480 rv = &op->speed_left; 1533 rv = &op->speed_left;
1481 *type = CFAPI_DOUBLE; 1534 *type = CFAPI_DOUBLE;
1482 break; 1535 break;
1483 1536
1484 case CFAPI_OBJECT_PROP_NROF: 1537 case CFAPI_OBJECT_PROP_NROF:
1485 rv = &op->nrof; 1538 ri = op->nrof; rv = &ri;
1486 *type = CFAPI_INT; 1539 *type = CFAPI_INT;
1487 break; 1540 break;
1488 1541
1489 case CFAPI_OBJECT_PROP_DIRECTION: 1542 case CFAPI_OBJECT_PROP_DIRECTION:
1490 rv = &op->direction; 1543 ri = op->direction; rv = &ri;
1491 *type = CFAPI_INT; 1544 *type = CFAPI_INT;
1492 break; 1545 break;
1493 1546
1494 case CFAPI_OBJECT_PROP_FACING: 1547 case CFAPI_OBJECT_PROP_FACING:
1495 rv = &op->facing; 1548 ri = op->facing; rv = &ri;
1496 *type = CFAPI_INT; 1549 *type = CFAPI_INT;
1497 break; 1550 break;
1498 1551
1499 case CFAPI_OBJECT_PROP_TYPE: 1552 case CFAPI_OBJECT_PROP_TYPE:
1500 rv = &op->type; 1553 ri = op->type; rv = &ri;
1501 *type = CFAPI_INT; 1554 *type = CFAPI_INT;
1502 break; 1555 break;
1503 1556
1504 case CFAPI_OBJECT_PROP_SUBTYPE: 1557 case CFAPI_OBJECT_PROP_SUBTYPE:
1505 rv = &op->subtype; 1558 ri = op->subtype; rv = &ri;
1506 *type = CFAPI_INT; 1559 *type = CFAPI_INT;
1507 break; 1560 break;
1508 1561
1509 case CFAPI_OBJECT_PROP_CLIENT_TYPE: 1562 case CFAPI_OBJECT_PROP_CLIENT_TYPE:
1510 rv = &op->client_type; 1563 ri = op->client_type; rv = &ri;
1511 *type = CFAPI_INT; 1564 *type = CFAPI_INT;
1512 break; 1565 break;
1513 1566
1514 case CFAPI_OBJECT_PROP_RESIST: 1567 case CFAPI_OBJECT_PROP_RESIST:
1515 { 1568 {
1516 int idx; 1569 int idx;
1517 idx = va_arg(args, int); 1570 idx = va_arg(args, int);
1518 rv = &op->resist[idx]; 1571 ri = op->resist[idx]; rv = &ri;
1519 } 1572 }
1520 *type = CFAPI_INT16; 1573 *type = CFAPI_INT;
1521 break; 1574 break;
1522 1575
1523 case CFAPI_OBJECT_PROP_ATTACK_TYPE: 1576 case CFAPI_OBJECT_PROP_ATTACK_TYPE:
1524 rv = &op->attacktype; 1577 ri = op->attacktype; rv = &ri;
1525 *type = CFAPI_INT; 1578 *type = CFAPI_INT;
1526 break; 1579 break;
1527 1580
1528 case CFAPI_OBJECT_PROP_PATH_ATTUNED: 1581 case CFAPI_OBJECT_PROP_PATH_ATTUNED:
1529 rv = &op->path_attuned; 1582 ri = op->path_attuned; rv = &ri;
1530 *type = CFAPI_INT; 1583 *type = CFAPI_INT;
1531 break; 1584 break;
1532 1585
1533 case CFAPI_OBJECT_PROP_PATH_REPELLED: 1586 case CFAPI_OBJECT_PROP_PATH_REPELLED:
1534 rv = &op->path_repelled; 1587 ri = op->path_repelled; rv = &ri;
1535 *type = CFAPI_INT; 1588 *type = CFAPI_INT;
1536 break; 1589 break;
1537 1590
1538 case CFAPI_OBJECT_PROP_PATH_DENIED: 1591 case CFAPI_OBJECT_PROP_PATH_DENIED:
1539 rv = &op->path_denied; 1592 ri = op->path_denied; rv = &ri;
1540 *type = CFAPI_INT; 1593 *type = CFAPI_INT;
1541 break; 1594 break;
1542 1595
1543 case CFAPI_OBJECT_PROP_MATERIAL: 1596 case CFAPI_OBJECT_PROP_MATERIAL:
1544 rv = &op->material; 1597 ri = op->material; rv = &ri;
1545 *type = CFAPI_INT; 1598 *type = CFAPI_INT;
1546 break; 1599 break;
1547 1600
1548 case CFAPI_OBJECT_PROP_MATERIAL_NAME: 1601 case CFAPI_OBJECT_PROP_MATERIAL_NAME:
1549 rv = (char*)op->materialname; 1602 rv = (char*)op->materialname;
1550 *type = CFAPI_STRING; 1603 *type = CFAPI_STRING;
1551 break; 1604 break;
1552 1605
1553 case CFAPI_OBJECT_PROP_MAGIC: 1606 case CFAPI_OBJECT_PROP_MAGIC:
1554 rv = &op->magic; 1607 ri = op->magic; rv = &ri;
1555 *type = CFAPI_INT; 1608 *type = CFAPI_INT;
1556 break; 1609 break;
1557 1610
1558 case CFAPI_OBJECT_PROP_VALUE: 1611 case CFAPI_OBJECT_PROP_VALUE:
1559 rv = &op->value; 1612 ri = op->value; rv = &ri;
1560 *type = CFAPI_INT; 1613 *type = CFAPI_INT;
1561 break; 1614 break;
1562 1615
1563 case CFAPI_OBJECT_PROP_LEVEL: 1616 case CFAPI_OBJECT_PROP_LEVEL:
1564 rv = &op->level; 1617 ri = op->level; rv = &ri;
1565 *type = CFAPI_INT; 1618 *type = CFAPI_INT;
1566 break; 1619 break;
1567 1620
1568 case CFAPI_OBJECT_PROP_LAST_HEAL: 1621 case CFAPI_OBJECT_PROP_LAST_HEAL:
1569 rv = &op->last_heal; 1622 ri = op->last_heal; rv = &ri;
1570 *type = CFAPI_INT; 1623 *type = CFAPI_INT;
1571 break; 1624 break;
1572 1625
1573 case CFAPI_OBJECT_PROP_LAST_SP: 1626 case CFAPI_OBJECT_PROP_LAST_SP:
1574 rv = &op->last_sp; 1627 ri = op->last_sp; rv = &ri;
1575 *type = CFAPI_INT; 1628 *type = CFAPI_INT;
1576 break; 1629 break;
1577 1630
1578 case CFAPI_OBJECT_PROP_LAST_GRACE: 1631 case CFAPI_OBJECT_PROP_LAST_GRACE:
1579 rv = &op->last_grace; 1632 ri = op->last_grace; rv = &ri;
1580 *type = CFAPI_INT; 1633 *type = CFAPI_INT;
1581 break; 1634 break;
1582 1635
1583 case CFAPI_OBJECT_PROP_LAST_EAT: 1636 case CFAPI_OBJECT_PROP_LAST_EAT:
1584 rv = &op->last_eat; 1637 ri = op->last_eat; rv = &ri;
1585 *type = CFAPI_INT; 1638 *type = CFAPI_INT;
1586 break; 1639 break;
1587 1640
1588 case CFAPI_OBJECT_PROP_INVISIBLE_TIME: 1641 case CFAPI_OBJECT_PROP_INVISIBLE_TIME:
1589 rv = &op->invisible; 1642 ri = op->invisible; rv = &ri;
1590 *type = CFAPI_INT; 1643 *type = CFAPI_INT;
1591 break; 1644 break;
1592 1645
1593 case CFAPI_OBJECT_PROP_PICK_UP: 1646 case CFAPI_OBJECT_PROP_PICK_UP:
1594 rv = &op->pick_up; 1647 ri = op->pick_up; rv = &ri;
1595 *type = CFAPI_INT; 1648 *type = CFAPI_INT;
1596 break; 1649 break;
1597 1650
1598 case CFAPI_OBJECT_PROP_ITEM_POWER: 1651 case CFAPI_OBJECT_PROP_ITEM_POWER:
1599 rv = &op->item_power; 1652 ri = op->item_power; rv = &ri;
1600 *type = CFAPI_INT; 1653 *type = CFAPI_INT;
1601 break; 1654 break;
1602 1655
1603 case CFAPI_OBJECT_PROP_GEN_SP_ARMOUR: 1656 case CFAPI_OBJECT_PROP_GEN_SP_ARMOUR:
1604 rv = &op->gen_sp_armour; 1657 ri = op->gen_sp_armour; rv = &ri;
1605 *type = CFAPI_INT; 1658 *type = CFAPI_INT;
1606 break; 1659 break;
1607 1660
1608 case CFAPI_OBJECT_PROP_WEIGHT: 1661 case CFAPI_OBJECT_PROP_WEIGHT:
1609 rv = &op->weight; 1662 ri = op->weight; rv = &ri;
1610 *type = CFAPI_INT; 1663 *type = CFAPI_INT;
1611 break; 1664 break;
1612 1665
1613 case CFAPI_OBJECT_PROP_WEIGHT_LIMIT: 1666 case CFAPI_OBJECT_PROP_WEIGHT_LIMIT:
1614 rv = &op->weight_limit; 1667 ri = op->weight_limit; rv = &ri;
1615 *type = CFAPI_INT; 1668 *type = CFAPI_INT;
1616 break; 1669 break;
1617 1670
1618 case CFAPI_OBJECT_PROP_CARRYING: 1671 case CFAPI_OBJECT_PROP_CARRYING:
1619 rv = &op->carrying; 1672 ri = op->carrying; rv = &ri;
1620 *type = CFAPI_INT; 1673 *type = CFAPI_INT;
1621 break; 1674 break;
1622 1675
1623 case CFAPI_OBJECT_PROP_GLOW_RADIUS: 1676 case CFAPI_OBJECT_PROP_GLOW_RADIUS:
1624 rv = &op->glow_radius; 1677 ri = op->glow_radius; rv = &ri;
1625 *type = CFAPI_INT; 1678 *type = CFAPI_INT;
1626 break; 1679 break;
1627 1680
1628 case CFAPI_OBJECT_PROP_PERM_EXP: 1681 case CFAPI_OBJECT_PROP_PERM_EXP:
1629 rv = &op->perm_exp; 1682 rv = &op->perm_exp;
1644 rv = op->attacked_by; 1697 rv = op->attacked_by;
1645 *type = CFAPI_POBJECT; 1698 *type = CFAPI_POBJECT;
1646 break; 1699 break;
1647 1700
1648 case CFAPI_OBJECT_PROP_RUN_AWAY: 1701 case CFAPI_OBJECT_PROP_RUN_AWAY:
1649 rv = &op->run_away; 1702 ri = op->run_away; rv = &ri;
1650 *type = CFAPI_INT; 1703 *type = CFAPI_INT;
1651 break; 1704 break;
1652 1705
1653 case CFAPI_OBJECT_PROP_CHOSEN_SKILL: 1706 case CFAPI_OBJECT_PROP_CHOSEN_SKILL:
1654 rv = op->chosen_skill; 1707 rv = op->chosen_skill;
1655 *type = CFAPI_POBJECT; 1708 *type = CFAPI_POBJECT;
1656 break; 1709 break;
1657 1710
1658 case CFAPI_OBJECT_PROP_HIDDEN: 1711 case CFAPI_OBJECT_PROP_HIDDEN:
1659 rv = &op->hide; 1712 ri = op->hide; rv = &ri;
1660 *type = CFAPI_INT; 1713 *type = CFAPI_INT;
1661 break; 1714 break;
1662 1715
1663 case CFAPI_OBJECT_PROP_MOVE_STATUS: 1716 case CFAPI_OBJECT_PROP_MOVE_STATUS:
1664 rv = &op->move_status; 1717 ri = op->move_status; rv = &ri;
1665 *type = CFAPI_INT; 1718 *type = CFAPI_INT;
1666 break; 1719 break;
1667 1720
1668 case CFAPI_OBJECT_PROP_MOVE_TYPE: 1721 case CFAPI_OBJECT_PROP_MOVE_TYPE:
1669 rv = &op->attack_movement; 1722 ri = op->attack_movement; rv = &ri;
1670 *type = CFAPI_INT; 1723 *type = CFAPI_INT;
1671 break; 1724 break;
1672 1725
1673 case CFAPI_OBJECT_PROP_SPELL_ITEM: 1726 case CFAPI_OBJECT_PROP_SPELL_ITEM:
1674 rv = op->spellitem; 1727 rv = op->spellitem;
1694 rv = (char*)op->custom_name; 1747 rv = (char*)op->custom_name;
1695 *type = CFAPI_STRING; 1748 *type = CFAPI_STRING;
1696 break; 1749 break;
1697 1750
1698 case CFAPI_OBJECT_PROP_ANIM_SPEED: 1751 case CFAPI_OBJECT_PROP_ANIM_SPEED:
1699 rv = &op->anim_speed; 1752 ri = op->anim_speed; rv = &ri;
1700 *type = CFAPI_INT; 1753 *type = CFAPI_INT;
1701 break; 1754 break;
1702 1755
1703 case CFAPI_OBJECT_PROP_FRIENDLY: 1756 case CFAPI_OBJECT_PROP_FRIENDLY:
1704 ri = is_friendly(op); 1757 ri = is_friendly(op);
1725 rv = &ri; 1778 rv = &ri;
1726 *type = CFAPI_INT; 1779 *type = CFAPI_INT;
1727 break; 1780 break;
1728 1781
1729 case CFAPI_OBJECT_PROP_LUCK: 1782 case CFAPI_OBJECT_PROP_LUCK:
1730 rv = &op->stats.luck; 1783 ri = op->stats.luck; rv = &ri;
1731 *type = CFAPI_INT; 1784 *type = CFAPI_INT;
1732 break; 1785 break;
1733 1786
1734 case CFAPI_OBJECT_PROP_EXP: 1787 case CFAPI_OBJECT_PROP_EXP:
1735 rv = &op->stats.exp; 1788 rv = &op->stats.exp;
1772 *type = CFAPI_POBJECT; 1825 *type = CFAPI_POBJECT;
1773 break; 1826 break;
1774 1827
1775 case CFAPI_OBJECT_PROP_CHEATER: 1828 case CFAPI_OBJECT_PROP_CHEATER:
1776 ri = (QUERY_FLAG(op, FLAG_WAS_WIZ)); 1829 ri = (QUERY_FLAG(op, FLAG_WAS_WIZ));
1830 rv = &ri;
1777 *type = CFAPI_INT; 1831 *type = CFAPI_INT;
1778 break; 1832 break;
1779 1833
1780 case CFAPI_OBJECT_PROP_MERGEABLE: 1834 case CFAPI_OBJECT_PROP_MERGEABLE:
1781 { 1835 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines