📄 creatureutil.cpp
字号:
case Item::ITEM_CLASS_VAMPIRE_ETC : case Item::ITEM_CLASS_VAMPIRE_PORTAL_ITEM : case Item::ITEM_CLASS_VAMPIRE_WEAPON : case Item::ITEM_CLASS_VAMPIRE_AMULET : case Item::ITEM_CLASS_VAMPIRE_EARRING : case Item::ITEM_CLASS_SERUM : case Item::ITEM_CLASS_SKULL : case Item::ITEM_CLASS_EVENT_GIFT_BOX : case Item::ITEM_CLASS_EVENT_STAR : case Item::ITEM_CLASS_RELIC : case Item::ITEM_CLASS_QUEST_ITEM : case Item::ITEM_CLASS_EVENT_TREE : case Item::ITEM_CLASS_EVENT_ETC : case Item::ITEM_CLASS_BLOOD_BIBLE : case Item::ITEM_CLASS_CASTLE_SYMBOL : case Item::ITEM_CLASS_EVENT_ITEM : case Item::ITEM_CLASS_RESURRECT_ITEM : case Item::ITEM_CLASS_MIXING_ITEM: case Item::ITEM_CLASS_EFFECT_ITEM: case Item::ITEM_CLASS_DYE_POTION: case Item::ITEM_CLASS_MOON_CARD: case Item::ITEM_CLASS_SWEEPER : case Item::ITEM_CLASS_PET_ITEM : case Item::ITEM_CLASS_PET_FOOD : case Item::ITEM_CLASS_PET_ENCHANT_ITEM : case Item::ITEM_CLASS_LUCKY_BAG : return true; case Item::ITEM_CLASS_MONEY : // vampire 捣捞搁 凛绰促. if (pItem->getItemType()==1) return true; break; default : return false; } return false; } else if (pCreature->isOusters()) { if ( pItem->isFlag( Effect::EFFECT_CLASS_SLAYER_ONLY ) ) return false; if ( pItem->isFlag( Effect::EFFECT_CLASS_VAMPIRE_ONLY ) ) return false; // Ousters牢 版快绰 Ousters 酒捞袍苞 // event 酒捞袍父 林匡 荐 乐促. switch (pItem->getItemClass()) { case Item::ITEM_CLASS_OUSTERS_ARMSBAND : case Item::ITEM_CLASS_OUSTERS_BOOTS : case Item::ITEM_CLASS_OUSTERS_CHAKRAM : case Item::ITEM_CLASS_OUSTERS_CIRCLET : case Item::ITEM_CLASS_OUSTERS_COAT : case Item::ITEM_CLASS_OUSTERS_PENDENT : case Item::ITEM_CLASS_OUSTERS_RING : case Item::ITEM_CLASS_OUSTERS_STONE : case Item::ITEM_CLASS_OUSTERS_WRISTLET : case Item::ITEM_CLASS_SKULL : case Item::ITEM_CLASS_EVENT_GIFT_BOX : case Item::ITEM_CLASS_EVENT_STAR : case Item::ITEM_CLASS_RELIC : case Item::ITEM_CLASS_QUEST_ITEM : case Item::ITEM_CLASS_EVENT_TREE : case Item::ITEM_CLASS_EVENT_ETC : case Item::ITEM_CLASS_BLOOD_BIBLE : case Item::ITEM_CLASS_CASTLE_SYMBOL : case Item::ITEM_CLASS_EVENT_ITEM : case Item::ITEM_CLASS_RESURRECT_ITEM : case Item::ITEM_CLASS_MIXING_ITEM: case Item::ITEM_CLASS_LARVA: case Item::ITEM_CLASS_PUPA: case Item::ITEM_CLASS_COMPOS_MEI: case Item::ITEM_CLASS_OUSTERS_SUMMON_ITEM: case Item::ITEM_CLASS_EFFECT_ITEM: case Item::ITEM_CLASS_DYE_POTION: case Item::ITEM_CLASS_MOON_CARD: case Item::ITEM_CLASS_SWEEPER : case Item::ITEM_CLASS_PET_ITEM : case Item::ITEM_CLASS_PET_FOOD : case Item::ITEM_CLASS_PET_ENCHANT_ITEM : case Item::ITEM_CLASS_LUCKY_BAG : return true; case Item::ITEM_CLASS_MONEY : // Ousters 捣捞搁 凛绰促. if (pItem->getItemType()==1) return true; break; default : return false; } return false; } //*/ return true;}bool canDropToZone( Creature* pCreature, Item* pItem ){ // 涅胶飘 酒捞袍 (矫埃力茄 酒捞袍) 冻奔 荐 绝促. if ( pItem->isTimeLimitItem() ) return false; if ( !pCreature->isPC() ) return false; PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); switch ( pItem->getItemClass() ) { case Item::ITEM_CLASS_COUPLE_RING: case Item::ITEM_CLASS_VAMPIRE_COUPLE_RING: { if ( PartnerWaitInfo::getItemClass( pPC ) == pItem->getItemClass() && PartnerWaitInfo::getItemType( pPC ) == pItem->getItemType() ) { return false; } } break; case Item::ITEM_CLASS_MOON_CARD: // 馆崔 墨靛绰 官蹿俊 滚副 荐 绝促. { if ( pItem->getItemType() == 0 ) return false; } break; case Item::ITEM_CLASS_LUCKY_BAG: { if ( pItem->getItemType() == 3 ) return false; } break; case Item::ITEM_CLASS_EVENT_ITEM: { if ( pItem->getItemType() == 28 ) return false; } break; default: break; } return true;}// 弊罚靛 付胶磐牢单 弊罚靛 付胶磐 捞棋飘甫 努扼捞攫飘俊霸 焊郴林扁 帮鄂且 版快 阂矾霖促.// 2002. 1. 13. Sequoia// 荤侩登瘤 臼澜. -.-void confirmGrandMaster(Creature* pCreature){ if( pCreature == NULL ) return; if( !pCreature->isPC() ) return; if( pCreature->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); Assert( pSlayer != NULL ); if( !pSlayer->isFlag( Effect::EFFECT_CLASS_GRAND_MASTER_SLAYER ) ) return; EffectGrandMasterSlayer* pEffect = dynamic_cast<EffectGrandMasterSlayer*>( pSlayer->findEffect( Effect::EFFECT_CLASS_GRAND_MASTER_SLAYER ) ); if( pEffect == NULL ) return; pEffect->affect(); } else if( pCreature->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); Assert( pVampire != NULL ); if( !pVampire->isFlag( Effect::EFFECT_CLASS_GRAND_MASTER_VAMPIRE ) ) return; EffectGrandMasterVampire* pEffect = dynamic_cast<EffectGrandMasterVampire*>( pVampire->findEffect( Effect::EFFECT_CLASS_GRAND_MASTER_VAMPIRE ) ); if( pEffect == NULL ) return; pEffect->affect(); }}boolgetRaceFromDB(const string& Name, Race_t& race) throw(Error){ __BEGIN_TRY Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); Result* pResult = pStmt->executeQuery("SELECT Race FROM Slayer where Name='%s'", Name.c_str()); if (pResult->next()) { string Race = pResult->getString(1); if (Race=="SLAYER") { race = RACE_SLAYER; } else //if (Race=="VAMPIRE") { race = RACE_VAMPIRE; } } else { SAFE_DELETE(pStmt); return false; } SAFE_DELETE(pStmt); } END_DB(pStmt) return true; __END_CATCH}boolgetGuildIDFromDB(const string& Name, Race_t race, GuildID_t& guildID) throw(Error){ __BEGIN_TRY Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); Result* pResult = pStmt->executeQuery( "SELECT GuildID FROM %s where Name='%s'", (race==RACE_SLAYER? "Slayer" : "Vampire"), Name.c_str()); if (pResult->next()) { guildID = (GuildID_t)pResult->getInt(1); if (guildID==0 || guildID==99) { SAFE_DELETE(pStmt); return false; } } else { SAFE_DELETE(pStmt); return false; } SAFE_DELETE(pStmt); } END_DB(pStmt) return true; __END_CATCH}bool canSee( Creature* pSource, Creature* pTarget, EffectObservingEye* pEffectObservingEye, EffectGnomesWhisper* pEffectGnomesWhisper ){ // Target捞 Ghost 捞搁 公炼扒 杭 荐 绝促. if (pTarget->isFlag(Effect::EFFECT_CLASS_GHOST)) return false; //ZoneCoord_t targetX = pTarget->getX(), targetY = pTarget->getY(); // ObservingEye 捞棋飘甫 啊廉柯促. if ( pEffectObservingEye == NULL && pSource->isFlag(Effect::EFFECT_CLASS_OBSERVING_EYE) ) { pEffectObservingEye = dynamic_cast<EffectObservingEye*>(pSource->findEffect(Effect::EFFECT_CLASS_OBSERVING_EYE)); } // GnomesWhisper 捞棋飘甫 啊廉柯促. if ( pEffectGnomesWhisper == NULL && pSource->isFlag(Effect::EFFECT_CLASS_GNOMES_WHISPER) ) { pEffectGnomesWhisper = dynamic_cast<EffectGnomesWhisper*>(pSource->findEffect(Effect::EFFECT_CLASS_GNOMES_WHISPER)); } // 老窜 矫具救俊 乐绢具 焊电悼 窍瘤. //if (pSource->getVisionState(targetX, targetY) >= IN_SIGHT) //{ // 轨颇捞绢 尝府绰 公炼扒 夯促. if (pSource->isVampire() && pTarget->isVampire()) return true; if ( ( !pTarget->isFlag(Effect::EFFECT_CLASS_HIDE) || pSource->isFlag(Effect::EFFECT_CLASS_DETECT_HIDDEN) // 捞力 Revealer档 窍捞靛 茄仇 杭 荐 乐促. || pSource->isFlag(Effect::EFFECT_CLASS_REVEALER) || ( pEffectGnomesWhisper != NULL && pEffectGnomesWhisper->canSeeHide() ) ) && (!pTarget->isFlag(Effect::EFFECT_CLASS_INVISIBILITY) || pSource->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY) || pSource->isVampire() || ( pEffectObservingEye != NULL && pEffectObservingEye->canSeeInvisibility( pTarget ) ) || ( pEffectGnomesWhisper != NULL && pEffectGnomesWhisper->canSeeInvisibility() ) ) && (!pTarget->isFlag(Effect::EFFECT_CLASS_SNIPING_MODE) || pSource->isFlag(Effect::EFFECT_CLASS_DETECT_INVISIBILITY) || ( pEffectGnomesWhisper != NULL && pEffectGnomesWhisper->canSeeSniping() ) ) ) { return true; } //} return false;}int changeSexEx( PlayerCreature* pPC ){ Zone* pZone = pPC->getZone(); if ( pZone == NULL ) return 3; if ( pPC->getFlagSet()->isOn( FLAGSET_IS_COUPLE ) ) return 2; if ( pPC->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); Assert( pSlayer != NULL ); if ( pSlayer->isWear( Slayer::WEAR_BODY ) || pSlayer->isWear( Slayer::WEAR_LEG ) ) return 1; if ( pSlayer->getSex() == MALE ) pSlayer->setSex(FEMALE); else pSlayer->setSex(MALE);// char query[50];// sprintf( query, "SEX = '%s'", Sex2String[pPC->getSex()].c_str() );// pSlayer->tinysave(query); } else if ( pPC->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pPC); Assert( pVampire != NULL ); if ( pVampire->isWear( Vampire::WEAR_BODY ) ) return 1; if ( pVampire->getSex() == MALE ) pVampire->setSex(FEMALE); else pVampire->setSex(MALE);// char query[50];// sprintf( query, "SEX = '%s'", Sex2String[pPC->getSex()].c_str() );// pVampire->tinysave(query); } else return 3; // 咯扁鳖瘤 吭促绰扒 己傈券 己傍捞促. DB诀单捞飘 // 己傈券 己傍捞搁 酒快胶磐令老府绰 例措 绝栏骨肺 浇饭捞绢客 轨颇捞绢 抛捞喉 葛滴 沥焊啊 乐促. Statement* pStmt = NULL; BEGIN_DB { pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement(); pStmt->executeQuery( "UPDATE Slayer SET SEX='%s' WHERE Name='%s'", Sex2String[pPC->getSex()].c_str(), pPC->getName().c_str() ); pStmt->executeQuery( "UPDATE Vampire SET SEX='%s' WHERE Name='%s'", Sex2String[pPC->getSex()].c_str(), pPC->getName().c_str() ); SAFE_DELETE(pStmt); } END_DB(pStmt) return 0;}void initAllStatAndSendChange( PlayerCreature* pPC ){ if ( pPC->isSlayer() ) { Slayer* pSlayer = dynamic_cast<Slayer*>(pPC); Assert( pSlayer != NULL ); SLAYER_RECORD prev; pSlayer->getSlayerRecord(prev); pSlayer->initAllStat(); pSlayer->sendModifyInfo(prev); pSlayer->sendRealWearingInfo(); } else if ( pPC->isVampire() ) { Vampire* pVampire = dynamic_cast<Vampire*>(pPC); Assert( pVampire != NULL ); VAMPIRE_RECORD prev; pVampire->getVampireRecord(prev); pVampire->initAllStat(); pVampire->sendModifyInfo(prev); pVampire->sendRealWearingInfo(); } else if ( pPC->isOusters() ) { Ousters* pOusters = dynamic_cast<Ousters*>(pPC); Assert( pOusters != NULL ); OUSTERS_RECORD prev; pOusters->getOustersRecord(prev); pOusters->initAllStat(); pOusters->sendModifyInfo(prev); pOusters->sendRealWearingInfo(); }}void addSimpleCreatureEffect( Creature* pCreature, Effect::EffectClass eClass, int time = -1, bool isSend = true ){ SimpleCreatureEffect* pEffect = new SimpleCreatureEffect( eClass, pCreature ); Assert( pEffect != NULL ); if ( time != -1 ) pEffect->setDeadline( time ); pEffect->setBroadcastingEffect( isSend ); pCreature->addEffect( pEffect ); pCreature->setFlag( eClass ); if ( isSend ) { GCAddEffect gcAddEffect; gcAddEffect.setObjectID( pCreature->getObjectID() ); gcAddEffect.setEffectID( pEffect->getSendEffectClass() ); if ( time == -1 ) gcAddEffect.setDuration( 65535 ); else gcAddEffect.setDuration( time ); pCreature->getZone()->broadcastPacket( pCreature->getX(), pCreature->getY(), &gcAddEffect ); }}bool dropFlagToZone(PlayerCreature* pPC, Item* pItem) throw (Error){ Zone* pZone = pPC->getZone(); Assert(pZone!=NULL); //cout << "标惯 茫疽促" << endl; // 老窜 酒捞袍阑 官蹿俊 冻绢哆赴促. // 矫眉客 般磨 荐档 乐栏骨肺.. 某腐磐啊 绝绰 镑俊 冻绢哆赴促.// TPOINT pt = pZone->addItem( pItem, pPC->getX(), pPC->getY(), false ); pZone->addItemDelayed( pItem, pPC->getX(), pPC->getY(), false );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -