diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-10-17 23:11:46 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-10-17 23:11:46 +0200 |
| commit | 133334a902b705dae6f7e92bb1009b84cf1c51d2 (patch) | |
| tree | 5a48c30a00441d36c285b78da396b5549eabbb87 /src/server/scripts | |
| parent | af76b41ace2917ece0aa3f97e4f46e095a7c815f (diff) | |
Core/Loot: Implemented personal loot and tag sharing for non-boss loot
Diffstat (limited to 'src/server/scripts')
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); |
