--- deliantra/server/plugins/cfperl/cfperl.xs 2006/07/15 11:57:02 1.59 +++ deliantra/server/plugins/cfperl/cfperl.xs 2006/07/15 21:10:04 1.60 @@ -55,6 +55,10 @@ typedef object object_ornull; typedef mapstruct mapstruct_ornull; +typedef double val64; +#define newSVval64 newSVnv +#define SvVAL64 SvNV + static f_plug_api gethook; static f_plug_api registerGlobalEvent; static f_plug_api unregisterGlobalEvent; @@ -233,7 +237,7 @@ break; case CFAPI_LONG: - sv = newSVnv ((double)*va_arg (args, sint64 *)); /* oh, the humanity! */ + sv = newSVval64 ((val64)*va_arg (args, sint64 *)); break; case CFAPI_DOUBLE: @@ -1456,43 +1460,42 @@ int random_roll(int min, int max, object *op, int goodbad); int -exp_to_level (double exp) +exp_to_level (val64 exp) CODE: - int i = 0; - RETVAL = 0; - for (i = 1; i <= settings.max_level; i++) - { - if (levels[i] > exp) - { +{ + int i = 0; + + RETVAL = settings.max_level; + + for (i = 1; i <= settings.max_level; i++) + { + if (levels[i] > exp) + { RETVAL = i - 1; break; - } - } + } + } +} OUTPUT: RETVAL -double +val64 level_to_min_exp (int level) CODE: + if (level > settings.max_level) + RETVAL = levels[settings.max_level]; + else if (level < 1) RETVAL = 0; - if (level > settings.max_level) - RETVAL = levels[settings.max_level]; - else if (level < 1) - RETVAL = 0; - else - RETVAL = levels[level]; + 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; - } + if (atnr >= 0 && atnr < NROFATTACKS) + RETVAL = newSVpv (resist_plus[atnr], 0); + else + XSRETURN_UNDEF; OUTPUT: RETVAL MODULE = cf PACKAGE = cf::object PREFIX = cf_object_ @@ -1512,7 +1515,7 @@ cf_object_set_int_property (obj, idx, SvIV (newval)); break; case CFAPI_LONG: - cf_object_set_long_property (obj, idx, SvNV (newval)); + cf_object_set_long_property (obj, idx, SvVAL64 (newval)); break; case CFAPI_DOUBLE: { @@ -1600,7 +1603,7 @@ int cf_object_pay_item (object *op, object *buyer) -int cf_object_pay_amount (object *op, double amount) +int cf_object_pay_amount (object *op, val64 amount) int cf_object_cast_spell (object *caster, object *ctoo, int dir, object *spell_ob, char *stringarg = 0) @@ -1647,11 +1650,11 @@ object *cf_create_object_by_name (const char *name) -void change_exp (object *op, double exp, const char *skill_name = 0, int flag = 0) +void change_exp (object *op, val64 exp, const char *skill_name = 0, int flag = 0) -void pay_player (object *op, double amount) +void pay_player (object *op, val64 amount) -double pay_player_arch (object *op, const char *arch, double amount) +val64 pay_player_arch (object *op, const char *arch, val64 amount) void player_lvl_adj (object *who, object *skill = 0) @@ -1659,11 +1662,6 @@ 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: @@ -1773,7 +1771,7 @@ void cf_player_set_party (object *op, partylist *party) -void change_skill (object *op, double exp, char *skill_name = 0, int flag = 0) +void change_skill (object *op, val64 exp, char *skill_name = 0, int flag = 0) void kill_player (object *op) @@ -2170,8 +2168,8 @@ MODULE = cf PACKAGE = cf::living PREFIX = cf_living_ -double -exp (living *liv, double new_val = 0.) +val64 +exp (living *liv, val64 new_val = 0) PROTOTYPE: $;$ ALIAS: Str = 1