// TMW2 Script.
// Authors:
// Jesusalva
// Description:
// Daily Login Reward
function script daily_login_bonus_handler {
// 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)
//debugmes "DLBH";
// GMs can receive Strange Coins
if (GSET_AUTORECEIVE_COINS) {
if (is_gm()) {
if (#GMEVENT_T <= gettimetick(2)) {
#GMEVENT_T=gettimetick(2)+(60*60*24);
getitem StrangeCoin, 30;
}
} else {
GSET_AUTORECEIVE_COINS=false;
}
}
if (#LOGIN_DAY != gettime(5)) {
// demure check: Are you on a start area?
getmapxy(.@m$,.@x,.@y,0);
if (compare(.@m$, "000-0"))
return;
//debugmes "[DLBH] Mapcheck ok";
// Is it a new month?
if (#LOGIN_TABLE == gettime(6)) {
#LOGIN_STREAK=#LOGIN_STREAK+1;
} else {
#LOGIN_STREAK=1;
#LOGIN_TABLE=gettime(6);
#TMW2_LOGINBONUS=0;
}
// Update last day you've claimed a reward
#LOGIN_DAY = gettime(5);
//debugmes "[DLBH] month checks ok";
// Handle rewards: Streaks first, daily later. Streak reward prevail over daily reward.
if ($@NOUPDATES) {
dispbottom col(l("Updates were disabled"), 1);
} else 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;
.@am=1;
switch (#LOGIN_ALLTIME % 12) {
case 1:
if (#LOGIN_ALLTIME == 1)
.@prize=RightEyePatch;
else
.@prize=SilverGift;
break;
case 2:
.@prize=ArcmageBoxset; break;
case 3:
.@prize=MercBoxA; break;
case 4:
.@prize=AncientBlueprint; break;
case 5:
.@prize=StrangeCoin; .@am=120; break;
case 6:
if (#LOGIN_ALLTIME == 6) {
dispbottom l("CONGRATULATIONS! For a semester worth of logins, you're getting a pet!");
.@prize=PiouEgg; .@am=0;
makepet Piou;
} else {
.@prize=GoldenGift;
}
break;
case 7:
.@prize=GoldenGift; break;
case 8:
.@prize=MercBoxB; break;
case 9:
.@prize=PrismGift; break;
case 10:
.@prize=StrangeCoin; .@am=150; break;
case 11:
.@prize=MercBoxC; break;
case 0:
.@prize=MysteriousFruit; break;
default:
.@prize=ElixirOfLife; break;
}
if (.@am)
getitem .@prize, .@am;
dispbottom l("##2 27 Days login bonus: ##B1x @@##b", getitemlink(.@prize));
} else if (#LOGIN_STREAK == 21) {
getitem BronzeGift, 1;
dispbottom l("##2 21 Days login bonus: ##B1x @@##b", getitemlink(BronzeGift));
} else if (#LOGIN_STREAK == 14) {
getitem BronzeGift, 1;
dispbottom l("##2 14 Days login bonus: ##B1x @@##b", getitemlink(BronzeGift));
} else if (#LOGIN_STREAK == 7) {
getitem StrangeCoin, 3;
dispbottom l("##2 7 Days login bonus: ##B3x @@##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_STREAK % 3 == 0) {
.@value=max(20, rand2(#LOGIN_STREAK, #LOGIN_STREAK*2));
.@value+=(BaseLevel*5/2)+rand2(JobLevel, JobLevel*7/20);
.@value=.@value * 5 / 4; // Bonus 25%
Zeny=Zeny+.@value;
dispbottom l("##2Daily login bonus: ##B@@ GP##b", .@value);
} else if (#LOGIN_STREAK % 3 == 2) {
.@value=max(5, rand2(0, (#LOGIN_STREAK/4)));
.@value+=(BaseLevel**2);
.@value=(.@value*3/4)+#LOGIN_STREAK; // 50% → 75%
getexp .@value, 0;
dispbottom l("##2Daily login bonus: ##B@@ EXP##b", .@value);
} else {
.@value=max(5, rand2(0, (#LOGIN_STREAK/4)));
.@value+=(JobLevel**2);
.@value=(.@value/2)+#LOGIN_STREAK; // 33% → 50%
getexp 0, .@value;
dispbottom l("##2Daily login bonus: ##B@@ Job Exp.##b", .@value);
}
// Handle event login bonus
if (gettime(6) == JANUARY) {
if (#TMW2_LOGINBONUS != gettime(GETTIME_YEAR) && gettime(5) == 13) {
#TMW2_LOGINBONUS=gettime(GETTIME_YEAR);
getitem StrangeCoin, 10;
// TMW2 Anniversary is project, not server.
// Therefore, contributors get an extra reward
.@m=htget($@CONTRIBUTORS, strtolower(strcharinfo(0)), 0);
if (.@m)
getitem StrangeCoin, min(9, .@m/100)+1;
dispbottom "##B##2"+l("It's TMW2 Project anniversary!")+" "+l("We thank every developer which helped this project thus far!")+"##b##0";
}
}
if (gettime(6) == MARCH) {
if (#TMW2_LOGINBONUS != gettime(GETTIME_YEAR) && gettime(5) == 2) {
#TMW2_LOGINBONUS=gettime(GETTIME_YEAR);
getitem MercBoxC, 1;
// TMW2 Day is server, not project.
// Therefore, players get extra reward
dispbottom "##B##2"+l("It's TMW2 Server anniversary!")+" "+l("We thank every player, because without them, this would be nothing!")+"##b##0";
}
}
if (gettime(6) == JUNE) {
if (#TMW2_LOGINBONUS != gettime(GETTIME_YEAR) && gettime(5) == 21) {
#TMW2_LOGINBONUS=gettime(GETTIME_YEAR);
getitem TreasureMap, 1;
dispbottom "##B##2"+l("It's Jesusalva's anniversary!")+" "+l("Also, Summer just started. Why not taking this opportunity to go Treasure Hunting?!")+"##b##0";
}
}
if (gettime(6) == JULY) {
if (#TMW2_LOGINBONUS != gettime(GETTIME_YEAR) && gettime(5) == 7) {
#TMW2_LOGINBONUS=gettime(GETTIME_YEAR);
getitem ChocolateBar, 1;
dispbottom "##B##2"+l("It's International Chocolate Day!")+"##b "+l("All monsters may drop chocolate during this period. And here is one for you!")+"##0";
}
}
if (gettime(6) == SEPTEMBER) {
if (#TMW2_LOGINBONUS != gettime(GETTIME_YEAR) && gettime(5) == 9) {
#TMW2_LOGINBONUS=gettime(GETTIME_YEAR);
getitem any(ScentGrenade, Grenade, SmokeGrenade), 1;
dispbottom "##B##2"+l("It's the Free Software Day!")+" "+l("Licensing was one of the worst hassle we had, but just today, all mobs may drop Ancient Blueprints. Enjoy!")+"##b##0";
}
}
if (gettime(6) == OCTOBER) {
if (#TMW2_LOGINBONUS != gettime(GETTIME_YEAR) && gettime(5) == 1) {
#TMW2_LOGINBONUS=gettime(GETTIME_YEAR);
getitem Coffee, 1;
getexp BaseLevel, JobLevel;
dispbottom "##B##2"+l("It's the International Coffee Day!")+" "+l("Have a warm cup of Coffee on the house, and enjoy!")+"##b##0";
}
}
if (gettime(6) == DECEMBER) {
if (!#XMAS_LOGINBONUS && gettime(5) >= 24 && gettime(5) <= 26) {
#XMAS_LOGINBONUS=1;
getitem XmasGift, 1;
dispbottom "##B##2"+l("Merry Christmas!")+" "+l("You have gained a special login bonus!")+"##b##0";
}
}
// We're almost done with daily logins, just the optional User Interface
if (!GSET_DAILYREWARD_SILENT) {
setnpcdialogtitle l("Daily Login Rewards");
setskin "daily_"+#LOGIN_STREAK;
mes "Please keep your ManaPlus updated.";
//mes "This is a debug message. Your manaplus version is wrong.";
//mes "You should not be reading this. I'll call you a cheater.";
//mes "I hope you report this (if a bug). Reading source code?";
//mes "4144 will hear about this. You are NOT amazing by the way.";
select("Ok");
setskin "";
closeclientdialog;
}
}
//debugmes "[DLBH] Finished: "+#LOGIN_DAY+" ok";
return;
}
// Gives you guild coins, but weekly (based on Guild Level)
function script guild_login_bonus {
.@g=getcharid(2);
if (.@g < 1)
return;
.@c=min(5, getguildavg(.@g)/20) + min(1+getguildlvl(.@g)/5, 10);
if (#LOGIN_GUILD_WEEK != gettimeparam(GETTIME_WEEKDAY)) {
#LOGIN_GUILD_WEEK=gettimeparam(GETTIME_WEEKDAY);
getitem GuildCoin, .@c;
dispbottom l("##2Guild's Weekly login bonus: ##B%d %s##b", .@c, getitemlink(GuildCoin));
}
return;
}