📄 actionredistributeattr.cpp
字号:
////////////////////////////////////////////////////////////////////////////////// Filename : ActionRedistributeAttr.cpp// Written By : // Description :////////////////////////////////////////////////////////////////////////////////#include "ActionRedistributeAttr.h"#include "Vampire.h"#include "Zone.h"#include "GamePlayer.h"#include "DB.h"#include "VariableManager.h"#include "StringPool.h"#include <stdio.h>#include "Gpackets/GCNPCResponse.h"#include "Gpackets/GCModifyInformation.h"#include "Gpackets/GCSystemMessage.h"////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////void ActionRedistributeAttr::read (PropertyBuffer & propertyBuffer) throw (Error){ __BEGIN_TRY try { // read script type string AttrType = propertyBuffer.getProperty("AttrType"); if (AttrType == "STR") m_AttrType = 0; else if (AttrType == "DEX") m_AttrType = 1; else if (AttrType == "INT") m_AttrType = 2; else { cout << "ActionRedistributeAttr::read() : Unknown ATTR type" << endl; throw ("ActionRedistributeAttr::read() : Unknown ATTR type"); } } catch (NoSuchElementException & nsee) { cout << nsee.toString() << endl; throw Error(nsee.toString()); } __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 咀记阑 角青茄促.////////////////////////////////////////////////////////////////////////////////void ActionRedistributeAttr::execute (Creature * pCreature1 , Creature * pCreature2) throw (Error){ __BEGIN_TRY Assert(pCreature1 != NULL); Assert(pCreature2 != NULL); Assert(pCreature1->isNPC()); Assert(pCreature2->isVampire()); Player* pPlayer = pCreature2->getPlayer(); Assert(pPlayer != NULL); // 刚历 努扼捞攫飘甫 困秦 GCNPCResponse甫 焊郴霖促. GCNPCResponse okpkt; pPlayer->sendPacket(&okpkt); Vampire* pVampire = dynamic_cast<Vampire*>(pCreature2); Gold_t ATTR_PRICE = g_pVariableManager->getVariable( VAMPIRE_REDISTRIBUTE_ATTR_PRICE ); // 捣阑 啊瘤绊 乐瘤 臼促搁 俊矾促. if (pVampire->getGold() < ATTR_PRICE) { // 刚历 措拳芒阑 摧霸 茄促. GCNPCResponse gcNPCResponse; gcNPCResponse.setCode(NPC_RESPONSE_QUIT_DIALOGUE); pPlayer->sendPacket(&gcNPCResponse);/* StringStream msg; msg << pVampire->getName() << " 丛篮 面盒茄 捣阑 啊瘤绊 乐瘤 臼嚼聪促.(" << ATTR_PRICE << " 爸靛)"; */ char msg[100]; sprintf( msg, g_pStringPool->c_str( STRID_NOT_ENOUGH_MONEY ), pVampire->getName().c_str() ); GCSystemMessage gcSM; gcSM.setMessage( msg ); pPlayer->sendPacket(&gcSM); return; } // 饭骇 唱穿扁 2父怒狼 瓷仿摹父 焊呈胶 器牢飘肺 傈券且 荐 乐促. // 弊矾骨肺 捞固 弊 茄拌甫 促 盲快瘤绰 臼疽绰瘤 八荤茄促. Statement* pStmt = NULL; Result* pResult = NULL; int RedistributedAttr = 0; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pResult = pStmt->executeQuery("SELECT RedistributeAttr FROM Vampire WHERE Name='%s'", pVampire->getName().c_str()); if (pResult->getRowCount() == 0) { cerr << "ActionRedistributeAttr : No Vampire Record On Table" << endl; throw Error("ActionRedistributeAttr : No Vampire Record On Table"); } else { pResult->next(); RedistributedAttr = pResult->getInt(1); } if (RedistributedAttr >= pVampire->getLevel()) { // 刚历 措拳芒阑 摧霸 茄促. GCNPCResponse gcNPCResponse; gcNPCResponse.setCode(NPC_RESPONSE_QUIT_DIALOGUE); pPlayer->sendPacket(&gcNPCResponse);// StringStream msg;// msg << "饭骇父怒父 焊呈胶 器牢飘肺 傈券且 荐 乐嚼聪促."; GCSystemMessage gcSM; gcSM.setMessage( g_pStringPool->getString( STRID_TRANS_BONUS_POINT ) ); pPlayer->sendPacket(&gcSM); SAFE_DELETE(pStmt); return; } SAFE_DELETE(pStmt); } END_DB(pStmt) // 瓷仿摹甫 函版窍扁俊 菊辑 扁粮狼 瓷仿摹甫 历厘茄促. VAMPIRE_RECORD prev; pVampire->getVampireRecord(prev); StringStream sql; StringStream sql2; // STR 犁盒硅 if (m_AttrType == 0) { // 鉴荐塞捞 20捞窍扼搁 歹 捞惑 犁盒硅且 荐啊 绝促. if (pVampire->getSTR(ATTR_BASIC) <= 20) { // 刚历 措拳芒阑 摧霸 茄促. GCNPCResponse gcNPCResponse; gcNPCResponse.setCode(NPC_RESPONSE_QUIT_DIALOGUE); pPlayer->sendPacket(&gcNPCResponse);// StringStream msg;// msg << "STR阑 20捞窍肺 撤免 荐绰 绝嚼聪促."; GCSystemMessage gcSM; gcSM.setMessage( g_pStringPool->getString( STRID_STR_LOW_LIMIT ) ); pPlayer->sendPacket(&gcSM); return; } pVampire->setSTR(pVampire->getSTR(ATTR_BASIC) - 1, ATTR_BASIC); sql << "STR = " << (int)pVampire->getSTR(ATTR_BASIC); } // DEX 犁盒硅 else if (m_AttrType == 1) { if (pVampire->getDEX(ATTR_BASIC) <= 20) { // 刚历 措拳芒阑 摧霸 茄促. GCNPCResponse gcNPCResponse; gcNPCResponse.setCode(NPC_RESPONSE_QUIT_DIALOGUE); pPlayer->sendPacket(&gcNPCResponse);// StringStream msg;// msg << "DEX甫 20捞窍肺 撤免 荐绰 绝嚼聪促."; GCSystemMessage gcSM; gcSM.setMessage( g_pStringPool->getString( STRID_DEX_LOW_LIMIT ) ); pPlayer->sendPacket(&gcSM); return; } pVampire->setDEX(pVampire->getDEX(ATTR_BASIC) - 1, ATTR_BASIC); sql << "DEX = " << (int)pVampire->getDEX(ATTR_BASIC); } // INT 犁盒硅 else if (m_AttrType == 2) { if (pVampire->getINT(ATTR_BASIC) <= 20) { // 刚历 措拳芒阑 摧霸 茄促. GCNPCResponse gcNPCResponse; gcNPCResponse.setCode(NPC_RESPONSE_QUIT_DIALOGUE); pPlayer->sendPacket(&gcNPCResponse);// StringStream msg;// msg << "INT甫 20捞窍肺 撤免 荐绰 绝嚼聪促."; GCSystemMessage gcSM; gcSM.setMessage( g_pStringPool->getString( STRID_INT_LOW_LIMIT ) ); pPlayer->sendPacket(&gcSM); return; } pVampire->setINT(pVampire->getINT(ATTR_BASIC) - 1, ATTR_BASIC); sql << "INTE = " << (int)pVampire->getINT(ATTR_BASIC); } else { Assert(false); } // 临绢电 瓷仿摹甫 技捞宏窍绊, // 瓷仿摹啊 临绢甸菌栏聪, 焊呈胶甫 疵赴促. // 弊府绊 捣阑 临牢促. pVampire->tinysave(sql.toString()); pVampire->setBonus(pVampire->getBonus() + 1); sql2 << "Bonus = " << (int)pVampire->getBonus(); pVampire->tinysave(sql2.toString()); //pVampire->setGoldEx(pVampire->getGold() - ATTR_PRICE); // by sigi. 2002.9.18 pVampire->decreaseGoldEx(ATTR_PRICE); GCModifyInformation gcMI; gcMI.addShortData(MODIFY_BONUS_POINT, pVampire->getBonus()); gcMI.addLongData(MODIFY_GOLD, pVampire->getGold()); pVampire->initAllStat(); pVampire->addModifyInfo(prev, gcMI); pVampire->sendRealWearingInfo(); pPlayer->sendPacket(&gcMI); // 函券茄 瓷仿摹狼 剧阑 历厘秦具 茄促. BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery("UPDATE Vampire SET RedistributeAttr = %d WHERE Name='%s'", RedistributedAttr + 1, pVampire->getName().c_str()); SAFE_DELETE(pStmt); } END_DB(pStmt) __END_CATCH}////////////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////////////string ActionRedistributeAttr::toString () const throw (){ __BEGIN_TRY StringStream msg; msg << "ActionRedistributeAttr(" << ")"; return msg.toString(); __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -