Compare commits
1 commit
master
...
trust/lua_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b830fea185 |
203 changed files with 5249 additions and 3618 deletions
|
|
@ -60,8 +60,6 @@ function OMM_Spawn(e)
|
|||
reset_countdown = false;
|
||||
banished_hp = 30;
|
||||
e.self:SetAppearance(1); -- sitting
|
||||
e.self:SetOOCRegen(0);
|
||||
e.self:ModifyNPCStat("hp_regen", "0");
|
||||
e.self:SetSpecialAbility(SpecialAbility.immune_magic, 1);
|
||||
e.self:SetSpecialAbility(SpecialAbility.immune_melee, 1);
|
||||
e.self:SetSpecialAbility(SpecialAbility.immune_aggro, 1);
|
||||
|
|
@ -88,7 +86,6 @@ function OMM_Say(e)
|
|||
e.self:SetSpecialAbility(SpecialAbility.immune_aggro_on, 0);
|
||||
e.self:SetSpecialAbility(SpecialAbility.no_harm_from_client, 0);
|
||||
e.self:AddToHateList(e.other,1);
|
||||
e.self:ModifyNPCStat("hp_regen", "10000");
|
||||
local dz = eq.get_expedition()
|
||||
if dz.valid then
|
||||
dz:SetLocked(true)
|
||||
|
|
@ -219,7 +216,7 @@ function OMM_Timer(e)
|
|||
gaze_client:Message(MT.Yellow,"You feel a gaze of deadly power focusing on you.");
|
||||
eq.set_timer("mmgaze_cast",10*1000);
|
||||
else
|
||||
eq.debug("Invalid MMGaze Client: " .. os.date("!%c"));
|
||||
-- eq.debug("Invalid MMGaze Client: " .. os.date("!%c"));
|
||||
end
|
||||
elseif e.timer == "mmgaze_cast" then
|
||||
eq.stop_timer("mmgaze_cast");
|
||||
|
|
@ -234,7 +231,7 @@ function OMM_Timer(e)
|
|||
e.self:CastSpell(5685, gaze_client:GetID()); -- Mata Muram's Gaze
|
||||
end
|
||||
else
|
||||
eq.debug("Invalid MMGaze Cast Client: " .. os.date("!%c"));
|
||||
-- eq.debug("Invalid MMGaze Cast Client: " .. os.date("!%c"));
|
||||
end
|
||||
elseif e.timer == "reengage" then
|
||||
eq.zone_emote(MT.Yellow, "Mata Muram roars in anger,'You dare use my own magic against me!'");
|
||||
|
|
@ -261,7 +258,7 @@ function OMM_Timer(e)
|
|||
eq.spawn2(317117,0,0,clientx,clienty,clientz,clienth):AddToHateList(buzz_client,1);
|
||||
eq.spawn2(317117,0,0,clientx,clienty,clientz,clienth):AddToHateList(buzz_client,1);
|
||||
else
|
||||
eq.debug("Invalud Buzz Client: " .. os.date("!%c"));
|
||||
-- eq.debug("Invalud Buzz Client: " .. os.date("!%c"));
|
||||
end
|
||||
elseif e.timer == "banish" then
|
||||
-- eq.debug("banish end: " .. os.date("!%c"));
|
||||
|
|
@ -317,10 +314,6 @@ function OMM_Timer(e)
|
|||
event_started = false;
|
||||
banished_raid = false;
|
||||
reenable_summon = false;
|
||||
local dz = eq.get_expedition();
|
||||
if dz.valid then
|
||||
dz:SetLocked(false);
|
||||
end
|
||||
eq.stop_timer("banish_phase2");
|
||||
eq.stop_timer("enable_summon");
|
||||
eq.depop_all(317122);
|
||||
|
|
@ -375,64 +368,18 @@ function OMM_Death(e)
|
|||
eq.zone_emote(MT.Yellow,"The walls of Anguish tremble, you can feel the world shaking your bones. For a brief moment you think you see a smile flash across Mata Muram's face, and as the last breath escapes his lungs you hear a faint voice, 'There are worlds other than these...");
|
||||
eq.world_emote(MT.Yellow, "The world trembles around you. All of Discord seems to howl in pain, in the distance you hear dragorn shouting for their freedom from Mata Muram's terror.");
|
||||
|
||||
eq.signal(317116,999999); -- NPC: zone_status
|
||||
|
||||
local target = e.other;
|
||||
|
||||
if e.other:IsPet() then --Pet check routine
|
||||
target = e.other:GetOwner(); --If pet is at top of hate list then target will change to owner
|
||||
end
|
||||
|
||||
if eq.get_data("Omens_OMM_First") == "" then
|
||||
eq.world_emote(MT.Magenta,"Congratulations to [".. eq.get_guild_name_by_id(eq.get_guild_id_by_char_id(target:CastToClient():CharacterID())) .."] for being the first guild to kill Overlord Mata Muram and completing the Omens of War Expansion.");
|
||||
eq.set_data("Omens_OMM_First", "1");
|
||||
else
|
||||
e.self:DeathNotification(e);
|
||||
|
||||
local data_bucket = ("OOW_OMM_Kill_Timer");
|
||||
local dz = target:CastToClient():GetExpedition();
|
||||
local dz_time = eq.seconds("6h");
|
||||
local remaining_time = 0;
|
||||
local guild_id = eq.get_guild_id_by_char_id(target:CastToClient():CharacterID());
|
||||
local record_kill_exists = false;
|
||||
local record_kill = false;
|
||||
local record_kill_guild_id = 0;
|
||||
local record_kill_seconds = 9999999;
|
||||
|
||||
if dz.valid then
|
||||
remaining_time = dz:GetSecondsRemaining();
|
||||
end
|
||||
|
||||
local total_time_seconds = dz_time - remaining_time;
|
||||
|
||||
if eq.get_data(data_bucket) ~= "" then -- Kill Timer Recorded
|
||||
local temp = eq.get_data(data_bucket);
|
||||
s = eq.split(temp, ',');
|
||||
|
||||
record_kill_guild_id = tonumber(s[1]); -- Current Fastest Guild ID
|
||||
record_kill_seconds = tonumber(s[2]); -- Current Fastest Time
|
||||
|
||||
record_kill_exists = true;
|
||||
|
||||
if record_kill_seconds > total_time_seconds then -- This run was a record!
|
||||
eq.set_data(data_bucket, guild_id..","..total_time_seconds);
|
||||
record_kill = true;
|
||||
end
|
||||
else -- No Kill Timer Recorded
|
||||
eq.set_data(data_bucket, guild_id..","..total_time_seconds);
|
||||
end
|
||||
|
||||
eq.world_emote(MT.Magenta,"Congratulations to [".. eq.get_guild_name_by_id(guild_id) .."] for killing Overlord Mata Muram and saving all denizens of Kuua from the invaders from discord. Total Time from Zone Start: ".. eq.SecondsToClockHours(total_time_seconds));
|
||||
|
||||
if record_kill_exists then
|
||||
eq.world_emote(MT.Lime, "Citadel of Anguish: Current Zone Speed Record: Guild = ".. eq.get_guild_name_by_id(record_kill_guild_id) .." - Time To Complete = ".. eq.SecondsToClockHours(record_kill_seconds));
|
||||
end
|
||||
|
||||
if record_kill then
|
||||
eq.world_emote(MT.LightBlue, "This run was a new record! Congratulations!");
|
||||
end
|
||||
eq.world_emote(MT.Magenta,"Congratulations to [".. eq.get_guild_name_by_id(eq.get_guild_id_by_char_id(target:CastToClient():CharacterID())) .."] for killing Overlord Mata Muram and saving all denizens of Kuua from the invaders from discord.");
|
||||
end
|
||||
-- e.self:CameraEffect(1000,8, e.self, true);
|
||||
eq.signal(317116,999999); -- NPC: zone_status
|
||||
end
|
||||
|
||||
function OMM_Signal(e)
|
||||
|
|
|
|||
|
|
@ -169,37 +169,37 @@ sub EVENT_ITEM {
|
|||
if(defined $qglobals{bot_spawn_limit} && (quest::spawnbotcount() > $qglobals{bot_spawn_limit})) {
|
||||
my $success = 0;
|
||||
if(($ulevel >= $firstbotlevel) && ($qglobals{bot_spawn_limit} <= 0)) {
|
||||
if(quest::handin({"platinum" => $firstbotcost, 13475 => 4})) { #baking
|
||||
if(($platinum == $firstbotcost) && plugin::check_handin(\%itemcount, 13475 => 4)) { #baking
|
||||
$success = $qglobals{bot_spawn_limit}+1;
|
||||
}
|
||||
}
|
||||
elsif(($ulevel >= $secondbotlevel) && ($qglobals{bot_spawn_limit} <= 1)) {
|
||||
if(quest::handin({"platinum" => $secondbotcost, 13037 => 4})) { #brewing
|
||||
if(($platinum == $secondbotcost) && plugin::check_handin(\%itemcount, 13037 => 4)) { #brewing
|
||||
$success = $qglobals{bot_spawn_limit}+1;
|
||||
}
|
||||
}
|
||||
elsif(($ulevel >= $thirdbotlevel) && ($qglobals{bot_spawn_limit} <= 2)) {
|
||||
if(quest::handin({"platinum" => $thirdbotcost, 16939 => 4})) { #pottery
|
||||
if(($platinum == $thirdbotcost) && plugin::check_handin(\%itemcount, 16939 => 4)) { #pottery
|
||||
$success = $qglobals{bot_spawn_limit}+1;
|
||||
}
|
||||
}
|
||||
elsif(($ulevel >= $fourthbotlevel) && ($qglobals{bot_spawn_limit} <= 3)) {
|
||||
if(quest::handin({"platinum" => $fourthbotcost, 2204 => 4})) { #tailoring/smithing
|
||||
if(($platinum == $fourthbotcost) && plugin::check_handin(\%itemcount, 2204 => 4)) { #tailoring/smithing
|
||||
$success = $qglobals{bot_spawn_limit}+1;
|
||||
}
|
||||
}
|
||||
elsif(($ulevel >= $fifthbotlevel) && ($qglobals{bot_spawn_limit} <= 4)) {
|
||||
if(quest::handin({"platinum" => $fifthbotcost, 3061 => 4})) { #smithing
|
||||
if(($platinum == $fifthbotcost) && plugin::check_handin(\%itemcount, 3061 => 4)) { #smithing
|
||||
$success = $qglobals{bot_spawn_limit}+1;
|
||||
}
|
||||
}
|
||||
elsif(($ulevel >= $nextbotlevel) && ($qglobals{bot_spawn_limit} <= 5)) {
|
||||
if(quest::handin({"platinum" => $nextbotcost, 8689 => 4})) { #fletching
|
||||
if(($platinum == $nextbotcost) && plugin::check_handin(\%itemcount, 8689 => 4)) { #fletching
|
||||
$success = $qglobals{bot_spawn_limit}+1;
|
||||
}
|
||||
}
|
||||
elsif(($ulevel >= $nextbotlevel) && ($qglobals{bot_spawn_limit} >= 6)) {
|
||||
if((quest::handin({"platinum" => $nextextracost}) || (quest::handin({"platinum" => $nextbotcost}))) && (quest::handin({8689 => 4}))) {
|
||||
if(($platinum == $nextextracost) || (($platinum == $nextbotcost) && plugin::check_handin(\%itemcount, 8689 => 4))) {
|
||||
$success = $qglobals{bot_spawn_limit}+1;
|
||||
}
|
||||
}
|
||||
|
|
@ -212,7 +212,18 @@ sub EVENT_ITEM {
|
|||
$client->Message(6,"You have $success out of $sbcount possible Individuals.");
|
||||
$success = 0;
|
||||
}
|
||||
else {
|
||||
if($platinum != 0 || $gold !=0 || $silver != 0 || $copper != 0) {
|
||||
quest::givecash($copper, $silver, $gold, $platinum);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if($platinum != 0 || $gold !=0 || $silver != 0 || $copper != 0) {
|
||||
quest::givecash($copper, $silver, $gold, $platinum);
|
||||
}
|
||||
}
|
||||
plugin::return_items(\%itemcount);
|
||||
quest::settimer("face", 45);
|
||||
}
|
||||
|
||||
|
|
@ -235,4 +246,5 @@ sub EVENT_SIGNAL {
|
|||
}
|
||||
}
|
||||
}
|
||||
# END of FILE Zone:bazaar -- Aediles_Thrall.pl
|
||||
# END of FILE Zone:bazaar -- Aediles_Thrall.pl
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,6 @@ function event_combat(e)
|
|||
end
|
||||
end
|
||||
function event_death_complete(e)
|
||||
eq.unique_spawn(301078,0,0,-1279,168,-924,212); -- NPC: #Keetra_the_Lost
|
||||
eq.spawn2(301078,0,0,-1279,168,-924,212); -- NPC: #Keetra_the_Lost
|
||||
end
|
||||
-- spawn rog 2.0 mob
|
||||
|
|
|
|||
|
|
@ -31,6 +31,6 @@ function event_combat(e)
|
|||
end
|
||||
end
|
||||
function event_death_complete(e)
|
||||
eq.unique_spawn(301078,0,0,-1279,168,-924,212); -- NPC: #Keetra_the_Lost
|
||||
eq.spawn2(301078,0,0,-1279,168,-924,212); -- NPC: #Keetra_the_Lost
|
||||
end
|
||||
-- spawn rog 2.0 mob
|
||||
|
|
|
|||
|
|
@ -17,11 +17,19 @@ sub EVENT_SAY {
|
|||
}
|
||||
|
||||
sub EVENT_ITEM {
|
||||
if (quest::handin({22815 => 1, "gold" => 10000})) { #Check for Section of Lodizal's Shell and 10000 gold
|
||||
my $cash = $copper + $silver * 10 + $gold * 100 + $platinum * 1000;
|
||||
|
||||
if (($cash >= 1000000) && plugin::check_handin(\%itemcount, 22815=> 1)) { #Check for 10000 gold
|
||||
quest::emote("skillfully crafts the section of Lodizal's shell into the shape of a shield. He then attaches sturdy cured walrus hide leather straps to the inner side of the shield and inscribes intricate glowing runes on the shield's face. When he is finished, he hands you the shield and claps loudly.");
|
||||
quest::summonitem(22816); # Item: Lodizal Shell Shield
|
||||
quest::exp(150000);
|
||||
quest::faction(432, 30); # Faction: Othmir
|
||||
quest::faction(431, -60); # Faction: Ulthork
|
||||
}
|
||||
else {
|
||||
if ($cash) {
|
||||
quest::say("Sorry stranger, but that is not enough to barter with.");
|
||||
}
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ sub EVENT_TIMER {
|
|||
quest::spawn2(quest::ChooseRandom(200003,200004),0,0,$x,$y,$z,$h); # NPC(s): Corrupted_Pusling (200003), Foul_Pusling (200004)
|
||||
quest::spawn2(quest::ChooseRandom(200003,200004),0,0,$x,$y,$z,$h); # NPC(s): Corrupted_Pusling (200003), Foul_Pusling (200004)
|
||||
quest::spawn2(quest::ChooseRandom(200003,200004),0,0,$x,$y,$z,$h); # NPC(s): Corrupted_Pusling (200003), Foul_Pusling (200004)
|
||||
quest::unique_spawn(200059,0,0,$x,$y,$z,$h); # NPC: Overlord_Banord_Paffa
|
||||
quest::spawn2(200059,0,0,$x,$y,$z,$h); # NPC: Overlord_Banord_Paffa
|
||||
|
||||
quest::depop_withtimer();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +1,5 @@
|
|||
-- he is done evolving
|
||||
function event_spawn(e)
|
||||
eq.set_timer('depop', 14400 * 1000); -- depop after 4 hours to reset cycle
|
||||
end
|
||||
|
||||
function event_timer(e)
|
||||
if (e.timer == 'depop') then
|
||||
eq.update_spawn_timer(43327, 14400 * 1000); -- 4 hours for new cycle
|
||||
eq.depop();
|
||||
end
|
||||
end
|
||||
|
||||
function event_death_complete(e)
|
||||
eq.update_spawn_timer(43327, 14400 * 1000); -- 4 hours for new cycle
|
||||
end
|
||||
eq.update_spawn_timer(43327, 3600 * 1000);
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,16 +1,17 @@
|
|||
-- This script takes much longer on live but we reset every day, so its adapted to happen faster on PEQ
|
||||
-- Spawngroup: 43327
|
||||
|
||||
function event_spawn(e)
|
||||
eq.set_timer('evolve', 14400 * 1000); -- 4 hours
|
||||
eq.set_timer('evolve', 3600 * 1000);
|
||||
end
|
||||
|
||||
function event_timer(e)
|
||||
if (e.timer == 'evolve') then
|
||||
eq.unique_spawn(302074,108,0,e.self:GetX(),e.self:GetY(),e.self:GetZ(),e.self:GetHeading()); -- NPC: #Elder_Murkglider_Devourer
|
||||
eq.spawn2(302074,108,0,e.self:GetX(),e.self:GetY(),e.self:GetZ(),e.self:GetHeading()); -- NPC: #Elder_Murkglider_Devourer
|
||||
eq.depop();
|
||||
end
|
||||
end
|
||||
|
||||
function event_death_complete(e)
|
||||
eq.update_spawn_timer(43327, 14400 * 1000); -- 4 hours
|
||||
eq.update_spawn_timer(43327, 3600 * 1000);
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
-- This script takes much longer on live but we reset every day, so its adapted to happen faster on PEQ
|
||||
-- Spawngroup: 43327
|
||||
|
||||
function event_spawn(e)
|
||||
eq.set_timer('evolve', 14400 * 1000); -- 4 hours
|
||||
eq.set_timer('evolve', 3600 * 1000);
|
||||
end
|
||||
|
||||
function event_timer(e)
|
||||
if (e.timer == 'evolve') then
|
||||
eq.unique_spawn(302088,108,0,e.self:GetX(),e.self:GetY(),e.self:GetZ(),e.self:GetHeading()); -- NPC: #Young_Murkglider_Devourer
|
||||
eq.spawn2(302088,108,0,e.self:GetX(),e.self:GetY(),e.self:GetZ(),e.self:GetHeading()); -- NPC: #Young_Murkglider_Devourer
|
||||
eq.depop();
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,16 +1,17 @@
|
|||
-- This script takes much longer on live but we reset every day, so its adapted to happen faster on PEQ
|
||||
-- Spawngroup: 43327
|
||||
|
||||
function event_spawn(e)
|
||||
eq.set_timer('evolve', 14400 * 1000); -- 4 hours
|
||||
eq.set_timer('evolve', 3600 * 1000);
|
||||
end
|
||||
|
||||
function event_timer(e)
|
||||
if (e.timer == 'evolve') then
|
||||
eq.unique_spawn(302078,108,0,e.self:GetX(),e.self:GetY(),e.self:GetZ(),e.self:GetHeading()); -- NPC: #Mature_Murkglider_Devourer
|
||||
eq.spawn2(302078,108,0,e.self:GetX(),e.self:GetY(),e.self:GetZ(),e.self:GetHeading()); -- NPC: #Mature_Murkglider_Devourer
|
||||
eq.depop();
|
||||
end
|
||||
end
|
||||
|
||||
function event_death_complete(e)
|
||||
eq.update_spawn_timer(43327, 14400 * 1000); -- 4 hours
|
||||
eq.update_spawn_timer(43327, 3600 * 1000);
|
||||
end
|
||||
|
|
|
|||
|
|
@ -6,43 +6,45 @@ function event_spawn(e)
|
|||
end
|
||||
|
||||
function event_enter(e)
|
||||
if (e.other:HasItem(18725)) then
|
||||
if(e.other:HasItem(18725)) then
|
||||
e.other:Message(MT.Yellow,"Weligon Steelherder tells you, 'Greetings, A young recruit perhaps? I am Weligon Steelherder, Guild Master of the Deepwater Knights. Read the note in your inventory and then hand it to me when you are ready to begin your training. Truth awaits!'");
|
||||
end
|
||||
end
|
||||
|
||||
function event_say(e)
|
||||
if (e.message:findi("hail")) then
|
||||
e.self:Say("Hail, " .. e.other:GetName() .. "! This is the Deepwater Temple. Here you shall find the wisdom and courage of Prexus, the Ocean Lord. I am glad to see you have an interest. Forgive me if I cut our conversation short, but I have many [Deepwater tasks] to complete.");
|
||||
elseif (e.other:GetFaction(e.self) < 4) then -- Amiable or better
|
||||
if (e.message:findi("deepwater tasks")) then
|
||||
e.self:Say("We here at the Deepwater Temple must tend to the [Peacekeeper battlestaff] and the [Deepwater harpoon] as well as other duties such as [ocean protection]. There is always something we must do.");
|
||||
elseif (e.message:findi("deepwater harpoon")) then
|
||||
e.self:Say("We do not award the Deepwater harpoon to just any paladin. Nobility is all well and good, but you must still prove yourself. We have heard rumors of a very distressing matter. Perhaps it is your calling. Are you ready to [prove allegiance to Erudin] and earn the Deepwater harpoon?");
|
||||
elseif (e.message:findi("prove allegiance to Erudin")) then
|
||||
e.self:Say("Yes, you are ready. We have heard rumors of a great bridge which will connect Antonica with Odus!! This must not happen! We must shield ourselves from the savage and evil ways of the other races. They say that a list exists. A list of three grand architects who wish to see this bridge erected. You will venture to Qeynos and find the list, then exterminate these three men. Return the list along with their heads and the Deepwater Harpoon is yours. Go!!");
|
||||
elseif (e.message:findi("peacekeeper battlestaff")) then
|
||||
e.self:Say("Every sentinel in Erudin carries a High Guard battlestaff. The creation of these weapons is the duty of the Deepwater Temple and the Temple of Divine Light. Our portion of the task is to send young members to [collect the Pearls of Odus]. These are imbedded into the staff and used to store mystical power.");
|
||||
elseif (e.message:findi("ocean protection")) then
|
||||
e.self:Say("In the name of Prexus, we are sworn to protect all ocean creatures. We have heard reports of a shark carrying a deadly malady. We believe she is pregnant. If she delivers her young to the ocean, it will endanger all other creatures. We need to find a young paladin to [hunt the diseased shark].");
|
||||
elseif (e.message:findi("hunt the diseased shark")) then
|
||||
e.self:Say("Ah, yes! Take this bag with you. When you have collected the remains of the diseased shark and no fewer than three of her young in it, combine them in it and return it to me. Then, you shall get your reward.");
|
||||
e.other:SummonItem(17938); -- Item: Empty Shark Bag
|
||||
elseif (e.message:findi("collect the pearls of odus")) then
|
||||
e.self:Say("Then venture to the harbor of Erudin. There, you shall dive into the shark-infested water and search for the Pearls of Odus. They lie upon the grounds of our waters. Fill the bag I have given you, combine it, and return it to me. Good luck.");
|
||||
e.other:SummonItem(17939); -- Item: Empty Bag
|
||||
elseif (e.message:findi("harpoon no more")) then
|
||||
e.self:Say("The Deepwater harpoon's distribution has been restricted by order of the High Council. The last one awarded was to an outsider, the brave and noble paladin, Sentry Xyrin. She hailed from the Temple of Marr.");
|
||||
if(e.message:findi("hail")) then
|
||||
e.self:Say("Hail, " .. e.other:GetName() .. "! This is the Deepwater Temple. Here you shall find the wisdom and courage of Prexus, the Ocean Lord. I am glad to see you have an interest. Forgive me if I cut our conversation short, but I have many [Deepwater tasks] to complete.");
|
||||
elseif(e.message:findi("deepwater task")) then
|
||||
if(e.other:GetFaction(e.self) > 5) then
|
||||
e.self:Say("We, the Deepwater Knights, know of your vile ways. You had best leave while you can.");
|
||||
elseif(e.other:GetFaction(e.self) < 4) then
|
||||
e.self:Say("We here at the Deepwater Temple must tend to the [Peacekeeper battlestaff] and the [Deepwater harpoon] as well as other duties such as [ocean protection]. There is always something we must do.");
|
||||
else
|
||||
e.self:Say("There is no reason to dislike you, but we of the Deepwater Knights must see more done for our cause before we truly accept you.");
|
||||
end
|
||||
elseif (e.other:GetFaction(e.self) > 5) then -- Apprehensive or worse
|
||||
e.self:Say("We, the Deepwater Knights, know of your vile ways. You had best leave while you can.");
|
||||
else -- Indifferent
|
||||
e.self:Say("There is no reason to dislike you, but we of the Deepwater Knights must see more done for our cause before we truly accept you.");
|
||||
elseif(e.message:findi("deepwater harpoon")) then
|
||||
e.self:Say("We do not award the Deepwater harpoon to just any paladin. Nobility is all well and good, but you must still prove yourself. We have heard rumors of a very distressing matter. Perhaps it is your calling. Are you ready to [prove allegiance to Erudin] and earn the Deepwater harpoon?");
|
||||
elseif(e.message:findi("prove allegiance to Erudin")) then
|
||||
e.self:Say("Yes, you are ready. We have heard rumors of a great bridge which will connect Antonica with Odus!! This must not happen! We must shield ourselves from the savage and evil ways of the other races. They say that a list exists. A list of three grand architects who wish to see this bridge erected. You will venture to Qeynos and find the list, then exterminate these three men. Return the list along with their heads and the Deepwater Harpoon is yours. Go!!");
|
||||
elseif(e.message:findi("peacekeeper battlestaff")) then
|
||||
e.self:Say("Every sentinel in Erudin carries a High Guard battlestaff. The creation of these weapons is the duty of the Deepwater Temple and the Temple of Divine Light. Our portion of the task is to send young members to [collect the Pearls of Odus]. These are imbedded into the staff and used to store mystical power.");
|
||||
elseif(e.message:findi("ocean protectio")) then
|
||||
e.self:Say("In the name of Prexus, we are sworn to protect all ocean creatures. We have heard reports of a shark carrying a deadly malady. We believe she is pregnant. If she delivers her young to the ocean, it will endanger all other creatures. We need to find a young paladin to [hunt the diseased shark].");
|
||||
elseif(e.message:findi("hunt the diseased shark")) then
|
||||
e.self:Say("Ah, yes! Take this bag with you. When you have collected the remains of the diseased shark and no fewer than three of her young in it, combine them in it and return it to me. Then, you shall get your reward.");
|
||||
e.other:SummonItem(17938); -- Item: Empty Shark Bag
|
||||
elseif(e.message:findi("collect the pearls of odus")) then
|
||||
e.self:Say("Then venture to the harbor of Erudin. There, you shall dive into the shark-infested water and search for the Pearls of Odus. They lie upon the grounds of our waters. Fill the bag I have given you, combine it, and return it to me. Good luck.");
|
||||
e.other:SummonItem(17939); -- Item: Empty Bag
|
||||
elseif(e.message:findi("harpoon no more")) then
|
||||
e.self:Say("The Deepwater harpoon's distribution has been restricted by order of the High Council. The last one awarded was to an outsider, the brave and noble paladin, Sentry Xyrin. She hailed from the Temple of Marr.");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
if (eq.handin({[13876] = 1})) then
|
||||
local item_lib = require("items");
|
||||
|
||||
if(item_lib.check_turn_in(e.trade, {item1 = 13876})) then
|
||||
e.self:Say("Very good, my dear young follower of Prexus. You will learn that swimming is a strong skill among the Deepwater Knights. Keep this up and you may wield a Deepwater harpoon soon enough. For now, you shall wear this barnacle breastplate. It is strong enough to aid a young knight in his quest for perfection.");
|
||||
e.other:SummonItem(12194); -- Item: Barnacle Breastplate
|
||||
e.other:Ding();
|
||||
|
|
@ -50,7 +52,7 @@ function event_trade(e)
|
|||
e.other:Faction(266,10,0); -- High Council of Erudin
|
||||
e.other:Faction(265,-15,0); -- Heretics
|
||||
e.other:AddEXP(100);
|
||||
elseif (eq.handin({[13879] = 1})) then -- Pearls of Odus Handin: full bag of pearls
|
||||
elseif(item_lib.check_turn_in(e.trade, {item1 = 13879})) then -- Pearls of Odus Handin: full bag of pearls
|
||||
e.self:Say("Fine work, Deepwater Knight. You have proven yourself an excellent addition to our ranks. These shall be used to create more Peacekeeper staffs. Oh yes, I almost forgot your reward. Here you are. Now, go, and serve Prexus.");
|
||||
e.other:SummonItem(eq.ChooseRandom(2104, 2106, 2108, 2111, 2112)); -- Item(s): Patchwork Tunic (2104)
|
||||
e.other:Ding();
|
||||
|
|
@ -58,7 +60,7 @@ function event_trade(e)
|
|||
e.other:Faction(266,10,0); -- High Council of Erudin
|
||||
e.other:Faction(265,-15,0); -- Heretics
|
||||
e.other:AddEXP(100);
|
||||
elseif (eq.handin({[18835] = 1, [13838] = 1, [13839] = 1, [13840] = 1})) then -- Bridge Quest Handin: 3 heads + sealed list
|
||||
elseif(item_lib.check_turn_in(e.trade, {item1 = 18835,item2 = 13838,item3 = 13839,item4 = 13840})) then -- Bridge Quest Handin: 3 heads + sealed list
|
||||
e.self:Say("It is done!! I pray to Prexus that the knowledge of the bridge's design has departed from this world with the passing of these intelligent men. A pity they had to die. As for you, the other states may not tolerate your presence any longer, but you have proven that allegiance to Erudin is paramount among all Erudites. I am afraid the [harpoon is no more]!! I bestow upon you Deep Six, my personal cutlass!! May you wield it in the name of Erudin.");
|
||||
e.other:SummonItem(5377); -- Item: Deep Six Cutlass
|
||||
e.other:Ding();
|
||||
|
|
@ -66,7 +68,7 @@ function event_trade(e)
|
|||
e.other:Faction(266,10,0); -- High Council of Erudin
|
||||
e.other:Faction(265,-15,0); -- Heretics
|
||||
e.other:AddEXP(100);
|
||||
elseif (eq.handin({[18725] = 1})) then -- Tattered Note
|
||||
elseif(item_lib.check_turn_in(e.trade, {item1 = 18725})) then -- Tattered Note
|
||||
e.self:Say("Greetings and welcome to the Deepwater Knights. Here is your guild tunic. Wear it with pride, and Prexus will keep a watchful eye on you. Go find sister Laoni, she will help you get started with your studies.");
|
||||
e.other:Ding();
|
||||
e.other:SummonItem(13544); -- Old Blue Tunic*
|
||||
|
|
@ -75,6 +77,7 @@ function event_trade(e)
|
|||
e.other:Faction(265,-15,0); -- Heretics
|
||||
e.other:AddEXP(100);
|
||||
end
|
||||
item_lib.return_items(e.self, e.other, e.trade);
|
||||
end
|
||||
|
||||
-- END of FILE Zone:erudnext ID:24065 -- Weligon_Steelherder
|
||||
-- END of FILE Zone:erudnext ID:24065 -- Weligon_Steelherder
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ function event_trade(e)
|
|||
e.other:Faction(267,1,0); -- High Guard of Erudin
|
||||
e.other:Faction(265,-1,0); -- Heretics
|
||||
e.other:AddEXP(100);
|
||||
e.other:GiveCash(0,0,0,0);
|
||||
elseif(item_lib.check_turn_in(e.trade, {item1 = 13818})) then
|
||||
e.self:Say("Thanks.. That saved me a lot of money. Now I can spend more time with the captain before I give this back to Lenka Stoutheart. Here is a little so...mething.");
|
||||
e.other:Ding();
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ function event_trade(e)
|
|||
e.other:Faction(267,1,0); -- High Guard of Erudin
|
||||
e.other:Faction(265,-1,0); -- Heretics
|
||||
e.other:AddEXP(100);
|
||||
e.other:GiveCash(0,0,0,0);
|
||||
elseif(item_lib.check_turn_in(e.trade, {item1 = 13818})) then
|
||||
e.self:Say("Thanks.. That saved me a lot of money. Now I can spend more time with the captain before I give this back to Lenka Stoutheart. Here is a little so...mething.");
|
||||
e.other:Ding();
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
local qglobals = eq.get_qglobals(e.other);
|
||||
if(qglobals["ench_epic"] ~= nil and qglobals["ench_epic"] >= "2" and e.other:GetFaction(e.self) < 5) then
|
||||
if(qglobals["ench_epic"] >= "2" and e.other:GetFaction(e.self) < 5) then
|
||||
if(item_lib.check_turn_in(e.trade, {item1 = 52964})) then
|
||||
e.self:Say("I can't . . I . . .of course, I do not think that Tserrina has any need for this. I can't imagine that she would miss it at all. Please, take it.");
|
||||
e.other:SummonItem(54289); -- Item: 1st Piece of the Staff
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ sub EVENT_SAY {
|
|||
sub EVENT_ITEM {
|
||||
if(plugin::check_handin(\%itemcount, 12112 => 1)) { #Pack of Materials
|
||||
quest::say("I shall see that my father gets the materials. I hope this can be of use to you. It will serve as your starting point toward fletching a Trueshot longbow. It is unfortunate that we are unable to enchant the bow to its [next incarnation], but it is still a fine weapon. You do know the [correct components] needed for fletching such a bow, do you not?");
|
||||
quest::givecash(0,0,6,0); #6 gold
|
||||
quest::givecash(0,6,0,0); #6 gold
|
||||
quest::summonitem(8091); #Treant Bow Staff
|
||||
quest::faction(246,10); #Faydark's Champions
|
||||
quest::faction(279,10); #King Tearis Thex
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ function event_scale_calc(e)
|
|||
[8] = {Class.PALADIN,0,225},
|
||||
[9] = {Class.PALADIN,1,225},
|
||||
[10] = {Class.PALADIN,2,225},
|
||||
[11] = {Class.PALADIN,3,225},
|
||||
[11] = {Class.PALADIN3,3,225},
|
||||
[12] = {Class.PALADIN,7,75},
|
||||
[13] = {Class.PALADIN,36,230},
|
||||
[14] = {Class.SHADOWKNIGHT,0,225},
|
||||
|
|
@ -46,4 +46,4 @@ function event_scale_calc(e)
|
|||
end
|
||||
|
||||
e.self:SetScale(max_skills / total_count);
|
||||
end
|
||||
end
|
||||
BIN
global/lib/lua/5.1/luasql/mysql.so
Normal file
BIN
global/lib/lua/5.1/luasql/mysql.so
Normal file
Binary file not shown.
41
global/lib/lua/5.1/luasql_ext.lua
Normal file
41
global/lib/lua/5.1/luasql_ext.lua
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
--MySQL connection information to use in conjunction with luamysql
|
||||
--This can be dropped in the eqemu server root directory and will be automatically referenced
|
||||
--this information can be pulled from the eqemu_config.xml file in the eqemu server root
|
||||
|
||||
-- load driver
|
||||
local driver = require("luasql_mysql");
|
||||
|
||||
--declare table
|
||||
local luasql_ext = {};
|
||||
|
||||
--set database information
|
||||
local database_name = "local_dev";
|
||||
local user = "root";
|
||||
local password = "eqemu";
|
||||
local ip_addr = "localhost";
|
||||
local port = "3306";
|
||||
|
||||
function luasql_ext.env(e)
|
||||
-- create environment object
|
||||
env = assert (driver.mysql());
|
||||
return env;
|
||||
end
|
||||
|
||||
function luasql_ext.con(e)
|
||||
-- connect to data source
|
||||
con = assert (env:connect(database_name,user,password,ip_addr,port));
|
||||
return con;
|
||||
end
|
||||
|
||||
function luasql_ext.rows(connection,statement)
|
||||
env = assert (driver.mysql());
|
||||
local con = connection or assert (env:connect(database_name,user,password,ip_addr,port));
|
||||
local cur = assert (con:execute(statement));
|
||||
con:close();
|
||||
env:close();
|
||||
return function()
|
||||
return cur:fetch()
|
||||
end
|
||||
end
|
||||
|
||||
return luasql_ext;
|
||||
BIN
global/lib/lua/5.1/luasql_mysql.so
Normal file
BIN
global/lib/lua/5.1/luasql_mysql.so
Normal file
Binary file not shown.
|
|
@ -0,0 +1,123 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Licença LuaSQL</title>
|
||||
<link rel="stylesheet" href="doc.css" type="text/css"/>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="container">
|
||||
|
||||
<div id="product">
|
||||
<div id="product_logo"><a href="http://www.keplerproject.org">
|
||||
<img alt="LuaSQL logo" src="luasql.png"/>
|
||||
</a></div>
|
||||
<div id="product_name"><big><strong>LuaSQL</strong></big></div>
|
||||
<div id="product_description">Conectividade de banco de dados para a linguagem de programação Lua</div>
|
||||
</div> <!-- id="product" -->
|
||||
|
||||
<div id="main">
|
||||
|
||||
<div id="navigation">
|
||||
<h1>LuaSQL</h1>
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a>
|
||||
<ul>
|
||||
<li><a href="index.html#overview">Visão Geral</a></li>
|
||||
<li><a href="index.html#status">Status</a></li>
|
||||
<li><a href="index.html#download">Download</a></li>
|
||||
<li><a href="index.html#credits">Créditos</a></li>
|
||||
<li><a href="index.html#contact">Contato</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="manual.html">Manual</a>
|
||||
<ul>
|
||||
<li><a href="manual.html#introduction">Introdução</a></li>
|
||||
<li><a href="manual.html#compiling">Compilando</a></li>
|
||||
<li><a href="manual.html#installation">Instalação</a></li>
|
||||
<li><a href="manual.html#errors">Tratamento de erros</a></li>
|
||||
<li><a href="manual.html#drivers">Drivers</a></li>
|
||||
<li><a href="manual.html#environment_object">Ambiente</a></li>
|
||||
<li><a href="manual.html#connection_object">Conexão</a></li>
|
||||
<li><a href="manual.html#cursor_object">Cursor</a></li>
|
||||
<li><a href="manual.html#postgres_extensions">PostgreSQL</a></li>
|
||||
<li><a href="manual.html#mysql_extensions">MySQL</a></li>
|
||||
<li><a href="manual.html#oracle_extensions">Oracle</a></li>
|
||||
<li><a href="manual.html#sqlite3_extensions">SQLite3</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="examples.html">Exemplos</a></li>
|
||||
<li><a href="history.html">Histórico</a></li>
|
||||
<li><a href="http://github.com/keplerproject/luasql">Projeto</a>
|
||||
<ul>
|
||||
<li><a href="http://github.com/keplerproject/luasql/issues">Bug Tracker</a></li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Licença</strong></li>
|
||||
</ul>
|
||||
</div> <!-- id="navigation" -->
|
||||
|
||||
<div id="content">
|
||||
<h2>License</h2>
|
||||
|
||||
<p>LuaSQL is free software:
|
||||
it can be used for both academic and commercial purposes at absolutely no cost.
|
||||
There are no royalties or GNU-like "copyleft" restrictions.
|
||||
LuaSQL qualifies as
|
||||
<a href="http://www.opensource.org/docs/definition.html">Open Source</a>
|
||||
software.
|
||||
Its licenses are compatible with
|
||||
<a href="http://www.gnu.org/licenses/gpl.html">GPL</a>.
|
||||
LuaSQL is not in the public domain and the
|
||||
<a href="http://www.keplerproject.org">Kepler Project</a>
|
||||
keep its copyright.
|
||||
The legal details are below.</p>
|
||||
|
||||
<p>The spirit of the license is that
|
||||
you are free to use LuaSQL for any purpose at no cost without having to ask us.
|
||||
The only requirement is that if you do use LuaSQL,
|
||||
then you should give us credit by including the appropriate copyright notice
|
||||
somewhere in your product or its documentation.</p>
|
||||
|
||||
<p>The LuaSQL library is designed and implemented by the
|
||||
<a href="http://www.keplerproject.org">Kepler Project</a> team.
|
||||
The implementation is not derived from licensed software.</p>
|
||||
|
||||
<hr/>
|
||||
<p>Copyright © 2003-2006 The Kepler Project.</p>
|
||||
|
||||
<p>Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:</p>
|
||||
|
||||
<p>The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.</p>
|
||||
|
||||
<p>
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.</p>
|
||||
|
||||
</div> <!-- id="content" -->
|
||||
</div> <!-- id="main" -->
|
||||
|
||||
<div id="about">
|
||||
<p><a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
|
||||
<p><small>
|
||||
$Id: license.html,v 1.6 2008/06/11 00:26:13 jasonsantos Exp $
|
||||
</small></p>
|
||||
</div> <!-- id="about" -->
|
||||
|
||||
</div> <!-- id="container" -->
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<title>LuaSQL License</title>
|
||||
<link rel="stylesheet" href="doc.css" type="text/css"/>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="container">
|
||||
|
||||
<div id="product">
|
||||
<div id="product_logo"><a href="http://www.keplerproject.org">
|
||||
<img alt="LuaSQL logo" src="luasql.png"/>
|
||||
</a></div>
|
||||
<div id="product_name"><big><b>LuaSQL</b></big></div>
|
||||
<div id="product_description">Database connectivity for the Lua programming language</div>
|
||||
</div> <!-- id="product" -->
|
||||
|
||||
<div id="main">
|
||||
<div id="navigation">
|
||||
<h1>LuaSQL</h1>
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a>
|
||||
<ul>
|
||||
<li><a href="index.html#overview">Overview</a></li>
|
||||
<li><a href="index.html#status">Status</a></li>
|
||||
<li><a href="index.html#download">Download</a></li>
|
||||
<li><a href="index.html#credits">Credits</a></li>
|
||||
<li><a href="index.html#contact">Contact us</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="manual.html">Manual</a>
|
||||
<ul>
|
||||
<li><a href="manual.html#introduction">Introduction</a></li>
|
||||
<li><a href="manual.html#compiling">Compiling</a></li>
|
||||
<li><a href="manual.html#installation">Installation</a></li>
|
||||
<li><a href="manual.html#errors">Error handling</a></li>
|
||||
<li><a href="manual.html#drivers">Drivers</a></li>
|
||||
<li><a href="manual.html#environment_object">Environment</a></li>
|
||||
<li><a href="manual.html#connection_object">Connection</a></li>
|
||||
<li><a href="manual.html#cursor_object">Cursor</a></li>
|
||||
<li><a href="manual.html#postgres_extensions">PostgreSQL</a></li>
|
||||
<li><a href="manual.html#mysql_extensions">MySQL</a></li>
|
||||
<li><a href="manual.html#oracle_extensions">Oracle</a></li>
|
||||
<li><a href="manual.html#sqlite3_extensions">SQLite3</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="examples.html">Examples</a></li>
|
||||
<li><a href="history.html">History</a></li>
|
||||
<li><a href="http://github.com/keplerproject/luasql">Project</a>
|
||||
<ul>
|
||||
<li><a href="http://github.com/keplerproject/luasql/issues">Bug Tracker</a></li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>License</strong></li>
|
||||
</ul>
|
||||
</div> <!-- id="navigation" -->
|
||||
|
||||
<div id="content">
|
||||
<h2>License</h2>
|
||||
|
||||
<p>LuaSQL is free software:
|
||||
it can be used for both academic and commercial purposes at absolutely no cost.
|
||||
There are no royalties or GNU-like "copyleft" restrictions.
|
||||
LuaSQL qualifies as
|
||||
<a href="http://www.opensource.org/docs/definition.html">Open Source</a>
|
||||
software.
|
||||
Its licenses are compatible with
|
||||
<a href="http://www.gnu.org/licenses/gpl.html">GPL</a>.
|
||||
LuaSQL is not in the public domain and the
|
||||
<a href="http://www.keplerproject.org">Kepler Project</a>
|
||||
keep its copyright.
|
||||
The legal details are below.</p>
|
||||
|
||||
<p>The spirit of the license is that
|
||||
you are free to use LuaSQL for any purpose at no cost without having to ask us.
|
||||
The only requirement is that if you do use LuaSQL,
|
||||
then you should give us credit by including the appropriate copyright notice
|
||||
somewhere in your product or its documentation.</p>
|
||||
|
||||
<p>The LuaSQL library is designed and implemented by the
|
||||
<a href="http://www.keplerproject.org">Kepler Project</a> team.
|
||||
The implementation is not derived from licensed software.</p>
|
||||
|
||||
<hr/>
|
||||
<p>Copyright © 2003-2007 The Kepler Project.</p>
|
||||
|
||||
<p>Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:</p>
|
||||
|
||||
<p>The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.</p>
|
||||
|
||||
<p>
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.</p>
|
||||
|
||||
</div> <!-- id="content" -->
|
||||
</div> <!-- id="main" -->
|
||||
|
||||
<div id="about">
|
||||
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
|
||||
<p><small>$Id: license.html,v 1.17 2008/06/11 00:26:13 jasonsantos Exp $</small></p>
|
||||
</div> <!-- id="about" -->
|
||||
|
||||
</div> <!-- id="container" -->
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<title>LuaSQL License</title>
|
||||
<link rel="stylesheet" href="doc.css" type="text/css"/>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="container">
|
||||
|
||||
<div id="product">
|
||||
<div id="product_logo"><a href="http://www.keplerproject.org">
|
||||
<img alt="LuaSQL logo" src="luasql.png"/>
|
||||
</a></div>
|
||||
<div id="product_name"><big><b>LuaSQL</b></big></div>
|
||||
<div id="product_description">Database connectivity for the Lua programming language</div>
|
||||
</div> <!-- id="product" -->
|
||||
|
||||
<div id="main">
|
||||
<div id="navigation">
|
||||
<h1>LuaSQL</h1>
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a>
|
||||
<ul>
|
||||
<li><a href="index.html#overview">Overview</a></li>
|
||||
<li><a href="index.html#status">Status</a></li>
|
||||
<li><a href="index.html#download">Download</a></li>
|
||||
<li><a href="index.html#credits">Credits</a></li>
|
||||
<li><a href="index.html#contact">Contact us</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="manual.html">Manual</a>
|
||||
<ul>
|
||||
<li><a href="manual.html#introduction">Introduction</a></li>
|
||||
<li><a href="manual.html#compiling">Compiling</a></li>
|
||||
<li><a href="manual.html#installation">Installation</a></li>
|
||||
<li><a href="manual.html#errors">Error handling</a></li>
|
||||
<li><a href="manual.html#drivers">Drivers</a></li>
|
||||
<li><a href="manual.html#environment_object">Environment</a></li>
|
||||
<li><a href="manual.html#connection_object">Connection</a></li>
|
||||
<li><a href="manual.html#cursor_object">Cursor</a></li>
|
||||
<li><a href="manual.html#postgres_extensions">PostgreSQL</a></li>
|
||||
<li><a href="manual.html#mysql_extensions">MySQL</a></li>
|
||||
<li><a href="manual.html#oracle_extensions">Oracle</a></li>
|
||||
<li><a href="manual.html#sqlite3_extensions">SQLite3</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="examples.html">Examples</a></li>
|
||||
<li><a href="history.html">History</a></li>
|
||||
<li><a href="http://github.com/keplerproject/luasql">Project</a>
|
||||
<ul>
|
||||
<li><a href="http://github.com/keplerproject/luasql/issues">Bug Tracker</a></li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>License</strong></li>
|
||||
</ul>
|
||||
</div> <!-- id="navigation" -->
|
||||
|
||||
<div id="content">
|
||||
<h2>License</h2>
|
||||
|
||||
<p>LuaSQL is free software:
|
||||
it can be used for both academic and commercial purposes at absolutely no cost.
|
||||
There are no royalties or GNU-like "copyleft" restrictions.
|
||||
LuaSQL qualifies as
|
||||
<a href="http://www.opensource.org/docs/definition.html">Open Source</a>
|
||||
software.
|
||||
Its licenses are compatible with
|
||||
<a href="http://www.gnu.org/licenses/gpl.html">GPL</a>.
|
||||
LuaSQL is not in the public domain and the
|
||||
<a href="http://www.keplerproject.org">Kepler Project</a>
|
||||
keep its copyright.
|
||||
The legal details are below.</p>
|
||||
|
||||
<p>The spirit of the license is that
|
||||
you are free to use LuaSQL for any purpose at no cost without having to ask us.
|
||||
The only requirement is that if you do use LuaSQL,
|
||||
then you should give us credit by including the appropriate copyright notice
|
||||
somewhere in your product or its documentation.</p>
|
||||
|
||||
<p>The LuaSQL library is designed and implemented by the
|
||||
<a href="http://www.keplerproject.org">Kepler Project</a> team.
|
||||
The implementation is not derived from licensed software.</p>
|
||||
|
||||
<hr/>
|
||||
<p>Copyright © 2003-2016 The Kepler Project.</p>
|
||||
|
||||
<p>Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:</p>
|
||||
|
||||
<p>The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.</p>
|
||||
|
||||
<p>
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.</p>
|
||||
|
||||
</div> <!-- id="content" -->
|
||||
</div> <!-- id="main" -->
|
||||
|
||||
<div id="about">
|
||||
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0!</a></p>
|
||||
<p><small>$Id: license.html,v 1.17 2008/06/11 00:26:13 jasonsantos Exp $</small></p>
|
||||
</div> <!-- id="about" -->
|
||||
|
||||
</div> <!-- id="container" -->
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
package = "LuaSQL-MySQL"
|
||||
version = "2.3.5-1"
|
||||
source = {
|
||||
url = "git://github.com/keplerproject/luasql.git",
|
||||
branch = "v2.3.5",
|
||||
}
|
||||
description = {
|
||||
summary = "Database connectivity for Lua (MySQL driver)",
|
||||
detailed = [[
|
||||
LuaSQL is a simple interface from Lua to a DBMS. It enables a
|
||||
Lua program to connect to databases, execute arbitrary SQL statements
|
||||
and retrieve results in a row-by-row cursor fashion.
|
||||
]],
|
||||
license = "MIT/X11",
|
||||
homepage = "http://www.keplerproject.org/luasql/"
|
||||
}
|
||||
dependencies = {
|
||||
"lua >= 5.1"
|
||||
}
|
||||
external_dependencies = {
|
||||
MYSQL = {
|
||||
header = "mysql.h"
|
||||
}
|
||||
}
|
||||
build = {
|
||||
type = "builtin",
|
||||
modules = {
|
||||
["luasql.mysql"] = {
|
||||
sources = { "src/luasql.c", "src/ls_mysql.c" },
|
||||
libraries = { "mysqlclient" },
|
||||
incdirs = { "$(MYSQL_INCDIR)" },
|
||||
libdirs = { "$(MYSQL_LIBDIR)" }
|
||||
}
|
||||
}
|
||||
}
|
||||
36
global/lib/luarocks/rocks/luasql-mysql/2.3.5-1/rock_manifest
Normal file
36
global/lib/luarocks/rocks/luasql-mysql/2.3.5-1/rock_manifest
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
rock_manifest = {
|
||||
doc = {
|
||||
br = {
|
||||
['examples.html'] = "ddc16a018fa1a65cdce283dca0925356",
|
||||
['history.html'] = "b5b65b2e94d29163b3553474521d690e",
|
||||
['index.html'] = "a296a03e6ed1b4290289f22872a824fe",
|
||||
['license.html'] = "4b1a85bd9cfdbd5e4e6f64f29ad591f8",
|
||||
['luasql.png'] = "a858d251851675daefb731baacafd1b8",
|
||||
['manual.html'] = "296c8dc866d5a343bce3419890c59607"
|
||||
},
|
||||
fr = {
|
||||
['doc.css'] = "d0a913514fb190240b3b4033d105cbc0",
|
||||
['examples.html'] = "ac400f8c25880c355239cc553863bf20",
|
||||
['history.html'] = "cbab789ae8fe289409f6af05b16e5691",
|
||||
['index.html'] = "9a2c0bed67d59f2713da8e107f759cb6",
|
||||
['license.html'] = "66567e98ce30262a987b42bd88db71a8",
|
||||
['luasql.png'] = "a858d251851675daefb731baacafd1b8",
|
||||
['manual.html'] = "45ad06d64a62e56047d17e73ce9f608f"
|
||||
},
|
||||
us = {
|
||||
['doc.css'] = "d0a913514fb190240b3b4033d105cbc0",
|
||||
['examples.html'] = "ac400f8c25880c355239cc553863bf20",
|
||||
['history.html'] = "a937ce3ca0a070b3b82b8f29db4805c6",
|
||||
['index.html'] = "90a31f9551bbcde04cb5e54daa2c3ee2",
|
||||
['license.html'] = "62f494ac81fe39a4f6afcda9a6d7b310",
|
||||
['luasql.png'] = "a858d251851675daefb731baacafd1b8",
|
||||
['manual.html'] = "45ad06d64a62e56047d17e73ce9f608f"
|
||||
}
|
||||
},
|
||||
lib = {
|
||||
luasql = {
|
||||
['mysql.so'] = "84b855efa7269b46fdc7ea9a4a60e42c"
|
||||
}
|
||||
},
|
||||
['luasql-mysql-2.3.5-1.rockspec'] = "0703ea942b7ad2230423e7560a3e982e"
|
||||
}
|
||||
37
global/lib/luarocks/rocks/manifest
Normal file
37
global/lib/luarocks/rocks/manifest
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
commands = {}
|
||||
dependencies = {
|
||||
['luasql-mysql'] = {
|
||||
['2.3.5-1'] = {
|
||||
{
|
||||
constraints = {
|
||||
{
|
||||
op = ">=",
|
||||
version = {
|
||||
5, 1, string = "5.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
name = "lua"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
modules = {
|
||||
['luasql.mysql'] = {
|
||||
"luasql-mysql/2.3.5-1"
|
||||
}
|
||||
}
|
||||
repository = {
|
||||
['luasql-mysql'] = {
|
||||
['2.3.5-1'] = {
|
||||
{
|
||||
arch = "installed",
|
||||
commands = {},
|
||||
dependencies = {},
|
||||
modules = {
|
||||
['luasql.mysql'] = "luasql/mysql.so"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -11,10 +11,14 @@ sub EVENT_CLICKDOOR {
|
|||
}
|
||||
|
||||
sub EVENT_ENTERZONE {
|
||||
|
||||
#off the map
|
||||
if ($client->GetX() > 315 || $client->GetX() < -315 || $client->GetY() > 685 || $client->GetY() < -60 || $client->GetZ() < -5 || $client->GetZ() > 15) {
|
||||
$client->MovePC(344, 0, 312, 2, 0); # Zone: guildlobby
|
||||
}
|
||||
|
||||
#if I am idle for more than xx seconds, auto-afk and go invisible/don't draw model
|
||||
quest::settimer("afk_check", 1200); #20 minutes
|
||||
}
|
||||
|
||||
sub EVENT_SIGNAL {
|
||||
|
|
@ -40,5 +44,15 @@ sub EVENT_TIMER {
|
|||
quest::MovePCInstance(344,5,$x,$y,$z,450); # Zone: guildlobby
|
||||
} elsif($timer == 2) {
|
||||
quest::movepc(344,$x,$y,$z,225); # Zone: guildlobby
|
||||
} elsif($timer eq "afk_check") {
|
||||
#I have been idle, go auto-afk and don't draw model
|
||||
$client->Message(4, "You are idle, Auto-AFK");
|
||||
if ($client->GetPetID()) {
|
||||
$Pet_ENT = $entity_list->GetMobByID($client->GetPetID());
|
||||
$Pet_ENT->SetRace(127);
|
||||
}
|
||||
$client->SetRace(127);
|
||||
$client->SetGender(0);
|
||||
quest::stoptimer("afk_check");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ function event_trade(e)
|
|||
e.other:Faction(230,10,0); -- Corrupt Qeynos Guards
|
||||
e.other:Faction(330,10,0); -- The Freeport Militia
|
||||
e.other:AddEXP(15000);
|
||||
e.other:GiveCash(0,0,0,0);
|
||||
elseif(item_lib.check_turn_in(e.trade, {item1 = 12365})) then
|
||||
e.self:Say("I cannot believe you actually acquired all those drinks!! You do good work, kid. Here is the gem as I promised. And a few plat for good measure. Don't let it be said that the Axe doesn't treat his friends right.");
|
||||
e.other:SummonItem(12348); -- Item: Gem of Stamina
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ function event_trade(e)
|
|||
e.other:Faction(332,10,0); -- Highpass Guards
|
||||
e.other:Faction(331,10,0); -- Merchants of Highpass
|
||||
e.other:AddEXP(500);
|
||||
e.other:GiveCash(0,0,0,0);
|
||||
elseif(item_lib.check_turn_in(e.trade, {item1 = 13793})) then
|
||||
e.self:Say("Great! Thanks for taking care of this 'problem' for us "..e.other:GetName()..". Please return to Zannsin with this note and he should reward you for your assistance."); -- Made up text
|
||||
e.other:SummonItem(18028); -- Item: Message to Zannsin
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ function event_trade(e)
|
|||
e.other:Faction(230,1,0); -- Corrupt Qeynos Guards
|
||||
e.other:Faction(330,1,0); -- The Freeport Militia
|
||||
e.other:AddEXP(15000);
|
||||
e.other:GiveCash(0,0,0,0);
|
||||
|
||||
eq.signal(407027,3) -- NPC: Beef new highpasshold
|
||||
elseif(item_lib.check_turn_in(e.trade, {item1 = 12365})) then
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ function event_trade(e)
|
|||
e.other:Faction(332,10,0); -- Highpass Guards
|
||||
e.other:Faction(331,10,0); -- Merchants of Highpass
|
||||
e.other:AddEXP(500);
|
||||
e.other:GiveCash(0,0,0,0);
|
||||
elseif(item_lib.check_turn_in(e.trade, {item1 = 13793})) then
|
||||
e.self:Say("Great! Thanks for taking care of this 'problem' for us "..e.other:GetName()..". Please return to Zannsin with this note and he should reward you for your assistance."); -- Made up text
|
||||
e.other:SummonItem(18028); -- Item: Message to Zannsin
|
||||
|
|
|
|||
|
|
@ -1,80 +1,61 @@
|
|||
# File: #Phantasmal_Priest.pl
|
||||
# ToDo: Some quest text needed
|
||||
# Items: 60241, 60242
|
||||
|
||||
# #Phantasmal_Priest.pl
|
||||
#quest text needed
|
||||
# items: 60241, 60242
|
||||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("You seek to move behind this door, yet I cannot allow that until someone with a like mind as me comes forward. Only they will understand the calling and only they can do what is necessary to proceed. If there be anyone who matches my ambitions, step forward to [" . quest::saylink("answer the challenge") . "].");
|
||||
quest::say("You seek to move behind this door, yet I cannot allow that until someone with a like mind as me comes forward." .
|
||||
" Only they will understand the calling and only they can do what is necessary to proceed. If there be anyone who matches my ambitions, step forward to [" . quest::saylink("answer the challenge") . "].");
|
||||
}
|
||||
elsif ($text=~/challenge/i) {
|
||||
if ($class=~/^(Cleric|Druid|Shaman)$/i) {
|
||||
$client->Message(0, "You are a priest. It is your ability -- in fact, your very calling -- that requires you to be able to manipulate it. You must sew these together and return to me the product so that I can verify the truth in your words and in your soul.");
|
||||
quest::summonitem(60241, 4); # Item: Dried Segment of Flesh x 4
|
||||
}
|
||||
else {
|
||||
$client->Message(0, "You are not of a similar mind as me. You will not understand the hardships. Be gone.");
|
||||
}
|
||||
if ($text=~/challenge/i) {
|
||||
if (($class eq "Cleric") || ($class eq "Druid") || ($class eq "Shaman") || $status >= 80) {
|
||||
$client->Message(0,"You are a priest. It is your ability -- in fact, your very calling -- that requires you to be able to manipulate it. You must sew these together and return to me the product so that I can verify the truth in your words and in your soul.");
|
||||
quest::summonitem(60241); # Item: Dried Segment of Flesh
|
||||
quest::summonitem(60241); # Item: Dried Segment of Flesh
|
||||
quest::summonitem(60241); # Item: Dried Segment of Flesh
|
||||
quest::summonitem(60241); # Item: Dried Segment of Flesh
|
||||
}
|
||||
else {
|
||||
$client->Message(0,"You are not of a similar mind as me. You will not understand the hardships. Be gone.");
|
||||
}
|
||||
}
|
||||
elsif ($text=~/north/i) {
|
||||
if ($qglobals{$instanceid.ikkymove} && ($qglobals{$instanceid.ikkymove} == 1)) {
|
||||
if (!$entity_list->IsMobSpawnedByNpcTypeID(294614)) {
|
||||
quest::spawn2(294614,0,0,213,-100,20,0); # NPC: #Trigger_Ikkinz_4
|
||||
}
|
||||
my $InInstanceIkky7 = quest::GetInstanceID("ikkinz", 6);
|
||||
if ($InInstanceIkky7) {
|
||||
quest::MovePCInstance(294,$InInstanceIkky7,195,-86,21,0); # Zone: ikkinz
|
||||
}
|
||||
}
|
||||
if ($text=~/north/i) {
|
||||
if ($qglobals{$instanceid.ikkymove} == 1) {
|
||||
if (!$entity_list->IsMobSpawnedByNpcTypeID(294614)) {
|
||||
quest::spawn2(294614,0,0,213,-100,20,0); # NPC: #Trigger_Ikkinz_4
|
||||
}
|
||||
$InInstanceIkky7 = quest::GetInstanceID("ikkinz",6);
|
||||
quest::MovePCInstance(294,$InInstanceIkky7,195,-86,21,0); # Zone: ikkinz
|
||||
}
|
||||
elsif ($text=~/south/i) {
|
||||
if ($qglobals{$instanceid.ikkymove} && ($qglobals{$instanceid.ikkymove} == 1)) {
|
||||
if (!$entity_list->IsMobSpawnedByNpcTypeID(294614)) {
|
||||
quest::spawn2(294614,0,0,213,-100,20,0); # NPC: #Trigger_Ikkinz_4
|
||||
}
|
||||
my $InInstanceIkky7 = quest::GetInstanceID("ikkinz", 6);
|
||||
if ($InInstanceIkky7) {
|
||||
quest::MovePCInstance(294,$InInstanceIkky7,206,-154,20,0); # Zone: ikkinz
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($text=~/south/i) {
|
||||
if ($qglobals{$instanceid.ikkymove} == 1) {
|
||||
if (!$entity_list->IsMobSpawnedByNpcTypeID(294614)) {
|
||||
quest::spawn2(294614,0,0,213,-100,20,0); # NPC: #Trigger_Ikkinz_4
|
||||
}
|
||||
$InInstanceIkky7 = quest::GetInstanceID("ikkinz",6);
|
||||
quest::MovePCInstance(294,$InInstanceIkky7,206,-154,20,0); # Zone: ikkinz
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_ITEM {
|
||||
if (quest::handin({60242 => 1})) {
|
||||
quest::say("Well done, $name. You have proven you are indeed the priest you claimed to be. This test is not yet over though. As a priest, you must be able to command stone. Before you can command them, you must find that which they lack. You must look to the [" . quest::saylink("north") . "] and to the [" . quest::saylink("south") . "]. Speak return and you shall be back.");
|
||||
quest::setglobal($instanceid.ikkymove,1,5,"H6");
|
||||
if (plugin::check_handin(\%itemcount, 60242 =>1 )) {
|
||||
quest::say("Well done, $name. You have proven you are indeed the priest you claimed to be. This test is not yet over though. As a priest, you must be able to command stone. Before you can command them, you must find that which they lack. You must look to the [" . quest::saylink("north") . "] and to the [" . quest::saylink("south") . "]. Speak return and you shall be back.");
|
||||
#if(!defined($qglobals{$instanceid.ikkymove})) {
|
||||
quest::setglobal($instanceid.ikkymove,1,5,"H6");
|
||||
#}
|
||||
}
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
|
||||
sub EVENT_SIGNAL {
|
||||
if ($signal == 1) {
|
||||
quest::spawn2(294610,0,0,673,-727,-46,380); # NPC: Phantasmal_Priest_Guardian
|
||||
quest::spawn2(294610,0,0,670,-700,-46,374); # NPC: Phantasmal_Priest_Guardian
|
||||
quest::depopall(294611);
|
||||
quest::depop();
|
||||
if($signal == 1) {
|
||||
quest::spawn2(294610,0,0,673,-727,-46,380); # NPC: Phantasmal_Priest_Guardian
|
||||
quest::spawn2(294610,0,0,670,-700,-46,374); # NPC: Phantasmal_Priest_Guardian
|
||||
quest::depopall(294611);
|
||||
quest::depop();
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_SPAWN {
|
||||
quest::settimer("locks", 1);
|
||||
}
|
||||
|
||||
sub EVENT_TIMER {
|
||||
quest::stoptimer("locks");
|
||||
|
||||
my $door10 = $entity_list->FindDoor(10);
|
||||
if ($door10) {
|
||||
$door10->SetLockPick(1);
|
||||
}
|
||||
else {
|
||||
quest::debug("Unable to set lockpick on door 10");
|
||||
}
|
||||
|
||||
my $door12 = $entity_list->FindDoor(12);
|
||||
if ($door12) {
|
||||
$door12->SetLockPick(1);
|
||||
}
|
||||
else {
|
||||
quest::debug("Unable to set lockpick on door 12");
|
||||
}
|
||||
$entity_list->FindDoor(10)->SetLockPick(1);
|
||||
$entity_list->FindDoor(12)->SetLockPick(1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
#NPC Name: Yeeldan Spiritcaller
|
||||
#NPC ID: 113184
|
||||
# items: 25841, 24912, 25356, 25805, 24907, 25357, 25815, 24909, 25358, 25836, 24911, 25359, 25840, 24913, 25360, 25827, 24908, 25361, 25838, 24910, 25362
|
||||
# items: 25841, 24912, 25356, 25805, 24907, 25357, 25815, 24909, 25358, 25836, 24911, 25359, 25840, 24913, 25360, 25632, 24908, 25361, 25838, 24910, 25362
|
||||
|
||||
sub EVENT_SAY {
|
||||
if ($faction == 1) { #requires ally Kromzek faction
|
||||
|
|
@ -97,7 +97,7 @@ sub EVENT_ITEM {
|
|||
quest::emote("smiles warmly as he hands you your reward.");
|
||||
quest::say("You have done well.");
|
||||
}
|
||||
elsif (plugin::check_handin(\%itemcount, 25827 => 3, 24908 => 1)) { # legs
|
||||
elsif (plugin::check_handin(\%itemcount, 25632 => 3, 24908 => 1)) { # legs
|
||||
quest::summonitem(25361); # Item: Spirit Caller's Greaves
|
||||
quest::exp(150000);
|
||||
quest::faction(429,20); # King Tormax
|
||||
|
|
|
|||
|
|
@ -54,29 +54,38 @@ sub EVENT_SAY {
|
|||
}
|
||||
|
||||
sub EVENT_ITEM {
|
||||
if (($faction <= 4) && (quest::handin({13316 => 1, "gold" => 300}))) { # Ogre Head and 300 gold
|
||||
quest::say("Very good!! You found him. His head shall bring us a great reward from the Stormguard. And as for you, here is your Mining Pick 628. Only a member of 628 can wield this fine weapon. We are the only ones who can wield it in such a way as to pierce our foes.");
|
||||
quest::faction(322, 10); # Miners Guild 628
|
||||
quest::faction(223, -10); # Circle Of Unseen Hands
|
||||
quest::faction(379, -10); # Butcherblock Bandits
|
||||
quest::faction(241, 10); # Deeppockets
|
||||
quest::faction(244, -10); # Ebon Mask
|
||||
quest::exp(5000);
|
||||
quest::summonitem(12161); # Mining Pick 628
|
||||
}
|
||||
elsif (quest::handin({18767 => 1})) { #Small, Folded Note
|
||||
quest::say("Ah, welcome! We could use some fresh blood around here. The name's Mater, and I run this little outfit. Work hard for me, and I will reward you well. Cross me, and you'll find yourself buried under the mine cap. Once you are ready to begin your training please make sure that you see Crovsar Dirkbringer, he can assist you in developing your hunting and gathering skills. Return to me when you have become more experienced in our art, I will be able to further instruct you on how to progress through your early ranks, as well as in some of the various [trades] you will have available to you.");
|
||||
quest::summonitem(13516); #Ruined Miner's Tunic
|
||||
quest::ding();
|
||||
quest::faction(322, 100); # Miners Guild 628
|
||||
quest::faction(223, -5); # Circle of Unseen Hands
|
||||
quest::faction(379, -5); # Butcherblock Bandits
|
||||
quest::faction(241, 5); # Deeppoockets
|
||||
quest::faction(244, -15); # Ebon Mask
|
||||
quest::exp(100);
|
||||
}
|
||||
#do all other handins first with plugin, then let it do disciplines
|
||||
plugin::try_tome_handins(\%itemcount, $class, 'Rogue');
|
||||
my $cash = $copper + $silver * 10 + $gold * 100 + $platinum * 1000;
|
||||
|
||||
if (($faction <= 4) && (plugin::check_handin(\%itemcount, 13316 => 1))) { # Ogre Head
|
||||
if ($cash >= 30000) { # 300 Gold
|
||||
quest::say("Very good!! You found him. His head shall bring us a great reward from the Stormguard. And as for you, here is your Mining Pick 628. Only a member of 628 can wield this fine weapon. We are the only ones who can wield it in such a way as to pierce our foes.");
|
||||
quest::faction(322, 10); # Miners Guild 628
|
||||
quest::faction(223, -10); # Circle Of Unseen Hands
|
||||
quest::faction(379, -10); # Butcherblock Bandits
|
||||
quest::faction(241, 10); # Deeppockets
|
||||
quest::faction(244, -10); # Ebon Mask
|
||||
quest::exp(5000);
|
||||
quest::summonitem(12161); # Mining Pick 628
|
||||
}
|
||||
else {
|
||||
quest::summonitem(13316); # Ogre Head
|
||||
}
|
||||
}
|
||||
elsif (plugin::check_handin(\%itemcount, 18767 => 1)) { #Small, Folded Note
|
||||
quest::say("Ah, welcome! We could use some fresh blood around here. The name's Mater, and I run this little outfit. Work hard for me, and I will reward you well. Cross me, and you'll find yourself buried under the mine cap. Once you are ready to begin your training please make sure that you see Crovsar Dirkbringer, he can assist you in developing your hunting and gathering skills. Return to me when you have become more experienced in our art, I will be able to further instruct you on how to progress through your early ranks, as well as in some of the various [trades] you will have available to you.");
|
||||
quest::summonitem(13516); #Ruined Miner's Tunic
|
||||
quest::ding();
|
||||
quest::faction(322, 100); # Miners Guild 628
|
||||
quest::faction(223, -5); # Circle of Unseen Hands
|
||||
quest::faction(379, -5); # Butcherblock Bandits
|
||||
quest::faction(241, 5); # Deeppoockets
|
||||
quest::faction(244, -15); # Ebon Mask
|
||||
quest::exp(100);
|
||||
}
|
||||
|
||||
#do all other handins first with plugin, then let it do disciplines
|
||||
plugin::try_tome_handins(\%itemcount, $class, 'Rogue');
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
|
||||
sub EVENT_TIMER {
|
||||
|
|
|
|||
|
|
@ -2,25 +2,25 @@
|
|||
# items: 13087, 28012, 28053
|
||||
|
||||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
if($text=~/hail/i) {
|
||||
quest::say("Go away! I'm busy! I don't have time for scoundrels like you! Leave me alone or I shall, um..turn you into, er, a fish or something! That is what us powerful wizards do to those who annoy us! Yes, that is it. A fish! Did that sound scary enough?");
|
||||
}
|
||||
if ($text=~/that was scary/i) {
|
||||
if($text=~/that was scary/i) {
|
||||
quest::say("Ha! I knew it. I could see you trembling! Everyone fears an angry wizard and nobody wants to be a fish. I know I detest fish, it is always fish fish fish around here. Fish cakes, fish stew, fish wine, I am sick of fish. But alas, while I am a powerful wizard, I am also a poor one. Oh well, good things come to those who wait. So, why are you here, $race?");
|
||||
}
|
||||
if ($text=~/stanos sent me/i) {
|
||||
if($text=~/stanos sent me/i) {
|
||||
quest::say("Stanos? Stanos Herkanor? I thought he was long dead. He nearly got me killed, in any case. What does the old fool want of me now?");
|
||||
}
|
||||
if ($text=~/translate/i) {
|
||||
if($text=~/translate/i) {
|
||||
quest::say("Ah, codes are my specialty! It's what I did for the Circle before Hanns took over. But the Fox is wrong. I owe him nothing! As a fact, he owes me! He wants this translated - he will have to pay!");
|
||||
}
|
||||
if ($text=~/pay/i) {
|
||||
if($text=~/pay/i) {
|
||||
quest::say("Aye, pay, and pay you must. I need 100 platinum pieces to begin my work. This tower is old and drafty and it will take that much to make it bearable. And while you're at it, I need something else. I am very busy here and have no time to shop, so bring me back a couple bottles of milk along with your very large bag of platinum, and I will translate anything you wish at that time.");
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_ITEM {
|
||||
if (quest::handin({13087 => 2, 28012 => 1, "platinum" => 100})) { #Bottle of Milk x 2, Combined Parchment , Platinum x 100
|
||||
if(($platinum == 100) && plugin::check_handin(\%itemcount, 13087 => 2, 28012 => 1)) {
|
||||
quest::say("Hmm, interesting. This document is not only encoded, but written in a very obscure language. From what I can gather, it's a variant of elder Teir'Dal, but not one I've encountered. I can not fully translate this, but I know one who can. Find Yendar and give him this.");
|
||||
quest::ding();
|
||||
quest::exp(500);
|
||||
|
|
@ -30,6 +30,7 @@ sub EVENT_ITEM {
|
|||
quest::faction(262,10);#Guards of Qeynos
|
||||
quest::faction(296,10);#Opal Dark Briar
|
||||
}
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
|
||||
#END of FILE Zone: lakerathe ID:51025 -- Eldreth
|
||||
|
|
|
|||
|
|
@ -1,70 +1,175 @@
|
|||
local items = {}
|
||||
|
||||
function items.check_turn_in(trade, trade_check)
|
||||
local handin_data = {};
|
||||
local index = 1;
|
||||
for key, value in pairs(trade) do
|
||||
if (key:findi("item")) then
|
||||
local item_id = value:GetID()
|
||||
if item_id ~= nil and item_id ~= 0 then
|
||||
if handin_data[item_id] ~= nil then
|
||||
handin_data[item_id] = handin_data[item_id] + 1
|
||||
else
|
||||
handin_data[item_id] = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
--create trade_return table == trade
|
||||
--shallow copy
|
||||
local trade_return = {};
|
||||
for key, value in pairs(trade) do
|
||||
trade_return[key] = value;
|
||||
end
|
||||
|
||||
local item_data = {};
|
||||
for x = 1, 4 do
|
||||
local inst = trade["item" .. x];
|
||||
if (inst.valid) then
|
||||
item_data[x] = inst
|
||||
end
|
||||
end
|
||||
-- Handin table for source
|
||||
local handin_data = {};
|
||||
for x = 1, 4 do
|
||||
local inst = trade["item" .. x];
|
||||
if (inst.valid) then
|
||||
local is_attuned = 0;
|
||||
if inst:IsInstNoDrop() then
|
||||
is_attuned = 1;
|
||||
end
|
||||
|
||||
local required_data = {}
|
||||
for i = 1, 4 do
|
||||
local key = "item" .. i;
|
||||
local item_id = trade_check[key]
|
||||
|
||||
if item_id ~= nil and item_id ~= 0 then
|
||||
if required_data[item_id] ~= nil then
|
||||
required_data[item_id] = required_data[item_id] + 1
|
||||
else
|
||||
required_data[item_id] = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local currencies = { "platinum", "gold", "silver", "copper" }
|
||||
|
||||
-- Loop through each currency and check the corresponding key in trade_check
|
||||
for _, currency in ipairs(currencies) do
|
||||
if trade_check[currency] ~= nil and trade_check[currency] ~= 0 then
|
||||
-- Process the currency value
|
||||
local amount = trade_check[currency]
|
||||
required_data[currency] = amount
|
||||
-- You can perform your logic here, like adding to total or comparing values
|
||||
handin_data[x] = string.format("%d|%d|%d", inst:GetID(), inst:GetCharges(), is_attuned);
|
||||
else
|
||||
handin_data[x] = "0|0|0";
|
||||
end
|
||||
end
|
||||
|
||||
for _, currency in ipairs(currencies) do
|
||||
if trade[currency] ~= nil and trade[currency] ~= 0 then
|
||||
handin_data[currency] = trade[currency]
|
||||
end
|
||||
end
|
||||
trade.other:SetEntityVariable("HANDIN_ITEMS", items.get_handin_items_serialized(handin_data))
|
||||
|
||||
if (trade.self) then
|
||||
return trade.self:CheckHandin(trade.other, handin_data, required_data, item_data);
|
||||
else
|
||||
return false
|
||||
end
|
||||
trade.other:SetEntityVariable("HANDIN_MONEY", string.format("%d|%d|%d|%d", trade.copper, trade.silver, trade.gold, trade.platinum))
|
||||
|
||||
--for every item in trade_check check trade_return
|
||||
--if item exists in trade_return then
|
||||
--remove that item from trade_return
|
||||
--else
|
||||
--failure
|
||||
for i = 1, 4 do
|
||||
local key = "item" .. i;
|
||||
if(trade_check[key] ~= nil and trade_check[key] ~= 0) then
|
||||
local found = false;
|
||||
for j = 1, 4 do
|
||||
local inst = trade_return["item" .. j];
|
||||
if(inst.valid and trade_check[key] == inst:GetID()) then
|
||||
trade_return["item" .. j] = ItemInst();
|
||||
found = true;
|
||||
break;
|
||||
end
|
||||
end
|
||||
|
||||
if(not found) then
|
||||
return false;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--convert our money into copper then check that we have enough then convert change back
|
||||
local trade_check_money = 0;
|
||||
local return_money = 0;
|
||||
|
||||
if(trade_check["platinum"] ~= nil and trade_check["platinum"] ~= 0) then
|
||||
trade_check_money = trade_check_money + (trade_check["platinum"] * 1000);
|
||||
end
|
||||
|
||||
if(trade_check["gold"] ~= nil and trade_check["gold"] ~= 0) then
|
||||
trade_check_money = trade_check_money + (trade_check["gold"] * 100);
|
||||
end
|
||||
|
||||
if(trade_check["silver"] ~= nil and trade_check["silver"] ~= 0) then
|
||||
trade_check_money = trade_check_money + (trade_check["silver"] * 10);
|
||||
end
|
||||
|
||||
if(trade_check["copper"] ~= nil and trade_check["copper"] ~= 0) then
|
||||
trade_check_money = trade_check_money + trade_check["copper"];
|
||||
end
|
||||
|
||||
return_money = return_money + trade_return["platinum"] * 1000 + trade_return["gold"] * 100;
|
||||
return_money = return_money + trade_return["silver"] * 10 + trade_return["copper"];
|
||||
|
||||
if(return_money < trade_check_money) then
|
||||
return false;
|
||||
else
|
||||
return_money = return_money - trade_check_money;
|
||||
end
|
||||
|
||||
--replace trade with trade_return
|
||||
trade.item1 = trade_return.item1;
|
||||
trade.item2 = trade_return.item2;
|
||||
trade.item3 = trade_return.item3;
|
||||
trade.item4 = trade_return.item4;
|
||||
|
||||
trade.platinum = math.floor(return_money / 1000);
|
||||
return_money = return_money - (trade.platinum * 1000);
|
||||
|
||||
trade.gold = math.floor(return_money / 100);
|
||||
return_money = return_money - (trade.gold * 100);
|
||||
|
||||
trade.silver = math.floor(return_money / 10);
|
||||
return_money = return_money - (trade.silver * 10);
|
||||
|
||||
trade.copper = return_money;
|
||||
return true;
|
||||
end
|
||||
|
||||
function items.return_items(npc, client, trade, text)
|
||||
npc:ReturnHandinItems(client);
|
||||
text = text or true;
|
||||
local returned = false;
|
||||
|
||||
-- Handin table for source
|
||||
local return_data = {};
|
||||
for i = 1, 4 do
|
||||
local inst = trade["item" .. i];
|
||||
if(inst.valid) then
|
||||
local is_attuned = 0;
|
||||
if inst:IsInstNoDrop() then
|
||||
is_attuned = 1;
|
||||
end
|
||||
|
||||
-- remove delivered task items from return for this slot
|
||||
local return_count = inst:RemoveTaskDeliveredItems()
|
||||
|
||||
if(eq.is_disc_tome(inst:GetID()) and npc:GetClass() >= 19 and npc:GetClass() < 36) then
|
||||
if(client:GetClass() == npc:GetClass() - 19) then
|
||||
client:TrainDisc(inst:GetID());
|
||||
else
|
||||
return_data[#return_data+1] = string.format("%d|%d|%d", inst:GetID(), inst:GetCharges(), is_attuned);
|
||||
npc:Say(string.format("You are not a member of my guild. I will not train you!"));
|
||||
if return_count > 0 then
|
||||
client:PushItemOnCursor(inst);
|
||||
returned = true;
|
||||
end
|
||||
end
|
||||
elseif return_count > 0 then
|
||||
return_data[#return_data+1] = string.format("%d|%d|%d", inst:GetID(), inst:GetCharges(), is_attuned);
|
||||
client:PushItemOnCursor(inst);
|
||||
if text then
|
||||
npc:Say(string.format("I have no need for this %s, you can have it back.", client:GetCleanName()));
|
||||
end
|
||||
returned = true;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
client:SetEntityVariable("RETURN_ITEMS", items.get_handin_items_serialized(return_data))
|
||||
|
||||
local money = false;
|
||||
if(trade.platinum ~= 0) then
|
||||
returned = true;
|
||||
money = true;
|
||||
end
|
||||
|
||||
if(trade.gold ~= 0) then
|
||||
returned = true;
|
||||
money = true;
|
||||
end
|
||||
|
||||
if(trade.silver ~= 0) then
|
||||
returned = true;
|
||||
money = true;
|
||||
end
|
||||
|
||||
if(trade.copper ~= 0) then
|
||||
returned = true;
|
||||
money = true;
|
||||
end
|
||||
|
||||
if money then
|
||||
client:SetEntityVariable("RETURN_MONEY", string.format("%d|%d|%d|%d", trade.copper, trade.silver, trade.gold, trade.platinum));
|
||||
client:AddMoneyToPP(trade.copper, trade.silver, trade.gold, trade.platinum, true);
|
||||
end
|
||||
|
||||
eq.send_player_handin_event();
|
||||
|
||||
return returned;
|
||||
end
|
||||
|
||||
function items.return_bot_items(bot, client, trade, text)
|
||||
|
|
@ -193,5 +298,9 @@ function items.check_bot_turn_in(trade, trade_check)
|
|||
trade.copper = return_money;
|
||||
return true;
|
||||
end
|
||||
|
||||
function items.get_handin_items_serialized(handin_table)
|
||||
return table.concat(handin_table, ",")
|
||||
end
|
||||
|
||||
return items;
|
||||
|
|
@ -1,5 +1,3 @@
|
|||
# Bristlebane 1.0
|
||||
|
||||
my $x;
|
||||
my $y;
|
||||
my $z;
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
--#Lithiniath (NPC ID# 126208)
|
||||
--Plane of Mischief 1.0
|
||||
|
||||
--Triggered version from quest (White Unicorn)
|
||||
|
||||
function event_spawn(e)
|
||||
e.self:Say("The madness has fled my mind and I am once again whole! Give Gelistial my regards, I must leave this place and try to quell the madness I have inflicted.")
|
||||
end
|
||||
|
||||
function event_trade(e) -- Standard Item Return Script
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
15
mischiefplane/#Lithiniath.pl
Normal file
15
mischiefplane/#Lithiniath.pl
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
sub EVENT_SAY {
|
||||
|
||||
if($text=~/hail/i) {
|
||||
|
||||
quest::emote("lowers his horn towards $name. The air around you begins to waver as if immense heat was rising from the floor, yet the air feels no different. You begin to feel heavy and disoriented as you hear a loud wisper begin to speak yet you hear no sound at all. wHaT sEeK iT Is YoU FrOM LiTHiNiaTh?");
|
||||
}
|
||||
|
||||
if($text=~/ph4t l3wtz/i) {
|
||||
quest::say("Prince Thirneg of the Tunarean Court has amassed a vast supply of phat lewts! Perhaps you should ask him for some!");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#END of FILE zone:mischiefplane -- ID 126208 #Lithiniath.pl
|
||||
10
mischiefplane/#the_Mischievous_Jester.pl
Normal file
10
mischiefplane/#the_Mischievous_Jester.pl
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# on death this npc spawns Bristlebane the King of Thieves in the throne room
|
||||
#
|
||||
|
||||
sub EVENT_DEATH_COMPLETE {
|
||||
quest::spawn2(126373,0,0,-127,938,186.125,264); # NPC: Bristlebane_the_King_of_Thieves
|
||||
quest::me("Merry laughter echoes throughout the castle and a cheerful voice is heard saying, 'Come on then if you seek the King of Thieves you must choose wisely! Hurry up lads and lasses!");
|
||||
}
|
||||
|
||||
# EOF zone: mischiefplane ID: 126012 NPC: the_Mischievous_Jester
|
||||
|
||||
15
mischiefplane/Bob_the_Painter.pl
Normal file
15
mischiefplane/Bob_the_Painter.pl
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#Zone: Plane of Mischief
|
||||
#Short Name: mischiefplane
|
||||
#Zone ID: 126
|
||||
#
|
||||
#NPC Name: Bob the Painter
|
||||
#NPC ID: 126268
|
||||
# items: 18008, 17326
|
||||
|
||||
sub EVENT_ITEM {
|
||||
if (plugin::check_handin(\%itemcount, 18008 => 1)) {
|
||||
quest::summonitem(17326); # Item: Empty Pot of Gold
|
||||
quest::say("Ay!!! this is poifect! 'ere take this pot o' gold. It's empty at the moment. Go ask my brother Vinny about the pot and mebbe he'll have a clue how ta get it full agin.");
|
||||
}
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
--[[Zone: Plane of Mischief
|
||||
#Zone ID: 126
|
||||
#NPC Name: Bob the Painter]]
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
|
||||
if item_lib.check_turn_in(e.trade, {item1 = 18008}) then -- Item: Check for Words of Wealth (Combined)
|
||||
e.other:QuestReward(e.self,0,0,0,0,17326,100); -- Item: Pot of Gold
|
||||
e.self:QuestSay(e.other, "Ay!!! this is poifect! 'ere take this pot o' gold. It's empty at the moment. Go ask my brother Vinny about the pot and mebbe he'll have a clue how ta get it full agin.");
|
||||
end
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
||||
125
mischiefplane/Bristlebane_the_King_of_Thieves.pl
Normal file
125
mischiefplane/Bristlebane_the_King_of_Thieves.pl
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
sub EVENT_SPAWN {
|
||||
quest::setnexthpevent(90);
|
||||
quest::settimer("timeup",7200);
|
||||
}
|
||||
|
||||
sub EVENT_COMBAT {
|
||||
if($combat_state == 0) {
|
||||
$npc->SetHP(685000);
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_HP { # adds does not aggro unless within aggro range
|
||||
if($hpevent == 90) {
|
||||
quest::setnexthpevent(80);
|
||||
quest::emote("shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a mystical word of power and suddenly his skin begins to take on a rock like appearance.");
|
||||
quest::modifynpcstat("ac", "1587");
|
||||
}
|
||||
if ($hpevent == 80) {
|
||||
quest::setnexthpevent(70);
|
||||
quest::spawn2(126375,0,0,-88,886,178,384); # a_devious_guardian_jokester
|
||||
quest::spawn2(126376,0,0,-157,886,178,128); # a_tricky_guardian_jester
|
||||
quest::emote("shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a mystical word of power and is suddenly surrrounded by a magical glowing aura.");
|
||||
quest::modifynpcstat("ac", "1087");
|
||||
quest::modifynpcstat("mr", "500");
|
||||
quest::modifynpcstat("fr", "500");
|
||||
quest::modifynpcstat("cr", "500");
|
||||
quest::modifynpcstat("dr", "500");
|
||||
quest::modifynpcstat("pr", "500");
|
||||
}
|
||||
if($hpevent == 70) {
|
||||
quest::setnexthpevent(60);
|
||||
quest::emote("shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a mystical word of power and suddenly his muscles bulge with incomprehensible strength.");
|
||||
quest::modifynpcstat("mr", "200");
|
||||
quest::modifynpcstat("fr", "200");
|
||||
quest::modifynpcstat("cr", "200");
|
||||
quest::modifynpcstat("dr", "200");
|
||||
quest::modifynpcstat("pr", "200");
|
||||
quest::modifynpcstat("max_hit", "1950");
|
||||
quest::modifynpcstat("min_hit", "715");
|
||||
}
|
||||
if($hpevent == 60) {
|
||||
quest::setnexthpevent(50);
|
||||
quest::emote("shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a mystical word of power and is suddenly surrrounded by a magical glowing aura.");
|
||||
quest::modifynpcstat("max_hit", "1800");
|
||||
quest::modifynpcstat("min_hit", "660");
|
||||
quest::modifynpcstat("mr", "500");
|
||||
quest::modifynpcstat("fr", "500");
|
||||
quest::modifynpcstat("cr", "500");
|
||||
quest::modifynpcstat("dr", "500");
|
||||
quest::modifynpcstat("pr", "500");
|
||||
}
|
||||
if ($hpevent == 50) {
|
||||
quest::setnexthpevent(40);
|
||||
quest::spawn2(126375,0,0,-88,886,178,384); # a_devious_guardian_jokester
|
||||
quest::spawn2(126378,0,0,-157,886,178,128); # a_charming_guardian_jester
|
||||
quest::spawn2(126377,0,0,-127,840,178,0); # a_dazed_guardian_jester
|
||||
quest::emote("shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a mystical word of power and suddenly his muscles bulge with incomprehensible strength.");
|
||||
quest::modifynpcstat("mr", "144");
|
||||
quest::modifynpcstat("fr", "144");
|
||||
quest::modifynpcstat("cr", "144");
|
||||
quest::modifynpcstat("pr", "144");
|
||||
quest::modifynpcstat("dr", "144");
|
||||
quest::modifynpcstat("max_hit", "1950");
|
||||
quest::modifynpcstat("min_hit", "715");
|
||||
}
|
||||
if($hpevent == 40) {
|
||||
quest::setnexthpevent(30);
|
||||
quest::emote("shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a string of mystical words and is suddenly surrounded by a magical glowing aura and his skin takes on a rock like appearance.");
|
||||
quest::modifynpcstat("min_hit", "660");
|
||||
quest::modifynpcstat("max_hit", "1800");
|
||||
quest::modifynpcstat("ac", "1587");
|
||||
quest::modifynpcstat("mr", "500");
|
||||
quest::modifynpcstat("fr", "500");
|
||||
quest::modifynpcstat("cr", "500");
|
||||
quest::modifynpcstat("dr", "500");
|
||||
quest::modifynpcstat("pr", "500");
|
||||
}
|
||||
if($hpevent == 30) {
|
||||
quest::setnexthpevent(20);
|
||||
quest::emote("shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a string of mystical words and is suddenly surrounded by a magical glowing aura and his attacks become a blur as he launches into a quickened attack routine.");
|
||||
quest::modifynpcstat("ac", "1087");
|
||||
quest::modifynpcstat("attack_delay", "8");
|
||||
quest::modifynpcstat("mr", "500");
|
||||
quest::modifynpcstat("pr", "500");
|
||||
quest::modifynpcstat("pr", "500");
|
||||
quest::modifynpcstat("pr", "500");
|
||||
quest::modifynpcstat("pr", "500");
|
||||
}
|
||||
if ($hpevent == 20) {
|
||||
quest::setnexthpevent(10);
|
||||
quest::spawn2(126377,0,0,-88,886,178,384); # a_dazed_guardian_jester
|
||||
quest::spawn2(126378,0,0,-157,886,178,128); # a_charming_guardian_jester
|
||||
quest::spawn2(126377,0,0,-146,840,178,0); # a_dazed_guardian_jester
|
||||
quest::spawn2(126377,0,0,-110,840,178,0); # a_dazed_guardian_jester
|
||||
quest::spawn2(126375,0,0,-127,840,178,0); # a_devious_guardian_jokester
|
||||
quest::emote("shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a string of mystical words and is suddenly surrounded by a magical glowing aura and his muscles bulge with incomprehensible strength. ");
|
||||
quest::modifynpcstat("attack_delay", "12");
|
||||
quest::modifynpcstat("max_hit", "1950");
|
||||
quest::modifynpcstat("min_hit", "715");
|
||||
}
|
||||
if($hpevent == 10) {
|
||||
quest::emote("shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a string of mystical words and suddenly his skin takes on a rock like apppearance and his muscles bulge with incomprehensible strength.");
|
||||
quest::modifynpcstat("ac", "1587");
|
||||
quest::modifynpcstat("mr", "144");
|
||||
quest::modifynpcstat("fr", "144");
|
||||
quest::modifynpcstat("cr", "144");
|
||||
quest::modifynpcstat("dr", "144");
|
||||
quest::modifynpcstat("pr", "144");
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_TIMER {
|
||||
if($timer eq "timeup") {
|
||||
quest::depop();
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_DEATH_COMPLETE {
|
||||
quest::stoptimer("engaged");
|
||||
quest::signal(126375,10); # NPC: a_devious_guardian_jokester
|
||||
quest::signal(126376,10); # NPC: a_tricky_guardian_jester
|
||||
quest::signal(126377,10); # NPC: a_dazed_guardian_jester
|
||||
quest::signal(126378,10); # NPC: a_charming_guardian_jester
|
||||
}
|
||||
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
-- Deck of Spontaneous Generation
|
||||
|
||||
function event_say(e)
|
||||
if e.message:findi("Hail") then
|
||||
e.self:Say("Ha ha! Hello to you too! I have got this crazy deck that I'm willing to give to those [looking for a deck]. Ha ha! Oo!");
|
||||
elseif e.message:findi("deck") then
|
||||
e.self:Say("You're looking for a DECK? Ha ha ha! Well, bring me a fishing grub, tee hee, and I'll give you a nifty deck");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
|
||||
if item_lib.check_turn_in(e.trade, {item1 = 13106}) then -- Item: Fishing Grubs
|
||||
e.other:QuestReward(e.self,0,0,0,0,17054,100); -- Item: Deck of Spontaneous Generation
|
||||
e.self:Emote("takes a bite out of the fishing grub that was handed to him. Clukker then says, 'Ha ha HA! Thanks for the tasty treat! Now here is your deck! Hee hee haw!'");
|
||||
end
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
22
mischiefplane/Clukker_The_Crazy.pl
Normal file
22
mischiefplane/Clukker_The_Crazy.pl
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# Deck of Spontaneous Generation
|
||||
#
|
||||
# items: 13106, 17054
|
||||
|
||||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Ha ha! Hello to you too! I have got this crazy deck that I'm willing to give to those [looking for a deck]. Ha ha! Oo!");
|
||||
}
|
||||
if ($text=~/looking for a deck/i) {
|
||||
quest::say("You're looking for a DECK? Ha ha ha! Well, bring me a fishing grub, tee hee, and I'll give you a nifty deck");
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_ITEM {
|
||||
if (plugin::check_handin(\%itemcount, 13106 => 1)) {
|
||||
quest::emote("takes a bite out of the fishing grub that was handed to him. Clukker then says, 'Ha ha HA! Thanks for the tasty treat! Now here is your deck! Hee hee haw!'");
|
||||
quest::summonitem(17054); # Item: Deck of Spontaneous Generation
|
||||
}
|
||||
}
|
||||
|
||||
# EOF zone: mischiefplane ID: 126148 NPC: Clukker_The_Crazy
|
||||
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
--Debbis the Fish (NPCID# 126232)
|
||||
--zone: mischiefplane
|
||||
|
||||
--Quest script to handle turn-in of rabbit foot off Stomples to restore Denizens of Mischief Faction
|
||||
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
|
||||
if item_lib.check_turn_in(e.trade, {item1 = 6883}) then -- Item: Rabbit Foot
|
||||
e.self:QuestSay(e.other,"Oh wow! A rabbits foot!! Thank you so much. Here take this, I won't need this smelly thing any more.");
|
||||
e.other:QuestReward(e.self,0,0,0,0,3190,100); -- Item: Ivy Etched Gauntlets
|
||||
e.other:Faction(391,51); -- +51 to Denizens of Mischief Faction
|
||||
end
|
||||
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
10
mischiefplane/Debbis_the_Fish.pl
Normal file
10
mischiefplane/Debbis_the_Fish.pl
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# items: 6883, 3190
|
||||
sub EVENT_ITEM {
|
||||
if (plugin::check_handin(\%itemcount, 6883 => 1)) {
|
||||
quest::say("Oh wow! A rabbits foot!! Thank you so much. Here take this, I won't need this smelly thing any more.");
|
||||
quest::summonitem(3190); # Item: Ivy Etched Gauntlets
|
||||
quest::faction(437,51); # Faction: Denizens of Mischief
|
||||
quest::exp(100);
|
||||
}
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
--Ferjeneror
|
||||
--Plane of Mischief 1.0
|
||||
|
||||
--QuestNPC that should summon a Deck of Spontaneous Generation upon the hand-in of either all 4 color Cod cards or one King Cod Card.
|
||||
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
|
||||
if item_lib.check_turn_in(e.trade, {item1 = 1791}) or item_lib.check_turn_in(e.trade, {item1 = 1787, item2 = 1788, item3 = 1789, item4 = 1790}) then -- Item: King Cod Card
|
||||
e.self:Say("Indeed you found the one I need. I give you this to feed your greed. A paper knight of blackened heart. A paper throne to match his art. A paper crown of darkest night. A throne of ice to chill the sight. Inside the deck you place the four, to guard the wings that fly the floor.");
|
||||
e.other:QuestReward(e.self,0,0,0,0,17054,100); -- Item: Deck of Spontaneous Generation
|
||||
end
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
||||
--Hail text not verified. Prior posts show he will attack you if you tell him "No"
|
||||
function event_say(e)
|
||||
if e.message:findi("Hail") then
|
||||
e.self:Say("Hello ".. e.other:GetName() .. ". Do you have a gift for me?"); -- leads player into response of "No" which triggers below
|
||||
elseif e.message:findi("No") then
|
||||
e.self:AddToHateList(e.other); -- attack player
|
||||
end
|
||||
end
|
||||
|
||||
29
mischiefplane/Ferjeneror.pl
Normal file
29
mischiefplane/Ferjeneror.pl
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
# items: 17054
|
||||
sub EVENT_ITEM {
|
||||
if (plugin::check_handin(\%itemcount, 125 => 4)) {
|
||||
quest::say("Thank you."); #made up
|
||||
quest::summonitem(17054); # Item: Deck of Spontaneous Generation
|
||||
quest::exp(100);
|
||||
}
|
||||
if (plugin::check_handin(\%itemcount, 126 => 4)) {
|
||||
quest::say("Thank you."); #made up
|
||||
quest::summonitem(17054); # Item: Deck of Spontaneous Generation
|
||||
quest::exp(100);
|
||||
}
|
||||
if (plugin::check_handin(\%itemcount, 127 => 4)) {
|
||||
quest::say("Thank you."); #made up
|
||||
quest::summonitem(17054); # Item: Deck of Spontaneous Generation
|
||||
quest::exp(100);
|
||||
}
|
||||
if (plugin::check_handin(\%itemcount, 128 => 4)) {
|
||||
quest::say("Thank you."); #made up
|
||||
quest::summonitem(17054); # Item: Deck of Spontaneous Generation
|
||||
quest::exp(100);
|
||||
}
|
||||
if (plugin::check_handin(\%itemcount, 161 => 1)) {
|
||||
quest::say("Thank you."); #made up
|
||||
quest::summonitem(17054); # Item: Deck of Spontaneous Generation
|
||||
quest::exp(100);
|
||||
}
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
--Gorilla Scholar
|
||||
--Plane of Mischief 1.0
|
||||
|
||||
--NPC Dialogue from http://web.archive.org/web/20021214190527/http://www.swtoys.net:80/pom/gorillascholar.html
|
||||
|
||||
function event_say(e)
|
||||
local chance = math.random(0,100)
|
||||
if e.message:findi("Hail") and chance <= 5 then -- 5% attack NPC will attack upon being hailed
|
||||
e.self:Emote("throws the book he was chewing on to the ground and attacks.")
|
||||
e.self:AddToHateList(e.other);
|
||||
elseif e.message:findi("Hail") and chance <= 50 then -- 45% chance for this response
|
||||
e.self:Emote("appears enthralled as he tears page after page out of a book titled 'Secrets of the Universe, Volume 8.'");
|
||||
else -- 50% chance of this response
|
||||
e.self:Emote("looks at you out of the corner of his eye as he chews in contentment upon an ancient scroll lined with silver and covered with mystical runes of power.");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
6
mischiefplane/Gorilla_Scholar.pl
Normal file
6
mischiefplane/Gorilla_Scholar.pl
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
my $chance = int(rand(100));
|
||||
if($text=~/hail/i && $chance == 7){
|
||||
quest::attack($name);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,12 +1,7 @@
|
|||
-- items: 9822
|
||||
function event_say(e)
|
||||
local qglobals = eq.get_qglobals(e.other);
|
||||
if ((qglobals["Fatestealer_shak"] ~= nil and qglobals["Fatestealer_shak"] == "1") or e.other:HasItem(52355) or e.other:HasItem(52356)) and e.message:findi("blue orb") then
|
||||
e.other:SummonItem(9822); -- Item: Shard of Blue Metal
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
-- items: 9822
|
||||
function event_say(e)
|
||||
local qglobals = eq.get_qglobals(e.other);
|
||||
if ((qglobals["Fatestealer_shak"] ~= nil and qglobals["Fatestealer_shak"] == "1") or e.other:HasItem(52355) or e.other:HasItem(52356)) and e.message:findi("blue orb") then
|
||||
e.other:SummonItem(9822); -- Item: Shard of Blue Metal
|
||||
end
|
||||
end
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
--Life
|
||||
--Plane of Mischief 1.0
|
||||
|
||||
function event_say(e)
|
||||
e.self:Shout("SILENCE IN THE LIBRARY!");
|
||||
e.self:SpellFinished(982, e.other); --cast Cazic Touch (10K unresistable dmg)
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
||||
5
mischiefplane/Life.pl
Normal file
5
mischiefplane/Life.pl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
sub EVENT_SAY {
|
||||
$npc->CastSpell(3087,$userid); # Spell: Cazic Touch
|
||||
quest::shout("SILENCE IN THE LIBRARY!");
|
||||
|
||||
}
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
--Lithiniath (NPC ID# 126208)
|
||||
--Plane of Mischief 1.0
|
||||
|
||||
--NPC Dialog from http://www.angelfire.com/pq/tritonsummers/entry2-7.htm
|
||||
--and also from http://web.archive.org/web/20021102123729/http://www.swtoys.net:80/pom/lithiniath.html
|
||||
|
||||
|
||||
function event_say(e)
|
||||
if(e.message:findi("Hail")) then
|
||||
e.self:Emote("lowers his horn towards " .. e.other:GetName() .. ". The air around you begins to waver as if immense heat was rising from the floor, yet the air feels no different. You begin to feel heavy and disoriented as you hear a loud whisper begin to speak yet hear no sound at all. 'wHaT sEeK iT Is YoU FrOM LiTHiNiaTh?'");
|
||||
elseif(e.message:findi("ph4t l3wt")) then
|
||||
e.self:Say("Prince Thirneg of the Tunarean Court has amassed a vast supply of phat lewts! Perhaps you should ask him for some!");
|
||||
elseif(e.message:findi("phat lewt")) then
|
||||
e.self:Say("Prince Thirneg of the Tunarean Court has amassed a vast supply of phat lewts! Perhaps you should ask him for some!");
|
||||
elseif(e.message:findi("bristlebane")) then
|
||||
e.self:Emote("smiles, exposing his yellowed equine teeth and emits a deep rumbling chuckle. 'I wOuLD ADviSe aGaiNST seEKing tHat inDiviDuAl. Trust me, he is quite mad!! HahahahHHHaAAahhaAhahahahHhahahaahahaHHHhahah!!'");
|
||||
elseif(e.message:findi("fizzlethorp")) then
|
||||
e.self:Emote("smiles, exposing his yellowed equine teeth and emits a deep rumbling chuckle. 'I wOuLD ADviSe aGaiNST seEKing tHat inDiviDuAl. Trust me, he is quite mad!! HahahahHHHaAAahhaAhahahahHhahahaahahaHHHhahah!!'");
|
||||
elseif(e.message:findi("I seek madness")) then
|
||||
e.self:Say("uoy skees ssendam, ssendam kees ton od uoY");
|
||||
elseif(e.message:findi("white stallion")) then
|
||||
e.self:Say("WhY dOeS eVErYonE aSk mE abOuT tHaT crEAturE? The oNly sTalLions I hAVe sEeN aRe iN tHe PLaNe oF GrOwTh! SuReLy BrisTleBaNe iS cAUsiNg yOuR eYeS tO deCeiVe yOu! NeXt yOu'rE gOiNg tO tEll Me tHeRe aRe fLyiNG MOnkeYs! ThEre sHaLL bE nO mOre tALk oF nOn-eXisteNt cReAturEs.");
|
||||
elseif(e.message:findi("Tunarean Court")) then
|
||||
e.self:Say("'I aM nO LoNger AFfiLiaTeD wItH thAt pArtiCulaR sOciEtY oF bEiNgs. I hAve bEcOme thE aNtiTheSis Of tHeiR maGicAl naTuRe sO Am nO LOngEr weLcOme iN mY foREst");
|
||||
elseif(e.message:findi("there are flying monkeys")) then
|
||||
e.self:Emote("snorts in disbelief 'Uh huh. Suuuuuure there are! They live in my forest right next to the purple gorillas, plaid elephants, and butterscotch golems!'");
|
||||
elseif(e.message:findi("Forest")) then
|
||||
e.self:Say("THaT's riGHt. It'S mY foREst.");
|
||||
end
|
||||
end
|
||||
|
||||
--[[ ommitted this part since it should be with the spawned White Lithinath after horn handed into white stallion
|
||||
|
||||
function event_death_complete(e)
|
||||
e.self:Shout("The madness has fled my mind and I am once again whole! Give Gelistial my regards, I must leave this place and try to quell the madness I have inflicted.");
|
||||
end]]
|
||||
|
||||
--standard item return
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
--[[Zone: Plane of Mischief
|
||||
#Short Name: mischiefplane
|
||||
#Zone ID: 126
|
||||
|
||||
#NPC Name: Peachy D`Vicci ]]
|
||||
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
|
||||
if item_lib.check_turn_in(e.trade, {item1 = 9504, item2 = 9504}) then -- Item: Funny Money x2
|
||||
local gift = eq.ChooseRandom(9505,9506,9507,9508,9509,9511,9512,9513,6877);
|
||||
e.other:QuestReward(e.self,0,0,0,0,gift,100); -- Provides Class gift box or Frostmaiden's Idol
|
||||
e.self:Emote("reaches into her satchel and pulls out a small box.");
|
||||
e.self:QuestSay(e.other,"Here ya go! Enjoy it. Come back soon. Just a warning though, I cant give you a box that you already have. There isn't enough for everyone you know!");
|
||||
end
|
||||
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
||||
16
mischiefplane/Peachy_D-Vicci.pl
Normal file
16
mischiefplane/Peachy_D-Vicci.pl
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#Zone: Plane of Mischief
|
||||
#Short Name: mischiefplane
|
||||
#Zone ID: 126
|
||||
#
|
||||
#NPC Name: Peachy D`Vicci
|
||||
#NPC ID: 126171
|
||||
# items: 9504, 9505, 9506, 9507, 9508, 9509, 9511, 9512, 9513, 6877
|
||||
|
||||
sub EVENT_ITEM {
|
||||
if (plugin::check_handin(\%itemcount, 9504 => 2)) {
|
||||
quest::summonitem(quest::ChooseRandom(9505,9506,9507,9508,9509,9511,9512,9513,6877)); # Item(s): Red Gift Box (9505), Blue Gift Box (9506), Green Gift Box (9507), Black Gift Box (9508), Purple Gift Box (9509), White Gift Box (9511), Silver Gift Box (9512), Grey Gift Box (9513), Frostmaidens Idol (6877)
|
||||
quest::emote("reaches into her satchel and pulls out a small box.");
|
||||
quest::say("Here ya go! Enjoy it. Come back soon. Just a warning though, I cant give you a box that you already have. There isn't enough for everyone you know!");
|
||||
}
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
--[[Zone: Plane of Mischief
|
||||
#Short Name: mischiefplane
|
||||
#Zone ID: 126
|
||||
#
|
||||
#NPC Name: Posie the Librarian ]]
|
||||
|
||||
|
||||
function event_say(e)
|
||||
if e.message:findi("Hail") then
|
||||
e.self:Say("SSH! do not disturb the library! It's ".. e.other:Race() .." like you who have ruined your own books, you won't ruin mine!");
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
|
||||
if item_lib.check_turn_in(e.trade, {item1 = 9510}) then -- Item: Library Card
|
||||
e.self:Say("Ahh, you brought your card. Let's see here. " .. e.other:GetName() .. ", is it? Here's the only book we have stocked at the moment. It's missing the chapter on wealth but there's an excellent story about melting your clothing in a pot on page 11. It's a one of a kind story written completely in invisible ink. Enjoy!");
|
||||
e.other:QuestReward(e.self,0,0,0,0,17325,100); -- Item: Book of Mischief
|
||||
end
|
||||
|
||||
item_lib.return_items(e.self, e.other, e.trade);
|
||||
end
|
||||
20
mischiefplane/Posie_the_Librarian.pl
Normal file
20
mischiefplane/Posie_the_Librarian.pl
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#Zone: Plane of Mischief
|
||||
#Short Name: mischiefplane
|
||||
#Zone ID: 126
|
||||
#
|
||||
#NPC Name: Posie the Librarian
|
||||
#NPC ID: 126215
|
||||
# items: 9510, 17325
|
||||
|
||||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("SSH! do not disturb the library! It's $race like you who have ruined your own books, you won't ruin mine!");
|
||||
}
|
||||
}
|
||||
sub EVENT_ITEM {
|
||||
if (plugin::check_handin(\%itemcount, 9510 => 1)) {
|
||||
quest::summonitem(17325); # Item: Book of Mischief
|
||||
quest::say("Ahh, you brought your card. Let's see here. $name is it? Here's the only book we have stocked at the moment. It's missing the chapter on wealth but there's an excellent story about melting your clothing in a pot on page 11. It's a one of a kind story written completely in invisible ink. Enjoy!");
|
||||
}
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
|
|
@ -1,27 +1,7 @@
|
|||
-- items: 9822
|
||||
function event_say(e)
|
||||
local qglobals = eq.get_qglobals(e.other);
|
||||
if ((qglobals["Fatestealer_shak"] ~= nil and qglobals["Fatestealer_shak"] == "1") or e.other:HasItem(52355) or e.other:HasItem(52356)) and e.message:findi("blue orb") then
|
||||
e.other:SummonItem(9822); -- Item: Shard of Blue Metal
|
||||
end
|
||||
|
||||
if e.message:findi("hail") then
|
||||
e.self:Say("What does one have to do to win at this game? Each move I make they counter a better move. I sure could use some help.");
|
||||
elseif e.message:findi("help") then
|
||||
e.self:Say("Oh you are willing to help me? Very well I really need to end this game and put my opponent in check mate. You can either gather up four white pawns to bring me closer to what I need. Or if your willing to risk it all and go for check mate bring me one each of a white bishop, white knight, white castle, and a white queen. If you do so I'll have checkmate for sure. However the pieces can get a little lively in the defense of their king so be warned if you do so.");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
|
||||
if item_lib.check_turn_in(e.trade, {item1 = 62331, item2 = 62333, item3 = 62332, item4 = 62334}) then -- Item: A White Bishop, Knight, Castle, Queen
|
||||
e.other:QuestReward(e.self,{exp = 1000}); -- Exp Only
|
||||
e.self:Say("Oh wow you have done better than I ever expected. I almost have her in checkmate if you could take care of these pieces I'll have him for sure!");
|
||||
-- Start Event - WIP
|
||||
elseif item_lib.check_turn_in(e.trade, {item1 = 62330, item2 = 62330, item3 = 62330, item4 = 62330}) then -- Item: A White Pawn x4
|
||||
e.other:QuestReward(e.self,{exp = 1000}); -- Exp Only
|
||||
e.self:Say("Excellent with these four gone I can make my move now! Here take this as your reward.");
|
||||
end
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
-- items: 9822
|
||||
function event_say(e)
|
||||
local qglobals = eq.get_qglobals(e.other);
|
||||
if ((qglobals["Fatestealer_shak"] ~= nil and qglobals["Fatestealer_shak"] == "1") or e.other:HasItem(52355) or e.other:HasItem(52356)) and e.message:findi("blue orb") then
|
||||
e.other:SummonItem(9822); -- Item: Shard of Blue Metal
|
||||
end
|
||||
end
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
function event_death_complete(e)
|
||||
local x,y,z,h = e.self:GetX(), e.self:GetY(), e.self:GetZ(), e.self:GetHeading();
|
||||
eq.spawn2(126366,0,0,x,y,z,h);
|
||||
end
|
||||
7
mischiefplane/Sniffles.pl
Normal file
7
mischiefplane/Sniffles.pl
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
sub EVENT_DEATH_COMPLETE {
|
||||
my $x = $npc->GetX();
|
||||
my $y = $npc->GetY();
|
||||
my $z = $npc->GetZ();
|
||||
my $h = $npc->GetHeading();
|
||||
quest::spawn2(126366,0,0,$x,$y,$z,$h); # NPC: Stomples
|
||||
}
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
--[[#Zone: Plane of Mischief
|
||||
#Short Name: mischiefplane
|
||||
#Zone ID: 126
|
||||
#
|
||||
#NPC Name: Vinny V. D'vicci
|
||||
|
||||
Additional dialog for fishing and skunk foot turn in noted at: http://everquest.allakhazam.com/db/npc.html?id=6756]]
|
||||
|
||||
function event_spawn(e)
|
||||
eq.set_timer("fishing",5 * 60 * 1000) -- 5 min timer on repeating text
|
||||
end
|
||||
|
||||
function event_say(e)
|
||||
if e.message:findi("pot of gold") then
|
||||
e.self:Say("Pot o` gold? Bwahahahaha! Only pot around is them ones I warsh my clothes in. Gotta be careful though, one time I dropped one of dem woids of wealth in and BADABING no clothes jus a stinkin coin that wouldn't buy me a fishin grub.");
|
||||
elseif e.message:findi("man") then -- BASED ON TLP PROGRESSION SERVERS
|
||||
e.self:Say("Foist ya gotta help my brudda Bob. Getcherself one of em books 'es talkin about. Den... Ya's gotta find me dem woids of wealth. Well? Watcha standin here gawkin at me for? Get movin!");
|
||||
end
|
||||
end
|
||||
|
||||
function event_timer(e)
|
||||
if e.timer == "fishing" then -- BASED ON TLP PROGRESSION SERVERS
|
||||
e.self:Say("I'm fishing fishing fishing. I fish the whole week through. Just fishing fishing fishing. It's what I always do");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e) -- BASED ON TLP PROGRESSION SERVERS
|
||||
local item_lib = require("items");
|
||||
|
||||
if item_lib.check_turn_in(e.trade, {item1 = 6876}) then -- Item: lucky skunk's foot
|
||||
e.self:QuestSay(e.other,"Nice work kid. Now I'm feelin lucky. So's ya say ya wanna learn about cards right? Lemme tell ya. Them cards are nice but lets have some REAL fun. Yer resourceful, I like that. What say we take over this joint fer ourselves? Ol' Bristle's gettin soft, ya know? Wadda ya say? [" .. eq.say_link("Man") .. "] or mouse?");
|
||||
e.other:AddEXP(500);
|
||||
end
|
||||
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
12
mischiefplane/Vinny_V._D-vicci.pl
Normal file
12
mischiefplane/Vinny_V._D-vicci.pl
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
#Zone: Plane of Mischief
|
||||
#Short Name: mischiefplane
|
||||
#Zone ID: 126
|
||||
#
|
||||
#NPC Name: Vinny V. D'vicci
|
||||
#NPC ID: 126277
|
||||
|
||||
sub EVENT_SAY {
|
||||
if ($text=~/pot of gold/i) {
|
||||
quest::say("Pot o` gold? Bwahahahaha! Only pot around is them ones I warsh my clothes in. Gotta be careful though, one time I dropped one of dem woids of wealth in and BADABING no clothes jus a stinkin coin that wouldn't buy me a fishin grub.");
|
||||
}
|
||||
}
|
||||
12
mischiefplane/a_charming_guardian_jester.pl
Normal file
12
mischiefplane/a_charming_guardian_jester.pl
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
sub EVENT_SPAWN {
|
||||
quest::settimer(1,1800);
|
||||
}
|
||||
|
||||
sub EVENT_SIGNAL {
|
||||
quest::depop();
|
||||
}
|
||||
|
||||
sub EVENT_TIMER {
|
||||
quest::depop();
|
||||
}
|
||||
|
||||
12
mischiefplane/a_dazed_guardian_jester.pl
Normal file
12
mischiefplane/a_dazed_guardian_jester.pl
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
sub EVENT_SPAWN {
|
||||
quest::settimer(1,1800);
|
||||
}
|
||||
|
||||
sub EVENT_SIGNAL {
|
||||
quest::depop();
|
||||
}
|
||||
|
||||
sub EVENT_TIMER {
|
||||
quest::depop();
|
||||
}
|
||||
|
||||
12
mischiefplane/a_devious_guardian_jokester.pl
Normal file
12
mischiefplane/a_devious_guardian_jokester.pl
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
sub EVENT_SPAWN {
|
||||
quest::settimer(1,1800);
|
||||
}
|
||||
|
||||
sub EVENT_SIGNAL {
|
||||
quest::depop();
|
||||
}
|
||||
|
||||
sub EVENT_TIMER {
|
||||
quest::depop();
|
||||
}
|
||||
|
||||
12
mischiefplane/a_tricky_guardian_jester.pl
Normal file
12
mischiefplane/a_tricky_guardian_jester.pl
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
sub EVENT_SPAWN {
|
||||
quest::settimer(1,1800);
|
||||
}
|
||||
|
||||
sub EVENT_SIGNAL {
|
||||
quest::depop();
|
||||
}
|
||||
|
||||
sub EVENT_TIMER {
|
||||
quest::depop();
|
||||
}
|
||||
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
--a white stallion (NPC
|
||||
--zone: mischiefplane
|
||||
|
||||
--quest NPC for Crest of the Unicorns. Will spawn White Lithiniath upon quest hand-in
|
||||
|
||||
function event_spawn(e)
|
||||
eq.depop(126612); -- despawns White Lithiniath if remained up
|
||||
end
|
||||
|
||||
function event_say(e)
|
||||
if e.message:findi("Hail") then
|
||||
e.self:Emote("stares at " .. e.other:GetCleanName() .. " unblinking with colorless eyes.");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
|
||||
if item_lib.check_turn_in(e.trade, {item1 = 22856}) then --Check for Lithiniath's Horn
|
||||
e.self:QuestSay(e.other,"The madness has fled my mind and I am once again whole! Give Gelistial my regards, I must leave this place and try to quell the madness I have inflicted.");
|
||||
e.other:QuestReward(e.self,0,0,0,0,24869,100); -- Crest of the Unicorns
|
||||
eq.depop_with_timer();
|
||||
eq.spawn2(126612,0,0,-1013,509,110.97,198);
|
||||
end
|
||||
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
||||
7
mischiefplane/a_white_stallion.pl
Normal file
7
mischiefplane/a_white_stallion.pl
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# items: 22856, 24869
|
||||
sub EVENT_ITEM {
|
||||
if (plugin::check_handin(\%itemcount, 22856 => 1)) {
|
||||
quest::say("The madness has fled my mind and I am once again whole! Give Gelistial my regards, I must leave this place and try to quell the madness I have inflicted.");
|
||||
quest::summonitem(24869); # Item: Crest of the Unicorn
|
||||
}
|
||||
}
|
||||
|
|
@ -1,150 +0,0 @@
|
|||
--- PoM 2.0 Bristlebane
|
||||
|
||||
-- Variables
|
||||
local bristlebane_id = 126373;
|
||||
local mischievous_jester_id = 126012;
|
||||
local event_adds = {126375,126376,126377,126378};
|
||||
local next_hp_event = 90;
|
||||
local event_stat_stages = {
|
||||
-- [Percent] = {AC, Min Attack, Max Attack, Attack Delay, mr, cr, fr, pr, dr, "Emote"}
|
||||
[10] = {1587 ,715 ,1950 ,12 ,144 ,144 ,144 ,144 ,144 ,"Bristlebane the King of Thieves shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a string of mystical words and suddenly his skin takes on a rock like apppearance and his muscles bulge with incomprehensible strength."},
|
||||
[20] = {1087 ,715 ,1950 ,12 ,500 ,500 ,500 ,500 ,500 ,"Bristlebane the King of Thieves shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a string of mystical words and is suddenly surrounded by a magical glowing aura and his muscles bulge with incomprehensible strength."},
|
||||
[30] = {1087 ,660 ,1800 ,8 ,500 ,500 ,500 ,500 ,500 ,"Bristlebane the King of Thieves shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a string of mystical words and is suddenly surrounded by a magical glowing aura and his attacks become a blur as he launches into a quickened attack routine."},
|
||||
[40] = {1587 ,660 ,1800 ,12 ,500 ,500 ,500 ,500 ,500 ,"Bristlebane the King of Thieves shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a string of mystical words and is suddenly surrounded by a magical glowing aura and his skin takes on a rock like appearance."},
|
||||
[50] = {1087 ,715 ,1950 ,12 ,144 ,144 ,144 ,144 ,144 ,"Bristlebane the King of Thieves shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a mystical word of power and suddenly his muscles bulge with incomprehensible strength."},
|
||||
[60] = {1087 ,660 ,1800 ,12 ,500 ,500 ,500 ,500 ,500 ,"Bristlebane the King of Thieves shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a mystical word of power and is suddenly surrrounded by a magical glowing aura."},
|
||||
[70] = {1087 ,715 ,1800 ,12 ,200 ,200 ,200 ,200 ,200 ,"Bristlebane the King of Thieves shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a mystical word of power and suddenly his muscles bulge with incomprehensible strength."},
|
||||
[80] = {1087 ,680 ,1904 ,12 ,500 ,500 ,500 ,500 ,500 ,"Bristlebane the King of Thieves shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a mystical word of power and is suddenly surrrounded by a magical glowing aura."},
|
||||
[90] = {1587 ,680 ,1904 ,12 ,144 ,96 ,96 ,96 ,96 ,"Bristlebane the King of Thieves shakes with laughter and says, 'You are much stronger than I thought. Looks like I'm gonna have to use all the tricks of the trade!' He then shouts a mystical word of power and suddenly his skin begins to take on a rock like appearance."},
|
||||
[100] = {548 ,680 ,1904 ,12 ,144 ,96 ,96 ,96 ,96 ,"You dare try to trick me!"} -- Base Stats
|
||||
};
|
||||
|
||||
-- Event
|
||||
function evt_bristlebane_spawn(e)
|
||||
next_hp_event = 90;
|
||||
eq.set_next_hp_event(next_hp_event);
|
||||
eq.set_timer("despawn", 2 * 60 * 60 * 1000); -- 2 Hours
|
||||
end
|
||||
|
||||
function evt_bristlebane_combat(e)
|
||||
if e.joined then
|
||||
eq.stop_timer("reset_event");
|
||||
eq.pause_timer("despawn");
|
||||
eq.set_timer("aggrolink", 3 * 1000);
|
||||
else
|
||||
eq.set_timer("reset_event", 60 * 1000); -- 1 Minute Reset
|
||||
eq.resume_timer("despawn");
|
||||
eq.stop_timer("aggrolink");
|
||||
end
|
||||
end
|
||||
|
||||
function evt_bristlebane_hp(e)
|
||||
if e.hp_event == next_hp_event and next_hp_event > 0 then
|
||||
set_phase(e,next_hp_event);
|
||||
next_hp_event = next_hp_event - 10;
|
||||
eq.set_next_hp_event(next_hp_event);
|
||||
|
||||
if e.hp_event == 80 then
|
||||
eq.spawn2(126375,0,0,-88,886,178,384):AddToHateList(e.self:GetHateRandom(),1); -- NPC: a_devious_guardian_jokester
|
||||
eq.spawn2(126376,0,0,-157,886,178,128):AddToHateList(e.self:GetHateRandom(),1); -- NPC: a_tricky_guardian_jester
|
||||
elseif e.hp_event == 50 then
|
||||
eq.spawn2(126375,0,0,-88,886,178,384):AddToHateList(e.self:GetHateRandom(),1); -- NPC: a_devious_guardian_jokester
|
||||
eq.spawn2(126378,0,0,-157,886,178,128):AddToHateList(e.self:GetHateRandom(),1); -- NPC: a_charming_guardian_jester
|
||||
eq.spawn2(126377,0,0,-127,840,178,0):AddToHateList(e.self:GetHateRandom(),1); -- NPC: a_dazed_guardian_jester
|
||||
elseif e.hp_event == 20 then
|
||||
eq.spawn2(126377,0,0,-88,886,178,384):AddToHateList(e.self:GetHateRandom(),1); -- NPC: a_dazed_guardian_jester
|
||||
eq.spawn2(126378,0,0,-157,886,178,128):AddToHateList(e.self:GetHateRandom(),1); -- NPC: a_charming_guardian_jester
|
||||
eq.spawn2(126377,0,0,-146,840,178,0):AddToHateList(e.self:GetHateRandom(),1); -- NPC: a_dazed_guardian_jester
|
||||
eq.spawn2(126377,0,0,-110,840,178,0):AddToHateList(e.self:GetHateRandom(),1); -- NPC: a_dazed_guardian_jester
|
||||
eq.spawn2(126375,0,0,-127,840,178,0):AddToHateList(e.self:GetHateRandom(),1); -- NPC: a_devious_guardian_jokester
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function evt_bristlebane_timer(e)
|
||||
if e.timer == "despawn" then
|
||||
depop_all_event_mobs(e);
|
||||
eq.depop();
|
||||
elseif e.timer == "reset_event" then
|
||||
reset_event(e);
|
||||
elseif e.timer == "aggrolink" then
|
||||
local npc_list = eq.get_entity_list():GetNPCList();
|
||||
for npc in npc_list.entries do
|
||||
if npc.valid and not npc:IsEngaged() and (npc:GetNPCTypeID() == 126375 or npc:GetNPCTypeID() == 126376 or npc:GetNPCTypeID() == 126377 or npc:GetNPCTypeID() == 126378) then
|
||||
npc:AddToHateList(e.self:GetHateRandom(),1);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function reset_event(e)
|
||||
depop_all_event_mobs(e);
|
||||
e.self:WipeHateList();
|
||||
e.self:GotoBind();
|
||||
e.self:BuffFadeAll();
|
||||
e.self:SetHP(e.self:GetMaxHP());
|
||||
|
||||
set_phase(e,100);
|
||||
next_hp_event = 90;
|
||||
eq.set_next_hp_event(next_hp_event);
|
||||
end
|
||||
|
||||
function set_phase(e, hp_event)
|
||||
e.self:ModifyNPCStat("ac", tostring(event_stat_stages[hp_event][1]));
|
||||
e.self:ModifyNPCStat("min_hit", tostring(event_stat_stages[hp_event][2]));
|
||||
e.self:ModifyNPCStat("max_hit", tostring(event_stat_stages[hp_event][3]));
|
||||
e.self:ModifyNPCStat("attack_delay", tostring(event_stat_stages[hp_event][4]));
|
||||
e.self:ModifyNPCStat("mr", tostring(event_stat_stages[hp_event][5]));
|
||||
e.self:ModifyNPCStat("cr", tostring(event_stat_stages[hp_event][6]));
|
||||
e.self:ModifyNPCStat("fr", tostring(event_stat_stages[hp_event][7]));
|
||||
e.self:ModifyNPCStat("pr", tostring(event_stat_stages[hp_event][8]));
|
||||
e.self:ModifyNPCStat("dr", tostring(event_stat_stages[hp_event][9]));
|
||||
|
||||
eq.local_emote({e.self:GetX(), e.self:GetY(), e.self:GetZ()},MT.LightBlue,500,event_stat_stages[hp_event][10]);
|
||||
end
|
||||
|
||||
function depop_all_event_mobs(e)
|
||||
for i = 1, #event_adds do
|
||||
eq.depop_all(event_adds[i]);
|
||||
end
|
||||
end
|
||||
|
||||
function evt_add_spawn(e)
|
||||
eq.set_timer("depop", 2 * 60 * 60 * 1000);
|
||||
end
|
||||
|
||||
function evt_add_combat(e)
|
||||
if e.joined then
|
||||
if not eq.is_paused_timer("depop") then
|
||||
eq.pause_timer("depop");
|
||||
end
|
||||
else
|
||||
eq.resume_timer("depop");
|
||||
end
|
||||
end
|
||||
|
||||
function evt_add_timer(e)
|
||||
if e.timer == "depop" then
|
||||
eq.depop();
|
||||
end
|
||||
end
|
||||
|
||||
function evt_jester_death(e)
|
||||
eq.unique_spawn(bristlebane_id,0,0,-127,938,186.125,264); --NPC: Bristlebane_the_King_of_Thieves
|
||||
eq.zone_emote(MT.Yellow, "Merry laughter echoes throughout the castle and a cheerful voice is heard saying, 'Come on then if you seek the King of Thieves you must choose wisely! Hurry up lads and lasses!")
|
||||
end
|
||||
|
||||
function event_encounter_load(e)
|
||||
eq.register_npc_event(Event.spawn, bristlebane_id, evt_bristlebane_spawn);
|
||||
eq.register_npc_event(Event.combat, bristlebane_id, evt_bristlebane_combat);
|
||||
eq.register_npc_event(Event.hp, bristlebane_id, evt_bristlebane_hp);
|
||||
eq.register_npc_event(Event.timer, bristlebane_id, evt_bristlebane_timer);
|
||||
|
||||
for i = 1, #event_adds do
|
||||
eq.register_npc_event(Event.spawn, event_adds[i], evt_add_spawn);
|
||||
eq.register_npc_event(Event.combat, event_adds[i], evt_add_combat);
|
||||
eq.register_npc_event(Event.timer, event_adds[i], evt_add_timer);
|
||||
end
|
||||
|
||||
eq.register_npc_event(Event.death_complete, mischievous_jester_id, evt_jester_death);
|
||||
end
|
||||
|
|
@ -1 +0,0 @@
|
|||
eq.load_encounter("Bristlebane_the_King_of_Thieves"); -- 2.0 Version
|
||||
|
|
@ -21,13 +21,18 @@ sub EVENT_SAY {
|
|||
}
|
||||
|
||||
sub EVENT_ITEM {
|
||||
if (quest::handin({"platinum" => 300, 62632 => 1})) { #300pp and Poem of the Storms
|
||||
my $cash = $copper + 10 * $silver + 100 * $gold + 1000 * $platinum;
|
||||
|
||||
if(($cash >= 300000) && plugin::check_handin(\%itemcount, 62632 => 1)) { #Poem of the Storms
|
||||
$client->Message(0,"The farmer looks at you with a stunned expression on his face. He carefully sets the coins down in a neat stack on the ground and slowly unfolds the paper. As he reads the poem, heavy tears form in the corners of his eyes and drop onto the page. When he is done reading he carefully folds it back up and hands the page back to you. He then wipes his nose with his sleeve.");
|
||||
quest::spawn2(33159, 0, 0, -1152, -362, 1.19, 0); #a_faithful_farmer
|
||||
quest::say("I think I understand a little better about faith. Maybe my faith brought you here, maybe yours did, I don't know. I don't think it matters. You've shown me something about kindness as well. Thank you so much!");
|
||||
quest::summonitem(62633); #Tear-stained Poem of the Storms
|
||||
quest::depop_withtimer();
|
||||
}
|
||||
else {
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_SPAWN {
|
||||
|
|
|
|||
|
|
@ -21,13 +21,18 @@ sub EVENT_SAY {
|
|||
}
|
||||
|
||||
sub EVENT_ITEM {
|
||||
if (quest::handin({"platinum" => 300, 62632 => 1})) { #300pp and Poem of the Storms
|
||||
my $cash = $copper + 10 * $silver + 100 * $gold + 1000 * $platinum;
|
||||
|
||||
if(($cash >= 300000) && plugin::check_handin(\%itemcount, 62632 => 1)) { #Poem of the Storms
|
||||
$client->Message(0,"The farmer looks at you with a stunned expression on his face. He carefully sets the coins down in a neat stack on the ground and slowly unfolds the paper. As he reads the poem, heavy tears form in the corners of his eyes and drop onto the page. When he is done reading he carefully folds it back up and hands the page back to you. He then wipes his nose with his sleeve.");
|
||||
quest::spawn2(415123, 0, 0, -120, -380, 2.5, 438); #a_faithful_farmer
|
||||
quest::say("I think I understand a little better about faith. Maybe my faith brought you here, maybe yours did, I don't know. I don't think it matters. You've shown me something about kindness as well. Thank you so much!");
|
||||
quest::summonitem(62633); #Tear-stained Poem of the Storms
|
||||
quest::depop_withtimer();
|
||||
}
|
||||
else {
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_SPAWN {
|
||||
|
|
|
|||
|
|
@ -11,11 +11,16 @@ sub EVENT_SAY {
|
|||
}
|
||||
|
||||
sub EVENT_ITEM {
|
||||
if (quest::handin({"platinum" => 1000})) { #1000 Platinum
|
||||
my $cash = 0;
|
||||
$cash = ($platinum * 1000) + ($gold * 100) + ($silver * 10) + $copper;
|
||||
if ($cash == 1000000) { #1000 Platinum
|
||||
quest::say("Okay, enjoy me drink!");
|
||||
quest::faction(236,5); #Dark Bargainers
|
||||
quest::faction(334,5); #Dreadguard Outer
|
||||
quest::faction(370,5); #Dreadguard Inner
|
||||
quest::summonitem(14365); #Cough Elixir
|
||||
}
|
||||
}
|
||||
plugin::return_items(\%itemcount);
|
||||
}
|
||||
|
||||
# Quest by mystic414
|
||||
|
|
|
|||
|
|
@ -1,7 +1,12 @@
|
|||
function event_say(e)
|
||||
if e.message:findi("hail") then
|
||||
e.self:Say("Greetings, " .. e.other:GetName() .. ". I am Horender Tevalian. I was one of the first to travel to Luclin when the secrets of the teleports were unlocked. Once here, the Midst Collective asked that I maintain vigil over the portal back to the Karanas. The [teleport system] back to Norrath is completely automated. I have no direct control over when the portal will turn on, although I can say that the system works on a schedule of approximately fifteen minutes.");
|
||||
e.self:Say("Greetings " .. e.other:GetName() .. ". I am Horender Tevalian. I was one of the first to travel to Luclin when the secrets of the teleports were unlocked. Once here, the Midst Collective asked that I maintain vigil over the portal back to the Karanas. The [teleport system] back to Norrath is completely automated. I have no direct control over when the portal will turn on, although I can say that the system works on a schedule of approximately ten minutes.");
|
||||
elseif e.message:findi("teleport system") then
|
||||
e.self:Say("The teleport system is pretty simple from your perspective. Simply listen for the voice saying that the portals will become active soon. When the time nears, you should stand on the elevated pad you see next to me. Shortly after you see the message that the teleporters are active, you will be transported to your destination.");
|
||||
e.self:Say("The teleport system is pretty simple from your perspective. Simply listen for the voice saying that the portals will become active soon. When the time nears, you should stand on the elevated pad you see next to me. Shortly after you see the message that the teleporters are active, you will be transported to your destination..");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Down this passage you will find the entrance to the Bazaar, a great place to find that trinket you have been looking for. Don't forget to head to Shadowhaven after you stop here.");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Down this passage you will find the entrance to the Bazaar. a great place to find that trinket you have been looking for. Don't forget to head to Shadowhaven after you stop here."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152010 -- Defender_Galson
|
||||
#END of FILE Zone:nexus ID:152010 -- Defender_Galson
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Through this hallway lies the wonderful city of Shadowhaven. The Haven is just that, a haven for those with no home. The city tolerates any race or religion, as long as they keep to themselves and cause no trouble. Good, honest hard work is expected from those that wish to reside in the city. When visiting, proceed to the Fordel quarter and register if you have not done so already. Take care, $name.");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Through this hallway lies the wonderful city of Shadowhaven. The Haven is just that. a haven for those with no home. The city tolerates any race or religion. as long as they keep to themselves and cause no trouble. Good. honest hard work is expected from those that wish to reside in the city. When visiting. proceed to the Fordel quarter and register if you have not done so already. Take care $name."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152017 -- Defender_Howell
|
||||
#END of FILE Zone:nexus ID:152017 -- Defender_Howell
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Through this very hallway lies the city of Shadowhaven. On your way there, you will notice a small room that contains a miniature version of the spires. If you have no means of personal transportation back to Norrath, these teleports will take you there. Be sure to speak to the attendant at the teleport for more information.");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Through this very hallway lies the city of Shadowhaven. On your way there. you will notice a small room that contains a miniature version of the spires. If you have no means of personal transportation back to Norrath. these teleports will take you there. Be sure to speak to the attendant at the teleport for more information."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152016 -- Defender_Jena
|
||||
#END of FILE Zone:nexus ID:152016 -- Defender_Jena
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Hail, $name. Behind me lies the path to the Odus platform. Please refrain from combat while in the Nexus as we have not thoroughly tested how the teleporters would react if exposed to certain magics.");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Hail $name. behind me lies the path to the Odus platform. Please refrain from combat while in the Nexus as we have not thoroughly tested how the teleporters would react if exposed to certain magics."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152006 -- Defender_Karrik
|
||||
#END of FILE Zone:nexus ID:152006 -- Defender_Karrik
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Hello, $name. Behind me lies the doomed passageway to the Paludal Caverns. It's a very sore subject that we really don't like to talk about... Some of our own were lost in the accident.");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Hello $name. behind me lies the doomed passageway to the Paludal Caverns. It's a very sore subject that we really don't like to talk about... Some of our own were lost in the accident."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152007 -- Defender_Narthem
|
||||
#END of FILE Zone:nexus ID:152007 -- Defender_Narthem
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Another traveler has come to our lands, Rinkes. I wish you the best of luck wherever your travels may take you, $name.");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Another traveler has come to our lands. Rinkes. I wish you the best of luck wherever your travels may take you. $name."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152009 -- Defender_Rhazor
|
||||
#END of FILE Zone:nexus ID:152009 -- Defender_Rhazor
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Hello, $name. It is great to see new faces again around the Nexus. We are lucky to have some of the finest and most powerful magicians working hard to aid our cause.");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Hello. $name. It is great to see new faces again around the Nexus. We are lucky to have some of the finest and most powerful magicians working hard to aid our cause."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152008 -- Defender_Rinkes
|
||||
#END of FILE Zone:nexus ID:152008 -- Defender_Rinkes
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("No time to talk I gotta get my brother out! Im coming Lareso!");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("No time to talk I gotta get my brother out! Im coming Lareso!"); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:150073 -- Eslof_Runsalark
|
||||
#END of FILE Zone:nexus ID:150073 -- Eslof_Runsalark
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Welcome to the Nexus! Down each stairway is a passage that leads out from the Nexus. Through those passages you will find the great trade city of Shadow Haven, the Bazaar, and the cavern systems that lead to the surface of Luclin. Also, located in each tunnel is a teleport pad that can return you to Norrath. There is much information to be gathered here. Be sure to speak to everyone and ask lots of questions. Farewell, $name.");
|
||||
}
|
||||
# Expansion: Empires of Kunark
|
||||
# if ($text=~/hail/i) {
|
||||
# quest::say("Welcome to the Nexus! Down each stairway is a passage that leads out from the Nexus. Through those passages you will find the great trade city of Shadow Haven, the Bazaar, and the cavern systems that lead to the surface of Luclin. Also, located in each tunnel is a teleport pad that has the [power] to return you to Norrath. There is much information to be gathered here, be sure to speak to everyone and ask lots of questions. Farewell, $name.");
|
||||
# }
|
||||
# elsif ($text=~/power/i) {
|
||||
# quest::say("We, of course, have tapped into the power of transportation, as I'm sure you realize. With the restoration of our great Emperor... I mean Lord Katta, we have been asked to help those that wish to visit his new seat of power. If you wish to go there, this very spire will take you. All you need is a [Spire Stone of Lceanium] and you will be safely transported to the city. We have set up this great spire to transport anyone holding such a stone every few minutes, as the cycle of power peaks. It is no minor magical feat to send a large group of creatures safely from Luclin to Kunark! But feel assured that we can do so, and we almost never lose any transportees.");
|
||||
# }
|
||||
# elsif ($text=~/spire stone of lceanium/i) {
|
||||
# quest::say("Here is your Spire Stone. Remember, if you are holding that stone and remain in the area of the spire, you will be transported. The stone is fragile and will be consumed if you travel by the spire or just about any other means. Not to worry. We can provide you another if needed.");
|
||||
# quest::summonitem(18393); # Item: Spire Stone of Lceanium
|
||||
# }
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Welcome to the Nexus! Down each stairway is a passage that leads out from the Nexus. Through those passages you will find the great trade city of Shadow Haven. the Bazaar. and the cavern systems that lead to the surface of Luclin. Also. located in each tunnel is a teleport pad that can return you to Norrath. There is much information to be gathered here. be sure to speak to everyone and ask lots of questions. Farewell. $name."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152013 -- Fani_Dertrimas
|
||||
#END of FILE Zone:nexus ID:152013 -- Fani_Dertrimas
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,12 @@
|
|||
function event_say(e)
|
||||
if e.message:findi("hail") then
|
||||
e.self:Say("Greetings, " .. e.other:GetName() .. ". I am Jucian Featherhigh, the guardian of this teleport. It will take you back to my home in the Faydark. This pad, along with the others, activate in intervals of around fifteen minutes. When directed to do so, step onto the pad next to me and wait to be teleported.");
|
||||
e.self:Say("Greetings " .. e.other:GetName() .. ". I am Jucian Featherhigh, the guardian of this teleport. It will take you back to my home in the Faydark. The [teleport system] back to Norrath is completely automated. I have no direct control over when the portal will turn on, although I can say that the system works on a schedule of approximately ten minutes.");
|
||||
elseif e.message:findi("teleport system") then
|
||||
e.self:Say("The teleport system is pretty simple from your perspective. Simply listen for the voice saying that the portals will become active soon. When the time nears, you should stand on the elevated pad you see next to me. Shortly after you see the message that the teleporters are active, you will be transported to your destination..");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
|
@ -1,17 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Ahh, welcome, $name. It is good to see more and more people visiting now that the portals are functional. It took us many, many years to understand the magical powers of Luclin. Whether through dumb luck or divine intervention, we have succeeded in opening the gate back to Norrath. How long it will stay open, no one knows. My colleagues and I are here to maintain and watch for changes in the Nexus. Should anything happen, you will be notified. Safe travels.");
|
||||
}
|
||||
# Expansion: Empires of Kunark
|
||||
# if ($text=~/hail/i) {
|
||||
# quest::say("Ahh, welcome, $name. It is good to see more and more people visiting now that the portals are functional. It took us many, many years to understand the magical powers of Luclin. Whether through dumb luck or divine intervention, we have succeeded in opening the gate back to Norrath. How long it will stay open, no one knows. I hope you know the importance of the stone that lies beneath our feet and the power that the Combine have been able to harvest from it. Even if you do not, we are willing to allow you to use that [power]. My colleagues and I are here to maintain and watch for changes in the Nexus. Should anything happen, you will be notified. Safe travels.");
|
||||
# }
|
||||
# elsif ($text=~/power/i) {
|
||||
# quest::say("We, of course, have tapped into the power of transportation, as I'm sure you realize. With the restoration of our great Emperor... I mean Lord Katta, we have been asked to help those that wish to visit his new seat of power. If you wish to go there, this very spire will take you. All you need is a [Spire Stone of Lceanium] and you will be safely transported to the city. We have set up this great spire to transport anyone holding such a stone every few minutes, as the cycle of power peaks. It is no minor magical feat to send a large group of creatures safely from Luclin to Kunark! But feel assured that we can do so, and we almost never lose any transportees.");
|
||||
# }
|
||||
# elsif ($text=~/spire stone of lceanium/i) {
|
||||
# quest::say("Here is your Spire Stone. Remember, if you are holding that stone and remain in the area of the spire, you will be transported. The stone is fragile and will be consumed if you travel by the spire or just about any other means. Not to worry. We can provide you another if needed.");
|
||||
# quest::summonitem(18393); # Item: Spire Stone of Lceanium
|
||||
# }
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Ahh. welcome $name. It is good to see more and more people visiting now that the portals are functional. It took us many. many years to understand the magical powers of Luclin. Whether through dumb luck or divine intervention. we have succeeded in opening the gate back to Norrath. How long it will stay open. no one knows. My colleagues and I are here to maintain and watch for changes in the Nexus- should anything happen. you will be notified. Safe travels."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152015 -- Jayson_Bri`Tian
|
||||
#END of FILE Zone:nexus ID:152015 -- Jayson_Bri`Tian
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Greetings, $name. The passages extending from the heart of Luclin take you east to Shadow Haven, south to the Bazaar, west in the direction of the city Sanctus Seru, and north to the city of Shar Vahl. Before heading in any one of these directions, speak to the keepers at the entrances.");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Greetings. $name. The passages extending from the heart of Luclin take you east to Shadow Haven. south to the Bazaar. west in the direction of the city Sanctus Seru. and north to the city of Shar Vahl. Before heading in any one of these directions. speak to the keepers at the entrances."); }
|
||||
}
|
||||
# Expansion: Empires of Kunark
|
||||
# if ($text=~/hail/i) {
|
||||
# quest::say("Greetings, $name. The passages extending from the heart of Luclin take you east to Shadow Haven, south to the Bazaar, west in the direction of the city Sanctus Seru, and north to the city of Shar Vahl. Before heading in any one of these directions, speak to the keepers at the entrances. Keep in mind that there is a lot of [power] in this place, so be safe.");
|
||||
# }
|
||||
# elsif ($text=~/power/i) {
|
||||
# quest::say("We, of course, have tapped into the power of transportation, as I'm sure you realize. With the restoration of our great Emperor... I mean Lord Katta, we have been asked to help those that wish to visit his new seat of power. If you wish to go there, this very spire will take you. All you need is a [Spire Stone of Lceanium] and you will be safely transported to the city. We have set up this great spire to transport anyone holding such a stone every few minutes, as the cycle of power peaks. It is no minor magical feat to send a large group of creatures safely from Luclin to Kunark! But feel assured that we can do so, and we almost never lose any transportees.");
|
||||
# }
|
||||
# elsif ($text=~/spire stone of lceanium/i) {
|
||||
# quest::say("Here is your Spire Stone. Remember, if you are holding that stone and remain in the area of the spire, you will be transported. The stone is fragile and will be consumed if you travel by the spire or just about any other means. Not to worry. We can provide you another if needed.");
|
||||
# quest::summonitem(18393); # Item: Spire Stone of Lceanium
|
||||
# }
|
||||
#END of FILE Zone:nexus ID:152014 -- Kardador_Tarsinian
|
||||
#END of FILE Zone:nexus ID:152014 -- Kardador_Tarsinian
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,12 @@
|
|||
function event_say(e)
|
||||
if e.message:findi("hail") then
|
||||
e.self:Say("Hello, $name. Welcome to the Kunark translocation area. Please step onto the pad and when the teleport is activated you will be taken to your destination.");
|
||||
e.self:Say("Hello " .. e.other:GetName() .. ". Welcome to the Kunark translocation area. The [teleport system] back to Norrath is completely automated. I have no direct control over when the portal will turn on, although I can say that the system works on a schedule of approximately ten minutes.");
|
||||
elseif e.message:findi("teleport system") then
|
||||
e.self:Say("The teleport system is pretty simple from your perspective. Simply listen for the voice saying that the portals will become active soon. When the time nears, you should stand on the elevated pad you see next to me. Shortly after you see the message that the teleporters are active, you will be transported to your destination..");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Oh, welcome, $name! Beyond me is perhaps the best place in all of Lu... well, Norrath now too. You really need to check it out for yourself. It is the perfect place for a trader like yourself to find the best deal on any item around!");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Oh. welcome $name! Beyond me is perhaps the best place in all of Lu... well. Norrath now too. You really need to check it out for yourself. It is the perfect place for a trader like yourself to find the best deal on any item around!"); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152011 -- Larren
|
||||
#END of FILE Zone:nexus ID:152011 -- Larren
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,12 @@
|
|||
function event_say(e)
|
||||
if e.message:findi("hail") then
|
||||
e.self:Say("Greetings, " .. e.other:GetName() .. ". I am Kendal Groetan. I am here to assist and watch over those who wish to return to the continent of Odus. A voice will shout throughout the zone informing you of when the [teleports] will become active. When you are told, proceed onto the pad and await teleportation.");
|
||||
elseif e.message:findi("teleports") then
|
||||
e.self:Say("The teleports become active approximately four times an hour. Most of the time, you can catch them midcycle, reducing your wait time. When told to, walk onto the pad and you will be teleported.");
|
||||
e.self:Say("Greetings " .. e.other:GetName() .. ". I am Kendal Groetan. I am here to assist and watch over those who wish to return to the continent of Odus. Due to the limited space I share this area with the portal to Velious. The [teleport system] back to Norrath is completely automated. I have no direct control over when the portal will turn on, although I can say that the system works on a schedule of approximately ten minutes.");
|
||||
elseif e.message:findi("teleport system") then
|
||||
e.self:Say("The teleport system is pretty simple from your perspective. Simply listen for the voice saying that the portals will become active soon. When the time nears, you should stand on the elevated pad you see next to me. Shortly after you see the message that the teleporters are active, you will be transported to your destination..");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
|
@ -1,17 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Welcome to the center of Luclin $name. This is a very magical place. The magic that emanates from here can be felt even on the surface. Don't forget to speak to as many of us as you can before you venture far.");
|
||||
}
|
||||
# Expansion: Empires of Kunark
|
||||
# if ($text=~/hail/i) {
|
||||
# quest::say("Welcome to the center of Luclin, $name. This is a very magical place. The magic that emanates from here can be felt even on the surface, such is its [power]. Don't forget to speak to as many of us as you can before you venture too far.");
|
||||
# }
|
||||
# elsif ($text=~/power/i) {
|
||||
# quest::say("We, of course, have tapped into the power of transportation, as I'm sure you realize. With the restoration of our great Emperor... I mean Lord Katta, we have been asked to help those that wish to visit his new seat of power. If you wish to go there, this very spire will take you. All you need is a [Spire Stone of Lceanium] and you will be safely transported to the city. We have set up this great spire to transport anyone holding such a stone every few minutes, as the cycle of power peaks. It is no minor magical feat to send a large group of creatures safely from Luclin to Kunark! But feel assured that we can do so, and we almost never lose any transportees.");
|
||||
# }
|
||||
# elsif ($text=~/spire stone of lceanium/i) {
|
||||
# quest::say("Here is your Spire Stone. Remember, if you are holding that stone and remain in the area of the spire, you will be transported. The stone is fragile and will be consumed if you travel by the spire or just about any other means. Not to worry. We can provide you another if needed.");
|
||||
# quest::summonitem(18393); # Item: Spire Stone of Lceanium
|
||||
# }
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Welcome to the center of Luclin $name. this is a very magical place. The magic that emanates from here can be felt even on the surface. Don't forget to speak to as many of us as you can before you venture far."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:152012 -- Persy_Clutches
|
||||
#END of FILE Zone:nexus ID:152012 -- Persy_Clutches
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Hi there $name. If you could please try to keep away from Eslof. He is going through a very tough time now as his brother was part of the mining contingent that was working on this here entrance to the Paludal caverns when it caved in sealing up the entrance. We have troops working on the other side around the clock to clear up the rocks. Sorry for any trouble.");
|
||||
}
|
||||
sub EVENT_SAY {
|
||||
if($text=~/Hail/i){
|
||||
quest::say("Hi there $name. If you could please try to keep away from Eslof. He is going through a very tough time now as his brother was part of the mining contingent that was working on this here entrance to the Paludal caverns when it caved in sealing up the entrance. We have troops working on the other side around the clock to clear up the rocks. Sorry for any trouble."); }
|
||||
}
|
||||
#END of FILE Zone:nexus ID:6836 -- Serisn_Galaskof
|
||||
#END of FILE Zone:nexus ID:6836 -- Serisn_Galaskof
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,12 @@
|
|||
function event_say(e)
|
||||
if e.message:findi("hail") then
|
||||
e.self:Say("Greetings, " .. e.other:GetName() .. ". I am here to assist and watch over those who wish to return to the continent of Velious. Due to the limited space I share this area with the portal to Odus. It may be a little confusing but if you listen for the voice it will tell you when to step on the pad for Velious or Odus. Safe travels to you.");
|
||||
e.self:Say("Greetings " .. e.other:GetName() .. ". I am here to assist and watch over those who wish to return to the continent of Velious. Due to the limited space I share this area with the portal to Odus. The [teleport system] back to Norrath is completely automated. I have no direct control over when the portal will turn on, although I can say that the system works on a schedule of approximately ten minutes.");
|
||||
elseif e.message:findi("teleport system") then
|
||||
e.self:Say("The teleport system is pretty simple from your perspective. Simply listen for the voice saying that the portals will become active soon. When the time nears, you should stand on the elevated pad you see next to me. Shortly after you see the message that the teleporters are active, you will be transported to your destination..");
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
sub EVENT_SAY {
|
||||
if ($text=~/hail/i) {
|
||||
quest::say("Oh, good. I was hoping I could speak with some adventurers if I waited here. I have been sent on behalf of Mayong Mistmoore. The lord of blood has gone missing and I am hoping to find some heroes to go find him. We are aware that you may have a history with Mayong and that you may not wish to assist us in finding him. However, I can assure you that [omens] of great dread have been sent to us. Finding him will prove critical in the righting of a horrible wrong, to the restoration of the way things should be. I cannot elaborate upon these omens, as they are not fully understood.");
|
||||
}
|
||||
elsif ($text=~/omens/i) {
|
||||
quest::say("Shadow and blood are all we see, along with a sense of treachery and stolen power and a sense of urgency and dread. I am not one to ask favors of flesh and blood creatures, but I must. I have taken some of the [stones] these wizards use to link people to places so that the power in this place can send them there. I have infused them with magic that will instead take you to the place you must start your search, Maiden's Eye. You will need to take care, however. The Akheva have grown stronger. Their faith seems to have been restored and their drive to rule enhanced. I believe that it is this that Mayong was [looking into].");
|
||||
}
|
||||
elsif ($text=~/stones/i) {
|
||||
quest::say("This is that stone. Keep it on your person and enter the space between the spires. When the call comes to transport people to Lceanium, this stone will take you to Maiden's Eye instead. If, of course, you have the other, unchanged, version of this stone, its power will override the altered one and you will find yourself in Lceanium.");
|
||||
quest::summonitem(145329); # Item: Spire Stone of Maiden's Eye
|
||||
}
|
||||
elsif ($text=~/looking into/i) {
|
||||
quest::say("He was acting oddly before he left. He spoke to his commanders and other leaders openly about where he was going. Many were uncomfortable, as the room was well lit and such creatures are shy of the light. I only heard about this afterward, for I am not one of those leaders, only a messenger. I heard those leaders whispering to each other. I must admit that I wished to harm them, for the very first thing that they whispered was that their master told them not to discuss what they were told outside of that meeting, and that was exactly what I found them doing. I can repeat to you [what they said], as I was not given any such orders.");
|
||||
}
|
||||
elsif ($text=~/what they said/i) {
|
||||
quest::say("It turns out that they knew very little. Mayong told them that he was going to leave to investigate the shadows, to attempt to settle an ancient conflict. He told them that they were to continue on as if he was still in residence, as they often do. The lord of blood is rarely in his various castles. Then those 'trusted servants' went on to speculate, suggesting that their master was going to investigate the Akheva or perhaps even their goddess, Luclin. They implied that the Maiden of Shadow, the Mistress of Whispers, might have treated their master poorly long, long ago. But the nature of that mistreatment was unknown, only that they had seen research their lord had done on Shadow, potions of shade and various magical items with similar powers. Their speculation then passed on to useless, trivial, and petty matters of intrigue in their court and I grew bored. When I told this to one of the seers, they told me of the portents and tasked me with finding you and urging you to seek out Mayong on Luclin.");
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
local DEFILER_LIMIT = 72;
|
||||
|
||||
local DEFILER_SMALL_TYPE = 221006;
|
||||
local DEFILER_LARGE_TYPE = 221012;
|
||||
|
||||
function event_spawn(e)
|
||||
|
||||
function event_spawn(e)
|
||||
eq.set_next_hp_event(95);
|
||||
eq.set_timer("gargs", 1000); --pop untargettable gargs
|
||||
end
|
||||
|
|
@ -16,17 +16,14 @@ function event_combat(e)
|
|||
eq.set_timer("wipereset", 60000);
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function SpawnDefilers(mob)
|
||||
local numSpawns = 0;
|
||||
local hateList = mob:GetHateList();
|
||||
|
||||
|
||||
for ent in hateList.entries do
|
||||
if ( ent.ent:IsClient() and ent.damage > 0 ) then
|
||||
numSpawns = numSpawns + 1;
|
||||
if ( numSpawns > DEFILER_LIMIT) then
|
||||
numSpawns = DEFILER_LIMIT;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -41,31 +38,31 @@ function SpawnDefilers(mob)
|
|||
eq.spawn2(t, 0, 0, -1639, -138, 133, 0); -- defilers seem to all spawn from this single point
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function event_hp(e)
|
||||
|
||||
if ( e.hp_event == 95 ) then
|
||||
eq.get_entity_list():MessageClose(e.self, true, 250, MT.White, "The sound of a thousand terrified screams fills your head. You feel yourself becoming a part of the fabric of this nightmare realm.");
|
||||
eq.set_next_hp_event(79);
|
||||
eq.set_next_inc_hp_event(96); --reset on wipe
|
||||
|
||||
|
||||
elseif ( e.hp_event == 79 ) then
|
||||
eq.set_next_hp_event(69);
|
||||
SpawnDefilers(e.self);
|
||||
|
||||
|
||||
elseif ( e.hp_event == 69 ) then
|
||||
eq.set_next_hp_event(50);
|
||||
SpawnDefilers(e.self);
|
||||
|
||||
|
||||
elseif ( e.hp_event == 50 ) then
|
||||
eq.set_next_hp_event(45);
|
||||
eq.get_entity_list():MessageClose(e.self, true, 250, MT.White, "As if in a waking nightmare, you feel your movements slow and your arms begin to fail you. Each swing of your weapon feels as if it will miss its mark. Even your legs begin to fail you, as you fall deeper into the dreamlike state!");
|
||||
e.self:CastSpell(3150, e.self:GetID()); -- Direption of Dreams
|
||||
|
||||
|
||||
elseif ( e.hp_event == 45 ) then
|
||||
e.self:SpellFinished(1139, e.self:GetHateTop()); --Defilement of Hope
|
||||
eq.set_next_hp_event(40);
|
||||
|
||||
|
||||
elseif ( e.hp_event == 40 ) then
|
||||
e.self:Shout("You will not escape my realm so easily!");
|
||||
eq.get_entity_list():MessageClose(e.self, true, 250, MT.White, "The air grows thick with the smell of burning mana. A rumbling sound draws your attention to the massive statues that rest above the ancient monoliths. The statues begin to crumble, as they shift their attention from the heavens to you!");
|
||||
|
|
@ -73,33 +70,33 @@ function event_hp(e)
|
|||
elseif (e.inc_hp_event == 96) then
|
||||
eq.set_next_hp_event(95);
|
||||
end
|
||||
end
|
||||
|
||||
function event_timer(e)
|
||||
end
|
||||
|
||||
function event_timer(e)
|
||||
if ( e.timer == "oobcheck" ) then
|
||||
if ( e.self:GetX() > -1580 or e.self:GetX() < -2090 or e.self:GetY() > 250 or e.self:GetY() < -280 ) then
|
||||
if ( e.self:GetX() > -1580 or e.self:GetX() < -2090 or e.self:GetY() > 250 or e.self:GetY() < -280 ) then
|
||||
eq.get_entity_list():MessageClose(e.self, true, 200, MT.White, "Terris Thule disappears into the ether and reforms at the center of her chamber, cleansed of your magic!");
|
||||
e.self:GMMove(e.self:GetSpawnPointX(), e.self:GetSpawnPointY(), e.self:GetSpawnPointZ(), e.self:GetSpawnPointH());
|
||||
e.self:CastSpell(3230, e.self:GetID()); -- Balance of the Nameless
|
||||
end
|
||||
elseif ( e.timer == "gargs" ) then
|
||||
eq.stop_timer("gargs");
|
||||
eq.spawn2(221013,0,0,-1954,99,202,191):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1748,91,202,330):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1736,-125,202,454):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1954,99,202,191):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1748,91,202,330):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1736,-125,202,454):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1958,-104,202,67):SetAppearance(3); --untargettable statue
|
||||
elseif ( e.timer == "wipereset" ) then
|
||||
eq.stop_timer("wipereset");
|
||||
eq.depop_all(221007); --depop active gargs
|
||||
eq.depop_all(221013); --depop inactive gargs
|
||||
|
||||
eq.spawn2(221013,0,0,-1954,99,202,191):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1748,91,202,330):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1736,-125,202,454):SetAppearance(3); --untargettable statue
|
||||
eq.depop_all(221007); -- depop active gargs
|
||||
eq.depop_all(221013); -- depop inactive gargs
|
||||
|
||||
eq.spawn2(221013,0,0,-1954,99,202,191):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1748,91,202,330):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1736,-125,202,454):SetAppearance(3); --untargettable statue
|
||||
eq.spawn2(221013,0,0,-1958,-104,202,67):SetAppearance(3); --untargettable statue
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function event_death_complete(e)
|
||||
eq.spawn2(202368,0,0,e.self:GetX(),e.self:GetY(),e.self:GetZ(),e.self:GetHeading()); -- planar projection
|
||||
end
|
||||
eq.spawn2(202368,0,0,e.self:GetX(),e.self:GetY(),e.self:GetZ(),e.self:GetHeading()); -- planar projection
|
||||
end
|
||||
|
|
|
|||
54
northkarana/player.pl
Normal file
54
northkarana/player.pl
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#BeginFile: northkarana\player.pl
|
||||
#Quest file for Luclin Spires
|
||||
#Quest file for North Karana: Paladin message during Necromancer Epic 1.5 (Soulwhisper)
|
||||
|
||||
sub EVENT_ENTERZONE {
|
||||
quest::settimer("spires",10);
|
||||
$qglobals{nexus} = undef;
|
||||
$qglobals{spire_nk} = undef;
|
||||
$qglobals{message_nk} = undef;
|
||||
if ($class eq "Bard" || $class eq "Rogue") {
|
||||
if (plugin::check_hasitem($client, 52355) && !plugin::check_hasitem($client, 52359)) { #Shakey's Dilapidated Noggin, Radiant Azure Lightstone
|
||||
quest::unique_spawn(13123, 109, 0, 0, 0, -8); #Flighty_Azure_Wisp
|
||||
$client->Message(15, "Out of the corner of your eye, you catch a glimpse of a brightly colored wisp as it darts by. It's moving at an incredible speed.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_TIMER {
|
||||
if (defined $qglobals{nexus} && defined $qglobals{spire_nk} && $qglobals{spire_nk} == 1 && plugin::check_hasitem($client, 19720)) {
|
||||
quest::selfcast(2433); #self only to avoid AE
|
||||
quest::setglobal(spire_nk,0,1,"F");
|
||||
quest::delglobal(message_nk);
|
||||
$client->NukeItem(19720); #removes stone from inventory.
|
||||
$qglobals{nexus} = undef;
|
||||
$qglobals{spire_nk} = undef;
|
||||
$qglobals{message_nk} = undef;
|
||||
}
|
||||
elsif (defined $qglobals{nexus} && defined $qglobals{spire_nk} && $qglobals{spire_nk} == 1 && !defined $qglobals{message_nk} && !plugin::check_hasitem($client, 19720)) {
|
||||
$client->Message(15,"You don't have the correct component to travel to Luclin.");
|
||||
quest::setglobal(message_nk,1,1,"M20"); #prevent component mssage from being spammed.
|
||||
$qglobals{nexus} = undef;
|
||||
$qglobals{spire_nk} = undef;
|
||||
$qglobals{message_nk} = undef;
|
||||
}
|
||||
elsif (defined $qglobals{nexus_nk} && defined $qglobals{spire_nk} && $qglobals{spire_nk} == 1 && defined $qglobals{message_nk} && !plugin::check_hasitem($client, 19720)) {
|
||||
$qglobals{nexus} = undef;
|
||||
$qglobals{spire_nk} = undef;
|
||||
$qglobals{message_nk} = undef;
|
||||
}
|
||||
}
|
||||
|
||||
sub EVENT_LOOT {
|
||||
if(($looted_id == 14344) && plugin::check_hasitem($client, 26896) && plugin::check_hasitem($client, 11430) && plugin::check_hasitem($client, 22892)) { #All 4 Paladin Heads
|
||||
$client->Message(15,"With his last breath, the paladin says, 'You are too late. The last paladin has fled to Natimbi with the staff and is on his way to destroy it!'");
|
||||
}
|
||||
if ($class eq "Ranger" && $looted_id == 62604) {
|
||||
if (defined $qglobals{ranger_epic15_pre} && $qglobals{ranger_epic15_pre} ne "8") {
|
||||
return 1;
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#EndFile: northkarana\player.pl
|
||||
|
|
@ -1,24 +1,148 @@
|
|||
# plugin::check_handin($item1 => #required_amount,...);
|
||||
# autoreturns extra unused items on success
|
||||
sub check_handin {
|
||||
my $hashref = shift;
|
||||
my %required = @_;
|
||||
use Scalar::Util qw(looks_like_number);
|
||||
my $client = plugin::val('client');
|
||||
my $npc = plugin::val('npc');
|
||||
my @currencies = ("platinum", "gold", "silver", "copper");
|
||||
my $copper = plugin::val('copper');
|
||||
my $silver = plugin::val('silver');
|
||||
my $gold = plugin::val('gold');
|
||||
my $platinum = plugin::val('platinum');
|
||||
my $hashref = shift;
|
||||
|
||||
foreach my $currency (@currencies) {
|
||||
my $value = plugin::val("\$$currency");
|
||||
if ($value > 0) {
|
||||
$hashref->{$currency} = $value;
|
||||
my $return_copper = 0;
|
||||
my $return_silver = 0;
|
||||
my $return_gold = 0;
|
||||
my $return_platinum = 0;
|
||||
|
||||
if ($copper > 0) {
|
||||
$hashref->{"copper"} = $copper;
|
||||
}
|
||||
if ($silver > 0) {
|
||||
$hashref->{"silver"} = $silver;
|
||||
}
|
||||
if ($gold > 0) {
|
||||
$hashref->{"gold"} = $gold;
|
||||
}
|
||||
if ($platinum > 0) {
|
||||
$hashref->{"platinum"} = $platinum;
|
||||
}
|
||||
|
||||
$client->SetEntityVariable("HANDIN_MONEY", "$copper|$silver|$gold|$platinum");
|
||||
|
||||
# set money zero values if they don't exist
|
||||
my @money = ("platinum", "gold", "silver", "copper");
|
||||
foreach my $m (@money) {
|
||||
if (!$hashref->{$m}) {
|
||||
$hashref->{$m} = 0;
|
||||
}
|
||||
}
|
||||
|
||||
my @item_insts = (plugin::val('item1_inst'), plugin::val('item2_inst'), plugin::val('item3_inst'), plugin::val('item4_inst'));
|
||||
return $npc->CheckHandin($client, \%{$hashref}, \%required, @item_insts);
|
||||
# for some reason the source is sending this, we'll clean it up
|
||||
if ($hashref->{0}) {
|
||||
delete $hashref->{0};
|
||||
}
|
||||
|
||||
if (!$client->EntityVariableExists("HANDIN_ITEMS")) {
|
||||
$client->SetEntityVariable("HANDIN_ITEMS", plugin::GetHandinItemsSerialized("Handin", %$hashref));
|
||||
}
|
||||
|
||||
# -----------------------------
|
||||
# handin formatting examples
|
||||
# -----------------------------
|
||||
# item_id => required_count eg (1001 => 1)
|
||||
# "copper" => copper_amount eg ("copper" => 1234)
|
||||
# "silver" => silver_amount
|
||||
# "gold" => gold_amount
|
||||
# "platinum" => platinum_amount
|
||||
# -----------------------------
|
||||
my %required = @_;
|
||||
foreach my $req (keys %required) {
|
||||
if (!defined $hashref->{$req} || $hashref->{$req} != $required{$req}) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $req (keys %required) {
|
||||
if ($required{$req} < $hashref->{$req}) {
|
||||
$hashref->{$req} -= $required{$req};
|
||||
} else {
|
||||
delete $hashref->{$req};
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub return_items {
|
||||
my $hashref = plugin::var('$itemcount');
|
||||
my $client = plugin::val('$client');
|
||||
my $name = plugin::val('$name');
|
||||
my $items_returned = 0;
|
||||
|
||||
my %item_data = (
|
||||
0 => [ plugin::val('$item1'), plugin::val('$item1_charges'), plugin::val('$item1_attuned'), plugin::val('$item1_inst') ],
|
||||
1 => [ plugin::val('$item2'), plugin::val('$item2_charges'), plugin::val('$item2_attuned'), plugin::val('$item2_inst') ],
|
||||
2 => [ plugin::val('$item3'), plugin::val('$item3_charges'), plugin::val('$item3_attuned'), plugin::val('$item3_inst') ],
|
||||
3 => [ plugin::val('$item4'), plugin::val('$item4_charges'), plugin::val('$item4_attuned'), plugin::val('$item4_inst') ],
|
||||
);
|
||||
|
||||
my %return_data = ();
|
||||
|
||||
foreach my $k (keys(%{$hashref})) {
|
||||
next if ($k eq "copper" || $k eq "silver" || $k eq "gold" || $k eq "platinum" || $k == 0);
|
||||
my $rcount = $hashref->{$k};
|
||||
my $r;
|
||||
for ($r = 0; $r < 4; $r++) {
|
||||
if ($rcount > 0 && $item_data{$r}[0] && $item_data{$r}[0] == $k) {
|
||||
if ($client) {
|
||||
my $inst = $item_data{$r}[3];
|
||||
my $return_count = $inst->RemoveTaskDeliveredItems();
|
||||
if ($return_count > 0) {
|
||||
$client->SummonItem($k, $inst->GetCharges(), $item_data{$r}[2]);
|
||||
$return_data{$r} = [$k, $item_data{$r}[1], $item_data{$r}[2]];
|
||||
$items_returned = 1;
|
||||
next;
|
||||
}
|
||||
$return_data{$r} = [$k, $item_data{$r}[1], $item_data{$r}[2]];
|
||||
$client->SummonItem($k, $item_data{$r}[1], $item_data{$r}[2]);
|
||||
$items_returned = 1;
|
||||
} else {
|
||||
$return_data{$r} = [$k, $item_data{$r}[1], $item_data{$r}[2]];
|
||||
quest::summonitem($k, 0);
|
||||
$items_returned = 1;
|
||||
}
|
||||
$rcount--;
|
||||
}
|
||||
}
|
||||
|
||||
delete $hashref->{$k};
|
||||
}
|
||||
|
||||
# check if we have any money to return
|
||||
my @money = ("platinum", "gold", "silver", "copper");
|
||||
my $returned_money = 0;
|
||||
foreach my $m (@money) {
|
||||
if ($hashref->{$m} && $hashref->{$m} > 0) {
|
||||
$returned_money = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ($returned_money) {
|
||||
my ($cp, $sp, $gp, $pp) = ($hashref->{"copper"}, $hashref->{"silver"}, $hashref->{"gold"}, $hashref->{"platinum"});
|
||||
$client->AddMoneyToPP($cp, $sp, $gp, $pp, 1);
|
||||
$client->SetEntityVariable("RETURN_MONEY", "$cp|$sp|$gp|$pp");
|
||||
}
|
||||
|
||||
$client->SetEntityVariable("RETURN_ITEMS", plugin::GetHandinItemsSerialized("Return", %return_data));
|
||||
|
||||
if ($items_returned || $returned_money) {
|
||||
quest::say("I have no need for this $name, you can have it back.");
|
||||
}
|
||||
|
||||
quest::send_player_handin_event();
|
||||
|
||||
# Return true if items were returned
|
||||
return ($items_returned || $returned_money);
|
||||
}
|
||||
|
||||
sub return_bot_items {
|
||||
|
|
@ -74,4 +198,139 @@ sub return_bot_items {
|
|||
}
|
||||
|
||||
return $items_returned;
|
||||
}
|
||||
}
|
||||
|
||||
sub GetHandinItemsSerialized {
|
||||
my $type = shift;
|
||||
my %hash = @_;
|
||||
my @variables = ();
|
||||
|
||||
my %item_data = (
|
||||
0 => [ plugin::val('$item1'), plugin::val('$item1_charges'), plugin::val('$item1_attuned'), plugin::val('$item1_inst') ],
|
||||
1 => [ plugin::val('$item2'), plugin::val('$item2_charges'), plugin::val('$item2_attuned'), plugin::val('$item2_inst') ],
|
||||
2 => [ plugin::val('$item3'), plugin::val('$item3_charges'), plugin::val('$item3_attuned'), plugin::val('$item3_inst') ],
|
||||
3 => [ plugin::val('$item4'), plugin::val('$item4_charges'), plugin::val('$item4_attuned'), plugin::val('$item4_inst') ],
|
||||
);
|
||||
|
||||
my $hashref = plugin::var('$itemcount');
|
||||
|
||||
if ($type eq "Handin") {
|
||||
foreach my $k (keys(%{$hashref})) {
|
||||
next if ($k eq "copper" || $k eq "silver" || $k eq "gold" || $k eq "platinum" || $k == 0);
|
||||
my $rcount = $hashref->{$k};
|
||||
for (my $r = 0; $r < 4; $r++) {
|
||||
if ($rcount > 0 && $item_data{$r}[0] && $item_data{$r}[0] == $k) {
|
||||
my $item_id = $item_data{$r}[0];
|
||||
my $item_charges = $item_data{$r}[1];
|
||||
my $item_attuned = $item_data{$r}[2];
|
||||
push(@variables, $item_id . "|" . $item_charges . "|" . $item_attuned);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
foreach my $key (keys %hash) {
|
||||
push(@variables, $hash{$key}[0] . "|" . $hash{$key}[1] . "|" . $hash{$key}[2]);
|
||||
}
|
||||
}
|
||||
|
||||
return join(",", @variables);
|
||||
}
|
||||
|
||||
sub mq_process_items {
|
||||
my $hashref = shift;
|
||||
my $npc = plugin::val('$npc');
|
||||
my $trade = undef;
|
||||
|
||||
if ($npc->EntityVariableExists("_mq_trade")) {
|
||||
$trade = decode_eqemu_item_hash($npc->GetEntityVariable("_mq_trade"));
|
||||
} else {
|
||||
$trade = {};
|
||||
}
|
||||
|
||||
foreach my $k (keys(%{$hashref})) {
|
||||
next if ($k == 0);
|
||||
|
||||
if (defined $trade->{$k}) {
|
||||
$trade->{$k} = $trade->{$k} + $hashref->{$k};
|
||||
} else {
|
||||
$trade->{$k} = $hashref->{$k};
|
||||
}
|
||||
}
|
||||
|
||||
my $str = encode_eqemu_item_hash($trade);
|
||||
$npc->SetEntityVariable("_mq_trade", $str);
|
||||
}
|
||||
|
||||
sub check_mq_handin {
|
||||
my %required = @_;
|
||||
my $npc = plugin::val('$npc');
|
||||
my $trade = undef;
|
||||
|
||||
if ($npc->EntityVariableExists("_mq_trade")) {
|
||||
$trade = decode_eqemu_item_hash($npc->GetEntityVariable("_mq_trade"));
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach my $req (keys %required) {
|
||||
if ((!defined $trade->{$req}) || ($trade->{$req} < $required{$req})) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $req (keys %required) {
|
||||
if ($required{$req} < $trade->{$req}) {
|
||||
$trade->{$req} -= $required{$req};
|
||||
} else {
|
||||
delete $trade->{$req};
|
||||
}
|
||||
}
|
||||
|
||||
$npc->SetEntityVariable("_mq_trade", encode_eqemu_item_hash($trade));
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub clear_mq_handin {
|
||||
my $npc = plugin::val('$npc');
|
||||
$npc->SetEntityVariable("_mq_trade", "");
|
||||
}
|
||||
|
||||
sub encode_eqemu_item_hash {
|
||||
my $hashref = shift;
|
||||
my $str = "";
|
||||
my $i = 0;
|
||||
|
||||
foreach my $k (keys(%{$hashref})) {
|
||||
if ($i != 0) {
|
||||
$str .= ",";
|
||||
} else {
|
||||
$i = 1;
|
||||
}
|
||||
|
||||
$str .= $k;
|
||||
$str .= "=";
|
||||
$str .= $hashref->{$k};
|
||||
}
|
||||
|
||||
return $str;
|
||||
}
|
||||
|
||||
sub decode_eqemu_item_hash {
|
||||
my $str = shift;
|
||||
my $hashref = { };
|
||||
|
||||
my @vals = split(/,/, $str);
|
||||
my $val_len = @vals;
|
||||
for(my $i = 0; $i < $val_len; $i++) {
|
||||
my @subval = split(/=/, $vals[$i]);
|
||||
my $subval_len = @subval;
|
||||
if ($subval_len == 2) {
|
||||
my $key = $subval[0];
|
||||
my $value = $subval[1];
|
||||
|
||||
$hashref->{$key} = $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $hashref;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -94,24 +94,50 @@ sub setval
|
|||
# Returns 1 if the NPC has been given a particular item or set of items. Otherwise, returns 0.
|
||||
# Parameters: Hash consisting of ItemID => RequiredCount pairs
|
||||
# NOTE: \%itemcount parameter from older "check_handin" function is NOT necessary and should not be passed!
|
||||
sub givenItems {
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
my %required = @_;
|
||||
my $npc = plugin::val('npc');
|
||||
my $client = plugin::val('client');
|
||||
my @item_insts = (plugin::val('item1_inst'), plugin::val('item2_inst'), plugin::val('item3_inst'), plugin::val('item4_inst'));
|
||||
return $npc->CheckHandin($client, $itemcount, \%required, @item_insts);
|
||||
sub givenItems
|
||||
{
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
my %required = @_;
|
||||
|
||||
foreach my $req (keys %required)
|
||||
{
|
||||
if ((!defined($itemcount->{$req})) || ($itemcount->{$req} < $required{$req}))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
# Like givenItems(), only removes the items from the %itemcount collection for an appropriate returnUnusedItems() call later
|
||||
# This works just like the old check_handin() function, only again, don't pass \%itemcount.
|
||||
sub takeItems {
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
my %required = @_;
|
||||
my $npc = plugin::val('npc');
|
||||
my $client = plugin::val('client');
|
||||
my @item_insts = (plugin::val('item1_inst'), plugin::val('item2_inst'), plugin::val('item3_inst'), plugin::val('item4_inst'));
|
||||
return $npc->CheckHandin($client, $itemcount, \%required, @item_insts);
|
||||
sub takeItems
|
||||
{
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
my %required = @_;
|
||||
|
||||
foreach my $req (keys %required)
|
||||
{
|
||||
if ((!defined($itemcount->{$req})) || ($itemcount->{$req} < $required{$req}))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $req (keys %required)
|
||||
{
|
||||
if ($required{$req} < $itemcount->{$req})
|
||||
{
|
||||
$itemcount->{$req} -= $required{$req};
|
||||
}
|
||||
else
|
||||
{
|
||||
delete $itemcount->{$req};
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
# Checks to see whether the player gave the NPC a requested amount of currency, regardless of actual denominations given.
|
||||
|
|
@ -125,28 +151,10 @@ sub givenCoin
|
|||
$g1 = 0 if (!defined($g1));
|
||||
$p1 = 0 if (!defined($p1));
|
||||
|
||||
my ($c, $s, $g, $p) = (shift, shift, shift, shift);
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
my %required = @_;
|
||||
my $client = plugin::val('client');
|
||||
my $npc = plugin::val('npc');
|
||||
my $coin1 = $c1 + (10 * $s1) + (100 * $g1) + (1000 * $p1);
|
||||
my $coin2 = $c2 + (10 * $s2) + (100 * $g2) + (1000 * $p2);
|
||||
|
||||
$required->{"copper"} = $c;
|
||||
$required->{"silver"} = $s;
|
||||
$required->{"gold"} = $g;
|
||||
$required->{"platinum"} = $p;
|
||||
|
||||
my @currencies = ("platinum", "gold", "silver", "copper");
|
||||
|
||||
foreach my $currency (@currencies) {
|
||||
my $value = plugin::val("\$$currency");
|
||||
if ($value > 0) {
|
||||
$itemcount->{$currency} = $value;
|
||||
}
|
||||
}
|
||||
|
||||
my @item_insts = (plugin::val('item1_inst'), plugin::val('item2_inst'), plugin::val('item3_inst'), plugin::val('item4_inst'));
|
||||
return $npc->CheckHandin($client, $itemcount, \%required, @item_insts);
|
||||
return ($coin1 <= $coin2);
|
||||
}
|
||||
|
||||
# Like givenCoin(), only takes the required coins if given enough by the player, also leaving change to be returned with returnUnusedItems().
|
||||
|
|
@ -172,33 +180,12 @@ sub takeCoin
|
|||
$g2 = (int($coin2 / 100) % 10);
|
||||
$p2 = int($coin2 / 1000);
|
||||
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
my %required = ();
|
||||
|
||||
if ($c2) {
|
||||
$itemcount->{"copper"} = plugin::val('$copper');
|
||||
$required{"copper"} = $c2;
|
||||
}
|
||||
if ($s2) {
|
||||
$itemcount->{"silver"} = plugin::val('$silver');
|
||||
$required{"silver"} = $s2;
|
||||
}
|
||||
if ($g2) {
|
||||
$itemcount->{"gold"} = plugin::val('$gold');
|
||||
$required{"gold"} = $g2;
|
||||
}
|
||||
if ($p2) {
|
||||
$itemcount->{"platinum"} = plugin::val('$platinum');
|
||||
$required{"platinum"} = $p2;
|
||||
}
|
||||
|
||||
plugin::setval('$copper' , $c2);
|
||||
plugin::setval('$silver' , $s2);
|
||||
plugin::setval('$gold' , $g2);
|
||||
plugin::setval('$platinum', $p2);
|
||||
|
||||
my @item_insts = (plugin::val('item1_inst'), plugin::val('item2_inst'), plugin::val('item3_inst'), plugin::val('item4_inst'));
|
||||
return plugin::val("npc")->CheckHandin(plugin::val("client"), $itemcount, \%required, @item_insts);
|
||||
return 1; # 1 = Successfully took coins
|
||||
}
|
||||
|
||||
return 0; # 0 = Insufficient funds
|
||||
|
|
@ -232,39 +219,26 @@ sub takeItemsCoin
|
|||
}
|
||||
|
||||
my ($c, $s, $g, $p) = (shift, shift, shift, shift);
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
my %required = @_;
|
||||
my $client = plugin::val('client');
|
||||
my $npc = plugin::val('npc');
|
||||
|
||||
if (plugin::givenCoin($c, $s, $g, $p))
|
||||
{
|
||||
if (plugin::takeItems(@_))
|
||||
{
|
||||
plugin::takeCoin($c, $s, $g, $p);
|
||||
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
$required->{"copper"} = $c;
|
||||
$required->{"silver"} = $s;
|
||||
$required->{"gold"} = $g;
|
||||
$required->{"platinum"} = $p;
|
||||
|
||||
my @currencies = ("platinum", "gold", "silver", "copper");
|
||||
|
||||
foreach my $currency (@currencies) {
|
||||
my $value = plugin::val("\$$currency");
|
||||
if ($value > 0) {
|
||||
$itemcount->{$currency} = $value;
|
||||
}
|
||||
}
|
||||
|
||||
my @item_insts = (plugin::val('item1_inst'), plugin::val('item2_inst'), plugin::val('item3_inst'), plugin::val('item4_inst'));
|
||||
return $npc->CheckHandin($client, $itemcount, \%required, @item_insts);
|
||||
return 0;
|
||||
}
|
||||
|
||||
# Checks to see whether the player gave the NPC a requested number of platinum
|
||||
sub givenPlatinum
|
||||
{
|
||||
my $p = shift;
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
$itemcount->{"platinum"} = plugin::val('$platinum');
|
||||
my %required = ();
|
||||
$required{"platinum"} = $p;
|
||||
my @item_insts = (plugin::val('item1_inst'), plugin::val('item2_inst'), plugin::val('item3_inst'), plugin::val('item4_inst'));
|
||||
return plugin::val("npc")->CheckHandin(plugin::val("client"), $itemcount, \%required, @item_insts);
|
||||
|
||||
return plugin::givenCoin(0, 0, 0, defined($p) ? $p : 0);
|
||||
}
|
||||
|
||||
# Takes provided coins given by the player
|
||||
|
|
@ -278,13 +252,9 @@ sub takePlatinum
|
|||
# Checks to see whether the player gave the NPC a requested number of gold
|
||||
sub givenGold
|
||||
{
|
||||
my $p = shift;
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
$itemcount->{"gold"} = plugin::val('$gold');
|
||||
my %required = ();
|
||||
$required{"gold"} = $p;
|
||||
my @item_insts = (plugin::val('item1_inst'), plugin::val('item2_inst'), plugin::val('item3_inst'), plugin::val('item4_inst'));
|
||||
return plugin::val("npc")->CheckHandin(plugin::val("client"), $itemcount, \%required, @item_insts);
|
||||
my $g = shift;
|
||||
|
||||
return plugin::givenCoin(0, 0, defined($g) ? $g : 0, 0);
|
||||
}
|
||||
|
||||
# Takes provided coins given by the player
|
||||
|
|
@ -298,13 +268,9 @@ sub takeGold
|
|||
# Checks to see whether the player gave the NPC a requested number of silver
|
||||
sub givenSilver
|
||||
{
|
||||
my $p = shift;
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
$itemcount->{"silver"} = plugin::val('$silver');
|
||||
my %required = ();
|
||||
$required{"silver"} = $p;
|
||||
my @item_insts = (plugin::val('item1_inst'), plugin::val('item2_inst'), plugin::val('item3_inst'), plugin::val('item4_inst'));
|
||||
return plugin::val("npc")->CheckHandin(plugin::val("client"), $itemcount, \%required, @item_insts);
|
||||
my $s = shift;
|
||||
|
||||
return plugin::givenCoin(0, defined($s) ? $s : 0, 0, 0);
|
||||
}
|
||||
|
||||
# Takes provided coins given by the player
|
||||
|
|
@ -318,13 +284,9 @@ sub takeSilver
|
|||
# Checks to see whether the player gave the NPC a requested number of copper
|
||||
sub givenCopper
|
||||
{
|
||||
my $p = shift;
|
||||
my $itemcount = plugin::var('itemcount');
|
||||
$itemcount->{"copper"} = plugin::val('$copper');
|
||||
my %required = ();
|
||||
$required{"copper"} = $p;
|
||||
my @item_insts = (plugin::val('item1_inst'), plugin::val('item2_inst'), plugin::val('item3_inst'), plugin::val('item4_inst'));
|
||||
return plugin::val("npc")->CheckHandin(plugin::val("client"), $itemcount, \%required, @item_insts);
|
||||
my $c = shift;
|
||||
|
||||
return plugin::givenCoin(defined($c) ? $c : 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
# Takes provided coins given by the player
|
||||
|
|
@ -337,6 +299,77 @@ sub takeCopper
|
|||
|
||||
# Returns any unwanted items and coins to the user with an appropriate message.
|
||||
sub returnUnusedItems
|
||||
{
|
||||
#returnUnusedItems-no-op - This is now handled by the source entirely
|
||||
{
|
||||
my $name = plugin::assocName();
|
||||
|
||||
my $itemcount = plugin::var('$itemcount');
|
||||
my $items = 0;
|
||||
|
||||
foreach my $k (keys(%$itemcount))
|
||||
{
|
||||
next if($k == 0);
|
||||
my $r;
|
||||
|
||||
for($r = 0; $r < $itemcount->{$k}; $r++)
|
||||
{
|
||||
$items++;
|
||||
|
||||
quest::summonitem($k);
|
||||
}
|
||||
|
||||
delete $itemcount->{$k};
|
||||
}
|
||||
|
||||
if ($items > 0)
|
||||
{
|
||||
if (plugin::humanoid())
|
||||
{
|
||||
my $itemtext1 = ($items == 1) ? 'this item' : 'these items';
|
||||
my $itemtext2 = ($items == 1) ? 'it' : 'them';
|
||||
|
||||
quest::say("I have no need for $itemtext1, $name. You can have $itemtext2 back.");
|
||||
quest::doanim(64); # Point
|
||||
}
|
||||
else
|
||||
{
|
||||
my $itemtext1 = ($items == 1) ? 'item' : 'items';
|
||||
|
||||
quest::me("This creature has no need for the $itemtext1 you are offering.");
|
||||
}
|
||||
}
|
||||
|
||||
my($platinum, $gold, $silver, $copper) = (plugin::val('$platinum'), plugin::val('$gold'), plugin::val('$silver'), plugin::val('$copper'));
|
||||
|
||||
if ($platinum || $gold || $silver || $copper)
|
||||
{
|
||||
if ($items == 0) # NOTE: If $items > 0, already giving back items with message, just tack coin onto it
|
||||
{
|
||||
if ((plugin::val('$item1') == 0) && (plugin::val('$item2') == 0) && (plugin::val('$item3') == 0) && (plugin::val('$item4') == 0))
|
||||
{
|
||||
# No items, just money
|
||||
|
||||
if (plugin::humanoid())
|
||||
{
|
||||
quest::say("I appreciate the offer, but I can't take this money, $name.");
|
||||
}
|
||||
else
|
||||
{
|
||||
quest::me('This creature has no need for your money.');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
# Items given and accepted
|
||||
|
||||
if (plugin::humanoid())
|
||||
{
|
||||
quest::say("Here is your change, $name.");
|
||||
}
|
||||
}
|
||||
|
||||
quest::doanim(64); # Point
|
||||
}
|
||||
|
||||
quest::givecash($copper, $silver, $gold, $platinum);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,29 @@
|
|||
#looks through the items haded in for discipline tomes,
|
||||
#processing them as we find them.
|
||||
sub try_tome_handins {
|
||||
my $itemcount = shift;
|
||||
my $isclass = shift;
|
||||
my $expectclass = shift;
|
||||
|
||||
my @tomes = ();
|
||||
foreach my $i(keys %{$itemcount}) {
|
||||
if(quest::isdisctome($i)) {
|
||||
push(@tomes, $i);
|
||||
delete $itemcount->{$i};
|
||||
}
|
||||
}
|
||||
if(@tomes > 0) {
|
||||
if($isclass eq $expectclass) {
|
||||
foreach my $i(@tomes) {
|
||||
quest::traindisc($i);
|
||||
}
|
||||
} else {
|
||||
quest::say('You are not a member of my guild. I will not train you!');
|
||||
foreach my $i(@tomes) {
|
||||
$itemcount->{$i} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -1,39 +0,0 @@
|
|||
local task_array = {};
|
||||
|
||||
function event_say(e)
|
||||
-- Setup Task Array
|
||||
table_setup(e);
|
||||
|
||||
if e.message:findi("hail") then
|
||||
e.other:Message(MT.NPCQuestSay, "Greetings and welcome. I have been compiling reports from all over Norrath! There are many odd jobs to be done by someone like you. Would you be interested in such a [quest]?");
|
||||
elseif e.message:findi("quest") then
|
||||
eq.task_selector(task_array);
|
||||
end
|
||||
end
|
||||
|
||||
function table_setup(e)
|
||||
task_array = {}; -- Clear Table
|
||||
|
||||
table.insert(task_array, 5738); -- Task: Haunted Butcherblock
|
||||
table.insert(task_array, 5739); -- Task: Scouting Blackburrow
|
||||
table.insert(task_array, 5740); -- Task: Desert Crawl
|
||||
table.insert(task_array, 5742); -- Task: Within the Warrens
|
||||
table.insert(task_array, 5744); -- Task: The Frozen Crystal
|
||||
|
||||
if eq.is_current_expansion_depths_of_darkhollow() then
|
||||
table.insert(task_array, 5741); -- Task: Elusive Wisps
|
||||
else
|
||||
table.insert(task_array, 505741); -- Task: Elusive Wisps (Old Nektulos)
|
||||
end
|
||||
|
||||
if eq.is_current_expansion_the_serpents_spine() then
|
||||
table.insert(task_array, 5743); -- Task: Protecting the High Pass
|
||||
else
|
||||
table.insert(task_array, 505743); -- Task: Protecting the High Pass (Old Highpass)
|
||||
end
|
||||
end
|
||||
|
||||
function event_trade(e)
|
||||
local item_lib = require("items");
|
||||
item_lib.return_items(e.self, e.other, e.trade)
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue