mirror of
https://github.com/mangosfour/server.git
synced 2025-12-25 22:37:04 +00:00
[11878] Add group looting rules for gameobjects (chests)
Patch based on original work by Wowka321 Signed-off-by: Schmoozerd <schmoozerd@scriptdev2.com>
This commit is contained in:
parent
16b244373a
commit
461be74c3a
7 changed files with 209 additions and 26 deletions
|
|
@ -7976,7 +7976,7 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type)
|
|||
if (ObjectGuid lootGuid = GetLootGuid())
|
||||
m_session->DoLootRelease(lootGuid);
|
||||
|
||||
Loot *loot = 0;
|
||||
Loot* loot = NULL;
|
||||
PermissionTypes permission = ALL_PERMISSION;
|
||||
|
||||
DEBUG_LOG("Player::SendLoot");
|
||||
|
|
@ -7997,6 +7997,13 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type)
|
|||
|
||||
loot = &go->loot;
|
||||
|
||||
Player* recipient = go->GetLootRecipient();
|
||||
if (!recipient)
|
||||
{
|
||||
go->SetLootRecipient(this);
|
||||
recipient = this;
|
||||
}
|
||||
|
||||
// generate loot only if ready for open and spawned in world
|
||||
if (go->getLootState() == GO_READY && go->isSpawned())
|
||||
{
|
||||
|
|
@ -8020,12 +8027,65 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type)
|
|||
loot->clear();
|
||||
loot->FillLoot(lootid, LootTemplates_Gameobject, this, false);
|
||||
loot->generateMoneyLoot(go->GetGOInfo()->MinMoneyLoot, go->GetGOInfo()->MaxMoneyLoot);
|
||||
|
||||
if (go->GetGoType() == GAMEOBJECT_TYPE_CHEST && go->GetGOInfo()->chest.groupLootRules)
|
||||
{
|
||||
if (Group* group = go->GetGroupLootRecipient())
|
||||
{
|
||||
group->UpdateLooterGuid(go, true);
|
||||
|
||||
switch (group->GetLootMethod())
|
||||
{
|
||||
case GROUP_LOOT:
|
||||
// GroupLoot delete items over threshold (threshold even not implemented), and roll them. Items with quality<threshold, round robin
|
||||
group->GroupLoot(go, loot);
|
||||
permission = GROUP_PERMISSION;
|
||||
break;
|
||||
case NEED_BEFORE_GREED:
|
||||
group->NeedBeforeGreed(go, loot);
|
||||
permission = GROUP_PERMISSION;
|
||||
break;
|
||||
case MASTER_LOOT:
|
||||
group->MasterLoot(go, loot);
|
||||
permission = MASTER_PERMISSION;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (loot_type == LOOT_FISHING)
|
||||
go->getFishLoot(loot,this);
|
||||
|
||||
go->SetLootState(GO_ACTIVATED);
|
||||
}
|
||||
if (go->getLootState() == GO_ACTIVATED && go->GetGoType() == GAMEOBJECT_TYPE_CHEST && go->GetGOInfo()->chest.groupLootRules)
|
||||
{
|
||||
if (Group* group = go->GetGroupLootRecipient())
|
||||
{
|
||||
if (group == GetGroup())
|
||||
{
|
||||
if (group->GetLootMethod() == FREE_FOR_ALL)
|
||||
permission = ALL_PERMISSION;
|
||||
else if (group->GetLooterGuid() == GetObjectGuid())
|
||||
{
|
||||
if (group->GetLootMethod() == MASTER_LOOT)
|
||||
permission = MASTER_PERMISSION;
|
||||
else
|
||||
permission = ALL_PERMISSION;
|
||||
}
|
||||
else
|
||||
permission = GROUP_PERMISSION;
|
||||
}
|
||||
else
|
||||
permission = NONE_PERMISSION;
|
||||
}
|
||||
else if (recipient == this)
|
||||
permission = ALL_PERMISSION;
|
||||
else
|
||||
permission = NONE_PERMISSION;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case HIGHGUID_ITEM:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue