コード例 #1
0
ファイル: decoy.c プロジェクト: shentino/simud
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;
}
コード例 #2
0
ファイル: monsterwell.c プロジェクト: smokeless/eotl
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;
}
コード例 #3
0
ファイル: animate_pumpkin.c プロジェクト: shentino/simud
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;
}
コード例 #4
0
ファイル: fire_lizard.c プロジェクト: shentino/simud
// 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();
}
コード例 #5
0
ファイル: warcry.c プロジェクト: shentino/simud
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;
}