Funkcja sprawdzająca czy NPC wykonał animację 348 11

O temacie

Autor Adanos

Zaczęty 19.11.2016 roku

Wyświetleń 348

Odpowiedzi 11

Adanos

Adanos

Administrator
Szara eminencja
posty4963
Propsy3434
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Czy ktoś kojarzy taką funkcję, która sprawdza, czy dany NPC skończył już wykonywać animację?

Siemekk

Siemekk

Złote Wrota
Szlachcic
posty1643
Propsy457
ProfesjaSkrypter
  • Złote Wrota
  • Szlachcic
W samej grze nie istnieje, ale można ją stworzyć dzięki Ikarusowi lub własnej DLL.
W klasach znalazłem to:
int IsAniActive(zSTRING const&)
{
XCALL(0x005A6A40);
};
Nie wiem tylko jak podać ptr, jako obiekt zCMorphMeshProto.
 
Nie mam nic przeciwko jeśli poprosisz o pomoc...
Tylko jak już prosisz to nie proś o podstawy lub Ikarusa & LeGo gdy nie znasz nawet podstaw.
Moje skrypty:
Dwa ostrza

Splash

Splash

Użytkownicy
And i said...
posty3451
Propsy2405
ProfesjaSkrypter
  • Użytkownicy
  • And i said...
zCMorphMesh to animowane modele jak łuki i kusze.
 
Bardzo bym prosił o niezawracanie mi głowy na PW problemami dotyczącymi podstaw w moddingu. Nie jestem tu jedyną osobą, która potrafi pomóc.

Mark56

Mark56

Moderator
som veľký magič
posty1591
Propsy1722
ProfesjaAnimator
  • Moderator
  • som veľký magič
@Adanos v Czasie zapłaty, orc ma funkcje do odczytania nazwy aktualnej animacji. Nie powinno być problemem zrobić sobie perframe sprawdzanie.
 Jak się nazwa zmieni, to wiesz ze animacja była ukończona albo przerwana.
Jeszcze lepsze było by sprawdzać tez numer aktualnej klatki.
 


Adanos

Adanos

Administrator
Szara eminencja
posty4963
Propsy3434
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Pamiętasz może nazwę tej funkcji? :D

Ok, znalazłem: oCAniCtrl__GetCurrentAniName. Potem ją obczaję, czy będzie działać w G2.

Splash

Splash

Użytkownicy
And i said...
posty3451
Propsy2405
ProfesjaSkrypter
  • Użytkownicy
  • And i said...
Tak, to ona. Sprawdzałem ją kiedyś i nie wiadomo czemu Gothic 2 crashował się przy animacji odskoku w tył z wyciągniętą bronią.
 
Bardzo bym prosił o niezawracanie mi głowy na PW problemami dotyczącymi podstaw w moddingu. Nie jestem tu jedyną osobą, która potrafi pomóc.

Siemekk

Siemekk

Złote Wrota
Szlachcic
posty1643
Propsy457
ProfesjaSkrypter
  • Złote Wrota
  • Szlachcic
Jest prostszy sposób na sprawdzenie czy animacja jest aktywna.
func int oCNpc_GetModel(var int npc)
{
    CALL__thiscall(MEM_InstToPtr((npc)), oCNpc__GetModel);
    return CALL_RetValAsInt();
};

 
 func int AniIsActive(var c_npc slf, var string aniname)
 {
var int ptr; ptr = oCNpc_GetModel(slf);
const int zCModel_AniIsActive = 5727888;//0x00576690

CALL_zStringPtrParam(Str_Upper(aniname));
CALL__thiscall(ptr,zCModel_AniIsActive);
return CALL_RetValAsInt();
};

Chyba będzie wiadomo jak tego użyć ;) , ale dzięki temu tematowi mam funkcje która pomoże mi naprawić bugi związane ze sprintem ;)
 
Nie mam nic przeciwko jeśli poprosisz o pomoc...
Tylko jak już prosisz to nie proś o podstawy lub Ikarusa & LeGo gdy nie znasz nawet podstaw.
Moje skrypty:
Dwa ostrza

Adanos

Adanos

Administrator
Szara eminencja
posty4963
Propsy3434
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Wygląda, że działa, ale będę musiał to jeszcze przetestować. Nie wiedziałem, skąd wziąć wartość oCNpc__GetModel, ale znalazłem: http://themodders.org/index.php?topic=10383.msg1256053#msg1256053

Siemekk

Siemekk

Złote Wrota
Szlachcic
posty1643
Propsy457
ProfesjaSkrypter
  • Złote Wrota
  • Szlachcic
Trochę nie doczytałem :F Ta funkcja sprawdza czy ANIMACJA JEST AKTYWNA W TYM MOMENCIE i zawraca wartość. Najlepiej wywołać "perframe" i sprawdzać prostym "if". Najlepszy efekt(który chcesz osiągnąć) osiągniesz dobierając się do klasy zCModelActive. Struktura:
class zCModelAniActive
{
public:
zCModelAni* m_pAni; //0
zCModelAni* m_pFollowAni; //4
int m_nDirect; //8
float m_fCurFrame; //C
int m_nCurEvent; //10
float m_fCombineX; //14
float m_fCombineY; //18
BOOL m_bFadeOut; //1C
BOOL m_bStarting; //20
zCModelAni* m_pEndAni; //24
float m_fBlendIn; //28
float m_fBlendOut; //2C
zVEC3 m_vPrevPos; //30
zVEC3 m_vNextPos; //3C
zCQuat m_qtPrev; //48
zCQuat m_qtNext; //58
zCQuat m_qtRorate; //68
BOOL m_bRotating; //78
float m_fNumberAni; //7C
void* m_pAttach; //80
float m_fAttachTimer; //84
zCModelAniActive(void)
{
XCALL(0x00576B00);
};

~zCModelAniActive(void)
{
XCALL(0x00576BF0);
};

void SetDirection(zTMdl_AniDir)
{
XCALL(0x00576C10);
};

float GetProgressPercent(void)const
{
XCALL(0x00576C60);
};

void SetProgressPercent(float)
{
XCALL(0x00576CA0);
};

void SetActFrame(float)
{
XCALL(0x00576CF0);
};

void DoCombineAni(zCModel*,int,int)
{
XCALL(0x0057FDB0);
};
};
Chyba ten wskaźnik powinien wystarczyć ;) -m_pEndAni
To chyba najlepszy adres by dostać się do klasy, problem w tym, że nie wiem gdzie szukać funkcji GetActiveAni :I
zCModelAniActive * __thiscall zCModel::GetActiveAni(int)const        0x0057AB60 0 5 public: zCModelAniActive * __thiscall zCModel::GetActiveAni(int)const
 
Nie mam nic przeciwko jeśli poprosisz o pomoc...
Tylko jak już prosisz to nie proś o podstawy lub Ikarusa & LeGo gdy nie znasz nawet podstaw.
Moje skrypty:
Dwa ostrza

pawbuj

pawbuj

Użytkownicy
posty1262
Propsy86
ProfesjaSkrypter
  • Użytkownicy
Jest prostszy sposób na sprawdzenie czy animacja jest aktywna.
func int oCNpc_GetModel(var int npc)
{
    CALL__thiscall(MEM_InstToPtr((npc)), oCNpc__GetModel);
    return CALL_RetValAsInt();
};

 
 func int AniIsActive(var c_npc slf, var string aniname)
 {
var int ptr; ptr = oCNpc_GetModel(slf);
const int zCModel_AniIsActive = 5727888;//0x00576690

CALL_zStringPtrParam(Str_Upper(aniname));
CALL__thiscall(ptr,zCModel_AniIsActive);
return CALL_RetValAsInt();
};

Chyba będzie wiadomo jak tego użyć ;) , ale dzięki temu tematowi mam funkcje która pomoże mi naprawić bugi związane ze sprintem ;)
ma ktoś adresy do g1, żeby to działało na pierwszym gothicu?
 
Gothic 1 UpdatePack fixmod 0.1 wkrótce!

Splash

Splash

Użytkownicy
And i said...
posty3451
Propsy2405
ProfesjaSkrypter
  • Użytkownicy
  • And i said...
Znalezienie tych adresów zajęło mi 5 minut. To nie jest takie trudne, jak się wydaje.
00695300: oCNpc::GetModel
0055CEF0: zCModel::IsAnimationActive
 
Bardzo bym prosił o niezawracanie mi głowy na PW problemami dotyczącymi podstaw w moddingu. Nie jestem tu jedyną osobą, która potrafi pomóc.

pawbuj

pawbuj

Użytkownicy
posty1262
Propsy86
ProfesjaSkrypter
  • Użytkownicy
Znalezienie tych adresów zajęło mi 5 minut. To nie jest takie trudne, jak się wydaje.
00695300: oCNpc::GetModel
0055CEF0: zCModel::IsAnimationActive

dzięki, skorzystałem ze skryptów CZ i tez działa.

Post połączony: 2017-01-06, 14:42
 
Gothic 1 UpdatePack fixmod 0.1 wkrótce!


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