aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-10-17 23:11:46 +0200
committerShauren <shauren.trinity@gmail.com>2022-10-17 23:11:46 +0200
commit133334a902b705dae6f7e92bb1009b84cf1c51d2 (patch)
tree5a48c30a00441d36c285b78da396b5549eabbb87 /src/server/scripts
parentaf76b41ace2917ece0aa3f97e4f46e095a7c815f (diff)
Core/Loot: Implemented personal loot and tag sharing for non-boss loot
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp12
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp2
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp4
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp2
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp4
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp4
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp6
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp2
12 files changed, 24 insertions, 22 deletions
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index c242f96ae94..26e2baa9c81 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -546,9 +546,15 @@ public:
if (!target)
return false;
- handler->PSendSysMessage("Loot recipient for creature %s (%s, SpawnID " UI64FMTD ") is %s",
- target->GetName().c_str(), target->GetGUID().ToString().c_str(), target->GetSpawnId(),
- target->hasLootRecipient() ? (target->GetLootRecipient() ? target->GetLootRecipient()->GetName().c_str() : "offline") : "no loot recipient");
+ handler->PSendSysMessage("Loot recipients for creature %s (%s, SpawnID " UI64FMTD ") are:",
+ target->GetName().c_str(), target->GetGUID().ToString().c_str(), target->GetSpawnId());
+
+ for (ObjectGuid tapperGuid : target->GetTapList())
+ {
+ Player* tapper = ObjectAccessor::GetPlayer(*target, tapperGuid);
+ handler->PSendSysMessage("* %s", tapper ? tapper->GetName().c_str() : "offline");
+ }
+
return true;
}
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 9340b0f292f..4305ba8b10e 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -1200,7 +1200,7 @@ public:
}
Loot const* loot = creatureTarget->m_loot.get();
- if (!creatureTarget->isDead() || !loot || loot->empty())
+ if (!creatureTarget->isDead() || !loot || loot->isLooted())
{
handler->PSendSysMessage(LANG_COMMAND_NOT_DEAD_OR_NO_LOOT, creatureTarget->GetName().c_str());
handler->SetSentErrorMessage(true);
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
index a0e404c3d09..6247dbf990b 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp
@@ -433,7 +433,7 @@ void hyjalAI::EnterEvadeMode(EvadeReason /*why*/)
if (me->IsAlive())
me->GetMotionMaster()->MoveTargetedHome();
- me->SetLootRecipient(nullptr);
+ me->SetTappedBy(nullptr);
}
void hyjalAI::JustEngagedWith(Unit* /*who*/)
diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
index 0b8f48a26e0..670f503a717 100644
--- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
@@ -200,10 +200,8 @@ public:
if (Creature* legoso = me->FindNearestCreature(NPC_LEGOSO, SIZE_OF_GRIDS))
{
- Group* group = me->GetLootRecipientGroup();
-
if (killer->GetGUID() == legoso->GetGUID() ||
- (group && group->IsMember(killer->GetGUID())) ||
+ (killer->IsPlayer() && me->isTappedBy(killer->ToPlayer())) ||
killer->GetGUID() == legoso->AI()->GetGUID(DATA_EVENT_STARTER_GUID))
legoso->AI()->DoAction(ACTION_LEGOSO_SIRONAS_KILLED);
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
index 7b791385242..c5f211c538b 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp
@@ -323,7 +323,7 @@ struct dummy_dragonAI : public ScriptedAI
void JustDied(Unit* /*killer*/) override
{
if (!_canLoot)
- me->SetLootRecipient(nullptr);
+ me->SetTappedBy(nullptr);
uint32 spellId = 0;
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index 347a874d2d4..e0223f674be 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -452,8 +452,7 @@ class boss_twilight_halion : public CreatureScript
if (Creature* halion = instance->GetCreature(DATA_HALION))
{
// Ensure looting
- if (me->IsDamageEnoughForLootingAndReward())
- halion->LowerPlayerDamageReq(halion->GetMaxHealth());
+ halion->LowerPlayerDamageReq(halion->GetMaxHealth());
if (halion->IsAlive())
Unit::Kill(killer, halion);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index a4567be2607..c4043240376 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -327,8 +327,7 @@ struct boss_blood_council_controller : public BossAI
if (Creature* prince = ObjectAccessor::GetCreature(*me, _invocationOrder[_invocationStage].guid))
{
// Make sure looting is allowed
- if (me->IsDamageEnoughForLootingAndReward())
- prince->LowerPlayerDamageReq(prince->GetMaxHealth());
+ prince->LowerPlayerDamageReq(prince->GetMaxHealth());
Unit::Kill(killer, prince);
}
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
index 4e428ab041c..5211071b1ef 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -523,7 +523,7 @@ struct boss_the_lich_king : public BossAI
me->SummonCreature(NPC_HIGHLORD_TIRION_FORDRING_LK, TirionSpawn, TEMPSUMMON_MANUAL_DESPAWN);
}
- void JustDied(Unit* /*killer*/) override
+ void JustDied(Unit* killer) override
{
_JustDied();
DoCastAOE(SPELL_PLAY_MOVIE, false);
@@ -535,7 +535,7 @@ struct boss_the_lich_king : public BossAI
me->GetMap()->SetZoneWeather(AREA_ICECROWN_CITADEL, WEATHER_STATE_FOG, 0.0f);
if (Is25ManRaid())
- if (Player* player = me->GetLootRecipient())
+ if (Player* player = Object::ToPlayer(killer))
player->RewardPlayerAndGroupAtEvent(NPC_THE_LICH_KING_QUEST, player);
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
index 6b08bf1717d..a1dd29b48d1 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
@@ -318,7 +318,7 @@ struct boss_valithria_dreamwalker : public ScriptedAI
void HealReceived(Unit* healer, uint32& heal) override
{
if (!me->hasLootRecipient())
- me->SetLootRecipient(healer);
+ me->SetTappedBy(healer);
me->LowerPlayerDamageReq(heal);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 132980fae3f..2c243261b3d 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -609,7 +609,7 @@ class instance_icecrown_citadel : public InstanceMapScript
case GO_CACHE_OF_THE_DREAMWALKER_10H:
case GO_CACHE_OF_THE_DREAMWALKER_25H:
if (Creature* valithria = instance->GetCreature(ValithriaDreamwalkerGUID))
- go->SetLootRecipient(valithria->GetLootRecipient(), valithria->GetLootRecipientGroup());
+ go->SetTapList(valithria->GetTapList());
go->RemoveFlag(GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
break;
case GO_ARTHAS_PLATFORM:
@@ -843,7 +843,7 @@ class instance_icecrown_citadel : public InstanceMapScript
if (GameObject* loot = instance->GetGameObject(DeathbringersCacheGUID))
{
if (Creature* deathbringer = instance->GetCreature(DeathbringerSaurfangGUID))
- loot->SetLootRecipient(deathbringer->GetLootRecipient(), deathbringer->GetLootRecipientGroup());
+ loot->SetTapList(deathbringer->GetTapList());
loot->RemoveFlag(GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN);
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
index b4dbadd51f9..3e4451164c3 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp
@@ -207,7 +207,7 @@ class boss_steelbreaker : public CreatureScript
}
else
{
- me->SetLootRecipient(nullptr);
+ me->SetTappedBy(nullptr);
Talk(SAY_STEELBREAKER_DEATH);
//DoCastAOE(SPELL_SUPERCHARGE, true);
@@ -355,7 +355,7 @@ class boss_runemaster_molgeim : public CreatureScript
}
else
{
- me->SetLootRecipient(nullptr);
+ me->SetTappedBy(nullptr);
Talk(SAY_MOLGEIM_DEATH);
//DoCastAOE(SPELL_SUPERCHARGE, true);
@@ -534,7 +534,7 @@ class boss_stormcaller_brundir : public CreatureScript
}
else
{
- me->SetLootRecipient(nullptr);
+ me->SetTappedBy(nullptr);
Talk(SAY_BRUNDIR_DEATH);
//DoCastAOE(SPELL_SUPERCHARGE, true);
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
index e7dd5c1cf2f..02825349ad5 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp
@@ -674,7 +674,7 @@ class instance_ulduar : public InstanceMapScript
{
if (GameObject* cache = instance->GetGameObject(thorim->AI()->GetData(DATA_THORIM_HARDMODE) ? CacheOfStormsHardmodeGUID : CacheOfStormsGUID))
{
- cache->SetLootRecipient(thorim->GetLootRecipient());
+ cache->SetTapList(thorim->GetTapList());
cache->SetRespawnTime(cache->GetRespawnDelay());
cache->RemoveFlag(GO_FLAG_LOCKED);
cache->RemoveFlag(GO_FLAG_NOT_SELECTABLE);