cgaddzonetomousehandler.cpp
来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 472 行
CPP
472 行
//////////////////////////////////////////////////////////////////////////////// Filename : CGAddZoneToMouseHandler.cc// Written By : elca@ewestsoft.com// Description ://////////////////////////////////////////////////////////////////////////////#include "CGAddZoneToMouse.h"#ifdef __GAME_SERVER__ #include "GamePlayer.h" #include "Zone.h" #include "Slayer.h" #include "Inventory.h" #include "Item.h" #include "ItemUtil.h" #include "CreatureUtil.h" #include "Timeval.h" #include "Relic.h" #include "RelicUtil.h" #include "EffectManager.h" #include "EffectPrecedence.h" //#include "EffectCombatMessage2.h" #include "EffectHasSlayerRelic.h" #include "EffectHasVampireRelic.h" #include "EffectRelicPosition.h" #include "EffectHasSweeper.h" #include "ZoneUtil.h" #include "CombatInfoManager.h" #include "ZoneGroupManager.h" #include "BloodBible.h" #include "StringPool.h" #include "ShrineInfoManager.h" #include "Belt.h" #include "Sweeper.h" #include "OustersArmsband.h" #include "Gpackets/GCDeleteandPickUpOK.h" #include "Gpackets/GCDeleteObject.h" #include "Gpackets/GCCannotAdd.h" #include "Gpackets/GCSystemMessage.h" #include "Gpackets/GCAddEffect.h" #include <stdio.h>#endif////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void CGAddZoneToMouseHandler::execute (CGAddZoneToMouse* pPacket , Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); bool Success = false; try { GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); if (pCreature == NULL) return; PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Zone* pZone = pPC->getZone(); ZoneCoord_t ZoneX = pPacket->getZoneX(); ZoneCoord_t ZoneY = pPacket->getZoneY(); // 官款靛甫 逞绢啊瘤绰 臼绰瘤 眉农茄促. if (!isValidZoneCoord(pZone, ZoneX, ZoneY)) goto ERROR; Tile& _Tile = pZone->getTile(ZoneX, ZoneY); // 鸥老俊 酒捞袍捞 绝促搁 寸楷洒 歹且 荐 绝促. if (!_Tile.hasItem()) goto ERROR; // 酒捞袍 器牢磐啊 澄捞芭唱, 林阑 荐 绝绰 酒捞袍捞扼搁 林阑 荐 绝促. Item* pItem = _Tile.getItem(); if (pItem == NULL || !isPortableItem(pItem)) goto ERROR; if (!isAbleToPickupItem(pPC, pItem)) goto ERROR; // 乔狼 己辑老 版快 林匡 荐 乐绰瘤 犬牢茄促. --> isAbleToPickupItem 郴何俊 持菌促. ObjectID_t ItemObjectID = pItem->getObjectID(); // 酒捞袍狼 ObjectID啊 老摹窍绰瘤 眉农茄促. if (ItemObjectID == pPacket->getObjectID()) { Item* pExtraItem = pPC->getExtraInventorySlotItem(); // 捞固 公攫啊甫 甸绊 乐促搁, 酒捞袍阑 歹且 荐 绝促. if (pExtraItem != NULL) goto ERROR; // 快急鼻捞 嘿绢乐绰 酒捞袍老 版快俊绰 林牢 肚绰 林牢颇萍啊 酒聪扼搁 林阑 荐 绝促. if (pItem->isFlag(Effect::EFFECT_CLASS_PRECEDENCE)) { Timeval currentTime; getCurrentTime(currentTime); EffectManager& rEffectManager = pItem->getEffectManager(); EffectPrecedence* pEffectPrecedence = dynamic_cast<EffectPrecedence*>(rEffectManager.findEffect(Effect::EFFECT_CLASS_PRECEDENCE)); Assert(pEffectPrecedence != NULL); // Relic捞搁 酒公唱 林匡 荐 乐促. if (isRelicItem( pItem ) || pEffectPrecedence->getDeadline() < currentTime) { // 矫埃捞 瘤车促搁 酒公唱 林阑 荐 乐促. 歹阂绢 咯扁辑 捞棋飘甫 昏力秦霖促. rEffectManager.deleteEffect(Effect::EFFECT_CLASS_PRECEDENCE); pItem->removeFlag(Effect::EFFECT_CLASS_PRECEDENCE); } else { // 矫埃捞 酒流 瘤唱瘤 臼疽促搁, 林牢 肚绰 林牢 颇萍父捞 林阑 荐 乐促. if ((pEffectPrecedence->getHostName() == pPC->getName()) || (pPC->getPartyID() != 0 && pPC->getPartyID() == pEffectPrecedence->getHostPartyID())) { // 林阑 荐 乐促. 捞棋飘甫 昏力秦 霖促. rEffectManager.deleteEffect(Effect::EFFECT_CLASS_PRECEDENCE); pItem->removeFlag(Effect::EFFECT_CLASS_PRECEDENCE); } else { // 林阑 荐 绝促. goto ERROR; } } }/*#ifdef __XMAS_EVENT_CODE__ Inventory* pInventory = pPC->getInventory(); // 林栏妨绰 酒捞袍捞 踌祸 急拱 惑磊扼搁, // 牢亥配府俊 踌祸 急拱 惑磊甫 啊瘤绊 乐促搁 林阑 荐 绝促. if (pItem->getItemClass() == Item::ITEM_CLASS_EVENT_GIFT_BOX && pItem->getItemType() == 0 && pInventory->hasGreenGiftBox()) goto ERROR;#endif*/ pItem->whenPCTake(pPC); Item::ItemClass itemclass = pItem->getItemClass(); //ItemType_t itemtype = pItem->getItemType(); // relic牢 版快绰 捞固 爱绊 乐绰 relic辆幅甫 肚 啊龙 荐绰 绝促. // 啊龙 荐 乐促搁 relic阑 啊脸促绰 effect甫 吧绢林绊 // CombatInfoManager俊 家蜡磊 蔼阑 汲沥秦霖促. if (isRelicItem( itemclass )) { addRelicEffect( pPC, pItem ); deleteEffectRelicPosition( pItem ); } // Flag牢 版快浚 Flag 甫 嘿咯霖促. if ( pItem->isFlagItem() ) { addSimpleCreatureEffect( pPC, Effect::EFFECT_CLASS_HAS_FLAG ); } if ( pItem->getItemClass() == Item::ITEM_CLASS_SWEEPER ) { EffectHasSweeper* pEffect = new EffectHasSweeper( pPC ); pEffect->setPart( pItem->getItemType() ); pPC->setFlag( pEffect->getEffectClass() ); pPC->addEffect( pEffect );// addSimpleCreatureEffect( pPC, (Effect::EffectClass)(Effect::EFFECT_CLASS_HAS_SWEEPER + pItem->getItemType()) ); GCAddEffect gcAddEffect; gcAddEffect.setObjectID( pPC->getObjectID() ); gcAddEffect.setEffectID( pEffect->getSendEffectClass() ); pZone->broadcastPacket( pPC->getX(), pPC->getY(), &gcAddEffect ); // 林奎栏搁 粮俊 矫胶袍 皋技瘤 谎妨霖促 char race[15]; if ( pCreature->isSlayer() ) { sprintf( race, g_pStringPool->c_str( STRID_SLAYER ) ); } else if ( pCreature->isVampire() ) { sprintf( race, g_pStringPool->c_str( STRID_VAMPIRE ) ); } else if ( pCreature->isOusters() ) { sprintf( race, g_pStringPool->c_str( STRID_OUSTERS ) ); } else { Assert(false); } const SweeperInfo* pSweeperInfo = dynamic_cast<SweeperInfo*>(g_pSweeperInfoManager->getItemInfo(pItem->getItemType())); char msg[100]; sprintf( msg , g_pStringPool->c_str( STRID_PICK_UP_SWEEPER ) , pSweeperInfo->getName().c_str(), pCreature->getName().c_str(), race ); GCSystemMessage gcSystemMessage; gcSystemMessage.setMessage( msg ); pZone->broadcastPacket( &gcSystemMessage ); } pZone->deleteItem(pItem,ZoneX, ZoneY); pPC->addItemToExtraInventorySlot(pItem); // 林篮 仇俊霸 肋 林菌促绊 搬苞甫 舅妨霖促. GCDeleteandPickUpOK _GCDeleteandPickUpOK; GCDeleteObject _GCDeleteObject; _GCDeleteandPickUpOK.setObjectID(pItem->getObjectID()); pPlayer->sendPacket(&_GCDeleteandPickUpOK); // 辟贸俊 乐绰 促弗 荤恩甸俊罢 酒捞袍俊 荤扼脸促绰 巴阑 焊郴霖促. _GCDeleteObject.setObjectID(pItem->getObjectID());// pZone->broadcastPacket(pPC->getX(), pPC->getY(), &_GCDeleteObject, pPC);// pZone->broadcastPacket(ZoneX, ZoneY, &_GCDeleteObject, pPC); pZone->broadcastPacket(ZoneX, ZoneY, &_GCDeleteObject); Success = true; // 酒捞袍阑 历厘茄促. //pItem->save(pPC->getName(), STORAGE_EXTRASLOT, 0, 0, 0); // item历厘 弥利拳. by sigi. 2002.5.13 char pField[80]; sprintf(pField, "OwnerID='%s', Storage=%d", pPC->getName().c_str(), STORAGE_EXTRASLOT); pItem->tinysave(pField); // 骇飘老 版快 骇飘 救狼 酒捞袍甸档 葛滴 家蜡鼻捞 逞绢啊具 茄促. 2003.3.22 by Sequoia if ( pItem->getItemClass() == Item::ITEM_CLASS_BELT ) { sprintf(pField, "OwnerID='%s'", pPC->getName().c_str()); Belt* pBelt = dynamic_cast<Belt*>( pItem ); Assert( pBelt != NULL ); Inventory* pBeltInventory = pBelt->getInventory(); PocketNum_t num = pBelt->getPocketCount(); for ( SlotID_t count = 0 ; count < num ; ++count ) { Item* pBeltItem = pBeltInventory->getItem( count, 0 ); if ( pBeltItem != NULL ) { pBeltItem->tinysave( pField ); } } } // 鞠胶龟靛老 版快 救狼 酒捞袍甸档 葛滴 家蜡鼻捞 逞绢啊具 茄促. 2003.3.22 by Sequoia if ( pItem->getItemClass() == Item::ITEM_CLASS_OUSTERS_ARMSBAND ) { sprintf(pField, "OwnerID='%s'", pPC->getName().c_str()); OustersArmsband* pOustersArmsband = dynamic_cast<OustersArmsband*>( pItem ); Assert( pOustersArmsband != NULL ); Inventory* pOustersArmsbandInventory = pOustersArmsband->getInventory(); PocketNum_t num = pOustersArmsband->getPocketCount(); for ( SlotID_t count = 0 ; count < num ; ++count ) { Item* pOustersArmsbandItem = pOustersArmsbandInventory->getItem( count, 0 ); if ( pOustersArmsbandItem != NULL ) { pOustersArmsbandItem->tinysave( pField ); } } } } else { goto ERROR; } if ( pItem != NULL && pItem->isTraceItem() ) { char zoneName[15]; sprintf(zoneName, "%4d%3d%3d", pZone->getZoneID(), ZoneX, ZoneY); remainTraceLog( pItem, zoneName, pCreature->getName(), ITEM_LOG_MOVE, DETAIL_PICKUP); } } catch (Throwable & t) { //cerr << t.toString(); }ERROR: if (!Success) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); }#endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH}//////////////////////////////////////////////////////////////////////////////// 捞亥飘 内靛啊 甸绢啊乐绰 滚傈捞促.// 度鞍篮 捞亥飘啊 肚 角青瞪 瘤 葛福聪, 瘤快瘤 富 巴! -- by 辫己刮///////////////////////////////////////////////////////////////////////////////*void CGAddZoneToMouseHandler::execute (CGAddZoneToMouse* pPacket , Player* pPlayer) throw (ProtocolException, Error){ __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __GAME_SERVER__ Assert(pPacket != NULL); Assert(pPlayer != NULL); try { GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Creature* pCreature = pGamePlayer->getCreature(); bool Success = false; if (pCreature == NULL) return; PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Zone* pZone = pPC->getZone(); ZoneCoord_t ZoneX = pPacket->getZoneX(); ZoneCoord_t ZoneY = pPacket->getZoneY(); // 官款靛甫 逞绢啊瘤绰 臼绰瘤 眉农茄促. if (!isValidZoneCoord(pZone, ZoneX, ZoneY)) goto ERROR; Tile& _Tile = pZone->getTile(ZoneX, ZoneY); // 鸥老俊 酒捞袍捞 绝促搁 寸楷洒 歹且 荐 绝促. if (!_Tile.hasItem()) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } // 酒捞袍 器牢磐啊 澄捞扼搁 寸楷洒 歹且 荐 绝促. Item* pItem = _Tile.getItem(); if (pItem == NULL) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } ObjectID_t ItemObjectID = pItem->getObjectID(); // 酒捞袍狼 ObjectID啊 老摹窍绰瘤 眉农茄促. if (ItemObjectID == pPacket->getObjectID()) { Item* pExtraItem = pPC->getExtraInventorySlotItem(); // 捞固 公攫啊甫 甸绊 乐促搁, 酒捞袍阑 歹且 荐 绝促. if (pExtraItem != NULL) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); return; } // 官蹿俊 冻绢廉 乐绰 酒捞袍捞 捞亥飘侩 秦榜捞扼搁... if (pItem->getItemClass() == Item::ITEM_CLASS_SKULL && 12 <= pItem->getItemType() && pItem->getItemType() <= 16) { uint scount = pGamePlayer->getSpecialEventCount(); int prev = (int)(scount/10); int cur = 0; switch (pItem->getItemType()) { case 12: scount += 1; break; // 炔陛 秦榜 case 15: scount += 4; break; // 荐沥 秦榜 case 14: scount += 9; break; // 八篮 秦榜 default: break; } // 墨款飘甫 历厘茄促. pGamePlayer->setSpecialEventCount(scount); pGamePlayer->saveSpecialEventCount(); cur = scount/10; // 粮俊辑 酒捞袍阑 昏力茄促. pZone->deleteItem(pItem, ZoneX, ZoneY); // 林篮 仇俊霸 肋 林菌促绊 朝妨霖促. GCDeleteandPickUpOK _GCDeleteandPickUpOK; GCDeleteObject _GCDeleteObject; _GCDeleteandPickUpOK.setObjectID(pItem->getObjectID()); pPlayer->sendPacket(&_GCDeleteandPickUpOK); // 辟贸俊 乐绰 促弗 荤恩甸俊罢 酒捞袍俊 荤扼脸促绰 巴阑 焊郴霖促. _GCDeleteObject.setObjectID(pItem->getObjectID()); pZone->broadcastPacket(pPC->getX(), pPC->getY(), &_GCDeleteObject, pPC); // 付瘤阜栏肺 角力 酒捞袍 按眉甫 昏力茄促. SAFE_DELETE(pItem); // 痢荐甫 沥扁利栏肺 啊福媚霖促. StringStream msg; msg << "寸脚狼 泅犁 捞亥飘 器牢飘绰 " << pGamePlayer->getSpecialEventCount() << " 器牢飘 涝聪促."; GCSystemMessage gcMsg; gcMsg.setMessage(msg.toString()); pPlayer->sendPacket(&gcMsg); // 痢荐甫 沥扁利栏肺 宏肺靛某胶泼茄促. if (prev != cur) { StringStream msg; msg << pPC->getName() << "丛膊辑 " << pGamePlayer->getSpecialEventCount() << " 器牢飘狼 捞亥飘 痢荐甫 裙垫窍看嚼聪促."; GCSystemMessage gcMsg; gcMsg.setMessage(msg.toString()); pPlayer->sendPacket(&gcMsg); pZone->broadcastPacket(pPC->getX(), pPC->getY(), &gcMsg , pPC); } return; } // 粮俊辑 酒捞袍阑 昏力窍绊, 付快胶俊促 崔酒霖促. pZone->deleteItem(pItem, ZoneX, ZoneY); pPC->addItemToExtraInventorySlot(pItem); // 林篮 仇俊霸 肋 林菌促绊 搬苞甫 舅妨霖促. GCDeleteandPickUpOK _GCDeleteandPickUpOK; GCDeleteObject _GCDeleteObject; _GCDeleteandPickUpOK.setObjectID(pItem->getObjectID()); pPlayer->sendPacket(&_GCDeleteandPickUpOK); // 辟贸俊 乐绰 促弗 荤恩甸俊罢 酒捞袍俊 荤扼脸促绰 巴阑 焊郴霖促. _GCDeleteObject.setObjectID(pItem->getObjectID()); pZone->broadcastPacket(pPC->getX(), pPC->getY(), &_GCDeleteObject, pPC); Success = true; // 酒捞袍阑 历厘茄促. pItem->save(pPC->getName(), STORAGE_EXTRASLOT, 0, 0, 0); } if (!Success) { GCCannotAdd _GCCannotAdd; _GCCannotAdd.setObjectID(pPacket->getObjectID()); pPlayer->sendPacket(&_GCCannotAdd); } } catch (Throwable & t) { //cerr << t.toString(); }#endif // __GAME_SERVER__ __END_DEBUG_EX __END_CATCH}*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?