Mai jos aveti o protectie pentru pvp.
Atunci cand 2 persoane sunt in duel, acestea nu vor mai putea fi atacate de alti jucatori care se pun pe liber / din alte regate.
Este o masura care asigura buna desfasurare a duelului intre cei 2, fara sa existe discutii.
- Jucatorul aflat intr-un duel nu poate ataca jucatori din afara duelului – Daca atacatorul este intr-un duel, dar tinta nu este, atacul este blocat.
- Jucatorul care se da pe liber nu poate ataca un jucator aflat intr-un duel – Daca tinta este intr-un duel, dar atacatorul nu este, atacul este blocat.
- Jucatorii aflati in dueluri diferite nu se pot ataca intre ei – Daca ambii sunt in duel, dar au adversari diferiti, atacul este blocat.
- Jucatorii aflati in acelasi duel se pot lupta normal – Sistemul de duel functioneaza fara probleme.
*Link download / Code:
Adaugam in service.h:
Code:
#define ENABLE_DUEL_ATTACK_BLOCKDeschidem battle.cpp si cautam:
Code:
bool battle_is_attackable(LPCHARACTER ch, LPCHARACTER victim)
{
if (pkVictim->IsNPC() && pkChr->IsNPC() && !pkChr->IsGuardNPC())
return false;Deschidem char_battle.cpp si cautam:
Code:
bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)
{
if (!CanMove())
return false;Deschidem char_skill.cpp si cautam:
Code:
int CHARACTER::ComputeSkill(DWORD dwVnum, LPCHARACTER pkVictim, BYTE bSkillLevel)
{
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
pkVictim = this;
if (!pkVictim)
{
if (test_server)
sys_log(0, "ComputeSkill: %s Victim == null, skill %d", GetName(), dwVnum);
return BATTLE_NONE;
}Cautam:
Code:
struct FuncSplashDamage
{
FuncSplashDamage(int x, int y, CSkillProto * pkSk, LPCHARACTER pkChr, int iAmount, int iAG, int iMaxHit, LPITEM pkWeapon, bool bDisableCooltime, TSkillUseInfo* pInfo, BYTE bUseSkillPower)
:
m_x(x), m_y(y), m_pkSk(pkSk), m_pkChr(pkChr), m_iAmount(iAmount), m_iAG(iAG), m_iCount(0), m_iMaxHit(iMaxHit), m_pkWeapon(pkWeapon), m_bDisableCooltime(bDisableCooltime), m_pInfo(pInfo), m_bUseSkillPower(bUseSkillPower)
{
}
void operator () (LPENTITY ent)
{
if (!ent->IsType(ENTITY_CHARACTER))
{
//if (m_pkSk->dwVnum == SKILL_CHAIN) sys_log(0, "CHAIN target not character %s", m_pkChr->GetName());
return;
}
LPCHARACTER pkChrVictim = (LPCHARACTER) ent;Adaugam:
Deschidem pvp.cpp si cautam:
Code:
bool CPVPManager::CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim)
{
switch (pkVictim->GetCharType())
{
case CHAR_TYPE_NPC:
case CHAR_TYPE_WARP:
case CHAR_TYPE_GOTO:
return false;
}
if (pkChr == pkVictim)
return false;
if (pkVictim->IsNPC() && pkChr->IsNPC() && !pkChr->IsGuardNPC())
return false;

la acest mesaj și conținutul se va afișa automat.

