-
Notifications
You must be signed in to change notification settings - Fork 8
/
ego2.lic
1853 lines (1784 loc) · 57.4 KB
/
ego2.lic
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
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
=begin
Script for escorting travellers
If the script is started before you wait for the traveller, it will go to the
pickup room and get him. If you already have a traveller, he must be in the
room when the script is started.
Destination is determined automatically.
The script will check for targetable npcs and bandit ambushes, and either pause
to let you handle them, or start an attack script to disable/kill them.
The attack script will be given the ids of targetable npcs in the command line
arguments, so that it doesn't have to duplicate that work. It should do one
attack, handle any looting, and exit. This script will then evaluate the room
and start the attack script again if needed.
The global variable $ego2_travel_cost is used to tell how much silver should be
taken for the trip. If the defaults aren't working out for you, you can change
them with a separate script.
;ego2 help
author: Tillmen ([email protected])
game: Gemstone
tags: bounty
version: 0.6
changelog:
0.6 (2020-10-10):
fix commas in silver check
0.5 (2015-04-07):
ignore disabled people's disabled bandits
don't use "a tiny shard of jet black crystal" as an indicator of who owns the bandits
pay attention to disks
0.4 (2014-11-04):
fixed poaching issue where escort id wasn't being checked when he exclaims, "It's an ambush!"
0.3 (2014-09-29):
reworked ambush detection to prevent false positives (poaching other peoples bandits)
removed code to download gameobj-data.xml
=end
fix_setting = { 'on' => true, 'off' => false, 'true' => true, 'false' => false, 'yes' => true, 'no' => false }
script.vars.shift
if script.vars[0] == 'set'
if (script.vars[1] == 'attack-script') and script.vars[2]
if script.vars[2].downcase == 'none'
CharSettings['attack-script'] = nil
else
CharSettings['attack-script'] = script.vars[2]
end
echo "setting saved (attack-script = #{CharSettings['attack-script'] || 'none'})"
elsif (script.vars[1] == 'poach') and (script.vars[2].downcase =~ /^(on|off|true|false|yes|no)$/)
CharSettings['poach'] = fix_setting[$1]
echo "setting saved (poach = #{CharSettings['poach']})"
elsif (script.vars[1] == 'hide') and (script.vars[2].downcase =~ /^(on|off|true|false|yes|no)$/)
CharSettings['hide'] = fix_setting[$1]
echo "setting saved (hide = #{CharSettings['hide']})"
elsif (script.vars[1] == 'haste') and (script.vars[2].downcase =~ /^(on|off|true|false|yes|no)$/)
CharSettings['haste'] = fix_setting[$1]
echo "setting saved (haste = #{CharSettings['haste']})"
elsif (script.vars[1] == 'useherbs') and (script.vars[2].downcase =~ /^(on|off|true|false|yes|no)$/)
CharSettings['useherbs'] = fix_setting[$1]
echo "setting saved (useherbs = #{CharSettings['useherbs']})"
else
echo "You're doing it wrong. (#{$clean_lich_char}#{script.name} help)"
end
exit
elsif script.vars[0].downcase == 'list'
output = "\n"
output.concat " attack-script: #{CharSettings['attack-script'] || 'none'}\n"
output.concat " poach: #{CharSettings['poach'] || 'false'}\n"
output.concat " haste: #{CharSettings['haste'] || 'false'}\n"
output.concat " hide: #{CharSettings['hide'] || 'false'}\n"
output.concat " useherbs: #{CharSettings['useherbs'] || 'false'}\n"
output.concat "\n"
respond output
exit
end
travel_cost = nil
poach = CharSettings['poach']
attack_script = CharSettings['attack-script']
hide = CharSettings['hide']
haste = CharSettings['haste']
useherbs = CharSettings['useherbs']
justice = true
justice_count = 0
fell_off_rope = false
lost_escort = 0
sanct_count = -1
wait_num = 45
options = script.vars.find_all { |var| var =~ /^\-\-/ }
script.vars.delete_if { |var| var =~ /^\-\-/ }
options.each { |opt|
if opt =~ /^\-\-poach=(on|off|true|false|yes|no)$/i
poach = fix_setting[$1.downcase]
elsif opt =~ /^\-\-hide=(on|off|true|false|yes|no)$/i
hide = fix_setting[$1.downcase]
elsif opt =~ /^\-\-haste=(on|off|true|false|yes|no)$/i
haste = fix_setting[$1.downcase]
elsif opt =~ /^\-\-useherbs=(on|off|true|false|yes|no)$/i
useherbs = fix_setting[$1.downcase]
elsif opt =~ /^\-\-attack\-script=(.+)$/i
if $1.downcase == 'none'
attack_script = nil
else
attack_script = $1
end
elsif opt =~ /^\-\-travel\-cost=([0-9]+)$/i
travel_cost = $1.to_i
else
echo "ignoring unrecognized option: #{opt}"
end
}
unless script.vars.empty?
output = "\n"
output.concat " #{$clean_lich_char}#{script.name} start an escort\n"
output.concat " #{$clean_lich_char}#{script.name} list show saved options\n"
output.concat "\n"
output.concat "These commands will save an option and exit:\n"
output.concat "\n"
output.concat " #{$clean_lich_char}#{script.name} set attack-script <script name> set what script will be started when bandits or creatures\n"
output.concat " #{''.ljust($clean_lich_char.length)}#{''.ljust(script.name.length)} are in the room\n"
output.concat " #{$clean_lich_char}#{script.name} set attack-script none pause for bandits and creatures instead of starting a script\n"
output.concat " #{$clean_lich_char}#{script.name} set poach <yes/no> start the attack script (or pause) even if other characters\n"
output.concat " #{''.ljust($clean_lich_char.length)}#{''.ljust(script.name.length)} are in the room\n"
output.concat " #{$clean_lich_char}#{script.name} set haste <yes/no> cast haste before moving\n"
output.concat " #{$clean_lich_char}#{script.name} set hide <yes/no> hide before moving\n"
output.concat " #{$clean_lich_char}#{script.name} set useherbs <yes/no> use herbs when injured and no npcs present\n"
output.concat "\n"
output.concat "These commands will set an option for one run, without saving:\n"
output.concat "\n"
output.concat " #{$clean_lich_char}#{script.name} --attack-script=<script name>\n"
output.concat " #{$clean_lich_char}#{script.name} --attack-script=none\n"
output.concat " #{$clean_lich_char}#{script.name} --poach=<yes/no>\n"
output.concat " #{$clean_lich_char}#{script.name} --travel-cost=<number>\n"
output.concat " #{$clean_lich_char}#{script.name} --haste=<yes/no>\n"
output.concat " #{$clean_lich_char}#{script.name} --hide=<yes/no>\n"
output.concat " #{$clean_lich_char}#{script.name} --useherbs=<yes/no>\n"
output.concat "\n"
respond output
exit
end
CharSettings['targetable'] ||= Array.new
CharSettings['untargetable'] ||= Array.new
destination_room = nil
path = nil
escort_id = nil
ambush_room_count = XMLData.room_count
no_hide_rooms = [ 1192, 1191, 1190, 1156, 1155, 1154, 1153 ]
no_haste_rooms = [ 1191 ]
disabled = /dead|sleeping|calm|stunned|lying down|prone|sitting|frozen/ # entangled|rooted
escort_noun = /^(?:traveller|magistrate|merchant|scribe|dignitary|official)$/
ignorable_npcs = /^(?:kobold|rolton|urgh|ridge orc|hobgoblin|velnalin|fire ant)$/
escort_pickup = {
"area just inside the Sapphire Gate" => [ "Ta'Illistim", 34 ],
"area just inside the North Gate" => [ "Wehnimer's Landing", 223 ],
"south end of North Market" => [ "Solhaven", 1472 ],
"area just north of the South Gate, past the barbican" => [ "Icemule Trace", 2412 ],
"Kresh'ar Deep monument" => [ "Zul Logoth", 1005 ],
"area just inside the Amaranth Gate" => [ "Ta'Vaalor", 3483 ],
}
escort_dropoff = {
"Wehnimer's Landing" => [ 223 ],
"Icemule Trace" => [ 2486 ],
"Zul Logoth" => [ 992, 1266 ],
"Solhaven" => [ 3902 ],
"Ta'Vaalor" => [ 5907 ],
"Ta'Illistim" => [ 37 ],
}
# Travel costs defined here are for returning to your starting room.
# It's a global variable so that a controlling script that knows where
# you'll be going after the escort can override the travel cost.
$ego2_travel_cost ||= {
"Wehnimer's Landing" => {
"Icemule Trace" => 0,
"Zul Logoth" => 20,
"Solhaven" => 0,
"Ta'Vaalor" => 4020,
"Ta'Illistim" => 4020,
},
"Icemule Trace" => {
"Wehnimer's Landing" => 0,
"Zul Logoth" => 20,
"Solhaven" => 0,
"Ta'Vaalor" => 4020,
"Ta'Illistim" => 4020,
},
"Zul Logoth" => {
"Wehnimer's Landing" => 2020,
"Icemule Trace" => 2020,
"Solhaven" => 2020,
"Ta'Vaalor" => 2000,
"Ta'Illistim" => 2000,
},
"Solhaven" => {
"Wehnimer's Landing" => 0,
"Icemule Trace" => 0,
"Zul Logoth" => 20,
"Ta'Vaalor" => 4020,
"Ta'Illistim" => 4020,
},
"Ta'Vaalor" => {
"Wehnimer's Landing" => 4020,
"Icemule Trace" => 4020,
"Zul Logoth" => 2000,
"Solhaven" => 4020,
"Ta'Illistim" => 0,
},
"Ta'Illistim" => {
"Wehnimer's Landing" => 4020,
"Icemule Trace" => 4020,
"Zul Logoth" => 2000,
"Solhaven" => 4020,
"Ta'Vaalor" => 0,
},
}
check_silvers = proc {
silvers = nil
action = proc { |server_string|
if server_string =~ /^\s*Name\:|^\s*Gender\:|^\s*Normal \(Bonus\)|^\s*Strength \(STR\)\:|^\s*Constitution \(CON\)\:|^\s*Dexterity \(DEX\)\:|^\s*Agility \(AGI\)\:|^\s*Discipline \(DIS\)\:|^\s*Aura \(AUR\)\:|^\s*Logic \(LOG\)\:|^\s*Intuition \(INT\)\:|^\s*Wisdom \(WIS\)\:|^\s*Influence \(INF\)\:/
nil
elsif server_string =~ /^\s*Mana\:\s+\-?[0-9]+\s+Silver\:\s+([0-9,]+)/
silvers = $1.gsub(',','').to_i
DownstreamHook.remove("#{script.name}_check_silvers")
nil
else
server_string
end
}
DownstreamHook.add("#{script.name}_check_silvers", action)
$_SERVER_.puts "#{$cmd_prefix}info\n"
wait_until { silvers }
silvers
}
hide_me = proc {
if hide
Spell.lock_cast rescue()
unless hidden? or invisible? or no_hide_rooms.include?(Room.current.id)
waitrt?
fput 'hide'
sleep 0.5
waitrt?
end
end
}
haste_me = proc {
if haste
spell = Spell[506]
if not spell.active? and spell.known? and spell.affordable? and not no_haste_rooms.include?(Room.current.id)
spell.cast
end
end
}
protect_me = proc {
# this proc is called for moves that knock you out of hiding, so it's pointless if hiding isn't enabled
if hide
wizard_shield = Spell[919]
if wizard_shield.known? and not wizard_shield.active? and (mana > 150)
wizard_shield.cast
end
end
}
check_escort = proc {
GameObj.npcs.any? { |npc| npc.id == escort_id }
}
$ego2_my_ambush = false
$ego2_staggered_ambush = false
exec_string = "
hide_me
status_tags
before_dying { kill_script(#{script.name.inspect}) if running?(#{script.name.inspect}) }
Thread.new { wait_while { running?(#{Script.self.name.inspect}) }; Script.self.kill }
while (line = get)
if line =~ /<pushStream id='room'/
$ego2_my_ambush = false
$ego2_staggered_ambush = false
echo 'not my ambush' if $ego2_debug
elsif line =~ /An? .*?\#{$ego2_escort_id}.*? fearfully exclaims, \"It's an ambush!\"|<compass>.*?(?:quickly approaches|suddenly leaps from|leaps out of|suddenly jumps out of the shadows)|carefully concealed metal jaws|nearly invisible length of razor wire|length of nearly invisible razor wire|carefully concealed inflated pouch|carefully concealed looped rope|a carefully concealed net|carefully concealed pit|Suddenly, the ground gives out from under you as you fall into a shallow pit filled with tiny spikes!/
# removed cause it caused a poach: tiny shard of jet black crystal
$ego2_my_ambush = true
echo 'my ambush' if $ego2_debug
if line =~ /<compass>.*?(?:quickly approaches|suddenly leaps from|leaps out of|suddenly jumps out of the shadows)/
$ego2_staggered_ambush = true
echo 'staggered ambush' if $ego2_debug
end
end
end
"
start_exec_script(exec_string, flags={ :quiet => true })
check_room = proc {
if hide
Spell.unlock_cast rescue()
end
loop {
while unknown_npc = GameObj.npcs.find { |npc| not CharSettings['targetable'].include?(npc.name) and not CharSettings['untargetable'].include?(npc.name) }
target_result = dothistimeout "target ##{unknown_npc.id}", 10, /^You are now targeting|^You can't target|^Usage: TARGET/
if target_result =~ /^You are now targeting/
CharSettings['targetable'].push(unknown_npc.name)
elsif target_result =~ /^You can't target/
CharSettings['untargetable'].push(unknown_npc.name)
end
end
npcs = GameObj.npcs.to_a.find_all { |npc| CharSettings['targetable'].include?(npc.name) and not (npc.name =~ ignorable_npcs) and (npc.noun !~ escort_noun) and (($ego2_my_ambush and npc.type =~ /bandit/) or npc.status !~ disabled) and (npc.status !~ /dead/) }
all_pcs = GameObj.pcs.to_a
pcs = all_pcs.find_all { |pc| pc.status.nil? or pc.status =~ /hiding|hidden/ }
disks = GameObj.loot.to_a.find_all { |loot| (loot.noun == 'disk') and (loot.name !~ /#{Char.name}/) and (all_pcs.empty? or (loot.name !~ /#{all_pcs.collect { |pc| pc.noun }.join('|')}/)) }
jerks = GameObj.pcs.to_a.find_all { |pc| UserVars.attacked_me.to_a.include?(pc.noun) and (pc.status !~ /dead/) }
unless jerks.empty?
unless justice_count == XMLData.room_count
result = dothistimeout 'justice status', 1, /^There is no justice other than your own out here\.$|^You sense that your surroundings are calm enough/
if result =~ /^There is no justice other than your own out here\.$/
justice = false
else
justice = true
end
justice_count = XMLData.room_count
end
if justice
jerks.clear
end
end
break if sanct_count == XMLData.room_count
if (poach and npcs.length > 0) or (npcs.length > 0 and ($ego2_my_ambush or (pcs.empty? and disks.empty?))) or (attack_script and jerks.length > 0)
if attack_script
if (checkrt > 0)
waitrt?
next
elsif (checkcastrt > 0)
waitcastrt?
next
end
start_script(attack_script, (jerks + npcs).collect { |n| n.id }, h={:quiet=>true})
wait_while { running?(attack_script) }
if clear.any? { |line| line =~ /^Be at peace my child|^Spells of War cannot be cast/ }
sanct_count = XMLData.room_count
end
else
puts "\n#{monsterbold_start}Kill!#{monsterbold_end} \n\n"
pause_script
end
else
break
end
sleep 0.1
}
}
use_herbs = proc {
if useherbs
if XMLData.name == 'Tillmen' and XMLData.game == 'GSIV'
if ([Wounds.head, Wounds.neck, Wounds.torso, Wounds.limbs, Wounds.nerves, Scars.head, Scars.neck, Scars.torso, Scars.nerves].max > 0) or (Scars.limbs > 1) or ((checkhealth + 50) < maxhealth)
start_script 'useherbs', [ '--buy-missing=off' ]
wait_while { running?('useherbs') }
if ([Wounds.head, Wounds.neck, Wounds.torso, Wounds.limbs, Wounds.nerves, Scars.head, Scars.neck, Scars.torso, Scars.nerves].max > 0) or (Scars.limbs > 1) or ((checkhealth + 50) < maxhealth)
useherbs = false
end
end
else
if ([Wounds.head, Wounds.neck, Wounds.torso, Wounds.limbs, Wounds.nerves, Scars.head, Scars.neck, Scars.torso, Scars.limbs, Scars.nerves].max > 0) or ((checkhealth + 50) < maxhealth)
start_script 'useherbs', [ '--buy-missing=off' ]
wait_while { running?('useherbs') }
if ([Wounds.head, Wounds.neck, Wounds.torso, Wounds.limbs, Wounds.nerves, Scars.head, Scars.neck, Scars.torso, Scars.limbs, Scars.nerves].max > 0) or ((checkhealth + 50) < maxhealth)
useherbs = false
end
end
end
end
}
find_nearest = proc { |target_list|
start_room = Room.current
if target_list.include?(start_room.id)
nearest_id = start_room.id
else
previous, shortest_distances = Map.dijkstra(start_room.id, target_list)
nearest_id = least_time = nil
for target in target_list
est_time = shortest_distances[target]
if !est_time.nil? and (least_time.nil? or least_time > est_time)
nearest_id = target
least_time = est_time
end
end
end
nearest_id
}
old_disable_portal_method = proc {
if XMLData.game =~ /^GSPlat/ and not Map.list.any? { |room| room.timeto.any? { |adj_id,time| time.class == Proc and time._dump =~ /$go2_use_portals/ } }
for start_room in [ '7561', '9318', '3479', '2696', '17691', '12584', '9664', '20453', '16746' ]
for end_room in [ '7561', '9318', '3479', '2696', '17691', '12584', '9664', '20453', '16746' ]
if start_room != end_room
Map[start_room.to_i].wayto.delete(end_room)
Map[start_room.to_i].timeto.delete(end_room)
end
end
end
for start_room in [ '7561', '5052', '9095', '2696', '11128', '12387', '648', '5766', '5940' ]
for end_room in [ '7561', '5052', '9095', '2696', '11128', '12387', '648', '5766', '5940' ]
if start_room != end_room
Map[start_room.to_i].wayto.delete(end_room)
Map[start_room.to_i].timeto.delete(end_room)
end
end
end
for start_room in [ '19706', '19709', '19745', '19752', '19778', '19723', '19721', '19719' ]
Map[start_room.to_i].wayto.delete('19707')
Map[start_room.to_i].timeto.delete('19707')
end
end
}
find_path = proc {
unless current_room = Room.current
echo 'Current room is not in the map database.'
fput 'unhide' if hidden?
exit
end
# disable vaalor shortcut
$go2_use_vaalor_shortcut = false
unless Map.list.any? { |room| room.timeto.any? { |adj_id,time| time.class == Proc and time._dump =~ /$go2_use_vaalor_shortcut/ } }
Room[16745].timeto['16746'] = 15000
Room[16746].timeto['16745'] = 15000
end
# disable seeking
$go2_use_seeking = false
# disable portals
$go2_use_portals = false
old_disable_portal_method.call
previous, shortest_distances = Map.dijkstra(current_room.id, destination_room.id)
unless previous[destination_room.id]
echo "You can't get there from here."
fput 'unhide' if hidden?
exit
end
path = [ destination_room.id ]
path.push(previous[path[-1]]) until previous[path[-1]] == nil
path.reverse!
est_time = ((shortest_distances[destination_room.id] + (1.8 * path.length)) / 60.0).as_time
respond "ETA: #{est_time} (#{path.length} rooms to move through)."
previous, shortest_distances = nil, nil
}
better_miniscript = {
'2524,2523' => proc {
move 'climb rockslide'
hide_me.call
},
'2510,2509' => proc {
move 'climb bank'
hide_me.call
},
'2509,2510' => proc {
move 'climb bank'
hide_me.call
},
'2502,2503' => proc {
move 'climb branch'
hide_me.call
},
'2505,2504' => proc {
move 'climb tree'
hide_me.call
},
'75,74' => proc {
move 'climb wall'
hide_me.call
},
'74,75' => proc {
move 'climb wall'
hide_me.call
},
'884,883' => proc {
move 'climb boulders'
hide_me.call
},
'883,884' => proc {
move 'climb boulders'
hide_me.call
},
'991,990' => proc {
protect_me.call
check_room.call
haste_me.call
empty_hands
move 'climb trail'
waitrt?
fill_hands
},
'990,991' => proc {
protect_me.call
check_room.call
haste_me.call
empty_hands
move 'climb trail'
waitrt?
fill_hands
},
'990,989' => proc {
protect_me.call
check_room.call
haste_me.call
empty_hands
move 'climb path'
waitrt?
fill_hands
},
'989,990' => proc {
protect_me.call
check_room.call
haste_me.call
empty_hands
move 'climb path'
waitrt?
fill_hands
},
'989,988' => proc {
protect_me.call
check_room.call
haste_me.call
empty_hands
move 'climb mountainside'
waitrt?
fill_hands
},
'988,989' => proc {
protect_me.call
check_room.call
haste_me.call
empty_hands
move 'climb mountainside'
waitrt?
fill_hands
},
'971,970' => proc {
protect_me.call
check_room.call
haste_me.call
move 'go fissure'
waitrt?
hide_me.call
},
'970,971' => proc {
protect_me.call
check_room.call
haste_me.call
move 'go fissure'
waitrt?
hide_me.call
},
'964,963' => proc {
move 'climb boulders'
hide_me.call
},
'963,964' => proc {
move 'climb boulders'
hide_me.call
},
'902,901' => proc {
protect_me.call
check_room.call
haste_me.call
move 'go crevasse'
hide_me.call
},
'1018,1017' => proc {
move 'climb precipice'
hide_me.call
},
'1017,1018' => proc {
move 'climb cliff'
hide_me.call
},
'1024,1025' => proc {
protect_me.call
check_room.call
haste_me.call
move 'climb ledge'
waitrt?
},
'1025,1024' => proc {
protect_me.call
check_room.call
haste_me.call
move 'climb cliff'
waitrt?
},
'1156,1155' => proc {
protect_me.call
check_room.call
haste_me.call
move 'north'
waitrt?
},
'1153,1154' => proc {
protect_me.call
check_room.call
haste_me.call
move 'south'
waitrt?
},
'1236,1237' => proc {
protect_me.call
check_room.call
haste_me.call
move 'go stream'
},
'1239,1238' => proc {
protect_me.call
check_room.call
haste_me.call
move 'go stream'
},
'1224,1223' => proc {
protect_me.call
check_room.call
haste_me.call
empty_hands
move 'climb boulder'
waitrt?
fill_hands
},
'1223,1224' => proc {
protect_me.call
check_room.call
haste_me.call
empty_hands
move 'climb boulder'
waitrt?
fill_hands
},
'1219,1220' => proc {
haste_me.call
3.times {
result = dothistimeout 'search', 3, /^don't find anything|discover a northwest path|Round\s?time/
waitrt?
check_room.call
break if result =~ /discover a northwest path/
}
haste_me.call
hide_me.call
check_room.call
hide_me.call
check_room.call
move 'go path'
},
'1030,1029' => proc {
move 'climb cliff'
hide_me.call
},
'1029,1030' => proc {
move 'climb cliff'
hide_me.call
},
'1020,1019' => proc {
move 'climb crevice'
hide_me.call
},
'1019,1020' => proc {
move 'climb crevice'
hide_me.call
},
'1242,1241' => proc {
haste_me.call
5.times {
search_result = dothistimeout 'search', 5, /discover a|don't find anything|Round\s?time/
waitrt?
check_room.call
break if search_result =~ /discover a/
}
check_room.call
haste_me.call
check_room.call
hide_me.call
check_room.call
hide_me.call
check_room.call
move 'go path'
},
'10117,10119' => proc {
move 'go gangplank'
if Room.current.id == 10117
echo 'Waiting for ferry... '
loop {
break if clear.include?('An elven crewmember scrambles back onto the boat and lowers the gangplank.')
check_room.call
sleep 0.1
}
move 'go gangplank'
end
loop {
break if clear.include?('An elven crewmember scrambles back onto the boat and lowers the gangplank.')
check_room.call
sleep 0.1
}
haste_me.call
check_room.call
hide_me.call
check_room.call
hide_me.call
check_room.call
move 'out'
},
'10119,10117' => proc {
move 'go gangplank'
if Room.current.id == 10119
echo 'Waiting for ferry... '
loop {
break if clear.include?('An elven crewmember scrambles back onto the boat and lowers the gangplank.')
check_room.call
sleep 0.1
}
move 'go gangplank'
end
loop {
break if clear.include?('An elven crewmember scrambles back onto the boat and lowers the gangplank.')
check_room.call
sleep 0.1
}
haste_me.call
check_room.call
hide_me.call
check_room.call
hide_me.call
check_room.call
move 'out'
},
'1216,1217' => proc {
5.times {
search_result = dothistimeout 'search', 5, /don't find anything|discover a small footpath|^Round\s?time/
fput 'search'
waitrt?
check_room.call
break if search_result =~ /discover a small footpath/
}
check_room.call
haste_me.call
check_room.call
hide_me.call
check_room.call
hide_me.call
check_room.call
move 'go footpath'
},
'1190,1189' => proc {
move 'out'
hide_me.call
},
'1192,1193' => proc {
move 'out'
hide_me.call
},
'1190,1191' => proc {
result = nil
if checknpcs.include?('ferryman')
fput 'unhide' if invisible? or hidden?
result = dothistimeout 'give ferryman 10', 5, /What is it you're trying to give|Thank you, friend\. Go ahead and board\.|Sorry, friend, break time for me\. Not taking tolls\./
end
until result =~ /Thank you, friend\. Go ahead and board\./
echo 'Waiting for the ferryman...'
loop {
break if clear.any? { |line| line =~ /nimbly walks up the gangplank|He sets the gangplank down between the dock and the ferry and takes his place next to it\.|The ferryboat bumps up against the dock. Immediately the ferryman ropes the boat securely to the dock, then picks up the gangplank and lays it down between the ferry and the dock, providing a safe, firm exit\./ }
sleep 0.1
check_room.call
}
fput 'unhide' if invisible? or hidden?
result = dothistimeout 'give ferryman 10', 5, /What is it you're trying to give|Thank you, friend\. Go ahead and board\.|Sorry, friend, break time for me\. Not taking tolls\./
end
move 'go gang'
},
'1192,1191' => proc {
result = nil
if checknpcs.include?('ferryman')
fput 'unhide' if invisible? or hidden?
result = dothistimeout 'give ferryman 10', 5, /What is it you're trying to give|Thank you, friend\. Go ahead and board\.|Sorry, friend, break time for me\. Not taking tolls\./
end
until result =~ /Thank you, friend\. Go ahead and board\./
echo 'Waiting for the ferryman...'
loop {
break if clear.any? { |line| line =~ /nimbly walks up the gangplank|He sets the gangplank down between the dock and the ferry and takes his place next to it\.|The ferryboat bumps up against the dock. Immediately the ferryman ropes the boat securely to the dock, then picks up the gangplank and lays it down between the ferry and the dock, providing a safe, firm exit\./ }
sleep 0.1
check_room.call
}
fput 'unhide' if invisible? or hidden?
result = dothistimeout 'give ferryman 10', 5, /What is it you're trying to give|Thank you, friend\. Go ahead and board\.|Sorry, friend, break time for me\. Not taking tolls\./
end
move 'go gang'
},
'1191,1190' => proc {
loop {
break if clear.any? { |line| line =~ /^The ferryman.*Everybody out/i }
check_room.call
sleep 0.1
}
protect_me.call
move 'go gang'
10.times {
check_room.call
sleep 0.2
break if check_escort.call
}
},
'1191,1192' => proc {
loop {
break if clear.any? { |line| line =~ /^The ferryman.*Everybody out/i }
check_room.call
sleep 0.1
}
protect_me.call
move 'go gang'
10.times {
check_room.call
sleep 0.2
break if check_escort.call
}
},
'2547,2546' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
check_room.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'northeast', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2547,2548' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
check_room.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'southwest', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2545,2544' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
check_room.call
hide_me.call
dothistimeout 'north', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2545,2546' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'southwest', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2536,2535' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'east', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2536,2537' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'west', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2535,2534' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'southeast', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2535,2536' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'west', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2534,2533' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'southeast', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2534,2535' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'northwest', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2526,2525' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'east', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2526,2527' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'west', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2525,2524' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'northeast', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2525,2526' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'west', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2524,2525' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'southwest', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},
'2522,2521' => proc {
room_count = XMLData.room_count
while room_count == XMLData.room_count
check_room.call
haste_me.call
fput 'stand' unless standing?
hide_me.call
dothistimeout 'northeast', 3, /^Trying to sneak over|^Obvious|^Running heedlessly/
end
},