Compare commits

..

1 commit

Author SHA1 Message Date
Trust
b830fea185 [Feature] LUA SQL Support (Linux)
Copy the luasql_ext.lua from global/lib/lua/5.1/ and place that in the root game folder with your eqemu_config.json and edit the database information to mirror your connection requirements.

Example lua use:

```lua
local mysql = require("luasql_ext");

for id, level, locked_out in mysql.rows(con,string.format("SELECT DISTINCT c.`id`, c.`level` FROM group_id g INNER JOIN character_data c ON c.id = g.character_id WHERE g.group_id = %s", group:GetID())) do
			if tonumber(level) <= dia_min_level then dia_min_level = tonumber(level) end
			if tonumber(level) >= dia_max_level then dia_max_level = tonumber(level) end
			dia_total_level = dia_total_level + tonumber(level);
			dia_member_count = dia_member_count + 1;
		end

```

```lua
local mysql = require("luasql_ext");

		for id,name in mysql.rows(con,"SELECT id from npc_types WHERE id >= 211000 and id < 212000 and disable_instance = 1") do
			disable_instance[id] = tonumber(id);
		end
```
2024-11-04 21:06:51 -05:00
203 changed files with 5249 additions and 3618 deletions

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);
}
}

View file

@ -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();
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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();

View file

@ -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();

View file

@ -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

View file

@ -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

View file

@ -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

Binary file not shown.

View 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;

Binary file not shown.

View file

@ -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&ccedil;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&ccedil;&atilde;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&atilde;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&eacute;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&ccedil;&atilde;o</a></li>
<li><a href="manual.html#compiling">Compilando</a></li>
<li><a href="manual.html#installation">Instala&ccedil;&atilde;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&atilde;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&oacute;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&ccedil;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 &copy; 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>

View file

@ -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 &copy; 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>

View file

@ -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 &copy; 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>

View file

@ -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)" }
}
}
}

View 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"
}

View 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"
}
}
}
}
}

View file

@ -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");
}
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);
}

View file

@ -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

View file

@ -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 {

View file

@ -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

View file

@ -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;

View file

@ -1,5 +1,3 @@
# Bristlebane 1.0
my $x;
my $y;
my $z;

View file

@ -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

View 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

View 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

View 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);
}

View file

@ -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

View 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
}

View file

@ -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

View 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

View file

@ -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

View 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);
}

View file

@ -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

View 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);
}

View file

@ -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

View file

@ -0,0 +1,6 @@
sub EVENT_SAY {
my $chance = int(rand(100));
if($text=~/hail/i && $chance == 7){
quest::attack($name);
}
}

View file

@ -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

View file

@ -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
View file

@ -0,0 +1,5 @@
sub EVENT_SAY {
$npc->CastSpell(3087,$userid); # Spell: Cazic Touch
quest::shout("SILENCE IN THE LIBRARY!");
}

View file

@ -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

View file

@ -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

View 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);
}

View file

@ -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

View 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);
}

View file

@ -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

View file

@ -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

View 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
}

View file

@ -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

View 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.");
}
}

View file

@ -0,0 +1,12 @@
sub EVENT_SPAWN {
quest::settimer(1,1800);
}
sub EVENT_SIGNAL {
quest::depop();
}
sub EVENT_TIMER {
quest::depop();
}

View file

@ -0,0 +1,12 @@
sub EVENT_SPAWN {
quest::settimer(1,1800);
}
sub EVENT_SIGNAL {
quest::depop();
}
sub EVENT_TIMER {
quest::depop();
}

View file

@ -0,0 +1,12 @@
sub EVENT_SPAWN {
quest::settimer(1,1800);
}
sub EVENT_SIGNAL {
quest::depop();
}
sub EVENT_TIMER {
quest::depop();
}

View file

@ -0,0 +1,12 @@
sub EVENT_SPAWN {
quest::settimer(1,1800);
}
sub EVENT_SIGNAL {
quest::depop();
}
sub EVENT_TIMER {
quest::depop();
}

View file

@ -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

View 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
}
}

View file

@ -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

View file

@ -1 +0,0 @@
eq.load_encounter("Bristlebane_the_King_of_Thieves"); -- 2.0 Version

View file

@ -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 {

View file

@ -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 {

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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.");
}
}

View file

@ -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
View 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

View file

@ -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;
}

View file

@ -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);
}
}

View file

@ -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;

View file

@ -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