AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
lfg::LFGGroupScript Class Reference

#include "LFGScripts.h"

Inheritance diagram for lfg::LFGGroupScript:
GroupScript ScriptObject

Public Member Functions

 LFGGroupScript ()
 
void OnAddMember (Group *group, ObjectGuid guid) override
 
void OnRemoveMember (Group *group, ObjectGuid guid, RemoveMethod method, ObjectGuid kicker, char const *reason) override
 
void OnDisband (Group *group) override
 
void OnChangeLeader (Group *group, ObjectGuid newLeaderGuid, ObjectGuid oldLeaderGuid) override
 
void OnInviteMember (Group *group, ObjectGuid guid) override
 
- Public Member Functions inherited from GroupScript
bool IsDatabaseBound () const override
 
virtual bool CanGroupJoinBattlegroundQueue (Group const *, Player *, Battleground const *, uint32, bool, uint32)
 
virtual void OnCreate (Group *, Player *)
 
- Public Member Functions inherited from ScriptObject
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

Additional Inherited Members

- Protected Member Functions inherited from GroupScript
 GroupScript (const char *name, std::vector< uint16 > enabledHooks=std::vector< uint16 >())
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (const char *name, uint16 totalAvailableHooks=0)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ LFGGroupScript()

lfg::LFGGroupScript::LFGGroupScript ( )
143 :
144 GroupScript("LFGGroupScript",
145 {
151 })
152 {
153 }
@ GROUPHOOK_ON_CHANGE_LEADER
Definition GroupScript.h:30
@ GROUPHOOK_ON_ADD_MEMBER
Definition GroupScript.h:27
@ GROUPHOOK_ON_INVITE_MEMBER
Definition GroupScript.h:28
@ GROUPHOOK_ON_REMOVE_MEMBER
Definition GroupScript.h:29
@ GROUPHOOK_ON_DISBAND
Definition GroupScript.h:31
Definition GroupScript.h:40

References GROUPHOOK_ON_ADD_MEMBER, GROUPHOOK_ON_CHANGE_LEADER, GROUPHOOK_ON_DISBAND, GROUPHOOK_ON_INVITE_MEMBER, and GROUPHOOK_ON_REMOVE_MEMBER.

Member Function Documentation

◆ OnAddMember()

void lfg::LFGGroupScript::OnAddMember ( Group group,
ObjectGuid  guid 
)
overridevirtual

Reimplemented from GroupScript.

156 {
158 return;
159
160 ObjectGuid gguid = group->GetGUID();
161 ObjectGuid leader = group->GetLeaderGUID();
162
163 if (leader == guid)
164 {
165 LOG_DEBUG("lfg", "LFGScripts::OnAddMember [{}]: added [{}] leader [{}]", gguid.ToString(), guid.ToString(), leader.ToString());
166 sLFGMgr->SetLeader(gguid, guid);
167 }
168 else
169 {
170 LfgState gstate = sLFGMgr->GetState(gguid);
171 LfgState state = sLFGMgr->GetState(guid);
172 LOG_DEBUG("lfg", "LFGScripts::OnAddMember [{}]: added [{}] leader [{}] gstate: {}, state: {}",
173 gguid.ToString(), guid.ToString(), leader.ToString(), gstate, state);
174
175 if (state == LFG_STATE_QUEUED)
176 sLFGMgr->LeaveLfg(guid);
177
178 if (gstate == LFG_STATE_QUEUED)
179 sLFGMgr->LeaveLfg(gguid);
180 }
181
182 if (!group->isLFGGroup())
183 {
184 sLFGMgr->LeaveAllLfgQueues(leader, true, gguid); // pussywizard: invited, queued, party formed, neither party nor new member are queued, but leader is in queue solo!
185 sLFGMgr->LeaveAllLfgQueues(guid, false);
186 }
187
188 sLFGMgr->SetGroup(guid, gguid);
189 sLFGMgr->AddPlayerToGroup(gguid, guid);
190 sLFGMgr->AddPlayerQueuedForRandomDungeonToGroup(gguid, guid);
191
192 // pussywizard: after all necessary actions handle raid browser
193 if (sLFGMgr->GetState(guid) == LFG_STATE_RAIDBROWSER)
194 sLFGMgr->LeaveLfg(guid);
195 }
#define sLFGMgr
Definition LFGMgr.h:646
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
bool isLFGGroup(bool restricted=false) const
Definition Group.cpp:2275
ObjectGuid GetGUID() const
Definition Group.cpp:2316
ObjectGuid GetLeaderGUID() const
Definition Group.cpp:2306
Definition ObjectGuid.h:118
std::string ToString() const
Definition ObjectGuid.cpp:47
@ LFG_OPTION_ENABLE_SEASONAL_BOSSES
Definition LFGMgr.h:43
@ LFG_OPTION_ENABLE_DUNGEON_FINDER
Definition LFGMgr.h:41
@ LFG_OPTION_ENABLE_RAID_BROWSER
Definition LFGMgr.h:42
LfgState
Definition LFG.h:67
@ LFG_STATE_RAIDBROWSER
Definition LFG.h:75
@ LFG_STATE_QUEUED
Definition LFG.h:70

References Group::GetGUID(), Group::GetLeaderGUID(), Group::isLFGGroup(), lfg::LFG_OPTION_ENABLE_DUNGEON_FINDER, lfg::LFG_OPTION_ENABLE_RAID_BROWSER, lfg::LFG_OPTION_ENABLE_SEASONAL_BOSSES, lfg::LFG_STATE_QUEUED, lfg::LFG_STATE_RAIDBROWSER, LOG_DEBUG, sLFGMgr, and ObjectGuid::ToString().

◆ OnChangeLeader()

void lfg::LFGGroupScript::OnChangeLeader ( Group group,
ObjectGuid  newLeaderGuid,
ObjectGuid  oldLeaderGuid 
)
overridevirtual

Reimplemented from GroupScript.

284 {
286 return;
287
288 ObjectGuid gguid = group->GetGUID();
289
290 LOG_DEBUG("lfg", "LFGScripts::OnChangeLeader [{}]: old [{}] new [{}]",
291 gguid.ToString(), newLeaderGuid.ToString(), oldLeaderGuid.ToString());
292 sLFGMgr->SetLeader(gguid, newLeaderGuid);
293
294 // pussywizard: after all necessary actions handle raid browser
295 if (sLFGMgr->GetState(oldLeaderGuid) == LFG_STATE_RAIDBROWSER)
296 sLFGMgr->LeaveLfg(oldLeaderGuid);
297 }

References Group::GetGUID(), lfg::LFG_OPTION_ENABLE_DUNGEON_FINDER, lfg::LFG_OPTION_ENABLE_RAID_BROWSER, lfg::LFG_OPTION_ENABLE_SEASONAL_BOSSES, lfg::LFG_STATE_RAIDBROWSER, LOG_DEBUG, sLFGMgr, and ObjectGuid::ToString().

◆ OnDisband()

void lfg::LFGGroupScript::OnDisband ( Group group)
overridevirtual

Reimplemented from GroupScript.

269 {
271 return;
272
273 ObjectGuid gguid = group->GetGUID();
274 LOG_DEBUG("lfg", "LFGScripts::OnDisband [{}]", gguid.ToString());
275
276 // pussywizard: after all necessary actions handle raid browser
277 if (sLFGMgr->GetState(group->GetLeaderGUID()) == LFG_STATE_RAIDBROWSER)
278 sLFGMgr->LeaveLfg(group->GetLeaderGUID());
279
280 sLFGMgr->RemoveGroupData(gguid);
281 }

References Group::GetGUID(), Group::GetLeaderGUID(), lfg::LFG_OPTION_ENABLE_DUNGEON_FINDER, lfg::LFG_OPTION_ENABLE_RAID_BROWSER, lfg::LFG_OPTION_ENABLE_SEASONAL_BOSSES, lfg::LFG_STATE_RAIDBROWSER, LOG_DEBUG, sLFGMgr, and ObjectGuid::ToString().

◆ OnInviteMember()

void lfg::LFGGroupScript::OnInviteMember ( Group group,
ObjectGuid  guid 
)
overridevirtual

Reimplemented from GroupScript.

300 {
301 // used only with EXTRA_LOGS
302 (void)guid;
303
305 return;
306
307 ObjectGuid gguid = group->GetGUID();
308 ObjectGuid leader = group->GetLeaderGUID();
309 LOG_DEBUG("lfg", "LFGScripts::OnInviteMember [{}]: invite [{}] leader [{}]", gguid.ToString(), guid.ToString(), leader.ToString());
310 // No gguid == new group being formed
311 // No leader == after group creation first invite is new leader
312 // leader and no gguid == first invite after leader is added to new group (this is the real invite)
313 if (leader && !gguid)
314 {
315 sLFGMgr->LeaveLfg(leader);
316 sLFGMgr->LeaveAllLfgQueues(leader, true);
317 }
318 }

References Group::GetGUID(), Group::GetLeaderGUID(), lfg::LFG_OPTION_ENABLE_DUNGEON_FINDER, lfg::LFG_OPTION_ENABLE_RAID_BROWSER, lfg::LFG_OPTION_ENABLE_SEASONAL_BOSSES, LOG_DEBUG, sLFGMgr, and ObjectGuid::ToString().

◆ OnRemoveMember()

void lfg::LFGGroupScript::OnRemoveMember ( Group group,
ObjectGuid  guid,
RemoveMethod  method,
ObjectGuid  kicker,
char const *  reason 
)
overridevirtual

Reimplemented from GroupScript.

198 {
199 // used only with EXTRA_LOGS
200 (void)kicker;
201 (void)reason;
202
204 return;
205
206 ObjectGuid gguid = group->GetGUID();
207 LOG_DEBUG("lfg", "LFGScripts::OnRemoveMember [{}]: remove [{}] Method: {} Kicker: [{}] Reason: {}",
208 gguid.ToString(), guid.ToString(), method, kicker.ToString(), (reason ? reason : ""));
209
210 bool isLFG = group->isLFGGroup();
211 LfgState state = sLFGMgr->GetState(gguid);
212 uint32 dungeonId = sLFGMgr->GetDungeon(gguid, false);
213
214 // If group is being formed after proposal success do nothing more
215 if (state == LFG_STATE_PROPOSAL && method == GROUP_REMOVEMETHOD_DEFAULT)
216 {
217 // LfgData: Remove player from group
218 sLFGMgr->SetGroup(guid, ObjectGuid::Empty);
219 sLFGMgr->RemovePlayerFromGroup(gguid, guid);
220 return;
221 }
222
223 sLFGMgr->LeaveLfg(guid);
224 sLFGMgr->LeaveAllLfgQueues(guid, true, gguid);
225 sLFGMgr->SetGroup(guid, ObjectGuid::Empty);
226 uint8 players = sLFGMgr->RemovePlayerFromGroup(gguid, guid);
227
228 // pussywizard: after all necessary actions handle raid browser
229 // pussywizard: already done above
230 //if (sLFGMgr->GetState(guid) == LFG_STATE_RAIDBROWSER)
231 // sLFGMgr->LeaveLfg(guid);
232
233 // Xinef: only LFG groups can go below
234 if (!isLFG)
235 return;
236
237 if (state != LFG_STATE_FINISHED_DUNGEON && group) // Need more players to finish the dungeon
238 {
239 if (Player* leader = ObjectAccessor::FindConnectedPlayer(sLFGMgr->GetLeader(gguid)))
240 {
241 sLFGMgr->SetDungeon(gguid, dungeonId);
242 leader->GetSession()->SendLfgOfferContinue(sLFGMgr->GetDungeon(gguid, false));
243 }
244 }
245
247 {
248 // xinef: fixed dungeon deserter
250 player->HasAura(LFG_SPELL_DUNGEON_COOLDOWN) && players >= LFG_GROUP_KICK_VOTES_NEEDED &&
251 sWorld->getBoolConfig(CONFIG_LFG_CAST_DESERTER))
252 {
253 player->AddAura(LFG_SPELL_DUNGEON_DESERTER, player);
254 }
255 //else if (state == LFG_STATE_BOOT)
256 // Update internal kick cooldown of kicked
257
258 player->GetSession()->SendLfgUpdateParty(LfgUpdateData(LFG_UPDATETYPE_LEADER_UNK1));
259 if (player->GetMap()->IsDungeon()) // Teleport player out the dungeon
260 {
261 // Xinef: no longer valid sLFGMgr->TeleportPlayer(player, true);
262 if (!player->IsBeingTeleportedFar() && player->GetMapId() == sLFGMgr->GetDungeonMapId(gguid))
263 player->TeleportToEntryPoint();
264 }
265 }
266 }
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
@ GROUP_REMOVEMETHOD_KICK_LFG
Definition SharedDefines.h:3846
@ GROUP_REMOVEMETHOD_DEFAULT
Definition SharedDefines.h:3843
@ CONFIG_LFG_CAST_DESERTER
Definition WorldConfig.h:96
static ObjectGuid const Empty
Definition ObjectGuid.h:120
Definition Player.h:1066
#define sWorld
Definition World.h:316
Player * FindConnectedPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:257
@ LFG_STATE_FINISHED_DUNGEON
Definition LFG.h:74
@ LFG_STATE_PROPOSAL
Definition LFG.h:71
@ LFG_UPDATETYPE_LEADER_UNK1
Definition LFG.h:49
@ LFG_SPELL_DUNGEON_COOLDOWN
Definition LFGMgr.h:52
@ LFG_GROUP_KICK_VOTES_NEEDED
Definition LFGMgr.h:55
@ LFG_SPELL_DUNGEON_DESERTER
Definition LFGMgr.h:53

References CONFIG_LFG_CAST_DESERTER, ObjectGuid::Empty, ObjectAccessor::FindConnectedPlayer(), Group::GetGUID(), GROUP_REMOVEMETHOD_DEFAULT, GROUP_REMOVEMETHOD_KICK_LFG, Group::isLFGGroup(), lfg::LFG_GROUP_KICK_VOTES_NEEDED, lfg::LFG_OPTION_ENABLE_DUNGEON_FINDER, lfg::LFG_OPTION_ENABLE_RAID_BROWSER, lfg::LFG_OPTION_ENABLE_SEASONAL_BOSSES, lfg::LFG_SPELL_DUNGEON_COOLDOWN, lfg::LFG_SPELL_DUNGEON_DESERTER, lfg::LFG_STATE_FINISHED_DUNGEON, lfg::LFG_STATE_PROPOSAL, lfg::LFG_UPDATETYPE_LEADER_UNK1, LOG_DEBUG, sLFGMgr, sWorld, and ObjectGuid::ToString().


The documentation for this class was generated from the following files: