[C++] Több mount bónusz egyszerre

Indította Distraught, 2017-08-01, 15:21:40

2017-08-01, 15:21:40 Utolsó szerkesztés: 2018-07-14, 12:17:45 Szerző: Distraught
Sziasztok,
Sokatoknak feltűnhetett, hogy a pc.mount_bonus parancs használatával egyszerre egy bónuszt adhatunk csak a mountnak, ha egymás alá többet írunk, sajnos felülírják egymást.

Az alábbi módosítások segítségével megcsináljuk, hogy több bónuszt is adhassatok hozzá.

Game file forrásában nyisd meg az affect.h fájlt, majd keress rá:

AFFECT_MOUNT_BONUS

Alá:

AFFECT_MOUNT_BONUS_START = 543,
AFFECT_MOUNT_BONUS_END = 553,


Ezután megnyitod a questlua_pc.cpp fájlt, és rákeresel:

pc_mount_bonus


A függvényt lecseréled erre:

int pc_mount_bonus(lua_State* L)
{
if(!(lua_isnumber(L,1) && lua_isnumber(L,2) && lua_isnumber(L,3)))
return 0;
BYTE applyOn = static_cast<BYTE>(lua_tonumber(L, 1));
long value = static_cast<long>(lua_tonumber(L, 2));
long duration = static_cast<long>(lua_tonumber(L, 3));
int bonID = lua_isnumber(L,4) ? lua_tonumber(L, 4) : 0;

if(AFFECT_MOUNT_BONUS_START + bonID > AFFECT_MOUNT_BONUS_END)
return 0;

LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
if(!ch)
return 0;

if(ch->FindAffect(AFFECT_MOUNT_BONUS_START + bonID))
ch->RemoveAffect(AFFECT_MOUNT_BONUS_START + bonID);
ch->AddAffect(AFFECT_MOUNT_BONUS_START + bonID, aApplyInfo[applyOn].bPointType, value, AFF_NONE, duration, 0, false);

return 0;
}


Ezután a pc_mount függvényben megkeresed ezt a részt:

ch->RemoveAffect(AFFECT_MOUNT_BONUS);


Cseréld ki:

for(int i = AFFECT_MOUNT_BONUS_START;i <= AFFECT_MOUNT_BONUS_END; ++i)
if(ch->FindAffect(i))
ch->RemoveAffect(i);


Majd questben:
pc.mount_bonus(bónusz típus, érték, idő, sorszám)
A sorszám lehet 1...10, vagy ha átírod az AFFECT_MOUNT_BONUS_END-et nagyobbra, akkor nyilván nagyobb szám is (a START és END különbsége). Ha nem írtok sorszámot, akkor úgy fog működni, mint ezelőtt.
Pl ha 3 bónuszt akarnl hozzáadni:
pc.mount_bonus(apply.DEF_GRADE_BONUS,75,600,1)
pc.mount_bonus(apply.ATT_BONUS_TO_MONSTER,75,600,2)
pc.mount_bonus(apply.CRITICAL_PCT,75,600,3)

Remélem hasznotokra válik :*

C++ programmer at Gameloft