[Trinity Only] PVP-ért XP mostmár 3.3.5a-ra is

Indította Chaze117, 2010 július 31, 02:43:47 DÉLELŐTT

Előző téma - Következő téma

Chaze117

A scriptet én csináltam a worldserver.conf támogatásban BlueRák segített

I. Lépés
A world.h-ban keressük meg ezt a két sort kb a 380 körül van

RATE_MOVESPEED,
MAX_RATES,


Majd szúrjuk be a következő kettőt ahogy itt látjátok:

RATE_MOVESPEED,
MAX_RATES,
CONFIG_XP_FOR_PVP_LOW_RATE,
CONFIG_XP_FOR_PVP_HIGH_RATE


II. Lépés.
A world.cpp-ben keressük meg ezt a sort kb 1156 körül.
m_int_configs[CONFIG_MAX_RESULTS_LOOKUP_COMMANDS] = sConfig->GetIntDefault("Command.LookupMaxResults", 0);

Szúrjuk be ezt a 3 sort utána:

// custom
rate_values[CONFIG_XP_FOR_PVP_LOW_RATE]     = sConfig->GetFloatDefault("Xp.For.Pvp.Low.Rate", 1.0f);
rate_values[CONFIG_XP_FOR_PVP_HIGH_RATE]     = sConfig->GetFloatDefault("Xp.For.Pvp.High.Rate", 1.0f);


III. Lépés.
Keressük meg a következő sort a ScriptMgr.h-ban pontosan a 656. sor
virtual void OnPVPKill(Player* /*killer*/, Player* /*killed*/) { }

Cseréljük ki erre:
virtual void OnPVPKill(Player* killer, Player* killed)
{
uint32 LowRate = sWorld->getRate(CONFIG_XP_FOR_PVP_LOW_RATE);
uint32 HighRate = sWorld->getRate(CONFIG_XP_FOR_PVP_HIGH_RATE);
uint32 killerlvl = killer->getLevel();
uint32 killedlvl = killed->getLevel();
int32 diff = killerlvl-killedlvl;
uint32 XPLow = (killedlvl*5+45)*(1+0.05*diff)*LowRate;
uint32 XPHigh = (killedlvl*5+45)*(1+0.05*diff)*HighRate;
uint32 minusgold = killer->GetMoney()-(diff*10000);
uint32 plusgold = killed->GetMoney()+(diff*10000);
uint32 killergold = killer->GetMoney();
uint32 killedgold = killed->GetMoney();
uint32 plusgold2= killedgold+killergold;

if (killerlvl < killedlvl +1)
killer->GiveXP(XPHigh , killed);
else
if (diff > 10)
if (killergold > minusgold)
{
killer->SetMoney(minusgold);
killed->SetMoney(plusgold);
}
else
{
killed->SetMoney(plusgold2);
killer->SetMoney(0);
}
else
if(0  < diff && diff <10)
killer->GiveXP(XPLow , killed);
return;

}


IV. Lépés.
A worldserver.confban keressük meg azokat a sorokar ahol a rete szorzók vannak és illesszük be ezt a kettőt.

Xp.For.Pvp.Low.Rate = X
Xp.For.Pvp.High.Rate = X


Az X a szorzót jelenti tetszés szerint lehet megadni.

Működése röviden:
Ha nagyobb karakter öl kisebbet akkor a confban megadott Low.Rate szorzó szerinti XP-t kap
- ha nagyobb a szint különbség mint 10 akkor a szintkülönpségnek megfelelő gold levonódik és a megölt karakter kapja meg
- viszont ha a karakternek nincs annyi goldja mint a szintkülönbség akkor 0 pénze lesz és amennyi volt azt megkapja a megölt karakter
- Ha kisebb karakter öl nagyobbat akkor a confban megadott High.Rate szorzó szerinti XP-t kap


Dusi124

Nekem annyi problémám akadt vele, hogy nem tudom, hogy hova rakjam be ezt:
Idéz//This function is called when the player kills another player
void OnPVPKill(Player * /*killer*/, Player * /*killed*/)
{

}
Új trinity-m van és nincs a "Scripting" mappába olyan, hogy "Custom".
A kérdésem az lenne, hogy hova rakjam a scriptet?
(Próbáltam utánanézni google-ön, de nem jártam sok sikerrel.)

$0undX

Az új trinityből kivették a file-t és a hook-ot is. Most már nem tudod használni.

Dusi124

Köszönöm a gyors választ!
Nem lehet valahogy megoldani, hogy mégis működjön?

$0undX

Talán máshol megvannak még ezek a hookok, keress rá a teljes "solution"-ban a függvény nevére, hátha dob valamit, ha nem akkor kérdezz rá tc fórumon.  :)

ident

#6
        // handle npc/player kill
        virtual void HandleKill(Player * killer, Unit * killed);
        virtual void HandleKillImpl(Player * /*killer*/, Unit * /*killed*/) {}


\trinitycore\src\server\game\OutdoorPvP\OutdoorPvP.h

Tal
Fhatys, a sors által kirótt, elkerülhetetlen feladat szava.
http://eu.battle.net/wow/en/character/arathor/Ident/advanced

Chaze117

#7
// handle npc/player kill
       virtual void HandleKill(Player * killer, Unit * killed);

szerintem ez lesz az
Jah és ha sikerül összehozni akkor a régebbi emukhoz és az újakhoz is akkor hozzájárulok vele a Gnome-Lak gyűjteményéhez :) Sőt bármivel ami megtetszik és hasznos.

Action

Idézetet írta: Chaze117 Dátum 2010 október 25, 03:08:37 DÉLUTÁN
// handle npc/player kill
       virtual void HandleKill(Player * killer, Unit * killed);

szerintem ez lesz az
Jah és ha sikerül összehozni akkor a régebbi emukhoz és az újakhoz is akkor hozzájárulok vele a Gnome-Lak gyűjteményéhez :) Sőt bármivel ami megtetszik és hasznos.

Regisztrálj be, és küld be ha úgy döntöttél, hogy megosztod velünk. :)
A WORD elszáll, az írás megmarad.


Bluerák


MacBook Pro 13' 2.26 GHZ, 4 GB RAM - White
iPhone 4S 16GB - Black
iPad 3 - Black

NEW PC:
Asus EAH6670 (1GB 128 bit)
AMD FX AM3+ (4x3.8GHZ)
ASRock 970 EXTREME3
8GB RAM

Locutus

Üdvözletem!
Elolvastam csak most nem fogtam fel hogy ha nekem http://infobarkacs.hu/index.php/topic,5710.0.html amit itt írnak az új verziója van meg nekem akkor mit kéne csinálnom hogy mennyen??????Vagy pont ezt írtátok hogy ezt nem lehet megcsinálni vagy van rá valami megoldás??
Előre is köszönöm
Üdv Locu

Chaze117

De megoldható épp frissítve lett a topic szal azt tedd ami le van írva :)

Insomnia

Hát "nagyon szép a kód" xd virtuál tipust deklarálni.. Ne vedd piszkálódásnak, csak szúrja a szemem : )

Bluerák

Idézetet írta: Insomnia Dátum 2012 május 28, 05:12:52 DÉLUTÁN
Hát "nagyon szép a kód" xd virtuál tipust deklarálni.. Ne vedd piszkálódásnak, csak szúrja a szemem : )
Nem értelek mi a gond ezzel.

Idéz
A virtuális függvények deklarálásának szintaktikája nagyon egyszerû: a függvénymezõ elsõ deklarálásakor helyezzük el a virtual típusmódosító szót is.

Látszik, hogy nem nagyon érted a dolgot. :)

MacBook Pro 13' 2.26 GHZ, 4 GB RAM - White
iPhone 4S 16GB - Black
iPad 3 - Black

NEW PC:
Asus EAH6670 (1GB 128 bit)
AMD FX AM3+ (4x3.8GHZ)
ASRock 970 EXTREME3
8GB RAM

Powered by EzPortal