Ikarus (Pakiet skryptów) 415331 1020

O temacie

Autor orcwarrior

Zaczęty 11.06.2010 roku

Wyświetleń 415331

Odpowiedzi 1020

Splash

Splash

Moderator
posty4212
Propsy3414
ProfesjaNierób
  • Moderator
Spróbuj 64.
 
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
I ku mojemu zdziwieniu...

Ładne wartości :D Chyba teraz można zrobić KOLIZJĘ ? @Splash odpowiedz o tej kolizji xD
 

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

Splash

Splash

Moderator
posty4212
Propsy3414
ProfesjaNierób
  • Moderator
Serio, jeszcze na to nie wpadłeś? Tyle dałem podpowiedzi, a ty jeszcze nie wiesz? Gratt podał ci właśnie fragment kodu, który zawiera odpowiedź na twoje pytanie. Gdybym mówił wszystko wprost, to miałbym 10x więcej spamu na PW niż obecnie od "modderów", co nawet nie wiedzą co to zmienna albo warunek.
 
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
Wiedziałem że się da. Zrobiłem to też wcześniej za pomocą skryptu orka. Jednak wolałem się upewnić... Niż potem znowu pisać że np. "Trafiam npc gdy jest nawet 100m dalej...".
 

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

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Czy jest jakaś funkcja która napisze mi nazwę pointera ? MEM_GetClassName(MEM_ReadInt(ptr+72));
Crashuje a samo MEM_GetClassName pokazuje mi klasę oCVisualFX której pointery za nic się nie zgadzają :I
 

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

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Nazwa wskaźnika jest właściwie niepotrzebna, bardziej przydatna jest informacja o adresie, na który wskazuje wskaźnik.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Właśnie nie wiem jak się do tego dobrać :/ Sama klasa która niby to przechowuje to niby oCVisualFX. Zaś wskaźniki jakimś cudem przedstawiają Trafo...
Chodzi mi o skrypt orka:
MEM_ReadInt(R_SWDDMG_PTR+60);
R_SWDDMG_PTR wskazuje ocVisualFX ale to nie pasuje. Bardziej pasuje do zCVob...
 

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.
Może spróbuj MEM_GetClassName(MEM_ReadInt(R_SWDDMG_PTR+60));

Jeśli nie to druga opcja: MEM_ReadString(MEM_GetClassName(R_SWDDMG_PTR+60));


Możesz też pokombinować z zCClassDef:
   var zCClassDef class;
   class = _^(MEM_GetClassDef(ptr));
zCClassDef jest w pliku Misc.d
 
: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
Kombinowałem "odwrotnie " :F za pomocą Floats32ToString napisałem dwa printy:
Prints(ConcatStrings("zCVisualFX - trafoObjToWorld[0]  = ",float32tostring(MEM_ReadInt(Collide_Ptr+60))));
Prints(ConcatStrings("zCVob righthand - trafoObjToWorld[0]  = ",float32tostring(itm.trafoObjToWorld[0])));

Jednak dane się nie zgadzają :I Nie wiem co pozostaje w tym wypadku zrobić :I
 

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

Splash

Splash

Moderator
posty4212
Propsy3414
ProfesjaNierób
  • Moderator
Oszczędzę wam trudu. Nie da się tego zrobić.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Można inaczej:

MEM_Compare(ptr1+60, ptr2+60, 16);
ptr1 = _@(vob1);
ptr2 = _@(vob2);

Wiem, co próbujesz, chcesz porównać trafo dwóch vobów.

Info: MEM_Compare tylko sprawdza, czy wartości są równe. Da się to łatwo przerobić.
 
: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
Podobnie pomyślałem :D Efekt jest w 100% identyczny. Tylko ja użyłem starego poczciwego PrintScreen i Floats.
Wartości wypisały się na ekranie i są identyczne!

Po lewej wartości funkcji OrcWarriora. Po lewej zaś mojej.
Kod dla ciekawskich:
func void Print_All_Damage_Values()
{

var int m11,var int m14;
var int m21,var int m24;
var int m31,var int m34;

m11 =  MEM_ReadInt(Collide_Ptr+60);
m14 =  MEM_ReadInt(Collide_Ptr+72);

m21 =  MEM_ReadInt(Collide_Ptr+76);
m24 =  MEM_ReadInt(Collide_Ptr+88);

m31 =  MEM_ReadInt(Collide_Ptr+92);
m34 =  MEM_ReadInt(Collide_Ptr+104); 

printscreen("OrcWarrior",12,10,"font_default.tga",1);
printscreen(ConcatStrings("M11 = ",Float32ToString(m11)),10,13,"font_default.tga",10);
printscreen(ConcatStrings("M14 = ",Float32ToString(m14)),10,16,"font_default.tga",10);
printscreen(ConcatStrings("M21 = ",Float32ToString(m21)),10,19,"font_default.tga",10);
printscreen(ConcatStrings("M24 = ",Float32ToString(m24)),10,22,"font_default.tga",10);
printscreen(ConcatStrings("M31 = ",Float32ToString(m31)),10,25,"font_default.tga",10);
printscreen(ConcatStrings("M34 = ",Float32ToString(m34)),10,28,"font_default.tga",10);

var int pItem; pItem = GetSlotItem(hero,"ZS_RIGHTHAND");

if(pItem)
{

var int trafo_her; trafo_her = GetNodeTrafo(hero,"ZS_RIGHTHAND");
Set_TrafoObjToWorld(pItem,trafo_her);

var zCVob itm; itm = _^(pItem);

var int a1; a1 = itm.trafoObjToWorld[0];
var int a2; a2 = itm.trafoObjToWorld[3]; 
var int a3; a3 = itm.trafoObjToWorld[4]; 
var int a4; a4 = itm.trafoObjToWorld[7]; 
var int a5; a5 = itm.trafoObjToWorld[8]; 
var int a6; a6 = itm.trafoObjToWorld[11]; 


printscreen("My code",52,10,"font_default.tga",1);
printscreen(ConcatStrings("M11 = ",Float32ToString(a1)),50,13,"font_default.tga",10);
printscreen(ConcatStrings("M14 = ",Float32ToString(a2)),50,16,"font_default.tga",10);
printscreen(ConcatStrings("M21 = ",Float32ToString(a3)),50,19,"font_default.tga",10);
printscreen(ConcatStrings("M24 = ",Float32ToString(a4)),50,22,"font_default.tga",10);
printscreen(ConcatStrings("M31 = ",Float32ToString(a5)),50,25,"font_default.tga",10);
printscreen(ConcatStrings("M34 = ",Float32ToString(a6)),50,28,"font_default.tga",10);
};

};

Rzecz jasna funkcje są gdzieś w dziale z Ikarusem.
 

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.
404: Collide_Ptr not found.
tak tylko, żebyś wiedział.
 
: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
 

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.
Chwila. Czy mi się zdaje, czy w twoim (i zapewne tym z CZ) skrypcie używasz vfx jako ptr do ofiary? :F
Przy małych ilościach przeciwników się to sprawdzi, to na pewno, ale przy większych ilościach (5+), lub przy gorszych komputerach gra będzie w cholerę spowolniona. Moim zdaniem, lepiej pobawić się z voblist lub pojechać na dłuższą metę i użyć B_DetectNPC(). Sam PFX i VFX używają opcji voblisty (a dokładnie to coś a'la voblisty, jest to po prostu porównywalne w działaniu) ORAZ wypuszczają efekt cząsteczkowy, co skutkuje spadkiem fps. Nawet jeśli czar (efekt) jest wywoływany bez wyglądu (czyli ppsvalue jest zerowe), tekstura oraz wszystkie potrzebne rzeczy do VFXów są wypełniane i używane. Nie polecam!
 
: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
Ja używam tego :F
func int GetSlotItem (var C_NPC slf, var string slotName)
{
    CALL_zStringPtrParam (slotName);
    CALL__thiscall (MEM_InstToPtr (slf), 7544560);
    return CALL_RetValAsPtr ();
};

func int GetNodeTrafo(var int npc, var string node)
{
const int zMAT4_GetTrafoNode = 6310240; //0x00604960
CALL_RetValIsStruct (64);
CALL_zStringPtrParam(node);
CALL__thiscall(MEM_InstToPtr(npc),zMAT4_GetTrafoNode);
return CALL_RetValAsPtr ();
};

func void Set_TrafoObjToWorld(var int ptr, var int trafo)
{
const int zCVob_SetTrafoOBJ   =      6405248; //0x0061BC80
CALL_IntParam(trafo);
CALL__thiscall(ptr,zCVob_SetTrafoOBJ);
};

func int GetItemWorldPosition(var int vptr)
{
const int zCVob_GetPosInWorld = 5430416; //0x0052DC90
CALL_RetValIsStruct (12);
CALL__thiscall(vptr,zCVob_GetPosInWorld);
return CALL_RetValAsPtr ();
};
 

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.
Jeśli ktoś potrzebuje sprawdzać FPSy:
var string fps; fps = Float32ToString(invf(divf(MEM_Timer.frameTimeFloat, 1000)));
Print(fps);

Można też MEM_Game.game_frameinfo = true;, ale wyłącza się to co zapis, oraz pokazuje ilość załadowanych trójkątów (albo modeli? nie jestem pewien).
 
: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.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Pobawiłem się dzisiaj troszkę klasą zCClassDef I mam dla was parę funkcji, które mniej lub więcej się mogą przydać:

Pobieranie wielkości pointera (ile bajtów ma pointer):
func int MEM_GetPtrSize(var int ptr)
{
var int ptrClass; ptrClass = MEM_GetClassDef(ptr);
return MEM_ReadInt(ptrClass+28);
};

Sprawdzanie czy pointer to jakiś objekt:

var int zCLASS_FLAG_SHARED_OBJECTS = 1<<0;

func int MEM_CheckIfPtrIsAnObject(var int ptr)
{
var int ptrClass; ptrClass = MEM_GetClassDef(ptr);

if (MEM_ReadInt(ptrClass+24) & zCLASS_FLAG_SHARED_OBJECTS)
{
return true;
};
return false;
};

Sprawdzanie, ile objektów jest w tym pointerze:

func int MEM_CheckObjectsQuantity(var int ptr)
{
var int ptrClass; ptrClass = MEM_GetClassDef(ptr);
return MEM_ReadInt(ptrClass+32);
};

Ile razy jest ten pointer wywoływany:

func int MEM_CheckObjectsSectorsCalled(var int ptr)
{
var int ptrClass; ptrClass = MEM_GetClassDef(ptr);
return MEM_ReadInt(ptrClass+36);
};

Najbardziej przydatne są MEM_GetPtrSize oraz MEM_CheckIfPtrIsAnObject. Reszta raczej nie.
 
: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.

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
Only classes with the flag zCLASS_FLAG_SHARED_OBJECTS keep track of their count (or quantity, whatever you want to call it). Sadly not many actually useful classes have this flag (it's mostly for resource management).

Also not all pointers/classes actually have a zCClassDef, so if you don't check for a valid zCClassDef pointer, you return more or less random memory (0+28 probably). This should always be allocated so I assume it won't crash, but it's bad thing to do anyway.

Check the zCClassDef pointer and return -1 if it doesn't exist.

I don't know of what use MEM_CheckIfPtrIsAnObject() could be, but in any case it would only work for classes that have the shared-flag.

Edit: It's even worse, MEM_GetClassDef() has basically no sanity checks, so if you call for a random memory address, it could either crash or just return random nonsense.

It's incredibly hard to determine whether a certain memory address is actually the start of an object and a two-liner simply will not cut it.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Ktoś wie może jaki jest adres funkcji odpowiedzialnej za to że strzała leci w ścianę ang."Shoot in wall" Gratt kiedyś mi napisał, że można osiągnąć ciekawy efekt gdy uda się dobrać do niej. Lecz nie wiem gdzie można ją znaleźć (jaka klasa etc.)
 

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


0 użytkowników i 3 gości przegląda ten wątek.
0 użytkowników
Do góry