cguseitemfrominventoryhandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 2,063 行 · 第 1/5 页
CPP
2,063 行
char query[25]; sprintf( query, "SkinColor=%u", color ); pSlayer->tinysave( query ); return true; } else if ( pPC->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pPC); Assert( pVampire != NULL ); if ( pVampire->getSkinColor() == color ) return false; pVampire->setSkinColor( color ); char query[25]; sprintf( query, "SkinColor=%u", color ); pVampire->tinysave( query ); return true; } return false;}bool sendCannotUse( CGUseItemFromInventory* pPacket, Player* pPlayer ){ GCCannotUse _GCCannotUse; _GCCannotUse.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotUse); return true;}#endifvoid CGUseItemFromInventoryHandler::executeResurrectItem(CGUseItemFromInventory* pPacket, Player* pPlayer) throw(ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#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); ResurrectItemInfo* pItemInfo = dynamic_cast<ResurrectItemInfo*>(g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() )); //cout << "Resurrection 酒捞袍阑 荤侩窃 : " << pPC->getName() << " : " << pItem->getItemType() << endl; if ( pItem->getObjectID() != pPacket->getObjectID() || pItemInfo == NULL ) { //cout << "酒袍 坷宏璃飘 酒叼啊 撇覆" << endl; sendCannotUse( pPacket, pPlayer ); return; } if ( !pPC->isFlag(Effect::EFFECT_CLASS_COMA) ) { //cout << "磷篮 惑怕啊 酒丛" << endl; sendCannotUse( pPacket, pPlayer ); return; } Slayer* pSlayer = NULL; Vampire* pVampire = NULL; Ousters* pOusters = NULL; if ( pPC->isSlayer() ) pSlayer = dynamic_cast<Slayer*>(pPC); else if ( pPC->isVampire() ) pVampire = dynamic_cast<Vampire*>(pPC); else if ( pPC->isOusters() ) pOusters = dynamic_cast<Ousters*>(pPC); ResurrectItemInfo::ResurrectType type = pItemInfo->getResurrectType(); HP_t hp = 0; GCModifyInformation gcMI; GCRemoveEffect gcRemoveEffect; gcRemoveEffect.setObjectID( pPC->getObjectID() ); switch ( type ) { case ResurrectItemInfo::HP_1: { if ( pPC->isSlayer() ) { Assert( pSlayer != NULL ); pSlayer->setHP(1); hp = 1; gcMI.addShortData(MODIFY_CURRENT_HP,hp); } else if ( pPC->isVampire() ) { Assert( pVampire != NULL ); pVampire->setHP(1); hp = 1; gcMI.addShortData(MODIFY_CURRENT_HP,hp); } else if ( pPC->isOusters() ) { Assert( pOusters != NULL ); pOusters->setHP(1); hp = 1; gcMI.addShortData(MODIFY_CURRENT_HP,hp); } else { sendCannotUse( pPacket, pPlayer ); return; } } break; case ResurrectItemInfo::HP_FULL: { if ( pPC->isSlayer() ) { Assert( pSlayer != NULL ); pSlayer->setHP( pSlayer->getHP(ATTR_MAX) ); hp = pSlayer->getHP(); gcMI.addShortData(MODIFY_CURRENT_HP,hp); if ( pSlayer->getMP() < pSlayer->getMP(ATTR_MAX) ) { pSlayer->setMP(pSlayer->getMP(ATTR_MAX)); gcMI.addShortData(MODIFY_CURRENT_MP,pSlayer->getMP()); } Effect* pEffect = pSlayer->getEffectManager()->findEffect(Effect::EFFECT_CLASS_BLOOD_DRAIN); if ( pEffect != NULL ) { pEffect->destroy(pSlayer->getName()); pSlayer->getEffectManager()->deleteEffect(pSlayer, Effect::EFFECT_CLASS_BLOOD_DRAIN); gcRemoveEffect.addEffectList(Effect::EFFECT_CLASS_BLOOD_DRAIN); // 软趋 酒福官捞飘甫 规瘤窍扁 困茄 饶蜡刘 捞棋飘甫 嘿咯霖促. if (pSlayer->isFlag(Effect::EFFECT_CLASS_AFTERMATH)) { Effect* pEffect = pSlayer->getEffectManager()->findEffect(Effect::EFFECT_CLASS_AFTERMATH); EffectAftermath* pEffectAftermath = dynamic_cast<EffectAftermath*>(pEffect); pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促. } else { EffectAftermath* pEffectAftermath = new EffectAftermath(pSlayer); pEffectAftermath->setDeadline(5*600); // 5盒 悼救 瘤加等促. pSlayer->getEffectManager()->addEffect(pEffectAftermath); pSlayer->setFlag(Effect::EFFECT_CLASS_AFTERMATH); pEffectAftermath->create(pSlayer->getName()); } // 软趋阑 摹丰窍搁 瓷仿摹啊 函拳窍霸 等促. SLAYER_RECORD prev; pSlayer->getSlayerRecord(prev); pSlayer->initAllStat(); pSlayer->addModifyInfo(prev, gcMI); pSlayer->sendRealWearingInfo(); } } else if ( pPC->isVampire() ) { Assert( pVampire != NULL ); pVampire->setSilverDamage(0); pVampire->setHP( pVampire->getHP(ATTR_MAX) ); hp = pVampire->getHP(); gcMI.addShortData(MODIFY_CURRENT_HP,hp); gcMI.addShortData(MODIFY_SILVER_DAMAGE,0); } else if ( pPC->isOusters() ) { Assert( pOusters != NULL ); pOusters->setSilverDamage(0); pOusters->setHP( pOusters->getHP(ATTR_MAX) ); hp = pOusters->getHP(); gcMI.addShortData(MODIFY_CURRENT_HP,hp); } else { sendCannotUse( pPacket, pPlayer ); return; } } break; default: sendCannotUse( pPacket, pPlayer ); return; } pPC->deleteEffect(Effect::EFFECT_CLASS_COMA); pPC->removeFlag(Effect::EFFECT_CLASS_COMA); gcRemoveEffect.addEffectList( (EffectID_t)Effect::EFFECT_CLASS_COMA ); pZone->broadcastPacket( pPC->getX(), pPC->getY(), &gcRemoveEffect ); pPC->getEffectManager()->sendEffectInfo( pPC, pZone, pPC->getX(), pPC->getY() ); GCStatusCurrentHP gcHP; gcHP.setObjectID( pPC->getObjectID() ); gcHP.setCurrentHP( hp ); pZone->broadcastPacket( pPC->getX(), pPC->getY(), &gcHP, pPC ); pPlayer->sendPacket( &gcMI ); GCUseOK gcUseOK; pPlayer->sendPacket( &gcUseOK ); if (isStackable(pItem)) { decreaseItemNum(pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); } else { // 阶捞瘤 臼绰 酒捞袍篮 官肺官肺 昏力秦霖促. pInventory->deleteItem(InvenX, InvenY); pItem->destroy(); SAFE_DELETE(pItem); }#endif __END_DEBUG_EX __END_CATCH}void CGUseItemFromInventoryHandler::executeTranslator(CGUseItemFromInventory* pPacket, Player* pPlayer) throw(ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#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); ItemInfo* pItemInfo = g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() ); if ( pItem->getObjectID() != pPacket->getObjectID() || pItemInfo == NULL || pPC->isFlag( Effect::EFFECT_CLASS_TRANSLATION ) ) { ////cout << "酒袍 坷宏璃飘 酒叼啊 撇覆" << endl; sendCannotUse( pPacket, pPlayer ); return; } EffectTranslation* pEffect = new EffectTranslation(pPC); Assert( pEffect != NULL ); pEffect->setDeadline( 6000 ); // 10盒 pPC->addEffect(pEffect); pPC->setFlag( Effect::EFFECT_CLASS_TRANSLATION ); GCAddEffect gcAddEffect; gcAddEffect.setObjectID( pPC->getObjectID() ); gcAddEffect.setEffectID( pEffect->getSendEffectClass() ); gcAddEffect.setDuration( 6000 ); pZone->broadcastPacket( pPC->getX(), pPC->getY(), &gcAddEffect ); GCUseOK gcUseOK; pPlayer->sendPacket( &gcUseOK ); if (isStackable(pItem)) { decreaseItemNum(pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); } else { // 阶捞瘤 臼绰 酒捞袍篮 官肺官肺 昏力秦霖促. pInventory->deleteItem(InvenX, InvenY); pItem->destroy(); SAFE_DELETE(pItem); }#endif __END_DEBUG_EX __END_CATCH}void CGUseItemFromInventoryHandler::executeEffectItem(CGUseItemFromInventory* pPacket, Player* pPlayer) throw(ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#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); EffectItemInfo* pItemInfo = dynamic_cast<EffectItemInfo*>(g_pItemInfoManager->getItemInfo( pItem->getItemClass(), pItem->getItemType() )); if ( pItem->getObjectID() != pPacket->getObjectID() || pItemInfo == NULL || pPC->isFlag( pItemInfo->getEffectClass() ) ) { sendCannotUse( pPacket, pPlayer ); return; } SimpleCreatureEffect* pEffect = new SimpleCreatureEffect( pItemInfo->getEffectClass(), pPC ); Assert( pEffect != NULL ); pEffect->setDeadline( (WORD)pItemInfo->getDuration()*10 ); pPC->addEffect( pEffect ); pPC->setFlag( pEffect->getEffectClass() ); GCAddEffect gcAddEffect; gcAddEffect.setObjectID( pPC->getObjectID() ); gcAddEffect.setEffectID( pEffect->getSendEffectClass() ); gcAddEffect.setDuration( (WORD)pItemInfo->getDuration()*10 ); pZone->broadcastPacket( pPC->getX(), pPC->getY(), &gcAddEffect ); GCUseOK gcUseOK; pPlayer->sendPacket( &gcUseOK ); if (isStackable(pItem)) { decreaseItemNum(pItem, pInventory, pCreature->getName(), STORAGE_INVENTORY, 0, InvenX, InvenY); } else { // 阶捞瘤 臼绰 酒捞袍篮 官肺官肺 昏力秦霖促. pInventory->deleteItem(InvenX, InvenY); pItem->destroy(); SAFE_DELETE(pItem); } #endif __END_DEBUG_EX __END_CATCH}void CGUseItemFromInventoryHandler::executePetItem(CGUseItemFromInventory* pPacket, Player* pPlayer) throw(ProtocolException, Error){ __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);// Zone* pZone = pPC->getZone(); Inventory* pInventory = pPC->getInventory(); CoordInven_t InvenX = pPacket->getX(); CoordInven_t InvenY = pPacket->getY(); Item* pItem = pInventory->getItem(InvenX, InvenY); if ( pPC == NULL ) { sendCannotUse( pPacket, pPlayer ); return; } if ( pPC != NULL && pPC->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); if ( pSlayer->hasRideMotorcycle() ) { sendCannotUse( pPacket, pPlayer ); return; } } if ( pPC != NULL && (pPC->isFlag( Effect::EFFECT_CLASS_TRANSFORM_TO_BAT ) || pPC->isFlag( Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF ) || pPC->isFlag( Effect::EFFECT_CLASS_SUMMON_SYLPH )) ) { sendCannotUse( pPacket, pPlayer ); return; } PetItem* pPetItem = dynamic_cast<PetItem*>(pItem); if ( pPetItem != NULL ) { PetInfo* pTargetPetInfo = pPetItem->getPetInfo(); if ( pTargetPetInfo->
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?