本文整理汇总了C++中IN_ROOM函数的典型用法代码示例。如果您正苦于以下问题:C++ IN_ROOM函数的具体用法?C++ IN_ROOM怎么用?C++ IN_ROOM使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IN_ROOM函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: core_dump
struct obj_data *unequip_char(struct char_data *ch, int pos)
{
int j;
struct obj_data *obj;
if ((pos < 0 || pos >= NUM_WEARS) || GET_EQ(ch, pos) == NULL) {
core_dump();
return (NULL);
}
obj = GET_EQ(ch, pos);
obj->worn_by = NULL;
obj->worn_on = -1;
if (GET_OBJ_TYPE(obj) == ITEM_ARMOR)
GET_AC(ch) += apply_ac(ch, pos);
if (IN_ROOM(ch) != NOWHERE) {
if (pos == WEAR_LIGHT && GET_OBJ_TYPE(obj) == ITEM_LIGHT)
if (GET_OBJ_VAL(obj, 2)) /* if light is ON */
world[IN_ROOM(ch)].light--;
} else
log("SYSERR: IN_ROOM(ch) = NOWHERE when unequipping char %s.", GET_NAME(ch));
GET_EQ(ch, pos) = NULL;
for (j = 0; j < MAX_OBJ_AFFECT; j++)
affect_modify_ar(ch, obj->affected[j].location,
obj->affected[j].modifier,
GET_OBJ_AFFECT(obj), FALSE);
affect_total(ch);
return (obj);
}
示例2: return
/* Function: get_victim. Returns a pointer to a randomly chosen character in
* the same room, fighting someone in the castle staff. Used by BANZAII-ing
* characters and King Welmar... */
struct char_data *get_victim(struct char_data *chAtChar)
{
struct char_data *ch;
int iNum_bad_guys = 0, iVictim;
for (ch = world[IN_ROOM(chAtChar)].people; ch; ch = ch->next_in_room)
if (FIGHTING(ch) && member_of_staff(FIGHTING(ch)))
iNum_bad_guys++;
if (!iNum_bad_guys)
return (NULL);
iVictim = rand_number(0, iNum_bad_guys); /* How nice, we give them a chance */
if (!iVictim)
return (NULL);
iNum_bad_guys = 0;
for (ch = world[IN_ROOM(chAtChar)].people; ch; ch = ch->next_in_room) {
if (FIGHTING(ch) == NULL)
continue;
if (!member_of_staff(FIGHTING(ch)))
continue;
if (++iNum_bad_guys != iVictim)
continue;
return (ch);
}
return (NULL);
}
示例3: drop_wtrigger
int drop_wtrigger(obj_data *obj, char_data *actor) {
struct room_data *room;
trig_data *t;
char buf[MAX_INPUT_LENGTH];
int ret_val;
if (!actor || !SCRIPT_CHECK(&world[IN_ROOM(actor)], WTRIG_DROP))
return 1;
room = &world[IN_ROOM(actor)];
for (t = TRIGGERS(SCRIPT(room)); t; t = t->next)
if (TRIGGER_CHECK(t, WTRIG_DROP) &&
(rand_number(1, 100) <= GET_TRIG_NARG(t))) {
ADD_UID_VAR(buf, t, actor, "actor", 0);
ADD_UID_VAR(buf, t, obj, "object", 0);
ret_val = script_driver(&room, t, WLD_TRIGGER, TRIG_NEW);
if (obj->carried_by != actor)
return 0;
else
return ret_val;
break;
}
return 1;
}
示例4: mag_groups
/*
* Every spell that affects the group should run through here
* perform_mag_groups contains the switch statement to send us to the right
* magic.
*
* group spells affect everyone grouped with the caster who is in the room,
* caster last.
*
* To add new group spells, you shouldn't have to change anything in
* mag_groups -- just add a new case to perform_mag_groups.
*/
void mag_groups(int level, struct char_data *ch, int spellnum, int savetype)
{
struct char_data *tch, *k;
struct follow_type *f, *f_next;
if (ch == NULL)
return;
if (!AFF_FLAGGED(ch, AFF_GROUP))
return;
if (ch->master != NULL)
k = ch->master;
else
k = ch;
for (f = k->followers; f; f = f_next) {
f_next = f->next;
tch = f->follower;
if (IN_ROOM(tch) != IN_ROOM(ch))
continue;
if (!AFF_FLAGGED(tch, AFF_GROUP))
continue;
if (ch == tch)
continue;
perform_mag_groups(level, ch, tch, spellnum, savetype);
}
if ((k != ch) && AFF_FLAGGED(k, AFF_GROUP))
perform_mag_groups(level, ch, k, spellnum, savetype);
perform_mag_groups(level, ch, ch, spellnum, savetype);
}
示例5: char_to_room
/* place a character in a room */
void char_to_room(struct char_data *ch, room_rnum room)
{
if (ch == NULL || room == NOWHERE || room > top_of_world)
log("SYSERR: Illegal value(s) passed to char_to_room. (Room: %d/%d Ch: %p",
room, top_of_world, ch);
else {
ch->next_in_room = world[room].people;
world[room].people = ch;
IN_ROOM(ch) = room;
autoquest_trigger_check(ch, 0, 0, AQ_ROOM_FIND);
autoquest_trigger_check(ch, 0, 0, AQ_MOB_FIND);
if (GET_EQ(ch, WEAR_LIGHT))
if (GET_OBJ_TYPE(GET_EQ(ch, WEAR_LIGHT)) == ITEM_LIGHT)
if (GET_OBJ_VAL(GET_EQ(ch, WEAR_LIGHT), 2)) /* Light ON */
world[room].light++;
/* Stop fighting now, if we left. */
if (FIGHTING(ch) && IN_ROOM(ch) != IN_ROOM(FIGHTING(ch))) {
stop_fighting(FIGHTING(ch));
stop_fighting(ch);
}
}
}
示例6: hunt_victim
void hunt_victim(struct char_data *ch)
{
int dir;
byte found;
struct char_data *tmp;
if (!ch || !HUNTING(ch) || FIGHTING(ch))
return;
/* make sure the char still exists */
for (found = FALSE, tmp = character_list; tmp && !found; tmp = tmp->next)
if (HUNTING(ch) == tmp)
found = TRUE;
if (!found) {
do_say(ch, "Damn! My prey is gone!", 0, 0);
HUNTING(ch) = NULL;
return;
}
if ((dir = find_first_step(IN_ROOM(ch), IN_ROOM(HUNTING(ch)))) < 0) {
sprintf(buf, "Damn! I lost %s!", HMHR(HUNTING(ch)));
do_say(ch, buf, 0, 0);
HUNTING(ch) = NULL;
} else {
perform_move(ch, dir, 1);
if (IN_ROOM(ch) == IN_ROOM(HUNTING(ch)))
hit(ch, HUNTING(ch), TYPE_UNDEFINED);
}
}
示例7: get_number
struct char_data *get_char_world_vis(struct char_data *ch, char *name, int *number)
{
struct char_data *i;
int num;
if (!number) {
number = #
num = get_number(&name);
}
if ((i = get_char_room_vis(ch, name, number)) != NULL)
return (i);
if (*number == 0)
return get_player_vis(ch, name, NULL, 0);
for (i = character_list; i && *number; i = i->next) {
if (IN_ROOM(ch) == IN_ROOM(i))
continue;
if (!isname(name, i->player.name))
continue;
if (!CAN_SEE(ch, i))
continue;
if (--(*number) != 0)
continue;
return (i);
}
return (NULL);
}
示例8: perform_move
int perform_move(struct char_data *ch, int dir, int need_specials_check)
{
room_rnum was_in;
struct follow_type *k, *next;
if (ch == NULL || dir < 0 || dir >= NUM_OF_DIRS || FIGHTING(ch))
return (0);
else if ((!EXIT(ch, dir) && !buildwalk(ch, dir)) || EXIT(ch, dir)->to_room == NOWHERE)
send_to_char(ch, "Alas, you cannot go that way...\r\n");
else if (EXIT_FLAGGED(EXIT(ch, dir), EX_CLOSED)) {
if (EXIT(ch, dir)->keyword)
send_to_char(ch, "The %s seems to be closed.\r\n", fname(EXIT(ch, dir)->keyword));
else
send_to_char(ch, "It seems to be closed.\r\n");
} else {
if (!ch->followers)
return (do_simple_move(ch, dir, need_specials_check));
was_in = IN_ROOM(ch);
if (!do_simple_move(ch, dir, need_specials_check))
return (0);
for (k = ch->followers; k; k = next) {
next = k->next;
if ((IN_ROOM(k->follower) == was_in) &&
(GET_POS(k->follower) >= POS_STANDING)) {
act("You follow $N.\r\n", FALSE, k->follower, 0, ch, TO_CHAR);
perform_move(k->follower, dir, 1);
}
}
return (1);
}
return (0);
}
示例9: command_wtrigger
int command_wtrigger(char_data *actor, char *cmd, char *argument)
{
struct room_data *room;
trig_data *t;
char buf[MAX_INPUT_LENGTH];
if (!actor || !SCRIPT_CHECK(&world[IN_ROOM(actor)], WTRIG_COMMAND))
return 0;
room = &world[IN_ROOM(actor)];
for (t = TRIGGERS(SCRIPT(room)); t; t = t->next) {
if (!TRIGGER_CHECK(t, WTRIG_COMMAND))
continue;
if (!GET_TRIG_ARG(t) || !*GET_TRIG_ARG(t)) {
sprintf(buf,"SYSERR: W-Command Trigger #%d has no text argument!",
GET_TRIG_VNUM(t));
mudlog(buf, NRM, LVL_BUILDER, TRUE);
continue;
}
if (*GET_TRIG_ARG(t)=='*' ||
!strn_cmp(GET_TRIG_ARG(t), cmd, strlen(GET_TRIG_ARG(t)))) {
ADD_UID_VAR(buf, t, actor, "actor", 0);
skip_spaces(&argument);
add_var(&GET_TRIG_VARS(t), "arg", argument, 0);
skip_spaces(&cmd);
add_var(&GET_TRIG_VARS(t), "cmd", cmd, 0);
return script_driver(room, t, WLD_TRIGGER, TRIG_NEW);
}
}
return 0;
}
示例10: speech_wtrigger
void speech_wtrigger(char_data *actor, char *str)
{
struct room_data *room;
trig_data *t;
char buf[MAX_INPUT_LENGTH];
if (!actor || !SCRIPT_CHECK(&world[IN_ROOM(actor)], WTRIG_SPEECH))
return;
room = &world[IN_ROOM(actor)];
for (t = TRIGGERS(SCRIPT(room)); t; t = t->next) {
if (!TRIGGER_CHECK(t, WTRIG_SPEECH))
continue;
if (!GET_TRIG_ARG(t) || !*GET_TRIG_ARG(t)) {
sprintf(buf,"SYSERR: W-Speech Trigger #%d has no text argument!",
GET_TRIG_VNUM(t));
mudlog(buf, NRM, LVL_BUILDER, TRUE);
continue;
}
if (((GET_TRIG_NARG(t) && word_check(str, GET_TRIG_ARG(t))) ||
(!GET_TRIG_NARG(t) && is_substring(GET_TRIG_ARG(t), str)))) {
ADD_UID_VAR(buf, t, actor, "actor", 0);
add_var(&GET_TRIG_VARS(t), "speech", str, 0);
script_driver(room, t, WLD_TRIGGER, TRIG_NEW);
break;
}
}
}
示例11: cast_wtrigger
int cast_wtrigger(char_data *actor, char_data *vict, obj_data *obj, int spellnum) {
room_data *room;
trig_data *t;
char buf[MAX_INPUT_LENGTH];
if (!actor || !SCRIPT_CHECK(&world[IN_ROOM(actor)], WTRIG_CAST))
return 1;
room = &world[IN_ROOM(actor)];
for (t = TRIGGERS(SCRIPT(room)); t; t = t->next) {
if (TRIGGER_CHECK(t, WTRIG_CAST) &&
(rand_number(1, 100) <= GET_TRIG_NARG(t))) {
ADD_UID_VAR(buf, t, actor, "actor", 0);
if (vict)
ADD_UID_VAR(buf, t, vict, "victim", 0);
if (obj)
ADD_UID_VAR(buf, t, obj, "object", 0);
sprintf(buf, "%d", spellnum);
add_var(&GET_TRIG_VARS(t), "spell", buf, 0);
add_var(&GET_TRIG_VARS(t), "spellname", skill_name(spellnum), 0);
return script_driver(&room, t, WLD_TRIGGER, TRIG_NEW);
}
}
return 1;
}
示例12: make_corpse
void make_corpse(struct char_data * ch)
{
struct obj_data *corpse, *o;
struct obj_data *money;
int i;
corpse = create_obj();
corpse->item_number = NOTHING;
IN_ROOM(corpse) = NOWHERE;
corpse->name = str_dup("corpse");
sprintf(buf2, "The corpse of %s is lying here.", GET_NAME(ch));
corpse->description = str_dup(buf2);
sprintf(buf2, "the corpse of %s", GET_NAME(ch));
corpse->short_description = str_dup(buf2);
GET_OBJ_TYPE(corpse) = ITEM_CONTAINER;
GET_OBJ_WEAR(corpse) = ITEM_WEAR_TAKE;
GET_OBJ_EXTRA(corpse) = ITEM_NODONATE;
GET_OBJ_VAL(corpse, 0) = 0; /* You can't store stuff in a corpse */
GET_OBJ_VAL(corpse, 3) = 1; /* corpse identifier */
GET_OBJ_WEIGHT(corpse) = GET_WEIGHT(ch) + IS_CARRYING_W(ch);
GET_OBJ_RENT(corpse) = 100000;
if (IS_NPC(ch))
GET_OBJ_TIMER(corpse) = max_npc_corpse_time;
else
GET_OBJ_TIMER(corpse) = max_pc_corpse_time;
/* transfer character's inventory to the corpse */
corpse->contains = ch->carrying;
for (o = corpse->contains; o != NULL; o = o->next_content)
o->in_obj = corpse;
object_list_new_owner(corpse, NULL);
/* transfer character's equipment to the corpse */
for (i = 0; i < NUM_WEARS; i++)
if (GET_EQ(ch, i)) {
remove_otrigger(GET_EQ(ch, i), ch);
obj_to_obj(unequip_char(ch, i), corpse);
}
/* transfer gold */
if (GET_GOLD(ch) > 0) {
/* following 'if' clause added to fix gold duplication loophole */
if (IS_NPC(ch) || (!IS_NPC(ch) && ch->desc)) {
money = create_money(GET_GOLD(ch));
obj_to_obj(money, corpse);
}
GET_GOLD(ch) = 0;
}
ch->carrying = NULL;
IS_CARRYING_N(ch) = 0;
IS_CARRYING_W(ch) = 0;
obj_to_room(corpse, IN_ROOM(ch));
}
示例13: weather_skill_modifier
int weather_skill_modifier(CHAR_DATA * ch, int skillnum, int type, int value)
{
int modi = value, sky = weather_info.sky;
if (IS_NPC(ch) ||
SECT(IN_ROOM(ch)) == SECT_INSIDE ||
SECT(IN_ROOM(ch)) == SECT_CITY ||
ROOM_FLAGGED(IN_ROOM(ch), ROOM_INDOORS) || ROOM_FLAGGED(IN_ROOM(ch), ROOM_NOWEATHER))
return (modi);
sky = GET_ROOM_SKY(IN_ROOM(ch));
switch (type)
{
case GAPPLY_SKILL_SUCCESS:
switch (skillnum)
{
case SKILL_THAC0:
if (weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK)
{
switch (sky)
{
case SKY_CLOUDLESS:
modi = modi * 90 / 100;
break;
case SKY_CLOUDY:
modi = modi * 80 / 100;
break;
case SKY_RAINING:
modi = modi * 70 / 30;
break;
}
}
else
{
switch (sky)
{
case SKY_CLOUDY:
modi = modi * number(85, 95) / 100;
break;
case SKY_RAINING:
modi = modi * number(75, 85) / 100;
break;
}
}
break;
}
break;
}
if (WAITLESS(ch))
modi = MAX(modi, value);
return (modi);
}
示例14: obj_room
/* returns the real room number that the object or object's carrier is in */
room_rnum obj_room(obj_data *obj)
{
if (IN_ROOM(obj) != NOWHERE)
return IN_ROOM(obj);
else if (obj->carried_by)
return IN_ROOM(obj->carried_by);
else if (obj->worn_by)
return IN_ROOM(obj->worn_by);
else if (obj->in_obj)
return obj_room(obj->in_obj);
else
return NOWHERE;
}
示例15: send_to_zone
void send_to_zone(char *messg, int zone_rnum)
{
struct descriptor_data *i;
if (!messg || !*messg)
return;
for (i = descriptor_list; i; i = i->next)
if (!i->connected && i->character && AWAKE(i->character) &&
(IN_ROOM(i->character) != NOWHERE) &&
(world[IN_ROOM(i->character)].zone == zone_rnum))
write_to_output(i, TRUE, "%s", messg);
}