root/npc/custom/eAAC_Scripts/vendmachine.txt

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