1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
|
//===== eAthena Script ======================================================================
//= 1. Auctioneer
//= 2. Auction Helping (Gives info only, but still good to have in)
//===== Original By =========================================================================
//= Fredzilla
//===== Helped By ===========================================================================
//= Not one quite yet, but you never know ;)
//===== Current Version: ====================================================================
//= 1.0 (Beta) < Thats means it is in testing
//===== Compatible With: ====================================================================
//= Any eAthena, that also has a script_athena.conf
//===== Description: ========================================================================
//= Lets a people place items into an auction, max of 10 items per round
//= People can bid on them item
//= Then buy the items, and sellers pickup there money
//===== Comments and Credits ===========================================================
//= This script would not have been made possible if it was not for "Maeki Rika"
//= My praise goes out to her for finding out all the things we can do with the
//= current system that eAthena uses
//=
//= More comments are listed down the page, in a attempt to explain what is going on in each
//= section of the script
//=
//= This script is currently in testing, and any loss of items will, not only need to be
//= reported inside the thread I made for this script, but be replaced by GM if proof was given :D
//===========================================================================================
prontera.gat,153,193,5 script Auctioneer 807,{
mes "[Auctioneer]";
set @num,0;
// These few line below are to recover item that would be lost due to a new auction starting
L_RNameLoop:
if(strcharinfo(0)==$ANamesB$[@num] && $paidB[@num]==0) goto L_RBackup;
set @num,@num+1;
if(@num<10) goto L_RNameLoop;
if($Auction==1) goto L_Register;
if($Auction==2) goto L_Bid;
if($Auction==3) goto L_PayPickup;
// After a server restart, and no auction value is set, it will run this
// People who placed items in there before the restart should still be to retrieve there items
mes "You are able to sell and buy things inside the auction, unfortunately nothing has been started, you need to wait for the auction to start";
mes "No items lost will be given back, please remember you used this at your own risk";
next;
mes "[Auctioneer]";
mes "I am very sorry if you have lost items";
close;
// If the Auction has started, it will run this, during this time items can be registerd and registerd items retrieved
L_Register:
mes "Welcome to the auction, you may register you items at this time";
next;
set @num,0;
L_NameLoop:
if(strcharinfo(0)==$ANames$[@num]) goto L_Already;
set @num,@num+1;
if(@num<10) goto L_NameLoop;
if(getarraysize($AItems)==10) goto L_AFull;
menu "I want to register an item now",L_IRegister,"I don't want to leave an item",-;
L_End:
mes "[Auctioneer]";
mes "Ok, come back whenever";
close;
L_IRegister:
mes "[Auctioneer]";
mes "Listed below is the first 10 items you have on you now";
mes "What do you want to register?";
next;
set @array,0;
set @item,500;
// set @loopcount,0;
L_ILoop:
// set @loopcount,@loopcount+1;
// debugmes @loopcount;
set @item,@item+1;
if(@item>=13005) goto L_Menu;
if(countitem(@item)>0) set @item2[@array],@item;
if(countitem(@item)>0) set @array,@array+1;
if(@array==10) goto L_Menu;
set @item,@item+1;
if(countitem(@item)>0) set @item2[@array],@item;
if(countitem(@item)>0) set @array,@array+1;
if(@array==10) goto L_Menu;
set @item,@item+1;
if(countitem(@item)>0) set @item2[@array],@item;
if(countitem(@item)>0) set @array,@array+1;
if(@array==10) goto L_Menu;
set @item,@item+1;
if(countitem(@item)>0) set @item2[@array],@item;
if(countitem(@item)>0) set @array,@array+1;
if(@array==10) goto L_Menu;
set @item,@item+1;
if(countitem(@item)>0) set @item2[@array],@item;
if(countitem(@item)>0) set @array,@array+1;
if(@array==10) goto L_Menu;
set @item,@item+1;
if(countitem(@item)>0) set @item2[@array],@item;
if(countitem(@item)>0) set @array,@array+1;
if(@array==10) goto L_Menu;
set @item,@item+1;
if(countitem(@item)>0) set @item2[@array],@item;
if(countitem(@item)>0) set @array,@array+1;
if(@array==10) goto L_Menu;
set @item,@item+1;
if(countitem(@item)>0) set @item2[@array],@item;
if(countitem(@item)>0) set @array,@array+1;
if(@array==10) goto L_Menu;
set @item,@item+1;
if(countitem(@item)>0) set @item2[@array],@item;
if(countitem(@item)>0) set @array,@array+1;
if(@array==10) goto L_Menu;
set @item,@item+1;
if(countitem(@item)>0) set @item2[@array],@item;
if(countitem(@item)>0) set @array,@array+1;
if(@array==10) goto L_Menu;
goto L_ILoop;
L_Menu:
menu getitemname(@item2[0]),-,getitemname(@item2[1]),-,getitemname(@item2[2]),-,getitemname(@item2[3]),-,getitemname(@item2[4]),-,getitemname(@item2[5]),-,getitemname(@item2[6]),-,getitemname(@item2[7]),-,getitemname(@item2[8]),-,getitemname(@item2[9]),-,"Next Page",L_WipeLoop;
set @setitem,@item2[@menu-1];
set @num,0;
L_SorryLoop:
set @num,@num+1;
if(@menu==@num && @setitem == 0) goto L_Sorry;
if(@num==10) goto L_FinalReg;
goto L_SorryLoop;
L_FinalReg:
mes "[Auctioneer]";
mes "Please remember that if this item does contain cards, or is crafted, these distinctions will be lost when it is put into the auction";
mes "This also means if you get the item back, that this applies to, you will have lost out";
mes " ";
mes "So you want to register your "+getitemname(@setitem);
next;
menu "Yes please",-,"No",L_End;
mes "[Auctioneer]";
mes "Ok I will register this item now";
next;
set @amount,1;
if(countitem(@setitem)==1) goto L_FinalInput;
mes "[Auctioneer]";
mes "Wait a minute it seems you have more than one of that item, please enter the ammount you want to put in the aution";
next;
input @amount;
if(countitem(@setitem)<@amount) goto L_NotEnough;
L_FinalInput:
set $AItems[$array],@setitem;
set $ANames$[$array],strcharinfo(0);
set $AAmount[$array],@amount;
set $array,$array+1;
delitem @setitem,@amount;
mes "[Auctioneer]";
mes "You item has been taken into storage, ready for sale, the auction will begin soon, watch for the announcment";
close;
L_AFull:
mes "[Auctioneer]";
mes "Oh, sorry, it seems my auction is full this time round, please try in the next one";
close;
L_WipeLoop:
deletearray @item2[0],10;
set @array,0;
goto L_ILoop;
L_Sorry:
mes "[Auctioneer]";
mes "It seems that is all you have to offer me, come back when you know what you want to sell";
close;
L_Already:
mes "[Auctioneer]";
mes "It seems you already have have an item registerd here, would you like to retrieve your item?";
next;
menu "Yes",-,"No",L_End;
getitem $AItems[@num],$AAmount[@num];
L_AItemsLoop:
set $AItems[@num],$AItems[@num+1];
set $ANames$[@num],$ANames$[@num+1];
set $AAmount[@num],$AAmount[@num+1];
set @num,@num+1;
if(@num<10) goto L_AItemsLoop;
set $array,$array-1;
set @num,0;
mes "[Auctioneer]";
mes "Ok, all items present and acounted for, have a nice day";
close;
L_NotEnough:
mes "[Auctioneer]";
mes "Seems you don't have that much "+getitemname(@setitem)+"'s";
close;
// If the Auction has enterd phase 2, it will run this, during this time items you can bid on registerd
// No items can be retrieved during this time, they are now stuck
L_Bid:
mes "What would you like to bid on?";
next;
set @num,0;
L_MenuLoop:
set @menu$[@num],$AAmount[@num]+" x "+getitemname($AItems[@num])+" "+$bid[@num]+"z";
set @num,@num+1;
if($AItems[@num]!=0) goto L_MenuLoop;
menu
@menu$[0],-,
@menu$[1],-,
@menu$[2],-,
@menu$[3],-,
@menu$[4],-,
@menu$[5],-,
@menu$[6],-,
@menu$[7],-,
@menu$[8],-,
@menu$[9],-;
mes "[Auctioneer]";
set @num,@menu-1;
if(strcharinfo(0)==$ANames$[@num]) goto L_CantBid;
L_ReBid:
mes "You are currently bidding on "+$AAmount[@num]+" x "+getitemname($AItems[@num]);
mes "The current bid is at "+$bid[@num]+"z";
mes "This was made by "+$bidders$[@num];
if($bidders$[@num]==strcharinfo(0)) goto L_AlreadyBid;
mes "How much do you want to bid yourself";
mes "(Use 0 to cancel at this point)";
next;
input @bid;
if(@bid<=0) goto L_End;
if(zeny<@bid) goto L_LowZeny;
if(@bid<$bid[@num]) goto L_LowBid;
mes "[Auctioneer]";
mes "You are about to bid "+@bid+"z for "+$AAmount[@num]+" x "+getitemname($AItems[@num]);
mes "Are you sure?";
next;
menu "Yes",-,"No",L_End;
set $bid[@num],@bid;
set $bidders$[@num],strcharinfo(0);
mes "[Auctioneer]";
mes "Your bid has been entered";
close;
L_LowZeny:
mes "[Auctioneer]";
mes "Sorry you need to show me that amount as proof you could pay, if you do win";
mes "Please either get more money, or bid lower";
close;
L_CantBid:
mes "Sorry, you can't bid on your own lots";
close;
L_LowBid:
mes "[Auctioneer]";
mes "Your bid seems lower than the current one, try entering a higher ammount of zeny";
next;
mes "[Auctioneer]";
goto L_ReBid;
L_AlreadyBid:
mes "Hey wait, that is you, you can't bid again";
close;
// If the Auction has entered phase 3, it will run this
// During this time, items that have been bid on can be bought
// Items not bid on can be picked back up by the seller
// And if any of the items have been bought, and are paid for, seller can pick up their money
L_PayPickup:
mes "The auction has now ended";
mes "What would you like to do?";
next;
menu "Check for items I have sold",-,"Check for items I have won",L_Won,"Nothing",L_End;
// Check starts here for if you have sold anything during this auction
set @num,0;
L_SoldLoop:
if($ANames$[@num]==strcharinfo(0)) goto L_Sold;
set @num,@num+1;
if(@num<10) goto L_SoldLoop;
mes "[Auctioneer]";
mes "Sorry it seems you have either picked up all you items, money";
mes "or you didnt register any items in this auction";
close;
L_Sold:
mes "[Auctioneer]";
if($paid[@num]==3) goto L_Returned;
mes "Ah I see here, you sold your "+$AAmount[@num]+" x "+getitemname($AItems[@num]);
mes "Lets see here it sold for";
next;
if($bid[@num]==0) goto L_GiveBack;
if($paid[@num]==2) goto L_AlreadyPaid;
mes "[Auctioneer]";
mes $bid[@num]+"z and "+$bidders$[@num]+" bought it from you";
if($paid[@num]!=1) goto L_NoMoney;
mes "They have fully paid for it, so here is your money";
next;
set zeny,zeny+$bid[@num];
set $paid[@num],2;
goto L_End;
L_AlreadyPaid:
mes "[Auctioneer]";
mes "Hmm, seems you already have you money for this lot, not trying to con me are you?";
close;
L_Returned:
mes "[Auctioneer]";
mes "Seems we returned you item already";
close;
L_GiveBack:
mes "[Auctioneer]";
mes "Seems no-one wanted your item(s)";
mes "So you can have them back now";
getitem $AItems[@num],$AAmount[@num];
set $paid[@num],3;
close;
L_NoMoney:
mes "Sorry to say this but they havent paid this yet";
mes "You can go and talk to them now, or you can wait";
mes "If they havent paid by the time the next Auction starts come back to me to retrieve your item(s)";
close;
// Check starts here for if you won any items during this auction, futher options follow
L_Won:
set @num,0;
mes "[Auctioneer]";
L_WonLoop:
if($bidders$[@num]==strcharinfo(0)) goto L_Winner;
L_CarryOn:
set @num,@num+1;
if(@num<10) goto L_WonLoop;
mes "Sorry you didnt win any of the lots, please try again next time";
close;
L_Winner:
if($paid[@num]>0) goto L_CarryOn;
mes "Well it does seem you have won an item";
mes "You won "+$AAmount[@num]+" x "+getitemname($AItems[@num]);
mes "And you bid "+$bid[@num]+"z for this lot";
mes "What do you want to do now?";
next;
// At this point they can choose from 3 options, to Buy the current lot
// see the next one they might have won, or give up that lot
menu "Buy this lot",-,"See Next Lot you won",L_CarryOn,"Relinquish this lot",L_Back;
if(zeny<$bid[@num]) goto L_2lowzeny;
set zeny,zeny-$bid[@num];
getitem $AItems[@num],$AAmount[@num];
set $paid[@num],1;
mes "[Auctioneer]";
mes "Our transaction is completed";
mes "See you again soon";
close;
L_2lowzeny:
mes "[Auctioneer]";
mes "Sorry it seems you don't have enough zeny on you, please acquire more";
close;
L_Back:
mes "[Auctioneer]";
mes "Are you sure you want to give up this lot?";
next;
menu "Yes",-,"No",L_End;
set $bid[@num],0;
set $bidders$[@num],"no-one";
mes "[Auctioneer]";
mes "It is done, you might want to tell "+$ANames$[@num]+" they can come and pickup his item(s)";
close;
// All the times that will start the Auction
OnClock0100:
OnClock0400:
OnClock0700:
OnClock1000:
OnClock1300:
OnClock1600:
OnClock1900:
OnClock2200:
// Starting Backup
copyarray $AItemsB[0],$AItems[0],10;
copyarray $ANamesB$[0],$ANames$[0],10;
copyarray $AAmountB[0],$AAmount[0],10;
copyarray $paidB[0],$paid[0],10;
// End backup - Start Wiping
deletearray $paid[0],10;
deletearray $bid[0],10;
deletearray $bidders$[0],10;
deletearray $AItems[0],10;
deletearray $ANames$[0],10;
deletearray $AAmount[0],10;
set $array,0;
// End Wiping - Begin Announce + Phase setting
announce "Registration time has begun, see the Auctioneer to register your items",0;
cleararray $bidders$[0],"no-one",10;
set $Auction,1;
end;
// All the times that will start the bidding section
OnClock0200:
OnClock0500:
OnClock0800:
OnClock1100:
OnClock1400:
OnClock1700:
OnClock2000:
OnClock2300:
if($Auction==0) end;
announce "Registration time has ended, time for the biding to begin",0;
set $Auction,2;
initnpctimer;
end;
// All the times that will start the last phase, buying and seller, and item retrieval
OnClock0300:
OnClock0600:
OnClock0900:
OnClock1200:
OnClock1500:
OnClock1800:
OnClock2100:
OnClock0000:
if($Auction==0) end;
announce "Bidding time has ended, see the Auctioneer to get your items, or money",0;
set $Auction,3;
end;
// On the start of the server it will reset the Auction state, but not the items it contains
// so people still have have a chance to retrieve there lost items
OnInit:
copyarray $AItemsB[0],$AItems[0],10;
copyarray $ANamesB$[0],$ANames$[0],10;
copyarray $AAmountB[0],$AAmount[0],10;
copyarray $paidB[0],$paid[0],10;
deletearray $paid[0],10;
deletearray $bid[0],10;
deletearray $bidders$[0],10;
deletearray $AItems[0],10;
deletearray $ANames$[0],10;
deletearray $AAmount[0],10;
set $array,0;
set $Auction,0;
end;
// All below is for anouncing the items in this auction, if there are none it will say so
// and if there are none in there at the start of phase 2 it will reset the auctions state
// This is to stop the auction ending message, and will only start again when it reachs phase 1 again
OnTimer5000:
announce "Today in our auction we have",0;
end;
OnTimer7000:
if($AItems[0]==0) setnpctimer 25001;
if($AAmount[0]==1) announce "A lovely "+getitemname($AItems[0])+" left by "+$ANames$[0],0;
if($AAmount[0]>1) announce $AAmount[0]+" lovely "+getitemname($AItems[0])+" left by "+$ANames$[0],0;
end;
OnTimer9000:
if($AItems[1]==0) setnpctimer 25001;
if($AAmount[1]==1) announce "A great "+getitemname($AItems[1])+" left by "+$ANames$[1],0;
if($AAmount[1]>1) announce $AAmount[1]+" great "+getitemname($AItems[1])+" left by "+$ANames$[1],0;
end;
OnTimer11000:
if($AItems[2]==0) setnpctimer 25001;
if($AAmount[2]==1) announce "A excellent "+getitemname($AItems[2])+" left by "+$ANames$[2],0;
if($AAmount[2]>1) announce $AAmount[2]+" excellent "+getitemname($AItems[2])+" left by "+$ANames$[2],0;
end;
OnTimer13000:
if($AItems[3]==0) setnpctimer 25001;
if($AAmount[3]==1) announce "A superb "+getitemname($AItems[3])+" left by "+$ANames$[3],0;
if($AAmount[3]>1) announce $AAmount[3]+" superb "+getitemname($AItems[3])+" left by "+$ANames$[3],0;
end;
OnTimer15000:
if($AItems[4]==0) setnpctimer 25001;
if($AAmount[4]==1) announce "A terrific "+getitemname($AItems[4])+" left by "+$ANames$[4],0;
if($AAmount[4]>1) announce $AAmount[4]+" terrific "+getitemname($AItems[4])+" left by "+$ANames$[4],0;
end;
OnTimer17000:
if($AItems[5]==0) setnpctimer 25001;
if($AAmount[5]==1) announce "A wonderful "+getitemname($AItems[5])+" left by "+$ANames$[5],0;
if($AAmount[5]>1) announce $AAmount[5]+" wonderful "+getitemname($AItems[5])+" left by "+$ANames$[5],0;
end;
OnTimer19000:
if($AItems[6]==0) setnpctimer 25001;
if($AAmount[6]==1) announce "A pretty "+getitemname($AItems[6])+" left by "+$ANames$[6],0;
if($AAmount[6]>1) announce $AAmount[6]+" pretty "+getitemname($AItems[6])+" left by "+$ANames$[6],0;
end;
OnTimer21000:
if($AItems[7]==0) setnpctimer 25001;
if($AAmount[7]==1) announce "A sweet "+getitemname($AItems[7])+" left by "+$ANames$[7],0;
if($AAmount[7]>1) announce $AAmount[7]+" sweet "+getitemname($AItems[7])+" left by "+$ANames$[7],0;
end;
OnTimer23000:
if($AItems[8]==0) setnpctimer 25001;
if($AAmount[8]==1) announce "A stunning "+getitemname($AItems[8])+" left by "+$ANames$[8],0;
if($AAmount[8]>1) announce $AAmount[8]+" stunning "+getitemname($AItems[8])+" left by "+$ANames$[8],0;
end;
OnTimer25000:
if($AItems[9]==0) end;
if($AAmount[9]==1) announce "A fine "+getitemname($AItems[9])+" left by "+$ANames$[9],0;
if($AAmount[9]>1) announce $AAmount[9]+" fine "+getitemname($AItems[9])+" left by "+$ANames$[9],0;
OnTimer27000:
if($AItems[0]!=0) announce "That is all the items we have this time round, so get bidding",0;
if($AItems[0]==0) announce "Seems there are no items this time round",0;
if($AItems[0]==0) set $Auction,0;
stopnpctimer;
setnpctimer 0;
end;
// this is only be run if you own any items left over, not paid for, from the last auction, or the server failed, and items are left over
L_RBackup:
mes "You seem to have items left over from the last auction, here you go, have it back";
next;
getitem $AItemsB[@num],$AAmountB[@num];
L_BItemsLoop:
set $AItemsB[@num],$AItemsB[@num+1];
set $ANamesB$[@num],$ANamesB$[@num+1];
set $AAmountB[@num],$AAmountB[@num+1];
set @num,@num+1;
if(@num<10) goto L_BItemsLoop;
mes "[Auctioneer]";
mes "Have a nice day";
close;
}
// Only for display purposes, and telling people info about the auction
// Can also be used for finding out what phase the auction is in
prontera.gat,158,193,3 script Auction Helper 833,{
mes "[Auction Helper]";
set @num,0;
if($Auction==0 && $AItemsB[@num]!=0) goto L_ItemRecover;
if(($Auction==1 || $Auction ==2) && $AItems[@num]!=0) goto L_LLoop;
if($Auction==3 && $AItems[@num]!=0) goto L_Win;
mes "Ok Currently we have nothing in the auction.";
mes "Please return at the correct time.";
close;
L_LLoop:
mes "Ok Currently we have :-";
L_Loop:
mes $ANames$[@num]+" with "+$AAmount[@num]+" x "+getitemname($AItems[@num])+"('s)";
set @num,@num+1;
if($AItems[@num]==0) close;
if(@num<10) goto L_Loop;
close;
L_ItemRecover:
mes "Seems there was a problem, and the auction ended prematurely.";
mes "This means we still have :-";
L_BLoop:
if($paid[@num]==0) mes $ANamesB$[@num]+" with "+$AAmountB[@num]+" x "+getitemname($AItemsB[@num])+"('s)";
set @num,@num+1;
if($AItems[@num]==0) close;
if(@num<10) goto L_BLoop;
close;
L_Win:
mes "The Auction is in the last stage, at this point you can :-";
mes " * buy your items";
mes " * Pick-up you money";
mes "(or if you were unlucky)";
mes " * Pick-up unsold items";
next;
mes "[Auction Helper]";
mes "Here is a list of Sellers and Winners";
set @num,0;
L_Loop2:
mes $ANames$[@num]+" with "+$AAmount[@num]+" "+getitemname($AItems[@num])+"('s), won by "+$bidders$[@num]+" for "+$bid[@num]+"z";
set @num,@num+1;
if($AItems[@num]==0) close;
if(@num<10) goto L_Loop2;
close;
}
|