📄 playercreature.cpp
字号:
//----------------------------------------------------------------------// 漂沥 捞抚阑 啊柳 急傍磊啊 捞固 乐绰瘤 绝绰瘤 犬牢窍绰 窃荐.//----------------------------------------------------------------------bool PlayerCreature::hasEnemy(const string& Name) const throw(){ __BEGIN_DEBUG list<string>::const_iterator itr = find(m_Enemies.begin(), m_Enemies.end() , Name); if (itr != m_Enemies.end()) { //cout << "急傍磊肺 捞固 汲沥捞 登绢乐促 : " << Name << endl; return true; } else { return false; } __END_DEBUG}//----------------------------------------------------------------------// 辨靛 捞抚阑 啊廉坷绰 窃荐//----------------------------------------------------------------------string PlayerCreature::getGuildName() const throw(){ Guild* pGuild = g_pGuildManager->getGuild( m_GuildID ); if ( pGuild != NULL ) return pGuild->getName(); return "";}//----------------------------------------------------------------------// 辨靛 糕滚 珐农甫 啊廉坷绰 窃荐//----------------------------------------------------------------------GuildMemberRank_t PlayerCreature::getGuildMemberRank() const throw(){ Guild* pGuild = g_pGuildManager->getGuild( m_GuildID ); if ( pGuild != NULL ) { GuildMember* pGuildMember = pGuild->getMember( getName() ); if ( pGuildMember != NULL ) { return pGuildMember->getRank(); } } return GuildMember::GUILDMEMBER_RANK_DENY;}Rank_t PlayerCreature::getRank() const throw() { return m_pRank->getLevel(); }RankExp_t PlayerCreature::getRankExp() const throw() { return m_pRank->getTotalExp(); }RankExp_t PlayerCreature::getRankGoalExp() const throw() { return m_pRank->getGoalExp(); }RankBonus* PlayerCreature::getRankBonus( RankBonus::RankBonusType type ) const throw(){ __BEGIN_TRY HashMapRankBonusConstItor itr = m_RankBonuses.find( type ); if ( itr == m_RankBonuses.end() ) { return NULL; } return itr->second; __END_CATCH}void PlayerCreature::addRankBonus( RankBonus* rankBonus ) throw(){ __BEGIN_TRY HashMapRankBonusItor itr = m_RankBonuses.find( rankBonus->getType() ); if ( itr == m_RankBonuses.end() ) { m_RankBonuses[rankBonus->getType()] = rankBonus; m_RankBonusFlag.set( rankBonus->getType() ); } else { SAFE_DELETE( rankBonus ); } __END_CATCH}void PlayerCreature::clearRankBonus() throw(){ __BEGIN_TRY HashMapRankBonusItor itr = m_RankBonuses.begin(); for ( ; itr != m_RankBonuses.end(); itr++ ) { SAFE_DELETE( itr->second ); } m_RankBonuses.clear(); m_RankBonusFlag.reset(); Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery( "DELETE FROM RankBonusData WHERE OwnerID = '%s'", getName().c_str() ); } END_DB( pStmt ) __END_CATCH}RankBonus* PlayerCreature::getRankBonusByRank( Rank_t rank ) const throw(){ __BEGIN_TRY HashMapRankBonusConstItor itr = m_RankBonuses.begin(); for ( ; itr != m_RankBonuses.end(); itr++ ) { RankBonus* pLearnedRankBonus = itr->second; if ( rank == pLearnedRankBonus->getRank() ) { return pLearnedRankBonus; } } return NULL; __END_CATCH}void PlayerCreature::clearRankBonus( Rank_t rank ) throw(){ __BEGIN_TRY RankBonus* pRankBonus = getRankBonusByRank( rank ); if ( pRankBonus == NULL ) return; DWORD rankBonusType = pRankBonus->getType(); HashMapRankBonusItor itr = m_RankBonuses.find( rankBonusType ); if ( itr != m_RankBonuses.end() ) { m_RankBonusFlag.reset( rankBonusType ); SAFE_DELETE( itr->second ); m_RankBonuses.erase( itr ); } Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery( "DELETE FROM RankBonusData WHERE OwnerID = '%s' AND Type = %d", getName().c_str(), (int)rankBonusType ); } END_DB( pStmt ) __END_CATCH}bool PlayerCreature::learnRankBonus( DWORD type ) throw(){ __BEGIN_TRY // 鞍篮 Rank 狼 Bonus 啊 乐促搁 硅匡 荐 绝促. HashMapRankBonusConstItor itr = m_RankBonuses.begin(); RankBonusInfo* pRankBonusInfo = g_pRankBonusInfoManager->getRankBonusInfo( type ); // 辆练 八荤. 0捞 浇饭捞绢. 1捞 轨颇捞绢 bool bValidRace = isSlayer() && pRankBonusInfo->getRace() == 0 || isVampire() && pRankBonusInfo->getRace() == 1 || isOusters() && pRankBonusInfo->getRace() == 2; // 拌鞭 八荤 if ( getRank() < pRankBonusInfo->getRank() ) return false; if (!bValidRace) return false; for ( ; itr != m_RankBonuses.end(); itr++ ) { RankBonus* pLearnedRankBonus = itr->second; if ( pRankBonusInfo->getRank() == pLearnedRankBonus->getRank() ) { DWORD type = pLearnedRankBonus->getType(); RankBonusInfo* pLearnedRankBonusInfo = g_pRankBonusInfoManager->getRankBonusInfo( type ); // 鞍篮 辆练狼 鞍篮 荐霖狼 扁贱篮 给 硅款促. if ( pRankBonusInfo->getRace()==pLearnedRankBonusInfo->getRace()) { return false; } } } RankBonus* rankBonus = new RankBonus( pRankBonusInfo->getType(), pRankBonusInfo->getPoint(), pRankBonusInfo->getRank() ); addRankBonus( rankBonus ); // DB 俊 眠啊 Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery( "INSERT INTO RankBonusData ( OwnerID, Type ) VALUES ( '%s', %d )", getName().c_str(), type ); SAFE_DELETE(pStmt); } END_DB(pStmt) return true; __END_CATCH}void PlayerCreature::sendRankBonusInfo() throw(){ __BEGIN_TRY HashMapRankBonusConstItor itr = m_RankBonuses.begin(); GCRankBonusInfo gcRankBonusInfo; for ( ; itr != m_RankBonuses.end(); itr++ ) { gcRankBonusInfo.addListElement( itr->second->getType() ); } m_pPlayer->sendPacket( &gcRankBonusInfo ); __END_CATCH}void PlayerCreature::loadRankBonus() throw(){ __BEGIN_TRY Statement* pStmt = NULL; Result* pResult = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pResult = pStmt->executeQuery( "SELECT Type FROM RankBonusData WHERE OwnerID ='%s'", getName().c_str() ); while ( pResult->next() ) { DWORD rankBonusType = pResult->getInt(1); RankBonusInfo* pRankBonusInfo = g_pRankBonusInfoManager->getRankBonusInfo( rankBonusType ); if ( getRace() == pRankBonusInfo->getRace() ) { RankBonus* pRankBonus = new RankBonus(); pRankBonus->setType( rankBonusType ); pRankBonus->setPoint( pRankBonusInfo->getPoint() ); pRankBonus->setRank( pRankBonusInfo->getRank() ); addRankBonus( pRankBonus ); } } SAFE_DELETE(pStmt); } END_DB(pStmt) __END_CATCH}void PlayerCreature::increaseRankExp(RankExp_t Point){ if (Point <= 0) return; // PK 粮 救俊辑绰 版氰摹甫 林瘤 臼绰促. if ( g_pPKZoneInfoManager->isPKZone( getZoneID() ) ) return; if ( m_pRank->increaseExp(Point) ) { char pField[80]; sprintf(pField, "Rank=%u, RankExp=%lu, RankGoalExp=%lu", getRank(), getRankExp(), getRankGoalExp()); tinysave(pField); setRankExpSaveCount(0); GCModifyInformation gcModifyInformation; gcModifyInformation.addLongData(MODIFY_RANK, getRank()); m_pPlayer->sendPacket(&gcModifyInformation); if (m_pZone != NULL) { GCOtherModifyInfo gcOtherModifyInfo; gcOtherModifyInfo.setObjectID(getObjectID()); gcOtherModifyInfo.addShortData(MODIFY_RANK, getRank()); m_pZone->broadcastPacket(m_X, m_Y, &gcOtherModifyInfo, this); } } else { WORD rankExpSaveCount = getRankExpSaveCount(); if (rankExpSaveCount > RANK_EXP_SAVE_PERIOD) { char pField[80]; sprintf(pField, "RankExp=%lu, RankGoalExp=%lu", getRankExp(), getRankGoalExp()); tinysave(pField); rankExpSaveCount = 0; } else rankExpSaveCount++; setRankExpSaveCount(rankExpSaveCount); // 拌鞭 版氰摹甫 焊郴霖促. by sigi. 2002.9.13 GCModifyInformation gcModifyInformation; gcModifyInformation.addLongData(MODIFY_RANK_EXP, getRankGoalExp()); m_pPlayer->sendPacket(&gcModifyInformation); }}bool PlayerCreature::isBillingPlayAvaiable() throw(Error){ __BEGIN_TRY if (m_pPlayer==NULL) return false; GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(m_pPlayer); Assert(pGamePlayer!=NULL); return pGamePlayer->isBillingPlayAvaiable(); __END_CATCH}bool PlayerCreature::isPayPlayAvaiable() throw(Error){ __BEGIN_TRY if (m_pPlayer==NULL) return false; GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(m_pPlayer); return pGamePlayer->isPayPlaying(); __END_CATCH}bool PlayerCreature::canPlayFree() throw(Error){ return false;}void PlayerCreature::loadGoods() throw(Error){ __BEGIN_TRY Statement* pStmt = NULL; Result* pResult = NULL; if ( m_pGoodsInventory->getNum() != 0 ) { filelog("GoodsReload.log", "付南酒袍 府肺靛 沁衬? : %s", getName().c_str() ); m_pGoodsInventory->clear(); } BEGIN_DB { pStmt = g_pDatabaseManager->getDistConnection( "PLAYER_DB" )->createStatement(); pResult = pStmt->executeQuery( "SELECT ID, GoodsID, Num FROM GoodsListObject WHERE World = %d AND PlayerID = '%s' AND Name = '%s' AND Status = 'NOT'", g_pConfig->getPropertyInt("WorldID"), getPlayer()->getID().c_str(), getName().c_str() ); while ( pResult->next() ) { string ID = pResult->getString(1); DWORD goodsID = pResult->getInt(2); int num = pResult->getInt(3); for ( int i = 0; i < max(1,min(50,num)) ; i++ ) { Item* pItem = createItemByGoodsID( goodsID ); if ( pItem != NULL ) { m_pGoodsInventory->addItem( ID, pItem ); } } } SAFE_DELETE( pStmt ); } END_DB(pStmt) __END_CATCH}/*void PlayerCreature::loadQuest() throw (Error){ __BEGIN_TRY#ifdef __ACTIVE_QUEST__ SimpleQuestLoader::getInstance()->load( this ); #endif __END_CATCH}bool PlayerCreature::addQuest(Quest* pQuest) throw (Error){ __BEGIN_TRY#ifdef __ACTIVE_QUEST__ if (m_pQuestManager==NULL) { m_pQuestManager = new QuestManager; } if (m_pQuestManager->addQuest( pQuest )) { return true; }#endif __END_CATCH SAFE_DELETE(pQuest); return false;}bool PlayerCreature::checkEvent(QuestEvent* pQuestEvent) throw (Error){ __BEGIN_TRY#ifdef __ACTIVE_QUEST__ if (m_pQuestManager!=NULL) { Quest* pCompleteQuest = m_pQuestManager->checkEvent( pQuestEvent ); if (pCompleteQuest!=NULL) { //cout << "[Complete] " << pCompleteQuest->toString().c_str() << endl; return true; } }#endif return false; __END_CATCH}Quest* PlayerCreature::removeCompleteQuest() throw (Error){ __BEGIN_TRY#ifdef __ACTIVE_QUEST__ if (m_pQuestManager!=NULL) { Quest* pQuest = m_pQuestManager->removeCompleteQuest(); return pQuest; }#endif __END_CATCH return NULL;}*//*bool PlayerCreature::deleteItemNameInfoList( ObjectID_t objectID ) throw(Error){ __BEGIN_TRY list<ItemNameInfo*>::iterator itr = m_ItemNameInfoList.begin(); for( ; itr != m_ItemNameInfoList.end() ; itr++ ) { ItemNameInfo* pInfo = *itr; if( pInfo->getObjectID() == objectID ) { SAFE_DELETE( pInfo ); m_ItemNameInfoList.erase( itr ); return true; } } return false; __END_CATCH}string PlayerCreature::getItemName( ObjectID_t objectID ) throw(Error){ __BEGIN_TRY list<ItemNameInfo*>::iterator itr = m_ItemNameInfoList.begin(); for( ; itr != m_ItemNameInfoList.end() ; itr++ ) { ItemNameInfo* pInfo = *itr; if( pInfo->getObjectID() == objectID ) { return pInfo->getName(); } } return NULL; __END_CATCH}*/void PlayerCreature::addDefaultOptionSet( DefaultOptionSetType_t type ) throw(){ // 捞固 乐绰 巴牢瘤 犬牢茄促. slist<DefaultOptionSetType_t>::iterator itr = m_DefaultOptionSet.begin(); for ( ; itr != m_DefaultOptionSet.end(); itr++ ) { if ( (*itr) == type ) return; } m_DefaultOptionSet.push_front( type );}void PlayerCreature::removeDefaultOptionSet( DefaultOptionSetType_t type ) throw(){ slist<DefaultOptionSetType_t>::iterator before = m_DefaultOptionSet.end(); slist<DefaultOptionSetType_t>::iterator current = m_DefaultOptionSet.begin(); for ( ; current != m_DefaultOptionSet.end(); before = current++ ) { if ( (*current) == type ) { // 惯斑沁促. if ( before == m_DefaultOptionSet.end() ) { // delete first node m_DefaultOptionSet.pop_front(); } else { m_DefaultOptionSet.erase_after(before); } return; } } // 惯斑给沁促.}PetInfo* PlayerCreature::getPetInfo() const{ return m_pPetInfo;}void PlayerCreature::setPetInfo(PetInfo* pPetInfo){ m_pPetInfo = pPetInfo; SAFE_DELETE( m_pPet ); m_pPet = Pet::makePet(this, m_pPetInfo);}void PlayerCreature::heartbeat(const Timeval& currentTime) throw(){ if ( m_pPet != NULL ) m_pPet->heartbeat( currentTime );}GCMonsterKillQuestInfo::QuestInfo* PlayerCreature::getPetQuestInfo() const{ GCMonsterKillQuestInfo::QuestInfo* pQI = new GCMonsterKillQuestInfo::QuestInfo; pQI->questID = PET_QUEST_ID; pQI->sType = m_TargetMonster; pQI->goal = m_TargetNum; pQI->timeLimit = m_TimeLimit; return pQI;}void PlayerCreature::addPetStashItem(int idx, Item* pPetItem){ Assert( pPetItem == NULL || pPetItem->getItemClass() == Item::ITEM_CLASS_PET_ITEM ); Assert( idx >= 0 && idx <= MAX_PET_STASH ); m_PetStash[idx] = pPetItem;}Item* PlayerCreature::getPetStashItem(int idx){ Assert( idx >= 0 && idx <= MAX_PET_STASH ); return m_PetStash[idx];}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -