This script made for TC2 by me.
The new revs bring so many changes, I rewrote the script and make support for rates in worldserver.conf.
Step I.
In World.h find this about line 380:
Code:
RATE_MOVESPEED,
MAX_RATES,
Change like this:
Code:
RATE_MOVESPEED,
MAX_RATES,
CONFIG_XP_FOR_PVP_LOW_RATE,
CONFIG_XP_FOR_PVP_HIGH_RATE
Step II.
In world.cpp find this about line 1156.
Code:
m_int_configs[CONFIG_MAX_RESULTS_LOOKUP_COMMANDS] = sConfig->GetIntDefault("Command.LookupMaxResults", 0);
Put theese lines:
Code:
// 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);
Step III.
Find this line in ScriptMgr.h about line 656
Code:
virtual void OnPVPKill(Player* /*killer*/, Player* /*killed*/) { }
Change to this
Code:
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;
}
Step IV.
In wordserver.conf find the rates lines an put theese lines
Code:
Xp.For.Pvp.Low.Rate = X
Xp.For.Pvp.High.Rate = X
X means number.
I don't write down again how it works, if anybody try this pls write down
Bye, enjoy