-
Wieso funktionieren magische Waffen eigentlich nur für den Helden?
Ich habe mich am Klaue Beliars Skript orientiert um eine magische Waffe zu erstellen, welche ein sehr starker Gegner tragen soll. Die funktioniert auch, aber halt nur wenn der HELD sie benutzt. Vorgehen war komplett analog zur Klaue Beliars mit Eintrag in die B_AssessDamage und B_MM_AssessDamage. Ich habe sogar extra die Abfrage im Schadens-Skript entfernt, welche abfragt, ob der hero die Waffe trägt. Egal, das Teil tut nur dann was es soll wenn der hero sie schwingt. Bei NPCs passiert grundsätzlich gar nichts (es sei denn ich übernehme den NPC im Marvin-Mode). Interessanterweise macht die Waffe auch keinen Schaden GEGEN den Helden oder PC_Rockefeller, aber klassentechnisch sind das auch nur NPC_Default. Wo wird das denn geregelt? Ich habe versucht herauszufinden wie das im Original mit Ravens Version von der Klaue gemacht wurde, aber ich konnte nichts finden.
Code:
func int C_IsItemKT(var C_Item weapon)
{
if Hlp_IsItem(weapon, ItMw_TestMag)
{
return TRUE;
};
return FALSE;
};
func int C_ScHasReadiedKT (var C_NPC oth)
{
var C_ITEM ReadyWeap; ReadyWeap = Npc_GetReadiedWeapon(oth);
if (C_IsItemKT(ReadyWeap))
{
return TRUE;
};
return FALSE; //DEFAULT
};
func int C_ScHasEquippedKT (var C_NPC oth)
{
var C_ITEM EquipWeap; EquipWeap = Npc_GetEquippedMeleeWeapon(oth);
if (C_IsItemKT(EquipWeap))
{
return TRUE;
};
return FALSE; //DEFAULT
};
func void KT_Feuerschaden(var C_NPC slf)
{
Npc_ChangeAttribute(slf, ATR_HITPOINTS, -1);
};
func void B_TestMag_DMG (var C_NPC oth, var C_NPC slf) //other ist angreifer, slf ist victim
{
var int DamageRandy;
DamageRandy = Hlp_Random(100);
if (C_ScHasReadiedKT(oth))
&& (DamageRandy <= 50)
{
if (slf.attribute[ATR_HITPOINTS] < 200)
{
AI_PlayAni (slf, "S_FIRE_VICTIM");
};
if (slf.attribute[ATR_HITPOINTS] < 50)
{
Npc_StopAni (slf, "S_FIRE_VICTIM");
};
Wld_PlayEffect("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE );
B_MagicHurtNpc (oth, slf, 100);
FF_ApplyExtGT(KT_Feuerschaden,500,50);
};
if (C_ScHasReadiedKT(oth))
&& (DamageRandy > 50)
{
Wld_PlayEffect("spellFX_CHARGEFIREBALL_INVEST_BLAST1", oth, oth, 0, 0, 0, FALSE );
};
};
Geändert von Buzz Killington (16.03.2025 um 22:30 Uhr)
-
Gebe dir mal aus wer slf und other wirklich ist jeweils, wenn der NPC die Waffe schwingt. Ich vermute dort den Fehler.
-
In ELEX haben viele Gegner magische Waffen, kann man es sich da abgucken?
-
 Zitat von neocromicon
Gebe dir mal aus wer slf und other wirklich ist jeweils, wenn der NPC die Waffe schwingt. Ich vermute dort den Fehler.
Ich habe einfach die Instanz-IDs abgefragt, allerdings werden die auch nur ausgegeben wenn ich als Hero die Waffe benutze und auch nicht wenn ich einen PC_Hero oder PC_Rockefeller angreife. Scheinbar wird in der AssessDamage nur der Fall geregelt wenn der Held angreift, aber ich kann es mir einfach nicht erklären wo, wie und warum das genau gemacht wird.
 Zitat von Ajanna
In ELEX haben viele Gegner magische Waffen, kann man es sich da abgucken?
Könnte man theoretisch wenn die auch Daedalus verwendet haben und man die Skripte hätte. In DNDR wurde das mit der Klaue Beliars ja aber auch gemacht, und hier finde ich das Skript für Ravens Version davon einfach nicht. Das hat ja sehr wohl gegen den Helden funktioniert. Mein Problem ist nur, dass diese AssessDamage den Schaden aus irgendeinem mir unklaren Grund nur für "Held benutzt die Waffe gegen nicht Held oder Rockefeller" abfragt, wobei ich derzeit äußerst ratlos bin, wo und wie das gemacht wird (und wozu). Nach der Logik dürfte der Held ja von nichts Schaden nehmen (wobei Logik und ich zugegeben nicht die besten Freunde sind).
Lange Rede kurzer Sinn: Schwingt ein NPC die Waffe, funktioniert sie einfach nicht. Abgesehen vom normalen Waffenschaden.
EDIT: Für die Klaue Beliars gilt das übrigens genauso, habe sie auch mal einem NPC in die Hand gedrückt. Funktioniert nur wenn der Hero sie benutzt gegen nicht-Hero und nicht-Rockefeller. Könnte es was damit zu tun haben, dass Hero und Rockefeller ID = 0 und keine Flags haben? Ich habe leider keine Ahnung wo die genau definiert sind und welchen Einfluss sie haben könnten, aber vielleicht ist das ein Hinweis.
Geändert von Buzz Killington (17.03.2025 um 17:17 Uhr)
-
In solchen Situationen würde ich:
- schauen, welcher Code tatsächlich ausgeführt wird und wo eine Abfrage nicht den gedachten Wert zurückgibt, bzw. welche Zeile Code genau einfach nichts macht, obwohl sie ausgeführt wird (meistens mache ich das, in dem ich diverse unterschiedliche Prints überall in der jeweiligen Funktion einbaue)
- die eigene Schadensberechnung als Alternative in Betracht ziehen https://forum.worldofplayers.de/foru...densberechnung
-
 Zitat von Buzz Killington
Ich habe mich am Klaue Beliars Skript orientiert um eine magische Waffe zu erstellen, welche ein sehr starker Gegner tragen soll. Die funktioniert auch, aber halt nur wenn der HELD sie benutzt. Vorgehen war komplett analog zur Klaue Beliars mit Eintrag in die B_AssessDamage und B_MM_AssessDamage. Ich habe sogar extra die Abfrage im Schadens-Skript entfernt, welche abfragt, ob der hero die Waffe trägt. Egal, das Teil tut nur dann was es soll wenn der hero sie schwingt. Bei NPCs passiert grundsätzlich gar nichts (es sei denn ich übernehme den NPC im Marvin-Mode). Interessanterweise macht die Waffe auch keinen Schaden GEGEN den Helden oder PC_Rockefeller, aber klassentechnisch sind das auch nur NPC_Default. Wo wird das denn geregelt? Ich habe versucht herauszufinden wie das im Original mit Ravens Version von der Klaue gemacht wurde, aber ich konnte nichts finden.
Code:
func int C_IsItemKT(var C_Item weapon)
{
if Hlp_IsItem(weapon, ItMw_TestMag)
{
return TRUE;
};
return FALSE;
};
func int C_ScHasReadiedKT (var C_NPC oth)
{
var C_ITEM ReadyWeap; ReadyWeap = Npc_GetReadiedWeapon(oth);
if (C_IsItemKT(ReadyWeap))
{
return TRUE;
};
return FALSE; //DEFAULT
};
func int C_ScHasEquippedKT (var C_NPC oth)
{
var C_ITEM EquipWeap; EquipWeap = Npc_GetEquippedMeleeWeapon(oth);
if (C_IsItemKT(EquipWeap))
{
return TRUE;
};
return FALSE; //DEFAULT
};
func void KT_Feuerschaden(var C_NPC slf)
{
Npc_ChangeAttribute(slf, ATR_HITPOINTS, -1);
};
func void B_TestMag_DMG (var C_NPC oth, var C_NPC slf) //other ist angreifer, slf ist victim
{
var int DamageRandy;
DamageRandy = Hlp_Random(100);
if (C_ScHasReadiedKT(oth))
&& (DamageRandy <= 50)
{
if (slf.attribute[ATR_HITPOINTS] < 200)
{
AI_PlayAni (slf, "S_FIRE_VICTIM");
};
if (slf.attribute[ATR_HITPOINTS] < 50)
{
Npc_StopAni (slf, "S_FIRE_VICTIM");
};
Wld_PlayEffect("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE );
B_MagicHurtNpc (oth, slf, 100);
FF_ApplyExtGT(KT_Feuerschaden,500,50);
};
if (C_ScHasReadiedKT(oth))
&& (DamageRandy > 50)
{
Wld_PlayEffect("spellFX_CHARGEFIREBALL_INVEST_BLAST1", oth, oth, 0, 0, 0, FALSE );
};
};
Npc_ChangeAttribute und B_MagicHurtNpc beziehen sich dann auf den Helden?
-
 Zitat von Ajanna
Npc_ChangeAttribute und B_MagicHurtNpc beziehen sich dann auf den Helden?
Sie beziehen sich auf einen NPC, im Skript sollte "other" der Angreifer und "self" das Opfer sein, also hätte der Held "self" sein sollen wenn ein NPC die Waffe benutzt.
 Zitat von Milky-Way
In solchen Situationen würde ich:
- schauen, welcher Code tatsächlich ausgeführt wird und wo eine Abfrage nicht den gedachten Wert zurückgibt, bzw. welche Zeile Code genau einfach nichts macht, obwohl sie ausgeführt wird (meistens mache ich das, in dem ich diverse unterschiedliche Prints überall in der jeweiligen Funktion einbaue)
- die eigene Schadensberechnung als Alternative in Betracht ziehen https://forum.worldofplayers.de/foru...densberechnung
1. Ja, das ist auch was ich probiere; ich konnte hier nur einfach keine Stelle festmachen wo ich hätte diese Printbefehle "einhängen" können. Tatsächlich hat die Waffe bei NPC-Verwendung dann sogar MANCHMAL funktioniert. Aber nur manchmal, während für den Helden immer und nach wie vor niemals gegen den Helden oder PC_Rockefeller. Auch wenn ich das nun so nicht mehr verwenden werde (wegen zweiter Punkt direkt drunter), hätte ich gern gewusst woran das genau liegt. Mein einziger Ansatz wäre noch die ZS_Attack gewesen, aber wenn ich das Waffenskript aus dieser aufgerufen habe, hat sich ebenfalls nichts getan. Möglicherweise gehe ich dem noch einmal nach wenn mir gerade langweilig ist. 
2. Und damit klappt es wunderbar, das hätte ich schon viel früher probieren sollen. Ich denke ich werde in Zukunft die eigene Schadensberechnung verwenden. Hier habe ich jetzt das Skript angepasst für die besagte Waffe abgefragt und einfach ein
Code:
[...]
}
else
{
return dmg;
};
gesetzt. Vielen Dank für den Hinweis (und mal wieder vielen Dank an Lehona für das Skript ).
-
Welcher Code wann genau aufgerufen wird, kann ich aus dem Kopf heraus auch nicht sagen; da müsste man schauen, welche prints kommen (oder auch nicht) und darauf basierend genauer überlegen, woran es liegt.
Rockefeller habe ich mir schon ewig nicht mehr angeschaut; möglicherweise gibt es da Ausnahmen in manchen Skripten, oder manche Wahrnehmungen sind gar nicht aktiviert, so dass mancher Code für ihn nie aufgerufen wird?
-
Ich hab schon sehr lange nicht mehr programmiert - und insgesamt eher wenig - aber was wäre mit self_ChangeAttribute und B_MagicHurtself?
-
Der Held hat standardmäßig keine Schadenswarnehmung (also die B_AssessDamage wird nicht aufgerufen, wenn er Schaden bekommt). Diese Perception kann man zusätzlich aktivieren, bringt aber ihre eigenen Probleme mit sich (siehe Klaue Beliars, die auch Blitze auslöst, wenn der Gegner pariert).
2. Und damit klappt es wunderbar, das hätte ich schon viel früher probieren sollen. Ich denke ich werde in Zukunft die eigene Schadensberechnung verwenden. Hier habe ich jetzt das Skript angepasst für die besagte Waffe abgefragt und einfach ein
Hast du daran gedacht zu überprüfen, ob auch tatsächlich ein Nahkampfangriff verarbeitet wird? Nicht, dass ich die Waffe nur auf dem Rücken haben muss und Bögen den selben Effekt auslösen Oder, etwas unwahrscheinlicher, ich einen Feuerball werfe und während das Projektil fliegt die Nahkampfwaffe zücke.
 Zitat von Ajanna
Ich hab schon sehr lange nicht mehr programmiert - und insgesamt eher wenig - aber was wäre mit self_ChangeAttribute und B_MagicHurtself?
Du kannst nicht einfach wahllos Teile des Funktionsnamens austauschen, das ergibt keinen Sinn.
-
 Zitat von Lehona
Hast du daran gedacht zu überprüfen, ob auch tatsächlich ein Nahkampfangriff verarbeitet wird? Nicht, dass ich die Waffe nur auf dem Rücken haben muss und Bögen den selben Effekt auslösen  Oder, etwas unwahrscheinlicher, ich einen Feuerball werfe und während das Projektil fliegt die Nahkampfwaffe zücke.
Ich habe konkret über Npc_GetReadiedWeapon abgefragt ob das besagte Schwert verwendet wird und else einfach erstmal return dmg gelassen, damit scheint es bislang zu funktionieren. Die Möglichkeiten die sich damit auftun habe ich wohl unterschätzt, das ist echt eine starke Sache!
-
Wenn du es ganz richtig machen willst, musst du vermutlich die itemWeapon und/oder den weaponMode aus dem DamageDescriptor überprüfen. Deine Lösung hat das von mir genannte Problem, dass man schummeln kann, wenn man im richtigen Moment die Waffe zückt. Ist dir aber ja vielleicht auch egal
-
 Zitat von Lehona
Wenn du es ganz richtig machen willst, musst du vermutlich die itemWeapon und/oder den weaponMode aus dem DamageDescriptor überprüfen. Deine Lösung hat das von mir genannte Problem, dass man schummeln kann, wenn man im richtigen Moment die Waffe zückt. Ist dir aber ja vielleicht auch egal 
Ich muss das mal testen/ausreizen um das zu reproduzieren. Auf jeden Fall danke für den Hinweis, war mir nicht bewusst. 
 Zitat von Ajanna
Ich hab schon sehr lange nicht mehr programmiert - und insgesamt eher wenig - aber was wäre mit self_ChangeAttribute und B_MagicHurtself?
Wie Lehona schon geschrieben hat, es handelt sich dabei um Funktionsnamen welche auf eine bestimmte Art definiert sind (nämlich bei der Funktion), die kann man nicht einfach in eine Befehlszeile anders hinschreiben. Das gibt dann einen undefined-error (bzw. bei Daedalus unknown identifier), da das Programm den geänderten Funktionsnamen natürlich nicht kennt.
Geändert von Buzz Killington (18.03.2025 um 18:09 Uhr)
-
Mir ist bei meinem Schadens-Skript etwas aufgefallen, und zwar kommt das Programm scheinbar durcheinander, wer nun "victimNpc" ist, wenn ich mehrere NPCs mit gleicher Instanz angreife. Habe das beim Rockefeller getestet und dachte mir dann gut, habe eh keine NPCs mit gleicher Instanz, aber bei Monstern tritt das Problem dann ja natürlich ebenfalls auf. Gibt es einen Ansatz wie ich das im Skript einbeziehen kann? Also das victimNpc wirklich derjenige ist der gerade getroffen wird?
Meine gesamte Funktion sieht bislang so aus wie unten gezeigt; ich habe eine magische Waffe ("Kro'Tarrach") mit einem Brenn-Effekt und Heilung des Anwenders (ist noch schlecht gebalanced und absolut OP das Teil, aber das Skript funktioniert soweit) und darunter Waffen die einen Bluten-Effekt starten. Funktioniert soweit alles, auch wenn es da sicher noch Optimierungsbedarf gibt. Das Problem ist wirklich nur, dass wenn ich z.B. 10 Drachensnapper bekämpfe, auch mal einer anfängt zu brennen/bluten, den ich gar nicht angegriffen habe. Das liegt vermute ich daran, dass Gothic hier irgendwie mit "victimNpc" durcheinander kommt? Was übersehe ich? Ich habe so ein Gefühl dass es mich anspringt, aber ich sehe es gerade einfach nicht... 
Code:
func int DMG_OnDmg(var int victimPtr, var int attackerPtr, var int dmg, var int dmgDescriptorPtr)
{
var oSDamageDescriptor dmgDesc; dmgDesc = _^(dmgDescriptorPtr);
var c_npc attackerNpc; attackerNpc = _^(attackerptr);
var c_npc victimNpc; victimNpc = _^(victimPtr);
var c_item equipped_meleeWeapon;
var c_item equipped_rangedWeapon;
equipped_meleeWeapon = Npc_GetEquippedMeleeWeapon(attackerNpc);
equipped_rangedWeapon = Npc_GetEquippedRangedWeapon(attackerNpc);
// ************************************************************************************************************************************************************************
// Neue Schadensberechnung ab hier ...
// ************************************************************************************************************************************************************************
if (C_ScHasReadiedKT(attackerNpc)) // KRO'TARRACH
{
var int DamageRandy;
DamageRandy = Hlp_Random(100);
if (C_ScHasReadiedKT(attackerNpc))
&& (DamageRandy <= 25)
{
var int BurningMan;
BurningMan = Hlp_Random(3);
if BurningMan == 2
{
FF_ApplyExtDataGT(Burning,500,6,Hlp_GetInstanceID(victimNpc));
Wld_PlayEffect("VOB_MAGICBURN", victimNpc, victimNpc, 0, 0, 0, FALSE );
FF_ApplyExtDataGT(Burning_STOP,3500,1,Hlp_GetInstanceID(victimNpc));
};
if Npc_IsDead(victimNpc)
{
Npc_StopAni (victimNpc, "S_FIRE_VICTIM");
FF_RemoveData(Burning,victimNpc);
FF_RemoveData(Burning_STOP,victimNpc);
};
return dmg;
}
else if (C_ScHasReadiedKT(attackerNpc))
&& DamageRandy > 25 && DamageRandy < 50
{
Wld_PlayEffect("spellFX_CHARGEFIREBALL_INVEST_BLAST1", attackerNpc, attackerNpc, 0, 0, 0, FALSE );
return dmg;
}
else if (C_ScHasReadiedKT(attackerNpc))
&& DamageRandy > 50 && DamageRandy < 75
{
if attackerNpc.attribute[ATR_HITPOINTS] < attackerNpc.attribute[ATR_HITPOINTS_MAX]
{
FF_ApplyExtDataGT(Heal_Attacker,500,10,Hlp_GetInstanceID(attackerNpc));
victimNpc.attribute[ATR_HITPOINTS] = victimNpc.attribute[ATR_HITPOINTS] - attackerNpc.attribute[ATR_HITPOINTS_MAX]*10/100 ;
Wld_PlayEffect("spellFX_PalHeal_ORIGIN", attackerNpc, attackerNpc, 0, 0, 0, FALSE );
}
else
{
Wld_PlayEffect("spellFX_CHARGEFIREBALL_INVEST_BLAST2", attackerNpc, attackerNpc, 0, 0, 0, FALSE );
};
return dmg;
}
else if (C_ScHasReadiedKT(attackerNpc))
&& DamageRandy > 75
{
Wld_PlayEffect("spellFX_CHARGEFIREBALL_INVEST_BLAST2", attackerNpc, attackerNpc, 0, 0, 0, FALSE );
return dmg;
};
}
else if (C_ScHasReadiedKD(attackerNpc)) // Waffen die BLUTEN verursachen...
|| (C_ScHasReadiedDAG(attackerNpc))
{
var int BlutenRandy;
var int hp_bleeding;
BlutenRandy = Hlp_Random(100);
if BlutenRandy >= 90
&& C_ScHasReadiedKD(attackerNpc)
{
hp_bleeding = victimNpc.attribute[ATR_HITPOINTS_MAX]*10/100;
if victimNpc.attribute[ATR_HITPOINTS] > hp_bleeding
{
if (!FF_ActiveData(FF_ApplyExtDataGT, Hlp_GetInstanceID(victimNpc)))
{
FF_ApplyExtDataGT(Bleeding,500,-1,Hlp_GetInstanceID(victimNpc));
};
};
if victimNpc.attribute[ATR_HITPOINTS] <= 2
|| Npc_IsDead(victimNpc)
{
FF_RemoveData(Bleeding,Hlp_GetInstanceID(victimNpc));
};
}
else if BlutenRandy >= 80
&& C_ScHasReadiedDAG(attackerNpc)
{
if victimNpc.attribute[ATR_HITPOINTS] > hp_bleeding
{
if (!FF_ActiveData(FF_ApplyExtDataGT, Hlp_GetInstanceID(victimNpc)))
{
FF_ApplyExtDataGT(Bleeding,500,-1,Hlp_GetInstanceID(victimNpc));
};
};
if victimNpc.attribute[ATR_HITPOINTS] <= 2
{
FF_RemoveData(Bleeding,Hlp_GetInstanceID(victimNpc));
};
}
else
{
return dmg;
};
}
else
{
return dmg;
};
};
Die C_HasReadied*-Funktionen sind hierbei die gleichen wie im Eingangspost; da habe ich mich an denen von der Klaue Beliars orientiert (mir ist bislang noch keine "elegantere" oder kompaktere Abfrage eingefallen...).
 Zitat von Lehona
Hast du daran gedacht zu überprüfen, ob auch tatsächlich ein Nahkampfangriff verarbeitet wird? Nicht, dass ich die Waffe nur auf dem Rücken haben muss und Bögen den selben Effekt auslösen  Oder, etwas unwahrscheinlicher, ich einen Feuerball werfe und während das Projektil fliegt die Nahkampfwaffe zücke.
Und Shit, jetzt habe ich erst verstanden was genau du meinst, das muss ich aber ganz dringend prüfen und diese Exploit-Möglichkeit beseitigen. War gestern etwas übermüdet.
-
Code:
if BurningMan == 2
{
FF_ApplyExtDataGT(Burning,500,6,Hlp_GetInstanceID(victimNpc));
Wld_PlayEffect("VOB_MAGICBURN", victimNpc, victimNpc, 0, 0, 0, FALSE );
FF_ApplyExtDataGT(Burning_STOP,3500,1,Hlp_GetInstanceID(victimNpc));
};
if Npc_IsDead(victimNpc)
{
Npc_StopAni (victimNpc, "S_FIRE_VICTIM");
FF_RemoveData(Burning,victimNpc);
FF_RemoveData(Burning_STOP,victimNpc);
};
Im ersten Block verwendest du die InstanceID des NPCs, die ist natürlich für alle Drachensnapper gleich. Der Gedanke ist nicht ganz doof, weil Pointer das Speichern/Laden nicht überleben, hat aber den Nachteil, dass man eben NPCs nicht genau identifizieren kann
LeGo hat das Buffs Paket, dass dir diese Implementierungsdetails abnehmen kann.
-
Das ist echt prima, damit funktioniert es wie es soll. Der von dir gezeigte Block schrumpft jetzt beim ersten Versuch zu
Code:
var int BurningMan;
BurningMan = Hlp_Random(3);
if BurningMan == 2
{
Buff_Apply(victimNpc,firedmg_burning);
};
Mit der Buff-Funktion und einer Hilfs-Funktion
Code:
var int effectActive;
func void firedmg_burning_apply(var int bh)
{
var int ptr; ptr = Buff_GetNpc(bh);
if !ptr
{
return;
};
var c_npc n; n= _^(ptr);
Npc_ChangeAttribute(n, ATR_HITPOINTS, -5);
if effectActive == FALSE
{
Wld_PlayEffect("VOB_MAGICBURN", n, n, 0, 0, 0, FALSE );
effectActive = TRUE;
if (!FF_ActiveData(FF_ApplyExtDataGT, Hlp_GetInstanceID(n)))
{
FF_ApplyExtDataGT(FF_Aux_StartStop,3000,1,Hlp_GetInstanceID(n));
};
};
};
instance firedmg_burning(lCBuff)
{
bufftype = BUFF_BAD;
durationMS = 3000;
tickMS = 500;
onTick = SAVE_GetFuncID(firedmg_burning_apply);
};
func void FF_Aux_StartStop(var C_NPC slf)
{
effectActive = FALSE;
};
Das ist echt klasse was man damit nun alles anstellen kann, ich bin gespannt was mir da noch alles in den Sinn kommt.
Musste nur die "Ich brenne und zapple rum"-Animation rausschmeißen, weil ich die nicht mehr stoppen konnte. Das liegt aber nicht an den Buffs sondern einfach an Gothic. Irgendwie mag das Spiel keine Loop-Animationen stoppen, und ich bin gerade zu faul eine T_Animation draus zu machen. Witzigerweise haben die in Vanilla bei den Tränen Innos ja auch die S_FIRE_VICTIM Animation gestartet und wollten sie mit AI_Wait nach 3s wieder stoppen, was nur halt nicht funktioniert. 
Was mir noch einfällt: Du hattest recht, wenn ich einen Zauber auf einen Gegner schleudere und dann schnell die Waffe ziehe, wird der Effekt der Waffe auf ihn angewendet. Habe das bisher noch nicht gelöst, aber ich denke da setze ich mich als nächstes dran. Glücklicherweise werden die meisten Spieler diesen Exploit aber (hoffentlich) nicht finden, da man wirklich schnell sein muss und weit weg vom Gegner.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|