Hi Guys!
I know this post is very old but I usually see this system in some server and I always find a mistake about it.
Let me explain.
If you implement this system with the fix that tierrilopes show to us, still you won't be able to buff someone if you are in a party and he is not. So you should exit your current party, and give buff to him.
If you want to fix this bug too, you should go to char_skill.cpp and search for this line:
GetParty()->ForEachOnMapMember(f, GetMapIndex());
After this line past this condition:
//Fix where you should exit your party to buff someone who is not in your party//
if (!pkVictim->GetParty())
ComputeSkill(dwVnum, pkVictim);
Finally it should like this:
else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && GetParty())
{
FPartyPIDCollector f;
GetParty()->ForEachOnMapMember(f, GetMapIndex());
//Fix where you should exit your party to buff someone who is not in your party//
if (!pkVictim->GetParty())
ComputeSkill(dwVnum, pkVictim);
for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++)
{
LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);
ComputeSkill(dwVnum, ch);
}
}
Compile, and you are done!
Result:
For now, you can buff any player and doesn't matter you are in a party or not, but if you are in a party you will buff your teammates with the guy who is not in your team.
It"s not a large modification, but I think it's useful.
Sorry for my bad english!
Best regards!