/* the standard curses/diseases stuff. * * Partially rewritten by Quark, nov 97 Woah, he actually DID something!!!! * * See /std/curses/curses.txt on how to make your own curse * * Important functions: * int add_curse(string name); to add the curse, returns 0 if the curse doesn't * exist else 1 * int add_disease(string name); same as add_curse but for diseases (: * int remove_curse(string name, object remover); To remove a curse. * will return 1 on success, 0 if the player isn't * cursed with that curse and -1 on failure to remove. * int remove_disease(string name, object remover); same as remove_curse * string *query_curses() returns the curses you currently have * string *query_diseases() same as query_curses * */ #define CURSE_TAB "/table/curse_tab" mapping curses, diseases; void create() { curses = ([ ]); diseases = ([ ]); } string query_curse(string name) { if (!mappingp(curses)) curses = ([ ]); if (!curses[name]) return 0; return curses[name]; } string query_disease(string name) { if (!mappingp(diseases)) diseases = ([ ]); if (!diseases[name]) return 0; return diseases[name]; } string *query_curses() { return keys(curses); } string *query_diseases() { return keys(diseases); } int add_disease(string name) { object ob; if (!mappingp(diseases)) diseases = ([ ]); if(!ob = CURSE_TAB->query_disease(name)) return 0; diseases[name] = ob; ob->init_curse(this_object()); ob->player_start(this_object()); return 1; } int remove_disease(string name, object remover) { if (!mappingp(diseases)) diseases = ([ ]); if (!diseases[name]) return 0; if(remover) { if(diseases[name]->prevent_remove(this_object(), remover)) return -1; } diseases[name]->curse_end(this_object()); diseases[name]->player_quit(this_object()); diseases = m_delete(diseases, name); return 1; } int add_curse(string name) { object ob; if (!mappingp(curses)) curses = ([ ]); if(!ob = CURSE_TAB->query_curse(name)) return 0; curses[name] = ob; ob->init_curse(this_object()); ob->player_start(this_object()); return 1; } int remove_curse(string name, object remover) { int i; if (!mappingp(curses)) curses = ([ ]); if (!curses[name]) return 0; if(remover) { if(curses[name]->prevent_remove(this_object(), remover)) return -1; } curses[name]->curse_end(this_object()); curses[name]->player_quit(this_object()); curses = m_delete(curses, name); return 1; } void curses_quit() { int i; string *names; if (!mappingp(diseases)) diseases = ([ ]); if (!mappingp(curses)) curses = ([ ]); names = keys(curses); for (i=0;i<sizeof(names);i++) catch(curses[names[i]]->player_quit(this_object())); names = keys(diseases); for (i=0;i<sizeof(names);i++) catch(diseases[names[i]]->player_quit(this_object())); } void curses_start() { int i; string *names; if (!mappingp(diseases)) diseases = ([ ]); if (!mappingp(curses)) curses = ([ ]); names = keys(curses); for (i=0;i<sizeof(names);i++) catch(curses[names[i]]->player_start(this_object())); names = keys(diseases); for (i=0;i<sizeof(names);i++) catch(diseases[names[i]]->player_start(this_object())); } void curses_heart_beat() { int i; string *names; if (!mappingp(diseases)) diseases = ([ ]); if (!mappingp(curses)) curses = ([ ]); names = keys(curses); for (i=0;i<sizeof(names);i++) catch(curses[names[i]]->curse_heart_beat(this_object())); names = keys(diseases); for (i=0;i<sizeof(names);i++) catch(diseases[names[i]]->curse_heart_beat(this_object())); }