actiongiveaccounteventitem.cpp
来自「dk1游戏的原代码文件,完整.编译系统redhat7.3,mysql 3.23 」· C++ 代码 · 共 303 行
CPP
303 行
////////////////////////////////////////////////////////////////////////////////// Filename : ActionGiveAccountEventItem.cpp// Written By : // Description :////////////////////////////////////////////////////////////////////////////////#include "ActionGiveAccountEventItem.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 "VariableManager.h"#include <list>#include "PacketUtil.h"#include "Gpackets/GCCreateItem.h"#include "Gpackets/GCNPCResponse.h"////////////////////////////////////////////////////////////////////////////////// ActionGiveAccountEventItem////////////////////////////////////////////////////////////////////////////////ActionGiveAccountEventItem::ActionGiveAccountEventItem(): 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);}////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////ActionGiveAccountEventItem::~ActionGiveAccountEventItem(){ __BEGIN_TRY SAFE_DELETE(m_pLuaState); SAFE_DELETE(m_pLuaSlayerItem); SAFE_DELETE(m_pLuaVampireItem); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// load////////////////////////////////////////////////////////////////////////////////void ActionGiveAccountEventItem::load() throw (Error){ __BEGIN_TRY Assert(m_pLuaState!=NULL); int result = m_pLuaState->dofile(m_CommonFilename); LuaState::logError(result); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////void ActionGiveAccountEventItem::read(PropertyBuffer & propertyBuffer) throw (Error){ __BEGIN_TRY try { // read script id m_SpecialEventFlag = (SpecialEventFlag)propertyBuffer.getPropertyInt("SpecialEventFlag"); 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 ActionGiveAccountEventItem::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; 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; } // 捞固 罐疽绰瘤 眉农茄促. if ( pGamePlayer->getSpecialEventCount() & m_SpecialEventFlag) { 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; } // 蜡丰 荤侩磊 咯何甫 眉农茄促. if ( !PaySystem::isPayPlayingPeriodPersonal( pGamePlayer->getID() ) ) { GCNPCResponse response; response.setCode( NPC_RESPONSE_GIVE_PREMIUM_USER_ONLY ); 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(); OptionType2 = pLuaSelectItem->getOptionType2(); pLuaSelectItem->clear(); if( ItemClass >= Item::ITEM_CLASS_MAX ) { filelog( "AccountEventItemError.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 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() | m_SpecialEventFlag ); // Flag 甫 历厘茄促. pGamePlayer->saveSpecialEventCount(); // 焊惑阑 罐疽促绊 努扼捞攫飘俊 焊辰促. 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 ActionGiveAccountEventItem::toString () const throw (){ __BEGIN_TRY StringStream msg; msg << "ActionGiveAccountEventItem(" << ")"; return msg.toString(); __END_CATCH}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?