--- deliantra/server/plugins/cfperl/cfperl.xs 2006/07/11 16:50:16 1.58 +++ deliantra/server/plugins/cfperl/cfperl.xs 2006/07/15 11:57:02 1.59 @@ -50,6 +50,8 @@ //#include "EventAPI.h" #include "perlxsi.c" +extern sint64 *levels; // the experience table + typedef object object_ornull; typedef mapstruct mapstruct_ornull; @@ -414,6 +416,9 @@ registerGlobalEvent (NULL, EVENT_BORN, PLUGIN_NAME, globalEventListener); registerGlobalEvent (NULL, EVENT_CLOCK, PLUGIN_NAME, globalEventListener); //registerGlobalEvent (NULL, EVENT_CRASH, PLUGIN_NAME, globalEventListener); + registerGlobalEvent (NULL, EVENT_FIND_UNARMED_SKILL, PLUGIN_NAME, globalEventListener); + registerGlobalEvent (NULL, EVENT_PLAYER_USE_SKILL, PLUGIN_NAME, globalEventListener); + registerGlobalEvent (NULL, EVENT_MONSTER_USE_SKILL, PLUGIN_NAME, globalEventListener); registerGlobalEvent (NULL, EVENT_PLAYER_DEATH, PLUGIN_NAME, globalEventListener); registerGlobalEvent (NULL, EVENT_GKILL, PLUGIN_NAME, globalEventListener); registerGlobalEvent (NULL, EVENT_LOGIN, PLUGIN_NAME, globalEventListener); @@ -579,6 +584,19 @@ PUSH_PV; break; + case EVENT_FIND_UNARMED_SKILL: + PUSH_OB; + break; + + case EVENT_PLAYER_USE_SKILL: + case EVENT_MONSTER_USE_SKILL: + PUSH_OB; + PUSH_OB; + PUSH_OB; + PUSH_IV; + PUSH_PV; + break; + case EVENT_EXTCMD: PUSH_PL; { @@ -1160,6 +1178,36 @@ const_iv (SOUND_DRINK_POISON) const_iv (SOUND_CAST_SPELL_0) + const_iv (PREFER_LOW) + const_iv (PREFER_HIGH) + + const_iv (ATNR_PHYSICAL) + const_iv (ATNR_MAGIC) + const_iv (ATNR_FIRE) + const_iv (ATNR_ELECTRICITY) + const_iv (ATNR_COLD) + const_iv (ATNR_CONFUSION) + const_iv (ATNR_ACID) + const_iv (ATNR_DRAIN) + const_iv (ATNR_WEAPONMAGIC) + const_iv (ATNR_GHOSTHIT) + const_iv (ATNR_POISON) + const_iv (ATNR_SLOW) + const_iv (ATNR_PARALYZE) + const_iv (ATNR_TURN_UNDEAD) + const_iv (ATNR_FEAR) + const_iv (ATNR_CANCELLATION) + const_iv (ATNR_DEPLETE) + const_iv (ATNR_DEATH) + const_iv (ATNR_CHAOS) + const_iv (ATNR_COUNTERSPELL) + const_iv (ATNR_GODPOWER) + const_iv (ATNR_HOLYWORD) + const_iv (ATNR_BLIND) + const_iv (ATNR_INTERNAL) + const_iv (ATNR_LIFE_STEALING) + const_iv (ATNR_DISEASE) + const_iv (MAP_FLUSH) const_iv (MAP_PLAYER_UNIQUE) const_iv (MAP_BLOCK) @@ -1216,6 +1264,9 @@ const_event (TELL) const_event (MUZZLE) const_event (KICK) + const_event (PLAYER_USE_SKILL) + const_event (MONSTER_USE_SKILL) + const_event (FIND_UNARMED_SKILL) const_event (EXTCMD) //const_event (FREE_OB) }; @@ -1402,6 +1453,48 @@ cf_find_animation (char *text) PROTOTYPE: $ +int random_roll(int min, int max, object *op, int goodbad); + +int +exp_to_level (double exp) + CODE: + int i = 0; + RETVAL = 0; + for (i = 1; i <= settings.max_level; i++) + { + if (levels[i] > exp) + { + RETVAL = i - 1; + break; + } + } + OUTPUT: RETVAL + +double +level_to_min_exp (int level) + CODE: + RETVAL = 0; + if (level > settings.max_level) + RETVAL = levels[settings.max_level]; + else if (level < 1) + RETVAL = 0; + else + RETVAL = levels[level]; + OUTPUT: RETVAL + +SV * +resistance_to_string (int atnr) + CODE: + if (atnr >= 0 && atnr < NROFATTACKS) + { + RETVAL = newSVpv (resist_plus[atnr], 0); + } + else + { + XSRETURN_UNDEF; + } + OUTPUT: RETVAL + MODULE = cf PACKAGE = cf::object PREFIX = cf_object_ SV * @@ -1564,6 +1657,20 @@ int kill_object (object *op, int dam = 0, object *hitter = 0, int type = AT_PHYSICAL) +int calc_skill_exp (object *who, object *op, object *skill); + +char *cf_object_get_key (object *op, char *keyname) + ALIAS: key = 0 + +void cf_object_set_key (object *op, char *keyname, char *value) + +void +cf_object_set_resistance (object *op, int rtype, int val) + CODE: + if (rtype >= 0 && rtype < NROFATTACKS) + op->resist[rtype] = val; + + MODULE = cf PACKAGE = cf::object PREFIX = cf_ void cf_fix_object (object *pl)