/* -*- LPC -*- */ /* * $Locker: $ * $Id: spells.c,v 1.2 2001/06/03 20:21:47 pinkfish Exp $ * $Log: spells.c,v $ * Revision 1.2 2001/06/03 20:21:47 pinkfish * Change the variable name. * * Revision 1.1 1998/01/06 04:54:05 ceres * Initial revision * */ #include "spells.h" nosave mixed *_spell_effects; void create() { _spell_effects = ({ }); } /* create() */ /* temp for testing */ mixed query_effects() { return _spell_effects; } int queue_commands() { return sizeof( _spell_effects ); } int add_spell_effect(int no_rnds, string type, string name, object callee, string func, mixed params) { int i,j; if (strsrch(file_name(this_object()),"global")==-1) tell_object(find_living("olorin"), sprintf("add_spell_effect in %s\n", file_name(this_object()))); if ((i=member_array(type, _spell_effects)) != -1) if ((j=member_array(name, _spell_effects[i+1])) == -1) _spell_effects[i+1] += ({ name, ({ no_rnds, callee, func, params }) }); else _spell_effects[i+1][j+1] = ({ no_rnds, callee, func, params }); else _spell_effects += ({ type, ({ name, ({ no_rnds, callee, func, params }) }) }); } /* add_spell_effect() */ int remove_spell_effect(string name) { int i, j; if (strsrch(file_name(this_object()),"global")==-1) tell_object(find_living("olorin"), sprintf("remove_spell_effect in %s\n", file_name(this_object()))); for (i=0;i<sizeof(_spell_effects);i+=2) if ((j=member_array(name, _spell_effects[i+1])) != -1) { _spell_effects[i+1] = delete(_spell_effects[i+1], j, 2); if (!sizeof(_spell_effects[i+1])) { _spell_effects = delete(_spell_effects, i, 2); i -= 2; } } return 1; } /* remove_spell_effect() */ mixed query_spell_effect(string name) { int i; if (strsrch(file_name(this_object()),"global")==-1) tell_object(find_living("olorin"), sprintf("query_spell_effect in %s\n", file_name(this_object()))); if ((i=member_array(name, _spell_effects)) == -1) return 0; if (sizeof(_spell_effects[i+1])) return _spell_effects[i..i]+_spell_effects[0..1]; return 0; } /* query_spell_effect() */ mixed *query_spell_effects_type(string type) { int i, j; mixed *ret; if ((i=member_array(type, _spell_effects)) == -1) return ({ }); ret = ({ }); for (j=0;j<sizeof(_spell_effects);j+=2) ret += ({ _spell_effects[i], _spell_effects[i+1][j..j+1] }); return ret; } /* query_spell_effects_type() */ int do_spell_effects(object attacker) { int i, j; this_object()->remove_property("casting"); for (i=0;i<sizeof(_spell_effects);i+=2) for (j=0;j<sizeof(_spell_effects[i+1]);j+=2) { call_out("do_call_out_effect", 1, ({ _spell_effects[i+1][j+1], attacker })); _spell_effects[i+1][j+1][SP_NO_RNDS]--; if ( !_spell_effects[i+1][j+1][SP_NO_RNDS] || !_spell_effects[i+1][j+1][SP_OBJECT]) { _spell_effects[i+1] = delete(_spell_effects[i+1], j, 2); j -= 2; if (!sizeof(_spell_effects[i+1])) { _spell_effects = delete(_spell_effects, i, 2); i -= 2; break; } } } return 0; } /* do_spell_effects() */ void do_call_out_effect(mixed *params) { if (params[0][SP_OBJECT]) call_other(params[0][SP_OBJECT], params[0][SP_FUNC], params[1], params[0][SP_PARAM], params[0][SP_NO_RNDS]); } /* do_effect() */