SKILL_FLAG_FIRE = (1 << 26),
SKILL_FLAG_PARTY = (1 << 27),
SKILL_RESIST_PENETRATE
struct FPartyPIDCollector
{
std::vector <DWORD> vecPIDs...
Bende kendini kutsayamama gibi bir sorun mevcut değil. Sanırım net belirtemedim isteğimi. Ws atarken bozulmasın diye şaman grubunun haricinde olan kişilere buff veremesin istiyorum. Sadece gruptakilere buff verebilsin. Eğer atmış olduğunuz konuda ilgili kısım varsa tam yerini belirtebilir misiniz ?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: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...
- Whistle
- c++ grup kutsama metin2 şaman grup kutsama navicat şaman
- Yanıt: 54
- Forum: C++ / C# / Python
Sadece Gruptayken değil. Grubumda olmayan herhangibi birine buff veremesin istiyorum. grubum yokken sadece kendime buff verebileyim grubum varken sadece gruptaki kişilere.Gruptayken grup harici kişilere kutsama atılıyor muydu hatırlamıyorum ancak kodları bi deneyin
Sadece Gruptayken değil. Grubumda olmayan herhangibi birine buff veremesin istiyorum. grubum yokken sadece kendime buff verebileyim grubum varken sadece gruptaki kişilere.
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_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;
}
Selfonly ve party şeklinde ayarladım skilleri dediğiniz gibi. Kendime buff verebiliyorum fakat grubumdaki karaktere de veremiyorum.Şaman karakteri grupta ise sadece kendi grubundaki oyunculara ve kendisine atabilecek. Grupta değilse sadece kendisine.
O zaman skill flaglarını değiştirmek gerekiyor.
94, 95, 96, 109, 110 ve 111 dwVnum değerlerine "SELFONLY" değerini ekleyip deneyebilir misin? SELFONLY,PARTY şeklinde olacak.
Ekledikten sonra gruptayken grup üyelerini kutsamakta sorun olursa kodda SELFONLY ve PARTY yerlerini değiştirin. Örneğin;
C++: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_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; }
Bunları test etmedim şu an fikir yürütme amaçlı yazıyorum.
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);
}
}
if (dwVnum == SKILL_CHAIN)
{
ResetChainLightningIndex();
AddChainLightningExcept(pkVictim);
}
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;
}
if (GetJob() == JOB_SHAMAN)
{
if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY))
{
if (!GetParty())
{
ComputeSkill(dwVnum, this);
}
else
{
FPartyPIDCollector f;
GetParty()->ForEachOnMapMember(f, GetMapIndex());
for (auto it = f.vecPIDs.begin(); it != f.vecPIDs.end(); ++it)
{
LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);
if (ch)
ComputeSkill(dwVnum, ch);
}
}
}
else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
{
ComputeSkill(dwVnum, this);
}
if (dwVnum == SKILL_CHAIN)
{
ResetChainLightningIndex();
AddChainLightningExcept(pkVictim);
}
m_dwLastSkillTime = get_dword_time();
return true;
}
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 (auto it = f.vecPIDs.begin(); it != f.vecPIDs.end(); ++it)
{
LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);
if (ch)
ComputeSkill(dwVnum, ch);
}
}
if (dwVnum == SKILL_CHAIN)
{
ResetChainLightningIndex();
AddChainLightningExcept(pkVictim);
}
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;
}
return true;
}