int trigger_trap(struct char_data *ch, struct obj_data *i) { int adj, fireperc, roll; struct char_data *v; extern struct dex_app_type dex_app[]; if (ITEM_TYPE(i) == ITEM_TRAP) { if (i->obj_flags.value[TRAP_CHARGES]) { adj = GET_TRAP_LEV(i) - get_max_level(ch); adj -= dex_app[(int)GET_DEX(ch)].reaction * 5; fireperc = 95 + adj; roll = number(1, 100); if (roll < fireperc) { /* trap is sprung */ act("You hear a strange noise...", TRUE, ch, 0, 0, TO_ROOM); act("You hear a strange noise...", TRUE, ch, 0, 0, TO_CHAR); GET_TRAP_CHARGES(i) -= 1; if (IS_SET(GET_TRAP_EFF(i), TRAP_EFF_ROOM)) { for (v = real_roomp(ch->in_room)->people; v; v = v->next_in_room) { find_trap_damage(v, i); } } else { find_trap_damage(ch, i); } return (TRUE); } } } return (FALSE); }
void CPageDocuments::DisplayShips(int index) { CString info; m_list.DeleteAllItems(); DeleteAllColumns(); m_list.InsertColumn(0 , "船舰名字" , LVCFMT_LEFT , 100); m_list.InsertColumn(1 , "建造金属" , LVCFMT_LEFT , 80); m_list.InsertColumn(2 , "建造晶体" , LVCFMT_LEFT , 80); m_list.InsertColumn(3 , "建造重氢" , LVCFMT_LEFT , 80); m_list.InsertColumn(4 , "建造时间" , LVCFMT_LEFT , 80); m_list.InsertColumn(5 , "攻击能力" , LVCFMT_LEFT , 80); m_list.InsertColumn(6 , "运载能力" , LVCFMT_LEFT , 80); m_list.InsertColumn(7 , "飞行速度" , LVCFMT_LEFT , 80); m_list.InsertColumn(8 , "技术需求" , LVCFMT_LEFT , 250); for(int i = 0 ; i < BOAT_MAX ; ++i) { info.Format("%s" , BOATS_NAME[i]); m_list.InsertItem(i , info); //metal info.Format("%d" , BOATS_RESOURCE_NEED_BASE[i][0] ); m_list.SetItemText(i , 1 , info); //crystal info.Format("%d" , BOATS_RESOURCE_NEED_BASE[i][1] ); m_list.SetItemText(i , 2 , info); //diplogen info.Format("%d" , BOATS_RESOURCE_NEED_BASE[i][2] ); m_list.SetItemText(i , 3 , info); //time double t = get_boat_produce_seconds( GetDataPtr()->GetBuildingLevel(FACTORY_BUILDING_BOATYARD), //shipyard level GetDataPtr()->GetBuildingLevel(FACTORY_BUILDING_NANITE), //nanitefactory level BOATS_RESOURCE_NEED_BASE[i][0] , BOATS_RESOURCE_NEED_BASE[i][1], 1.0); HighFrequencyElapsedTimer timer; timer.Init(t * 1000); m_list.SetItemText(i , 4 , timer.ToCString()); //attack force info.Format("%d" , UINT(SHIP_ATTACK_FORCE_BASE[i] * (1 + 0.1 * GetDataPtr()->GetResearchLevel(RESEARCH_WEAPON))) ); m_list.SetItemText(i , 5 , info); //transfer capacity force info.Format("%d" , SHIP_TRANSFER_CAPACITY[i] ); m_list.SetItemText(i , 6 , info); //speed info.Format("%d" , kernel_.GetShipSpeed(ITEM_TYPE(i) , 0)); m_list.SetItemText(i , 7 , info); //tech needed m_list.SetItemText(i , 8 , Boats_Entry(i)->GetTechNeeded()); } }
int CheckForAnyTrap(struct char_data *ch, struct obj_data *i) { if(DEBUG) dlog("CheckForAnyTrap"); if((ITEM_TYPE(i) == ITEM_TRAP) && (GET_TRAP_CHARGES(i) > 0)) return(TriggerTrap(ch, i)); return(FALSE); }
int check_for_get_trap(struct char_data *ch, struct obj_data *i) { if ((ITEM_TYPE(i) == ITEM_TRAP) && (IS_SET(GET_TRAP_EFF(i), TRAP_EFF_OBJECT)) && (GET_TRAP_CHARGES(i) > 0)) { return (trigger_trap(ch, i)); } return (FALSE); }
//------------------------------------------------------------------------------------------------- int CEconomy::Get_ItemSellPRICE (tagITEM &sITEM, short nSellSkillVALUE) { int iPrice = 0; int iItemRate, iPriceRate; switch( sITEM.m_cType ) { case ITEM_TYPE_FACE_ITEM: case ITEM_TYPE_HELMET : case ITEM_TYPE_ARMOR : case ITEM_TYPE_GAUNTLET : case ITEM_TYPE_BOOTS : case ITEM_TYPE_KNAPSACK : case ITEM_TYPE_WEAPON : case ITEM_TYPE_SUBWPN : case ITEM_TYPE_RIDE_PART: // 추가옵션은 보석과 같이 iPrice = (int) ( (float)ITEM_BASE_PRICE( sITEM.GetTYPE(), sITEM.GetItemNO() ) * (float)( 40 + sITEM.GetGrade() ) * (float)( 200 + sITEM.GetDurability() ) * (float)( 200 - Get_WorldRATE() ) * (float)( 1 + nSellSkillVALUE * 0.01f ) / 1000000.f * (float)( (4000+sITEM.GetLife()) / 14000.f ) + (float)( sITEM.IsAppraisal() * GEMITEM_BASE_PRICE( sITEM.GetOption() ) * 0.2f ) ) ; break; case ITEM_TYPE_USE : case ITEM_TYPE_NATURAL : if ( IsEssentialGoods( ITEM_TYPE( sITEM.m_cType, sITEM.m_nItemNo ) ) ) { iItemRate = this->Get_ItemRATE( ITEM_RATE_TYPE( sITEM.m_cType, sITEM.m_nItemNo ) ); iPriceRate = ITEM_PRICE_RATE( sITEM.m_cType, sITEM.m_nItemNo ); // 생필품. // 판매 가격 = ITEM_BASE * { 1000 + (ITEM_RATE - 50) * ITEM_FLUC } * (1 + 판매스킬레벨 * 0.02) * (200- WORLD_RATE) / 200000 iPrice = (int) ( ITEM_BASE_PRICE( sITEM.m_cType, sITEM.m_nItemNo) * ( 1000 + ( iItemRate-50 ) * iPriceRate ) * ( 1 + nSellSkillVALUE * 0.01 ) * ( 200 - Get_WorldRATE() ) / 180000.f ) ; break; } case ITEM_TYPE_JEWEL : case ITEM_TYPE_GEM : case ITEM_TYPE_QUEST : // 2003.08.018 그 밖의 아이템. // 판매 가격 = ITEM_BASE * { 1000 + (TOWN_RATE - 50) * ITEM_FLUC } * (1 + 판매스킬레벨 * 0.02) * (200- WORLD_RATE) / 200000 iPriceRate = ITEM_PRICE_RATE( sITEM.m_cType, sITEM.m_nItemNo ); iPrice = (int) ( ITEM_BASE_PRICE( sITEM.m_cType, sITEM.m_nItemNo) * ( 1000 + ( this->Get_TownRATE() - 50 ) * iPriceRate ) * ( 1 + nSellSkillVALUE * 0.01 ) * ( 200 - Get_WorldRATE() ) / 180000.f ) ; break; } return iPrice; }
int CheckForGetTrap(struct char_data *ch, struct obj_data *i) { if(DEBUG) dlog("CheckForGetTrap"); if ((ITEM_TYPE(i) == ITEM_TRAP) && (IS_SET(GET_TRAP_EFF(i),TRAP_EFF_OBJECT)) && (GET_TRAP_CHARGES(i) > 0)) { return(TriggerTrap(ch, i)); } return(FALSE); }
int check_for_move_trap(struct char_data *ch, int dir) { struct obj_data *i; for (i = real_roomp(ch->in_room)->contents; i; i = i->next_content) { if ((ITEM_TYPE(i) == ITEM_TRAP) && (IS_SET(GET_TRAP_EFF(i), TRAP_EFF_MOVE)) && (GET_TRAP_CHARGES(i) > 0)) if (IS_SET(GET_TRAP_EFF(i), TrapDir[dir])) return (trigger_trap(ch, i)); } return (FALSE); }
int check_for_inside_trap(struct char_data *ch, struct obj_data *i) { struct obj_data *t; for (t = i->contains; t; t = t->next_content) { if ((ITEM_TYPE(t) == ITEM_TRAP) && (IS_SET(GET_TRAP_EFF(t), TRAP_EFF_OBJECT)) && (GET_TRAP_CHARGES(t) > 0)) { return (trigger_trap(ch, t)); } } return (FALSE); }
int CheckForMoveTrap(struct char_data *ch, int dir) { struct obj_data *i; if(DEBUG) dlog("CheckForMoveTrap"); for (i = real_roomp(ch->in_room)->contents; i; i = i->next_content) { if ((ITEM_TYPE(i) == ITEM_TRAP) && (IS_SET(GET_TRAP_EFF(i),TRAP_EFF_MOVE)) && (GET_TRAP_CHARGES(i) > 0)) if (IS_SET(GET_TRAP_EFF(i), TrapDir[dir])) return(TriggerTrap(ch, i)); } return(FALSE); }
int CheckForInsideTrap(struct char_data *ch, struct obj_data *i) { struct obj_data *t; if(DEBUG) dlog("CheckForInsideTrap"); for (t = i->contains; t; t = t->next_content) { if ((ITEM_TYPE(t) == ITEM_TRAP) && (IS_SET(GET_TRAP_EFF(t),TRAP_EFF_OBJECT)) && (GET_TRAP_CHARGES(t) > 0)) { return(TriggerTrap(ch, t)); } } return(FALSE); }
//------------------------------------------------------------------------------------------------- int CEconomy::Get_ItemBuyPRICE (short nItemTYPE, short nItemNO, short nBuySkillVALUE) { int iPrice = 0; int iItemRate, iPriceRate; switch( nItemTYPE ) { case ITEM_TYPE_FACE_ITEM: case ITEM_TYPE_HELMET : case ITEM_TYPE_ARMOR : case ITEM_TYPE_GAUNTLET : case ITEM_TYPE_BOOTS : case ITEM_TYPE_KNAPSACK : case ITEM_TYPE_WEAPON : case ITEM_TYPE_SUBWPN : case ITEM_TYPE_RIDE_PART: // 2004. 1. 2 구입 가격 = iPrice = (int)( ITEM_BASE_PRICE( nItemTYPE, nItemNO ) * ( ITEM_QUALITY( nItemTYPE, nItemNO )+50.f ) * ( 1.f - nBuySkillVALUE * 0.01 ) / 100.f + 0.5f ); break; case ITEM_TYPE_USE : case ITEM_TYPE_NATURAL : if ( IsEssentialGoods( ITEM_TYPE( nItemTYPE, nItemNO ) ) ) { // 생필품. // 구입 가격 = ITEM_BASE * { 1 + (ITEM_RATE - 50) * ITEM_FLUC / 1000 } * (1 - 구입스킬레벨 * 0.02) iItemRate = this->Get_ItemRATE( ITEM_RATE_TYPE( nItemTYPE, nItemNO ) ); iPriceRate = ITEM_PRICE_RATE( nItemTYPE, nItemNO ); iPrice = (int) ( ITEM_BASE_PRICE( nItemTYPE, nItemNO ) * ( 1.f + ( iItemRate - 50.f ) * iPriceRate / 1000.f ) * ( 1.f - nBuySkillVALUE * 0.01f ) + 0.5f ); break; } case ITEM_TYPE_JEWEL : case ITEM_TYPE_GEM : case ITEM_TYPE_QUEST : // 2003. 08. 18 구입 가격 = ITEM_BASE * { 1 + (TOWN_RATE - 50) * ITEM_FLUC / 1000 } * (1 - 구입스킬레벨 * 0.02) iPriceRate = ITEM_PRICE_RATE( nItemTYPE, nItemNO ); iPrice = (int) ( ITEM_BASE_PRICE( nItemTYPE, nItemNO ) * ( 1.f + ( this->Get_TownRATE() - 50.f ) * iPriceRate / 1000.f ) * ( 1 - nBuySkillVALUE * 0.01f ) + 0.5f ); break; } return iPrice; }
static int ObjNoise(struct obj_data *obj,struct char_data *ch, int pulse) { int room; if (!obj->action_description) return(0); if (!ITEM_TYPE(obj,ITEM_AUDIO)) return(0); if (((obj->obj_flags.value[0]) && (pulse % obj->obj_flags.value[0])==0) || (!number(0,5))) { if (obj->carried_by) room = obj->carried_by->in_room; else if (obj->equipped_by) room = obj->equipped_by->in_room; else if (obj->in_room != NOWHERE) room = obj->in_room; else room = RecGetObjRoom(obj); MakeNoise(room, obj->action_description, obj->action_description); return(1); } return(0); }
void shopping_sell( const char *arg, struct char_data *ch, struct char_data *keeper,int shop_nr) { char argm[100], buf[MAX_STRING_LENGTH]; int cost,temp_cost, i; struct obj_data *temp1; float mult = 0; if(!(is_ok(keeper,ch,shop_nr))) return; if(keeper->generic != 0) for(i = 0; i <= MAX_TRADE; i++) { if(keeper->generic == FAMINE) if(shop_index[shop_nr].type[i] == ITEM_FOOD) { mult = shop_multiplier; /* we're in a famine, we sell food, so we */ break; /* our prices to hell ;-) -DM */ } if(keeper->generic == DWARVES_STRIKE) if((shop_index[shop_nr].type[i] == ITEM_ARMOR) || (shop_index[shop_nr].type[i] == ITEM_WEAPON)) { mult = shop_multiplier; break; } } only_argument(arg, argm); if(!(*argm)) { sprintf(buf, "%s What do you want to sell??" ,GET_NAME(ch)); do_tell(keeper,buf,19); return; } if (!( temp1 = get_obj_in_list_vis(ch,argm,ch->carrying))) { sprintf(buf, shop_index[shop_nr].no_such_item2,GET_NAME(ch)); do_tell(keeper,buf,19); return; } if( IS_OBJ_STAT( temp1, ITEM_NODROP ) && !IS_IMMORTAL( ch ) ) { send_to_char("You can't let go of it, it must be CURSED!\n\r", ch); return; } if (!(trade_with(temp1,shop_nr))||(temp1->obj_flags.cost<1)) { sprintf(buf,shop_index[shop_nr].do_not_buy, GET_NAME(ch)); do_tell(keeper,buf,19); return; } if( GET_GOLD(keeper)<(int) (temp1->obj_flags.cost* shop_index[shop_nr].profit_sell + ((chr_apply[ (int)GET_CHR(ch)].reaction*temp1->obj_flags.cost)/100) + (mult * temp1->obj_flags.cost))) { sprintf(buf,shop_index[shop_nr].missing_cash1,GET_NAME(ch)); do_tell(keeper,buf,19); return; } cost = temp1->obj_flags.cost; if ((ITEM_TYPE(temp1) == ITEM_WAND) || (ITEM_TYPE(temp1) == ITEM_STAFF)) { if (temp1->obj_flags.value[1]) { cost = (int)( cost * ( (float)temp1->obj_flags.value[2] / (float)temp1->obj_flags.value[1] ) ); } else { cost = 0; } } else if (ITEM_TYPE(temp1) == ITEM_ARMOR) { if (temp1->obj_flags.value[1]) { cost = (int)( cost * ( (float)temp1->obj_flags.value[0] / (float)temp1->obj_flags.value[1] ) ); } else { cost = 0; } } temp1->obj_flags.cost = cost; act("$n sells $p.", FALSE, ch, temp1, 0, TO_ROOM); temp_cost = (int) (temp1->obj_flags.cost*shop_index[shop_nr].profit_sell + ((chr_apply[ (int)GET_CHR(ch) ].reaction * temp1->obj_flags.cost)/100) + (mult * temp1->obj_flags.cost)); if(temp_cost < 0) temp_cost=0; sprintf(buf,shop_index[shop_nr].message_sell,GET_NAME(ch),temp_cost); /* (int) (temp1->obj_flags.cost* shop_index[shop_nr].profit_sell + ((chr_apply[GET_CHR(ch)].reaction*temp1->obj_flags.cost)/100))) ; */ do_tell(keeper,buf,19); sprintf(buf,"The shopkeeper now has %s.\n\r", temp1->short_description); send_to_char(buf,ch); if (GET_GOLD(keeper)< temp_cost) { /* (int) (temp1->obj_flags.cost* shop_index[shop_nr].profit_sell + ((chr_apply[GET_CHR(ch)].reaction*temp1->obj_flags.cost)/100))) { */ sprintf(buf,shop_index[shop_nr].missing_cash1 ,GET_NAME(ch)); do_tell(keeper,buf,19); return; } GET_GOLD(ch) += temp_cost; /* (int) (temp1->obj_flags.cost* shop_index[shop_nr].profit_sell + ((chr_apply[GET_CHR(ch)].reaction*temp1->obj_flags.cost)/100)); */ GET_GOLD(keeper) -= temp_cost; /* (int) (temp1->obj_flags.cost* shop_index[shop_nr].profit_sell + ((chr_apply[GET_CHR(ch)].reaction*temp1->obj_flags.cost)/100)); */ obj_from_char(temp1); if (temp1 == NULL) { send_to_char("As far as I am concerned, you are out..\n\r",ch); return; } if ((get_obj_in_list(argm,keeper->carrying)) || (GET_ITEM_TYPE(temp1) == ITEM_TRASH)) { extract_obj(temp1); } else { obj_to_char(temp1,keeper); } return; }
MakeSound(int pulse) { int room; char buffer[128]; struct obj_data *obj; struct char_data *ch; /* * objects */ for (obj = object_list; obj; obj = obj->next) { if (ITEM_TYPE(obj) == ITEM_AUDIO) { if (((obj->obj_flags.value[0]) && (pulse % obj->obj_flags.value[0])==0) || (!number(0,5))) { if (obj->carried_by) { room = obj->carried_by->in_room; } else if (obj->equipped_by) { room = obj->equipped_by->in_room; } else if (obj->in_room != NOWHERE) { room = obj->in_room; } else { room = RecGetObjRoom(obj); } /* * broadcast to room */ if (obj->action_description) { MakeNoise(room, obj->action_description, obj->action_description); } } } } /* * mobiles */ for (ch = character_list; ch; ch = ch->next) { if (IS_NPC(ch) && (ch->player.sounds) && (number(0,5)==0)) { if (ch->specials.default_pos > POSITION_SLEEPING) { if (GET_POS(ch) > POSITION_SLEEPING) { /* * Make the sound; */ MakeNoise(ch->in_room, ch->player.sounds, ch->player.distant_snds); } else if (GET_POS(ch) == POSITION_SLEEPING) { /* * snore */ sprintf(buffer, "%s snores loudly.\n\r", ch->player.short_descr); MakeNoise(ch->in_room, buffer, "You hear a loud snore nearby.\n\r"); } } else if (GET_POS(ch) == ch->specials.default_pos) { /* * Make the sound */ MakeNoise(ch->in_room, ch->player.sounds, ch->player.distant_snds); } } } }
int check_for_any_trap(struct char_data *ch, struct obj_data *i) { if ((ITEM_TYPE(i) == ITEM_TRAP) && (GET_TRAP_CHARGES(i) > 0)) return (trigger_trap(ch, i)); return (FALSE); }
//--------------------------------------------------------------------------------------------------------/ /// Pat탑승 여부에 따른 스킬 활성화 / 비활성화 셋팅 : 2005/7/29 - nAvy /// //--------------------------------------------------------------------------------------------------------/ void CSkillSlot::SetActiveSkillEnableByRideState( bool ride ) { _RPT0( _CRT_WARN," CSkillSlot::SetActiveSkillEnableByRideState()\n "); ///배틀 카트가 적용되지 않는 버젼에서는 컬럼수가 틀리다. #if defined(_GBC) if( ride )///pat 스킬만 Enable 나머지는 Disable { if( false == g_pAVATAR->m_Inventory.m_ItemRIDE[0].IsEmpty() ) { int item_type = ITEM_TYPE( g_pAVATAR->m_Inventory.m_ItemRIDE[0].GetTYPE(), g_pAVATAR->m_Inventory.m_ItemRIDE[0].GetItemNO() ); switch( item_type ) { case TUNING_PART_BODY_CART:///카트 본체 for( int index = MAX_JOB_SKILL; index < MAX_JOB_SKILL + MAX_PATS_SKILL; ++index ) { if( m_SkillSlot[ index ] != NULL ) { //홍근 공통 스킬 체크 추가. if( SKILL_ATTRIBUTE_CART & SKILL_ATTRIBUTE( m_SkillSlot[ index ]->GetSkillIndex() ) ) //if( SKILL_ATTRIBUTE_CART == SKILL_ATTRIBUTE( m_SkillSlot[ index ]->GetSkillIndex() ) ) m_SkillSlot[ index ]->SetEnable(); else m_SkillSlot[ index ]->SetDisable(); } } break; case TUNING_PART_BODY_CASTLEGEAR:///캐슬기어 본체 for( int index = MAX_JOB_SKILL; index < MAX_JOB_SKILL + MAX_PATS_SKILL; ++index ) { if( m_SkillSlot[ index ] != NULL ) { //홍근 공통 스킬 체크 추가. if( SKILL_ATTRIBUTE_CASTLEGEAR & SKILL_ATTRIBUTE( m_SkillSlot[ index ]->GetSkillIndex() ) ) //if( SKILL_ATTRIBUTE_CASTLEGEAR == SKILL_ATTRIBUTE( m_SkillSlot[ index ]->GetSkillIndex() ) ) m_SkillSlot[ index ]->SetEnable(); else m_SkillSlot[ index ]->SetDisable(); } } break; default: _RPTF0( _CRT_ASSERT,"Invalid Type"); break; } } } else///아바타 상태 스킬만 Enable 나머지는 Disable { for( int index = MAX_JOB_SKILL; index < MAX_JOB_SKILL + MAX_PATS_SKILL; ++index ) { if( m_SkillSlot[ index ] != NULL ) { //홍근 공통 스킬 체크 추가. //if( SKILL_ATTRIBUTE_AVATAR == SKILL_ATTRIBUTE( m_SkillSlot[ index ]->GetSkillIndex() ) ) if( SKILL_ATTRIBUTE_AVATAR & SKILL_ATTRIBUTE( m_SkillSlot[ index ]->GetSkillIndex() ) ) m_SkillSlot[ index ]->SetEnable(); else m_SkillSlot[ index ]->SetDisable(); } } } #endif }