Apprentice
Die Klasse VisualFX verstehen und dokumentieren
Da ich weder in den Ikarus und LeGo Paketen noch im Forum eine vollständige Doku zur Klasse VisualFX finden konnte, wollte ich hier mal die Schwarmintelligenz anschalten, damit wir das bewältigen können.
Vielleicht hat sich ja schon jemand die Mühe gemacht und möchte seine Dokumentation hier teilen? Oder jemand hat schon viel rumprobiert und kann zu vielen Funktionen etwas sagen.
Bisher habe ich alle Methoden von Lehonas Liste rausgeschrieben und ein paar wenige Variablen aus der Gothic Funktionen Tabelle und diese hier sortiert.
Der Code ist bisher auch nur in C++, da ich gerade am GMP arbeite, aber den Code in Daedalus umzuschreiben sollte nicht schwer sein.
Ziel soll es sein am Ende eine .d Datei zu haben, die in Ikarus eingebunden werden könnte und eine Übersicht zu den Offsets der einzelnen Member-Variablen und -Methoden bietet.
Spoiler:(zum lesen bitte Text markieren)
Code:
class oCVisualFX : public zCEffect
{
oCVisualFX() { } // 0x00489AA0
virtual ~oCVisualFX(void); // 0x0048A260
private:
static zCClassDef classDef; // 0x008CE658
static zCObject* _CreateNewInstance(void); // 0x0049A230
virtual class zCClassDef* _GetClassDef(void) const; // 0x0048A010
virtual void CreateHierachy(void); // 0x0048ADF0
virtual void DisposeHierachy(void); // 0x0048B0B0
virtual void CreateInvestFX(void); // 0x00491510
virtual void InitInvestFX(void); // 0x00491690
virtual void StopInvestFX(void); // 0x00491830
virtual void AdjustShapeToOrigin(); // 0x00498EE0
virtual void CalcPFXMesh(); // 0x00499B60
virtual void ReleasePFXMesh(void); // 0x00499D10
virtual int CheckDelayedTrigger(); // 0x00498B70
virtual int ProcessCollision(zSVisualFXColl&); // 0x004958D0
virtual int ProcessQueuedCollisions(void); // 0x00495830
virtual void UpdateActKey(void); // 0x00497300
virtual void UpdateEffects(void); // 0x004994A0
protected:
virtual void InitEffect(void); // 0x004943E0
virtual void InitValues(void); // 0x0048B820
// executed when VFX projectile collides with world or vob
void Collide(int i); // 0x00493A00
void CollisionResponse(const zVEC3& vec, int i); // 0x00496380
virtual oCVisualFX* CreateAndCastFX(zSTRING const&, zCVob const*, zCVob const*); // 0x0048EE80
virtual oCVisualFX* CreateAndCastFX(zSTRING const&, zMAT4 const&); // 0x0048F1E0
virtual void CreateBackup(void); // 0x0048E5F0
virtual void CalcTrajectory(const int); // 0x0048F620
virtual void DoMovements(void); // 0x00497550
virtual void EndEffect(int); // 0x00494C80
virtual void SetVisualByString(const zSTRING&); // 0x0048C220
virtual int CheckDeletion(); // 0x00496CF0
virtual void CleanUpCriticalFX(); // 0x0048AC00
public:
static oCVisualFX* actFX; // 0x008CE7EC
static zCParser* fxParser; // 0x008CE6EC
/* static methods */
static void InitParser(void); // 0x0048B3F0
static void ExitParser(void); // 0x0048B7F0
static void CreateNewScriptFX(zSTRING const&); //0x0049ADB0
static void RemoveInstancesOfClass(zCClassDef&, int); // 0x00489A10
static void SetupAIForAllFXInWorld(void); // 0x004898B0
/* console */
static int EmConsole_EvalFunc(zSTRING const&, zSTRING&); // 0x0049D180
static void EmConsole_ParameterChanged(zSTRING const&); // 0x0049C290
static int FxConsole_EvalFunc(zSTRING const&, zSTRING&); // 0x0049C4D0
static void FxConsole_ParameterChanged(zSTRING const&); // 0x0049B620
/* processing */
static void PreSaveGameProcessing(int); // 0x00489A80
static void PostSaveGameProcessing(void); // 0x00489A90
/* Wld_PlayEffect() */
// CreateAndPlay from vob to vob
static oCVisualFX* CreateAndPlay(const zSTRING& _id, const zCVob* _origin, const zCVob* _target = 0, const int _level = 1, const float _damage = 0, const int _damageType = 0, const zBOOL _bIsProjectile = 0); // 0x0048E760
// CreateAndPlay from position to vob
static oCVisualFX* CreateAndPlay(const zSTRING& _id, const zVEC3& _originPos, const zCVob* _target = 0, const int _level = 1, const float _damage = 0, const int _damageType = 0, const zBOOL _bIsProjectile = 0); // 0x0048EA80
/* Init */
virtual void Init(const zCArray<zCVob*>&); // 0x004926A0
virtual void Init(const zCVob*, const zCVob*, const zCVob*); // 0x00491F20
virtual void Init(const zCVob*, const zVEC3&); // 0x00491E10
/* Archive */
virtual void Archive(zCArchiver&); // 0x00499B40
virtual void Unarchive(zCArchiver&); // 0x00499B50
/* callback */
virtual void OnTick(void); // 0x00499A20
/* editing */
virtual void Open(); // 0x004918E0
virtual void Edit(void); // 0x0049A820
virtual zSTRING const& GetName(void); // 0x006742F0
virtual void ParseStrings(void); // 0x0048BE60
virtual void Reset(); // 0x00491C20
virtual void ResetForEditing(); // 0x0049E950
virtual void SetByScript(const zSTRING&); // 0x0048D4B0
/* control */
virtual void Play(float, const zMAT4*, const zMAT4*); // 0x0048A050
// stop script (daedalus):
// https://forum.worldofplayers.de/foru...1#post25548652
// stops the effect instantly
void Stop(int stop) // must be 1 // 0x00493BE0
void Kill(); // 0x00493F70
/* key */
virtual int FindKey(zSTRING const&); // 0x0048E600
virtual void UpdateFXByEmitterKey(oCEmitterKey*); // 0x0048DDC0
/* visual */
virtual void SetShowVisual(int); // 0x00494D20
virtual void SetPFXShapeVisual(zCVisual*, int); // 0x00499DF0
virtual void SetupEmitterKeysByVisual(void); // 0x0049E8B0
/* settings */
virtual void SetOrigin(zCVob *, int); // 0x004910F0
virtual void SetTarget(zVEC3 &, int); // 0x00491450
virtual void SetTarget(zCVob *, int); // 0x004912E0
virtual void SetInflictor(zCVob *); // 0x00491220
virtual void SetLevel(int, int); // 0x00492CB0
virtual zCVob *GetOrigin(); // 0x0048A020
virtual zCVob *GetTarget(); // 0x0048A030
virtual zCVob *GetInflictor(); // 0x0048A040
virtual int GetLevel(); // 0x00493150
// e.g. a fireball is a projectile, firerain isn't
// @return this->bIsProjectile
zBOOL GetIsProjectile(); // 0x0048A1D0
virtual void SetIsProjectile(int); // 0x0048A1E0
zBOOL IsFinished(); // 0x004942F0
virtual zBOOL CanBeDeleted(); // 0x004942B0
virtual zBOOL IsLooping(); // 0x00494370
virtual void SetDuration(float); // 0x0048A060
/* Collision */
virtual zBOOL CanThisCollideWith(zCVob*); // 0x00496AC0
virtual void ReportCollision(const zCCollisionReport &); // 0x00494E80
virtual void SetCollisionEnabled(int); // 0x0048D330
virtual void SetCollisionCandidates(zCArray<zCVob *>); // 0x004968E0
virtual void GetCollisionCandidates(zCArray<zCVob *> &); // 0x0048A070
virtual int GetNumCollisionCandidates(); // 0x0048A110
zBOOL GetCollidedCandidates(zCArray<zCVob*>& candidates); // 0x00496A00
/* Damage */
virtual void SetDamage(float); // 0x0048A120
virtual void SetDamageType(int); // 0x0048A130
virtual float GetDamage(); // 0x0048A140
virtual int GetDamageType(); // 0x0048A150
/* Spell */
virtual zBOOL IsASpell(); // 0x0048A160
virtual void SetSpellType(int); // 0x0048A170
virtual int GetSpellType(); // 0x0048A180
virtual void SetSpellCat(int); // 0x0048A190
virtual int GetSpellCat(); // 0x0048A1A0
virtual int GetSpellTargetTypes(); // 0x0048A1B0
virtual void SetSpellTargetTypes(int); // 0x0048A1C0
virtual zBOOL GetSendsAssessMagic(); // 0x0048B350
virtual void SetSendsAssessMagic(int); // 0x0048B2C0
virtual void InvestNext(); // 0x00492830
virtual void Cast(int); // 0x00493160
// operator delete(void*); // 0x00474E50
};
Apprentice
Nützliche Erkenntnis:
Mir ist gerade eingefallen, dass VisualFX ja auch von zCEffect erbt (eigtl eine leere Klasse), die wiederrum von zCVob erbt. Heißt: Man kann für diese Klasse auch alle public Vob-Methoden und Attribute nutzen. Habe das gerade mit Positionsabfragen probiert und das funktioniert wunderbar!
Berechtigungen
Neue Themen erstellen: Nein
Themen beantworten: Nein
Anhänge hochladen: Nein
Beiträge bearbeiten: Nein