📄 creatureutil.cpp
字号:
Effect* pEffect = pPC->findEffect( Effect::EFFECT_CLASS_HAS_FLAG ); if ( pEffect != NULL ) pEffect->setDeadline(0); if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK )) { EffectRelicLock* pLock = new EffectRelicLock(pItem); pLock->setDeadline( 10*10 ); // 10檬 pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK ); pItem->getEffectManager().addEffect( pLock ); }/* if ( pt.x != -1 ) // 冻绢哆府绰单 己傍沁促搁 { char pField[80]; sprintf(pField, "OwnerID='', Storage=%d, StorageID=%u, X=%d, Y=%d", STORAGE_ZONE, pZone->getZoneID(), pt.x, pt.y); pItem->tinysave(pField); Effect* pEffect = pPC->findEffect( Effect::EFFECT_CLASS_HAS_FLAG ); if ( pEffect != NULL ) pEffect->setDeadline(0); if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK )) { EffectRelicLock* pLock = new EffectRelicLock(pItem); pLock->setDeadline( 10*10 ); // 10檬 pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK ); pItem->getEffectManager().addEffect( pLock ); } } else { VSRect rect(0, 0, pZone->getWidth()-1, pZone->getHeight()-1); do { pt.x = rand()%(pZone->getWidth()); pt.y = rand()%(pZone->getHeight()); } while ( !rect.ptInRect(pt.x, pt.y) || pZone->getTile(pt.x, pt.y).hasItem() || pZone->getTile(pt.x, pt.y).isBlocked(Creature::MOVE_MODE_WALKING) || ( (pZone->getZoneLevel(pt.x, pt.y))&SAFE_ZONE == 0 ) ); pt = pZone->addItem( pItem, pPC->getX(), pPC->getY(), false ); if ( pt.x == -1 ) { filelog("FlagWar.log", "-_- 弊贰档 标惯 冻绢哆副 磊府啊 绝促.... X灯促."); //throw Error("标惯 冻绢哆副 磊府啊 绝促."); // 措眉 恐 给 冻绢哆府绰芭衬 -_- return false; } }*/ return true;}bool dropFlagToZone( Creature* pCreature, bool bSendPacket ){ PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); if ( !pPC->isFlag( Effect::EFFECT_CLASS_HAS_FLAG ) ) return false; bool bDrop = false; // mouse俊 relic捞 乐绰瘤 眉农 Item* pSlotItem = pPC->getExtraInventorySlotItem(); if (pSlotItem!=NULL && pSlotItem->isFlagItem() ) { if (dropFlagToZone( pPC, pSlotItem )) { pPC->deleteItemFromExtraInventorySlot(); // player狼 mouse俊辑 力芭茄促. // client俊辑 捞 菩哦阑 罐栏搁 // mouse俊辑档 窃 眉农秦林霸 沁促. if (bSendPacket) { GCDeleteInventoryItem gcDeleteInventoryItem; gcDeleteInventoryItem.setObjectID( pSlotItem->getObjectID() ); pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem ); } bDrop = true; } } Zone* pZone = pPC->getZone(); Assert( pZone != NULL ); Inventory* pInventory = pPC->getInventory(); Assert( pInventory != NULL ); // 牢亥配府俊辑 Relic Item阑 茫酒夯促. for ( CoordInven_t y = 0; y < pInventory->getHeight(); y++ ) { for ( CoordInven_t x = 0; x < pInventory->getWidth(); x++ ) { Item* pItem = pInventory->getItem( x, y ); if ( pItem != NULL && pItem->isFlagItem() ) { // 老窜 酒捞袍阑 官蹿俊 冻绢哆赴促. if (dropFlagToZone(pPC, pItem)) { // 牢亥配府俊辑 猾促. pInventory->deleteItem( pItem->getObjectID() ); // player狼 inventory俊辑 力芭茄促. if (bSendPacket) { GCDeleteInventoryItem gcDeleteInventoryItem; gcDeleteInventoryItem.setObjectID( pItem->getObjectID() ); pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem ); } bDrop = true; } } } } return bDrop;}void disableFlags( Creature *pCreature, Zone* pZone, SkillType_t SkillType){ if ( pCreature->isSlayer() ) { if (pCreature->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE)) { g_Sniping.checkRevealRatio(pCreature, 20, 10); } } else if ( pCreature->isVampire() && pZone != NULL ) { if (pCreature->isFlag(Effect::EFFECT_CLASS_INVISIBILITY)) { addVisibleCreature(pZone, pCreature, true); }/* if (pCreature->isFlag(Effect::EFFECT_CLASS_EXTREME)) { if(!(SkillType == SKILL_ACID_TOUCH) && !(SkillType == SKILL_POISONOUS_HANDS) && !(SkillType == SKILL_BLOODY_NAIL)) { EffectManager * pEffectManager = pCreature->getEffectManager(); Assert( pEffectManager != NULL ); Effect * pEffect = pEffectManager->findEffect( Effect::EFFECT_CLASS_EXTREME ); if ( pEffect != NULL ) { pEffect->setDeadline(0); } } } */ } else if ( pCreature->isOusters() ) { }}bool canEnterBeginnerZone( Creature* pCreature ){ if ( pCreature->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); Assert( pSlayer != NULL ); return pSlayer->getTotalAttr(ATTR_BASIC) <= 150; } else if ( pCreature->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); Assert( pVampire != NULL ); return pVampire->getLevel() <= 30; } else if ( pCreature->isOusters() ) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); Assert( pOusters != NULL ); return pOusters->getLevel() <= 30; } return false;}#ifdef __UNDERWORLD__void giveUnderworldGift( Creature* pCreature ){ if ( !pCreature->isPC() ) return; string PlayerName; if ( pCreature->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); Assert( pSlayer != NULL ); PlayerName = pSlayer->getName(); } else if ( pCreature->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); Assert( pVampire != NULL ); PlayerName = pVampire->getName(); } else if ( pCreature->isOusters() ) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); Assert( pOusters != NULL ); PlayerName = pOusters->getName(); } else return; Player* pPlayer = pCreature->getPlayer(); Assert( pPlayer != NULL ); string PlayerID = pPlayer->getID(); Statement* pStmt = NULL; filelog( "Underworld.log", "[%s:%s] 攫歹岿靛 抗概鼻俊 寸梅登菌嚼聪促.", PlayerID.c_str(), PlayerName.c_str() ); try { BEGIN_DB { pStmt = g_pDatabaseManager->getDistConnection("PLAYER_DB")->createStatement(); pStmt->executeQuery( "INSERT INTO UnderworldEvent (WorldID, ServerID, PlayerID, CharacterID, KillTime) VALUES (%u, %u, '%s', '%s', now())", g_pConfig->getPropertyInt("WorldID"), g_pConfig->getPropertyInt("ServerID"), PlayerID.c_str(), PlayerName.c_str() ); } END_DB(pStmt) } catch (Throwable& t) { filelog( "Underworld.log", "DB俊 诀单捞飘甫 角菩沁嚼聪促. : %s", t.toString().c_str() ); } GCNotifyWin gcNW; gcNW.setGiftID( 101 ); gcNW.setName( PlayerName ); g_pZoneGroupManager->broadcast( &gcNW ); char ggCommand[200]; string worldName = g_pGameWorldInfoManager->getGameWorldInfo(g_pConfig->getPropertyInt( "WorldID" ))->getName(); sprintf( ggCommand, "*allworld *command NotifyWin %s(%s) %u", PlayerName.c_str(), worldName.c_str(), 101 ); CGSayHandler::opworld( NULL, ggCommand, 0, false );}#endifbool dropSweeperToZone(PlayerCreature* pPC, Item* pItem) throw (Error){ Zone* pZone = pPC->getZone(); Assert(pZone!=NULL); pZone->addItemDelayed( pItem, pPC->getX(), pPC->getY(), false ); Effect* pEffect = pPC->findEffect( Effect::EFFECT_CLASS_HAS_SWEEPER ); if ( pEffect != NULL ) pEffect->setDeadline(0); if (!pItem->isFlag( Effect::EFFECT_CLASS_RELIC_LOCK )) { EffectRelicLock* pLock = new EffectRelicLock(pItem); pLock->setDeadline( 10*10 ); // 10檬 pItem->setFlag( Effect::EFFECT_CLASS_RELIC_LOCK ); pItem->getEffectManager().addEffect( pLock ); } return true;}bool dropSweeperToZone( Creature* pCreature, bool bSendPacket ){ PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); if ( !pPC->isFlag( Effect::EFFECT_CLASS_HAS_SWEEPER ) ) return false; bool bDrop = false; // mouse俊 relic捞 乐绰瘤 眉农 Item* pSlotItem = pPC->getExtraInventorySlotItem(); if (pSlotItem!=NULL && pSlotItem->getItemClass() == Item::ITEM_CLASS_SWEEPER ) { if (dropSweeperToZone( pPC, pSlotItem )) { pPC->deleteItemFromExtraInventorySlot(); // player狼 mouse俊辑 力芭茄促. // client俊辑 捞 菩哦阑 罐栏搁 // mouse俊辑档 窃 眉农秦林霸 沁促. if (bSendPacket) { GCDeleteInventoryItem gcDeleteInventoryItem; gcDeleteInventoryItem.setObjectID( pSlotItem->getObjectID() ); pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem ); } bDrop = true; } } Zone* pZone = pPC->getZone(); Assert( pZone != NULL ); Inventory* pInventory = pPC->getInventory(); Assert( pInventory != NULL ); // 牢亥配府俊辑 Relic Item阑 茫酒夯促. for ( CoordInven_t y = 0; y < pInventory->getHeight(); y++ ) { for ( CoordInven_t x = 0; x < pInventory->getWidth(); x++ ) { Item* pItem = pInventory->getItem( x, y ); if ( pItem != NULL && pItem->getItemClass() == Item::ITEM_CLASS_SWEEPER ) { // 老窜 酒捞袍阑 官蹿俊 冻绢哆赴促. if (dropSweeperToZone(pPC, pItem)) { // 牢亥配府俊辑 猾促. pInventory->deleteItem( pItem->getObjectID() ); // player狼 inventory俊辑 力芭茄促. if (bSendPacket) { GCDeleteInventoryItem gcDeleteInventoryItem; gcDeleteInventoryItem.setObjectID( pItem->getObjectID() ); pPC->getPlayer()->sendPacket( &gcDeleteInventoryItem ); } bDrop = true; } } } } return bDrop;}Level_t getPCLevel( PlayerCreature* pPC ){ if ( pPC->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); return pSlayer->getHighestSkillDomainLevel(); } else if ( pPC->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pPC); return pVampire->getLevel(); } else if ( pPC->isOusters() ) { Ousters* pOusters = dynamic_cast<Ousters*>(pPC); return pOusters->getLevel(); } return 0;}void sendPetInfo( GamePlayer* pGamePlayer, bool bBroadcast, bool bSummon ){ if ( pGamePlayer == NULL ) return; PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pGamePlayer->getCreature()); if ( pPC == NULL ) return; PetInfo* pPetInfo = pPC->getPetInfo(); GCPetInfo gcPetInfo; gcPetInfo.setPetInfo( pPetInfo ); gcPetInfo.setSummonInfo( (bSummon)?1:0 ); gcPetInfo.setObjectID( pPC->getObjectID() ); pGamePlayer->sendPacket( &gcPetInfo ); if ( bBroadcast ) { pPC->getZone()->broadcastPacket( pPC->getX(), pPC->getY(), &gcPetInfo, pPC ); }}void deletePC( PlayerCreature* pPC ) throw(Error){ __BEGIN_TRY Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); //////////////////////////////////////////////////////////// // 老窜 浇饭捞绢 抛捞喉俊绰 犬角洒 粮犁茄促. //////////////////////////////////////////////////////////// pStmt->executeQuery("DELETE FROM Slayer WHERE Name = '%s'", pPC->getName().c_str()); //////////////////////////////////////////////////////////// // 轨颇捞绢 抛捞喉阑 瘤款促. //////////////////////////////////////////////////////////// pStmt->executeQuery("DELETE FROM Vampire WHERE Name = '%s'", pPC->getName().c_str()); //////////////////////////////////////////////////////////// // 酒快胶磐胶 抛捞喉阑 瘤款促. //////////////////////////////////////////////////////////// pStmt->executeQuery("DELETE FROM Ousters WHERE Name = '%s'", pPC->getName().c_str()); //////////////////////////////////////////////////////////// // 浇饭捞绢 胶懦阑 瘤款促. //////////////////////////////////////////////////////////// pStmt->executeQuery("DELETE FROM SkillSave WHERE OwnerID = '%s'", pPC->getName().c_str()); //////////////////////////////////////////////////////////// // 轨颇捞绢 胶懦阑 瘤况霖促. //////////////////////////////////////////////////////////// pStmt->executeQuery("DELETE FROM VampireSkillSave WHERE OwnerID = '%s'", pPC->getName().c_str()); //////////////////////////////////////////////////////////// // 酒快胶磐令 胶懦阑 瘤况霖促. //////////////////////////////////////////////////////////// pStmt->executeQuery("DELETE FROM OustersSkillSave WHERE OwnerID = '%s'", pPC->getName().c_str()); //////////////////////////////////////////////////////////// // 拌鞭 焊呈胶甫 瘤况霖促. //////////////////////////////////////////////////////////// pStmt->executeQuery("DELETE FROM RankBonusData WHERE OwnerID = '%s'", pPC->getName().c_str() ); //////////////////////////////////////////////////////////// // 酒捞袍阑 兵弊府 瘤款促. //////////////////////////////////////////////////////////// string ownerID = pPC->getName(); pStmt->executeQuery("DELETE FROM ARObject WHERE OwnerID = '" + ownerID + "'"); pStmt->executeQuery("DELETE FROM BeltObject WHERE OwnerID = '" + ownerID + "'"); pStmt->executeQuery("DELETE FROM BladeObject WHERE OwnerID = '" + ownerID + "'"); pStmt->executeQuery("DELETE FROM BloodBibleObject WHERE OwnerID = '" + ownerID + "'"); pStmt->executeQuery("DELETE FROM BombMaterialObject WHERE OwnerID = '" + ownerID + "'"); pStmt->executeQuery("DELETE FROM Bomb
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -