-
-
-
|
|
|
|
Zitat von rosenblatt
Ich bin gerade bisschen am Experimentieren mit neuen Bestückungen für die Schwerter, nun habe ich den Eindruck, dass "einfrieren" "verbrennen" aufhebt, bzw. dass ein eingefrohrener Gegner absolut nicht brennen will.
Benutzt du zwei Schwerter? Eines mit "Frost" und eines mit "Hitze", oder wie? (Wenn ich mich recht erinnere, kann man mit Aard brennende Gegner wieder löschen, wenn man ein schlechtes Gewissen hat.)
Rein scripttechnisch ist es wohl so, dass "Einfrieren" Vorrang hat (hoffe, ich habe das passende script gefunden):
Code:
function DamageTypeStringToName(damageStr : string) : name
{
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_FROST)) return theGame.params.DAMAGE_NAME_FROST;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_FORCE)) return theGame.params.DAMAGE_NAME_FORCE;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_POISON)) return theGame.params.DAMAGE_NAME_POISON;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_FIRE)) return theGame.params.DAMAGE_NAME_FIRE;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_PHYSICAL)) return theGame.params.DAMAGE_NAME_PHYSICAL;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_SILVER)) return theGame.params.DAMAGE_NAME_SILVER;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_SLASHING)) return theGame.params.DAMAGE_NAME_SLASHING;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_PIERCING)) return theGame.params.DAMAGE_NAME_PIERCING;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_BLUDGEONING)) return theGame.params.DAMAGE_NAME_BLUDGEONING;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_RENDING)) return theGame.params.DAMAGE_NAME_RENDING;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_ELEMENTAL)) return theGame.params.DAMAGE_NAME_ELEMENTAL;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_SHOCK)) return theGame.params.DAMAGE_NAME_SHOCK;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_MORALE)) return theGame.params.DAMAGE_NAME_MORALE;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_DIRECT)) return theGame.params.DAMAGE_NAME_DIRECT;
return '';
}
Wie man sieht, hat "FROST" oberste Priorität, wenn mehrere Effekt wirken sollen.
Man könnte "FIRE" natürlich nach oben verschieben, um dem Verbrennen Vorrang zu geben.
Da die Funktion außer dem return-Wert keine weiteren Parameter zurückgibt, kann man gleichzeitiges Wirken mehrerer Effekte auch nicht mal auf die Schnelle einführen, würde ich sagen.
Vermutlich kann auch nur eine Animation zur Zeit wirken. "100 Kelvin wärmer" hebt sich auch auch auf mit "100 Kelvin kälter".
(Wahrscheinlich wird das script garnicht erst aufgerufen, wenn schon ein Effekt auf das Ziel einwirkt, aber das müsste man genauer untersuchen.)
|
|
|
|
|
-
-
|
|
|
|
17.07.2020 20:59
#5
M'sche Primzahl
Zitat von tombom81
Benutzt du zwei Schwerter? Eines mit "Frost" und eines mit "Hitze", oder wie? (Wenn ich mich recht erinnere, kann man mit Aard brennende Gegner wieder löschen, wenn man ein schlechtes Gewissen hat.)
Rein scripttechnisch ist es wohl so, dass "Einfrieren" Vorrang hat (hoffe, ich habe das passende script gefunden):
Code:
function DamageTypeStringToName(damageStr : string) : name
{
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_FROST)) return theGame.params.DAMAGE_NAME_FROST;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_FORCE)) return theGame.params.DAMAGE_NAME_FORCE;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_POISON)) return theGame.params.DAMAGE_NAME_POISON;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_FIRE)) return theGame.params.DAMAGE_NAME_FIRE;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_PHYSICAL)) return theGame.params.DAMAGE_NAME_PHYSICAL;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_SILVER)) return theGame.params.DAMAGE_NAME_SILVER;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_SLASHING)) return theGame.params.DAMAGE_NAME_SLASHING;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_PIERCING)) return theGame.params.DAMAGE_NAME_PIERCING;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_BLUDGEONING)) return theGame.params.DAMAGE_NAME_BLUDGEONING;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_RENDING)) return theGame.params.DAMAGE_NAME_RENDING;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_ELEMENTAL)) return theGame.params.DAMAGE_NAME_ELEMENTAL;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_SHOCK)) return theGame.params.DAMAGE_NAME_SHOCK;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_MORALE)) return theGame.params.DAMAGE_NAME_MORALE;
if(damageStr == NameToString(theGame.params.DAMAGE_NAME_DIRECT)) return theGame.params.DAMAGE_NAME_DIRECT;
return '';
}
Wie man sieht, hat "FROST" oberste Priorität, wenn mehrere Effekt wirken sollen.
Man könnte "FIRE" natürlich nach oben verschieben, um dem Verbrennen Vorrang zu geben.
Da die Funktion außer dem return-Wert keine weiteren Parameter zurückgibt, kann man gleichzeitiges Wirken mehrerer Effekte auch nicht mal auf die Schnelle einführen, würde ich sagen.
Vermutlich kann auch nur eine Animation zur Zeit wirken. "100 Kelvin wärmer" hebt sich auch auch auf mit "100 Kelvin kälter".
(Wahrscheinlich wird das script garnicht erst aufgerufen, wenn schon ein Effekt auf das Ziel einwirkt, aber das müsste man genauer untersuchen.)
Nö nö nö, es können zumindest bluten, verbrennen und vergiften zeitgleich wirken, wenn man das so ins Schwert packt gibts nach einigen Gegnern auch einen schönen Bonus bei den Erfolgen.
---
Wenn ich mir das Skript ansehe, bemerke ich absolut keine (Zahlen) Angaben für Prioritäten, also hat auch kein Effekt vorrang oder löscht einen anderen aus, womit meine Frage beantwortet wäre.
Eventuell wird der optische Effekt Feuer nur von dem optischen Effekt einfrieren überdeckt und im Hintergrund wird trotzdem HP abgezogen?
|
|
|
|
|
-
-
|
|
|
|
17.07.2020 22:29
#7
Zitat von rosenblatt
Nö nö nö, es können zumindest bluten, verbrennen und vergiften zeitgleich wirken,
Ok, das ändert natürlich alles (ich ging davon aus, dass nur ein Effekt zur Zeit wirken kann).
Wenn ich mir das Skript ansehe, bemerke ich absolut keine (Zahlen) Angaben für Prioritäten, also hat auch kein Effekt vorrang oder löscht einen anderen aus,
Kannst du so nicht sagen (oder hast du es mit dem ScriptStudio nachvollzogen)?
Das hängt doch davon ab, was nach dem Aufruf der Funktion damagetechnisch passiert.
Zum Beispiel spricht so eine exklusive FIRE-Routine mMn für einen Vorrang von "Verbrennen":
Code:
if(dmgInfos[i].dmgType == theGame.params.DAMAGE_NAME_FIRE && dmgInfos[i].dmgVal > 0)
{
action.victim.OnFireHit( (CGameplayEntity)action.causer );
break;
}
Eventuell wird der optische Effekt Feuer nur von dem optischen Effekt einfrieren überdeckt und im Hintergrund wird trotzdem HP abgezogen?
Werde ich im ScriptStudio testen (z.B. Brechpunkt im obigen Zweig setzen), wenn ich das nächste Mal Witcher 3 spiele...
(if(toxicity >= threshold) ist auch eine geeignete Stelle für einen BP.)
Sinnvollerweise setzt man aber einfach einen in DamageTypeStringToName(...), kokelt einen Gegner an, lässt nach dem Erreichen des BP des Spiel Weiterlaufen und "frostet" ihn dann. Das würde ich erstmal mit separaten Schwertern für FIRE und FROST damage prüfen. Könnte lustig werden.
edit: hmm, ganz schön komplex, die Sache mit der Damage. Da muss man einige hundert Scriptzeilen durchsteppen, in manche externe Funktionen kommt man garnicht erst rein. Interessant, dass das Spiel erstmal Geralts Inventar durchkämmt, um festzustellen, welche Waffen er hat und dann auf "IsItemHeld(weapons[i])" prüft.
|
|
|
|
|
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
|
|