Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
//===== rAthena Script =======================================
//= Freebie NPC
//===== By ===================================================
//= llchrisll
//===== Version ==============================================
//= 1.0 - Initial Version
//===== Tested With =========================================
//= rAthena SQL 07/16-2017 Revision
//===== Description ==========================================
//= This Script gives new players, which passes the level requirement
// if set, freebies in form of zeny and/or items.
// See 'OnInit' for Config.
//===== Comments =============================================
//= Request
//============================================================
prontera,147,174,4 script Freebie NPC 100,{
mes .n$;
if(getgmlevel() >= .gm) {
mes "What do you want to do?";
next;
if(select("- Managment:- Player Interface") - 2) goto GM_Menu;
mes .n$;
}
if(.gm_it && getarraysize($item) < 1 || !.gm_it && getarraysize(.Free) < 1) {
mes "I'm sorry, but there is no freebie yet to can recieve.";
mes "Please wait till an GM added some.";
close;
}
if(!#free && $freebies < .f_limit) {
if(Upper == 0)
if(.requ && BaseLevel < 99 && JobLevel < 50) set .@f,1;
else if(Upper == 1)
if(.reb_lvl && BaseLevel < 99 && JobLevel < 70) set .@f,1;
if(.@f) {
mes "It seems you don't meet the level requirements, which are "+ ( (Upper == 0)?"99/50":"99/70")+".";
close;
}
} else if($freebies >= .f_limit) {
mes "I'm sorry, but I cannot give you any freebies anymore, since I have reached the maximum allowed amount to give.";
close;
} else if(#free == 1) {
mes "Do you want to recieve your freebies now?";
if(select("- Yes:- No") - 1) close;
} else if(#free == 2) {
mes "I'm sorry, but you already recieved your freebies.";
close;
}
mes "You'll recieve some freebies for joining our server!!";
mes "Do you want to to recieve 'em now or later?";
set #free,1;
if(select("- Now:- Later") - 1) close;
next;
mes .n$;
mes "Here you are.";
close2;
if(!.gm_it) // No InGame Menu used
for ( set @f,0; @f < getarraysize(.Free); set @f,@f + 2)
if(.Free[@f] == 1) {
set Zeny,Zeny + .Free[@f+1];
dispbottom .n$+": You have recieved "+.Free[@f+1]+" Zeny.";
} else getitem .Free[@f],.Free[@f+1];
else // Via InGame Menu setable
for ( set @f,0; @f < getarraysize($item); set @f,@f + 2)
if($item[@f] == 1) {
set Zeny,Zeny + $item[@f+1];
dispbottom .n$+": You have recieved "+$item[@f+1]+" Zeny.";
} else getitem $item[@f],$item[@f+1];
// increasing the counter for freebies given
set $freebies,$freebies + 1;
set #free,2; // Player has recieved the Freebies
end;
GM_Menu:
mes .n$;
mes "What do you want to manage?";
next;
switch(select("- View Freebies:- Freebie Management:- Player List:- Reset Variables")) {
case 1:
mes .n$;
if(.gm_it && getarraysize($item) < 1 || !.gm_it && getarraysize(.Free) < 1) {
mes "I'm sorry, but there is no freebie yet to view.";
mes "Please add some first.";
close;
}
mes "Here is the list of the current freebies:";
next;
if(!.gm_it) { // No InGame Menu used
for ( set @f,0; @f < getarraysize(.Free); set @f,@f + 2) {
set @d,(@f+2)/2;
mes "===== Freebie #"+@d+" ======";
if(.Free[@f] == 1) mes .Free[@f+1]+ " Zeny";
else mes .Free[@f+1]+ "x "+getitemname(.Free[@f]);
if(.Free[@f+2] == 0) mes "==================";
}
} else { // Via InGame Menu setable
for ( set @f,0; @f < getarraysize($item); set @f,@f + 2) {
set @d,(@f+2)/2;;
mes "===== Freebie #"+@d+" ======";
if($item[@f] == 1) mes $item[@f+1]+ " Zeny";
else mes $item[@f+1]+ "x "+getitemname($item[@f]);
if($item[@f+2] == 0) mes "==================";
}
}
next;
mes .n$;
mes "Max Freebies to give: "+.f_limit;
mes "Freebies to give left: "+(.f_limit - $freebies);
close;
case 2:
mes .n$;
if(!.gm_it) {
mes "This menu isn't available, since the Freebie Settings be read from the script itself.";
close;
}
mes "Please choose what to do:";
next;
switch(select("- Add Freebies:- Delete Freebies:- Nothing")) {
case 1:
mes .n$;
if(getarraysize($item) >= .free_limit) {
mes "You can't add any freebies anymore, please remove one first.";
close;
}
mes "Do you want to add Zeny or an Item as Freebie?";
next;
if(select("- Zeny" + ( (.zeny)?"":" Not Allowed") +":- Item") - 1) {
mes .n$;
mes "Please type the Item ID you want to add:";
mes "Max are "+.free_limit+" Items.";
next;
input @item;
mes .n$;
if(@item < 501 && @item > .last) {
mes "The value you have put is not valid.";
close;
}
if(getitemname(@item) == "null" || getitemname(@item) == "") {
mes "The item you requested doesn't exist.";
close;
}
mes "Chosen Item: "+ getitemname(@item);
mes " ";
mes "Now input the amount it should have.";
mes "Maximum is "+.iam_limit;
next;
if(input(@amount,1,.iam_limit) != 0) {
mes .n$;
mes "You have put an invalid amount.";
mes "Maximum is "+.iam_limit;
close;
}
mes .n$;
mes "Result: "+@amount+" "+getitemname(@item);
mes "Is that correct?";
if(select("- Yes:- No") - 1) close;
setarray $item[getarraysize($item)],@item,@amount;
} else {
if(!.zeny) close;
mes .n$;
mes "Please type the amount.";
mes "Maximum is "+.z_limit;
next;
if(input(@amount,1,.z_limit) != 0) {
mes .n$;
mes "You have put an invalid amount.";
mes "Maximum is "+.z_limit;
close;
}
mes .n$;
mes "Result: "+@amount+" Zeny";
mes "Is that correct?";
if(select("- Yes:- No") - 1) close;
setarray $item[getarraysize($item)],1,@amount;
}
break;
case 2:
mes .n$;
if(getarraysize($item) < 1) {
mes "There is no Freebie to remove.";
mes "Please add one first :D.";
close;
}
mes "Please choose the freebie you want to remove:";
mes "Format: Name (Current Amount)";
next;
set @r_list$,"";
for ( set .@e,0; .@e < getarraysize($item); set .@e,.@e + 2)
set @r_list$,@r_list$ + "- "+( ($item[.@e] != 1)?getitemname($item[.@e]):"Zeny")+" ("+$item[.@e+1]+")" + ( ($item[.@e+2])?":":"");
set @re,select(@r_list$) - 1;
mes .n$;
if($item[@re] != 1) mes "Chosen Item: "+ getitemname($item[@re]);
mes "Amount: "+ $item[@re+1] + ($item[@re] == 1)?" Zeny":"";
mes "Correct?";
if(select("- Yes:- No") - 1) close;
deletearray $item[@re],2;
break;
case 3:
break;
}
close;
case 3:
mes .n$;
mes "I will now list the player which recieved their freebies already:";
next;
mes "Freebies: "+$freebies;
close;
case 4:
mes .n$;
mes "This will delete every variables' conent, also your own.";
if(select("- Continue:- Stop!") - 1) close;
set #free,0;
set $freebies,0;
deletearray $free_p$[0],getarraysize($free_p$);
deletearray $item[0],getarraysize($free);
close;
}
OnInit:
set .n$,"["+strnpcinfo(1)+"]";
set .gm,80; // GM Access Level
// How should be the Item Adding be handled?
// 0 == via .Free Array > No Ingame Menu
// 1 == via $item array > InGame Menu
// Note: You can only use one of these options.
set .gm_it,1;
set .requ,1; // Level Requirement?
set .reb_lvl,0; // When rebirthed is lvl 99/70 required?
// Freebies:
// Format: Reward,Amount
// Reward can be either Item and/or Zeny.
// For Zeny put "1" and for Item, the ID you want.
// Amount should be obvious.
setarray .Free[0],512,10,513,10;
set .zeny,1; // Use zeny too?
set .f_limit,100; // Max Freebies to give
set .free_limit,200; // Max Freebies per player
set .iam_limit,100; // Max Amount of an Item
set .z_limit,1000000; // Maximum Zeny (Default: 1m)
if(.gm_it) end;
for ( set .@f,0; .@f < getarraysize(.Free); set .@f,.@f + 1)
if(!.zeny && .Free[.@f] == 1) {
debugmes .n$+": Loading Failed!";
debugmes .n$+": Reason: Misconfiguration in the .Free array (Zeny, which isn't allowed).";
debugmes .n$+": Solution: Either you allow the usage of Zeny or edit the values to equal or higher than 501 for Item ID's.";
set .@error,1;
break;
}
if(.@error == 1) disablenpc strnpcinfo(0);
end;
}