Sziasztok, leírom, hogy tudjátok megcsinálni azt, hogy ha csoportban egy játékost buffoltok, akkor egyszerre mindet buffolja, és ne kelljen külön mindenkit!
skill.h
Keress rá erre:
SKILL_FLAG_FIRE = (1 << 26),
Add alá ezt:
SKILL_FLAG_PARTY = (1 << 27),
char_skill.cpp
Keress rá erre:
SKILL_RESIST_PENETRATE
};
Add alá ezt:
struct FPartyPIDCollector
{
std::vector <DWORD> vecPIDs;
FPartyPIDCollector()
{
}
void operator () (LPCHARACTER ch)
{
vecPIDs.push_back(ch->GetPlayerID());
}
};
Keress rá erre:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
pkVictim = this;
Add alá ezt:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim)
pkVictim = this;
Keress rá erre:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
pkVictim = this;
Add alá ezt:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty())
pkVictim = this;
Keress rá erre:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
ComputeSkill(dwVnum, this);
else if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK))
ComputeSkill(dwVnum, pkVictim);
else if (dwVnum == SKILL_BYEURAK)
ComputeSkill(dwVnum, pkVictim);
else if (dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill())
ComputeSkill(dwVnum, pkVictim);
m_dwLastSkillTime = get_dword_time();
return true;
}
Az egészet cseréld le erre:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
ComputeSkill(dwVnum, this);
else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim)
ComputeSkill(dwVnum, this);
else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && GetParty())
{
FPartyPIDCollector f;
GetParty()->ForEachOnMapMember(f, GetMapIndex());
for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++)
{
LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);
ComputeSkill(dwVnum, ch);
}
}
else if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK))
ComputeSkill(dwVnum, pkVictim);
else if (dwVnum == SKILL_BYEURAK)
ComputeSkill(dwVnum, pkVictim);
else if (dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill())
ComputeSkill(dwVnum, pkVictim);
m_dwLastSkillTime = get_dword_time();
return true;
}
guild.cpp
Keress rá erre:
if ((pkSk->dwFlag & SKILL_FLAG_SELFONLY))
{
// 이미 걸려 있으므로 사용하지 않음.
if (ch->FindAffect(pkSk->dwVnum))
return;
victim = ch;
}
Add alá ezt:
if ((pkSk->dwFlag & SKILL_FLAG_PARTY))
{
if (ch->FindAffect(pkSk->dwVnum))
return;
victim = ch;
}
Forrás résszel készen is lennénk!
Nyisd meg navicatet, Player => skill_proto => Design Table.
setFlag=> Values => Add hozzá az új sorokat: WIND , ELEC , FIRE , PARTY
Így nézzen ki:
'ATTACK','USE_MELEE_DAMAGE','COMPUTE_ATTGRADE','SELFONLY','USE_MAGIC_DAMAGE','USE_HP_AS_COST','COMPUTE_MAGIC_DAMAGE','SPLASH','GIVE_PENALTY','USE_ARROW_DAMAGE','PENETRATE','IGNORE_TARGET_RATING','ATTACK_SLOW','ATTACK_STUN','HP_ABSORB','SP_ABSORB','ATTACK_FIRE_CONT','REMOVE_BAD_AFFECT','REMOVE_GOOD_AFFECT','CRUSH','ATTACK_POISON','TOGGLE','DISABLE_BY_POINT_UP','CRUSH_LONG','WIND','ELEC','FIRE','PARTY'
Ha kész, akkor mentsd el.
Most nyisd meg a skill_proto táblát.
Ezeknél a dwVnum-oknál igy nézzen ki a setFlag oszlop:
94=>PARTY
95=>PARTY
96=>PARTY
109=>REMOVE_BAD_AFFECT,PARTY
110=>PARTY
111=>PARTY
Ennyi lett volna. Tesztelve, teljesen működik!
Forrás: metin2dev