White Agnus
Senior Member
- Registriert
- 05.09.2008
- Beiträge
- 5.088
COPY_EXISTING ~ar0500.are~ ~override~
WRITE_ASCII 0x94 ~AR0500~
READ_LONG 0xa4 "door_num"
READ_LONG 0xa8 "door_off"
WHILE ("%door_num%" > 0) BEGIN
SET "door_num" = ("%door_num%" - 1)
READ_BYTE ("%door_off%" + 0x28 + ("%door_num%" * 0xc8)) "locked"
READ_BYTE ("%door_off%" + 0x29 + ("%door_num%" * 0xc8)) "usekey"
READ_ASCII ("%door_off%" + 0x20 + ("%door_num%" * 0xc8)) "doorname"
PATCH_IF ("%doorname%" STRING_COMPARE_CASE "Door0506" = 0) BEGIN
WRITE_ASCII ("%door_off%" + 0x78 + ("%door_num%" * 0xc8)) ~A#IT009.itm~ // sets the door to use this key
WRITE_BYTE ("%door_off%" + 0x28 + ("%door_num%" * 0xc8)) ("%locked%" BOR 0b01000010) // sets locked and openable bits
WRITE_BYTE ("%door_off%" + 0x29 + ("%door_num%" * 0xc8)) ("%usekey%" BOR 0b00000100) // sets uses up key bit
WRITE_LONG ("%door_off%" + 0x8c + ("%door_num%" * 0xc8)) 100 // sets lock difficulty
END
END
BUT_ONLY_IF_IT_CHANGES
Hmm, ich kann jetzt nicht genau sagen, wo dein Fehler liegt, denn ich arbeite nie mit WHILE Schleifen. ^^
Ich hab dir das ganze in ner FOR Schleife mal vorbereitet (nicht getestet, aber ich benutze nen ähnlichen Code, bloß für ne andere Area...)
Code:
COPY_EXISTING ~ar0500.are~ ~override~
WRITE_ASCII 0x94 ~AR0500~ // Script [Wieso setzt du das Script, dass ist doch bereits AR0500]
READ_LONG 0xa8 door_off //Read Door Offset
READ_LONG 0xa4 door_num //Read Door Number
FOR (cnt=0;cnt<"%door_num%";cnt+=1) BEGIN //Start Loop
READ_ASCII ("%door_off%" + "%cnt%"*0xc8) ~door_name~ (32) NULL //Read Door Name
PATCH_IF (("%door_name%" STRING_COMPARE_CASE "Door0506")=0) BEGIN //Patch if Door Name = Door0506
SET offset = ("%door_off%"+0xc8*cnt) // Set Door Offset for Door 0506
READ_BYTE (offset+0x28) "flag_off1" //Read Flag Offset1
READ_BYTE (offset+0x29) "flag_off2" //Read Flag Offset2
WRITE_BYTE (offset + 0x28) ("%flag_off1%" BOR 0b01000010) //Write Flag Offset 1 locked & openable
WRITE_BYTE (offset + 0x29) ("%flag_off2%" BOR 0b00000100) //Write Flag Offset 2 used up Key
WRITE_ASCII (offset + 0x78) "A#IT009" //Write Key Name (ohne itm!)
WRITE_LONG (offset + 0x8c) 100 //Write Lock difficulty
END
END
€dith: Hatte nen kleinen Fehler im Code, ausserdem hab ich dass auslesen des Door Name geändert, damit auch nur wirklich Door0506 geändert wird und nicht auch Door0506b (Hab in der Area nachgeschaut, es gibt Door0506 und Door0506b und nach der vorherigen Methode würden beide gepatcht...)
€dith2:
Wenn ich dir Code für das hinzufügen eines Actors zu einer Area bereitstellen soll, mach ich das natürlich gerne...
Zuletzt bearbeitet: