Patchování souborů pomocí WeiDU

Vytváření nových modů není tak obtížné, zkuste si to taky.

Moderátor: Razfallow

Odpovědět
Uživatelský avatar
Razfallow
Dabus
Příspěvky: 1373
Registrován: 24.9.2005 22:54
Bydliště: Sigil
Kontaktovat uživatele:

Patchování souborů pomocí WeiDU

Příspěvek od Razfallow » 29.7.2006 14:04

Zajímalo by mě, jak s pomocí WeiDU nastavit nebo vypnout u předmětu určitý flag (Unsellable, Two-handed, ...)?

Potřebuji u jednoho předmětu nastavit flag Magical a nechci ten předmět přepisovat.

Kód: Vybrat vše

IF
  Detect([SPAMMER])
THEN
    RESPONSE #100
             ReallyForceSpell(WIZARD_POWER_WORD_KILL,LastSeenBy(Myself))
END
[/size]

Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

Příspěvek od drake127 » 29.7.2006 14:45

COPY_EX...
READ_LONG 0x18 flags
WRITE_LONG 0x18 (flags | 0x00000040)

možná jsem to číslo nenapsal dobře, ale takhle se to dělá.

Edit: a vypnutí se dělá:
WRITE_LONG 0x18 (flags & ~0x00000040)
Žralok, který štěká, nekouše.

Uživatelský avatar
Razfallow
Dabus
Příspěvky: 1373
Registrován: 24.9.2005 22:54
Bydliště: Sigil
Kontaktovat uživatele:

Příspěvek od Razfallow » 29.7.2006 14:52

Já právě netuším, jak se spočítá to číslo (0x00000040). V NI jsou pouze celá čísla. Třeba zrovna flag magical má 6.

Kód: Vybrat vše

IF
  Detect([SPAMMER])
THEN
    RESPONSE #100
             ReallyForceSpell(WIZARD_POWER_WORD_KILL,LastSeenBy(Myself))
END
[/size]

Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

Příspěvek od drake127 » 29.7.2006 14:59

To je pořadí bitu. Pokud je to v NI značené správně a rozmezí je od 1 do 32, potom jsou to hodnoty:
0x00000001
0x00000002
0x00000004
0x00000008
0x00000010
0x00000020
...
0x80000000
Žralok, který štěká, nekouše.

Uživatelský avatar
Razfallow
Dabus
Příspěvky: 1373
Registrován: 24.9.2005 22:54
Bydliště: Sigil
Kontaktovat uživatele:

Příspěvek od Razfallow » 5.8.2006 13:32

Jak zapsat pomocí weidu na nějaký offset zápornou hodnotu?

Kód: Vybrat vše

IF
  Detect([SPAMMER])
THEN
    RESPONSE #100
             ReallyForceSpell(WIZARD_POWER_WORD_KILL,LastSeenBy(Myself))
END
[/size]

Uživatelský avatar
Vlasák
Sigilan
Příspěvky: 3017
Registrován: 26.9.2005 7:56
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od Vlasák » 5.8.2006 14:50

Záleží, jak je tam nula. Osobně bych tipl, že přes dvojkový doplněk - tak se často zapisují záporná čísla, ale uvidíme. Máš např. -5. Decimálních 5 převedeš na binárních 5, tj. 101. Zneguješ (tj. dle "šířky" byte/word/dword to bude na začátku několik jedniček výsledkem nezapsaných znegovaných nul), pro byte: 11111010. A následně přičteš 1, takže 11111011. A to do hexadecimálního tvaru FB.

Ale weidu myslím podporuje i zápis decimálních a binárních hodnot, ne? To by se pak dalo zapsat rovnou...
Infinity forever! - Baldur's Gate II add-on CZ
Fórum plné RPG - RPG fórum


Obrázek

Uživatelský avatar
Razfallow
Dabus
Příspěvky: 1373
Registrován: 24.9.2005 22:54
Bydliště: Sigil
Kontaktovat uživatele:

Příspěvek od Razfallow » 5.8.2006 15:02

Zkoušel jsem to s -50, ale háže to chybu.

Kód: Vybrat vše

IF
  Detect([SPAMMER])
THEN
    RESPONSE #100
             ReallyForceSpell(WIZARD_POWER_WORD_KILL,LastSeenBy(Myself))
END
[/size]

Uživatelský avatar
Vlasák
Sigilan
Příspěvky: 3017
Registrován: 26.9.2005 7:56
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od Vlasák » 5.8.2006 15:06

Jak jsi tam zadal těch -50?
Infinity forever! - Baldur's Gate II add-on CZ
Fórum plné RPG - RPG fórum


Obrázek

Uživatelský avatar
Razfallow
Dabus
Příspěvky: 1373
Registrován: 24.9.2005 22:54
Bydliště: Sigil
Kontaktovat uživatele:

Příspěvek od Razfallow » 5.8.2006 15:08

WRITE_BYTE 0x5a -50

Kód: Vybrat vše

IF
  Detect([SPAMMER])
THEN
    RESPONSE #100
             ReallyForceSpell(WIZARD_POWER_WORD_KILL,LastSeenBy(Myself))
END
[/size]

Uživatelský avatar
Vlasák
Sigilan
Příspěvky: 3017
Registrován: 26.9.2005 7:56
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od Vlasák » 5.8.2006 15:13

aha, tak to asi bude třeba převést na hexa... mínus tam asi falíruje...

50 = 110010b
neg: 11001101b
+1: 11001110b = 0xCE
Infinity forever! - Baldur's Gate II add-on CZ
Fórum plné RPG - RPG fórum


Obrázek

Uživatelský avatar
Razfallow
Dabus
Příspěvky: 1373
Registrován: 24.9.2005 22:54
Bydliště: Sigil
Kontaktovat uživatele:

Příspěvek od Razfallow » 5.8.2006 15:18

Díky moc ;-)

Kód: Vybrat vše

IF
  Detect([SPAMMER])
THEN
    RESPONSE #100
             ReallyForceSpell(WIZARD_POWER_WORD_KILL,LastSeenBy(Myself))
END
[/size]

Uživatelský avatar
Vlasák
Sigilan
Příspěvky: 3017
Registrován: 26.9.2005 7:56
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od Vlasák » 5.8.2006 15:21

Ale pro jistotu si to v nějakém prohlížeči zkontroluj. Jde i o to, jak "široká" ta hodnota je, pokud word, tak tam musíš doplnit ještě dvě FF, atp.
Infinity forever! - Baldur's Gate II add-on CZ
Fórum plné RPG - RPG fórum


Obrázek

Uživatelský avatar
Razfallow
Dabus
Příspěvky: 1373
Registrován: 24.9.2005 22:54
Bydliště: Sigil
Kontaktovat uživatele:

Příspěvek od Razfallow » 5.8.2006 15:42

Vlasák píše:Ale pro jistotu si to v nějakém prohlížeči zkontroluj. Jde i o to, jak "široká" ta hodnota je, pokud word, tak tam musíš doplnit ještě dvě FF, atp.
Jo, jde to. Na to převádění stačí windowská kalkulačka, lze převést záporné decimální číslo přímo na hexadecimální.

Kód: Vybrat vše

IF
  Detect([SPAMMER])
THEN
    RESPONSE #100
             ReallyForceSpell(WIZARD_POWER_WORD_KILL,LastSeenBy(Myself))
END
[/size]

Uživatelský avatar
drake127
Sigil Team
Příspěvky: 2358
Registrován: 24.9.2005 22:28
Bydliště: Jihlava, Czech Republic
Kontaktovat uživatele:

Příspěvek od drake127 » 6.8.2006 1:42

Ano, Windows kalkulačka to spočte dobře a ještě si můžeš vybrat velikost (qword, dword, word, byte).
Žralok, který štěká, nekouše.

Odpovědět

Zpět na „Infinity Engine“