/** * This is called off of the monster to set up a race and * profession... Race should be first then profession.. * @author Pinkfish * @started Sometime in 1991 */ #include "race.h" inherit "/std/basic/print_object"; private mapping _races; private mapping _guilds; private mapping _race_obs; private mapping _guild_obs; void create() { string tmp; _races = ([ 0 : "/std/races/human", /* first the null race */ "ape" : "/std/races/ape", "arachnid" : "/std/races/arachnid", "baboon" : "/std/races/baboon", "basilisk" : "/std/races/basilisk", "badger" : "/std/races/badger", "bat" : "/std/races/bat", "bear" : "/std/races/bear", "beetle" : "/std/races/beetle", "bird" : "/std/races/bird", "blowfish" : "/std/races/blowfish", "bufonid" : "/std/races/bufonid", "cabbage" : "/std/races/cabbage", "camel" : "/std/races/camel", "cat" : "/std/races/cat", "caterpillar" : "/std/races/caterpillar", "chicken" : "/std/races/chicken", "chimera" : "/std/races/chimera", "cockroach" : "/std/races/cockroach", "cow" : "/std/races/cow", "crab" : "/std/races/crab", "crocodile" : "/std/races/crocodile", "deer" : "/std/races/deer", "demon" : "/std/races/demon", "dog" : "/std/races/dog", "dryad" : "/std/races/dryad", "duck" : "/std/races/duck", "dwarf" : "/std/races/dwarf", "duckling" : "/std/races/duckling", "eagle" : "/std/races/chicken", "elemental" : "/std/races/elemental", "elephant" : "/std/races/elephant", "elf" : "/std/races/elf", "ferret" : "/std/races/ferret", "fish" : "/std/races/fish", "fox" : "/std/races/fox", "frog" : "/std/races/frog", "gargoyle" : "/std/races/gargoyle", "giant" : "/std/races/giant", "giant bat" : "/std/races/giant_bat", "giant spider" : "/std/races/giant_spider", "gnoll" : "/std/races/gnoll", "gnome" : "/std/races/gnome", "goat" : "/std/races/goat", "golem" : "/std/races/golem", "grflx" : "/std/races/grflx", "guppy" : "/std/races/guppy", "half elf" : "/std/races/half_elf", "hare" : "/std/races/hare", "hedgehog" : "/std/races/hedgehog", "hengeyokai" : "/std/races/hengeyokai", "horse" : "/std/races/horse", "human" : "/std/races/human", "igor" : "/std/races/igor", "imp" : "/std/races/imp", "insect" : "/std/races/insect", "light" : "/std/races/light", "lion" : "/std/races/lion", "lobster" : "/std/races/lobster", "luggage" : "/std/races/luggage", "jellyfish" : "/std/races/jellyfish", "mole" : "/std/races/mole", "moose" : "/std/races/moose", "mouse" : "/std/races/mouse", "mustelidae" : "/std/races/mustelidae", "newt" : "/std/races/newt", "noble dragon" : "/std/races/noble_dragon", "nymph" : "/std/races/nymph", "peacock" : "/std/races/peacock", "penguin" : "/std/races/penguin", "panda" : "/std/races/panda", "parrot" : "/std/races/parrot", "pig" : "/std/races/pig", "rabbit" : "/std/races/rabbit", "raptor" : "/std/races/raptor", "rat" : "/std/races/rat", "rodent" : "/std/races/rodent", "sargassum" : "/std/races/sargassum", "satyr" : "/std/races/satyr", "scorpion" : "/std/races/scorpion", "sektarian demon" : "/std/races/sektarian_demon", "shark" : "/std/races/shark", "sprite" : "/std/races/sprite", "sheep" : "/std/races/sheep", "skunk" : "/std/races/skunk", "slice human" : "/std/races/slice_human", "snake" : "/std/races/snake", "sphinx" : "/std/races/sphinx", "spider" : "/std/races/spider", "squirrel" : "/std/races/squirrel", "stoat" : "/std/races/stoat", "stone giant" : "/std/races/stone_giant", "stone palm" : "/std/races/stone_palm", "strange" : "/std/races/strange", "swamp dragon" : "/std/races/swamp_dragon", "toad" : "/std/races/toad", "tortoise" : "/std/races/tortoise", "tree" : "/std/races/tree", "troll" : "/std/races/troll", "vulture" : "/std/races/vulture", "unicorn" : "/std/races/unicorn", "vampire" : "/std/races/vampire", "vorpal bunny" : "/std/races/vorpal_bunny", "weasel" : "/std/races/weasel", "werewolf" : "/std/races/werewolf", "wolf" : "/std/races/wolf", "wombat" : "/std/races/wombat", "wererat" : "/std/races/wererat", "giant rat" : "/std/races/giant_rat", ]); _guilds = ([ 0 : "/std/guilds/standard", "fighter" : "/std/guilds/warrior", "warrior" : "/std/guilds/warrior", "cleric" : "/std/guilds/priest", "priest" : "/std/guilds/priest", "witch" : "/std/guilds/witch", "wizard" : "/std/guilds/wizard", "cat burglar" : "/std/guilds/thief", "cut throat" : "/std/guilds/thief", "thief" : "/std/guilds/thief", "pickpocket" : "/std/guilds/thief", "swashbuckler" : "/std/guilds/thief", "monk" : "/std/guilds/monk", "assassin" : "/std/guilds/assassin", ]); _race_obs = ([ ]); // Cache the loaded race & guild objects. foreach(tmp in values(_races)) _race_obs[tmp] = load_object(tmp); _guild_obs = ([ ]); foreach(tmp in values(_guilds)) catch(_guild_obs[tmp] = load_object(tmp)); } /** * This method checks to see if the specified race is valid or not. * @param race the race to check for validity * @return 1 if it exists, 0 if it does not */ int query_valid_race( string race ) { return !undefinedp(_races[race]); } /* query_valid_race() */ /** * This method sets the level of the npc with the specified attributes. * @param lvl the level to set the npc at * @param race the race to set the npc with * @param guild the guild to set the npc with */ void set_level( int lvl, string race, string guild ) { object ob; string race_ob, guild_ob; if (_races[race]) { race_ob = _races[race]; } else { race_ob = _races[0]; } if (_guilds[guild]) { guild_ob = _guilds[guild]; } else { guild_ob = _guilds[0]; } ob = previous_object(); ob->set_no_check(1); ob->set_race_ob(race_ob); /* Done in /global/guild-race race_ob->start_player(ob); */ race_ob->set_level(ob, lvl); ob->set_guild_ob(guild_ob); /* Done in /global/guild-race guild_ob->start_player(ob); */ guild_ob->set_level(ob, lvl, guild); ob->race_guild_commands(); } /* set_level() */ private int add_race( string name, mixed ob ) { if (_races[name]) { return 0; } _races[name] = ob; return 1; } /* add_race() */ private int remove_race( string name ) { if (!_races[name]) { return 0; } _races[name] = 0; return 1; } /* remove_race() */ /** * This method returns all the current races in the race object. It is a * mapping with matches between the name of the race and race object. * @return the race mapping */ mapping query_races() { return copy(_races); } /* query_racs() */ /** * This method returns the path associated with the specified race. * @param race_name the name of the race * @return the path of the race */ string query_race_path( string race_name ) { return _races[race_name]; } /* query_race_path() */ private int add_guild( string name, mixed ob ) { if (_guilds[name]) { return 0; } _guilds[name] = ob; return 1; } /* add_guild() */ private int remove_guild( string name ) { if (!_guilds[name]) { return 0; } _guilds[name] = 0; return 1; } /* remove_guild() */ /** * This method returns all the current guilds in the race object. It is a * mapping with matches between the name of the guild and guild object. * @return the race mapping */ mapping query_guilds() { return copy(_guilds); } /* query_guilds() */ /** * This method returns the path associated with the specified guild. * @param guild_name the name of the guild * @return the path of the guild */ string query_guild_path(string guild_name) { return _guilds[guild_name]; } /* query_guild_path() */ /** * This method is called from inside the npc to do the heartbeat on the * guild and race objects. * @param race the race to do a heart beat on * @param guild the guild to do a heart beat on * @param race_ob the object to use for the race * @param guild_ob the object to use for the guild */ void monster_heart_beat(string race, string guild, mixed race_ob, mixed guild_ob) { object tmp; if(stringp(race_ob)) { if(!_race_obs[race_ob]) _race_obs[race_ob] = find_object(race_ob); tmp = _race_obs[race_ob]; } else if(objectp(race_ob)) tmp = race_ob; if(tmp) tmp->player_heart_beat( race, previous_object() ); if(stringp(guild_ob)) { if(!_guild_obs) _guild_obs = ([ ]); if(!_guild_obs[guild_ob]) { _guild_obs[guild_ob] = find_object(guild_ob); } tmp = _guild_obs[guild_ob]; } else if(objectp(guild_ob)) tmp = guild_ob; if(tmp) tmp->player_heart_beat(guild, previous_object()); } /* monster_heart_beat() */