
~ Added Official warps of Rachel. About 50% of them. Will get the rest soon. [erKURITA] ~ Added the Tool/Armor/Weapon dealer, aswell as a Vegetable Gardener. [erKURITA] ~ Added the guards + guide locations. Also added the Zondaman location. [erKURITA] ~ Added Rachel Inn npc. [erKURITA] \- Special thanks to RockmanEXE for all the info above. * eAAC update to the vending machine, disguiser and quest warper. [erKURITA] git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@7349 54d463be-8e91-2dee-dedb-b68131a5f0ec
297 lines
9.0 KiB
Plaintext
297 lines
9.0 KiB
Plaintext
//=====================================
|
|
// Vending Machine Script
|
|
// v2.3
|
|
//=====================================
|
|
// by Celestria
|
|
//=====================================
|
|
// Changelog:
|
|
// 2.3 - Added in "Slam" feature, as well as admin ability to turn machine on and off.
|
|
// - Added admin menu. Allows GMs to put machines in/out of service, and to clear
|
|
// all jammed items.
|
|
//
|
|
// 2.2 - Added in/Renamed some variables to allow a single machine to block on several
|
|
// items simultaneously. This fix also allows the two-item drop to work with every
|
|
// item the machine is jammed on.
|
|
//
|
|
// 2.1 - Fixed an error where if one machine jammed on a menu item (say 3 for example),
|
|
// if another machine also jammed on the same menu item (3 in this case), the original
|
|
// machine to jam would be unjammed.
|
|
// - This fix only allows a machine to jam one item at a time. Will fix in the future.
|
|
//
|
|
// 2.0 - Completely redid the script using a call-function.
|
|
// Now all replica scripts can simply be a copy of Vending Machine,
|
|
// but with variables modified to suit it''s intended use.
|
|
//
|
|
// 1.1 - Fixed $jamplayer1 not being a string, thanks to Terces.
|
|
// - Changed random number that intiates jam to 1, to allow for faster modification of jam rates.
|
|
//
|
|
// 1.0 - Creted a script for selling numerous items that would occasionally jam on players.
|
|
// - Used numbered variables to allow for multiplacation of the script.
|
|
//=====================================
|
|
|
|
p_track01.gat,45,58,4 script Vending Machine#1 910,{
|
|
|
|
set @machine,1; //sets the unique number of this machine
|
|
//DO NOT have two machines with the same number
|
|
|
|
set @jamrate,1000; //Odds of machine jamming will be 1 in @jamrate
|
|
|
|
set @slam,0; //set this to 0 to turn on the slam feature, any other setting disables it.
|
|
set @fallrate,10; //Odds of machine falling on someone who hits it are 1 in @fallrate
|
|
set @freerate,10000; //Odds of machine giving an item to someone who hits it are 1 in @freerate
|
|
|
|
set @admin,99; //sets GM level needed to access Admin menu
|
|
|
|
// the following sets the items for sale. Script currently only handles 10 items.
|
|
setarray @item[0], 12143, 519, 565;
|
|
setarray @price[0], 100, 50, 200;
|
|
|
|
set @itemn$[0], getitemname(@item[0]);
|
|
set @itemn$[1], getitemname(@item[1]);
|
|
set @itemn$[2], getitemname(@item[2]);
|
|
set @itemn$[3], getitemname(@item[3]);
|
|
set @itemn$[4], getitemname(@item[4]);
|
|
set @itemn$[5], getitemname(@item[5]);
|
|
set @itemn$[6], getitemname(@item[6]);
|
|
set @itemn$[7], getitemname(@item[7]);
|
|
set @itemn$[8], getitemname(@item[8]);
|
|
set @itemn$[9], getitemname(@item[9]);
|
|
|
|
set @menu$[0], @itemn$[0]+" - "+@price[0];
|
|
set @menu$[1], @itemn$[1]+" - "+@price[1];
|
|
set @menu$[2], @itemn$[2]+" - "+@price[2];
|
|
set @menu$[3], "Cancel";
|
|
set @menu$[4], "";
|
|
set @menu$[5], "";
|
|
set @menu$[6], "";
|
|
set @menu$[7], "";
|
|
set @menu$[8], "";
|
|
set @menu$[9], "";
|
|
set @menu$[10], ""; // "Cancel" only. Used if vending ten items.
|
|
|
|
callfunc "F_Vend1";
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//===============================================================================================
|
|
// Functions
|
|
//
|
|
// !!!DO NOT EDIT BELOW THIS LINE!!!
|
|
//
|
|
//===============================================================================================
|
|
|
|
function script F_Vend1 {
|
|
|
|
if(getgmlevel() >= @admin) goto M_Admin;
|
|
|
|
M_Player:
|
|
if($outorder[@machine]) goto M_Ooo;
|
|
if(@slam) callfunc "F_Vend2";
|
|
mes "You see a vending machine. What would you like to do?";
|
|
next;
|
|
menu "Buy an item",M_Vend,"Hit it",M_Hit;
|
|
|
|
M_Vend:
|
|
callfunc "F_Vend2";
|
|
end;
|
|
|
|
M_Hit:
|
|
callfunc "F_Slam";
|
|
end;
|
|
|
|
M_Admin:
|
|
mes "[Admin Mode]";
|
|
mes "What would you like to do?";
|
|
next;
|
|
menu "Player Mode",M_Player,"Post 'Out of Order'",M_Ooo2,"Remove 'Out of Order'",M_Ooo3,"Fix Jammed Items",M_Fix;
|
|
|
|
M_Ooo:
|
|
mes "Out of Order";
|
|
close;
|
|
|
|
M_Ooo2:
|
|
set $outorder[@machine],1;
|
|
mes "The machine is now Out of Service";
|
|
close;
|
|
|
|
M_Ooo3:
|
|
set $outorder[@machine],0;
|
|
mes "The machine is now in service.";
|
|
close;
|
|
|
|
M_Fix:
|
|
set $itemjam0$[@machine],"0";
|
|
set $itemjam1$[@machine],"0";
|
|
set $itemjam2$[@machine],"0";
|
|
set $itemjam3$[@machine],"0";
|
|
set $itemjam4$[@machine],"0";
|
|
set $itemjam5$[@machine],"0";
|
|
set $itemjam6$[@machine],"0";
|
|
set $itemjam7$[@machine],"0";
|
|
set $itemjam8$[@machine],"0";
|
|
set $itemjam9$[@machine],"0";
|
|
mes "All jammed items have been fixed.";
|
|
close;
|
|
}
|
|
|
|
function script F_Vend2 {
|
|
|
|
if(strcharinfo(0)==$itemjam0$[@machine]) goto B_StillJammed;
|
|
if(strcharinfo(0)==$itemjam1$[@machine]) goto B_StillJammed;
|
|
if(strcharinfo(0)==$itemjam2$[@machine]) goto B_StillJammed;
|
|
if(strcharinfo(0)==$itemjam3$[@machine]) goto B_StillJammed;
|
|
if(strcharinfo(0)==$itemjam4$[@machine]) goto B_StillJammed;
|
|
if(strcharinfo(0)==$itemjam5$[@machine]) goto B_StillJammed;
|
|
if(strcharinfo(0)==$itemjam6$[@machine]) goto B_StillJammed;
|
|
if(strcharinfo(0)==$itemjam7$[@machine]) goto B_StillJammed;
|
|
if(strcharinfo(0)==$itemjam8$[@machine]) goto B_StillJammed;
|
|
if(strcharinfo(0)==$itemjam9$[@machine]) goto B_StillJammed;
|
|
set @jammed,rand(1,@jamrate);
|
|
mes "You peek inside the vending machine to see what's available.";
|
|
next;
|
|
menu @menu$[0],M_Ite0, @menu$[1],M_Ite1, @menu$[2],M_Ite2, @menu$[3],M_Ite3,
|
|
@menu$[4],M_Ite4, @menu$[5],M_Ite5, @menu$[6],M_Ite6, @menu$[7],M_Ite7,
|
|
@menu$[8],M_Ite8, @menu$[9],M_Ite9, @menu$[10],M_Ite10;
|
|
|
|
M_Ite0:
|
|
set @num, 0;
|
|
goto B_Buy;
|
|
M_Ite1:
|
|
set @num, 1;
|
|
goto B_Buy;
|
|
M_Ite2:
|
|
set @num, 2;
|
|
goto B_Buy;
|
|
M_Ite3:
|
|
set @num, 3;
|
|
goto B_Buy;
|
|
M_Ite4:
|
|
set @num, 4;
|
|
goto B_Buy;
|
|
M_Ite5:
|
|
set @num, 5;
|
|
goto B_Buy;
|
|
M_Ite6:
|
|
set @num, 6;
|
|
goto B_Buy;
|
|
M_Ite7:
|
|
set @num, 7;
|
|
goto B_Buy;
|
|
M_Ite8:
|
|
set @num, 8;
|
|
goto B_Buy;
|
|
M_Ite9:
|
|
set @num, 9;
|
|
goto B_Buy;
|
|
M_Ite10:
|
|
set @num, 10;
|
|
goto B_Buy;
|
|
|
|
|
|
|
|
B_Cancel:
|
|
mes "On second thoughts, you decide not to buy anything.";
|
|
close;
|
|
|
|
B_StillJammed:
|
|
mes "You shake and punch the vending machine, but it appears no matter how much energy you exert, the dang item isn't going to come loose.";
|
|
next;
|
|
mes "["+strcharinfo(0)+"]";
|
|
mes "DANG VENDING MACHINES!";
|
|
close;
|
|
|
|
B_Broke:
|
|
mes "As you put your last zeny in, you realise you don't have enough to afford the product.";
|
|
mes "Sadly you hit the refund button and pick up what little zeny you have.";
|
|
close;
|
|
|
|
B_Buy:
|
|
if (@menu$[@num] == "Cancel") goto B_Cancel;
|
|
if(@num==0){if($itemjam0$[@machine]!="0") set @jammed,0;}
|
|
if(@num==1){if($itemjam1$[@machine]!="0") set @jammed,0;}
|
|
if(@num==2){if($itemjam2$[@machine]!="0") set @jammed,0;}
|
|
if(@num==3){if($itemjam3$[@machine]!="0") set @jammed,0;}
|
|
if(@num==4){if($itemjam4$[@machine]!="0") set @jammed,0;}
|
|
if(@num==5){if($itemjam5$[@machine]!="0") set @jammed,0;}
|
|
if(@num==6){if($itemjam6$[@machine]!="0") set @jammed,0;}
|
|
if(@num==7){if($itemjam7$[@machine]!="0") set @jammed,0;}
|
|
if(@num==8){if($itemjam8$[@machine]!="0") set @jammed,0;}
|
|
if(@num==9){if($itemjam9$[@machine]!="0") set @jammed,0;}
|
|
if(Zeny < @price[@num]) goto B_Broke;
|
|
set Zeny,Zeny-@price[@num];
|
|
if(@jammed == 1) goto B_Jamitem;
|
|
mes "Vrrrrrrrr~";
|
|
mes "*clunk*";
|
|
next;
|
|
if(@jammed == 0) goto B_Get2;
|
|
getitem @item[@num],1;
|
|
mes "A "+@itemn$[@num]+" pops out.";
|
|
close;
|
|
B_Get2:
|
|
getitem @item[@num],2;
|
|
mes "What the!?";
|
|
mes "Two "+@itemn$[@num]+"s popped out!";
|
|
mes "It must be your lucky day.";
|
|
if(@num==0) set $itemjam0$[@machine],"0";
|
|
if(@num==1) set $itemjam1$[@machine],"0";
|
|
if(@num==2) set $itemjam2$[@machine],"0";
|
|
if(@num==3) set $itemjam3$[@machine],"0";
|
|
if(@num==4) set $itemjam4$[@machine],"0";
|
|
if(@num==5) set $itemjam5$[@machine],"0";
|
|
if(@num==6) set $itemjam6$[@machine],"0";
|
|
if(@num==7) set $itemjam7$[@machine],"0";
|
|
if(@num==8) set $itemjam8$[@machine],"0";
|
|
if(@num==9) set $itemjam9$[@machine],"0";
|
|
close;
|
|
B_Jamitem:
|
|
mes "Vrrrrrrrr~";
|
|
mes "*click*";
|
|
next;
|
|
mes "["+strcharinfo(0)+"]";
|
|
mes "Dammit!";
|
|
mes "I hate it when these damn things jam!";
|
|
if(@num==0) set $itemjam0$[@machine],strcharinfo(0);
|
|
if(@num==1) set $itemjam1$[@machine],strcharinfo(0);
|
|
if(@num==2) set $itemjam2$[@machine],strcharinfo(0);
|
|
if(@num==3) set $itemjam3$[@machine],strcharinfo(0);
|
|
if(@num==4) set $itemjam4$[@machine],strcharinfo(0);
|
|
if(@num==5) set $itemjam5$[@machine],strcharinfo(0);
|
|
if(@num==6) set $itemjam6$[@machine],strcharinfo(0);
|
|
if(@num==7) set $itemjam7$[@machine],strcharinfo(0);
|
|
if(@num==8) set $itemjam8$[@machine],strcharinfo(0);
|
|
if(@num==9) set $itemjam9$[@machine],strcharinfo(0);
|
|
close;
|
|
}
|
|
|
|
function script F_Slam {
|
|
|
|
set @fall,rand(1,@fallrate);
|
|
set @free,rand(1,@freerate);
|
|
R_Item:
|
|
set @num,rand(9);
|
|
if(@item[@num]==0) goto R_Item;
|
|
|
|
mes "You give the vending machine a good solid whack.";
|
|
next;
|
|
mes "...";
|
|
next;
|
|
if(@fall==1){
|
|
mes "The machine shakes, and then falls directly on top of you.";
|
|
close2;
|
|
percentheal -100,-100;
|
|
end;}
|
|
if(@free==1){
|
|
getitem @item[@num],1;
|
|
mes "The machine shakes, and then drops an item.";
|
|
close;}
|
|
mes "The machine shakes, but nothing happens";
|
|
close;
|
|
}
|