/* * make some coinage */ OBJ_DATA *create_money( int amount ) { char buf[MAX_STRING_LENGTH]; OBJ_DATA *obj; if( amount <= 0 ) { bug( "Create_money: zero or negative money %d.", amount ); amount = 1; } if( amount == 1 ) { obj = create_object( get_obj_index( OBJ_VNUM_MONEY_ONE ), 0 ); } else { obj = create_object( get_obj_index( OBJ_VNUM_MONEY_SOME ), 0 ); snprintf( buf, MAX_STRING_LENGTH, obj->short_descr, amount ); STRFREE( obj->short_descr ); obj->short_descr = STRALLOC( buf ); obj->value[0] = amount; } return obj; }
bool spec_auth(CHAR_DATA * ch) { CHAR_DATA *victim; CHAR_DATA *v_next; char buf[MAX_STRING_LENGTH]; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; bool hasdiploma; for (victim = ch->in_room->first_person; victim; victim = v_next) { v_next = victim->next_in_room; if (!IS_NPC(victim) && (pObjIndex = get_obj_index(OBJ_VNUM_SCHOOL_DIPLOMA)) != NULL) { hasdiploma = FALSE; for (obj = victim->last_carrying; obj; obj = obj->prev_content) if (obj->pIndexData == get_obj_index(OBJ_VNUM_SCHOOL_DIPLOMA)) hasdiploma = TRUE; if (!hasdiploma) { obj = create_object(pObjIndex, 1); obj = obj_to_char(obj, victim); send_to_char ("&cThe schoolmaster gives you a diploma, and shakes your hand.\n\r&w", victim); } } if (IS_NPC(victim) || !IS_SET(victim->pcdata->flags, PCFLAG_UNAUTHED)) continue; victim->pcdata->auth_state = 3; REMOVE_BIT(victim->pcdata->flags, PCFLAG_UNAUTHED); if (victim->pcdata->authed_by) STRFREE(victim->pcdata->authed_by); victim->pcdata->authed_by = QUICKLINK(ch->name); sprintf(buf, "%s authorized %s", ch->name, victim->name); to_channel(buf, CHANNEL_MONITOR, "Monitor", ch->top_level); } return FALSE; }
void do_katana( CHAR_DATA *ch, char *argument ) { OBJ_DATA *obj; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_SAMURAI)) { send_to_char("Huh?\n\r",ch); return; } if ( 250 > ch->practice) { send_to_char("It costs 250 points of primal to create a Katana.\n\r",ch); return; } ch->practice -= 250; obj = create_object(get_obj_index(33176) ,50 ); SET_BIT(obj->quest, QUEST_RELIC); obj->condition = 100; obj->toughness = 100; obj->resistance = 1; obj->value[1] = 65; obj->value[2] = 115; obj->questowner = str_dup(ch->pcdata->switchname); obj->ownerid = ch->pcdata->playerid; obj_to_char(obj, ch); act("A katana flashes into existance.",ch,NULL,NULL,TO_CHAR); act("A katana suddenly apear in $n's hands.",ch,NULL,NULL,TO_ROOM); return; }
void do_dridereq( CHAR_DATA *ch, char *argument ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; int vnum = 0; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_DROID)) { send_to_char("Huh?\n\r", ch ); return; } if (arg[0] == '\0') { send_to_char("Please specify which piece of drider armor you wish to make: whip ring collar armor helmet leggings boots gloves sleeves cloak belt bracer mask.\n\r",ch); return; } if (!str_cmp(arg,"whip" )) vnum = 33140; else if (!str_cmp(arg,"ring" )) vnum = 33141; else if (!str_cmp(arg,"collar" )) vnum = 33142; else if (!str_cmp(arg,"armor" )) vnum = 33143; else if (!str_cmp(arg,"helmet" )) vnum = 33144; else if (!str_cmp(arg,"leggings" )) vnum = 33145; else if (!str_cmp(arg,"boots" )) vnum = 33146; else if (!str_cmp(arg,"gloves" )) vnum = 33147; else if (!str_cmp(arg,"sleeves" )) vnum = 33148; else if (!str_cmp(arg,"cloak" )) vnum = 33149; else if (!str_cmp(arg,"belt" )) vnum = 33150; else if (!str_cmp(arg,"bracer" )) vnum = 33151; else if (!str_cmp(arg,"mask" )) vnum = 33152; else { do_dridereq(ch,""); return; } if ( ch->practice < 150) { send_to_char("It costs 150 points of primal to create a piece of drider armour.\n\r",ch); return; } if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object, please inform Dracknuur.\n\r",ch); return; } ch->practice -= 150; obj = create_object(pObjIndex, 50); obj->questowner = str_dup(ch->pcdata->switchname); obj_to_char(obj, ch); act("$p appears in your hands in a blast of flames.",ch,obj,NULL,TO_CHAR); act("$p appears in $n's hands in a blast of flames.",ch,obj,NULL,TO_ROOM); return; }
void spell_portal( int sn, int level, CHAR_DATA *ch, void *vo,int target) { CHAR_DATA *victim; OBJ_DATA *portal, *stone; if ( ( victim = get_char_world( ch, target_name ) ) == NULL || victim == ch || victim->in_room == NULL || !can_see_room(ch,victim->in_room) || IS_SET(victim->in_room->room_flags, ROOM_SAFE) || IS_SET(victim->in_room->room_flags, ROOM_PRIVATE) || IS_SET(victim->in_room->room_flags, ROOM_SOLITARY) || IS_SET(victim->in_room->room_flags, ROOM_DRAGONPIT) || IS_SET(ch->in_room->room_flags, ROOM_DRAGONPIT) || IS_SET(victim->in_room->room_flags, ROOM_NO_RECALL) || IS_SET(victim->in_room->area->area_flags, AREA_PROTO ) || IS_SET(ch->in_room->room_flags, ROOM_NO_RECALL) || victim->level >= level + 3 || (!IS_NPC(victim) && victim->level >= LEVEL_HERO) || (IS_NPC(victim) && IS_SET(victim->imm_flags,IMM_SUMMON)) || (IS_NPC(victim) && saves_spell( level, victim,DAM_NONE) ) || (is_clan(victim) && !is_same_clan(ch,victim))) { send_to_char( "You failed.\n\r", ch ); return; } if (!IS_IMP(ch)) { if (IS_IMMORTAL(ch)) { send_to_char("\n\r{rIMMs can use {RGOTO{r so there is no reason to be opening {RPORTAL{r.{x\n\r",ch); return; } } stone = get_eq_char(ch,WEAR_HOLD); if (!IS_IMMORTAL(ch) && (stone == NULL || stone->item_type != ITEM_WARP_STONE)) { send_to_char("You lack the proper component for this spell.\n\r",ch); return; } if (stone != NULL && stone->item_type == ITEM_WARP_STONE) { act("You draw upon the power of $p.",ch,stone,NULL,TO_CHAR); //act("It flares brightly and vanishes!",ch,stone,NULL,TO_CHAR); //extract_obj(stone); } portal = create_object(get_obj_index(OBJ_VNUM_PORTAL),0); portal->timer = 2 + level / 25; portal->value[3] = victim->in_room->vnum; obj_to_room(portal,ch->in_room); act("$p rises up from the ground.",ch,portal,NULL,TO_ROOM); act("$p rises up before you.",ch,portal,NULL,TO_CHAR); }
void do_dstat( char_data* ch, char* argument ) { wizard_data* imm = (wizard_data*) ch; exit_data* exit; obj_clss_data* key; if( *argument == '\0' ) { if( ( exit = imm->exit_edit ) == NULL ) { send( ch, "Use dedit to specify direction.\n\r" ); return; } } else if( ( exit = (exit_data*) one_thing( ch, argument, "dstat", (thing_array*) &ch->in_room->exits ) ) == NULL ) return; send( ch, "[%s]\n\r", dir_table[ exit->direction ].name ); send( ch, " Leads to : %s (%d)\n\r", exit->to_room->name, exit->to_room->vnum ); if( ( key = get_obj_index( exit->key ) ) == NULL ) send( ch, " Key : None\n\r" ); else send( ch, " Key : %s (%d)\n\r", key->Name( ), exit->key ); send( ch, " Name : %s\n\r", exit->name ); send( ch, " Keywords : %s\n\r", exit->keywords ); send( ch, " Strength : %d\n\r", exit->strength ); send( ch, " Light : %d%%\n\r", exit->light ); send( ch, " Size : %s\n\r", size_name[ exit->size ] ); }
void do_olog( char_data* ch, char* argument ) { char* tmp = static_string( ); wizard_data* wizard = (wizard_data*) ch; obj_clss_data* obj_clss; int i; if( *argument == '\0' ) { if( ( obj_clss = wizard->obj_edit ) == NULL ) { send( ch, "You are not editting an object so must specify a vnum.\r\n" ); return; } i = obj_clss->vnum; } else { if( get_obj_index( i = atoi( argument ) ) == NULL ) { send( ch, "There is no object with that vnum.\r\n" ); return; } } sprintf( tmp, "%sobj.%d", OBJ_LOG_DIR, i ); if( !view_file( ch, tmp ) ) send( ch, "That object has no log.\r\n" ); return; }
void do_magearmor( CHAR_DATA *ch, char *argument ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; int vnum = 0; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if(!IS_IMMORTAL(ch)) { if( !IS_CLASS(ch, CLASS_MAGE) ) { send_to_char("What?\n\r",ch); return; } } if (arg[0] == '\0') { send_to_char("Please specify which piece of mage armor you wish to make: Dagger Staff Ring Collar Robe Cap Leggings Boots Gloves Sleeves Cape Belt Bracer Mask.\n\r",ch); return; } if ( ch->practice < 60 ) { send_to_char("It costs 60 points of primal to create mage equipment.\n\r",ch); return; } if (!str_cmp(arg,"mask")) vnum = 33013; else if (!str_cmp(arg,"belt")) vnum = 33011; else if (!str_cmp(arg,"cape")) vnum = 33010; else if (!str_cmp(arg,"ring")) vnum = 33002; else if (!str_cmp(arg,"collar")) vnum = 33003; else if (!str_cmp(arg,"robe")) vnum = 33004; else if (!str_cmp(arg,"cap")) vnum = 33005; else if (!str_cmp(arg,"leggings")) vnum = 33006; else if (!str_cmp(arg,"boots")) vnum = 33007; else if (!str_cmp(arg,"gloves")) vnum = 33008; else if (!str_cmp(arg,"sleeves")) vnum = 33009; else if (!str_cmp(arg,"bracer")) vnum = 33012; else if (!str_cmp(arg,"staff")) vnum = 33000; else if (!str_cmp(arg,"dagger")) vnum = 33001; else { do_magearmor(ch,""); return; } if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object, please inform a God.\n\r",ch); return; } obj = create_object(pObjIndex, 50); obj->questowner = str_dup(ch->pcdata->switchname); obj_to_char(obj, ch); ch->practice -= 60; act("$p appears in your hands.",ch,obj,NULL,TO_CHAR); act("$p appears in $n's hands.",ch,obj,NULL,TO_ROOM); return; }
void make_bloodstain( CHAR_DATA * ch ) { OBJ_DATA *obj; obj = create_object( get_obj_index( OBJ_VNUM_BLOODSTAIN ), 0 ); obj->timer = number_range( 1, 2 ); obj_to_room( obj, ch->in_room ); }
RENUMBER_DATA *gather_one_list( short type, int low, int high, int new_base, bool fill_gaps, int *max_vnum ) /* this function builds a list of renumber data for a type (obj, room, or mob) */ { int cur_vnum; RENUMBER_DATA *r_data, root; bool found; ROOM_INDEX_DATA *room; OBJ_INDEX_DATA *obj; MOB_INDEX_DATA *mob; int i; int highest; memset( &root, 0, sizeof( RENUMBER_DATA ) ); r_data = &root; cur_vnum = new_base; highest = -1; for( i = low; i <= high; i++ ) { found = FALSE; switch ( type ) { case REN_ROOM: room = get_room_index( i ); if( room != NULL ) found = TRUE; break; case REN_OBJ: obj = get_obj_index( i ); if( obj != NULL ) found = TRUE; break; case REN_MOB: mob = get_mob_index( i ); if( mob != NULL ) found = TRUE; break; } if( found ) { if( cur_vnum > highest ) highest = cur_vnum; if( cur_vnum != i ) { CREATE( r_data->next, RENUMBER_DATA, 1 ); r_data = r_data->next; r_data->old_vnum = i; r_data->new_vnum = cur_vnum; } cur_vnum++; } else if( !fill_gaps ) cur_vnum++; } *max_vnum = highest; return root.next; }
//heh zlicza ilosc po boot_db //bo przez nieszczesne ladowanie pccorpsow moze sie ilosc zjebac... void count_artefacts() { ARTEFACT_DATA * atmp = NULL; ARTEFACT_OWNER *otmp = NULL; if ( !artefact_system ) { log_string( "Artefact system: empty artefact list" ); return ; //brak wpisow } append_file_format_daily( NULL, ARTEFACT_LOG_FILE, "PO REBOOCIE ZLICZANIE", NULL ); for ( atmp = artefact_system;atmp;atmp = atmp->next ) { if ( atmp->first_owner == NULL ) { atmp->count = get_obj_index( atmp->avnum ) ->count; continue; } else { otmp = atmp->first_owner; } //to stwarza niebezpieczenstwo nie ruszac :) //while ( otmp ) //{ // if ( otmp->status == 0 ) //zlicza tych co na rencie // licznik++; // otmp = otmp->next; //} //atmp->count = licznik; //licznik = 0; //a teraz ilosc //atmp->count += (get_obj_index( atmp->avnum )->count); append_file_format_daily( NULL, ARTEFACT_LOG_FILE, "%s vnum:%d count:%d max:%d", get_obj_index( atmp->avnum ) ->short_descr, atmp->avnum, atmp->count, atmp->max_count ); } append_file_format_daily( NULL, ARTEFACT_LOG_FILE, "PO REBOOCIE KONIEC", NULL ); return ; }
/* * Make a fire. */ void make_fire( ROOM_INDEX_DATA * in_room, short timer ) { OBJ_DATA *fire; fire = create_object( get_obj_index( OBJ_VNUM_FIRE ), 0 ); fire->timer = number_fuzzy( timer ); obj_to_room( fire, in_room ); return; }
void Character::spell_create_food (int sn, int lvl, void *vo) { Object* mushroom = get_obj_index(OBJ_VNUM_MUSHROOM)->create_object(0); mushroom->value[0] = 5 + lvl; mushroom->obj_to_room (in_room); act ("$p suddenly appears.", mushroom, NULL, TO_ROOM); act ("$p suddenly appears.", mushroom, NULL, TO_CHAR); return; }
void make_blood( CHAR_DATA * ch ) { OBJ_DATA *obj; obj = create_object( get_obj_index( OBJ_VNUM_BLOOD ), 0 ); obj->timer = number_range( 2, 4 ); obj->value[1] = number_range( 3, UMIN( 5, ch->level ) ); obj_to_room( obj, ch->in_room ); }
void do_taneq(CHAR_DATA *ch, char *argument) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; int vnum = 0; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if( !IS_CLASS(ch, CLASS_TANARRI)) { send_to_char("What?\n\r",ch); return; } if (arg[0] == '\0') { send_to_char("Please specify which piece of tanar'ri armor you wish to make: Claymore Bracer\n\r" "Collar Ring Plate Helmet Leggings Boots Gauntlets Sleeves Cloak Belt Visor.\n\r",ch); return; } if ( ch->practice < 100 ) { send_to_char("It costs 100 points of primal to create Tanar'ri equipment.\n\r",ch); return; } if (!str_cmp(arg,"claymore")) vnum = 33200; else if (!str_cmp(arg,"bracer")) vnum = 33202; else if (!str_cmp(arg,"collar")) vnum = 33203; else if (!str_cmp(arg,"ring")) vnum = 33201; else if (!str_cmp(arg,"plate")) vnum = 33204; else if (!str_cmp(arg,"helmet")) vnum = 33205; else if (!str_cmp(arg,"leggings")) vnum = 33209; else if (!str_cmp(arg,"boots")) vnum = 33206; else if (!str_cmp(arg,"gauntlets")) vnum = 33207; else if (!str_cmp(arg,"sleeves")) vnum = 33208; else if (!str_cmp(arg,"cloak")) vnum = 33210; else if (!str_cmp(arg,"belt")) vnum = 33211; else if (!str_cmp(arg,"visor")) vnum = 33212; else { do_taneq(ch,""); return; } if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object, please inform a God.\n\r",ch); return; } obj = create_object(pObjIndex, 50); obj->questowner = str_dup(ch->pcdata->switchname); obj->ownerid = ch->pcdata->playerid; obj_to_char(obj, ch); ch->practice -= 100; act("$p appears in your hands.",ch,obj,NULL,TO_CHAR); act("$p appears in $n's hands.",ch,obj,NULL,TO_ROOM); return; }
void Character::spell_create_spring (int sn, int lvl, void *vo) { Object* spring = get_obj_index(OBJ_VNUM_SPRING)->create_object(0); spring->timer = lvl; spring->obj_to_room (in_room); act ("$p flows from the ground.", spring, NULL, TO_ROOM); act ("$p flows from the ground.", spring, NULL, TO_CHAR); return; }
void translate_objvals( CHAR_DATA * ch, AREA_DATA * area, RENUMBER_AREA * r_area, bool verbose ) { int i, new_vnum; OBJ_INDEX_DATA *obj; for( i = area->low_o_vnum; i <= area->hi_o_vnum; i++ ) { obj = get_obj_index( i ); if( !obj ) continue; if( obj->item_type == ITEM_CONTAINER ) { new_vnum = find_translation( obj->value[2], r_area->r_obj ); if( new_vnum != NOT_FOUND ) { if( verbose ) pager_printf( ch, "... container %d; fixing objval2 (key vnum) %d -> %d\r\n", i, obj->value[2], new_vnum ); obj->value[2] = new_vnum; } else if( verbose ) pager_printf( ch, "... container %d; no need to fix.\r\n", i ); } else if( obj->item_type == ITEM_SWITCH || obj->item_type == ITEM_LEVER || obj->item_type == ITEM_PULLCHAIN || obj->item_type == ITEM_BUTTON ) { /* * levers might have room vnum references in their objvals */ if( IS_SET( obj->value[0], TRIG_TELEPORT ) || IS_SET( obj->value[0], TRIG_TELEPORTALL ) || IS_SET( obj->value[0], TRIG_TELEPORTPLUS ) || IS_SET( obj->value[0], TRIG_RAND4 ) || IS_SET( obj->value[0], TRIG_RAND6 ) || IS_SET( obj->value[0], TRIG_DOOR ) ) { new_vnum = find_translation( obj->value[1], r_area->r_room ); if( new_vnum != NOT_FOUND ) { if( verbose ) pager_printf( ch, "... lever %d: fixing source room (%d -> %d)\r\n", i, obj->value[1], new_vnum ); obj->value[1] = new_vnum; } if( IS_SET( obj->value[0], TRIG_DOOR ) && IS_SET( obj->value[0], TRIG_PASSAGE ) ) { new_vnum = find_translation( obj->value[2], r_area->r_room ); if( new_vnum != NOT_FOUND ) { if( verbose ) pager_printf( ch, "... lever %d: fixing dest room (passage) (%d -> %d)\r\n", i, obj->value[2], new_vnum ); obj->value[2] = new_vnum; } } } } } }
void Character::spell_continual_light (int sn, int lvl, void *vo) { Object *light; light = get_obj_index(OBJ_VNUM_LIGHT_BALL)->create_object(0); light->obj_to_room (in_room); act ("$n twiddles $s thumbs and $p appears.", light, NULL, TO_ROOM); act ("You twiddle your thumbs and $p appears.", light, NULL, TO_CHAR); return; }
void do_token(CHAR_DATA *ch, char *argument) { OBJ_DATA *obj; char arg1[MSL]; char arg2[MSL]; char arg3[MSL]; char arg4[MSL]; CHAR_DATA *to,*to_next; argument = one_argument(argument,arg1); argument = one_argument(argument,arg2); argument = one_argument(argument,arg3); if( arg1[0] == '\0'|| arg2[0] == '\0' || arg3[0] == '\0' || argument[0] == '\0') { send_to_one(ch,"Syntax: token <type> <winchance> <max_win> <min_win>\n\r" "Token Types are:\n\r" "Normal 0\n\r" "Practice 1\n\r" "Train 2\n\r" "Quest 3\n\r" "Exp 4\n\r" "All arguments must be numerical."); return; } obj = create_object(get_obj_index(OBJ_VNUM_TOKEN),0); obj->value[0] = atoi(arg1); obj->value[1] = atoi(arg2); obj->value[2] = atoi(arg3); obj->value[3] = atoi(argument); obj->name = str_dup(token_table[obj->value[0]].name); free_string(obj->short_descr); obj->short_descr = str_dup(token_table[obj->value[0]].short_descr); free_string(obj->description); obj->description = str_dup(token_table[obj->value[0]].long_descr); obj_to_char(obj,ch); send_to_one(ch,"You have created a %s token.",token_table[obj->value[0]].name); for(to = ch->in_room->people; to; to = to_next) { to_next = to->next_in_room; if(to->in_room == ch->in_room && to != ch) { send_to_one(to,"%s has created %s token.",PERS(ch,to),token_table[obj->value[0]].name); } } return; }
void do_angelicarmor( CHAR_DATA *ch, char *argument ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; int vnum = 0; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if( !IS_CLASS(ch, CLASS_ANGEL)) { send_to_char("What?\n\r",ch); return; } if (arg[0] == '\0') { send_to_char("Please specify which piece of angel armor you wish to make: Sword Bracer Necklace Ring Plate Helmet Leggings Boots Gauntlets Sleeves Cloak Belt Visor.\n\r",ch); return; } if ( ch->practice < 150 ) { send_to_char("It costs 150 points of primal to create angel equipment.\n\r",ch); return; } if (!str_cmp(arg,"sword")) vnum = 33192; else if (!str_cmp(arg,"bracer")) vnum = 33181; else if (!str_cmp(arg,"necklace")) vnum = 33182; else if (!str_cmp(arg,"ring")) vnum = 33180; else if (!str_cmp(arg,"plate")) vnum = 33187; else if (!str_cmp(arg,"helmet")) vnum = 33184; else if (!str_cmp(arg,"leggings")) vnum = 33188; else if (!str_cmp(arg,"boots")) vnum = 33189; else if (!str_cmp(arg,"gauntlets")) vnum = 33190; else if (!str_cmp(arg,"sleeves")) vnum = 33191; else if (!str_cmp(arg,"cloak")) vnum = 33185; else if (!str_cmp(arg,"belt")) vnum = 33183; else if (!str_cmp(arg,"visor")) vnum = 33186; else { do_angelicarmor(ch,""); return; } if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object, please inform a God.\n\r",ch); return; } obj = create_object(pObjIndex, 50); obj->questowner = str_dup(ch->pcdata->switchname); obj_to_char(obj, ch); ch->practice -= 150; act("$p appears in your hands.",ch,obj,NULL,TO_CHAR); act("$p appears in $n's hands.",ch,obj,NULL,TO_ROOM); return; }
/* * Make a trap. */ OBJ_DATA *make_trap( int v0, int v1, int v2, int v3 ) { OBJ_DATA *trap; trap = create_object( get_obj_index( OBJ_VNUM_TRAP ), 0 ); trap->timer = 0; trap->value[0] = v0; trap->value[1] = v1; trap->value[2] = v2; trap->value[3] = v3; return trap; }
/* * Make a campfire. */ void make_campfire( room_index * in_room, char_data * ch, short timer ) { obj_data *fire; if( !( fire = get_obj_index( OBJ_VNUM_CAMPFIRE )->create_object( 1 ) ) ) { log_printf( "create_object: %s:%s, line %d.", __FILE__, __FUNCTION__, __LINE__ ); return; } fire->timer = number_fuzzy( timer ); fire->to_room( in_room, ch ); }
/* * A healer spell that will allow the healer to create a bind stone that will stay in the * room with some of their healing power imbued into it. The bind stone will be an object * that can't be moved or sacrificed. Only one can exist in an area. It will have a certain * amount of charges that it can be used. When a player touches it, they will be healed. * when the bind stone's magic is used up it will disappear into the ether. The item won't * disappear with time however.. it must be used. For now, this will not survive copyover's * or reboots. */ void spell_healers_bind(int sn, int level, CHAR_DATA *ch, void *vo, int target) { OBJ_DATA *obj; OBJ_DATA *objSearch; int charges = 0; // First, let's see if there are any other bind stones in the area, if so, we // are not going to cast this. These will not be in containers. for (objSearch = object_list; objSearch != NULL; objSearch = objSearch->next) { // Can't be in a null room if (objSearch->in_room != NULL) { // Only one per area at a time. if (objSearch->pIndexData->vnum == OBJ_VNUM_HEALERS_BIND && objSearch->in_room->area->vnum == ch->in_room->area->vnum) { send_to_char("A healer's bind stone already exists somewhere in this area...\r\n", ch); return; } } } // Base is level / 5 charges = ch->level / 5; // +1 for bless if (is_affected(ch, gsn_bless)) { charges += 1; } // +1 for enhanced recovery, the healer can then pass that along. if (is_affected(ch, gsn_enhanced_recovery)) { charges += 1; } // Cut in half if these are the case.. if (is_affected(ch, gsn_curse) || is_affected(ch, gsn_weaken)) { charges = charges / 2; } obj = create_object(get_obj_index(OBJ_VNUM_HEALERS_BIND)); obj->value[0] = charges; // The number of charges obj->value[1] = 50; // The amount it heals obj_to_room(obj, ch->in_room); act("$p slowly fades into existence.", ch, obj, NULL, TO_ROOM); act("$p slowly fades into existence.", ch, obj, NULL, TO_CHAR); } // end spell_create_healers_bind
void do_skyforge( CHAR_DATA *ch, char *argument ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; int vnum = 0; if (IS_NPC(ch)) return; if(!IS_IMMORTAL(ch)) { if (!IS_CLASS(ch, CLASS_SKYBLADE)) { send_to_char("What?\n\r",ch); return; } } if (ch->pcdata->powers[SKYBLADE_MAGIC] < 1) { send_to_char("You haven't mastered enough of the magic ability yet.\n\r",ch); return; } if ( ch->practice < 250 ) { send_to_char("You don't have the 250 primal needed.\n\r",ch); return; } if (ch->pcdata->powers[SKYBLADE_MAGIC] == 1) vnum = 33178; if (ch->pcdata->powers[SKYBLADE_MAGIC] >= 2) vnum = 33179; if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object, please inform a God .\n\r",ch); return; } if( !IS_IMMORTAL(ch) ) { ch->practice -= 250; } obj = create_object(pObjIndex, 50); SET_BIT(obj->spectype, SITEM_SKYBLADE); obj->questowner = str_dup(ch->pcdata->switchname); obj->ownerid = ch->pcdata->playerid; obj_to_char(obj, ch); act("$p falls from the heavens and lands before you.",ch,obj,NULL,TO_CHAR); act("$p falls from the heavens and lands before $n.",ch,obj,NULL,TO_ROOM); return; }
/***************************************************************************** Name: save_objects Purpose: Save #OBJECTS section of an area file. Called by: save_area(olc_save.c). Notes: Changed for ROM OLC. ****************************************************************************/ void save_objects( FILE *fp, AREA_DATA *pArea ) { int i; OBJ_INDEX_DATA *pObj; fprintf( fp, "#OBJECTS\n" ); for( i = pArea->min_vnum; i <= pArea->max_vnum; i++ ) { if ( (pObj = get_obj_index( i )) ) save_object( fp, pObj ); } fprintf( fp, "#0\n\n\n\n" ); return; }
void warn_progs( CHAR_DATA * ch, int low, int high, AREA_DATA * area, RENUMBER_AREA * r_area ) { ROOM_INDEX_DATA *room; OBJ_INDEX_DATA *obj; MOB_INDEX_DATA *mob; MPROG_DATA *mprog; int i; for( i = area->low_r_vnum; i <= area->hi_r_vnum; i++ ) { room = get_room_index( i ); if( !room ) continue; mprog = room->mudprogs; while( mprog ) { warn_in_prog( ch, low, high, "room", i, mprog, r_area ); mprog = mprog->next; } } for( i = area->low_o_vnum; i <= area->hi_o_vnum; i++ ) { obj = get_obj_index( i ); if( !obj ) continue; mprog = obj->mudprogs; while( mprog ) { warn_in_prog( ch, low, high, "obj", i, mprog, r_area ); mprog = mprog->next; } } for( i = area->low_m_vnum; i <= area->hi_m_vnum; i++ ) { mob = get_mob_index( i ); if( !mob ) continue; mprog = mob->mudprogs; while( mprog ) { warn_in_prog( ch, low, high, "mob", i, mprog, r_area ); mprog = mprog->next; } } }
int artefact_new_count( ARTEFACT_DATA *art ) { //char buf[MAX_INPUT_LENGTH]; OBJ_DATA * obj = NULL; ARTEFACT_OWNER *otmp = NULL; int licznik = 0; char *name = NULL; //wpierw to co w grze, jesli nosi je PC to nie liczymy name = get_obj_index( art->avnum ) ->name; for ( obj = object_list; obj != NULL; obj = obj->next ) { if ( !is_name( name, obj->name ) ) //nie ten continue; //ten if ( obj->carried_by == NULL ) /*nie noszony*/ { licznik++; continue; } else if ( obj->carried_by != NULL && IS_NPC( obj->carried_by ) ) /*przez NPC'a*/ { licznik++; continue; } else continue; //nosi PC nie liczymy } //teraz te co na liscie czyli pc otmp = art->first_owner; while ( otmp ) { licznik++; otmp = otmp->next; } return licznik; }
//na przyklad jak cialko sie robi, to calkiem z listy wywala //ownera ale zostaje na mudzie artef. count sie nie zmienia void all_artefact_from_char( CHAR_DATA *ch ) { ARTEFACT_DATA * atmp = NULL; ARTEFACT_OWNER *otmp, *prev = NULL; OBJ_DATA *obj = NULL; for ( atmp = artefact_system;atmp;atmp = atmp->next ) { otmp = atmp->first_owner; for ( ;otmp; ) { if ( !strcmp( ch->name, otmp->owner ) ) { if ( prev != NULL ) prev->next = otmp->next; else atmp->first_owner = otmp->next; obj = create_object( get_obj_index( atmp->avnum ), FALSE ); wiznet( "$N STRACIL(a) artefact : $p.", ch, obj, WIZ_ARTEFACT, 0, get_trust( ch ) ); append_file_format_daily( ch, ARTEFACT_LOG_FILE, "-> STRACIL (zgon):%s vnum:%d count:%d max: %d (move)", obj->short_descr, atmp->avnum, atmp->count, atmp->max_count ); extract_obj( obj ); otmp->next = NULL; free_artefact_owner( otmp ); //nastepny element if ( prev != NULL ) otmp = prev->next; else otmp = atmp->first_owner; } else //to nie ten { prev = otmp; otmp = otmp->next; } } } }
void add_coins( char_data* ch, int amount, char* message ) { obj_data* obj; int num [ 4 ]; int i; for( i = MAX_COIN - 1; i >= 0; i-- ) { if( ( num[i] = amount/coin_value[i] ) > 0 ) { amount -= num[i]*coin_value[i]; obj = create( get_obj_index( coin_vnum[i] ), num[i] ); obj->To( ch ); consolidate( obj ); } } if( message != NULL ) send( ch, "%s%s.\r\n", message, coin_phrase( num ) ); }
void handle_waterwheel_destruction(OBJ_DATA & obj) { // Verify a room ROOM_INDEX_DATA * room(get_room_for_obj(obj)); if (room == NULL) return; // Load up the remains and transfer the contents OBJ_DATA * remains(create_object(get_obj_index(OBJ_VNUM_WATERWHEEL_REMAINS), 0)); remains->level = obj.level; for (OBJ_DATA * item(obj.contains); item != NULL; item = obj.contains) { obj_from_obj(item); obj_to_obj(item, remains); } obj_to_room(remains, room); }