📄 actiongivetestserverreward.cpp
字号:
////////////////////////////////////////////////////////////////////////////////// Filename : ActionGiveTestServerReward.cpp// Written By : 厘全芒// Description :////////////////////////////////////////////////////////////////////////////////#include "ActionGiveTestServerReward.h"#include "PlayerCreature.h"#include "GamePlayer.h"#include "Item.h"#include "ItemUtil.h"#include "OptionInfo.h"#include "Inventory.h"#include "Zone.h"#include "ItemFactoryManager.h"#include "DB.h"#include "Thread.h"#include "Slayer.h"#include "Vampire.h"#include "SpecialEventFlag.h"#include <list>#include "PacketUtil.h"#include "Gpackets/GCCreateItem.h"#include "Gpackets/GCNPCResponse.h"////////////////////////////////////////////////////////////////////////////////// ActionGiveTestServerReward////////////////////////////////////////////////////////////////////////////////ActionGiveTestServerReward::ActionGiveTestServerReward(): m_pLuaState(NULL), m_pLuaSlayerItem(NULL), m_pLuaVampireItem(NULL){ m_pLuaState = new LuaState; m_pLuaState->init(); m_pLuaSlayerItem = new LuaTradeEventSlayerItem(m_pLuaState); m_pLuaVampireItem = new LuaTradeEventVampireItem(m_pLuaState);}////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////ActionGiveTestServerReward::~ActionGiveTestServerReward(){ __BEGIN_TRY SAFE_DELETE(m_pLuaState); SAFE_DELETE(m_pLuaSlayerItem); SAFE_DELETE(m_pLuaVampireItem); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// load////////////////////////////////////////////////////////////////////////////////void ActionGiveTestServerReward::load() throw (Error){ __BEGIN_TRY Assert(m_pLuaState!=NULL); int result = m_pLuaState->dofile(m_CommonFilename); LuaState::logError(result); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////void ActionGiveTestServerReward::read(PropertyBuffer & propertyBuffer) throw (Error){ __BEGIN_TRY try { // read script id m_CommonFilename = propertyBuffer.getProperty("CommonFilename"); m_SlayerFilename = propertyBuffer.getProperty("SlayerFilename"); m_VampireFilename = propertyBuffer.getProperty("VampireFilename"); load(); } catch (NoSuchElementException & nsee) { throw Error(nsee.toString()); } __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 咀记阑 角青茄促.////////////////////////////////////////////////////////////////////////////////void ActionGiveTestServerReward::execute(Creature * pCreature1 , Creature * pCreature2) throw (Error){ __BEGIN_TRY Assert(pCreature1 != NULL); Assert(pCreature2 != NULL); Assert(pCreature1->isNPC()); Assert(pCreature2->isPC()); PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature2); Assert(pPC != NULL); Player* pPlayer = pPC->getPlayer(); Assert(pPlayer != NULL); GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer); Assert(pGamePlayer != NULL ); Inventory* pInventory = pPC->getInventory(); Assert( pInventory != NULL ); Zone* pZone = pPC->getZone(); Assert( pZone != NULL ); Item::ItemClass ItemClass; ItemType_t ItemType; OptionType_t OptionType; Item* pItem; // 捞固 焊惑阑 罐阑 荐 乐绰瘤 眉农 if ( !(pGamePlayer->getSpecialEventCount() & SPECIAL_EVENT_TEST_SERVER_REWARD) ) { GCNPCResponse response; response.setCode( NPC_RESPONSE_REWARD_FAIL ); pPlayer->sendPacket( &response ); GCNPCResponse quit; quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE ); pPlayer->sendPacket( &quit ); return; } LuaSelectItem* pLuaSelectItem = NULL; string luaFileName; if ( pPC->isSlayer() ) { // 风酒俊 浇饭捞绢 瓷仿摹狼 钦阑 set茄促. Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); Assert( pSlayer != NULL ); Attr_t sum = pSlayer->getSTR( ATTR_BASIC ) + pSlayer->getDEX( ATTR_BASIC ) + pSlayer->getINT( ATTR_BASIC ); m_pLuaSlayerItem->setSum(sum); pLuaSelectItem = m_pLuaSlayerItem; luaFileName = m_SlayerFilename; } else if ( pPC->isVampire() ) { // 风酒俊 轨颇捞绢狼 饭骇阑 set茄促. Vampire* pVampire = dynamic_cast<Vampire*>(pPC); Assert( pVampire != NULL ); int level = pVampire->getLevel(); m_pLuaVampireItem->setLevel(level); pLuaSelectItem = m_pLuaVampireItem; luaFileName = m_VampireFilename; } // 风酒狼 拌魂 搬苞甫 罐酒 酒捞袍阑 积己茄促. pLuaSelectItem->prepare(); int result = pLuaSelectItem->executeFile( luaFileName ); LuaState::logError(result); ItemClass = pLuaSelectItem->getItemClass(); ItemType = pLuaSelectItem->getItemType(); OptionType = pLuaSelectItem->getOptionType(); pLuaSelectItem->clear(); if( ItemClass >= Item::ITEM_CLASS_MAX ) { filelog( "TestServerRewardError.txt", "[ ItemInfo Error ] : ItemClass = %d , ItemType = %d , OptionType = %d", ItemClass, ItemType, OptionType ); GCNPCResponse quit; quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE ); pPlayer->sendPacket( &quit ); return; } // 急拱(Item)阑 父电促. list<OptionType_t> optionTypeList; if ( OptionType != 0 ) optionTypeList.push_back( OptionType ); pItem = g_pItemFactoryManager->createItem( ItemClass, ItemType, optionTypeList ); Assert( pItem != NULL ); // 牢亥配府俊 酒捞袍阑 持阑 后 磊府甫 罐酒柯促. TPOINT p; if (!pInventory->getEmptySlot(pItem, p)) { SAFE_DELETE( pItem ); GCNPCResponse response; response.setCode( NPC_RESPONSE_NO_EMPTY_SLOT ); pGamePlayer->sendPacket(&response); GCNPCResponse quit; quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE ); pPlayer->sendPacket( &quit ); return; } // 急拱阑 牢亥配府俊 眠啊茄促. pZone->getObjectRegistry().registerObject( pItem ); pInventory->addItem( p.x, p.y, pItem ); pItem->create( pPC->getName(), STORAGE_INVENTORY, 0, p.x, p.y ); // ItemTraceLog 甫 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { remainTraceLog( pItem, pCreature1->getName(), pCreature2->getName(), ITEM_LOG_CREATE, DETAIL_EVENTNPC); } // 努扼捞攫飘俊 急拱捞 眠啊登菌澜阑 舅赴促. GCCreateItem gcCreateItem; makeGCCreateItem( &gcCreateItem, pItem, p.x, p.y ); pPlayer->sendPacket(&gcCreateItem); // 急拱阑 罐疽促绊 Flag 甫 馋促. pGamePlayer->setSpecialEventCount( pGamePlayer->getSpecialEventCount() & ~(SPECIAL_EVENT_TEST_SERVER_REWARD) ); // Flag 甫 历厘茄促. pGamePlayer->saveSpecialEventCount(); // 焊惑阑 罐疽促绊 努扼捞攫飘俊 焊辰促. GCNPCResponse response; response.setCode( NPC_RESPONSE_REWARD_OK ); pPlayer->sendPacket( &response ); GCNPCResponse quit; quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE ); pPlayer->sendPacket( &quit ); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////////////string ActionGiveTestServerReward::toString () const throw (){ __BEGIN_TRY StringStream msg; msg << "ActionGiveTestServerReward(" << ")"; return msg.toString(); __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -