Salut

Problema: în tooltip la item apar bonusurile ca UNKNOWN_TYPE[95] și UNKNOWN_TYPE[96], în loc să apară textul „Tare împotriva metinelor” / „Tare împotriva bossilor”.
Cauza
Clientul tău nu știe cum să afișeze bonusurile noi pe care le-ai adăugat în sursă.
Pe server ele există (funcționează numeric), dar în client lipsesc definițiile pentru tipurile 95 și 96.
Soluție
Trebuie să sincronizezi clientul cu serverul, adăugând noile tipuri de bonus în fișierele clientului:
1. În locale/ro/locale_game.txt (sau locale_string.txt în funcție de client)
Adaugă liniile:
95 Tare împotriva metinelor
96 Tare împotriva șefilor (
bossilor)
2. În uitooltip.py sau localeInfo.py (în client, în Python)
Caută lista unde sunt definite bonusurile (de obicei ceva ca AFFECT_DICT sau BONUS_NAMES).
Adaugă:
"AFFECT_DICT" : {
...
95 : "Tare împotriva metinelor",
96 : "Tare împotriva șefilor (bossilor)",
}
sau, dacă sunt în BONUSNAMES, atunci:
BONUSNAMES = {
...
95 : "Tare împotriva metinelor",
96 : "Tare împotriva șefilor (bossilor)",
}
3. Recompilează / repachetează clientul
Dacă fișierele sunt în arhiva root.epk/eix, extrage-le cu EterNexus (sau ce folosești), editează-le și împachetează-le la loc.
Observ ca ai rezolvat aceasta parte, pentru aplicarea bonusuriolor fa urmatoarele verificari/modificari
Cauza
Ai adăugat bonusurile în proto + client, dar în sursa serverului nu există codul care:
recunoaște bonusurile APPLY_ATTBONUS_METIN și APPLY_ATTBONUS_BOSS (95 și 96),
și le aplică la damage în funcție de tipul mobului (metin sau
boss).
Soluția (partea de sursă server)
Trebuie să modifici fișierele din game/src:
1. char_battle.cpp (sau battle.cpp în unele surse)
Aici se calculează damage-ul. Vei găsi funcții precum CalcAttackDamage sau ComputeBattleDamage.
Caută partea unde se aplică bonusurile, de obicei ceva ca:
iAtk += iAtk * (GetPoint(POINT_ATTBONUS_MONSTER) / 100);
Trebuie să adaugi:
// Bonus tare împotriva metinelor
if (pkVictim->IsStone())
iAtk += iAtk * GetPoint(POINT_ATTBONUS_METIN) / 100;
// Bonus tare împotriva bossilor
if (pkVictim->IsBoss())
iAtk += iAtk * GetPoint(POINT_ATTBONUS_BOSS) / 100;
2. char.h / char.cpp
Asigură-te că ai define-urile pentru noile puncte:
POINT_ATTBONUS_METIN,
POINT_ATTBONUS_BOSS,
Și în char.cpp, în constructor, inițializează-le la 0.
3. utils.h sau constants.cpp (în funcție de structură)
Adaugă în enum-ul cu bonusuri (de ex. EApplyTypes):
APPLY_ATTBONUS_METIN = 95,
APPLY_ATTBONUS_BOSS = 96,
4.
mob.cpp / mob.h
Trebuie să existe metode pentru a recunoaște boss/metin.
Dacă nu există, adaugă:
bool CHARACTER::IsBoss() const {
return (GetMobTable().rank == MOB_RANK_BOSS || GetMobTable().rank == MOB_RANK_KING);
}
bool CHARACTER::IsStone() const {
return GetMobTable().rank == MOB_RANK_STONE;
}
După recompilare
Recompilează game și db.
Pune noul binar pe server.
Testează un item cu bonus +20% și verifică damage-ul față de boss/metin.
Spor !!