/* This is a testversion. I have to see if the spellfunctions is needed here at all.. Seems likt it's not.. Wonder about the command stuff.... Commands is needed, but I think I'll change the names to remove the similarity to add_command for players.. Usage now is: add_guild_command.. Baldrick march '94.. */ inherit "/std/object"; inherit "/std/basic/cute_look"; #include "skills.h" #include "commands.h" #include "tune.h" /* Hrmf.. why is the spells mentioned here at all ??? I wonder if it may be out of date... Baldrick.. */ string *guild_commands,main_skill; string needed_align; int heal_loop, level; int query_dice(); void new_levels(int lvl, object ob); void create() { guild_commands = ({ }); ::create(); } int query_channel() { return 1; } string help() { return read_file("/doc/helpdir/guilds"); } void set_needed_align(string bing) { needed_align = bing; return; } string query_needed_align() { return needed_align; } int query_legal_race(string race) { return 1; } int query_legal_weapon(string str) { return 1; } int query_legal_armour(string str) { return 1; } string query_spell_directory() { return 0; } mixed query_legal_spheres() { return ({ }); } int query_max_skill_level(string skill) { if((int)this_object()->query_level() * 3 < 300) return (int)this_object()->query_level() * 3; return 300; } int query_valid_melee_weapon(object ob) { return 1;} // Added 1 nov 93 Chrisy cuz sum1 4got it :) int query_number_worn(string str) { return 1; } // Added 1 nov 93 Chrisy cuz sum1 4got it string query_main_skill() {return main_skill;} void set_main_skill(string str) { main_skill = str; return; } int add_guild_command(string name, int add_if_player) { if (member_array(name, guild_commands) != -1) return 0; guild_commands += ({ name, ({ add_if_player }) }); return 1; } /* Not sure why this is needed.. */ int remove_guild_command(string name) { int i; if ((i = member_array(name, guild_commands)) == -1) return 0; guild_commands = delete(guild_commands, i, 1); return 1; } int do_command(string name, mixed param) { mixed *tmp; if (member_array(name, guild_commands)) return 0; tmp = (mixed *)COMMAND_SERVER->query_command(name); return (int)call_other(tmp[0], tmp[1], param); } string *query_guild_commands() { return guild_commands; } int query_skill_cost(string skill) { return 0; } /* Simply how much money the guild will charge to train you */ int query_advance_cost() { return DEFAULT_COST; } /* Seems we won't use this one, but check *bits of skills instead */ int query_xp_cost() { return DEFAULT_XP_COST; } int query_max_level() { return 300; } int query_dice() { return 8; } /* Instead of the titles we've been using so far we might want to just * let the guild titles consist of <level> <guild>. At least this will be * the standard. If that's not acceptable, just mask this function. */ string query_title(object player) { return "the "+number_as_place(player->query_level())+" Level "+capitalize(query_short()); } /* * cant think of anything I want to do here at the moment... * This is where you would set up any shadows you want on the player * object (for instance kits/specializations). The only thing we'll * do here in the inheritable guild is to add known guild_commands and spells * for monsters (who'll more often have guild_commands and spells than a guild * who'll give it to them. */ void start_player(object pl) { int i; level = (int)pl->query_level(); if (!pointerp(guild_commands)) guild_commands = ({ }); for (i=0;i<sizeof(guild_commands);i+=2) if (guild_commands[i+1][0] || !interactive(pl)) pl->add_known_command(guild_commands[i]); } /* Not something players should be able to do until we add dual class humans. * Up until then we leave the function open so that lords can call it * instead of set_guild_ob() which they often seem to bungle. * We will stop removing spells when dual class is implemented */ void leave_guild() { "/global/spells"->reset_spells(); } /* What happens when you advance in level */ void new_levels(int lvl, object ob) { int i,skill_index,bonus,stat; level = lvl; if (!(lvl%5)) { for (i=0;i<random(3)+1;i++) { bonus=random(5); if((ob->query_max_skill_level(main_skill) < (lvl + bonus)) && (ob->query_skill_level(main_skill) < (lvl*3))) ob->add_skill_level(main_skill,bonus); } write("You didn't earn any new skills as this bit ain't written yet.\n"); } if (!(lvl%10)) { if(random(100) < 25){ stat=random(6); switch(stat){ case 1 : if(ob->query_str() < 19) ob->adjust_str(1); break; case 2: if(ob->query_int() <18) ob->adjust_int(1); break; case 3: if(ob->query_dex() < 18) ob->adjust_dex(1); break; case 4: if (ob->query_con() < 18) ob->adjust_con(1); break; case 5: if (ob->query_wis() < 18) ob->adjust_wis(1); break; case 6: if (ob->query_cha() <18) ob->adjust_cha(1); break; default : break; } } } ob->reset_all(); } int query_level(object ob) { return level; } int query_dual_wield_penalty(object me, object w1, object w2) { return 50; }