- Mesaj
- 12.062
- Çözümler
- 571
- Beğeni
- 14.463
- Puan
- 5.915
- Ticaret Puanı
- 2
Merhaba arkadaşlar, diğer forumda bir arkadaşım bu sorunu çözmüş bana da özel mesaj yoluyla nasıl çözdüğünü açıklamıştı. Bende faydalı olabileceğini düşünerekten sizinle paylaşmak istiyorum. 
Sırasıyla şu işlemleri uygulayınız;
Server/game/src/skill.h açılır ve aratılır;
Altına şu kod eklenir:
Server/game/src/char_skill.cpp açılır ve aratılır;
Kod blogunun { ..code.. }; altına şu kod eklenir:
Aynı dosyada arat;
Altına şu kod eklenir:
Aynı dosyada arat;
Altına şu kod eklenir:
Aynı dosyada arat;
Şu kodlarla değiştir:
Server/game/src/guild.cpp açılır ve aratılır;
Altına şu kod eklenir:
Navicat'ta yapılacak ayarlar;
Navicat => Player => skill_proto => sağ tıklayıp "Design Table" diyoruz.
"setFlag" stununa gelip "PARTY" isimli değeri en sona ekliyoruz.
Bu değeri ekledikten sonra "OK" Butonuna basıp kayıt ediyoruz.
Sonra skil_proto'ya sol tık ile girip aşağıda vereceğim "dwVnum" idlerinin "setFlag" sütunundaki değerlerinin sonuna ekliyoruz.
Sözlük;
dwVnum => Yeteneklerin id numarası.

Sırasıyla şu işlemleri uygulayınız;
Server/game/src/skill.h açılır ve aratılır;
C++:
SKILL_FLAG_FIRE = (1 << 26),
C++:
SKILL_FLAG_PARTY = (1 << 27),
Server/game/src/char_skill.cpp açılır ve aratılır;
C++:
SKILL_RESIST_PENETRATE
Kod blogunun { ..code.. }; altına şu kod eklenir:
C++:
struct FPartyPIDCollector
{
std::vector <DWORD> vecPIDs;
FPartyPIDCollector()
{
}
void operator () (LPCHARACTER ch)
{
vecPIDs.push_back(ch->GetPlayerID());
}
};
Aynı dosyada arat;
C++:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
pkVictim = this;
C++:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim)
pkVictim = this;
Aynı dosyada arat;
C++:
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
pkVictim = this;
Burayı görüntülemek için üye girişi yapmalı veya kayıt olmalısınız.
Aynı dosyada arat;
C++:
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;
}
Şu kodlarla değiştir:
C++:
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;
}
Server/game/src/guild.cpp açılır ve aratılır;
C++:
if ((pkSk->dwFlag & SKILL_FLAG_SELFONLY))
{
// 이미 걸려 있으므로 사용하지 않음.
if (ch->FindAffect(pkSk->dwVnum))
return;
victim = ch;
}
Altına şu kod eklenir:
C++:
if ((pkSk->dwFlag & SKILL_FLAG_PARTY))
{
if (ch->FindAffect(pkSk->dwVnum))
return;
victim = ch;
}
Navicat'ta yapılacak ayarlar;
Navicat => Player => skill_proto => sağ tıklayıp "Design Table" diyoruz.
"setFlag" stununa gelip "PARTY" isimli değeri en sona ekliyoruz.
Bu değeri ekledikten sonra "OK" Butonuna basıp kayıt ediyoruz.
Sonra skil_proto'ya sol tık ile girip aşağıda vereceğim "dwVnum" idlerinin "setFlag" sütunundaki değerlerinin sonuna ekliyoruz.
94, 95, 96, 109, 110 ve 111 dwVnum değerlerine aşağıdaki resimdeki gibi "PARTY" değerinin ekliyoruz.
Sözlük;
dwVnum => Yeteneklerin id numarası.