Gothic 2 Zamiana Slotów 2958 9

O temacie

Autor Siemekk

Zaczęty 10.10.2016 roku

Wyświetleń 2958

Odpowiedzi 9

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Z przypływu nudy napisałem skrypt dwóch mieczy. (Można założyć każdy miecz jednoręczny.) Jednak problem leży po stronie przeskakiwania przedmiotu(ze slotu ZS_LONGSWORD na ZS_LEFTHAND) Nie używam MDS tylko EngineHooks. Mianowicie tych adresów:
func void Duals_Init()
{
    HookEngineF(oCNpc__EV_DrawWeapon,    6, _Dual_Draw);//0x74CC10
    HookEngineF(oCNpc__EV_DrawWeapon1,   5, _Dual_Draw);//0x74D2E0
    HookEngineF(oCNpc__EV_RemoveWeapon,  7, _Dual_UnDraw);//0x74DB20
    HookEngineF(oCNpc__EV_RemoveWeapon1, 7, _Dual_UnDraw);//0x74E4B0
    HookEngineF(7369071,        6, _Dual_Equip);
};
Super przeskakuje ze slotu na slot. Ale w 1 klatce... Jak można zrobić aby przedmiot przeskakiwał w określonej klatce (nie klatce 1) Oraz najlepiej metoda bez MDS :)
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Splash

Splash

Moderator
posty4212
Propsy3414
ProfesjaNierób
  • Moderator
if (GetSlotItem (hero, "ZS_RIGHTHAND") > 0)
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Dzięki :D Jeszcze jedno. Jak sprawdzić czy dana broń jest akurat noszona (podświetlona)
Używam tego do zaznaczania itemów w ekwipunku:
var c_item itm; itm = _^(MEM_ReadInt(ESP+324+4));
HookEngineF(7369071,        6, _Dual_Equip);
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Chodzi Ci o broń aktualnie założoną? if (item.flags & ITEM_ACTIVE) tylko nie pamiętam, czy mainflag czy flags, musisz sprawdzić.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Dzięki ale jeszcze ostatnie pytanie :F Czy da się zrobić, aby zaznaczony przedmiot był założony (coś a'la zmiana flagi na ITEM_ACTIVE [ale flag chyba nie można zmienić])
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Da się dodać flagę. Problem w tym, że nie ogarniam jeszcze na tyle operacji birnanych i nie chcę się jebnąć. item.flags =  item.flags | ITEM_ACTIVE?
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Gothic 2 Zamiana Slotów
#6 2016-10-11, 17:41(Ostatnia zmiana: 2016-10-11, 18:02)
Tak. | to "OR", czyli na każdym miejscu gdzie w jednym z operandów było 1, w wyniku też będzie 1. Czyli w polu bitowym ustawisz wybrany bit na 1 (bo ITEM_ACTIVE jest zdefiniowane jako 1 << x, czyli liczba która w reprezentacji bitowej zawiera same zera i jedną jedynkę na pozycji x od końca).


Przykładowo:
item.flags  = 11000010    //pole bitowe
item_active = 00001000    //maska bitu w polu bitowym
OR          = 11001010    //rezultat alternatywy bitowej, czyli tutaj ustawienia bitu o wybranej pozycji

A wyłączasz bit w masce bitowej przez operację odwrotną - czyli wykonanie koniunkcji z negacją (& ~):
item.flags   = 11001010    //pole bitowe z już nałożoną tą maską
item_active  = 00001000    //maska bitu w polu bitowym
~item_active = 11110111    //zanegowanie maski, czyli zamiana wszystkich 0 i 1.
AND          = 11000010    //rezultat koniunkcji bitowej, czyli tutaj wyzerowania bitu o wybranej pozycji
XOR ^ zadziałałby tu na przemian - zamieniał 0 na 1 i na odwrót na wybranej pozycji.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Nie uważałem o tym zbytnio na lekcji, ale coś pamiętam :F
Było tego kilka i robiliśmy bodajże tabelki: XOR, NOR, i coś tam dalej musiałbym poszukać (to do mnie bo wiem o co mniej więcej chodzi, lecz nie znam identyfikatorów czy jak to się zwie &, | ~ i coś chyba jeszcze[nie uczyłem się programowania] )

Co do gothic'a zrobiłem tak:
itm.flags = ITEM_ACTIVE;
I działało xD Problem w tym że nie wiem jak już tą flagę przywrócić :/ Zapisy do Aivarów nie działały i flaga pozostawała na zawsze ITEM_ACTIVE.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Splash

Splash

Moderator
posty4212
Propsy3414
ProfesjaNierób
  • Moderator
Założony:
itm.flags = itm.flags | ITEM_ACTIVE;
Zdjęty:
itm.flags = itm.flags & ~ ITEM_ACTIVE;
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota

Siemekk
Złote Wrota

Gothic 2 Zamiana Slotów
#9 2016-10-11, 18:43(Ostatnia zmiana: 2016-10-11, 22:08)
Dzięki :) I już na prawdę ostatnie! Jak sprawić by po wczytaniu gry. Przedmiot dalej był na slocie :I Używam tego z LeGo:
oCNpc_RemoveFromSlot();
oCNpc_PutInSlot();

Post połączony: 2016-10-11, 22:08
Do zamknięcia.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry