Jump to content

What's wrong with this script?


Guest i30817

Recommended Posts

I don't suppose you know of a way to get a hold of the nearest trap object to use disarm traps on?
you'll have to modify it to work with your own sets of scripts but this does indeed work
// remove traps and pick locks
BEGIN @33
REQUIRE_PREDICATE !(GAME_IS ~bg1~) @2
REQUIRE_COMPONENT ~ABpartyscript.tp2~ ~0~ ~Main MOD Component Required~
SUBCOMPONENT @28
COPY ~scripts/abparty.bs~ ~override~
OUTER_SPRINT ie_file ~ar~
ACTION_IF (FILE_EXISTS_IN_GAME ~FW2600.are~) THEN BEGIN
OUTER_SPRINT ie_file ~fw~
END
<<<<<<<< inlined/thief_hk_trap.baf
IF
HotKey(%F2%)
Global("%cont_var%","LOCALS",0)
ActionListEmpty()
!Exists([ENEMY])
AreaCheck("%area%")
!Disarmed("%trigger%")
Range("%trigger%",10)
CheckStatGT(Myself,1,TRAPS)
THEN
RESPONSE #100
SetGlobal("%cont_var%","LOCALS",1)
RemoveTraps("%trigger%")
Continue()
END
>>>>>>>>
<<<<<<<< inlined/thief_hk_lock&trap.baf
IF
HotKey(%F2%)
Global("%cont_var%","LOCALS",0)
ActionListEmpty()
!Exists([ENEMY])
!See([NOTGOOD])
AreaCheck("%area%")
!Disarmed("%trigger%")
Range("%trigger%",10)
CheckStatGT(Myself,1,TRAPS)
CheckStatGT(Myself,1,LOCKPICKING)
THEN
RESPONSE #100
SetGlobal("%cont_var%","LOCALS",1)
RemoveTraps("%trigger%")
PickLock("%trigger%")
Continue()
END
>>>>>>>>
<<<<<<<< inlined/thief_hk_lock.baf
IF
HotKey(%F2%)
Global("%cont_var%","LOCALS",0)
ActionListEmpty()
!Exists([ENEMY])
AreaCheck("%area%")
Range("%trigger%",10)
CheckStatGT(Myself,1,LOCKPICKING)
THEN
RESPONSE #100
SetGlobal("%cont_var%","LOCALS",1)
PickLock("%trigger%")
Continue()
END
>>>>>>>>
<<<<<<<< inlined/thief_hk_lock_cant_disarm.baf
IF
HotKey(%F2%)
Global("%cont_var%","LOCALS",0)
ActionListEmpty()
!Exists([ENEMY])
!See([NOTGOOD])
AreaCheck("%area%")
Range("%trigger%",10)
CheckStatGT(Myself,1,LOCKPICKING)
THEN
RESPONSE #100
SetGlobal("%cont_var%","LOCALS",1)
PickLock("%trigger%")
Continue()
END
>>>>>>>>
PRINT @16
ACTION_READLN ~hk~
OUTER_WHILE ((%hk% != 1) AND (%hk% != 2)) BEGIN
PRINT @5
PRINT @16
ACTION_READLN ~hk~
END
OUTER_SPRINT F2 ~D~
ACTION_IF (%hk% = 1) THEN BEGIN
PRINT @17
ACTION_READLN ~F2~
OUTER_WHILE !(~%F2%~ STRING_COMPARE_REGEXP ~[A-Z]~ =0) BEGIN
 PRINT @5
 PRINT @17
 ACTION_READLN ~F2~
END
END

PRINT @27

OUTER_PATCH ~this_is_not_a_variable~ BEGIN
FOR ("i1" = 0x0; "i1" < 0x100; "i1" += 0x1) BEGIN
 WRITE_BYTE 0x0 "i1"
 READ_ASCII 0x0 ~c~ (0x1)
 SPRINT EVALUATE_BUFFER ~0t%i1%~ ~%c%~
END
END
COPY_EXISTING_REGEXP GLOB ~^%ie_file%.*\.are$~ ~override~
PATCH_IF (SOURCE_SIZE > 0x11b) THEN BEGIN
 SPRINT area ~%SOURCE_RES%~
 READ_SHORT 0x5a "tc"
 READ_LONG  0x5c "to"
 READ_LONG  0x70 "co"
 READ_SHORT 0x74 "cc"
 READ_LONG  0xa4 "dc"
 READ_LONG  0xa8 "do"
 FOR ("i1" = 0x00; "i1" < ("tc" * 0xc4); "i1" += 0xc4) BEGIN
  SPRINT ~trigger~ ~~
  SPRINT ~co_name~ ~~
  READ_SHORT ("to" + "i1" + 0x68) "trap_detect"
  READ_SHORT ("to" + "i1" + 0x6a) "trap_disarm"
  READ_SHORT ("to" + "i1" + 0x6c) "trapped"
  READ_SHORT ("to" + "i1" + 0x20) trig_type
  READ_LONG ("to" + "i1" + 0x60) flag
  PATCH_IF ( (%trig_type% = 0)
	  AND ("trap_detect" < 0x64)
	  AND ("trap_disarm" < 0x64)
	  AND ((%flag% BAND 0b1000) = 0b1000)
	  AND (("trapped" & 0x01) = 0x01) ) THEN BEGIN
FOR ("i2" = 0x00; "i2" < 0x20; "i2" += 0x01) BEGIN
 READ_BYTE ("to" + "i1" + "i2") "char"
 READ_ASCII ("to" + "i1" + "i2") "char2" (1)
 PATCH_IF (~%char%~ = 32) AND (~%char2%~ STRING_COMPARE_REGEXP ~ ~ =0) BEGIN
  SPRINT ~char2~ ~_~
 END
 PATCH_IF (%char% != 0) BEGIN
  SPRINT ~co_name~ ~%co_name%%char2%~
 END
 PATCH_IF (("char" = 0x00) AND ("i2" = 0x00)) THEN BEGIN
  SET "i2" = 0x20
 END
 ELSE
 PATCH_IF (("char" = 0x00) AND ("i2" > 0x00)) THEN BEGIN
  READ_ASCII ("to" + "i1" + 0x00) ~trigger~ ("i2")
  SPRINT ~cont_var~ ~ab_%area%_%co_name%~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~abparty.bs~ ~inlined/thief_hk_trap.baf~
	EVALUATE_BUFFER
  END
  SET "i2" = 0x20
 END
END
  END
 END
 FOR ("i1" = 0x00; "i1" < ("cc" * 0xc0); "i1" += 0xc0) BEGIN
  SPRINT ~trigger~ ~~
  SPRINT ~co_name~ ~~
  READ_SHORT ("co" + "i1" + 0x2c) "trap_detect"
  READ_SHORT ("co" + "i1" + 0x2e) "trap_disarm"
  READ_SHORT ("co" + "i1" + 0x30) "trapped"
  READ_SHORT ("co" + "i1" + 0x26) "lock_dif"
  READ_LONG ("co" + "i1" + 0x28) "flag"
  PATCH_IF ( ("trap_detect" < 0x64)
	  AND ("trap_disarm" < 0x64)
	  AND (("trapped" & 0x01) = 0x01)
	  AND !((%flag% BAND 0b001) = 0b001) ) THEN BEGIN //trapped only
FOR ("i2" = 0x00; "i2" < 0x20; "i2" += 0x01) BEGIN
 READ_BYTE ("co" + "i1" + "i2") "char"
 READ_ASCII ("co" + "i1" + "i2") "char2" (1)
 PATCH_IF (~%char%~ = 32) AND (~%char2%~ STRING_COMPARE_REGEXP ~ ~ =0) BEGIN
  SPRINT ~char2~ ~_~
 END
 PATCH_IF (%char% != 0) BEGIN
  SPRINT ~co_name~ ~%co_name%%char2%~
 END
 PATCH_IF (("char" = 0x00) AND ("i2" = 0x00)) THEN BEGIN
  SET "i2" = 0x20
 END
 ELSE
 PATCH_IF (("char" = 0x00) AND ("i2" > 0x00)) THEN BEGIN
  READ_ASCII ("co" + "i1" + 0x00) ~trigger~ ("i2")
  SPRINT ~cont_var~ ~ab_%area%_%co_name%~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~abparty.bs~ ~inlined/thief_hk_trap.baf~
	EVALUATE_BUFFER
  END
  SET "i2" = 0x20
 END
END
  END
  PATCH_IF ( ("trap_detect" < 0x64)
	  AND ("trap_disarm" < 0x64)
	  AND (("trapped" & 0x01) = 0x01)
	  AND ((%flag% BAND 0b001) = 0b001)) THEN BEGIN //trapped & locked
FOR ("i2" = 0x00; "i2" < 0x20; "i2" += 0x01) BEGIN
 READ_BYTE ("co" + "i1" + "i2") "char"
 READ_ASCII ("co" + "i1" + "i2") "char2" (1)
 PATCH_IF (~%char%~ = 32) AND (~%char2%~ STRING_COMPARE_REGEXP ~ ~ =0) BEGIN
  SPRINT ~char2~ ~_~
 END
 PATCH_IF (%char% != 0) BEGIN
  SPRINT ~co_name~ ~%co_name%%char2%~
 END
 PATCH_IF (("char" = 0x00) AND ("i2" = 0x00)) THEN BEGIN
  SET "i2" = 0x20
 END
 ELSE
 PATCH_IF (("char" = 0x00) AND ("i2" > 0x00)) THEN BEGIN
  READ_ASCII ("co" + "i1" + 0x00) ~trigger~ ("i2")
  SPRINT ~cont_var~ ~ab_%area%_%co_name%~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~abparty.bs~ ~inlined/thief_hk_lock&trap.baf~
	EVALUATE_BUFFER
  END
  SET "i2" = 0x20
 END
END
  END
  PATCH_IF ( ("trap_detect" >= 0x64)
	  AND ("trap_disarm" >= 0x64)
	  AND (("trapped" & 0x01) = 0x01)
	  AND ((%flag% BAND 0b001) = 0b001)) THEN BEGIN //trapped but can't remove & locked
FOR ("i2" = 0x00; "i2" < 0x20; "i2" += 0x01) BEGIN
 READ_BYTE ("co" + "i1" + "i2") "char"
 READ_ASCII ("co" + "i1" + "i2") "char2" (1)
 PATCH_IF (~%char%~ = 32) AND (~%char2%~ STRING_COMPARE_REGEXP ~ ~ =0) BEGIN
  SPRINT ~char2~ ~_~
 END
 PATCH_IF (%char% != 0) BEGIN
  SPRINT ~co_name~ ~%co_name%%char2%~
 END
 PATCH_IF (("char" = 0x00) AND ("i2" = 0x00)) THEN BEGIN
  SET "i2" = 0x20
 END
 ELSE
 PATCH_IF (("char" = 0x00) AND ("i2" > 0x00)) THEN BEGIN
  READ_ASCII ("co" + "i1" + 0x00) ~trigger~ ("i2")
  SPRINT ~cont_var~ ~ab_%area%_%co_name%~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~abparty.bs~ ~inlined/thief_hk_lock_cant_disarm.baf~
	EVALUATE_BUFFER
  END
  SET "i2" = 0x20
 END
END
  END
  PATCH_IF (!(("trapped" & 0x01) = 0x01)
	  AND ((%flag% BAND 0b001) = 0b001)) THEN BEGIN //locked only
FOR ("i2" = 0x00; "i2" < 0x20; "i2" += 0x01) BEGIN
 READ_BYTE ("co" + "i1" + "i2") "char"
 READ_ASCII ("co" + "i1" + "i2") "char2" (1)
 PATCH_IF (~%char%~ = 32) AND (~%char2%~ STRING_COMPARE_REGEXP ~ ~ =0) BEGIN
  SPRINT ~char2~ ~_~
 END
 PATCH_IF (%char% != 0) BEGIN
  SPRINT ~co_name~ ~%co_name%%char2%~
 END
 PATCH_IF (("char" = 0x00) AND ("i2" = 0x00)) THEN BEGIN
  SET "i2" = 0x20
 END
 ELSE
 PATCH_IF (("char" = 0x00) AND ("i2" > 0x00)) THEN BEGIN
  READ_ASCII ("co" + "i1" + 0x00) ~trigger~ ("i2")
  SPRINT ~cont_var~ ~ab_%area%_%co_name%~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~abparty.bs~ ~inlined/thief_hk_lock.baf~
	EVALUATE_BUFFER
  END
  SET "i2" = 0x20
 END
END
  END
 END
 FOR ("i1" = 0x00; "i1" < ("dc" * 0xc8); "i1" += 0xc8) BEGIN
  SPRINT ~trigger~ ~~
  SPRINT ~co_name~ ~~
  READ_SHORT ("do" + "i1" + 0x6c) "trap_detect"
  READ_SHORT ("do" + "i1" + 0x6e) "trap_disarm"
  READ_SHORT ("do" + "i1" + 0x70) "trapped"
  READ_LONG ("do" + "i1" + 0x28) "flag"
  PATCH_IF ( ("trap_detect" < 0x64)
	  AND ("trap_disarm" < 0x64)
	  AND ((%flag% BAND 0b1000) = 0b1000)
	  AND (("trapped" & 0x01) = 0x01)) THEN BEGIN
FOR ("i2" = 0x00; "i2" < 0x20; "i2" += 0x01) BEGIN
 READ_BYTE ("do" + "i1" + "i2") "char"
 READ_ASCII ("do" + "i1" + "i2") "char2" (1)
 PATCH_IF (~%char%~ = 32) AND (~%char2%~ STRING_COMPARE_REGEXP ~ ~ =0) BEGIN
  SPRINT ~char2~ ~_~
 END
 PATCH_IF (%char% != 0) BEGIN
  SPRINT ~co_name~ ~%co_name%%char2%~
 END
 PATCH_IF (("char" = 0x00) AND ("i2" = 0x00)) THEN BEGIN
  SET "i2" = 0x20
 END
 ELSE
 PATCH_IF (("char" = 0x00) AND ("i2" > 0x00)) THEN BEGIN
  READ_ASCII ("do" + "i1" + 0x00) ~trigger~ ("i2")
  SPRINT ~cont_var~ ~ab_%area%_%co_name%~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~abparty.bs~ ~inlined/thief_hk_trap.baf~
	EVALUATE_BUFFER
  END
  SET "i2" = 0x20
 END
END
  END
 END
END
BUT_ONLY_IF_IT_CHANGES
COPY ~override/abparty.bs~ ~scripts/abparty.bs~

but i had to put in a global else it would keep trying to do the same one over and over even if the character kept failing... you'll want to play with the script layout, but the code to find the container names to use in the script code is probably what you are most interested in. It does make one large ass script if you do every area in the game :cool:

I've thoughts about making one script per area and having the area script change the race level ai script of the party members with thief skills every time they enter an area.

ooo i just thought how to solve the multiple attempts, look for the traps, locks etc detect/remove values and use that for the corresponding CheckStatGT trigger.

 

PS. this has been coded up and collecting dust for the past two years... so don't think i whipped it up just cause you asked about doing this sort of thing :grin:

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...