📄 actiongiveeventitem.cpp
字号:
////////////////////////////////////////////////////////////////////////////////// Filename : ActionGiveEventItem.cpp// Written By : 厘全芒// Description :////////////////////////////////////////////////////////////////////////////////#include "ActionGiveEventItem.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 "FlagSet.h"#include <list>#include "PacketUtil.h"#include "Gpackets/GCCreateItem.h"#include "Gpackets/GCNPCResponse.h"#include "VariableManager.h"////////////////////////////////////////////////////////////////////////////////// ActionGiveEventItem////////////////////////////////////////////////////////////////////////////////ActionGiveEventItem::ActionGiveEventItem(): 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);}////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////ActionGiveEventItem::~ActionGiveEventItem(){ __BEGIN_TRY SAFE_DELETE(m_pLuaState); SAFE_DELETE(m_pLuaSlayerItem); SAFE_DELETE(m_pLuaVampireItem); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// load////////////////////////////////////////////////////////////////////////////////void ActionGiveEventItem::load() throw (Error){ __BEGIN_TRY Assert(m_pLuaState!=NULL); int result = m_pLuaState->dofile(m_CommonFilename); LuaState::logError(result); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////void ActionGiveEventItem::read(PropertyBuffer & propertyBuffer) throw (Error){ __BEGIN_TRY try { // read script id m_FlagSetType = (FlagSetType)propertyBuffer.getPropertyInt("FlagSetType"); 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 ActionGiveEventItem::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); Inventory* pInventory = pPC->getInventory(); Assert( pInventory != NULL ); Zone* pZone = pPC->getZone(); Assert( pZone != NULL ); FlagSet* pFlagSet = pPC->getFlagSet(); Item::ItemClass ItemClass; ItemType_t ItemType; OptionType_t OptionType; OptionType_t OptionType2; Item* pItem; // 捞亥飘 柳青 扁埃捞 酒囱 版快 if (!g_pVariableManager->isActiveGiveEventItem()) { GCNPCResponse response; response.setCode( NPC_RESPONSE_GIVE_EVENT_ITEM_FAIL_NOW ); pPlayer->sendPacket( &response ); GCNPCResponse quit; quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE ); pPlayer->sendPacket( &quit ); return; } // 捞 蔼苞 包访秦辑 // 某腐磐 积己矫俊 FlagSet阑 官层拎具茄促. (default ON 栏肺) // 捞固 急拱阑 背券秦 艾促搁 if ( pFlagSet->isOn( m_FlagSetType ) ) { GCNPCResponse response; response.setCode( NPC_RESPONSE_GIVE_EVENT_ITEM_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; } //-------------------------------------------------------- // 加档 眉农甫 困秦辑 1000锅 倒妨焊绰 内靛 // 搬苞绰.. 0.07檬 沥档 唱吭促. 皑耽~ -_-; /* Timeval beforeTime; getCurrentTime(beforeTime); for (int i=0; i<1000; i++) { // 风酒狼 拌魂 搬苞甫 罐酒 酒捞袍阑 积己茄促. pLuaSelectItem->prepare(); int result = pLuaSelectItem->executeFile( luaFileName ); LuaState::logError(result); pLuaSelectItem->clear(); } Timeval afterTime; getCurrentTime(afterTime); cout << "luaExecute time before : " << beforeTime.tv_sec << "." << beforeTime.tv_usec << endl; cout << "luaExecute time after : " << afterTime.tv_sec << "." << afterTime.tv_usec << endl; */ //-------------------------------------------------------- // 风酒狼 拌魂 搬苞甫 罐酒 酒捞袍阑 积己茄促. pLuaSelectItem->prepare(); int result = pLuaSelectItem->executeFile( luaFileName ); LuaState::logError(result); ItemClass = pLuaSelectItem->getItemClass(); ItemType = pLuaSelectItem->getItemType(); OptionType = pLuaSelectItem->getOptionType(); OptionType2 = pLuaSelectItem->getOptionType2(); pLuaSelectItem->clear(); if( ItemClass >= Item::ITEM_CLASS_MAX ) //|| ItemType >= ITEM_TYPE_MAX || ItemType < 0 // || OptionType == 0) { filelog( "GiveEventItemError.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 ); if ( OptionType2 != 0 ) optionTypeList.push_back( OptionType2 ); pItem = g_pItemFactoryManager->createItem( ItemClass, ItemType, optionTypeList ); Assert( pItem != NULL ); _TPOINT pt; if (!pInventory->getEmptySlot(pItem, pt)) { SAFE_DELETE(pItem); GCNPCResponse response; response.setCode( NPC_RESPONSE_NO_EMPTY_SLOT ); pPlayer->sendPacket( &response ); GCNPCResponse quit; quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE ); pPlayer->sendPacket( &quit ); return; } CoordInven_t X = pt.x; CoordInven_t Y = pt.y; // 急拱阑 牢亥配府俊 眠啊茄促. pZone->getObjectRegistry().registerObject( pItem ); pInventory->addItem( X, Y, pItem ); pItem->create( pPC->getName(), STORAGE_INVENTORY, 0, X, Y ); // ItemTraceLog 甫 巢变促 if ( pItem != NULL && pItem->isTraceItem() ) { remainTraceLog( pItem, pCreature1->getName(), pCreature2->getName(), ITEM_LOG_CREATE, DETAIL_EVENTNPC); } // 努扼捞攫飘俊 急拱捞 眠啊登菌澜阑 舅赴促. GCCreateItem gcCreateItem; makeGCCreateItem( &gcCreateItem, pItem, X, Y ); pPlayer->sendPacket(&gcCreateItem); // Flag阑 囊促. pFlagSet->turnOn( m_FlagSetType ); // Flag阑 历厘茄促. pFlagSet->save( pPC->getName() ); // 酒捞袍 背券捞 捞风绢 脸促绊 努扼捞攫飘俊 舅赴促. GCNPCResponse response; response.setCode( NPC_RESPONSE_GIVE_EVENT_ITEM_OK ); pPlayer->sendPacket( &response ); GCNPCResponse quit; quit.setCode( NPC_RESPONSE_QUIT_DIALOGUE ); pPlayer->sendPacket( &quit ); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////////////string ActionGiveEventItem::toString () const throw (){ __BEGIN_TRY StringStream msg; msg << "ActionGiveEventItem(" << ")"; return msg.toString(); __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -