struct char_data *get_char_room_vis(struct char_data * ch, char *name) { struct char_data *i; int j = 0, number; char tmpname[MAX_INPUT_LENGTH]; char *tmp = tmpname; /* JE 7/18/94 :-) :-) */ if (!str_cmp(name, "self") || !str_cmp(name, "me")) return ch; strcpy(tmp, name); if (!(number = get_number(&tmp))) { number = 1; tmp = name; } for (i = world[ch->in_room].people; i && j <= number; i = i->next_in_room) { if (PRF_FLAGGED(i, PRF_NOTSELF) && !PRF_FLAGGED(ch, PRF_DETECT) && !IS_NPC(ch)) { if (isname(tmp, i->char_specials.name_dis)) if (CAN_SEE(ch, i)) if (++j == number) return i; } else if (!IS_APPROVED(i) && !IS_NPC(i)) { GET_NAME(i, chname); if ((isname(tmp, current_short_desc(i)) || isname(tmp, chname)) && CAN_SEE(ch, i)) if (++j == number) return (i); FREE_NAME(chname); } else { if (isname(tmp, i->player.name)) if (CAN_SEE(ch, i)) if (++j == number) return i; } } return NULL; }
struct char_data *get_char_vis(struct char_data *ch, char *name, int where) { struct char_data *i; int j = 0, number; char tmpname[MAX_INPUT_LENGTH]; char *tmp = tmpname; /* check the room first */ if (where == FIND_CHAR_ROOM) return get_char_room_vis(ch, name); else if (where == FIND_CHAR_WORLD) { if ((i = get_char_room_vis(ch, name)) != NULL) return (i); strcpy(tmp, name); if (!(number = get_number(&tmp))) return get_player_vis(ch, tmp, 0); for (i = character_list; i && (j <= number); i = i->next) { if (PRF_FLAGGED(i, PRF_NOTSELF) && !PRF_FLAGGED(ch, PRF_DETECT) && !IS_NPC(ch)) { if (isname(tmp, i->char_specials.name_dis) && CAN_SEE(ch, i)) if (++j == number) return (i); } else if (!IS_APPROVED(i) && !IS_NPC(i)) { GET_NAME(i, chname); if ((isname(tmp, current_short_desc(i)) || isname(tmp, chname)) && CAN_SEE(ch, i)) if (++j == number) return (i); FREE_NAME(chname); } else { if (isname(tmp, i->player.name) && CAN_SEE(ch, i)) if (++j == number) return (i); } } } return (NULL); }
void unaffect_one(struct char_data * ch, int type) { struct affected_type *hjp, *next; for (hjp = ch->affected; hjp; hjp = next) { next = hjp->next; if (hjp->type == type) { affect_remove(ch, hjp, 0); return; } } GET_NAME(ch, chname); sprintf(buf, "SYSERR: Couldn't unaffect_one spellnum %d from %s!", type, chname); FREE_NAME(chname); mudlog(buf, BRF, LVL_GRGOD, TRUE); }
void sub_write_to_char(char_data *ch, char *tokens[], void *otokens[], char type[]) { char sb[MAX_STRING_LENGTH]; int i; strcpy(sb,""); for (i = 0; tokens[i + 1]; i++) { strcat(sb,tokens[i]); switch (type[i]) { case '~': if (!otokens[i]) strcat(sb,"someone"); else if ((char_data *)otokens[i] == ch) strcat(sb,"you"); else { GET_PERS((char_data*) otokens[i], ch, chname); strcat(sb, chname); FREE_NAME(chname); } break; case '@': if (!otokens[i]) strcat(sb,"someone's"); else if ((char_data *)otokens[i] == ch) strcat(sb,"your"); else { GET_PERS((char_data*) otokens[i], ch, chname); strcat(sb, chname); FREE_NAME(chname); strcat(sb,"'s"); } break; case '^': if (!otokens[i] || !CAN_SEE(ch, (char_data *) otokens[i])) strcat(sb,"its"); else if (otokens[i] == ch) strcat(sb,"your"); else strcat(sb,HSHR((char_data *) otokens[i])); break; case '&': if (!otokens[i] || !CAN_SEE(ch, (char_data *) otokens[i])) strcat(sb,"it"); else if (otokens[i] == ch) strcat(sb,"you"); else strcat(sb,HSSH((char_data *) otokens[i])); break; case '*': if (!otokens[i] || !CAN_SEE(ch, (char_data *) otokens[i])) strcat(sb,"it"); else if (otokens[i] == ch) strcat(sb,"you"); else strcat(sb,HMHR((char_data *) otokens[i])); break; case '`': if (!otokens[i]) strcat(sb,"something"); else strcat(sb,OBJS(((obj_data *) otokens[i]), ch)); break; } } strcat(sb,tokens[i]); strcat(sb,"\n\r"); sb[0] = toupper(sb[0]); send_to_char(sb,ch); }
void trigedit_parse(struct descriptor_data *d, char *arg) { int i = 0; switch (OLC_MODE(d)) { case TRIGEDIT_MAIN_MENU: switch (tolower(*arg)) { case 'q': if (OLC_VAL(d)) { /* Anything been changed? */ if (!GET_TRIG_TYPE(OLC_TRIG(d))) { send_to_char("Invalid Trigger Type! Answer a to abort quit!\r\n", d->character); } send_to_char("Do you wish to save the changes to the trigger? (y/n): ", d->character); OLC_MODE(d) = TRIGEDIT_CONFIRM_SAVESTRING; } else cleanup_olc(d, CLEANUP_ALL); return; case '1': OLC_MODE(d) = TRIGEDIT_NAME; send_to_char("Name: ", d->character); break; case '2': OLC_MODE(d) = TRIGEDIT_INTENDED; send_to_char("0: Mobiles, 1: Objects, 2: Rooms: ", d->character); break; case '3': OLC_MODE(d) = TRIGEDIT_TYPES; trigedit_disp_types(d); break; case '4': OLC_MODE(d) = TRIGEDIT_NARG; send_to_char("Numeric argument: ", d->character); break; case '5': OLC_MODE(d) = TRIGEDIT_ARGUMENT; send_to_char("Argument: ", d->character); break; case '6': OLC_MODE(d) = TRIGEDIT_COMMANDS; send_to_char( "Enter trigger commands: (/s saves /h for help)\r\n\r\n", d->character); d->backstr = NULL; if (OLC_STORAGE(d)) { send_to_char(OLC_STORAGE(d), d->character); d->backstr = str_dup(OLC_STORAGE(d)); } d->str = &OLC_STORAGE(d); d->max_str = MAX_CMD_LENGTH; d->mail_to = 0; OLC_VAL(d) = 1; break; default: trigedit_disp_menu(d); return; } return; case TRIGEDIT_CONFIRM_SAVESTRING: switch(tolower(*arg)) { case 'y': trigedit_save(d); GET_NAME(d->character, chname); sprintf(buf, "OLC: %s edits trigger %d", chname, OLC_NUM(d)); FREE_NAME(chname); mudlog(buf, CMP, MAX(LVL_BUILDER, GET_INVIS_LEV(d->character)), TRUE); /* fall through */ case 'n': cleanup_olc(d, CLEANUP_ALL); return; case 'a': /* abort quitting */ break; default: send_to_char("Invalid choice!\r\n", d->character); send_to_char("Do you wish to save the trigger? : ", d->character); return; } break; case TRIGEDIT_NAME: if (OLC_TRIG(d)->name) free(OLC_TRIG(d)->name); OLC_TRIG(d)->name = str_dup((arg && *arg) ? arg : "undefined"); OLC_VAL(d)++; break; case TRIGEDIT_INTENDED: if ((atoi(arg)>=MOB_TRIGGER) || (atoi(arg)<=WLD_TRIGGER)) OLC_TRIG(d)->attach_type = atoi(arg); OLC_VAL(d)++; break; case TRIGEDIT_NARG: OLC_TRIG(d)->narg = atoi(arg); OLC_VAL(d)++; break; case TRIGEDIT_ARGUMENT: OLC_TRIG(d)->arglist = (*arg?str_dup(arg):NULL); OLC_VAL(d)++; break; case TRIGEDIT_TYPES: if ((i = atoi(arg)) == 0) break; else if (!((i < 0) || (i > NUM_TRIG_TYPE_FLAGS))) TOGGLE_BIT((GET_TRIG_TYPE(OLC_TRIG(d))), 1 << (i - 1)); OLC_VAL(d)++; trigedit_disp_types(d); return; case TRIGEDIT_COMMANDS: break; } OLC_MODE(d) = TRIGEDIT_MAIN_MENU; trigedit_disp_menu(d); }
void equip_char(struct char_data * ch, struct obj_data * obj, int pos) { int j; int invalid_class(struct char_data *ch, struct obj_data *obj); int invalid_race(struct char_data *ch, struct obj_data *obj); assert(pos >= 0 && pos < NUM_WEARS); if (GET_EQ(ch, pos)) { GET_NAME(ch, chname); sprintf(buf, "SYSERR: Char is already equipped: %s, %s", chname, obj->short_description); FREE_NAME(chname); log(buf); return; } if (obj->carried_by) { log("SYSERR: EQUIP: Obj is carried_by when equip."); return; } if (obj->in_room != NOWHERE) { log("SYSERR: EQUIP: Obj is in_room when equip."); return; } /* Let's change the messages here. Soli, 8/12/99 */ if ((IS_OBJ_STAT(obj, ITEM_ANTI_EVIL) && IS_EVIL(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_GOOD) && IS_GOOD(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_NEUTRAL) && IS_NEUTRAL(ch))) { act("You are zapped by $p and instantly let go of it.", FALSE, ch, obj, 0, TO_CHAR); act("$n is zapped by $p and instantly lets go of it.", FALSE, ch, obj, 0, TO_ROOM); obj_to_char(obj, ch); /* changed to drop in inventory instead of * ground */ return; } /* I'm moving the other two to a seperate function, checked before we actually wear the eq. Soli, 8/12/99 */ GET_EQ(ch, pos) = obj; obj->worn_by = ch; obj->worn_on = pos; if (GET_OBJ_TYPE(obj) == ITEM_ARMOR) GET_AC(ch) -= apply_ac(ch, pos); if (ch->in_room != NOWHERE) { if (pos == WEAR_LIGHT && GET_OBJ_TYPE(obj) == ITEM_LIGHT) if (GET_OBJ_VAL(obj, 2)) /* if light is ON */ world[ch->in_room].light++; } else { log("SYSERR: ch->in_room = NOWHERE when equipping char."); } for (j = 0; j < MAX_OBJ_AFFECT; j++) affect_modify(ch, obj->affected[j].location, obj->affected[j].modifier, obj->obj_flags.bitvector, TRUE); affect_total(ch); }
/* * Remove an affected_type structure from a char (called when duration * reaches zero). Pointer *af must never be NIL! Frees mem and calls * affect_location_apply */ void affect_remove(struct char_data * ch, struct affected_type * af, int output) { struct affected_type *temp; struct affected_type aff; bool accum_affect = FALSE; int k; if (ch->affected == NULL) { core_dump(); return; } switch (af->type) { case SPELL_CHARM: { struct char_data* victim = ch->master; if (output == 0) break; affect_modify(ch, af->location, af->modifier, af->bitvector, FALSE); REMOVE_FROM_LIST(af, ch->affected, next); free(af); affect_total(ch); if (ch->master) { stop_follower(ch); } if (victim) { if(IS_NPC(ch)) { SET_BIT(MOB_FLAGS(ch), MOB_AGGRESSIVE | MOB_MEMORY); } if (mag_savingthrow(victim, SAVING_SPELL)) { hit(victim, ch, TYPE_UNDEFINED); } } return; } case SPELL_LIGHT: if (output == 0) break; if (!af->next || (af->next->type != af->type) || (af->next->duration > 0)) { if (world[ch->in_room].name != (char*) NULL) { world[ch->in_room].light -= 10; } } break; case SPELL_DARKNESS: if (output == 0) break; if (!af->next || (af->next->type != af->type) || (af->next->duration > 0)) { if (world[ch->in_room].name != (char*) NULL) { world[ch->in_room].light += 10; } } break; case SPELL_BLACK_PLAGUE: mag_affects(30, ch, ch, SPELL_BREATH_OF_LIFE, SAVING_SPELL); break; case SPELL_CALL_ANIMAL_SPIRIT: case SPELL_ANIMAL_SUMMONING: case SPELL_ANIMAL_SUMMONING_II: case SPELL_ANIMAL_SUMMONING_III: case SPELL_CONJURE_ELEMENTAL: case SPELL_GREATER_ELEMENTAL: case SPELL_DUST_DEVIL: case SPELL_STICKS_TO_SNAKES: case SPELL_SUMMON_INSECTS: case SPELL_AERIAL_SERVANT: case SPELL_SUMMON_GUARD: if (IS_NPC(ch)) { if (GET_POS(ch) > POS_DEAD) { if (output == 1) { affect_modify(ch, af->location, af->modifier, af->bitvector, FALSE); REMOVE_FROM_LIST(af, ch->affected, next); free(af); affect_total(ch); GET_NAME(ch, chname); stop_fighting(ch); /*Fighting Bug Fix Jasrags*/ sprintf(buf, "%s disappears into thin air as the summoning ends.", chname); act(buf, FALSE, world[ch->in_room].people, 0, 0, TO_ROOM); FREE_NAME(chname); extract_char(ch); ch = NULL; return; } } } break; case SPELL_POLYMORPH: if (!PRF_FLAGGED(ch, PRF_NOTSELF)) { affect_modify(ch, af->location, af->modifier, af->bitvector, FALSE); REMOVE_FROM_LIST(af, ch->affected, next); free(af); affect_total(ch); return; } break; case SPELL_DONTUSEME: if(AFF_FLAGGED(ch, AFF_STANCE) && !AFF_FLAGGED(ch, AFF_TIRED)) { aff.type = SKILL_STANCE; aff.duration = 2; aff.location = APPLY_STR; aff.modifier = -2; aff.bitvector = AFF_TIRED; accum_affect = FALSE; affect_to_char(ch, &aff); } break; default: break; } if (output && (af->type > 0) && (af->type <= MAX_SPELLS) && af->type != SPELL_POLYMORPH && af->type != SPELL_DONTUSEME) { if (!af->next || (af->next->type != af->type) || (af->next->duration > 0)) { if (*spell_wear_off_msg[af->type]) { send_to_char(spell_wear_off_msg[af->type], ch); send_to_char("\r\n", ch); } } } if (output && (af->type > 0) && (af->type <= MAX_SPELLS) && af->type == SPELL_POLYMORPH) { if (!af->next || (af->next->type != af->type) || (af->next->duration > 0)) { if (PLR_FLAGGED(ch, PLR_RABBIT)){ REMOVE_BIT(PLR_FLAGS(ch), PLR_RABBIT); REMOVE_BIT(PRF_FLAGS(ch), PRF_NOTSELF); send_to_char("You feel yourself growing, and your ears shrinking. You no longer feel like a rabbit.\r\n", ch); act("$n's body grows, $s ears shrinking. $n no longer looks like a rabbit.\r\n", 0, ch, 0, 0, TO_ROOM); } if (PLR_FLAGGED(ch, PLR_BIRD)) { REMOVE_BIT(PLR_FLAGS(ch), PLR_BIRD); REMOVE_BIT(PRF_FLAGS(ch), PRF_NOTSELF); send_to_char("You feel yourself growing and your feathers falling away. You no longer feel like a bird.\r\n", ch); act("$n's body grows, $s feathers falling away as it expands. $n no longer looks like a bird.\r\n", 0, ch, 0, 0, TO_ROOM); } if (PLR_FLAGGED(ch, PLR_WOLF)) { REMOVE_BIT(PLR_FLAGS(ch), PLR_WOLF); REMOVE_BIT(PRF_FLAGS(ch), PRF_NOTSELF); send_to_char("You feel your your fur shed and your teeth shrink. You no longer feel like a wolf.\r\n", ch); act("$n's teeth shrink, $s fur shedding. $n no longer looks like a wolf.\r\n", 0, ch, 0, 0, TO_ROOM); } if (PLR_FLAGGED(ch, PLR_BEAR)) { REMOVE_BIT(PLR_FLAGS(ch), PLR_BEAR); REMOVE_BIT(PRF_FLAGS(ch), PRF_NOTSELF); send_to_char("Your claws shrink as does the rest of your body. You no longer feel like a bear.\r\n", ch); act("$n's claws shrink as does the rest of $s body. $n no longer looks like a bear.\r\n", 0, ch, 0, 0, TO_ROOM); } if (PLR_FLAGGED(ch, PLR_CAT)){ REMOVE_BIT(PLR_FLAGS(ch), PLR_CAT); REMOVE_BIT(PRF_FLAGS(ch), PRF_NOTSELF); send_to_char("You feel your body growing, and your fur shedding. You no longer feel like a cat.\r\n", ch); act("$n's body slowly grows, $s fur shedding. $n no longer looks like a cat.\r\n", 0, ch, 0, 0, TO_ROOM); } for (k = 0; k < NUM_WEARS; k++) if (GET_EQ(ch, k)){ GET_OBJ_DISGUISE(GET_EQ(ch, k)) = 0; } } } affect_modify(ch, af->location, af->modifier, af->bitvector, FALSE); REMOVE_FROM_LIST(af, ch->affected, next); free(af); affect_total(ch); }
/** * \brief demuxer function for XSPF parsing */ int Demux( demux_t *p_demux ) { int i_ret = 1; xml_t *p_xml = NULL; xml_reader_t *p_xml_reader = NULL; char *psz_name = NULL; INIT_PLAYLIST_STUFF; p_demux->p_sys->pp_tracklist = NULL; p_demux->p_sys->i_tracklist_entries = 0; p_demux->p_sys->i_track_id = -1; p_demux->p_sys->psz_base = NULL; /* create new xml parser from stream */ p_xml = xml_Create( p_demux ); if( !p_xml ) i_ret = -1; else { p_xml_reader = xml_ReaderCreate( p_xml, p_demux->s ); if( !p_xml_reader ) i_ret = -1; } /* locating the root node */ if( i_ret == 1 ) { do { if( xml_ReaderRead( p_xml_reader ) != 1 ) { msg_Err( p_demux, "can't read xml stream" ); i_ret = -1; } } while( i_ret == VLC_SUCCESS && xml_ReaderNodeType( p_xml_reader ) != XML_READER_STARTELEM ); } /* checking root node name */ if( i_ret == 1 ) { psz_name = xml_ReaderName( p_xml_reader ); if( !psz_name || strcmp( psz_name, "playlist" ) ) { msg_Err( p_demux, "invalid root node name: %s", psz_name ); i_ret = -1; } FREE_NAME(); } if( i_ret == 1 ) i_ret = parse_playlist_node( p_demux, p_current_input, p_xml_reader, "playlist" ) ? 0 : -1; int i; for( i = 0 ; i < p_demux->p_sys->i_tracklist_entries ; i++ ) { input_item_t *p_new_input = p_demux->p_sys->pp_tracklist[i]; if( p_new_input ) { input_item_AddSubItem( p_current_input, p_new_input ); } } HANDLE_PLAY_AND_RELEASE; if( p_xml_reader ) xml_ReaderDelete( p_xml, p_xml_reader ); if( p_xml ) xml_Delete( p_xml ); return i_ret; /* Needed for correct operation of go back */ }