peq-quests/global/global_player.lua
2024-04-20 20:47:51 -04:00

438 lines
20 KiB
Lua

-- items: 67704, 72091, 62621, 62622, 62844, 62827, 62828, 62836, 62883, 62876, 47100, 62878, 62879
local don = require("dragons_of_norrath")
function event_enter_zone(e)
mysterious_voice(e)
if eq.is_lost_dungeons_of_norrath_enabled() and eq.get_zone_short_name() == "lavastorm" and e.self:GetGMStatus() >= 80 then
e.self:Message(MT.DimGray, "There are GM commands available for Dragons of Norrath, use " .. eq.say_link("#don") .. " to get started")
end
end
function mysterious_voice(e)
if not eq.is_lost_dungeons_of_norrath_enabled() then
return
end
local qglobals = eq.get_qglobals(e.self);
if e.self:GetLevel() < 15 then
return
end
if qglobals.Wayfarer ~= nil then
return
end
local zone_id = eq.get_zone_id();
local voice_zones = {
Zone.qeynos,
Zone.qeynos2,
Zone.qrg,
Zone.freportn,
Zone.freportw,
Zone.freporte,
Zone.rivervale,
Zone.ecommons,
Zone.erudnint,
Zone.erudnext,
Zone.halas,
Zone.everfrost,
Zone.nro,
Zone.sro,
Zone.neriaka,
Zone.neriakb,
Zone.neriakc,
Zone.qcat,
Zone.oggok,
Zone.grobb,
Zone.gfaydark,
Zone.akanon,
Zone.kaladima,
Zone.felwithea,
Zone.felwitheb,
Zone.kaladimb,
Zone.butcher,
Zone.paineel,
Zone.cabwest,
Zone.cabeast,
Zone.sharvahl,
Zone.poknowledge,
Zone.freeporteast,
Zone.freeportwest,
Zone.northro,
Zone.southro,
Zone.commonlands
};
for _, zone in pairs(voice_zones) do
if zone == zone_id then
e.self:Message(MT.Yellow,
"A mysterious voice whispers to you, \'If you can feel me in your thoughts, know this -- "
.. "something is changing in the world and I reckon you should be a part of it. I do not know much, but I do know "
.. "that in every home city and the wilds there are agents of an organization called the Wayfarers Brotherhood. They "
.. "are looking for recruits . . . If you can hear this message, you are one of the chosen. Rush to your home city, or "
.. "search the West Karanas and Rathe Mountains for a contact if you have been exiled from your home for your deeds, "
.. "and find out more. Adventure awaits you, my friend.\'");
return
end
end
end
function event_combine_validate(e)
-- e.validate_type values = { "check_zone", "check_tradeskill" }
-- criteria exports:
-- ["check_zone"]. = e.zone_id
-- ["check_tradeskill"] = e.tradeskill_id (not active)
if (e.recipe_id == 10344) then
if (e.validate_type:find("check_zone")) then
if (e.zone_id ~= Zone.tipt and e.zone_id ~= Zone.vxed) then
return 1;
end
end
end
return 0;
end
function event_combine_success(e)
if (e.recipe_id == 10904 or e.recipe_id == 10905 or e.recipe_id == 10906 or e.recipe_id == 10907) then
e.self:Message(MT.Default,
"The gem resonates with power as the shards placed within glow unlocking some of the stone's power. "
.. "You were successful in assembling most of the stone but there are four slots left to fill, "
.. "where could those four pieces be?"
);
elseif(e.recipe_id == 10903 or e.recipe_id == 10346 or e.recipe_id == 10334) then
local reward = { };
reward["melee"] = { ["10903"] = 67665, ["10346"] = 67660, ["10334"] = 67653 };
reward["hybrid"] = { ["10903"] = 67666, ["10346"] = 67661, ["10334"] = 67654 };
reward["priest"] = { ["10903"] = 67667, ["10346"] = 67662, ["10334"] = 67655 };
reward["caster"] = { ["10903"] = 67668, ["10346"] = 67663, ["10334"] = 67656 };
local ctype = eq.ClassType(e.self:GetClass());
e.self:SummonItem(reward[ctype][tostring(e.recipe_id)]);
e.self:SummonItem(67704); -- Item: Vaifan's Clockwork Gemcutter Tools
e.self:Message(MT.Default, "Success");
--cleric 1.5
elseif(e.recipe_id == 19460) then
e.self:AddEXP(25000);
e.self:AddAAPoints(5);
e.self:Ding();
e.self:Message(MT.Yellow,'You have gained 5 ability points!');
eq.set_global("cleric_epic","7",5,"F");
--rogue 1.5
elseif(e.recipe_id == 13402 or e.recipe_id == 13403 or e.recipe_id == 13404 or e.recipe_id == 13405) then
e.self:Message(MT.Yellow,"The piece of the metal orb fuses together with the blue diamonds under the intense heat of the forge. As it does, a flurry of images flash through your mind... A ranger and his bear side by side, stoic and unafraid, in a war-torn forest. A bitter tattooed woman with bluish skin wallowing in misery in a waterfront tavern. An endless barrage of crashing thunder and lightning illuminating a crimson brick ampitheater. Two halflings locked in a battle of wits using a checkered board. The images then fade from your mind");
--ranger 1.5 tree
elseif(e.recipe_id ==13412) then
eq.set_global("ranger_epic","3",5,"F");
if(eq.get_zone_short_name()=="jaggedpine") then
e.self:Message(MT.Yellow,"The seed grows rapidly the moment you push it beneath the soil. It appears at first as a mere shoot, but within moments grows into a stout sapling and then into a gigantic tree. The tree is one you've never seen before. It is the coloration and thick bark of a redwood with the thick bole indicative of the species. The tree is, however, far too short and has spindly branches sprouting from it with beautiful flowers that you would expect on a dogwood. You take all of this in at a glance. It takes you a moment longer to realize that the tree is moving.");
eq.spawn2(181222, 0, 0, e.self:GetX()+3,e.self:GetY()+3,e.self:GetZ(),0); -- NPC: Red_Dogwood_Treant
else
e.self:Message(MT.Yellow,"The soil conditions prohibit the seed from taking hold");
e.self:SummonItem(72091); -- Item: Fertile Earth
e.self:SummonItem(62621); -- Item: Senvial's Blessing
e.self:SummonItem(62622); -- Item: Grinbik's Blessing
e.self:SummonItem(62844); -- Item: Red Dogwood Seed
end
--ranger 1.5 final
elseif(e.recipe_id ==13413) then
e.self:AddEXP(25000);
e.self:AddAAPoints(5);
e.self:Ding();
e.self:Message(MT.Yellow,'You have gained 5 ability points!');
eq.set_global("ranger_epic","5",5,"F");
--ranger 2.0
elseif(e.recipe_id ==19914 or e.recipe_id==19915) then
e.self:Message(MT.Yellow,'Very Good. Now we must attune the cage to the specific element we wish to free. You will need two items, one must protect from the element and the other must be able to absorb an incredible amount of that element. This is not a simple task. You must first discover the nature of the spirit that you wish to free and then find such items that will allow you to redirect its power. You must know that each spirit represents a specific area within their element and that is what you must focus on, not their element specifically. For example, Grinbik was an earth spirit, but his area of power was fertility. Senvial was a spirit of Water, but his power was in mist and fog.');
eq.set_global("ranger_epic","8",5,"F");
elseif(e.recipe_id ==19916) then
e.self:Message(MT.Yellow,"The Red Dogwood Treant speaks to you from within your sword. 'Well done. This should allow me to free a spirit with power over cold and ice. Now you need to find the power that binds the spirit and unleash it where that spirit is bound.'");
elseif(e.recipe_id ==19917) then
if(eq.get_zone_short_name()=="anguish") then
eq.spawn2(317113, 0, 0, e.self:GetX(),e.self:GetY(),e.self:GetZ(),0); -- NPC: #Oshimai_Spirit_of_the_High_Air
end
-- paladin 1.5 final
elseif(e.recipe_id ==19880) then
e.self:AddEXP(25000);
e.self:AddAAPoints(5);
e.self:Ding();
e.self:Message(MT.Yellow,'You have gained 5 ability points!');
eq.set_global("paladin_epic","8",5,"F");
e.self:Message(MT.Gray,"As the four soulstones come together, a soft blue light eminates around the dark sword. The soulstones find themselves at home within the sword. A flash occurs and four voices in unison speak in your mind, 'Thank you for saving us and giving us a purpose again. You are truly our savior and our redeemer, and we shall serve you from now on. Thank you, noble knight!")
--bard 1.5 final
elseif(e.recipe_id == 19882) then
e.self:AddEXP(25000);
e.self:AddAAPoints(5);
e.self:Ding();
e.self:Message(MT.Yellow,'You have gained 5 ability points!');
eq.set_global("bard15","6",5,"F");
--druid 1.5 feerrott
elseif(e.recipe_id == 19888) then
if(eq.get_zone_short_name()=="feerrott") then
eq.spawn2(47209, 0, 0, e.self:GetX()+10,e.self:GetY()+10,e.self:GetZ(),0); -- NPC: corrupted_spirit
e.self:Message(MT.White,"compelled spirit screams as his essences is forced back into the world of the living. 'What is this? Where am I? Who are you? What do you want from me?");
else
e.self:SummonItem(62827); -- Item: Mangled Head
e.self:SummonItem(62828); -- Item: Animating Heads
e.self:SummonItem(62836); -- Item: Soul Stone
end
-- druid 1.5 final
elseif(e.recipe_id ==19892) then
e.self:AddAAPoints(5);
e.self:Ding();
e.self:Message(MT.Yellow,'You have gained 5 ability points!');
eq.set_global("druid_epic","8",5,"F");
e.self:SendMarqueeMessage(MT.Yellow, 510, 1, 100, 10000, "You plant the Mind Crystal and the Seed of Living Brambles in the pot. The pot grows warm and immediately you see a vine sprouting from the soil. The vine continues to grow at a tremendous rate. Brambles grow into the heart of the crystal where the core impurity is and split it. They continue to grow at an astounding speed and soon burst the pot and form the Staff of Living Brambles");
--druid 2.0 sub final
elseif(e.recipe_id ==19908) then
if(eq.get_zone_short_name()=="anguish") then
eq.spawn2(317115, 0, 0, e.self:GetX()+3,e.self:GetY()+3,e.self:GetZ(),0); -- NPC: #Yuisaha
e.self:SummonItem(62883); -- Item: Essence of Rainfall
e.self:SummonItem(62876); -- Item: Insulated Container
else
e.self:Message(MT.Yellow,"The rain spirit cannot be reached here");
e.self:SummonItem(47100); -- Item: Globe of Discordant Energy
e.self:SummonItem(62876); -- Item: Insulated Container
e.self:SummonItem(62878); -- Item: Frozen Rain Spirit
e.self:SummonItem(62879); -- Item: Everburning Jagged Tree Limb
end
--druid 2.0 final
elseif(e.recipe_id ==19909) then
e.self:AddEXP(50000);
e.self:AddAAPoints(10);
e.self:Ding();
e.self:Message(MT.Yellow,'You have gained 10 ability points!');
eq.set_global("druid_epic","13",5,"F");
--e.self:SendMarqueeMessage(MT.Yellow, 510, 1, 100, 10000, "You plant the Mind Crystal and the Seed of Living Brambles in the pot. The pot grows warm and immediately you see a vine sprouting from the soil. The vine continues to grow at a tremendous rate. Brambles grow into the heart of the crystal where the core impurity is and split it. They continue to grow at an astounding speed and soon burst the pot and form the Staff of Living Brambles");
--warrior 2.0
elseif(e.recipe_id ==19902) then
e.self:AddEXP(50000);
e.self:AddAAPoints(10);
e.self:Ding();
e.self:Message(MT.Yellow,'You have gained 10 ability points!');
eq.set_global("warrior_epic","21",5,"F");
-- CLR 2.0
elseif (e.recipe_id == 19893) then
e.self:Message(MT.Red, "Omat should probably see this.");
--ench 2.0
elseif (e.recipe_id == 19919) then
eq.set_global("ench_epic","9",5,"F");
e.self:Message(MT.Yellow,"Your Oculus of Persuasion gleams with a blinding light for a moment, dimming quickly to its previous understated beauty. The light has left an image burned into your mind, a strangely tattooed woman chanting by a waterfall.");
--ench 2.0 final
elseif (e.recipe_id == 19920) then
e.self:Message(MT.Yellow,"The discordant energy shoots through the staff, sending a shower of sparks through the air. The crystal shatters before you, and as the sparks fade away you notice the changes in your staff.");
e.self:AddEXP(50000);
e.self:AddAAPoints(10);
e.self:Ding();
e.self:Message(MT.Yellow,'You have gained 10 ability points!');
eq.set_global("ench_epic","10",5,"F");
--pal 2.0 final
elseif (e.recipe_id == 19925) then
e.self:Message(MT.Yellow,"As you combine all six tokens in the scabbard with Redemption, you feel a tugging at your soul. An energy flows through you as you feel the virtues of your inner self being tugged and tempered into the weapon. For a second you feel drained, but now that feeling has subsided. A final flash of light occurs and a new sword is tempered; Nightbane, Sword of the Valiant");
e.self:AddEXP(50000);
e.self:AddAAPoints(10);
e.self:Ding();
e.self:Message(MT.Yellow,'You have gained 10 ability points!');
eq.set_global("paladin_epic","11",5,"F");
eq.delete_global("paladin_epic_mmcc");
eq.delete_global("paladin_epic_hollowc");
elseif (e.recipe_id == 2182) then -- Pumpkin Pie
if (eq.is_task_activity_active(8013, 0)) then -- The Hungry Halfling
eq.update_task_activity(8013, 0, 1);
end
elseif (e.recipe_id == 2181) then -- Pumpkin Bread
if (eq.is_task_activity_active(8013, 1)) then -- The Hungry Halfling
eq.update_task_activity(8013, 1, 1);
end
elseif (e.recipe_id == 7811) then -- Spiced Pumpkin Cider
if (eq.is_task_activity_active(8013, 2)) then -- The Hungry Halfling
eq.update_task_activity(8013, 2, 1);
end
elseif (e.recipe_id == 2183) then -- Pumpkin Shake
if (eq.is_task_activity_active(8013, 3)) then -- The Hungry Halfling
eq.update_task_activity(8013, 3, 1);
end
end
end
function event_command(e)
return eq.DispatchCommands(e);
end
--[[ the main key is the ID of the AA
-- the first set is the age required in seconds
-- the second is if to ignore the age and grant anyways live test server style
-- the third is enabled
--]]
vet_aa = {
[481] = { 31536000, true, true}, -- Lesson of the Devote 1 yr
[482] = { 63072000, true, true}, -- Infusion of the Faithful 2 yr
[483] = { 94608000, true, true}, -- Chaotic Jester 3 yr
[484] = {126144000, true, true}, -- Expedient Recovery 4 yr
[485] = {157680000, true, true}, -- Steadfast Servant 5 yr
[486] = {189216000, true, true}, -- Staunch Recovery 6 yr
[487] = {220752000, true, true}, -- Intensity of the Resolute 7 yr
[511] = {252288000, true, true}, -- Throne of Heroes 8 yr
[2000] = {283824000, true, true}, -- Armor of Experience 9 yr
[8081] = {315360000, true, true}, -- Summon Resupply Agent 10 yr
[8130] = {346896000, true, true}, -- Summon Clockwork Banker 11 yr
[453] = {378432000, true, true}, -- Summon Permutation Peddler 12 yr
[182] = {409968000, true, true}, -- Summon Personal Tribute Master 13 yr
[600] = {441504000, true, true}, -- Blessing of the Devoted 14 yr
}
function event_connect(e)
grant_veteran_aa(e)
don.fix_invalid_faction_state(e.self)
end
function grant_veteran_aa(e)
if not eq.is_dragons_of_norrath_enabled() then
return
end
local age = e.self:GetAccountAge();
for aa, v in pairs(vet_aa) do
if v[3] and (v[2] or age >= v[1]) then
e.self:GrantAlternateAdvancementAbility(aa, 1)
end
end
end
--[[
0 /*13855*/ Skill1HBlunt = 0,
1 /*13856*/ Skill1HSlashing,
2 /*13857*/ Skill2HBlunt,
3 /*13858*/ Skill2HSlashing,
4 /*13859*/ SkillAbjuration,
5 /*13861*/ SkillAlteration,
6 /*13862*/ SkillApplyPoison, X
7 /*13863*/ SkillArchery, X
8 /*13864*/ SkillBackstab,
9 /*13866*/ SkillBindWound,
10 /*13867*/ SkillBash,
11 /*13871*/ SkillBlock,
12 /*13872*/ SkillBrassInstruments,
13 /*13874*/ SkillChanneling,
14 /*13875*/ SkillConjuration,
15 /*13876*/ SkillDefense,
16 /*13877*/ SkillDisarm,
17 /*13878*/ SkillDisarmTraps,
18 /*13879*/ SkillDivination,
19 /*13880*/ SkillDodge,
20 /*13881*/ SkillDoubleAttack,
21 /*13882*/ SkillDragonPunch,
21 /*13924*/ SkillTailRake = SkillDragonPunch, // Iksar Monk equivilent
22 /*13883*/ SkillDualWield,
23 /*13884*/ SkillEagleStrike,
24 /*13885*/ SkillEvocation,
25 /*13886*/ SkillFeignDeath,
26 /*13888*/ SkillFlyingKick,
27 /*13889*/ SkillForage, X
28 /*13890*/ SkillHandtoHand,
29 /*13891*/ SkillHide,
30 /*13893*/ SkillKick,
31 /*13894*/ SkillMeditate,
32 /*13895*/ SkillMend,
33 /*13896*/ SkillOffense,
34 /*13897*/ SkillParry,
35 /*13899*/ SkillPickLock, X
36 /*13900*/ Skill1HPiercing, // Changed in RoF2(05-10-2013)
37 /*13903*/ SkillRiposte,
38 /*13904*/ SkillRoundKick,
39 /*13905*/ SkillSafeFall,
40 /*13906*/ SkillSenseHeading, X
41 /*13908*/ SkillSinging,
42 /*13909*/ SkillSneak,
43 /*13910*/ SkillSpecializeAbjure, // No idea why they truncated this one..especially when there are longer ones...
44 /*13911*/ SkillSpecializeAlteration,
45 /*13912*/ SkillSpecializeConjuration,
46 /*13913*/ SkillSpecializeDivination,
47 /*13914*/ SkillSpecializeEvocation,
48 /*13915*/ SkillPickPockets, X
49 /*13916*/ SkillStringedInstruments,
50 /*13917*/ SkillSwimming, X
51 /*13919*/ SkillThrowing,
52 /*13920*/ SkillTigerClaw,
53 /*13921*/ SkillTracking, X
54 /*13923*/ SkillWindInstruments,
55 /*13854*/ SkillFishing, X
56 /*13853*/ SkillMakePoison, X
57 /*13852*/ SkillTinkering, X
58 /*13851*/ SkillResearch, X
59 /*13850*/ SkillAlchemy, X
60 /*13865*/ SkillBaking, X
61 /*13918*/ SkillTailoring, X
62 /*13907*/ SkillSenseTraps, X
63 /*13870*/ SkillBlacksmithing, X
64 /*13887*/ SkillFletching, X
65 /*13873*/ SkillBrewing, X
66 /*13860*/ SkillAlcoholTolerance, X
67 /*13868*/ SkillBegging,
68 /*13892*/ SkillJewelryMaking, X
69 /*13901*/ SkillPottery, X
70 /*13898*/ SkillPercussionInstruments,
71 /*13922*/ SkillIntimidation,
72 /*13869*/ SkillBerserking,
73 /*13902*/ SkillTaunt,
74 /*05837*/ SkillFrenzy,
75 /*03670*/ SkillRemoveTraps, X
76 /*13049*/ SkillTripleAttack,
]]--
function event_level_up(e)
local free_skills = {0,1,2,3,4,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34,36,37,38,39,41,42,43,44,45,46,47,49,51,52,54,67,70,71,72,73,74,76};
for k,v in ipairs(free_skills) do
if ( e.self:MaxSkill(v) > 0 and e.self:GetRawSkill(v) < 1 and e.self:CanHaveSkill(v) ) then
e.self:SetSkill(v, 1);
end
end
if e.self:GetLevel() == 5 then
eq.popup("", "<c \"#F0F000\">Welcome to level 5.</c><br><br>You have just been granted a new ability called '<c \"#F0F000\">Origin</c>' which allows you to teleport back to your starting city.<br><br>Open the Alternate Advancement window by pressing the '<c \"#F0F000\">V</c>' key, look in the '<c \"#F0F000\">General' tab</c>, and find the '<c \"#F0F000\">Origin</c>' ability and select it.<br><br>Now press the '<c \"#F0F000\">Hotkey</c>' button to create a hotkey you can place on your hot bar.");
end
if e.self:GetLevel() == 10 and eq.is_dragons_of_norrath_enabled() then
eq.popup("", "<c \"#F0F000\">Welcome to level 10.</c><br><br>You are now able to begin the new player armor and weapon quests. Speak with Castlen and Barrenzin or V`Lynn Renloe in the <c \"#66CCFF\">Plane of Knowledge</c> to begin. One additional quest will become available to you at each level past level 10, so be sure to check back with these NPCs as you continue to gain experience.");
end
end
test_items = {
[Class.WARRIOR] = {38000, 38020}, -- Warrior
[Class.CLERIC] = {38168, 38188}, -- Cleric
[Class.PALADIN] = {38084, 38104}, -- Paladin
[Class.RANGER] = {38105, 38125}, -- Ranger
[Class.SHADOWKNIGHT] = {38063, 38083}, -- Shadowknight
[Class.DRUID] = {38189, 38209}, -- Druid
[Class.MONK] = {38021, 38041}, -- Monk
[Class.BARD] = {38147, 38167}, -- Bard
[Class.ROGUE] = {38042, 38062}, -- Rogue
[Class.SHAMAN] = {38210, 38230}, -- Shaman
[Class.NECROMANCER] = {38294, 38314}, -- Necromancer
[Class.WIZARD] = {38231, 38251}, -- Wizard
[Class.MAGICIAN] = {38252, 38272}, -- Magician
[Class.ENCHANTER] = {38273, 38293}, -- Enchanter
[Class.BEASTLORD] = {38126, 38146}, -- Beastlord
[Class.BERSERKER] = {38315, 38332}, -- Berserker
}
function event_test_buff(e)
if (e.self:GetLevel() < 25) then
e.self:SetLevel(25)
eq.scribe_spells(25,1)
eq.train_discs(25,1)
for class_id, v in pairs(test_items) do
if e.self:GetClass() == class_id then
for item_id = v[1], v[2] do
e.self:SummonItem(item_id);
end
end
end
end
end
function event_task_complete(e)
don.on_task_complete(e.self, e.task_id)
end