📄 creatureutil.cpp
字号:
{ __BEGIN_TRY if (pCreature == NULL) return NULL; PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature); Inventory* pInventory = pPC->getInventory(); Stash* pStash = pPC->getStash(); Item* pItem = NULL; CoordInven_t tx = 0; CoordInven_t ty = 0; // 牢亥配府 八祸 pItem = pInventory->findItemIID(id, IClass, tx, ty); if (pItem != NULL) { storage = STORAGE_INVENTORY; x = tx; y = ty; return pItem; } // 扁绢芒 八祸 if (pCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); for (int i=0; i<Slayer::WEAR_MAX; i++) { pItem = pSlayer->getWearItem((Slayer::WearPart)i); if (pItem != NULL && pItem->getItemID() == id && pItem->getItemClass() == IClass) { storage = STORAGE_GEAR; x = i; return pItem; } } } else if (pCreature->isVampire()) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); for (int i=0; i<Vampire::VAMPIRE_WEAR_MAX; i++) { pItem = pVampire->getWearItem((Vampire::WearPart)i); if (pItem != NULL && pItem->getItemID() == id && pItem->getItemClass() == IClass) { storage = STORAGE_GEAR; x = i; return pItem; } } } else if (pCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); for (int i=0; i<Ousters::OUSTERS_WEAR_MAX; i++) { pItem = pOusters->getWearItem((Ousters::WearPart)i); if (pItem != NULL && pItem->getItemID() == id && pItem->getItemClass() == IClass) { storage = STORAGE_GEAR; x = i; return pItem; } } } // 付快胶 八祸 pItem = pPC->getExtraInventorySlotItem(); if (pItem != NULL && pItem->getItemID() == id && pItem->getItemClass() == IClass) { storage = STORAGE_EXTRASLOT; return pItem; } // 焊包窃 八祸 for (int r=0; r<STASH_RACK_MAX; r++) { for (int i=0; i<STASH_INDEX_MAX; i++) { pItem = pStash->get(r, i); if (pItem != NULL && pItem->getItemID() == id && pItem->getItemClass() == IClass) { storage = STORAGE_STASH; x = r; y = i; return pItem; } } } return NULL; __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 版氰摹 拌魂窍扁// 轨颇捞绢啊 绢恫 农府媚甫 软趋窍芭唱, 磷看阑 版快俊 棵扼啊绰 版氰摹甫 // 拌魂窍绰 窃荐////////////////////////////////////////////////////////////////////////////////int computeCreatureExp(Creature* pCreature, int percent, Ousters* pOusters) throw(){ __BEGIN_TRY Assert(pCreature != NULL); Assert(percent >= 0 && percent <= 100); int exp = 0; if (pCreature->isSlayer()) { // 父距 KILL_AFTERMATH啊 嘿篮 惑怕俊辑 促矫 磷绰促芭唱, // AFTERMATH啊 嘿篮 惑炔俊辑 促矫 软趋捞 登绰 版快俊绰 版氰摹甫 罐瘤 臼绰促. if ((pCreature->isFlag(Effect::EFFECT_CLASS_KILL_AFTERMATH) == true && percent != BLOODDRAIN_EXP) || (pCreature->isFlag(Effect::EFFECT_CLASS_AFTERMATH) == true && percent == BLOODDRAIN_EXP)) { exp = 0; } else { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); exp += pSlayer->getSTR(ATTR_BASIC); exp += pSlayer->getDEX(ATTR_BASIC); exp += pSlayer->getINT(ATTR_BASIC); } // 父距 浇饭捞绢甫 软趋茄 版快俊绰 BLOODDRAIN苞 KILL狼 exp甫 背券茄促. if (g_pCombatInfoManager->isCombat()) { if ( percent == BLOODDRAIN_EXP) percent = KILL_EXP; else if ( percent == KILL_EXP) percent = BLOODDRAIN_EXP; } } else if (pCreature->isVampire()) { if ( pCreature->isFlag(Effect::EFFECT_CLASS_KILL_AFTERMATH ) ) exp = 0; else if ( pOusters != NULL ) { Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); exp += pVampire->getSTR(ATTR_MAX); exp += pVampire->getDEX(ATTR_MAX); exp += pVampire->getINT(ATTR_MAX); } } else if (pCreature->isOusters()) { // 父距 KILL_AFTERMATH啊 嘿篮 惑怕俊辑 促矫 磷绰促芭唱, // AFTERMATH啊 嘿篮 惑炔俊辑 促矫 软趋捞 登绰 版快俊绰 版氰摹甫 罐瘤 臼绰促. if ((pCreature->isFlag(Effect::EFFECT_CLASS_KILL_AFTERMATH) == true && percent == KILL_EXP) || (pCreature->isFlag(Effect::EFFECT_CLASS_AFTERMATH) == true && percent == BLOODDRAIN_EXP) || pOusters != NULL ) { exp = 0; } else { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); exp += pOusters->getSTR(ATTR_BASIC); exp += pOusters->getDEX(ATTR_BASIC); exp += pOusters->getINT(ATTR_BASIC); } } else if (pCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); if ( pMonster->getMonsterType() == GROUND_ELEMENTAL_TYPE ) { return 0; } // 酒快胶磐胶绰 蝶肺 贸府秦霖促. 快窍窍..ぱぱ; if ( pOusters != NULL ) { return getPercentValue((int)( pMonster->getOustersExp( pOusters ) ), g_pVariableManager->getVariable( MONSTER_EXP_RATIO ) ); } exp += pMonster->getSTR(); exp += pMonster->getDEX(); exp += pMonster->getINT(); exp = (int)(exp * (0.75 + (double)(pMonster->getLevel()/200.0))); // 5岿 15老 捞亥飘 阁胶磐绰 软趋阑 寸窍瘤 臼栏骨肺 磷菌阑锭 傈何 焊惑茄促. MonsterType_t MonsterType = pMonster->getMonsterType(); if(MonsterType == 358 || MonsterType == 359) exp = 1144; else if(MonsterType==360 || MonsterType==361) exp = 1076; //cout << pMonster->getName() << " exp = " << exp << " percent=" << percent << endl; // Enhance 鞘靛俊 狼茄 函拳 版氰摹甫 拌魂秦 霖促. /* const MonsterInfo* pMonsterInfo = g_pMonsterInfoManager->getMonsterInfo(pMonster->getMonsterType()); int HPBoost = pMonsterInfo->getEnhanceHP(); int ToHitBoost = pMonsterInfo->getEnhanceToHit(); int DefenseBoost = pMonsterInfo->getEnhanceDefense(); int ProtectionBoost = pMonsterInfo->getEnhanceProtection(); int DamageBoost = pMonsterInfo->getEnhanceDamage(); int bonusPercent = (int)(HPBoost*0.4 + ToHitBoost*0.2 + DefenseBoost*0.4 + ProtectionBoost*0.3 + DamageBoost*0.5); exp += getPercentValue(exp, bonusPercent); */ } else Assert(false); // 瓷仿摹 焊惑阑 困茄 内靛... //exp = (int)((float)exp * 1.5); exp = getPercentValue(exp, percent); exp = getPercentValue(exp, g_pVariableManager->getVariable( MONSTER_EXP_RATIO ) ); return exp; __END_CATCH}////////////////////////////////////////////////////////////////////////////////// computeCreatureExp客 鞍篮单 AFTERMATH 锭巩俊 // 软趋且锭 HP 棵扼啊绰芭父 蝶肺 拌魂茄促. 吝汗 内靛.. -_-; by sigi. 2002.11.19////////////////////////////////////////////////////////////////////////////////int computeBloodDrainHealPoint(Creature* pCreature, int percent) throw(){ __BEGIN_TRY Assert(pCreature != NULL); Assert(percent >= 0 && percent <= 100); int exp = 0; if (pCreature->isSlayer()) { Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature); exp += pSlayer->getSTR(ATTR_BASIC); exp += pSlayer->getDEX(ATTR_BASIC); exp += pSlayer->getINT(ATTR_BASIC); // 父距 浇饭捞绢甫 软趋茄 版快俊绰 BLOODDRAIN苞 KILL狼 exp甫 背券茄促. if (g_pCombatInfoManager->isCombat()) { if ( percent == BLOODDRAIN_EXP) percent = KILL_EXP; else if ( percent == KILL_EXP) percent = BLOODDRAIN_EXP; } } else if (pCreature->isVampire()) { /* Vampire* pVampire = dynamic_cast<Vampire*>(pCreature); exp += pVampire->getSTR(ATTR_MAX); exp += pVampire->getDEX(ATTR_MAX); exp += pVampire->getINT(ATTR_MAX); */ } else if (pCreature->isOusters()) { Ousters* pOusters = dynamic_cast<Ousters*>(pCreature); exp += pOusters->getSTR(ATTR_BASIC); exp += pOusters->getDEX(ATTR_BASIC); exp += pOusters->getINT(ATTR_BASIC); } else if (pCreature->isMonster()) { Monster* pMonster = dynamic_cast<Monster*>(pCreature); exp += pMonster->getSTR(); exp += pMonster->getDEX(); exp += pMonster->getINT(); exp = (int)(exp * (0.75 + (double)(pMonster->getLevel()/200.0))); // 5岿 15老 捞亥飘 阁胶磐绰 软趋阑 寸窍瘤 臼栏骨肺 磷菌阑锭 傈何 焊惑茄促. MonsterType_t MonsterType = pMonster->getMonsterType(); if(MonsterType == 358 || MonsterType == 359) exp = 1144; else if(MonsterType==360 || MonsterType==361) exp = 1076; //cout << pMonster->getName() << " exp = " << exp << " percent=" << percent << endl; // Enhance 鞘靛俊 狼茄 函拳 版氰摹甫 拌魂秦 霖促. /* const MonsterInfo* pMonsterInfo = g_pMonsterInfoManager->getMonsterInfo(pMonster->getMonsterType()); int HPBoost = pMonsterInfo->getEnhanceHP(); int ToHitBoost = pMonsterInfo->getEnhanceToHit(); int DefenseBoost = pMonsterInfo->getEnhanceDefense(); int ProtectionBoost = pMonsterInfo->getEnhanceProtection(); int DamageBoost = pMonsterInfo->getEnhanceDamage(); int bonusPercent = (int)(HPBoost*0.4 + ToHitBoost*0.2 + DefenseBoost*0.4 + ProtectionBoost*0.3 + DamageBoost*0.5); exp += getPercentValue(exp, bonusPercent); */ } else Assert(false); // 瓷仿摹 焊惑阑 困茄 内靛... //exp = (int)((float)exp * 1.5); exp = getPercentValue(exp, percent); return exp; __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 捞亥飘侩 各牢瘤 八荤窍扁...////////////////////////////////////////////////////////////////////////////////bool isEventMonster(Creature* pCreature) throw(){ __BEGIN_TRY Assert(pCreature != NULL); if (!pCreature->isMonster()) return false; Monster* pMonster = dynamic_cast<Monster*>(pCreature); switch (pMonster->getMonsterType()) { case 358: case 359: case 360: case 361: return true; default: break; } return false; __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 烙狼狼 农府媚啊 泅犁 框流老 荐 乐绰 惑怕牢啊甫 八荤窍绰 窃荐////////////////////////////////////////////////////////////////////////////////bool isAbleToMove(Creature* pCreature){ Assert(pCreature != NULL); // 窍捞靛 吧赴 惑怕扼搁... if (pCreature->isFlag(Effect::EFFECT_CLASS_HIDE)) { if (pCreature->isVampire()) return false; // 阁胶磐绰 窍捞靛 惑怕俊辑档 框流捞绰 巴捞 啊瓷窍扁 锭巩俊... //if (pCreature->isMonster()) return false; if (pCreature->isSlayer()) return false; } // 泅犁 磷绢乐绰 惑怕扼搁... if (pCreature->isFlag(Effect::EFFECT_CLASS_COMA) || pCreature->isDead() // 泅犁 付厚俊 吧妨乐促搁... || pCreature->isFlag(Effect::EFFECT_CLASS_PARALYZE) || pCreature->isFlag(Effect::EFFECT_CLASS_ETERNITY_PAUSE)// || pCreature->isFlag(Effect::EFFECT_CLASS_SANCTUARY) || pCreature->isFlag(Effect::EFFECT_CLASS_CASKET) // 泅犁 Cause Critical Wounds俊 吧妨乐促搁 || pCreature->isFlag(Effect::EFFECT_CLASS_CAUSE_CRITICAL_WOUNDS) || pCreature->isFlag(Effect::EFFECT_CLASS_SOUL_CHAIN) || pCreature->isFlag(Effect::EFFECT_CLASS_LOVE_CHAIN) || pCreature->isFlag(Effect::EFFECT_CLASS_GUN_SHOT_GUIDANCE_AIM) || pCreature->isFlag(Effect::EFFECT_CLASS_SLEEP) // 2003.1.2 by Sequoia || pCreature->isFlag(Effect::EFFECT_CLASS_ARMAGEDDON) // 2003.3.31 by Sequoia || pCreature->isFlag(Effect::EFFECT_CLASS_POISON_MESH) || pCreature->isFlag(Effect::EFFECT_CLASS_TENDRIL) || pCreature->isFlag(Effect::EFFECT_CLASS_TRAPPED) || pCreature->isFlag(Effect::EFFECT_CLASS_EXPLOSION_WATER) ) return false; return true;}////////////////////////////////////////////////////////////////////////////////// 烙狼狼 农府媚啊 泅犁 扁贱阑 荤侩且 荐 乐绰 惑怕牢啊甫 八荤窍绰 窃荐////////////////////////////////////////////////////////////////////////////////bool isAbleToUseSelfSkill(Creature* pCreature, SkillType_t SkillType){ Assert(pCreature != NULL); // 窍捞靛 吧赴 惑怕俊辑绰 扁贱阑 荤侩且 荐 绝促. // 磷篮 惑怕俊辑绰 Eternity 寇狼扁贱阑 荤侩且 荐 绝促. // 泅犁 捧疙拳登绊 乐绰 惑怕俊辑绰 扁贱阑 荤侩且 荐 绝促. // 付厚 惑怕俊辑绰 扁贱阑 荤侩且 荐 绝促. // 冠零 惑抛局辑绰 扁贱阑 荤侩且 荐 绝促. // Cause Critical Wounds俊 吧妨乐促搁 扁贱阑 荤侩且 荐 绝促. if ((pCreature->isDead() || pCreature->isFlag(Effect::EFFECT_CLASS_COMA)) && SkillType != SKILL_ETERNITY ) return false; if (pCreature->isFlag(Effect::EFFECT_CLASS_HIDE) || pCreature->isFlag(Effect::EFFECT_CLASS_FADE_OUT) || pCreature->isFlag(Effect::EFFECT_CLASS_PARALYZE) || pCreature->isFlag(Effect::EFFECT_CLASS_ETERNITY_PAUSE) || pCreature->isFlag(Effect::EFFECT_CLASS_CAUSE_CRITICAL_WOUNDS) || pCreature->isFlag(Effect::EFFECT_CLASS_SOUL_CHAIN) || pCreature->isFlag(Effect::EFFECT_CLASS_LOVE_CHAIN) || pCreature->isFlag(Effect::EFFECT_CLASS_GUN_SHOT_GUIDANCE_AIM) || pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT) && SkillType != SKILL_UN_TRANSFORM || pCreature->isFlag(Effect::EFFECT_CLASS_SLEEP) || pCreature->isFlag(Effect::EFFECT_CLASS_ARMAGEDDON) || pCreature->isFlag(Effect::EFFECT_CLASS_TENDRIL) || pCreature->isFlag(Effect::EFFECT_CLASS_BLOCK_HEAD) || pCreature->isFlag(Effect::EFFECT_CLASS_REFINIUM_TICKET) || pCreature->isFlag(Effect::EFFECT_CLASS_TRAPPED) || pCreature->isFlag(Effect::EFFECT_CLASS_EXPLOSION_WATER) ) { return false; } if (pCreature->isFlag(Effect::EFFECT_CLASS_CASKET) && SkillType!=SKILL_OPEN_CASKET) { return false; } // 戳措 惑抛局辑绰 匡扁唱 矫眉 冈扁 寇俊绰 胶懦阑 荤侩且 荐 绝促. if (pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WOLF)) { if (SkillType != SKILL_HOWL && SkillType != SKILL_EAT_CORPSE && SkillType != SKILL_UN_TRANSFORM) { return false; } } if (pCreature->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_WERWOLF)) { if (SkillType != SKILL_BITE_OF_DEATH && SkillType != SKILL_UN_TRANSFORM && SkillType != SKILL_RAPID_GLIDING ) { return false; } } // 角橇 鸥绊 乐阑订 攫飘罚胶汽观俊 荤侩且 荐 绝促.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -