vendmachine.txt 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. //=====================================
  2. // Vending Machine Script
  3. // v2.3
  4. //=====================================
  5. // by Celestria
  6. //=====================================
  7. // Changelog:
  8. // 2.3 - Added in "Slam" feature, as well as admin ability to turn machine on and off.
  9. // - Added admin menu. Allows GMs to put machines in/out of service, and to clear
  10. // all jammed items.
  11. //
  12. // 2.2 - Added in/Renamed some variables to allow a single machine to block on several
  13. // items simultaneously. This fix also allows the two-item drop to work with every
  14. // item the machine is jammed on.
  15. //
  16. // 2.1 - Fixed an error where if one machine jammed on a menu item (say 3 for example),
  17. // if another machine also jammed on the same menu item (3 in this case), the original
  18. // machine to jam would be unjammed.
  19. // - This fix only allows a machine to jam one item at a time. Will fix in the future.
  20. //
  21. // 2.0 - Completely redid the script using a call-function.
  22. // Now all replica scripts can simply be a copy of Vending Machine,
  23. // but with variables modified to suit it''s intended use.
  24. //
  25. // 1.1 - Fixed $jamplayer1 not being a string, thanks to Terces.
  26. // - Changed random number that intiates jam to 1, to allow for faster modification of jam rates.
  27. //
  28. // 1.0 - Creted a script for selling numerous items that would occasionally jam on players.
  29. // - Used numbered variables to allow for multiplacation of the script.
  30. //=====================================
  31. p_track01.gat,45,58,4 script Vending Machine#1 910,{
  32. set @machine,1; //sets the unique number of this machine
  33. //DO NOT have two machines with the same number
  34. set @jamrate,1000; //Odds of machine jamming will be 1 in @jamrate
  35. set @slam,0; //set this to 0 to turn on the slam feature, any other setting disables it.
  36. set @fallrate,10; //Odds of machine falling on someone who hits it are 1 in @fallrate
  37. set @freerate,10000; //Odds of machine giving an item to someone who hits it are 1 in @freerate
  38. set @admin,99; //sets GM level needed to access Admin menu
  39. // the following sets the items for sale. Script currently only handles 10 items.
  40. setarray @item[0], 12143, 519, 565;
  41. setarray @price[0], 100, 50, 200;
  42. set @itemn$[0], getitemname(@item[0]);
  43. set @itemn$[1], getitemname(@item[1]);
  44. set @itemn$[2], getitemname(@item[2]);
  45. set @itemn$[3], getitemname(@item[3]);
  46. set @itemn$[4], getitemname(@item[4]);
  47. set @itemn$[5], getitemname(@item[5]);
  48. set @itemn$[6], getitemname(@item[6]);
  49. set @itemn$[7], getitemname(@item[7]);
  50. set @itemn$[8], getitemname(@item[8]);
  51. set @itemn$[9], getitemname(@item[9]);
  52. set @menu$[0], @itemn$[0]+" - "+@price[0];
  53. set @menu$[1], @itemn$[1]+" - "+@price[1];
  54. set @menu$[2], @itemn$[2]+" - "+@price[2];
  55. set @menu$[3], "Cancel";
  56. set @menu$[4], "";
  57. set @menu$[5], "";
  58. set @menu$[6], "";
  59. set @menu$[7], "";
  60. set @menu$[8], "";
  61. set @menu$[9], "";
  62. set @menu$[10], ""; // "Cancel" only. Used if vending ten items.
  63. callfunc "F_Vend1";
  64. }
  65. //===============================================================================================
  66. // Functions
  67. //
  68. // !!!DO NOT EDIT BELOW THIS LINE!!!
  69. //
  70. //===============================================================================================
  71. function script F_Vend1 {
  72. if(getgmlevel() >= @admin) goto M_Admin;
  73. M_Player:
  74. if($outorder[@machine]) goto M_Ooo;
  75. if(@slam) callfunc "F_Vend2";
  76. mes "You see a vending machine. What would you like to do?";
  77. next;
  78. menu "Buy an item",M_Vend,"Hit it",M_Hit;
  79. M_Vend:
  80. callfunc "F_Vend2";
  81. end;
  82. M_Hit:
  83. callfunc "F_Slam";
  84. end;
  85. M_Admin:
  86. mes "[Admin Mode]";
  87. mes "What would you like to do?";
  88. next;
  89. menu "Player Mode",M_Player,"Post 'Out of Order'",M_Ooo2,"Remove 'Out of Order'",M_Ooo3,"Fix Jammed Items",M_Fix;
  90. M_Ooo:
  91. mes "Out of Order";
  92. close;
  93. M_Ooo2:
  94. set $outorder[@machine],1;
  95. mes "The machine is now Out of Service";
  96. close;
  97. M_Ooo3:
  98. set $outorder[@machine],0;
  99. mes "The machine is now in service.";
  100. close;
  101. M_Fix:
  102. set $itemjam0$[@machine],"0";
  103. set $itemjam1$[@machine],"0";
  104. set $itemjam2$[@machine],"0";
  105. set $itemjam3$[@machine],"0";
  106. set $itemjam4$[@machine],"0";
  107. set $itemjam5$[@machine],"0";
  108. set $itemjam6$[@machine],"0";
  109. set $itemjam7$[@machine],"0";
  110. set $itemjam8$[@machine],"0";
  111. set $itemjam9$[@machine],"0";
  112. mes "All jammed items have been fixed.";
  113. close;
  114. }
  115. function script F_Vend2 {
  116. if(strcharinfo(0)==$itemjam0$[@machine]) goto B_StillJammed;
  117. if(strcharinfo(0)==$itemjam1$[@machine]) goto B_StillJammed;
  118. if(strcharinfo(0)==$itemjam2$[@machine]) goto B_StillJammed;
  119. if(strcharinfo(0)==$itemjam3$[@machine]) goto B_StillJammed;
  120. if(strcharinfo(0)==$itemjam4$[@machine]) goto B_StillJammed;
  121. if(strcharinfo(0)==$itemjam5$[@machine]) goto B_StillJammed;
  122. if(strcharinfo(0)==$itemjam6$[@machine]) goto B_StillJammed;
  123. if(strcharinfo(0)==$itemjam7$[@machine]) goto B_StillJammed;
  124. if(strcharinfo(0)==$itemjam8$[@machine]) goto B_StillJammed;
  125. if(strcharinfo(0)==$itemjam9$[@machine]) goto B_StillJammed;
  126. set @jammed,rand(1,@jamrate);
  127. mes "You peek inside the vending machine to see what's available.";
  128. next;
  129. menu @menu$[0],M_Ite0, @menu$[1],M_Ite1, @menu$[2],M_Ite2, @menu$[3],M_Ite3,
  130. @menu$[4],M_Ite4, @menu$[5],M_Ite5, @menu$[6],M_Ite6, @menu$[7],M_Ite7,
  131. @menu$[8],M_Ite8, @menu$[9],M_Ite9, @menu$[10],M_Ite10;
  132. M_Ite0:
  133. set @num, 0;
  134. goto B_Buy;
  135. M_Ite1:
  136. set @num, 1;
  137. goto B_Buy;
  138. M_Ite2:
  139. set @num, 2;
  140. goto B_Buy;
  141. M_Ite3:
  142. set @num, 3;
  143. goto B_Buy;
  144. M_Ite4:
  145. set @num, 4;
  146. goto B_Buy;
  147. M_Ite5:
  148. set @num, 5;
  149. goto B_Buy;
  150. M_Ite6:
  151. set @num, 6;
  152. goto B_Buy;
  153. M_Ite7:
  154. set @num, 7;
  155. goto B_Buy;
  156. M_Ite8:
  157. set @num, 8;
  158. goto B_Buy;
  159. M_Ite9:
  160. set @num, 9;
  161. goto B_Buy;
  162. M_Ite10:
  163. set @num, 10;
  164. goto B_Buy;
  165. B_Cancel:
  166. mes "On second thoughts, you decide not to buy anything.";
  167. close;
  168. B_StillJammed:
  169. mes "You shake and punch the vending machine, but it appears no matter how much energy you exert, the dang item isn't
  170. going to come loose.";
  171. next;
  172. mes "["+strcharinfo(0)+"]";
  173. mes "DANG VENDING MACHINES!";
  174. close;
  175. B_Broke:
  176. mes "As you put your last zeny in, you realise you don't have enough to afford the product.";
  177. mes "Sadly you hit the refund button and pick up what little zeny you have.";
  178. close;
  179. B_Buy:
  180. if (@menu$[@num] == "Cancel") goto B_Cancel;
  181. if(@num==0){if($itemjam0$[@machine]!="0") set @jammed,0;}
  182. if(@num==1){if($itemjam1$[@machine]!="0") set @jammed,0;}
  183. if(@num==2){if($itemjam2$[@machine]!="0") set @jammed,0;}
  184. if(@num==3){if($itemjam3$[@machine]!="0") set @jammed,0;}
  185. if(@num==4){if($itemjam4$[@machine]!="0") set @jammed,0;}
  186. if(@num==5){if($itemjam5$[@machine]!="0") set @jammed,0;}
  187. if(@num==6){if($itemjam6$[@machine]!="0") set @jammed,0;}
  188. if(@num==7){if($itemjam7$[@machine]!="0") set @jammed,0;}
  189. if(@num==8){if($itemjam8$[@machine]!="0") set @jammed,0;}
  190. if(@num==9){if($itemjam9$[@machine]!="0") set @jammed,0;}
  191. if(Zeny < @price[@num]) goto B_Broke;
  192. set Zeny,Zeny-@price[@num];
  193. if(@jammed == 1) goto B_Jamitem;
  194. mes "Vrrrrrrrr~";
  195. mes "*clunk*";
  196. next;
  197. if(@jammed == 0) goto B_Get2;
  198. getitem @item[@num],1;
  199. mes "A "+@itemn$[@num]+" pops out.";
  200. close;
  201. B_Get2:
  202. getitem @item[@num],2;
  203. mes "What the!?";
  204. mes "Two "+@itemn$[@num]+"s popped out!";
  205. mes "It must be your lucky day.";
  206. if(@num==0) set $itemjam0$[@machine],"0";
  207. if(@num==1) set $itemjam1$[@machine],"0";
  208. if(@num==2) set $itemjam2$[@machine],"0";
  209. if(@num==3) set $itemjam3$[@machine],"0";
  210. if(@num==4) set $itemjam4$[@machine],"0";
  211. if(@num==5) set $itemjam5$[@machine],"0";
  212. if(@num==6) set $itemjam6$[@machine],"0";
  213. if(@num==7) set $itemjam7$[@machine],"0";
  214. if(@num==8) set $itemjam8$[@machine],"0";
  215. if(@num==9) set $itemjam9$[@machine],"0";
  216. close;
  217. B_Jamitem:
  218. mes "Vrrrrrrrr~";
  219. mes "*click*";
  220. next;
  221. mes "["+strcharinfo(0)+"]";
  222. mes "Dammit!";
  223. mes "I hate it when these damn things jam!";
  224. if(@num==0) set $itemjam0$[@machine],strcharinfo(0);
  225. if(@num==1) set $itemjam1$[@machine],strcharinfo(0);
  226. if(@num==2) set $itemjam2$[@machine],strcharinfo(0);
  227. if(@num==3) set $itemjam3$[@machine],strcharinfo(0);
  228. if(@num==4) set $itemjam4$[@machine],strcharinfo(0);
  229. if(@num==5) set $itemjam5$[@machine],strcharinfo(0);
  230. if(@num==6) set $itemjam6$[@machine],strcharinfo(0);
  231. if(@num==7) set $itemjam7$[@machine],strcharinfo(0);
  232. if(@num==8) set $itemjam8$[@machine],strcharinfo(0);
  233. if(@num==9) set $itemjam9$[@machine],strcharinfo(0);
  234. close;
  235. }
  236. function script F_Slam {
  237. set @fall,rand(1,@fallrate);
  238. set @free,rand(1,@freerate);
  239. R_Item:
  240. set @num,rand(9);
  241. if(@item[@num]==0) goto R_Item;
  242. mes "You give the vending machine a good solid whack.";
  243. next;
  244. mes "...";
  245. next;
  246. if(@fall==1){
  247. mes "The machine shakes, and then falls directly on top of you.";
  248. close2;
  249. percentheal -100,-100;
  250. end;}
  251. if(@free==1){
  252. getitem @item[@num],1;
  253. mes "The machine shakes, and then drops an item.";
  254. close;}
  255. mes "The machine shakes, but nothing happens";
  256. close;
  257. }