cguseitemfrominventoryhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 2,063 行 · 第 1/5 页
CPP
2,063 行
// 惑困 窃荐俊辑 俊矾 眉农甫 腹捞 沁扁 锭巩俊, // 俊矾 眉农甫 措气 绵家茄促. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Inventory* pInventory = pPC->getInventory(); Zone* pZone = pPC->getZone(); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); Item* pItem = pInventory->getItem(InvenX, InvenY); //ObjectID_t ItemObjectID = pItem->getObjectID(); Assert(pCreature->isSlayer()); Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); SlayerPortalItem* pPortalItem = dynamic_cast<SlayerPortalItem*>(pItem); Assert(pSlayer != NULL); Assert(pPortalItem != NULL); // 父距 Relic阑 家蜡窍绊 乐促搁,秋扁甫 何甫 荐 绝促. bool bHasRelic = false; if (pSlayer->hasRelicItem() || pSlayer->isFlag( Effect::EFFECT_CLASS_HAS_FLAG ) || pSlayer->isFlag( Effect::EFFECT_CLASS_HAS_SWEEPER) ) { bHasRelic = true; } // 籍拳登绢 乐促搁 秋扁甫 何甫 荐 绝促. bool bParalyze = pSlayer->isFlag( Effect::EFFECT_CLASS_PARALYZE ) ? true : false; bool bZoneTypeCheck = (pZone->getZoneType() == ZONE_NORMAL_FIELD) ? true : false; bool bCanUseCheck = pSlayer->isRealWearing(pPortalItem); bool bChargeCheck = (pPortalItem->getCharge() > 0) ? true : false; //bool bMotorcycleCheck = pSlayer->hasRideMotorcycle(); bool bZoneCheck = pZone->isNoPortalZone(); //if (bZoneTypeCheck && bCanUseCheck && bChargeCheck && !bMotorcycleCheck) if (bZoneTypeCheck && bCanUseCheck && bChargeCheck && !bHasRelic && !bParalyze && !bZoneCheck) { // 酒捞袍俊 瞒瘤甫 临捞绊, 浇饭捞绢俊霸 捞棋飘甫 吧绢霖促. pPortalItem->setCharge(pPortalItem->getCharge()-1); //pPortalItem->save(pSlayer->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); // 酒捞袍 沥焊甫 历厘茄促. // 酒捞袍 历厘 弥利拳. by sigi. 2002.5.13 char pField[80]; sprintf(pField, "Charge=%d", pPortalItem->getCharge()); pPortalItem->tinysave(pField); pSlayer->setFlag(Effect::EFFECT_CLASS_SLAYER_PORTAL); // 林函俊促啊 秋扁 歹窍扼绰 菩哦阑 谎赴促. GCAddHelicopter gcAddHelicopter; gcAddHelicopter.setObjectID(pSlayer->getObjectID()); gcAddHelicopter.setCode(0); pZone->broadcastPacket(pSlayer->getX(), pSlayer->getY(), &gcAddHelicopter); // 牢刘 菩哦阑 焊郴霖促. GCUseOK gcUseOK; pPlayer->sendPacket(&gcUseOK); } else { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); }#endif __END_DEBUG_EX __END_CATCH}void CGUseItemFromInventoryHandler::executeOustersSummonItem(CGUseItemFromInventory* pPacket, Player* pPlayer) throw(ProtocolException, Error){ __BEGIN_DEBUG_EX __BEGIN_TRY#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); // 惑困 窃荐俊辑 俊矾 眉农甫 腹捞 沁扁 锭巩俊, // 俊矾 眉农甫 措气 绵家茄促. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Inventory* pInventory = pPC->getInventory(); Zone* pZone = pPC->getZone(); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); Item* pItem = pInventory->getItem(InvenX, InvenY); //ObjectID_t ItemObjectID = pItem->getObjectID(); Assert(pCreature->isOusters()); Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); OustersSummonItem* pSummonItem = dynamic_cast<OustersSummonItem*>(pItem); Assert(pOusters != NULL); Assert(pSummonItem != NULL); // 父距 Relic阑 家蜡窍绊 乐促搁,秋扁甫 何甫 荐 绝促. bool bHasRelic = false; if (pOusters->hasRelicItem()||pOusters->isFlag(Effect::EFFECT_CLASS_REFINIUM_TICKET) ||pOusters->isFlag( Effect::EFFECT_CLASS_SUMMON_SYLPH )) { bHasRelic = true; } // 籍拳登绢 乐促搁 秋扁甫 何甫 荐 绝促. bool bParalyze = pOusters->isFlag( Effect::EFFECT_CLASS_PARALYZE ) ? true : false; bool bCanUseCheck = pOusters->isRealWearing(pSummonItem); bool bChargeCheck = (pSummonItem->getCharge() > 0) ? true : false; //bool bMotorcycleCheck = pOusters->hasRideMotorcycle(); SkillType_t SkillType = SKILL_SUMMON_SYLPH; SkillInfo* pSkillInfo = g_pSkillInfoManager->getSkillInfo(SkillType); OustersSummonItemInfo* pItemInfo = dynamic_cast<OustersSummonItemInfo*>(g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() )); Assert( pItemInfo != NULL ); int RequireMP = (int)pSkillInfo->getConsumeMP(); bool bManaCheck = hasEnoughMana(pOusters, RequireMP); bool bTileCheck = checkZoneLevelToUseSkill(pOusters); bool bEffect = pOusters->isFlag( Effect::EFFECT_CLASS_SUMMON_SYLPH ); bool bSatisfyRequire = pOusters->satisfySkillRequire( pSkillInfo ); bool bRangeCheck = checkZoneLevelToUseSkill(pOusters); if (bCanUseCheck && bChargeCheck && !bHasRelic && !bParalyze && bTileCheck && bManaCheck && !bEffect && bSatisfyRequire && bRangeCheck) { GCModifyInformation gcMI; decreaseMana(pOusters, RequireMP, gcMI); // 酒捞袍俊 瞒瘤甫 临捞绊, 浇饭捞绢俊霸 捞棋飘甫 吧绢霖促. pSummonItem->setCharge(pSummonItem->getCharge()-1); //pSummonItem->save(pOusters->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); // 酒捞袍 沥焊甫 历厘茄促. // 酒捞袍 历厘 弥利拳. by sigi. 2002.5.13 char pField[80]; sprintf(pField, "Charge=%d", pSummonItem->getCharge()); pSummonItem->tinysave(pField); // 捞蒲飘 努贰胶甫 父甸绢 嘿牢促. EffectSummonSylph* pEffect = new EffectSummonSylph(pOusters); pEffect->setEClass( (Effect::EffectClass)pItemInfo->getEffectID() ); pOusters->addEffect(pEffect); pOusters->setFlag( Effect::EFFECT_CLASS_SUMMON_SYLPH ); OUSTERS_RECORD prev; pOusters->getOustersRecord(prev); pOusters->initAllStat(); pOusters->addModifyInfo(prev, gcMI); // 牢刘 菩哦阑 焊郴霖促. GCUseOK gcUseOK; pPlayer->sendPacket(&gcUseOK); pPlayer->sendPacket(&gcMI); GCAddEffect gcAddEffect; gcAddEffect.setObjectID( pOusters->getObjectID() ); gcAddEffect.setEffectID( pEffect->getSendEffectClass() ); gcAddEffect.setDuration( pEffect->getRemainDuration() ); pZone->broadcastPacket( pOusters->getX(), pOusters->getY(), &gcAddEffect, pOusters ); pPlayer->sendPacket( &gcAddEffect ); if ( pOusters->getPetInfo() != NULL ) { pOusters->setPetInfo( NULL ); sendPetInfo( pGamePlayer, true ); } } else { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); } #endif __END_DEBUG_EX __END_CATCH}void CGUseItemFromInventoryHandler::executeKeyItem(CGUseItemFromInventory* pPacket, Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ ////cout << pPacket->toString().c_str() << endl; Assert(pPacket != NULL); Assert(pPlayer != NULL); // 惑困 窃荐俊辑 俊矾 眉农甫 腹捞 沁扁 锭巩俊, // 俊矾 眉农甫 措气 绵家茄促. GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Inventory* pInventory = pPC->getInventory(); Zone* pZone = pPC->getZone(); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); Item* pItem = pInventory->getItem(InvenX, InvenY); //ObjectID_t ItemObjectID = pItem->getObjectID(); // SLAYER啊 酒聪扼搁 坷配官捞甫 龋免且 荐 绝促. Assert(pCreature->isSlayer()); Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); // 家券 啊瓷 惑怕 汲沥捞 登绢乐绢具 茄促. // 内付 惑怕扼搁 荤侩且 荐 绝促. // 酒捞袍捞 凯艰 酒捞袍捞 酒聪扼搁, 坷配官捞甫 龋免且 荐 绝促. // 付胶磐 饭绢唱 器呕 荤侩 阂啊 瘤开浚 坷配官捞 家券 阂啊 // premium 荤侩磊父 龋免啊瓷窍促. if (!g_pVariableManager->isSummonMotorcycle() || pSlayer->hasRideMotorcycle() || pItem->getItemClass() != Item::ITEM_CLASS_KEY || pSlayer->isFlag(Effect::EFFECT_CLASS_COMA) || (pZone->getZoneLevel(pCreature->getX(), pCreature->getY()) & SAFE_ZONE) || pZone->isMasterLair() || pZone->isNoPortalZone() || (!pGamePlayer->isPremiumPlay() && !pGamePlayer->isPayPlaying()) || g_pFlagManager->isInPoleField( ZONE_COORD( pZone->getZoneID(), pCreature->getX(), pCreature->getY() ) ) ) { GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } // 扁粮俊 酒捞袍捞 积己登绢 乐绰瘤甫 犬牢茄促. ItemID_t targetID = dynamic_cast<Key*>(pItem)->getTarget(); Statement* pStmt = NULL; Result* pResult = NULL; // targetID啊 0牢 版快绰.. targetID(motorcycleObject狼 ItemID)啊 汲沥捞 救等 版快促. // 捞 锭绰 烙矫肺 targetID甫 key狼 ItemID客 鞍霸 窍搁 等促...绊 夯促. // targetID啊 motorcycle狼 itemID肺 甸绢啊扁 锭巩俊.. // broadcasting 殿俊辑.. Assert()俊 狼秦辑 促款登菌促...绊 焊咯柳促. - -; // by sigi. 2002.12.25 x-mas T_T; if (targetID==0) { Key* pKey = dynamic_cast<Key*>(pItem); Assert( pKey != NULL ); targetID = pKey->setNewMotorcycle(pSlayer);/* // (!) MotorcycleObject甫 积己窍绊 MotorcycleItemID==Target甫 罐酒具 茄促. // 捞 内靛 力惯 窃荐肺 哗扁甫.. -_-; by sigi Key* pKey = dynamic_cast<Key*>(pItem); KeyInfo* pKeyInfo = dynamic_cast<KeyInfo*>(g_pItemInfoManager->getItemInfo( pKey->getItemClass(), pKey->getItemType() )); Assert( pKeyInfo != NULL ); list<OptionType_t> option; ItemType_t motorcycleType = pKeyInfo->getTargetType(); if ( pKeyInfo->getOptionType() != 0 ) option.push_back( pKeyInfo->getOptionType() ); Item* pMotorcycle = g_pItemFactoryManager->createItem(Item::ITEM_CLASS_MOTORCYCLE, motorcycleType, option); Assert(pMotorcycle != NULL); (pZone->getObjectRegistry()).registerObject(pMotorcycle); pMotorcycle->create(pSlayer->getName(), STORAGE_ZONE, pZone->getZoneID(), pSlayer->getX(), pSlayer->getY()); pKey->setTarget(pMotorcycle->getItemID()); targetID = pMotorcycle->getItemID(); // targetID甫 DB俊档 update矫难具 茄促. BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pResult = pStmt->executeQuery( "UPDATE KeyObject SET Target=%lu WHERE ItemID=%lu", targetID, pKey->getItemID()); SAFE_DELETE(pStmt); } END_DB(pStmt) // log filelog("motorcycle.txt", "[SetTargetID] Owner = %s, KeyID = %lu, Key's targetID = %lu, MotorcycleID = %lu", pSlayer->getName().c_str(), pKey->getItemID(), pKey->getTarget(), pMotorcycle->getItemID() ); // 关俊辑 pMotorcycle阑 荤侩秦档 登摆瘤父, 扁粮 内靛 救 扒靛副妨绊 咯扁辑 瘤款促. SAFE_DELETE(pMotorcycle);*/ } else { // 茄锅 葛磐荤捞努捞尔 虐尔 楷搬灯绰单 葛磐荤捞努阑 穿啊 磊操 瘤快唱焊促. // 虐俊 楷搬等 葛磐荤捞努捞 角力肺 叼厚俊 乐绰瘤 眉农窍绊 绝栏搁 货肺 父甸绢辑 持绢霖促. BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pResult = pStmt->executeQuery("SELECT ItemID FROM MotorcycleObject WHERE ItemID=%lu", targetID); if ( !pResult->next() ) { Key* pKey = dynamic_cast<Key*>(pItem); Assert( pKey != NULL ); targetID = pKey->setNewMotorcycle(pSlayer); } SAFE_DELETE(pStmt); } END_DB(pStmt); } // 鞘混 规绢 内靛 -_-; if (targetID==0) { filelog("errorLog.txt", "[ActionRedeemMotorcycle] itemID=%lu, motorItemID=%lu", (int)pItem->getItemID(), (int)targetID); return; } if (g_pParkingCenter->hasMotorcycleBox(targetID)) { ////cout << "扁粮俊 阂妨柳 坷配官捞啊 乐嚼聪促" << endl; MotorcycleBox* pMotorcycleBox = g_pParkingCenter->getMotorcycleBox(targetID); if (pMotorcycleBox!=NULL && !pMotorcycleBox->isTransport()) { Zone* pMotorZone = pMotorcycleBox->getZone(); ZoneCoord_t motorX = pMotorcycleBox->getX(); ZoneCoord_t motorY = pMotorcycleBox->getY(); Motorcycle* pMotorcycle = pMotorcycleBox->getMotorcycle(); // 鞍篮 粮俊 乐绰 版快 // 芭府啊 呈公 啊鳖快搁 何福瘤 富磊~ if (pMotorZone!=pZone || pSlayer->getDistance(motorX, motorY) > 15) { // 促弗 zone栏肺 捞悼吝捞扼绊 钎矫茄促. pMotorcycleBox->setTransport(); // motorcycle阑 slayer狼 zone栏肺 颗变促. pMotorZone->transportItem( motorX, motorY, pMotorcycle, pZone, pSlayer->getX(), pSlayer->getY() ); // Use OK 措侩捞促. // Use窍搁 酒捞袍捞 荤扼瘤带啊 弊犯瘤 酵促. - -; /* GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); */ // 茄悼救 delay甫 拎具窍绰单.. } } GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pGamePlayer->sendPacket(&_GCCannotUse); return; } BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pResult = pStmt->executeQuery("SELECT ItemID, ItemType, OptionType, Durability FROM MotorcycleObject WHERE ItemID=%lu", targetID); ItemID_t itemID; ItemType_t itemType; list<OptionType_t> optionTypes; Durability_t durability; bool bFound = false; if (pResult->next()) { bFound = true; itemID = pResult->getInt(1); itemType = pResult->getInt(2); string optionField = pResult->getString(3); setOptionTypeFromField(optionTypes, optionField); durability = pResult->getInt(4); } else { itemID = targetID; itemType = 0; durability = 300; } // 货肺款 坷配官捞 按眉甫 积己茄促. Motorcycle* pMotorcycle = new Motorcycle(itemType, optionTypes); Assert(pMotorcycle != NULL); pMotorcycle->setItemID(itemID); pMotorcycle->setDurability(durability); // Object ID 且寸罐扁 (pZone->getObjectRegistry()).registerObject(pMotorcycle);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?