Najlepszym pomysłem jaki przychodzi mi do głowy to powsadzanie tych warunków do skryptu który wylicza zadawane obrażenia. Ma to też taką zaletę, że poza możliwością napisania własnych formuł obrażeń (np. nie proste obrażenia + siła - obrona tylko cokolwiek innego), możesz zrobić nabijanie statystyk tak jak to było np. w Returningu na Slash&Craft, czyli nie np. + 1 walki bronią po uderzeniu 50 razy, co można bardzo łatwo nadużywać, a np. + 1 do walki bronią po zadaniu nią określonej ilości obrażeń (i co poziom zwiększać wymagany próg tak jak jest to dla expa i lvla).
Potrzebny Ikarus i LeGo.
Podstawowy temat do zapoznania:
https://themodders.org/index.php?topic=23935.0
Wtedy do funkcji "DMG_OnDmg", zaraz przed "return dmg;" raczej wystarczyłoby wstawić to:
var c_item c_item_Weapon_Attack_Count_Damage; c_item_Weapon_Attack_Count_Damage = Npc_GetReadiedWeapon(attackerNpc);
var oCItem Weapon_Attack_Count_Damage; Weapon_Attack_Count_Damage = _^(MEM_InstToPtr(c_item_Weapon_Attack_Count_Damage));
if ((Hlp_GetInstanceID(attackerNpc) == Hlp_GetInstanceID(hero))
&& (victimNpc.aivar[AIV_VictoryXPGiven] == FALSE)) // <- żeby na raz pobitym NPC nie dało się farmić statystyk w nieskończoność.
{
if (dmg > 0)
{
if (Npc_IsInFightMode (hero, FMODE_MELEE))
{
attackerNpc.aivar[97] += 1;
}
else if (Npc_IsInFightMode (hero, FMODE_FAR))
{
attackerNpc.aivar[98] += 1;
}
else if (Npc_IsInFightMode (hero, FMODE_MAGIC))
{
attackerNpc.aivar[99] += 1;
};
};
if (attackerNpc.aivar[97] == 50)
{
if (Weapon_Attack_Count_Damage.flags & (ITEM_SWD | ITEM_AXE))
{
attackerNpc.hitChance[NPC_TALENT_1H] += 1;
attackerNpc.aivar[97] = 0;
}
else if (Weapon_Attack_Count_Damage.flags & (ITEM_2HD_SWD | ITEM_2HD_AXE))
{
attackerNpc.hitChance[NPC_TALENT_2H] += 1;
attackerNpc.aivar[97] = 0;
};
};
if (attackerNpc.aivar[98] == 50)
{
if (Weapon_Attack_Count_Damage.flags & (ITEM_BOW))
{
attackerNpc.hitChance[NPC_TALENT_BOW] += 1;
attackerNpc.aivar[98] = 0;
}
else if (Weapon_Attack_Count_Damage.flags & (ITEM_CROSSBOW))
{
attackerNpc.hitChance[NPC_TALENT_CROSSBOW] += 1;
attackerNpc.aivar[98] = 0;
};
};
};
Jeśli nie zależy ci na tym, żeby ilość zadanych uderzeń była przypisana do konkretnego NPC (czyli np. uderzenie kogoś 49 razy będąc PC_HERO a potem wcielenie się na marvinie przez "O" w innego NPC i uderzenie kogoś raz nie dałoby ci + 1 do walki, bo PC_HERO uderzył 49 razy a inny NPC 1 raz), to zamiast wstawionych przeze mnie aivarów możesz użyć zmiennych.
To dawałoby ci opisywany przez ciebie efekt. Rzecz jasna to co opisałeś to mega prosta wersja nabijania statystyk przez walkę, więc polecam się w to bardziej zagłębić i pokombinować chociażby z naliczaniem statystyk po zadaniu określonej ilości obrażeń, a nie od uderzeń.