📄 eventmorph.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : EventMorph.cpp// Written by : Reiot// Description : //////////////////////////////////////////////////////////////////////////////#include "EventMorph.h"#include "GamePlayer.h"#include "PCFinder.h"#include "Vampire.h"#include "Slayer.h"#include "ItemUtil.h"#include "Zone.h"#include "ZoneInfoManager.h"#include "ZoneGroupManager.h"#include "IncomingPlayerManager.h"#include "ZonePlayerManager.h"#include "TimeManager.h"#include <fstream.h>#include "LogClient.h"#include "PacketUtil.h"#include "Party.h"#include "TradeManager.h"#include "GuildManager.h"#include "Guild.h"#include "ZoneUtil.h"#include "RelicUtil.h"#include "SharedServerManager.h"#include "DB.h"#include "CreatureUtil.h"#include "Gpackets/GCUpdateInfo.h"#include "Gpackets/GCMorph1.h"#include "Gpackets/GCMorphVampire2.h"#include "Gpackets/GSGuildMemberLogOn.h"#include <stdio.h>//////////////////////////////////////////////////////////////////////////////// class EventMorph member methods//////////////////////////////////////////////////////////////////////////////EventMorph::EventMorph(GamePlayer* pGamePlayer) throw() : Event(pGamePlayer){ __BEGIN_TRY __END_CATCH}EventMorph::~EventMorph() throw(){ __BEGIN_TRY __END_CATCH}void EventMorph::activate () throw (Error){ __BEGIN_TRY __BEGIN_DEBUG Assert(m_pGamePlayer != NULL); Creature* pFromCreature = m_pGamePlayer->getCreature(); Assert(pFromCreature->isSlayer()); if (m_pGamePlayer->getPlayerStatus() != GPS_NORMAL) { // 敲饭捞绢狼 惑怕啊 WAITING_FOR_CG_READY牢单, morph啊 // activate登绢 关狼 粮俊辑 农府媚甫 瘤快绰 何盒俊辑 俊矾啊 throw登绢 // 辑滚啊 磷绰 滚弊啊 乐菌促. 沥犬洒 绢痘霸 秦辑 CG_READY惑怕俊辑 // 捞亥飘啊 activate登绰瘤绰 葛福摆栏唱, GamePlayer狼 // EventManager 磊眉甫 GPS_NORMAL老 锭父 倒酒啊霸 窍搁, // Resurrect啊 登瘤 臼栏聪 林狼窍辨 官鄂促. 搬惫 GamePlayer 郴何俊辑 // 眉农甫 窍扁啊 帮鄂窍扁 锭巩俊 捞 何盒俊辑, 贸府茄促. StringStream msg; msg << "EventMorph::activate() : GamePlayer狼 惑怕啊 GPS_NORMAL捞 酒凑聪促." << "PlayerID[" << m_pGamePlayer->getID() << "]" << "CreatureName[" << pFromCreature->getName() << "]"; filelog("EventMorphError.log", "%s", msg.toString().c_str()); return; } pFromCreature->removeFlag(Effect::EFFECT_CLASS_BLOOD_DRAIN); Zone* pZone = pFromCreature->getZone(); // 父老 Restore 捞棋飘啊 吧妨乐促搁 函脚捞 登瘤 臼绰促. if (pFromCreature->isFlag(Effect::EFFECT_CLASS_RESTORE)) { return; } dropRelicToZone( pFromCreature ); dropFlagToZone( pFromCreature ); dropSweeperToZone( pFromCreature ); ////////////////////////////////////////////////////////////////////// // 阿辆 粮 饭骇 沥焊甫 昏力秦具 茄促. ////////////////////////////////////////////////////////////////////// // 颇萍 檬措 吝捞扼搁 沥焊甫 昏力秦 霖促. PartyInviteInfoManager* pPIIM = pZone->getPartyInviteInfoManager(); Assert(pPIIM != NULL); pPIIM->cancelInvite(pFromCreature); // 颇萍 包访 沥焊甫 昏力秦 霖促. uint PartyID = pFromCreature->getPartyID(); if (PartyID != 0) { // 刚历 肺拿俊辑 昏力窍绊... LocalPartyManager* pLPM = pZone->getLocalPartyManager(); Assert(pLPM != NULL); pLPM->deletePartyMember(PartyID, pFromCreature); // 臂肺国俊辑档 昏力秦 霖促. deleteAllPartyInfo(pFromCreature); } // 飘饭捞靛 吝捞菌促搁 飘饭捞靛 包访 沥焊甫 昏力秦霖促. TradeManager* pTM = pZone->getTradeManager(); Assert(pTM != NULL); pTM->cancelTrade(pFromCreature); ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// Vampire* pVampire = new Vampire(); GCMorph1 gcEventMorph1; // 函脚 寸荤磊俊霸.. GCMorphVampire2 gcEventMorphVampire2; // 函脚 备版槽甸俊霸.. pVampire->setName(pFromCreature->getName()); ObjectID_t fromObjectID = pFromCreature->getObjectID(); pVampire->setObjectID(fromObjectID); Player* pPlayer = pFromCreature->getPlayer(); dynamic_cast<GamePlayer*>(pPlayer)->setCreature(pVampire); pVampire->setPlayer(pPlayer); pVampire->setZone(pZone); pVampire->load(); Coord_t x = pFromCreature->getX(), y = pFromCreature->getY(); Dir_t dir = pFromCreature->getDir(); pVampire->setXYDir(x, y, dir); pVampire->setMoveMode(pFromCreature->getMoveMode()); // slayer to vampire Slayer* pSlayer = dynamic_cast<Slayer*>(pFromCreature); // 轨颇捞绢肺 函脚且锭 Creature Pointer啊 崔扼瘤骨肺... // 盔贰 殿废 登绢乐带 器牢磐绰 俺啊 等促... // 蝶扼辑 货肺款 Creature Pointer甫 殿废秦拎具 茄促. g_pPCFinder->deleteCreature(pFromCreature->getName()); g_pPCFinder->addCreature(pVampire); // 辨靛 泅犁 立加 府胶飘俊辑 昏力茄促. if ( pSlayer->getGuildID() != 99 ) { Guild* pGuild = g_pGuildManager->getGuild( pSlayer->getGuildID() ); if ( pGuild != NULL ) { pGuild->deleteCurrentMember( pSlayer->getName() ); GSGuildMemberLogOn gsGuildMemberLogOn; gsGuildMemberLogOn.setGuildID( pGuild->getID() ); gsGuildMemberLogOn.setName( pSlayer->getName() ); gsGuildMemberLogOn.setLogOn( false ); g_pSharedServerManager->sendPacket( &gsGuildMemberLogOn ); Statement* pStmt = NULL; // 叼厚俊 诀单捞飘 茄促. BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery( "UPDATE GuildMember SET LogOn = 0 WHERE Name = '%s'", pSlayer->getName().c_str() ); } END_DB(pStmt) } else filelog( "GuildMissing.log", "[NoSuchGuild] GuildID : %d, Name : %s\n", (int)pSlayer->getGuildID(), pSlayer->getName().c_str() ); } // 牢亥配府 背眉. Inventory* pInventory = pSlayer->getInventory(); pVampire->setInventory(pInventory); pSlayer->setInventory(NULL); // 焊包窃 背眉 pVampire->deleteStash(); // 捞傈 按眉甫 瘤况林绊... pVampire->setStash(pSlayer->getStash()); // 浇饭捞绢 吧肺 官槽 促澜俊 pVampire->setStashNum(pSlayer->getStashNum()); pVampire->setStashStatus(false); // OID 且寸 惑怕甫 false肺... pSlayer->setStash(NULL); // 器牢磐 俊矾甫 阜扁 困秦 浇饭捞绢 巴篮 NULL肺... /* // 啊厚瘤 背眉 while (true) { Item* pGarbage = pSlayer->popItemFromGarbage(); // 歹 捞惑 绝促搁 宏饭捞农... if (pGarbage == NULL) break; pVampire->addItemToGarbage(pGarbage); } */ // 敲贰弊 悸 背眉 pVampire->deleteFlagSet(); pVampire->setFlagSet(pSlayer->getFlagSet()); pSlayer->setFlagSet(NULL); Item* pItem = NULL; _TPOINT point; // 扁绢俊辑 牢亥配府肺.. for(int part = 0; part < (int)Slayer::WEAR_MAX; part++) { pItem = pSlayer->getWearItem((Slayer::WearPart)part); if (pItem) { if (isTwohandWeapon(pItem)) { Assert(((Slayer::WearPart)part == Slayer::WEAR_RIGHTHAND) || ((Slayer::WearPart)part == Slayer::WEAR_LEFTHAND)); Assert(pSlayer->getWearItem(Slayer::WEAR_RIGHTHAND) == pSlayer->getWearItem(Slayer::WEAR_LEFTHAND)); // 剧颊 酒袍. pSlayer->deleteWearItem(Slayer::WEAR_RIGHTHAND); pSlayer->deleteWearItem(Slayer::WEAR_LEFTHAND); } else { pSlayer->deleteWearItem((Slayer::WearPart)part); } if (pInventory->getEmptySlot(pItem, point)) { // 牢亥配府俊 咯蜡 浇吩捞 乐栏搁.. // 牢亥配府俊 眠啊 pInventory->addItem(point.x, point.y, pItem); pItem->save(pVampire->getName(), STORAGE_INVENTORY, 0, point.x, point.y); } else if ( pItem->isTimeLimitItem() ) { pSlayer->deleteItemByMorph( pItem ); pItem->destroy(); SAFE_DELETE(pItem); } else { TPOINT pt; ZoneCoord_t ZoneX = pSlayer->getX(); ZoneCoord_t ZoneY = pSlayer->getY(); // 粮栏肺 谎赴促. pt = pZone->addItem(pItem, ZoneX, ZoneY); if (pt.x != -1) { pItem->save("", STORAGE_ZONE, pZone->getZoneID(), pt.x , pt.y); log(LOG_DROP_ITEM_MORPH, pSlayer->getName(), "", pItem->toString()); // ItemTraceLog 甫 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { char zoneName[15]; sprintf( zoneName, "%4d%3d%3d", pZone->getZoneID(), pt.x, pt.y); remainTraceLog( pItem, pFromCreature->getName(), zoneName, ITEM_LOG_MOVE, DETAIL_DROP); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -