📄 vampireportalitem.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : VampirePortalItem.cpp// Written By : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "VampirePortalItem.h"#include "DB.h"#include "Slayer.h"#include "Vampire.h"#include "Belt.h"#include "Motorcycle.h"#include "Stash.h"#include "ItemInfoManager.h"#include "ItemUtil.h"#include "skill/EffectVampirePortal.h"ItemID_t VampirePortalItem::m_ItemIDRegistry = 0;Mutex VampirePortalItem::m_Mutex;VampirePortalItemInfoManager* g_pVampirePortalItemInfoManager = NULL;VampirePortalItemLoader* g_pVampirePortalItemLoader = NULL;//////////////////////////////////////////////////////////////////////////////// class VampirePortalItem member methods//////////////////////////////////////////////////////////////////////////////VampirePortalItem::VampirePortalItem() throw(){ __BEGIN_TRY m_ItemType = 0; m_Charge = 0; m_ZoneID = 0; m_X = 0; m_Y = 0; //m_pEffectVampirePortal[0] = NULL; //m_pEffectVampirePortal[1] = NULL; __END_CATCH}VampirePortalItem::VampirePortalItem(ItemType_t itemType, const list<OptionType_t>& optionType) throw(){ __BEGIN_TRY m_ItemType = itemType; m_Charge = getMaxCharge(); switch (m_ItemType) { case 3: case 4: case 5: m_ZoneID = 1003; m_X = 50; m_Y = 70; break; case 6: case 7: case 8: m_ZoneID = 1007; m_X = 62; m_Y = 65; break; case 9: case 10: case 11: m_ZoneID = 61; m_X = 102; m_Y = 220; break; default: m_ZoneID = 0; m_X = 0; m_Y = 0; break; } if (!g_pItemInfoManager->isPossibleItem(getItemClass(), m_ItemType, optionType)) { filelog("itembug.log", "VampirePortalItem::VampirePortalItem() : Invalid item type or option type"); throw ("VampirePortalItem::VampirePortalItem() : Invalid item type or optionType"); } //m_pEffectVampirePortal[0] = NULL; //m_pEffectVampirePortal[1] = NULL; __END_CATCH}VampirePortalItem::~VampirePortalItem() throw(){ __BEGIN_TRY __END_CATCH}void VampirePortalItem::create(const string & ownerID, Storage storage, StorageID_t storageID, BYTE x, BYTE y, ItemID_t itemID) throw(Error){ __BEGIN_TRY Statement* pStmt = NULL; if (itemID==0) { __ENTER_CRITICAL_SECTION(m_Mutex) m_ItemIDRegistry += g_pItemInfoManager->getItemIDSuccessor(); m_ItemID = m_ItemIDRegistry; __LEAVE_CRITICAL_SECTION(m_Mutex) } else { m_ItemID = itemID; } BEGIN_DB { StringStream sql; sql << "INSERT INTO VampirePortalItemObject " << "(ItemID,ObjectID,ItemType,OwnerID, Storage,StorageID,X,Y, Charge,TargetZID,TargetX,TargetY) VALUES (" << m_ItemID << "," << m_ObjectID << "," << m_ItemType << ",'" << ownerID << "'," << (int)storage << "," << storageID << "," << (int)x << "," << (int)y << "," << m_Charge << "," << (int)m_ZoneID << "," << (int)m_X << "," << (int)m_Y << ")"; pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery(sql.toString()); SAFE_DELETE(pStmt); } END_DB(pStmt) __END_CATCH}//--------------------------------------------------------------------------------// save item//--------------------------------------------------------------------------------void VampirePortalItem::tinysave(const char* field) const throw(Error){ __BEGIN_TRY Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery( "UPDATE VampirePortalItemObject SET %s WHERE ItemID=%ld", field, m_ItemID); SAFE_DELETE(pStmt); } END_DB(pStmt) __END_CATCH}void VampirePortalItem::save(const string & ownerID, Storage storage, StorageID_t storageID, BYTE x, BYTE y) throw(Error){ __BEGIN_TRY Statement* pStmt = NULL; BEGIN_DB { /* StringStream sql; sql << "UPDATE VampirePortalItemObject SET " << "ObjectID = " << m_ObjectID << ",ItemType = " << m_ItemType << ",OwnerID = '" << ownerID << "'" << ",Storage = " <<(int)storage << ",StorageID = " << storageID << ",X = " <<(int)x << ",Y = " <<(int)y << ",Charge = " << m_Charge << ",TargetZID = " << (int)m_ZoneID << ",TargetX = " << (int)m_X << ",TargetY = " << (int)m_Y << " WHERE ItemID = " << m_ItemID; pStmt->executeQuery(sql.toString()); */ pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery( "UPDATE VampirePortalItemObject SET ObjectID=%ld, ItemType=%d, OwnerID='%s', Storage=%d, StorageID=%ld, X=%d, Y=%d, Charge=%d, TargetZID=%d, TargetX=%d, TargetY=%d WHERE ItemID=%ld", m_ObjectID, m_ItemType, ownerID.c_str(), (int)storage, storageID, (int)x, (int)y, m_Charge, (int)m_ZoneID, (int)m_X, (int)m_Y, m_ItemID ); SAFE_DELETE(pStmt); } END_DB(pStmt) __END_CATCH}VolumeWidth_t VampirePortalItem::getVolumeWidth() const throw(Error){ __BEGIN_TRY return g_pVampirePortalItemInfoManager->getItemInfo(m_ItemType)->getVolumeWidth(); __END_CATCH} VolumeHeight_t VampirePortalItem::getVolumeHeight() const throw(Error){ __BEGIN_TRY return g_pVampirePortalItemInfoManager->getItemInfo(m_ItemType)->getVolumeHeight(); __END_CATCH} Weight_t VampirePortalItem::getWeight() const throw(Error){ __BEGIN_TRY return g_pVampirePortalItemInfoManager->getItemInfo(m_ItemType)->getWeight(); __END_CATCH}string VampirePortalItem::toString() const throw(){ __BEGIN_TRY StringStream msg; msg << "VampirePortalItem(" << "ItemID:" << m_ItemID << ",ItemType:" <<(int)m_ItemType << ",Charge:" << m_Charge << ",TargetZID:" << (int)m_ZoneID << ",TargetX:" << (int)m_X << ",TargetY:" << (int)m_Y << ")"; return msg.toString(); __END_CATCH}int VampirePortalItem::getMaxCharge(void) const throw(){ __BEGIN_TRY VampirePortalItemInfo* pInfo = dynamic_cast<VampirePortalItemInfo*>(g_pVampirePortalItemInfoManager->getItemInfo(m_ItemType)); Assert(pInfo != NULL); return pInfo->getMaxCharge(); __END_CATCH}Durability_t VampirePortalItem::getDurability() const throw(Error){ __BEGIN_TRY WORD highBits = m_X << 8; WORD lowBits = m_Y; return (WORD)(highBits | lowBits); __END_CATCH}Silver_t VampirePortalItem::getSilver() const throw() { __BEGIN_TRY return m_ZoneID; __END_CATCH}EnchantLevel_t VampirePortalItem::getEnchantLevel() const throw() { __BEGIN_TRY return m_Charge; __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -