// TMW2 scripts.
// Author:
// Jesusalva
// Description:
// St. Patrick Day
// Variables:
// #PATRICK_DAY
// When you spinned this
// #PATRICK_CTRL
// Controls rarity, lowering boost
// $@PATRICK_DAYMAX
// Last day in St. Patrick event
014-5,47,53,0 script St. Patrick Gold Pot NPC_GOLDPOT,{
function symbol{
switch (getarg(0)) {
case 0:
mesn "%%t";
break;
case 1:
mesn "%%g";
break;
case 2:
mesn "%%H";
break;
case 3:
mesn "%%G";
break;
case 4:
mesn "%%Q";
break;
case 5:
mesn "%%N";
break;
case 6:
mesn "%%K";
break;
default:
mesn "%%@";
break;
}
}
if ($EVENT$ != "Patrick" && !$@GM_OVERRIDE) {
channelmes("#world", "ERROR, ST. PATRICK GOLD POT: NOEVENT ERROR");
disablenpc .name$;
atcommand("@kick "+strcharinfo(0));
close;
}
if (#PATRICK_DAY == gettime(GETTIME_DAYOFMONTH)) {
mesn;
mesc l("You already claimed a reward today! Come back tomorrow, and remember to wear GREEN!"), 2;
close;
}
mesn;
mesc l("Lucky you, you found me! Do you want to SPIN THE WHEEL and gain GREAT rewards?"), 2;
mesc l("Remember that wearing green BOOSTS the rates at which good stuff will be found!"), 2;
mesc l("Only green from @@ will be taken in account.", getitemlink(GreenDye));
next;
select
l("Spin it!"),
l("How does spinning works?"),
l("Don't spin it!");
mes "";
if (@menu == 3)
close;
if (@menu == 2) {
mes ("%%0 - "+l("GP"));
mes ("%%1 - "+getitemlink(CasinoCoins));
mes ("%%2 - "+getitemlink(Topaz));
mes ("%%3 - "+getitemlink(StrangeCoin));
mes ("%%4 - "+getitemlink(GoldOre));
mes ("%%5 - "+getitemlink(GoldenGift));
mes ("%%6 - "+getitemlink(GoldenApple));
close;
}
if (@menu == 1) {
// SPINNING! Set that you can't spin again.
#PATRICK_DAY=gettime(GETTIME_DAYOFMONTH);
// Each green accessory raises boost gauge in 25. Full set raises in further 25.
// Hat, Shirt, Pants, Boots and Gloves. Max boost gauge from dye is 150 atm.
.@boost=0;
if (getequipcardid(EQI_HEAD_TOP, 0) == GreenDye)
.@boost+=25;
if (getequipcardid(EQI_HEAD_MID, 0) == GreenDye)
.@boost+=25;
if (getequipcardid(EQI_HEAD_LOW, 0) == GreenDye)
.@boost+=25;
if (getequipcardid(EQI_SHOES, 0) == GreenDye)
.@boost+=25;
if (getequipcardid(EQI_GARMENT, 0) == GreenDye)
.@boost+=25;
if (.@boost >= 125)
.@boost+=25;
// Blv+Jlv gives a small boost. The "maximum" sum is 250, but we divide by 5
// So this grants a further boost of 4~50 depending on level.
.@boost+=(BaseLevel+JobLevel)/5;
// .@boost, right now, is a number from 0 to 200.
// Randomness factor can make that 20% higher, up to 240.
.@r=rand(0,20);
.@boost+=(.@boost*.@r/100);
// Then it may add or subtract 10 points from boost. Apply a cap to range 0~250.
.@boost+=rand(-10, 10);
// Now, you can't get 5 Golden Apples straight, right?
// You lose boost as you get rewards. You lose boost the farther from
// event last day you are, too.
.@boost-=#PATRICK_CTRL;
.@boost-=($@PATRICK_DAYMAX-#PATRICK_DAY);
// sanitize boost so it ranges from 0 to 250.
.@boost=max(0, .@boost);
// REFERENCE: At release time, max levels ingame were about 60/40.
// That would give 10~34 (not green) to 160~214 (fully green) boost value.
mesc l("Spinning!"), 2;
// .@v holds the reward you'll get
if (.@boost > 240)
.@v=6;
else if (.@boost > 200)
.@v=5;
else if (.@boost > 160)
.@v=4;
else if (.@boost > 120)
.@v=3;
else if (.@boost > 80)
.@v=2;
else if (.@boost > 40)
.@v=1;
else
.@v=0;
// Tell players what they spinned, and lower rarity on next tries
symbol(.@v);
#PATRICK_CTRL+=.@v+(.@v/2);
// Grant players the reward
switch (.@v) {
case 0: // GP
Zeny=Zeny+rand(10, .@boost+10);
break;
case 1: // Casino Coins
getitem CasinoCoins, max(1, .@boost/10);
Zeny=Zeny+rand(20, .@boost+10);
break;
case 2: // Topaz
getitem Topaz, 1;
Zeny=Zeny+rand(30, .@boost+10);
break;
case 3: // Strange Coins
getitem StrangeCoin, max(1, .@boost/10);
Zeny=Zeny+rand(40, .@boost+10);
break;
case 4: // Gold Ore
getitem GoldOre, 1;
Zeny=Zeny+rand(50, .@boost+10);
break;
case 5: // Golden Gift
getitem GoldenGift, 1;
Zeny=Zeny+rand(60, .@boost+10);
break;
case 6: // Golden Apple (OP)
getitem GoldenApple, 1;
Zeny=Zeny+rand(70, .@boost+10);
break;
}
next;
mesn;
mesc l("Did you like it? Find me tomorrow, until day @@, for another gift!", $@PATRICK_DAYMAX), 2;
close;
}
// Should not reach here
close;
OnInit:
.sex = G_OTHER;
.distance = 4;
if ($EVENT$ != "Patrick") {
disablenpc(.name$);
end;
}
OnClock0000:
OnForcedMove:
if ($EVENT$ == "Patrick") {
setarray .@vx, 134, 162, 108, 105, 67, 191, 168, 170, 191, 188, 160, 145, 196, 120;
setarray .@vy, 36, 61, 45, 96, 76, 74, 72, 111, 113, 129, 125, 119, 143, 104;
.@r=rand(0,getarraysize(.@vx)-1);
movenpc .name$, .@vx[.@r], .@vy[.@r];
debugmes "Warping to %d,%d (seed %d)", .@vx[.@r], .@vy[.@r], .@r;
}
end;
}