📄 vampire.cpp
字号:
__LEAVE_CRITICAL_SECTION(OR) m_VampireInfo.setObjectID(m_ObjectID); __END_CATCH}// Zone俊 辆加等 ObjectRegistry甫 荤侩秦辑, Vampire 客 家蜡酒捞袍甸狼// ObjectID甫 且寸罐绰促. ItemTrace 甫 巢辨瘤 咯何 搬沥阑 困秦 蝶肺 话促void Vampire::registerInitObject () throw (Error){ __BEGIN_TRY Assert(getZone() != NULL); // zone 狼 object registery 俊 立辟茄促. ObjectRegistry & OR = getZone()->getObjectRegistry(); __ENTER_CRITICAL_SECTION(OR) // 葛电 酒捞袍俊 OID 啊 官差骨肺 矫埃力茄 酒捞袍 概聪历俊辑 OID 甘阑 瘤况拎具 茄促. if (m_pTimeLimitItemManager != NULL) m_pTimeLimitItemManager->clear(); // 快急 轨颇捞绢狼 OID甫 殿废罐绰促. OR.registerObject_NOLOCKED(this); // 牢亥配府狼 酒捞袍甸狼 OID甫 殿废罐绰促. registerInitInventory(OR); // Goods Inventory狼 酒捞袍甸狼 OID甫 殿废罐绰促. registerGoodsInventory(OR); // 厘馒窍绊 乐绰 酒捞袍甸狼 OID甫 殿废罐绰促. for (int i = 0; i < VAMPIRE_WEAR_MAX; i++) { Item* pItem = m_pWearItem[i]; if (pItem != NULL) { // ItemTrace 甫 巢辨 巴牢瘤 搬沥 pItem->setTraceItem( bTraceLog( pItem ) ); bool bCheck = true; // 剧颊 公扁老 版快, WEAR_LEFTHAND 俊辑 殿废沁栏骨肺, // 肚 殿废且 鞘夸绰 绝促. if (i == WEAR_RIGHTHAND && isTwohandWeapon(pItem)) bCheck = false; if (bCheck) registerItem(pItem, OR); } } // 付快胶俊 甸绊 乐绰 酒捞袍狼 OID甫 殿废 罐绰促. Item* pSlotItem = m_pExtraInventorySlot->getItem(); if (pSlotItem != NULL) { // ItemTrace 甫 巢辨 巴牢瘤 搬沥 pSlotItem->setTraceItem( bTraceLog( pSlotItem ) ); registerItem(pSlotItem, OR); } m_Garbage.registerObject(OR); __LEAVE_CRITICAL_SECTION(OR) m_VampireInfo.setObjectID(m_ObjectID); __END_CATCH}// 矫埃力茄 酒捞袍阑 眉农茄促.// 葛电 酒捞袍捞 捞固 register 登绢乐绢具 茄促.void Vampire::checkItemTimeLimit() throw (Error){ __BEGIN_TRY // 牢亥配府俊辑 茫绰促. { list<Item*> ItemList; int height = m_pInventory->getHeight(); int width = m_pInventory->getWidth(); for (int j=0; j<height; j++) { for (int i=0; i<width; i++) { Item* pItem = m_pInventory->getItem(i, j); if (pItem != NULL) { // 眉农等 酒捞袍狼 府胶飘俊辑 泅犁 酒捞袍阑 茫绰促. list<Item*>::iterator itr = find(ItemList.begin(), ItemList.end(), pItem); if (itr == ItemList.end()) { i += pItem->getVolumeWidth() - 1; if ( wasteIfTimeLimitExpired( pItem ) ) { m_pInventory->deleteItem( pItem->getObjectID() ); SAFE_DELETE( pItem ); } else { // 府胶飘俊 酒捞袍捞 绝栏搁 // 鞍篮 酒捞袍阑 滴锅 眉农窍瘤 臼扁 困秦辑 // 府胶飘俊促啊 酒捞袍阑 笼绢持绰促. ItemList.push_back(pItem); } } } } } } // 厘馒窍绊 乐绰 巴 吝俊 茫绰促. { for (int i = 0; i < VAMPIRE_WEAR_MAX; i++) { Item* pItem = m_pWearItem[i]; if (pItem != NULL) { bool bCheck = true; // 剧颊 公扁老 版快, WEAR_LEFTHAND 俊辑 殿废沁栏骨肺, // 肚 殿废且 鞘夸绰 绝促. if (i == WEAR_RIGHTHAND && isTwohandWeapon(pItem)) bCheck = false; if (bCheck) { if ( wasteIfTimeLimitExpired( pItem ) ) { deleteWearItem( (WearPart)i ); if ( i == WEAR_LEFTHAND && isTwohandWeapon(pItem) ) deleteWearItem( WEAR_RIGHTHAND ); SAFE_DELETE( pItem ); } } } } } // 付快胶俊 甸绊 乐绰 酒捞袍阑 眉农茄促. { Item* pSlotItem = m_pExtraInventorySlot->getItem(); if (pSlotItem != NULL && wasteIfTimeLimitExpired( pSlotItem )) { deleteItemFromExtraInventorySlot(); SAFE_DELETE( pSlotItem ); } } __END_CATCH}///////////////////////////////////////////// Vampire客 Slayer荤捞狼 函脚阑 困秦辑// 酒袍 肺爹篮 蝶肺 贸府茄促.//void Vampire::loadItem( bool checkTimeLimit ) throw (InvalidProtocolException, Error){ __BEGIN_TRY PlayerCreature::loadItem(); // 牢亥配府甫 积己茄促. SAFE_DELETE(m_pInventory); m_pInventory = new Inventory(10, 6); m_pInventory->setOwner(getName()); // 酒捞袍阑 肺靛茄促. g_pItemLoaderManager->load(this); // 备概茄 酒捞袍阑 肺靛茄促. PlayerCreature::loadGoods(); // 肺靛茄 酒捞袍甸阑 殿废矫虐绊 registerInitObject(); if ( checkTimeLimit ) { checkItemTimeLimit(); } // 涝绊 乐绰 渴俊 蝶扼 瓷仿摹甫 拌魂秦霖促. initAllStat(); __END_CATCH}//----------------------------------------------------------------------//----------------------------------------------------------------------bool Vampire::load () throw (InvalidProtocolException, Error){ __BEGIN_TRY Statement* pStmt = NULL; Result* pResult = NULL; int reward = 0; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pResult = pStmt->executeQuery( "SELECT Name, Sex, BatColor, SkinColor, STR, DEX, INTE, HP, CurrentHP, Fame, GoalExp, Level, Bonus, Gold, GuildID, ZoneID, XCoord, YCoord, Sight, Alignment, StashGold, StashNum, Competence, CompetenceShape, ResurrectZone, SilverDamage, Reward, Rank, RankGoalExp FROM Vampire WHERE Name = '%s' AND Active = 'ACTIVE'", m_Name.c_str() ); if (pResult->getRowCount() == 0) { //throw Error("Critical Error : data intergrity broken. (肺弊牢 辑滚俊辑 霸烙 辑滚肺 逞绢坷绰 悼救俊 某腐磐啊 昏力登菌嚼聪促.)"); SAFE_DELETE(pStmt); return false; } pResult->next(); uint i = 0; setName(pResult->getString(++i)); setSex(pResult->getString(++i)); setBatColor(pResult->getInt(++i)); setSkinColor(pResult->getInt(++i)); m_STR[ATTR_BASIC] = pResult->getInt(++i); m_STR[ATTR_CURRENT] = m_STR[ATTR_BASIC]; m_STR[ATTR_MAX] = m_STR[ATTR_BASIC]; m_DEX[ATTR_BASIC] = pResult->getInt(++i); m_DEX[ATTR_CURRENT] = m_DEX[ATTR_BASIC]; m_DEX[ATTR_MAX] = m_DEX[ATTR_BASIC]; m_INT[ATTR_BASIC] = pResult->getInt(++i); m_INT[ATTR_CURRENT] = m_INT[ATTR_BASIC]; m_INT[ATTR_MAX] = m_INT[ATTR_BASIC]; setHP(pResult->getInt(++i) , ATTR_MAX); setHP(getHP(ATTR_MAX) , ATTR_BASIC); setHP(pResult->getInt(++i) , ATTR_CURRENT); setFame(pResult->getInt(++i));// setExp(pResult->getInt(++i)); setGoalExp(pResult->getInt(++i));// setExpOffset(pResult->getInt(++i)); setLevel(pResult->getInt(++i)); setBonus(pResult->getInt(++i)); //setInMagics(pResult->getString(++i)); setGold(pResult->getInt(++i)); setGuildID(pResult->getInt(++i));// setZoneID(pResult->getInt(++i)); ZoneID_t zoneID = pResult->getInt(++i); setX(pResult->getInt(++i)); setY(pResult->getInt(++i)); setSight (pResult->getInt(++i)); setAlignment(pResult->getInt(++i));// for (int j = 0; j < 8; j++)// setHotKey(j, pResult->getInt(++i)); setStashGold(pResult->getInt(++i)); setStashNum(pResult->getBYTE(++i)); m_Competence = pResult->getBYTE(++i); if ( m_Competence >= 4 ) m_Competence = 3; m_CompetenceShape = pResult->getBYTE(++i); setResurrectZoneID(pResult->getInt(++i)); m_SilverDamage = pResult->getInt(++i); reward = pResult->getInt(++i); Rank_t CurRank = pResult->getInt(++i); RankExp_t RankGoalExp = pResult->getInt(++i); m_pRank = new Rank( CurRank, RankGoalExp, RankExpTable::s_RankExpTables[RANK_TYPE_VAMPIRE] );// setRank( pResult->getInt(++i) );// setRankExp( pResult->getInt(++i) );// setRankGoalExp( pResult->getInt(++i) ); // maxHP甫 促矫 拌魂秦辑 汲沥秦霖促. // 2002.7.15 by sigi // 傍侥 官差搁 AbilityBalance.cpp狼 computeHP档 荐沥秦具茄促. int maxHP = m_STR[ATTR_CURRENT]*2 + m_INT[ATTR_CURRENT] + m_DEX[ATTR_CURRENT] + m_Level; maxHP = min((int)maxHP, VAMPIRE_MAX_HP); setHP( maxHP, ATTR_MAX ); try { setZoneID( zoneID ); } catch ( Error& e ) { // 辨靛 酒瘤飘 巩力肺 夯促. // 辨靛 酒瘤飘啊 茄 霸烙 辑滚俊父 粮犁窍骨肺 促弗 霸烙辑滚肺 立加且 锭 弊 酒瘤飘肺 甸绢啊瘤 给茄促. // 辨靛 酒瘤飘 涝备肺 颗变促. setZoneID( 1003 ); setX( 30 ); setY( 30 ); } SAFE_DELETE(pStmt); } END_DB(pStmt)/* if (reward != 0) { BEGIN_DB { StringStream SQL; SQL << "UPDATE Vampire SET Reward = 0 WHERE Name = '" << m_Name << "'"; pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery(SQL.toString()); SAFE_DELETE(pStmt); } END_DB(pStmt) int amount = 0; if (m_Level>=1 && m_Level<=10) amount = m_Level*2000; else if (m_Level>10 && m_Level<=30) amount = m_Level*3000; else if (m_Level>30) amount = m_Level*10000; int offset = 1000; for (int i=0; i<amount; i += offset) { increaseVampExp(offset); } reward = 0; }*/ //---------------------------------------------------------------------- // Vampire Outlook Information 阑 备己茄促. //---------------------------------------------------------------------- // 轨颇捞绢绰 肺爹且锭 ObjectID甫 技泼 窍档废 茄促. 辟单 立加 且订? -_- m_VampireInfo.setObjectID(m_ObjectID); m_VampireInfo.setName(m_Name); m_VampireInfo.setSex(m_Sex); m_VampireInfo.setBatColor(m_BatColor); m_VampireInfo.setSkinColor(m_SkinColor); m_VampireInfo.setCompetence(m_CompetenceShape); //---------------------------------------------------------------------- // 胶懦阑 肺爹茄促. //---------------------------------------------------------------------- BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pResult = pStmt->executeQuery("SELECT SkillType, Delay, CastingTime, NextTime FROM VampireSkillSave WHERE OwnerID = '%s'", m_Name.c_str()); while(pResult->next()) { int i = 0; SkillType_t SkillType = pResult->getInt(++i); if (hasSkill(SkillType) == NULL) { VampireSkillSlot* pVampireSkillSlot = new VampireSkillSlot(); pVampireSkillSlot->setName(m_Name); pVampireSkillSlot->setSkillType(SkillType); pVampireSkillSlot->setInterval (pResult->getInt(++i)); pVampireSkillSlot->setCastingTime (pResult->getInt(++i)); //pVampireSkillSlot->setRunTime (pResult->getInt(++i)); pVampireSkillSlot->setRunTime(); addSkill(pVampireSkillSlot); } } SAFE_DELETE(pStmt); } END_DB(pStmt) //---------------------------------------------------------------------- // Rank Bonus 甫 肺爹茄促. //---------------------------------------------------------------------- loadRankBonus(); //---------------------------------------------------------------------- // 捞棋飘甫 肺爹茄促. //---------------------------------------------------------------------- g_pEffectLoaderManager->load(this); //---------------------------------------------------------------------- // GrandMaster牢 版快绰 Effect甫 嘿咯霖促. //---------------------------------------------------------------------- // by sigi. 2002.11.8 if (m_Level>=100 && SystemAvailabilitiesManager::getInstance()->isAvailable( SystemAvailabilitiesManager::SYSTEM_GRAND_MASTER_EFFECT ) ) { if (!isFlag(Effect::EFFECT_CLASS_GRAND_MASTER_VAMPIRE)) { EffectGrandMasterVampire* pEffect = new EffectGrandMasterVampire(this); pEffect->setDeadline(999999); getEffectManager()->addEffect( pEffect ); setFlag(Effect::EFFECT_CLASS_GRAND_MASTER_VAMPIRE); } } //---------------------------------------------------------------------- // 敲贰弊 悸阑 肺靛茄促. //---------------------------------------------------------------------- m_pFlagSet->load(getName()); //---------------------------------------------------------------------- // Vampire Outlook Information 阑 檬扁拳茄促. //---------------------------------------------------------------------- /* ItemType_t coatType = 0; Item* pItem = m_pWearItem[WEAR_BODY]; if (pItem!=NULL) { coatType = pItem->getItemType(); } */ m_VampireInfo.setCoatType( 0 ); m_VampireInfo.setCoatColor(JACKET_BASIC); m_VampireInfo.setCoatColor(377); //m_VampireInfo.setCoatColor(2 , SUB_COLOR); // 肋给等 版氰摹甫 犁炼沥 秦霖促./* VampEXPInfo* pVampEXPInfo = g_pVampEXPInfoManager->getVampEXPInfo(m_Level); if ((pVampEXPInfo->getAccumExp() != m_Exp + m_GoalExp) && m_Level > 1 && m_Level < VAMPIRE_MAX_LEVEL) { //ofstream file("轨橇瓷仿摹炼沥.txt", ios::out | ios::app); //file << "NAME:" << m_Name << endl; //file << "==VampEXP==" << endl; //file << "泅犁饭骇狼醚版氰摹 : " << (int)pVampEXPInfo->getAccumExp() << endl; //file << "泅犁 穿利 版氰摹 : " << (int)m_Exp << endl; //file << "泅犁 格钎 版氰摹 : " << (int)m_GoalExp << endl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -