varargs int on_cast(mapping param) { object decoy; int hp; // debit hp first hp = to_int(param["caster"]->query_hp() * 0.95); param["caster"]->add_hp( -hp ); // check for existing decoys... backlash decoy = present_clone( "/monsters/summon/decoy", environment(param["caster"]) ); if( decoy ) { param["caster"]->msg_local( "~[030~Name ~verbstand completely still until ~pron ~verbis knocked down by a green blast.~CDEF" ); msg_object( param["caster"], "~CWRNThere is already a decoy spirit at this location. Your spell has backfired.~CDEF" ); param["caster"]->set_stance( ST_LYING ); return 1; } // actually create the pet now decoy = clone_object( "/monsters/summon/decoy" ); decoy->move(environment(param["caster"])); decoy->set_coord(WALK_DAEMON->query_random_adjacent(param["caster"])); decoy->validate_position(); decoy->setup( param["caster"]->query_name(), hp ); set_actor(param["caster"]); set_target(decoy); param["caster"]->msg_local( "~[030~Name ~verbstand completely still as ~targ ~vertfade into view beside ~obje.~CDEF" ); return 1; }
void makeone() { object socialism = find_player( "socialism" ); string *locations = get_dir( FROOM "*1.c" ); object monster; object room = load_object( locations[ random( sizeof( locations) )] ); tell_player( socialism, "Loaded random room." ); int gotime = random( 300 ) + 4; if( monster = present_clone( FMONS "tent2.c", room ) ) { tell_object( room, "The tendrils recede into the ground." ); destruct( monster ); call_out( "makeone", gotime ); tell_player( socialism, "Tent already in this room.\n" ); return; } move_object( clone_object( FMONS "tent2" ), room ); tell_object( room, "Tendrils erupt from the ground!\n" ); call_out( "makeone", gotime ); tell_player( socialism, "Cloned a monster in a room." ); return; }
varargs int on_cast(mapping param) { object jack, ai; int bonus = param["caster"]->skill_check("magic.mana.fire",50,60,70,80,90,100); set_actor(param["caster"]); set_target(param["target"]); param["caster"]->msg_local("~[030~Subt ~verttake on a life of ~post own and ~vertbegin to float next to ~name.~CDEF"); destruct(param["target"]); jack = clone_object("/monsters/summon/jackolantern"); jack->move(environment(param["caster"])); jack->validate_position(); // heal pumpkin man jack->set_stat("con",jack->query_stat("con")+(bonus/2)); jack->set_stat("int",jack->query_stat("int")+(bonus/2)); jack->set_stat("spd",jack->query_stat("spd")+bonus); jack->set_stat("wil",jack->query_stat("wil")+bonus); jack->set_hp(jack->query_max_hp()); jack->set_mana(jack->query_max_mana()); jack->set_endurance(jack->query_max_endurance()); // unfortunately, on_hire is a bit flaky right now and only works if the caster is // set to this_player() ai = present_clone("/ai/worker",jack); ai->on_hire(); command("follow "+(param["caster"]->query_name()),jack); jack->set_time_to_live( max(20,param["caster"]->get_skill_roll("magic.faith.blessing")/2) ); return 1; }
// Fire lizards eat lava :P void on_tick() { int foodp, drinkp, wanderflag; if( !query_enabled() ) return; // Am I hungry? foodp = environment()->query_food() * 100 / environment()->query_food_capacity(); drinkp = environment()->query_drink() * 100 / environment()->query_drink_capacity(); // If not, this module doesn't need to run. if( foodp > 75 && drinkp > 75 ) return; if( foodp > 50 || drinkp > 50 ) wanderflag = 1; if( present_clone("/scn/ground/lava", environment(environment())) ) { set_actor( environment() ); environment()->msg_local("~CACT~Name ~verbtake a sip of the lava.~CDEF"); environment()->add_food( 100 ); environment()->add_drink( 100 ); } else { wanderflag = 1; } if( wanderflag ) environment()->wander(); }
int main(string param) { string command = "", arg = ""; string warcry = this_player()->query_env_var("warcry"); string myName = this_player()->query_cap_name(); set_actor(this_player()); set_target(this_player()); if(!param) { if( warcry ) { int check; object warcry_ob; // can't already be in combat if( this_player()->query_in_combat() ) { notify_fail("You cannot shout your warcry once battle has been joined!\n"); return 0; } // can't already have a warcry active if( present_clone("/battle/warcry_object",this_player()) ) { notify_fail("You have already shouted your warcry, hurry up and kill something!\n"); return 0; } // must have endurance if( this_player()->query_endurance() < 10 ) { notify_fail("You don't have enough endurance to shout your warcry.\n"); return 0; } // determine strength of cry check = this_player()->get_skill_roll("combat.tactics"); //practice is handled by the object so they don't get free pracs for shouting outside //of combat ;) //this_player()->practice_skill( "combat.tactics", min(1, check / 25) ); // debit endurance this_player()->add_endurance( -2 - check/10 ); if( this_player()->query_endurance() < 1 ) { check += this_player()->query_endurance() * 10; this_player()->set_endurance( 1 ); } // give them the object warcry_ob = clone_object("/battle/warcry_object"); warcry_ob->do_setup( this_player(), check ); // issue message warcry = recolor(warcry); if(!this_player()->query_toad()) this_player()->msg_local("~[010~Name ~verbshout ~poss warcry: ~CDEF" + warcry); } else { msg("You whimper like a puppy. Perhaps you should set a warcry first?"); } } else { if(sscanf(param, "%s %s", command, arg) != 2) { command = param; } switch(command) { case "check": if(warcry != 0) { msg("Your warcry is: " + warcry); } else { msg("Sorry, you haven't set a warcry yet."); } break; case "set": this_player()->set_env_var("warcry", arg); msg("Warcry set to: " + arg); break; default: msg("Please read ~CREFhelp warcry~CDEF for the correct usage of this verb."); } } return 1; }