projecteq-projecteqquests/lua_modules/mpg_helper.lua

158 lines
5.3 KiB
Lua
Raw Permalink Normal View History

-- Group Trial Version 1 of zone
-- Raid Trial Version 2 of zone
--
-- MPG Group Trial Bits:
-- 1 MPG_fear
-- 2 MPG_ingenuity
-- 4 MPG_weaponry
-- 8 MPG_subversion
-- 16 MPG_efficiency
-- 32 MPG_destruciton
--
-- Lockout on Win: 72 hours
-- Lockout on Loss: 2 hours
--
-- MPG Raid Trial General Notes
-- 1 MPG_hate - The Mastery of Hate (Raid) - Mastery of Mind Rune 52407
-- 2 MPG_endurance - The Mastery of Endurance (Raid) - Mastery of Body Rune 52408
-- 4 MPG_foresight - The Mastery of Foresight (Raid) - Mastery of Tactics Rune 52409
-- 8 MPG_specialization - The Mastery of Specialization (Raid) - Mastery of Arcana Rune 52410
-- 16 MPG_adaptation - The Mastery of Adaptation (Raid) - Mastery of Realms Rune 52411
-- 32 MPG_corruption - The Mastery of Corruption (Raid) - Mastery of Power Rune 52412
--
-- Lockout on Win: 5 days
-- Lockout on Loss: 2 hours (think the instance lives for 3 hours now so its really 3 hours)
2021-02-07 20:50:01 -08:00
-- items: 52413
2015-12-29 09:29:05 -08:00
local mpg_helper = {};
-- Function: UpdateGroupTrialFlag
2015-12-29 16:33:08 -08:00
--
-- Description:
-- Extracted code such that it can be reused in all 6 of the group MPG trials.
--
-- Example Usage:
-- local this_bit = 1;
-- local mpg_helper = require("mpg_helper");
-- mpg_helper.UpdateGroupTrialFlag(player_list, this_bit);
function mpg_helper.UpdateGroupTrialFlag(player_list_in, this_bit_in)
local entity_list = eq.get_entity_list();
local client;
local client_globals;
for k,v in pairs(player_list_in) do
client = entity_list:GetClientByCharID(v)
if client.valid then
client_globals = eq.get_qglobals(client);
-- Get the bits of the MPG Trials completed; we should only award an AA the first time
-- a Character complets a trial.
local mpg_group_trials = tonumber(client_globals["mpg_group_trials"]);
if mpg_group_trials == nil then
mpg_group_trials = 0;
end
local has_done_this_trial;
if bit.band(mpg_group_trials, this_bit_in) == 0 then
has_done_this_trial = false;
else
has_done_this_trial = true;
end
-- Has character done this trial before?
if not has_done_this_trial then
local trial_bit_list = {1,2,4,8,16,32};
local aas_to_grant = 0;
for bitkey,bitval in pairs(trial_bit_list) do
if bit.band(mpg_group_trials,bitval) == 0 then
else
aas_to_grant = aas_to_grant + 1;
end
end
aas_to_grant = aas_to_grant + 1;
-- Log Trial Flag and Grant AA
eq.target_global("mpg_group_trials", tostring(bit.bor(mpg_group_trials, this_bit_in)), "F", 0, v, 0);
client:GrantAlternateAdvancementAbility(466, aas_to_grant);
client:Message(MT.Yellow, "The understanding you have gained by completing one of Mata Muram's trials has increased your maximum resistances.");
else
client:Message(MT.Yellow, "You have again mastered this trial. Congratulations.");
end
end
end
2015-12-29 09:29:05 -08:00
end
function mpg_helper.UpdateRaidTrialFlag(player_list_in, this_bit_in)
local el = eq.get_entity_list();
local client;
for k,v in pairs(player_list_in) do
client = el:GetClientByCharID(v);
if client.valid then
-- Client is in the zone update the raid bit
mpg_helper.RaidAnguishAccess(client, this_bit_in);
else
-- Client is not in the zone so set a 'temporary' global on the charcter which
-- will update the bit the next time the character zones into this trial.
eq.target_global('mpg_raid_trial_won', tostring(this_bit_in), 'F', 0, v, 0);
end
end
end
2017-03-31 08:57:35 -07:00
function mpg_helper.RaidAnguishAccess(client, lockout_bit_in)
-- 1 (Hate) Mastery of Mind Rune 52407
-- 2 (Endurance) Mastery of Body Rune 52408
-- 4 (Foresight) Mastery of Tactics Rune 52409
-- 8 (Spec) Mastery of Arcana Rune 52410
-- 16 (Adaptation) Mastery of Realms Rune 52411
-- 32 (Corruption) Mastery of Power Rune 52412
local client_globals = eq.get_qglobals(client);
local trial_bit_list = {{1,52407},{2,52408},{4,52409},{8,52410},{16,52411},{32,52412}};
local mpg_raid_trials;
local has_all_trials;
if client.valid then
mpg_raid_trials = tonumber(client_globals['mpg_raid_trials']);
if mpg_raid_trials == nil then
mpg_raid_trials = 0;
end
if bit.band(mpg_raid_trials, lockout_bit_in) ~= 0 then
else
mpg_raid_trials = bit.bor(mpg_raid_trials, lockout_bit_in);
eq.target_global("mpg_raid_trials", tostring(mpg_raid_trials), "F", 0, client:CharacterID(), 0);
for bk,bv in pairs(trial_bit_list) do
if lockout_bit_in == bv[1] then
client:SummonItem(bv[2]);
end
end
end
if not client:HasItem(52413) or client_globals['oow_mpg_raids_complete'] == nil then
has_all_trials = true;
for bk,bv in pairs(trial_bit_list) do
if bit.band(mpg_raid_trials,bv[1]) ~= 0 then
else
has_all_trials = false;
end
end
if has_all_trials then
eq.target_global("oow_mpg_raids_complete", "1", "F", 0, client:CharacterID(), 0);
-- Summon: Seal: Mastery of All
client:NukeItem(52407);
client:NukeItem(52408);
client:NukeItem(52409);
client:NukeItem(52410);
client:NukeItem(52411);
client:NukeItem(52412);
client:SummonItem(52413); -- Item: Seal: Mastery of All
client:Message(MT.Lime,"You have demonstrated adeptness at all aspects of power that Mata Muram holds dear. As you receive the final medal, the six wedges you have collected fuse, point to point, creating a hexagonal seal. You now hold the key to Anguish, the Fallen Palace");
end
end
end
end
2015-12-29 09:29:05 -08:00
return mpg_helper;