// TMW2 Script
// Author:
// Evol Team
// Saulc
// Jesusalva
// Description:
// Handles all major events on TMW2 (Christmas, Easter, Worker Day, etc.)
// Christmas cannot be on GlobalEventMenu because it affects seasons system
function script sChristmas {
// Determine the drop rates based on month, and Christmas proximity
if (gettime(GETTIME_MONTH) == DECEMBER) {
if (gettime(GETTIME_DAYOFMONTH) <= 26)
.@m=10;
else
.@m=8;
} else {
.@m=5;
}
// Add Christmas drops
addmonsterdrop(Moggun, XmasCake, 80*.@m);
addmonsterdrop(AlphaMouboo, XmasCake, 92*.@m);
addmonsterdrop(BlueSlime, XmasCake, 100*.@m);
addmonsterdrop(SantaSlime, XmasCake, 120*.@m);
addmonsterdrop(IcedFluffy, XmasCake, 150*.@m);
addmonsterdrop(Yeti, XmasCake, 500*.@m);
addmonsterdrop(Bandit, XmasCandyCane, 30*.@m);
addmonsterdrop(Mouboo, XmasCandyCane, 48*.@m);
addmonsterdrop(WhiteSlime, XmasCandyCane, 50*.@m);
addmonsterdrop(RudolphSlime,XmasCandyCane, 100*.@m);
addmonsterdrop(Fluffy, XmasCandyCane, 200*.@m);
addmonsterdrop(AzulSlime, XmasCandyCane, 200*.@m);
addmonsterdrop(Duck, GingerBreadMan, 36*.@m);
addmonsterdrop(WaterFairy, GingerBreadMan, 100*.@m);
// Event drop rates, multiplied by 10 during Christmas (see .@m)
addmonsterdrop(Yeti, ClosedChristmasBox, 350*.@m);
addmonsterdrop(WaterFairy, ClosedChristmasBox, 108*.@m);
addmonsterdrop(AlphaMouboo, ClosedChristmasBox, 83*.@m);
addmonsterdrop(IcedFluffy, ClosedChristmasBox, 67*.@m);
addmonsterdrop(BlueSlime, ClosedChristmasBox, 42*.@m);
addmonsterdrop(Moggun, ClosedChristmasBox, 40*.@m);
addmonsterdrop(SantaSlime, ClosedChristmasBox, 36*.@m);
addmonsterdrop(AzulSlime, ClosedChristmasBox, 20*.@m);
addmonsterdrop(Fluffy, ClosedChristmasBox, 20*.@m);
addmonsterdrop(RudolphSlime,ClosedChristmasBox, 8*.@m);
addmonsterdrop(WhiteSlime, ClosedChristmasBox, 3*.@m);
addmonsterdrop(GiantMaggot, ClosedChristmasBox, 2*.@m);
// This is not dropped outside December
if (gettime(GETTIME_MONTH) == DECEMBER) {
// Bugfix
if (gettime(GETTIME_YEAR) == 2018)
.@m+=10;
addmonsterdrop(WaterFairy, XmasGift, 6*.@m);
addmonsterdrop(AlphaMouboo, XmasGift, 5*.@m);
addmonsterdrop(IcedFluffy, XmasGift, 4*.@m);
addmonsterdrop(SantaSlime, XmasGift, 3*.@m);
addmonsterdrop(Fluffy, XmasGift, 2*.@m);
addmonsterdrop(AzulSlime, XmasGift, 2*.@m);
}
// Change maps for Christmas Season (Specially LoF maps)
addmapmask "003-1", MASK_CHRISTMAS;
addmapmask "005-1", MASK_CHRISTMAS;
addmapmask "009-1", MASK_CHRISTMAS;
addmapmask "012-1", MASK_CHRISTMAS;
addmapmask "017-2", MASK_CHRISTMAS;
addmapmask "017-2-1", MASK_CHRISTMAS;
addmapmask "017-3", MASK_CHRISTMAS;
addmapmask "020-2", MASK_CHRISTMAS;
// Enable event
set $EVENT$, "Christmas";
//logmes "Enabled CHRISTMAS event.", LOGMES_ATCOMMAND;
return;
}
//MASK_CHRISTMAS
function script GlobalEventMenu {
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;
}
function sEaster {
// Enable event
set $EVENT$, "Easter";
logmes "Enabled EASTER event.", LOGMES_ATCOMMAND;
return;
}
// WARNING, possibly dangerous.
function sClear {
// Delete all event-only item from every player
DelItemFromEveryPlayer(GoldenEasteregg);
DelItemFromEveryPlayer(GoldenEasteregg);
DelItemFromEveryPlayer(ClosedChristmasBox);
DelItemFromEveryPlayer(OpenedChristmasBox);
// 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;
}
// We must remove any event drop
charcommand("@reloadmobdb");
SeasonReload(1);
}
function seasonManagement {
clear;
mes l("Current event: @@", $EVENT$);
menu
l("Disable event"), -,
l("Enable Easter"), -,
l("Enable Worker's Day"), -,
l("Enable Christmas"), -,
l("Reset Kill Saulc Event (Monthly)"), -;
switch (@menu) {
case 1: sClear(); set $EVENT$, ""; logmes "Disabled events.", LOGMES_ATCOMMAND;
break;
case 2: sEaster(); break;
case 3:
set $EVENT$, "Worker Day";
logmes "Enabled WORKERS DAY event.", LOGMES_ATCOMMAND;
/*
addmonsterdrop(Snake, Pearl, 10);
debugmes "Snakes are now dropping Pearls.";
*/
break;
case 4:
logmes "Enabled CHRISTMAS event.", LOGMES_ATCOMMAND;
query_sql("DELETE FROM `quest` WHERE `quest_id` = '"+SQuest_Christmas+"'");
sChristmas(); break;
case 5: 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("Change Season Event"),
rif(getarg(0,0), menuimage("actions/home", l("Return to Super Menu")));
//.@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: seasonManagement; break;
default: return;
}
} while (true);
}
- script @event 32767,{
end;
OnCall:
if (!is_gm()) {
end;
}
GlobalEventMenu;
closedialog;
end;
}
- script @toevent 32767,{
end;
OnCall:
if (!$@GM_EVENT)
dispbottom l("The mana bridge is closed at the moment.");
else if (BaseLevel < 10)
dispbottom l("You are not strong enough to survive this trip.");
else if (readparam(Sp) != readparam(MaxSp))
dispbottom l("You need all your mana to do this trip.");
else if (readparam(Hp) != readparam(MaxHp))
dispbottom l("You cannot be hurt to do this trip.");
else if (getmapname() ~= "001-*")
dispbottom l("You are already at the Mana Plane of Existence.");
else if (getmapname() == "boss" || getmapname() == "sec_pri" || getmapname() ~= "000-*" || getmapname() ~= "008-*" || getmapname() ~= "sore*")
dispbottom l("The Mana Plane is currently out of reach.");
else {
.@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;
OnInit:
bindatcmd "event", "@event::OnCall", 99, 99, 0;
bindatcmd "toevent", "@toevent::OnCall", 0, 99, 0;
}