// TMW2 Script
function script displayMOTD {
.@size = getvariableofnpc(.size, "@motd");
.@dsize = getvariableofnpc(.dsize, "@motd");
// git stuff and such
if (debug) {
for (.@i = 0; .@i < .@dsize; ++.@i) {
dispbottom $@Debug_Messages$[.@i]; // FIXME: send this to the Debug tab instead
}
if (.@dsize > 0)
dispbottom "---";
}
// generic MOTD
for (.@i = 0; .@i < .@size; ++.@i) {
dispbottom $MOTD_Messages$[.@i];
}
return;
}
function script MOTDConfig {
function toggleMOTD {
$MOTD_Disabled = !($MOTD_Disabled);
logmes "MOTD modified: toogled: enable/disable", LOGMES_ATCOMMAND;
}
function addNewLine {
clear;
mes l("Please enter the new line.");
input .@s$;
.@s$ = strip(.@s$);
if (.@s$ != "") {
.@size = getvariableofnpc(.size, "@motd");
$MOTD_Messages$[.@size] = .@s$;
set getvariableofnpc(.size, "@motd"), getarraysize($MOTD_Messages$);
logmes "MOTD modified: line added", LOGMES_ATCOMMAND;
}
}
function modifyLine {
function removeLine {
.@l = getarg(0);
deletearray $MOTD_Messages$[.@l], 1; // remove and shift
mes l("Line @@ has been removed.", .@l);
set getvariableofnpc(.size, "@motd"), getarraysize($MOTD_Messages$);
logmes "MOTD modified: line removed", LOGMES_ATCOMMAND;
}
function moveUp {
.@l = getarg(0);
.@top$ = $MOTD_Messages$[.@l - 1];
$MOTD_Messages$[.@l - 1] = $MOTD_Messages$[.@l];
$MOTD_Messages$[.@l] = .@top$;
}
function moveDown {
.@l = getarg(0);
.@bottom$ = $MOTD_Messages$[.@l + 1];
$MOTD_Messages$[.@l + 1] = $MOTD_Messages$[.@l];
$MOTD_Messages$[.@l] = .@bottom$;
}
function editLine {
.@l = getarg(0);
clear;
mes l("Old line:");
mes "---";
mes $MOTD_Messages$[.@l];
mes "---";
mes "";
mes l("Enter new line:");
next;
input .@s$;
.@s$ = strip(.@s$);
if (.@s$ != "") {
$MOTD_Messages$[.@l] = .@s$;
logmes "MOTD modified: line edited", LOGMES_ATCOMMAND;
}
}
.@max = (getarg(0) - 1);
do
{
mes l("Enter line number:");
next;
input .@n;
if ($MOTD_Messages$[.@n] != "") {
clear;
mes l("line @@: @@", .@n, $MOTD_Messages$[.@n]);
next;
select
menuimage("actions/back", l("Modify another line")),
menuimage("actions/remove", l("Remove this line")),
menuimage("actions/edit", l("Modify this line")),
rif(.@n > 0, menuimage("actions/raise", l("Move this line up"))),
rif(.@n < .@max, menuimage("actions/lower", l("Move this line down"))),
menuimage("actions/home", l("Return to main menu"));
switch (@menu) {
case 2: removeLine .@n; return;
case 3: editLine .@n; return;
case 4: moveUp .@n; return;
case 5: moveDown .@n; return;
case 6: return;
}
}
} while (1);
}
do
{
clear;
setnpcdialogtitle l("MOTD Config");
mes l("This menu allows you to modify the generic message that is sent to players when they log in.");
mes "";
mes "---";
.@size = getvariableofnpc(.size, "@motd");
for (.@i = 0; .@i < .@size; ++.@i) {
mes l("line @@: @@", .@i, $MOTD_Messages$[.@i]);
}
if (.@size == 0) {
mes "(" + l("no active MOTD") + ")";
}
mes "---";
.@d = $MOTD_Disabled;
mes l("Enabled: @@", (.@d ? l("no") : l("yes")));
next;
select
menuimage("actions/toggle", (.@d ? l("Enable") : l("Disable"))),
menuimage("actions/add", l("Add a new line")),
rif(.@size, menuimage("actions/manage", l("Modify, move, or remove a line"))),
rif(.@size, menuimage("actions/test", l("Test MOTD"))),
rif(getarg(0,0), menuimage("actions/home", l("Return to Super Menu")));
switch (@menu) {
case 1: toggleMOTD; break;
case 2: addNewLine; break;
case 3: modifyLine .@size; break;
case 4: displayMOTD; break;
default: return;
}
} while (1);
}
- script @motd 32767,{
end;
OnCall:
if (!is_admin()) {
end;
}
MOTDConfig;
closedialog;
end;
OnPCLoginEvent:
if ($MOTD_Disabled < 1) {
displayMOTD;
}
if (debug) {
dispbottom "##7<<##B @@help://test-server|" + col(l("Click here for instructions on how to use the test server."),6) + "@@ ##7>>";
}
// Handle daily login bonus
// The Strange Coin output wasn't changed, but now it relies on streaks.
// Variables:
// #LOGIN_DAY
// Current day
// #LOGIN_TABLE
// Current month
// #LOGIN_STREAK
// Number of monthly connections
// #LOGIN_ALLTIME
// Number of times you claimed the top prize (27 days streak)
if (#LOGIN_DAY != .login_ref) {
// Is it a new month?
if (#LOGIN_TABLE == gettime(6)) {
#LOGIN_STREAK=#LOGIN_STREAK+1;
} else {
#LOGIN_STREAK=1;
#LOGIN_TABLE=gettime(6);
}
// Update last day you've claimed a reward
#LOGIN_DAY = .login_ref;
// Handle rewards: Streaks first, daily later. Streak reward prevail over daily reward.
if (#LOGIN_STREAK > 27) {
getitem StrangeCoin, 2;
getitem CasinoCoins, 1;
dispbottom l("##2 @@ Days login bonus: ##B2x @@, 1x @@##b", #LOGIN_STREAK, getitemlink(StrangeCoin), getitemlink(CasinoCoins));
} else if (#LOGIN_STREAK == 27) {
#LOGIN_ALLTIME+=1;
// Your prize is based on season
switch (season()) {
case AUTUMN:
.@prize=ElixirOfLife; break;
case WINTER:
.@prize=SilverGift; break;
case SPRING:
.@prize=Toothbrush; break;
case SUMMER:
.@prize=RightEyePatch; break;
}
// Some special cases
if (#LOGIN_ALLTIME == 3)
.@prize=GoldenGift;
if (#LOGIN_ALLTIME == 8)
.@prize=PrismGift;
if (#LOGIN_ALLTIME == 12) {
dispbottom l("CONGRATULATIONS! For a year worth of logins, you're getting a pet!");
makepet Piou; // we must replace this before August 2019. (r18 probably)
}
getitem .@prize, 1;
dispbottom l("##2 27 Days login bonus: ##B1x @@##b", getitemlink(.@prize));
} else if (#LOGIN_STREAK == 21) {
getitem StrangeCoin, 7;
dispbottom l("##2 21 Days login bonus: ##B7x @@##b", getitemlink(StrangeCoin));
} else if (#LOGIN_STREAK == 14) {
getitem StrangeCoin, 5;
dispbottom l("##2 14 Days login bonus: ##B5x @@##b", getitemlink(StrangeCoin));
} else if (#LOGIN_STREAK == 7) {
getitem StrangeCoin, 2;
dispbottom l("##2 7 Days login bonus: ##B2x @@##b", getitemlink(StrangeCoin));
} else if (#LOGIN_STREAK == 3) {
getitem StrangeCoin, 1;
dispbottom l("##2 3 Days login bonus: ##B1x @@##b", getitemlink(StrangeCoin));
} else if (.login_ref % 3 == 0) {
.@value=max(5, rand(0, (#LOGIN_STREAK/4)));
.@value+=(BaseLevel**2);
getexp .@value, 0;
dispbottom l("##2Daily login bonus: ##B@@ EXP##b", .@value);
} else if (.login_ref % 3 == 1) {
.@value=max(20, rand(0, (#LOGIN_STREAK*2)));
.@value+=(BaseLevel+JobLevel);
Zeny=Zeny+.@value;
dispbottom l("##2Daily login bonus: ##B@@ GP##b", .@value);
} else {
.@value=max(5, rand(0, (#LOGIN_STREAK/4)));
.@value+=(JobLevel**2);
getexp 0, .@value;
dispbottom l("##2Daily login bonus: ##B@@ Job Exp.##b", .@value);
}
}
end;
OnClock0000:
.login_ref=gettime(5); // Day of moth
end;
OnInit:
.login_ref=gettime(5);
.daylength=(60*60*24);
MOTD_debug_text;
.size = getarraysize($MOTD_Messages$);
.dsize = getarraysize($@Debug_Messages$);
bindatcmd "motd", "@motd::OnCall", 99, 99, 1;
}