int CChar::NPC_GetWeaponUseScore( CItem * pWeapon ) { ADDTOCALLSTACK("CChar::NPC_GetWeaponUseScore"); // How good would i be at this weapon ? SKILL_TYPE skill; if ( !pWeapon ) skill = SKILL_WRESTLING; else { // Is it a weapon ? skill = pWeapon->Weapon_GetSkill(); if ( skill == SKILL_WRESTLING ) return( 0 ); // I can't equip this anyhow. if ( CanEquipLayer( pWeapon, LAYER_QTY, NULL, true ) == LAYER_NONE ) return( 0 ); // How much damage could i do with this ? } int iDmg = Fight_CalcDamage( pWeapon ); int iSkillLevel = Skill_GetAdjusted( skill ); return( iSkillLevel + iDmg * 50 ); }
bool CChar::ItemEquipArmor( bool fForce ) { ADDTOCALLSTACK("CChar::ItemEquipArmor"); // Equip ourselves as best as possible. CCharBase *pCharDef = Char_GetDef(); CItemContainer *pPack = GetPack(); if ( !pPack || !pCharDef || !pCharDef->Can(CAN_C_EQUIP) ) return false; int iBestScore[LAYER_HORSE]; memset(iBestScore, 0, sizeof(iBestScore)); CItem *pBestArmor[LAYER_HORSE]; memset(pBestArmor, 0, sizeof(pBestArmor)); if ( !fForce ) { // Block those layers that are already used for ( size_t i = 0; i < COUNTOF(iBestScore); i++ ) { pBestArmor[i] = LayerFind(static_cast<LAYER_TYPE>(i)); if ( pBestArmor[i] != NULL ) iBestScore[i] = INT_MAX; } } for ( CItem *pItem = pPack->GetContentHead(); pItem != NULL; pItem = pItem->GetNext() ) { int iScore = pItem->Armor_GetDefense(); if ( !iScore ) // might not be armor continue; // Can I even equip this? LAYER_TYPE layer = CanEquipLayer(pItem, LAYER_QTY, NULL, true); if ( layer == LAYER_NONE ) continue; if ( iScore > iBestScore[layer] ) { iBestScore[layer] = iScore; pBestArmor[layer] = pItem; } } // Equip all the stuff we found for ( size_t i = 0; i < COUNTOF(iBestScore); i++ ) { if ( pBestArmor[i] ) ItemEquip(pBestArmor[i], this); } return true; }
int CChar::NPC_GetWeaponUseScore(CItem *pWeapon) { ADDTOCALLSTACK("CChar::NPC_GetWeaponUseScore"); // How good would i be at this weapon ? SKILL_TYPE skill = SKILL_WRESTLING; if ( pWeapon ) { skill = pWeapon->Weapon_GetSkill(); if ( skill == SKILL_WRESTLING ) return 0; if ( CanEquipLayer(pWeapon, LAYER_QTY, NULL, true) == LAYER_NONE ) // I can't equip this return 0; } return Skill_GetAdjusted(skill) + Fight_CalcDamage(pWeapon) * 50; }