// TMW2 Script
// Author:
// Evol Team
// Saulc
// Jesusalva
// Description:
// Handles all major events on TMW2 (Christmas, Easter, Worker Day, etc.)
// WARNING, possibly dangerous.
function script sClear {
// Delete all Easter Stuff
if ($EVENT$ != "Easter") {
DelItemFromEveryPlayer(GoldenEasteregg);
DelItemFromEveryPlayer(GoldenEasteregg);
DelItemFromEveryPlayer(ClosedChristmasBox);
DelItemFromEveryPlayer(OpenedChristmasBox);
disablenpc "Lilica#final";
} else {
.@nb = query_sql("SELECT c.name, i.amount FROM `inventory` AS i, `char` AS c WHERE i.nameid=834 AND i.char_id=c.char_id ORDER BY i.amount DESC LIMIT 10", $@easter_name$, $@easter_value);
enablenpc "Lilica#final";
}
// Delete all Christmas stuff
if ($EVENT$ != "Christmas") {
$XMAS_MONEY=0; // Golbarez
$XMAS_GIFTS=0; // Chief
} else if ($EVENT$ == "Christmas") {
DelAccRegFromEveryPlayer("#XMAS_LOGINBONUS");
removemapmask "003-1", MASK_CHRISTMAS;
removemapmask "005-1", MASK_CHRISTMAS;
removemapmask "009-1", MASK_CHRISTMAS;
removemapmask "012-1", MASK_CHRISTMAS;
removemapmask "017-2", MASK_CHRISTMAS;
removemapmask "017-2-1", MASK_CHRISTMAS;
removemapmask "017-3", MASK_CHRISTMAS;
removemapmask "020-2", MASK_CHRISTMAS;
}
// Delete all Valentine Day stuff
if ($EVENT$ != "Valentine") {
// ItemDB prefers account variables than quest log
DelAccRegFromEveryPlayer("#VALENTINE_POINTS");
DelAccRegFromEveryPlayer("#VALENTINE_RECEIVED");
DelAccRegFromEveryPlayer("#VALENTINE_OPENED");
DelAccRegFromEveryPlayer("#VALENTINE_SENT");
// Remove event items
DelItemFromEveryPlayer(LoveLetter);
DelItemFromEveryPlayer(BoxOfChocolates);
disablenpc "Demure#ValentineFinal";
} else if ($EVENT$ == "Valentine") {
htdelete $@VALENTINE_GIFTSTACKS;
htdelete $@VALENTINE_LOVELETTER;
$@VALENTINE_GIFTSTACKS=0;
$@VALENTINE_LOVELETTER=0;
enablenpc "Demure#ValentineFinal";
}
// Simpler events
$PATRICK_DAYCTRL=0;
$PATRICK_DAYMAX=0;
DelAccRegFromEveryPlayer("#PATRICK_DAY");
DelAccRegFromEveryPlayer("#PATRICK_CTRL");
DelAccRegFromEveryPlayer("#TMW2_LOGINBONUS");
// We must remove any event drop
charcommand("@reloadmobdb");
SeasonReload(1);
return;
}
function script GlobalEventMenu {
function resetCandor {
$@FEFE_CAVE_LEVEL=0;
$@FEFE_DELAY=0;
$@FEFE_DIFFICULTY=0;
$@FEFE_CAVE_HERO$="";
mesc "Candor Fight Reset!";
return;
}
function rateManagement {
clear;
mes l("To get the current rate:");
mes col(" @exprate", 7);
next;
mes l("To set the exp rate:");
mes col(" @exprate ##Brate##b hours", 7);
next;
mes l("To reset back to normal:");
mes col(" @exprate default", 7); // note to translators: any non-numerical value will reset so "default" is safe to translate
next;
return;
}
function dropManagement {
clear;
mes l("To get the current rate:");
mes col(" @rates", 7);
next;
mes l("To set the drop rate:");
mes col(" @droprate ##Brate##b hours", 7);
next;
mes l("To reset back to normal:");
mes col(" @droprate default", 7); // note to translators: any non-numerical value will reset so "default" is safe to translate
next;
return;
}
// Easter is map-only, so it can be handled here instead of seasons.txt
function sEaster {
// Enable event
set $EVENT$, "Easter";
logmes "Enabled EASTER event.", LOGMES_ATCOMMAND;
return;
}
function seasonManagement {
clear;
mes l("Current event: @@", $EVENT$);
menu
l("Disable event"), -,
l("Enable Valentine Day"), -,
l("Enable St. Patrick Day"), -,
l("Enable Easter"), -,
l("Enable Worker's Day"), -,
l("Enable Christmas"), -,
l("Enable Demure's Birthday"), -,
l("Reset Kill Saulc Event (Monthly)"), -;
switch (@menu) {
case 1: sClear(); set $EVENT$, ""; logmes "Disabled events.", LOGMES_ATCOMMAND;
break;
case 2:
set $EVENT$, "Valentine"; $@VALENTINE_LOVELETTER = htnew(); $@VALENTINE_GIFTSTACKS = htnew(); logmes "Enabled VALENTINE DAY event.", LOGMES_ATCOMMAND;
break;
case 3:
$EVENT$="St. Patrick";
$@PATRICK_DAYMAX=31;
enablenpc "sPatrick";
enablenpc "Patrick Saulc";
enablenpc "St. Patrick Gold Pot";
donpcevent "St. Patrick Gold Pot::OnForcedMove";
logmes "Enabled ST. PATRICK DAY event (until day 31).", LOGMES_ATCOMMAND;
break;
case 4: sEaster(); break;
case 5:
set $EVENT$, "Worker Day";
logmes "Enabled WORKERS DAY event.", LOGMES_ATCOMMAND;
/*
addmonsterdrop(Snake, Pearl, 10);
debugmes "Snakes are now dropping Pearls.";
*/
break;
case 6:
logmes "Enabled CHRISTMAS event.", LOGMES_ATCOMMAND;
query_sql("DELETE FROM `quest` WHERE `quest_id` = '"+SQuest_Christmas+"'");
sChristmas(); break;
case 7:
$EVENT$=any("Demure Birthday", "Blame Saulc");
dispbottom("Maybe in future this increases everyone attack speed? Well, for now,");
dispbottom("This is not actually an event, it just lower prices at Lua GM shop.");
break;
case 8: DelItemFromEveryPlayer(MurdererCrown); break;
}
return;
}
do
{
clear;
setnpcdialogtitle l("Event Management");
mes l("This menu allows you to manage events and gives access to event-related tools.");
mes "";
mes l("What do you want to access?");
select
l("Experience Rate management"),
l("Drop Rate management"),
l("Reset Crazyfefe Fight"),
l("Change Season Event"),
rif(getarg(0,0), menuimage("actions/home", l("Return to Super Menu"))),
l("Close");
//.@c = getarg(0,0) ? 2 : 1; // 1 = back to event menu, 2 = back to super menu
switch (@menu) {
case 1: rateManagement; break;
case 2: dropManagement; break;
case 3: resetCandor(); break;
case 4: seasonManagement; break;
case 6: close; break;
default: return;
}
} while (true);
}
- script @event 32767,{
end;
OnCall:
if (!is_gm()) {
end;
}
GlobalEventMenu;
closedialog;
end;
}
- script @toevent 32767,{
end;
OnCall:
if (!@toeventchk) {
@toeventval1=readparam(Hp);
@toeventval2=readparam(Sp);
@toeventchk=1;
specialeffect 310, SELF;
addtimer 4000, "@toevent::OnEffect";
}
end;
OnEffect:
@toeventchk=0;
// Calculate
if (BaseLevel < 10) {
dispbottom l("You are not strong enough to survive this trip.");
end;
} else if (readparam(Sp) < @toeventval2) {
dispbottom l("You must not be using mana to do this trip.");
end;
} else if (readparam(Hp) < @toeventval1) {
dispbottom l("You cannot be fighting to do this trip.");
end;
} else if (getmapname() ~= "001-*") {
dispbottom l("You are already at the Mana Plane of Existence.");
end;
} else if (getmapname() == "boss" || getmapname() == "sec_pri" || getmapname() ~= "000-*" || getmapname() ~= "008-*" || getmapname() ~= "sore*") {
dispbottom l("The Mana Plane is currently out of reach.");
end;
} else {
// Monster King events take precedence over Aeros Event
switch ($@MK_SCENE) {
case MK_SIEGE_TULIM:
warp "003-1", 40, 49;
specialeffect(63, AREA, getcharid(3));
end;
case MK_SIEGE_HALIN:
warp "009-1", 27, 30;
specialeffect(63, AREA, getcharid(3));
end;
case MK_SIEGE_HURNS:
warp "012-1", 87, 70;
specialeffect(63, AREA, getcharid(3));
end;
case MK_SIEGE_NIVAL:
warp "020-1", 57, 62;
specialeffect(63, AREA, getcharid(3));
end;
}
// Aeros Events takes precedence over player events
if ($@GM_EVENT)
{
.@gt=$@AEROS_SPWN;
if (.@gt == 2)
.@gt=rand(0,1);
switch (.@gt) {
case 0:
warp "001-1", 235, 26; break;
case 1:
warp "001-1", 23, 108; break;
}
specialeffect(63, AREA, getcharid(3));
end;
}
// Player events takes precedence over permanent events
// They also have an hierarchy
// 1. Candor Battle
if ($@FEFE_DELAY > gettimetick(2) && !$@FEFE_CAVE_LEVEL && $@FEFE_CAVE_HERO$ != "" && !$@FEFE_WAVE) {
warp "006-1", 49, 53;
message strcharinfo(0), l("You are now at Candor Battle Cave at @@'s request.", $@FEFE_CAVE_HERO$);
end;
}
// Events are the least priority
if ($EVENT$ == "Valentine") {
warp "001-11", 38, 32;
message strcharinfo(0), l("You are now at the Valentine Highlands.");
end;
}
if ($EVENT$ == "Easter") {
warp "001-4", 151, 157;
message strcharinfo(0), l("You are now at the Magical Forest.");
end;
}
if ($EVENT$ == "Worker Day") {
warp "001-5", 22, 79;
message strcharinfo(0), l("You are now at the Contributor's Cave.");
end;
}
if ($EVENT$ == "Christmas") {
warp "019-4-1", 32, 36;
message strcharinfo(0), l("You are now at the Christmas Workshop.");
end;
}
}
// Block here
if (!$@GM_EVENT && !$@MK_SCENE && $EVENT$ == "") {
dispbottom l("The mana bridge is closed at the moment.");
end;
}
// Seems like it was a Blame Saulc-like event...
dispbottom l("Have a nice @@ day!", $EVENT$);
dispbottom l("The mana bridge is closed at the moment.");
end;
OnInit:
bindatcmd "event", "@event::OnCall", 99, 99, 0;
bindatcmd "toevent", "@toevent::OnCall", 0, 99, 0;
}