This repository has been archived by the owner on Nov 22, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathDIVINITY.l2s
759 lines (686 loc) · 24.3 KB
/
DIVINITY.l2s
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
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
//LEVEL AND MANOR SCRIPT V0.1 by DarkWrath
//Original Script : Levelscript v0.2a (c) by Asmodin88 , slothmo, CHaNG, and mpj123
//Also thanks to Oddi and Spider for Suggestions / Bug Reports / Comments or whatever =P
//Stuck test and bug-fixes by Oddi
//TO DO :1. Companion script on buffer that sends a UDP packet when under attack , making the fighter change target and assist
// 2.
////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////SETTINGS///////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//debug mode? (0 = off, 1 = on)
DEFINE INT DEBUG 0
//targeting mode. see script commands thread for further information
SET_TARGETING COMBAT TWO
SET_TARGETING INBOX #i0
SET_TARGETING ALIVE ZERO
////////GENERAL SETTINGS//////////
//what type of char is this? melee = 1, archer = 2, mage = 3
DEFINE INT CHARTYPE 1
//is this char a spoiler?
DEFINE INT ISSPOILER 0
//Are going to use manor?
DEFINE INT MANOR 0
//set here if this char is the "Train Leader" (does give the target to kill)
DEFINE INT ISLEADER 1
//set this 1 to move to the mob before attacking it. try this if you get stuck alot
DEFINE INT MOVETO_TARGET 1
//set this to 1 to enable stuck-check
DEFINE INT STUCK_CHECK 1
//distance to move to target before starting to attack? (dont set too low if you are mage or archer)
DEFINE INT MOVETO_DISTANCE 90
//Type of soulshot : NG=1 , D=2 and so on. 0 means disable
DEFINE INT SSID 0
//TYPE of spiritshot: NG=1 , D=2 and so on. 0 means disable
DEFINE INT SPSID 0
//Do you want to set a border box? 0 Disable , 1 Enable
DEFINE INT BRDBOX 0
//Set the size of the border box , first number is the radius on x axis , second on y
DEFINE INT XRADIUS 1100
DEFINE INT YRADIUS 1100
////////REST SETTINGS//////////
//set here at what hp/mp to rest. (in %)
DEFINE INT RESTHPPERCENT 1
DEFINE INT RESTMPPERCENT 1
//set here until what hp/mp to rest (in %)
DEFINE INT UNTILHPPERCENT 100
DEFINE INT UNTILMPPERCENT 100
////////LOGOUT SETTINGS//////////
//time to wait when dead before logout, set 0 to disable
DEFINE INT LOGOUTTIME 0
//Max time of Deaths before logout, set 0 to disable
DEFINE INT MAXDEATHS 0
////////ATTACK SETTINGS//////////
//under what hp of mob should we use normal attack? (mage only, melee and archer will always use attack)
DEFINE INT ATTACKHP 1
//delay between attack commands
//(recommended to set rather high. randomly generated between MIN and MAX defined everytime used)
DEFINE INT MIN_ATTACKDELAY 1000
DEFINE INT MAX_ATTACKDELAY 1100
DEFINE INT SOULSHOTID 0
////////SPOILER SETTINGS//////////
//define skill id of spoil skill here (only used when isspoiler = 1)
DEFINE INT SPOILSKILLID 254
//delay after spoil skill is used.
DEFINE INT MIN_SPOILDELAY 200
DEFINE INT MAX_SPOILDELAY 500
//define skill id of sweep skill here (only used when isspoiler = 1)
DEFINE INT SWEEPSKILLID 42
//delay after sweep skill is used. (randomly generated between MIN and MAX defined everytime used)
DEFINE INT MIN_SWEEPDELAY 150
DEFINE INT MAX_SWEEPDELAY 300
//Skill Id to use while the character is at a distance to the mob , 0=disable
DEFINE INT RANGEDID 0
//Defines the distance at which to use the ranged skill
DEFINE INT SKLRANGE 0
//////MANOR SETTINGS/////
///define the id of the seed
DEFINE INT SEEDID 0
///define the id of the harvester
DEFINE INT HARVID 0
////////ATTACK SKILL//////////
//any skill to use to attack? (set 0 to disable, MUST be set as mage!)
DEFINE INT ATTACKSKILLID 0
DEFINE INT ATTACKSKILLID2 0
//above what mp should we use a skill to attack? (melee/archer only, mage always use skill) (in %)
DEFINE INT SKILLMPPERCENT 55
//delay after skill is used (randomly generated between MIN and MAX defined everytime used)
DEFINE INT MIN_SKILLDELAY 400
DEFINE INT MAX_SKILLDELAY 700
////////LOW HP SKILL//////////
//any skill to use when low hp? (skill id) set 0 to disable
//IMPORTANT: use this only for drains etc, since its used on the MOB. DONT put heals here!
DEFINE INT LOWHPSKILLID 0
//under what hp should lowhp skill be used on mob? (in %)
DEFINE INT LOWHPPERCENT 3
//delay after lowhp skill is used (randomly generated between MIN and MAX defined everytime used)
DEFINE INT MIN_LOWHPDELAY 400
DEFINE INT MAX_LOWHPDELAY 600
////////LOW MP SKILL//////////
//any skill to use when low mp? (this is for body to mind / pain of saggitarius / invocation etc) set 0 to disable
//hint: unlike lowhp skill, this one is used when NOT in combat with mob
DEFINE INT LOWMPSKILLID 0
//under what mp should we use it? (in %)
DEFINE INT LOWMPPERCENT 66
//delay after lowmp skill is used (randomly generated between MIN and MAX defined everytime used)
DEFINE INT MIN_LOWMPDELAY 1000
DEFINE INT MAX_LOWMPDELAY 2000
////////PICKUP SETTINGS//////////
//should this char pickup dropped items?
DEFINE INT PICKUP 1
//pick items first? set 0 to only pick items when not under attack (recommended)
DEFINE INT PICKFIRST 0
//set a range to pick up loot (recommended: ~200 for Melee's, for Mages and Archers higher, needs testing)
DEFINE INT LOOT_RANGE 200
//delay between pickup commands
DEFINE INT MIN_PICKUPDELAY 150
DEFINE INT MAX_PICKUPDELAY 300
////////ETC SETTINGS//////////
//delays after targeting and pickup (randomly generated between MIN and MAX defined everytime used)
DEFINE INT MIN_TARGETDELAY 1000
DEFINE INT MAX_TARGETDELAY 1500
//****************************Timevars*****************************//
DEFINE INT StartTime 0
DEFINE INT EndTime 0
DEFINE INT UsedTime 0
DEFINE INT MaxTime 200000000
DEFINE INT MaxPickTime 50000000 //thats 5 seconds
//****************************************************************//
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////ONLY EDIT FROM HERE ON IF YOU KNOW WHAT YOU ARE DOING!//////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
//internal used variables, careful with editing them
DEFINE INT ONE 1
DEFINE INT ZERO 0
DEFINE INT TEMP 0
DEFINE INT HUNDRED 100
DEFINE INT THREE 3
DEFINE INT COUNT 0
DEFINE INT DEATHCOUNT 0
DEFINE INT Rest 0
DEFINE INT RESTHP 0
DEFINE INT RESTMP 0
DEFINE INT UNTILHP 0
DEFINE INT UNTILMP 0
DEFINE INT LOWHP 0
DEFINE INT LOWMP 0
DEFINE INT SKILLMP 0
DEFINE INT DISTANCE_TO_TARGET 0
DEFINE INT PICKUP_X 0
DEFINE INT PICKUP_Y 0
DEFINE DOUBLE X 0
DEFINE DOUBLE Y 0
DEFINE DOUBLE Range 100
DEFINE DOUBLE BORDERX 0
DEFINE DOUBLE BORDERY 0
//calc some stuff
LOWHP = CHAR_MAX_HP * LOWHPPERCENT
LOWHP = LOWHP / HUNDRED
LOWMP = CHAR_MAX_MP * LOWMPPERCENT
LOWMP = LOWMP / HUNDRED
SKILLMP = CHAR_MAX_MP * SKILLMPPERCENT
SKILLMP = SKILLMP / HUNDRED
RESTHP = CHAR_MAX_HP * RESTHPPERCENT
RESTHP = RESTHP / HUNDRED
RESTMP = CHAR_MAX_MP * RESTMPPERCENT
RESTMP = RESTMP / HUNDRED
UNTILHP = CHAR_MAX_HP * UNTILHPPERCENT
UNTILHP = UNTILHP / HUNDRED
UNTILMP = CHAR_MAX_MP * UNTILMPPERCENT
UNTILMP = UNTILMP / HUNDRED
////////MAIN SCRIPT//////////
//Creates a bounding box
IF BRDBOX != ZERO
PRINT_TEXT "Creating Border"
CLEAR_BORDER
SLEEP 100
BORDERX = CHAR_X + XRADIUS
BORDERY = CHAR_Y + YRADIUS
ADD_BORDER_PT "<&BORDERX&>" "<&BORDERY&>"
BORDERX = CHAR_X + XRADIUS
BORDERY = CHAR_Y - YRADIUS
ADD_BORDER_PT "<&BORDERX&>" "<&BORDERY&>"
BORDERX = CHAR_X - XRADIUS
BORDERY = CHAR_Y - YRADIUS
ADD_BORDER_PT "<&BORDERX&>" "<&BORDERY&>"
BORDERX = CHAR_X - XRADIUS
BORDERY = CHAR_Y + YRADIUS
ADD_BORDER_PT "<&BORDERX&>" "<&BORDERY&>"
ENDIF
//just a printout
PRINT_TEXT "rest below <&RESTHP&> HP, until <&UNTILHP&> HP"
PRINT_TEXT "rest below <&RESTMP&> MP, until <&UNTILMP&> MP"
IF DEBUG == ONE
IF LOWHPSKILLID != ZERO
PRINT_TEXT "using lowhp skill under <&LOWHP&> HP"
ENDIF
IF LOWMPSKILLID != ZERO
PRINT_TEXT "using lowmp skill under <&LOWMP&> MP"
ENDIF
IF ATTACKSKILLID != ZERO
PRINT_TEXT "using attack skill over <&SKILLMP&> MP"
ENDIF
ENDIF
//Enables auto-ss
IF SSID != ZERO
SWITCH SSID
CASE #i1
INJECT "D0 0D 00 2B 07 00 00 01 00 00 00"
IF DEBUG == ONE
PRINT_TEXT "Auto-using No Grade Soulshots"
ENDIF
BREAK 1
CASE #i2
INJECT "D0 0D 00 B7 05 00 00 01 00 00 00"
IF DEBUG == ONE
PRINT_TEXT "Auto-using D grade Soulshots"
ENDIF
BREAK 1
CASE #i3
INJECT "D0 0D 00 B8 05 00 00 01 00 00 00"
IF DEBUG == ONE
PRINT_TEXT "Autousing C grade Soulshots"
ENDIF
BREAK 1
CASE #i4
INJECT "D0 0D 00 B9 05 00 00 01 00 00 00"
IF DEBUG == ONE
PRINT_TEXT "Auto-using B grade Soulshots"
ENDIF
BREAK 1
CASE #i5
INJECT "D0 0D 00 BA 05 00 00 01 00 00 00"
IF DEBUG == ONE
PRINT_TEXT "Auto-using A grade SOulshots"
ENDIF
BREAK 1
DEFAULT
IF DEBUG == ONE
PRINT_TEXT "Soulshot option incorectly setup"
ENDIF
BREAK 1
ENDSWITCH
ENDIF
//Enables auto-bsps
IF SPSID != ZERO
SWITCH SPSID
CASE #i1
INJECT "D0 0D 00 6B 0F 00 00 01 00 00 00"
IF DEBUG == ONE
PRINT_TEXT "Auto-using No Grade SpiritShots"
ENDIF
BREAK 1
CASE #i2
INJECT "D0 0D 00 6C 0F 00 00 01 00 00 00"
IF DEBUG == ONE
PRINT_TEXT "Auto-using D grade SpiritShots"
ENDIF
BREAK 1
CASE #i3
INJECT "D0 0D 00 6D 0F 00 00 01 00 00 00"
IF DEBUG == ONE
PRINT_TEXT "Auto-using C grade SpiritShots"
ENDIF
BREAK 1
CASE #i4
INJECT "D0 0D 00 6E 0F 00 00 01 00 00 00"
IF DEBUG == ONE
PRINT_TEXT "Auto-using B grade SpiritShots"
ENDIF
BREAK 1
CASE #i5
INJECT "D0 0D 00 6F 0F 00 00 01 00 00 00"
IF DEBUG == ONE
PRINT_TEXT "Auto-using A grade SpiritShots"
ENDIF
BREAK 1
DEFAULT
IF DEBUG == ONE
PRINT_TEXT "SpiritShots option incorectly setup"
ENDIF
BREAK 1
ENDSWITCH
ENDIF
IF CHAR_CUR_HP != ZERO
//don't rest if you are under attack
IF COUNT_NPC_TARGETME == ZERO
//lets make sure we start with decent hp
IF CHAR_CUR_HP < RESTHP
PRINT_TEXT "hp low, resting"
CALLSUB Rest
ENDIF
//also make sure we start with decent mp
IF CHAR_CUR_MP < RESTMP
PRINT_TEXT "mp low, resting"
CALLSUB Rest
ENDIF
ENDIF
ELSE
CALLSUB Dead
ENDIF
IF DEBUG == ONE
PRINT_TEXT "starting to lvl"
ENDIF
DO
DO
IF CHAR_CUR_HP != ZERO
IF ISLEADER == ONE
CALLSUB Target
ELSE
DO
SLEEP 1000
IF CHAR_CUR_HP == ZERO
CALLSUB Dead
ENDIF
LOOP TARGET_CUR_HP == ZERO
ENDIF
//if we got a target
IF TARGET_CUR_HP > ZERO
IF DEBUG == ONE
PRINT_TEXT "got target"
ENDIF
//move near target first?
IF MOVETO_TARGET == ONE
CALLSUB MovetoTarget
ENDIF
//lets kill it
CALLSUB KillTarget
ENDIF
//now our target is dead
IF MANOR == ONE
USE_ITEM "<&HARVID&>"
PRINT_TEXT "Harvester used"
ENDIF
IF PICKUP == ONE
GET_TIME StartTime
IF DEBUG == ONE
PRINT_TEXT "picking"
ENDIF
PICKUP_X = "#i<&CHAR_X&>"
PICKUP_Y = "#i<&CHAR_Y&>"
IF PICKFIRST == ZERO
IF COUNT_NPC_TARGETME == ZERO
WHILE NEAREST_ITEM_DISTANCE < LOOT_RANGE
GET_TIME EndTime
UsedTime = EndTime - StartTime
IF DEBUG == ONE
PRINT_TEXT "Used Time: <&UsedTime&>"
ENDIF
IF CHAR_CUR_HP == ZERO
CALLSUB Dead
ENDIF
IF UsedTime > MaxPickTime
BREAK 5
ENDIF
DISTANCE TEMP CHAR_X CHAR_Y TEMP PICKUP_X PICKUP_Y TEMP
IF TEMP > LOOT_RANGE
IF DEBUG == ONE
PRINT_TEXT "outside lootrange, breaking pickup loop"
ENDIF
BREAK 5
ENDIF
CALLSUB Pickup
WEND
ENDIF
ELSE
WHILE NEAREST_ITEM_DISTANCE < LOOT_RANGE
GET_TIME EndTime
UsedTime = EndTime - StartTime
IF DEBUG == ONE
PRINT_TEXT "Used Time: <&UsedTime&>"
ENDIF
IF CHAR_CUR_HP == ZERO
CALLSUB Dead
ENDIF
IF UsedTime > MaxPickTime
BREAK 4
ENDIF
DISTANCE TEMP CHAR_X CHAR_Y TEMP PICKUP_X PICKUP_Y TEMP
IF TEMP > LOOT_RANGE
IF DEBUG == ONE
PRINT_TEXT "outside lootrange, breaking pickup loop"
ENDIF
BREAK 4
ENDIF
CALLSUB Pickup
WEND
ENDIF
ENDIF
//mp regen skill?
IF COUNT_NPC_TARGETME == ZERO
IF LOWMPSKILLID != ZERO
IF CHAR_CUR_MP < LOWMP
USE_SKILL "<&LOWMPSKILLID&>"
GET_RAND TEMP "<&MIN_LOWMPDELAY&>" "<&MAX_LOWMPDELAY&>"
SLEEP "<&TEMP&>"
ENDIF
ENDIF
ENDIF
ELSE
CALLSUB Dead
ENDIF
//do we need to rest? if not lets keep fighting
IF CHAR_CUR_HP != ZERO
IF COUNT_NPC_TARGETME == ZERO
IF CHAR_CUR_HP < RESTHP
PRINT_TEXT "hp is below <&RESTHP&>, resting"
CALLSUB Rest
ENDIF
IF CHAR_CUR_MP < RESTMP
PRINT_TEXT "mp is below <&RESTMP&>, resting"
CALLSUB Rest
ENDIF
ENDIF
ENDIF
LOOP CHAR_CUR_HP != ZERO
IF CHAR_CUR_HP == ZERO
CALLSUB Dead
ENDIF
LOOP ZERO == ZERO
SCRIPT_END
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////SUBS//////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
SUB Target
IF DEBUG == ONE
PRINT_TEXT "targeting"
ENDIF
TARGET_NEAREST
SLEEP 200
TARGET_NEAREST_NAME "Varka Silenos Great Sear"
SLEEP 200
TARGET_NEAREST_NAME "Varka Silenos Great Magus"
GET_RAND TEMP "<&MIN_TARGETDELAY&>" "<&MAX_TARGETDELAY&>"
SLEEP "<&TEMP&>"
RETURNSUB
SUB MovetoTarget
DISTANCE DISTANCE_TO_TARGET CHAR_X CHAR_Y CHAR_Z TARGET_X TARGET_Y TARGET_Z
IF DISTANCE_TO_TARGET <= MOVETO_DISTANCE
BREAK 9
ENDIF
IF DEBUG == ONE
PRINT_TEXT "moving to target"
ENDIF
//IF RANGEDID != ZERO
//MOVE_TO "<&TARGET_X&>" "<&TARGET_Y&>" "<&TARGET_Z&>"
//CHECKS IF THE CHARACTER IS IN SKILL RANGE TO THE TARGET AND IF IT IS USES THE RANGED SKILL
//DO
//DISTANCE DISTANCE_TO_TARGET CHAR_X CHAR_Y CHAR_Z TARGET_X TARGET_Y TARGET_Z
//IF DEBUG == ONE
//PRINT_TEXT "Distance to skill range: <&DISTANCE_TO_TARGET&>"
//ENDIF
//SLEEP 100
//LOOP DISTANCE_TO_TARGET > SKLRANGE
//PRINT_TEXT "In skill range"
//USE_SKILL "<&RANGEDID&>"
//PRINT_TEXT "Using ranged skill"
//GET_RAND TEMP "<&MIN_SKILLDELAY&>" "<&MAX_SKILLDELAY&>"
//SLEEP "<&TEMP&>"
//ENDIF
//Now we move to the target
DO
MOVE_TO "<&TARGET_X&>" "<&TARGET_Y&>" "<&TARGET_Z&>"
DISTANCE DISTANCE_TO_TARGET CHAR_X CHAR_Y CHAR_Z TARGET_X TARGET_Y TARGET_Z
IF DEBUG == ONE
PRINT_TEXT "Distance: <&DISTANCE_TO_TARGET&>"
ENDIF
SLEEP 100
LOOP DISTANCE_TO_TARGET > MOVETO_DISTANCE
IF DEBUG == ONE
PRINT_TEXT "close enough"
ENDIF
RETURNSUB
SUB Pickup
CLICK_NEAREST_ITEM
GET_RAND TEMP "<&MIN_PICKUPDELAY&>" "<&MAX_PICKUPDELAY&>"
SLEEP "<&TEMP&>"
RETURNSUB
SUB KillTarget
IF DEBUG == ONE
PRINT_TEXT "killing target"
ENDIF
GET_TIME StartTime
IF DEBUG == ONE
PRINT_TEXT "Start time: <&StartTime&>"
ENDIF
DO
GET_TIME EndTime
UsedTime = EndTime - StartTime
IF DEBUG == ONE
PRINT_TEXT "Used Time: <&UsedTime&>"
ENDIF
IF UsedTime > MaxTime
IF TARGET_CUR_HP == TARGET_MAX_HP
CALLSUB Stuck
RETURNSUB
ENDIF
ENDIF
IF ISSPOILER == ONE
IF SPOILSKILLID != ZERO
IF TARGET_SPOILED == ZERO
IF DEBUG == ONE
PRINT_TEXT "spoiling"
ENDIF
USE_SKILL "<&SPOILSKILLID&>"
GET_RAND TEMP "<&MIN_SPOILDELAY&>" "<&MAX_SPOILDELAY&>"
SLEEP "<&TEMP&>"
ENDIF
ENDIF
ENDIF
IF MANOR == ONE
IF SEEDID != ZERO
IF DEBUG == ONE
PRINT_TExT "Seeding"
ENDIF
USE_ITEM "<&SEEDID&>"
GET_RAND TEMP "<&MIN_SPOILDELAY&>" "<&MAX_SPOILDELAY&>"
SLEEP "<&TEMP&>"
ENDIF
ENDIF
IF LOWHPSKILLID != ZERO
IF CHAR_CUR_HP < LOWHP
IF DEBUG == ONE
PRINT_TEXT "using lowhp skill"
ENDIF
USE_SKILL "<&LOWHPSKILLID&>"
GET_RAND TEMP "<&MIN_LOWHPDELAY&>" "<&MAX_LOWHPDELAY&>"
SLEEP "<&TEMP&>"
ENDIF
ENDIF
IF ATTACKSKILLID != ZERO
IF CHARTYPE == THREE
IF TARGET_CUR_HP >= ATTACKHP
IF DEBUG == ONE
PRINT_TEXT "using attack skill"
ENDIF
IF SOULSHOTID != ZERO
USE_ITEM "<&SOULSHOTID&>"
ENDIF
USE_SKILL "<&ATTACKSKILLID&>"
SLEEP 300
USE_SKILL "<&ATTACKSKILLID2&>"
GET_RAND TEMP "<&MIN_SKILLDELAY&>" "<&MAX_SKILLDELAY&>"
SLEEP "<&TEMP&>"
ENDIF
ELSE
IF CHAR_CUR_MP > SKILLMP
IF DEBUG == ONE
PRINT_TEXT "using attack skill"
ENDIF
USE_SKILL "<&ATTACKSKILLID&>"
GET_RAND TEMP "<&MIN_SKILLDELAY&>" "<&MAX_SKILLDELAY&>"
SLEEP "<&TEMP&>"
ENDIF
ENDIF
ENDIF
IF CHARTYPE == THREE
IF TARGET_CUR_HP < ATTACKHP
IF TARGET_CUR_HP > ZERO
IF DEBUG == ONE
PRINT_TEXT "target low hp, going melee"
ENDIF
ATTACK_TARGET
GET_RAND TEMP "<&MIN_ATTACKDELAY&>" "<&MAX_ATTACKDELAY&>"
SLEEP "<&TEMP&>"
ENDIF
ENDIF
ELSE
IF TARGET_CUR_HP > ZERO
IF DEBUG == ONE
PRINT_TEXT "attacking"
ENDIF
ATTACK_TARGET
GET_RAND TEMP "<&MIN_ATTACKDELAY&>" "<&MAX_ATTACKDELAY&>"
SLEEP "<&TEMP&>"
ENDIF
ENDIF
IF CHAR_CUR_HP == ZERO
CALLSUB Dead
ENDIF
LOOP TARGET_CUR_HP > ZERO
IF MANOR == one
USE_ITEM "<&HARVID&>"
PRINT_TEXT "Harvester used"
GET_RAND TEMP "<&MIN_SWEEPDELAY&>" "<&MAX_SWEEPDELAY&>"
SLEEP "<&TEMP&>"
ENDIF
IF ISSPOILER == ONE
IF SWEEPSKILLID != ZERO
IF TARGET_CUR_HP == ZERO
IF DEBUG == ONE
PRINT_TEXT "target spoiled, sweeping"
ENDIF
USE_SKILL "<&SWEEPSKILLID&>"
GET_RAND TEMP "<&MIN_SWEEPDELAY&>" "<&MAX_SWEEPDELAY&>"
SLEEP "<&TEMP&>"
ENDIF
ENDIF
ENDIF
RETURNSUB
SUB Rest
PRINT_TEXT "starting to rest until <&UNTILHP&> HP and <&UNTILMP&> MP"
Rest = ONE
SLEEP 1000
IF DEBUG == ONE
PRINT_TEXT "sitting down"
ENDIF
COMMAND "/sit"
DO
//check if anything has us targeted
IF COUNT_NPC_TARGETME != ZERO
//we are targeted, let not be sitting shall we?
Rest = #i0
IF DEBUG == ONE
PRINT_TEXT "Some monster attacked us, lets defend ourselves"
ENDIF
ENDIF
//enough hp?
IF CHAR_CUR_HP >= UNTILHP
//enough mp?
IF CHAR_CUR_MP >= UNTILMP
Rest = #i0
PRINT_TEXT "We are ready to go."
ENDIF
ENDIF
//are we still resting? if so lets run the loop again
SLEEP 1000
LOOP Rest == ONE
//done resting lets stand
IF DEBUG == ONE
PRINT_TEXT "standing up"
ENDIF
COMMAND "/stand"
SLEEP 200
RETURNSUB
SUB Dead
IF LOGOUTTIME != ZERO
PRINT_TEXT "Your Dead, Dumbass. Waiting <&LOGOUTTIME&> Seconds for Ress"
ELSE
PRINT_TEXT "Your Dead, Dumbass. Waiting for Ress"
ENDIF
DEATHCOUNT = DEATHCOUNT + ONE
PRINT_TEXT "you died <&DEATHCOUNT&> times until now"
IF MAXDEATHS != ZERO
IF DEATHCOUNT >= MAXDEATHS
PRINT_TEXT "died too often, suspicous. logout for now, stopping script"
//waiting 15 seconds before logout, because else might still be in combat
SLEEP 15000
FORCE_LOG
END_SCRIPT
ENDIF
ENDIF
DO
SLEEP 1000
IF LOGOUTTIME != ZERO
COUNT = COUNT + ONE
IF DEBUG == ONE
PRINT_TEXT "<&COUNT&> seconds passed"
ENDIF
IF COUNT >= LOGOUTTIME
PRINT_TEXT "Dead for too long, logging out, stopping script"
//waiting 15 seconds before logout, because else might still be in combat
SLEEP 15000
INJECT "09"
END_SCRIPT
ENDIF
ENDIF
LOOP CHAR_CUR_HP == ZERO
COUNT = #i0
PRINT_TEXT "Looks like your alive again, lucky bastard"
PRINT_TEXT "continue with script"
RETURNSUB
SUB Stuck
IF DEBUG == ONE
PRINT_TEXT "Looks like we are stuck, moving character"
ENDIF
X = CHAR_X - Range
Y = CHAR_Y - Range
MOVE_TO "<&X&>" "<&Y&>" "<&CHAR_Z&>"
SLEEP 1000
X = CHAR_X + Range
MOVE_TO "<&X&>" "<&CHAR_Y&>" "<&CHAR_Z&>"
RETURNSUB
////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////THE END ^_^/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////