예제 #1
0
void init_alias_list() {
    object	obj;

#if 0
    if(!list_ab && this_player()) {
        obj = first_inventory(this_player());
        while(obj) {
            if(obj->query_quicktyper(0)) {
                if(1 || is_debug) {
                    write("retrieving alias from existing quicktyper ");
                    write(obj);
                    write ("\n");
                }
                /* retrieve alias from an existing quicktyper */
                list_ab = obj->query_quicktyper(0);
                list_cmd = obj->query_quicktyper(1);
                break;
            }
            obj = next_inventory(obj);
        }
        if(!list_ab) {
            list_cmd = 0;
        }
        if(!list_cmd) {
            list_ab = 0;
        }
    }
#endif
    if(!list_ab) {
        list_ab = allocate(24);
    }
    if(!list_cmd) {
        list_cmd = allocate(24);
    }
}
예제 #2
0
int refresh(object obj) {

    int	may_need_warning;

    may_need_warning = 0;

    if(is_debug) {
        tell_object(obj, "Refreshing Quicktyper,");
    }
    if(first_inventory(obj) != this_object()) {
        may_need_warning = 1;
    }
    refreshing = 1;

    move_object(this_object(), "room/storage");

    if(is_debug) {
        tell_object(obj, "moved to storage,");
    }

    move_object(this_object(), obj);

    if(is_debug) {
        tell_object(obj, "back again\n");
    }

    if(may_need_warning && obj->query_level() > 19)  {
        tell_object(obj, "Quicktyper: Your inventory has been rearranged.\n");
    }
    refreshing = 0;
    needs_refresh = 0;

    return 1;
}
예제 #3
0
int transfer_all_to(object dest) {
  object *ob;
  int i;
 
  ob = all_inventory(this_object());
  for (i=0;i<sizeof(ob);i++)
    ob[i]->move(dest);
  if (first_inventory(this_object())) return 0;
  return 1;
} /* transfer_all_to() */
예제 #4
0
find_dungeon_room(x, y, z) {
    object the_room;

    the_room = first_inventory(this_object());
    while (the_room) {
	if (the_room->match_xyz(x, y, z))
	    return the_room;
	the_room = next_inventory(the_room);
    }
}
void drink_from_it() {
    object ob;
    
    if (needs_contents)
	ob = first_inventory();
    else
	ob = this_object();

    ob->drink_it();
}
예제 #6
0
파일: desc_vars.c 프로젝트: shentino/simud
/** HASINV (condition): If the object is holding at least one other object, then
 * returns true, else false.
 *
 * The pig ?(HASINV:appears to be carrying something):(is empty-handed).
 */
string has_inv( object env, string scount ) {
   int icount;

   icount = to_int(scount);
   if( icount )
      return sizeof(all_inventory(env)) == icount?"":0;
   if( !first_inventory(env) )
      return 0;
   else
      return "";
}
예제 #7
0
파일: stopcombat.c 프로젝트: shentino/simud
main(string who) {

  WIZ_CHECK

  object victim = first_inventory(environment(this_player()));
  while (victim) {
    victim->stop_combat();
    victim = next_inventory(victim);
  }
  this_player()->msg_local("~CBRT~Name ~verbraise ~poss hands and ~verbcall a time-out.~CDEF");
  return 1;
}
예제 #8
0
파일: farm.c 프로젝트: shentino/simud
void supply_food() {
    object ob, silo = get_silo();
    if( silo ) {
        foreach( ob : all_inventory(environment()) ) {
            // Easy-out; this isn't perfect, it could be a non-food
            // item or something.
            if( !first_inventory(silo) )
                return;
            ob->on_supply( silo );
        }
    }
}
예제 #9
0
throw_out_players() {
    object obj, this_obj;

    obj = first_inventory(this_object());
    while (obj) {
	this_obj = obj;
	obj = next_inventory(obj);
	if (living(this_obj) && !this_obj->query_npc()) {
	    tell_object(this_obj, "Suddenly, you have a feeling of disorientation.\n");
	    this_obj->move_player("out#players/padrone/tower/hall");
	}
    } /* while */
} /* throw_out_players */
예제 #10
0
파일: sea.c 프로젝트: dartmud/ldmud
int dive() {
    object ob;

    ob = first_inventory(this_player());
    while(ob) {
        if (ob->can_put_and_get()) {
            this_player()->move_player("down#room/sea_bottom");
            return 1;
        }
        ob = next_inventory(ob);
    }
    write("You can't breathe under water !\n");
    write("You should try to get some portable air supply!\n");
    return 1;
}
mixed direct_drink_from_obj() {
    object ob;
    
    if (this_object()->query_closed())
	return capitalize(the_short()) + " is closed.\n";

    if (needs_contents)
	ob = first_inventory();
    else
        ob = this_object();
    
    if (!ob)
	return capitalize(the_short()) + " is empty.\n";

    return ob->direct_drink_obj();
}
예제 #12
0
int do_pulsar(string str) 
{
  object ob, temp;
  int changed;
  changed = 1;

  if (!stringp(str) || ((str != "boton") && (str != "botón")))
  {
    notify_fail("¿Pulsar qué? Quizá quieras 'pulsar botón'.\n");
    return 0;
  }

  tell_object(this_player(), "Pulsas el botón rojo.\n");
  tell_room(environment(this_object()), this_player()->query_cap_name() +
    " pulsa el botón rojo.\n", this_player());

  while (changed) 
  {
    changed = 0;
    ob = first_inventory(environment(this_object()));

    while (ob) 
    {
      if (ob != this_object() && !query_ip_number(ob)) 
      {
        changed = 1;
        temp = ob;
      }
    
      ob = next_inventory(ob);
    
      if (temp) 
      {
        temp->dest_me();
      }
    }
  }
  return 1;
}
예제 #13
0
void travelers_requirement_celebration_do_speak(descriptor dxr) {
    if(Speech_Flag_Check(dxr, Speech_Flag_OOC))
        return;
    object who = Speech_Query(dxr, Speech_Speaker);
    if(!who->query_intoxication())
        return;
    string msg = Speech_Query(dxr, Speech_Original_Message);
    if(!regmatch("\\<[Gg][Aa][Nn][Ee][Ss][Hh][Aa]\\>", msg))
        return;
    object env = environment(who);
    if(!env)
        return;
    int count = 0;
    for(object obj = first_inventory(env); obj; obj = next_inventory(obj))
        if(obj != who && obj->is_character() && obj->sentience() && obj->sentience()->query_sentience_emotion() && obj->query_intoxication())
            count++;
    if(count < 3)
        return;
    object challenge = Travelers_Find_Challenge(who);
    if(challenge->ganesha_challenge_query_taboo() == "speaking other than by shouting" && Speech_Query(dxr, Speech_Command) != Speech_Command_Shout)
        return;
    challenge->ganesha_challenge_overcome();
}
예제 #14
0
check_castle() {
    object client, idwand, an_obj;
    string client_name, client_lname;

    if (!present("walking castle", this_object()))
	return 0;
    client = call_other(CASTLE, "who_drove_it_here");
    if (client) {
	client_name = client->query_name();
	client_lname = lower_case(client_name);
	if (!present(client, this_object())) {
	    notify("Padrone says: Excuse me, but I would like to talk to " +
		   client->query_name() + ".\n");
	    return 0;
	}
    }
    else {
	/* Just take any player who happens to be here! */
	an_obj = first_inventory(this_object());
	while (an_obj && !client) {
	    if (living(an_obj) && !an_obj->query_npc())
		client = an_obj;
	    an_obj = next_inventory(an_obj);
	}
	client_name = client->query_name();
	client_lname = lower_case(client_name);
    }
    if (!client)
	return 0;

    if (client->query_quests("padrone")) {
	notify("Padrone says: Hi there, " + client_name+ ". Haven't I seen you before?\n");
	notify("Padrone says: But it doesn't matter. I'll give you a reward this time too.\n");
	log_file("padrone", ctime(time()) + ": " + client_name + " solved the quest (again).\n");
    }
    else {
	notify("Padrone says: You found my castle! I am so happy!\n");
	golem->init_command("kiss " + client_lname);
#ifndef GENESIS
	shout("Padrone shouts: " + client_name + " just solved my quest!\n");
#endif
	client->set_quest("padrone");
	log_file("padrone", ctime(time()) + ": " + client_name +
		 " (level " + client->query_level() +
		 ") solved the quest.\n");
    }

    notify("Padrone says: Here! Take this small token of my appreciation!\n");
    notify("Padrone fetches something from another dimension.\n");

    idwand = clone_object("players/padrone/obj/idwand");
    if (client->add_weight(1)) {
	notify("Padrone gives wand to " + client_name + ".\n");
	move_object(idwand, client);
    }
    else {
	notify("Padrone drops the wand.\n");
	move_object(idwand, this_object());
    }
    notify("Padrone says: I have also arranged for a bodyguard for you.\n");
    notify("Padrone says: Just go to Antonio's Personal Protection Service.\n");

    notify("Padrone quietly opens a small door in reality. Then, he is gone.\n");
    notify("The castle disappears in a puff of smoke.\n");
    call_other(CASTLE, "callable_castle_reset");	/* Also resets the bridge */
    move_object(golem, "players/padrone/store");
    call_out("give_bodyguard", 4, client);

    destruct(golem);
    return 1;
} /* check_castle */
예제 #15
0
파일: char.c 프로젝트: oliverypf/es2-utf8
void heart_beat()
{
	int wimpy_ratio, cnd_flag;
	mapping my;
	object ob;

	my = query_entire_dbase();

	// If we are dying because of mortal wounds?
	if( my["eff_kee"] < 0 || my["eff_sen"] < 0 || my["eff_gin"] < 0) {
		remove_all_enemy();
		die();
		return;
	}

	// If we're dying or falling unconcious?
	if( my["kee"] < 0 || my["sen"] < 0 || my["gin"] < 0) {
		remove_all_enemy();
		if( !living(this_object()) ) die();
		else unconcious();
		return;
	}

	// Do attack if we are fighting.
	if( is_busy() ) {
		continue_action();
		// We don't want heart beat be halt eventually, so return here.
		return;
	} else {
		// Is it time to flee?
		if( is_fighting()
		&&	intp(wimpy_ratio = (int)query("env/wimpy"))
		&&	wimpy_ratio > 0
		&&	(	my["kee"] * 100 / my["max_kee"] <= wimpy_ratio
			||	my["sen"] * 100 / my["max_sen"] <= wimpy_ratio
			||	my["gin"] * 100 / my["max_gin"] <= wimpy_ratio) )
			GO_CMD->do_flee(this_object());
		// Do attack or clean up enemy if we have fleed.
		attack();
	}

	if( !userp(this_object()) ) {
		this_object()->chat();
		// chat() may do anything -- include destruct(this_object())
		if( !this_object() ) return;	
	}

	if( tick--  ) return;
	else tick = 5 + random(10);

	cnd_flag = update_condition();

	// If we are compeletely in peace, turn off heart beat.
	// heal_up() must be called prior to other two to make sure it is called
	// because the && operator is lazy :P
	if( ((cnd_flag & CND_NO_HEAL_UP) || !heal_up())
	&&	!is_fighting() 
	&&	!interactive(this_object())) {
		if( environment() ) {
			ob = first_inventory(environment());
			while(ob && !interactive(ob))
				ob = next_inventory(ob);
		}
		if( !ob ) set_heart_beat(0);
	}

	if( !interactive(this_object()) ) return;

	// Make us a bit older. Only player's update_age is defined.
	// Note: update_age() is no need to be called every heart_beat, it
	//       remember how much time has passed since last call.
	this_object()->update_age();

	if(query_idle(this_object()) > IDLE_TIMEOUT)
		this_object()->user_dump(DUMP_IDLE);
}
예제 #16
0
파일: sex.c 프로젝트: wingkit/xyj-ali
int update_sex_status()
{
    mapping my;
    string dodge, force, spells;
    int sex_per, update_flag, sex_affair;

    update_flag = 0;

    my = query_entire_dbase();

    if (!mapp(my)) return 0;

    if (my["want"] > 0 && my["want"] > my["eff_want"]) {
        my["want"] -= 1; update_flag++;
    }
    if (my["enjoy"] > 0) { my["enjoy"] -= 1; update_flag++; }

    sex_per = my["per"] + query_temp("apply/personality");

    dodge = query_skill_mapped("dodge");
    force = query_skill_mapped("force");
    spells = query_skill_mapped("spells");
    sex_affair = 0;
    if (dodge) {
        sex_affair += SKILL_D(dodge)->query_sex_affair();
        if (sex_affair == 0)
            ;
        else if (sex_affair < 0) {
            my["want"] += sex_affair;
            update_flag++;
        }
        else if (sex_affair > 0) {
            sex_per += sex_affair;
        }
    }
    if (force) {
        sex_affair += SKILL_D(force)->query_sex_affair();
        if (sex_affair == 0)
            ;
        else if (sex_affair < 0) {
            my["want"] += sex_affair;
            update_flag++;
        }
        else if (sex_affair > 0) {
            sex_per += sex_affair;
        }
    }
    if (spells) {
        sex_affair += SKILL_D(spells)->query_sex_affair();
         if (sex_affair == 0)
            ;
        else if (sex_affair < 0) {
            my["want"] += sex_affair;
            update_flag++;
        }
        else if (sex_affair > 0) {
            sex_per += sex_affair;
        }
    }

    sex_per += query_temp("apply/sex_personality");

    if (sex_affair > 0)
    {
        object env = environment();
        if (environment()) {
            object ob = first_inventory(environment());
            while (ob) {
                if (living(ob)) {
                    ob->add("want", sex_per);
                    update_flag++;
                }
                ob = next_inventory(ob);
            }
        }
    }

    return update_flag;
}
예제 #17
0
파일: char.c 프로젝트: mudchina/nitan3
void heart_beat()
{
        int t;
        int period;
        int wimpy_ratio, cnd_flag;
        mapping my;
        object ob;
	object me;
	string prompt;
	int is_player;

	me = this_object();
        my = query_entire_dbase();

        if (userp(me) && living(me) && mapp(my["env"]))
        {
                // update prompt
		prompt = my["env"]["prompt"];
                if ((prompt == "time" || prompt == "mud" || prompt == "hp") &&
		    is_waiting_command() && ! me->is_attach_system())
                    
                {
                        write_prompt();
                }
                
        }

        // If we're dying or falling unconcious?
        if (my["qi"] < 0 || my["jing"] < 0)
        {
                if (! living(me)) die();
                else unconcious();

                // Why does the living test? Because
                // The wizard may set immortal but his
                // qi was -1, so I don't want return,
                // or the continue_action will never be
                // called in such case.
                if (! me || ! living(me))
                        return;
        }

        if (is_p_busy())
        {
                continue_p_busy();
        }
        
        // Do attack if we are fighting.
        if (is_busy())
        {
                continue_action();
                // We don't want heart beat be halt eventually, so return here.
        } else
	if (living(me))
        {
                string apply;
                object apply_ob;

                // Is it time to flee?
                if (is_fighting() &&
                   intp(wimpy_ratio = (int)query("env/wimpy")) &&
                   wimpy_ratio > 0 &&
                   (my["qi"] * 100 / my["max_qi"] <= wimpy_ratio ||
                    my["jing"] * 100 / my["max_jing"] <= wimpy_ratio))
                {
                        if (stringp(apply = query("env/wimpy_apply")) &&
                            objectp(apply_ob = present(apply, me)) &&
                            apply_ob->query("can_apply_for_wimpy"))
                        {
                                apply_ob->apply_for_wimpy(this_object());
                        } else
                                GO_CMD->do_flee(this_object());
                }
                
                if (query("auto_perform") || me->query_auto_perform())
                {                       
                        if (my["eff_jing"] > 0 && my["jing"] * 100 / my["eff_jing"] <= 70)
                                SKILL_D("force/regenerate")->exert(me, me);
                        if (my["eff_qi"] > 0 && my["qi"] * 100 / my["eff_qi"] <= 70)
                                SKILL_D("force/recover")->exert(me, me);

                        // 如果不在打架而且处于受伤状态,则自行疗伤
                        if (! is_fighting())
                        {
                                if (my["eff_jing"] < my["max_jing"])
                                        SKILL_D("force/inspire")->exert(me, me);
                                if (my["eff_qi"] < my["max_qi"])
                                        SKILL_D("force/heal")->exert(me, me);
                        }
                }
                // Do attack or clean up enemy if we have fleed.
                if (is_busy())
                        continue_action();
                else
                        attack();
        }

        if (my["doing"] == "scheme")
                // executing schedule now
                SCHEME_CMD->execute_schedule(me);

        if (! me) return;

        if (! (is_player = playerp(me)))
        {
                me->scan();
                // scan() may do anything -- include destruct(this_object())
                if (! me) return;
        }

        if ((t = time()) < next_beat) return;
        else next_beat = t + 5 + random(10);

	if (! my["not_living"])
        	cnd_flag = update_condition();
	if (! me) return;

	if (! (cnd_flag & CND_NO_HEAL_UP))
		cnd_flag = heal_up();

        // If we are compeletely in peace, turn off heart beat.
        // heal_up() must be called prior to other two to make sure it is called
        // because the && operator is lazy :P
        if (! cnd_flag &&
	    ! is_player &&
            ! keep_beat_flag &&
            ! is_fighting() &&
	    ! is_busy() &&
            ! interactive(this_object()))
        {
                if (environment() && query("chat_msg"))
                {
                        ob = first_inventory(environment());
                        while (ob && ! interactive(ob))
                                ob = next_inventory(ob);
                } else
                        ob = 0;
                if (! ob) set_heart_beat(0);
        }

        update_all_limb_damage();
        
        if (! me || ! is_player) return;

        // Make us a bit older. Only player's update_age is defined.
        // Note: update_age() is no need to be called every heart_beat, it
        //       remember how much time has passed since last call.
        me->update_age();

#ifdef AUTO_SAVE
        if (living(me))
        {
            	period = t - ((int) my["last_save"]);
                if (period < 0 || period > 15 * 60)
            	{
                	string msg;
                        msg = HBCYN HIW "【档案存储】您的档案已经自动存盘,"
                              "欢迎访问论坛 http://bbs.mudbuilder.com/ 。\n" NOR;
                	if (! me->save())
                    	msg = HIR "【数据保护】由于数据异常,您的档"
                              "案本次存盘失败。\n" NOR;
                	set("last_save", t);
                	tell_object(me, msg);
            }
        }
#endif
	if (! interactive(me))
		return;

        if (my["food"] <= 0 || my["water"] <= 0)
        {
		if (environment() &&
		    ! environment()->is_chat_room() &&
                    ! wizardp(me) &&
                    ! query_condition("hunger"))
		{
			// born & enter the world
                        apply_condition("hunger", 1);
		}
        }

        if (query_idle(me) > IDLE_TIMEOUT && ! wizardp(me) &&
            (! mapp(my["env"]) || ! my["env"]["keep_idle"]))
                me->user_dump(DUMP_IDLE);
}
예제 #18
0
파일: crazynpc.c 프로젝트: huangleon/fy2005
void heart_beat() {
    int wimpy_ratio, to_wimpy, cnd_flag, oldbusy;
    mapping my;
    object ob;
    string savemyass;

    if(!this_object()) {
        return;
    }

//	command("say start heart_beat");
//	command("say i am busy"+(string)query_busy());
    if (query_temp("in_heart_beat"))
        return;

    my = query_entire_dbase();

    // If we are dying because of mortal wounds?
    if( my["eff_kee"] < 0 || my["eff_sen"] < 0 || my["eff_gin"] < 0
            || my["kee"] < -2 * my["dur"]  || my["sen"] < -2 * my["dur"] || my["gin"] < -2 * my["dur"]) {
        remove_all_enemy();
        die();
        return;
    }

    // If we are unconcious, just return;
    if(query_temp("is_unconcious"))  {
        return;
    }

    // If we're dying or falling unconcious?
    if( my["kee"] < 0 || my["sen"] < 0 || my["gin"] < 0) {
        remove_all_enemy();
        unconcious();
        return;
    }


// let NPC do something in fight that won't be affected by busy...e.g talk
//	all actions in nb_chat will be executed in fight. They should never have busy()
//	as a consequence and they should be allowed to appear at same time.

    if (is_fighting())
        if(objectp(this_object()) && !userp(this_object())) {
            this_object()->nb_chat();
            if(!this_object()) {
                return;
            }
        }

    if (!is_busy()) {

        // (1) Do attack or clean up enemy if we have fleed.
        if(is_fighting()) {
            // Hey, NPC's 心神 doesn't need to be reduced here, let's save some resource
            // my["sen"]--;
            attack();
        }

        // (2) chat() may do anything -- include destruct(this_object())
        if(objectp(this_object()) && !userp(this_object())) {
            this_object()->chat();
            if(!this_object()) {
                return;
            }
        }
    }

    // If busy, continue action and return here.
    if(is_busy()) {
        continue_action();
        return;
    }

    if(tick--) {
        return;
    } else {
        tick = 5 + random(10);
    }

    cnd_flag = update_condition();
    if (!living(this_object())) return;

    // If we are compeletely in peace, turn off heart beat.
    // heal_up() must be called prior to other two to make sure it is called
    // because the && operator is lazy :P

    if( ((cnd_flag & CND_NO_HEAL_UP) || !heal_up()) && !is_fighting()
            && !interactive(this_object())) {
        if(environment()) {
            ob = first_inventory(environment());
            while(ob && !interactive(ob)) {
                ob = next_inventory(ob);
            }
        }
        if(!ob && !query("ALWAYS_ACTIVE")) set_heart_beat(0);
    }
    if(!this_object()) return;
    if(!interactive(this_object())) return;

}