Construction Set Skriptthread zum Construction Set

Hi, ich hab da auch mal ein kleines Problem. Ich möchte den Spell "Voodoo-Auge" von Nehrim etwas verändern, so daß auch der Name angezeigt wird. Wer den Spell nicht kennt: man schiesst den Spell auf ein Ziel ab, und dann öffnet sich eine Messagebox, in der verschiedenen Infos über das Ziel aufgelistet werden.

so sieht das originale Script aus:

Code:
scn SpellZielinformation

Short Stufe
Short LebenGesamt
Short Leben

Begin ScriptEffectStart

Set Stufe to GetLevel
Set LebenGesamt to GetBaseActorValue Health
Set Leben to GetActorValue Health

MessageBox "Stufe: %5.0f , Maximale Lebenspunkte: %5.0f , Momentane Lebenspunkte %5.0f" Stufe, LebenGesamt, Leben

end

Und so hab ich das ganze modifiziert:

Code:
scn SpellZielinformation

Short Stufe
Short LebenGesamt
Short Leben
[B]string_var strName[/B]

Begin ScriptEffectStart

Set Stufe to GetLevel
Set LebenGesamt to GetBaseActorValue Health
Set Leben to GetActorValue Health
[B]Set strName to GetName[/B]

MessageBoxEX "Name: %.0f %r Stufe: %3.0f %r Maximale Lebenspunkte:   %5.0f %r Momentane Lebenspunkte: %5.0f" strName, Stufe, LebenGesamt, Leben

end

Allerdings wird statt dem Namen nur sowas wie 1653 angezeigt. Ich habs auch schon mit:

Code:
MessageBoxEX "Name: [B]%n[/B] %r Stufe: %3.0f %r Maximale Lebenspunkte:   %5.0f %r Momentane Lebenspunkte: %5.0f" strName, Stufe, LebenGesamt, Leben

probiert, allerdings wird dort statt dem Namen auch nur <no name> angezeigt.

Hat jemand eine Idee, was dem Script noch fehlt, damit es auch den Namen der jeweiligen NPCs oder Mobs anzeigt? Geht das überhaupt? Und wenn nicht, wozu ist GetName sonst da?

Edit: Ich hab das Script jetzt nochmal modifiziert:

Code:
scn SpellZielinformation

Short Stufe
Short LebenGesamt
Short Leben
Short ManaGesamt
Short Mana
ref strName
ref strRace

Begin ScriptEffectStart

Set Stufe to GetLevel
Set LebenGesamt to GetBaseActorValue Health
Set Leben to GetActorValue Health
Set ManaGesamt to GetBaseActorValue Magicka
Set Mana to GetActorValue Magicka
Set strName to GetName
Set strRace to GetRace

MessageBoxEX "Name: %n (%n) %r Stufe: %3.0f %r Lebenspunkte: %.0f von %.0f %r Magiepunkte: %.0f von %.0f" strName, strRace, Stufe, Leben, LebenGesamt, Mana, ManaGesamt

end

Das merkwürdige ist, GetRace funktioniert, GetName nicht... :huh:
 
Zuletzt bearbeitet:
Ohne es ausprobiert zu haben, würde ich sagen, dass Skript müsste in etwa so aussehen:
Code:
scn name

ref target
short level
long health_current
long health_base

Begin ScriptEffectStart

set target to getSelf
set level to getLevel
set health_current to getAV health
set health_base to getBaseAV health
MessageBoxEX "Name: %n %r Stufe: %.0f %r Lebenspunkte: %.0f/%.0f" target, level, health_current, health_base

end
 
  • Like
Reaktionen: Naboradd
Danke, mit GetSelf statt GetName funktioniert es jetzt.

So sieht es jetzt aus:

Code:
scn SpellZielinformation

Short Stufe
Short LebenGesamt
Short Leben
Short ManaGesamt
Short Mana
ref strName
ref strRace

Begin ScriptEffectStart

Set Stufe to GetLevel
Set LebenGesamt to GetBaseActorValue Health
Set Leben to GetActorValue Health
Set ManaGesamt to GetBaseActorValue Magicka
Set Mana to GetActorValue Magicka
Set strName to GetSelf
Set strRace to GetRace

MessageBoxEX "Name: %n (%n) %r Stufe: %3.0f %r Lebenspunkte: %.0f von %.0f %r Magiepunkte: %.0f von %.0f" strName, strRace, Stufe, Leben, LebenGesamt, Mana, ManaGesamt

end

Jetzt muss ich es nur noch hinbekommen, daß die Rasse nur bei Humanoiden angezeigt wird, und sonst halt Untot, Kreatur, usw. Da gabs doch auch irgend eine Abfrage für... :huh:
 
Zuletzt bearbeitet:
Dafür kannst du "isActor" und "getIsCreature" benutzen. Für eine feinere Unterteilung gibt es, glaube ich nur "getVampire". Aber du kannst ansonsten noch mit "getFaction" abfragen, ob der Actor in der "undead"-Faction ist, etc.
 
Code:
scn name
 
ref trigRef
 
Begin onTriggerActor
 
set trigRef to getActionRef
trigRef.moveTo <Ziel-Ref>
 
end

Hi, ich habe noch eine Frage:

Habe alles eingerichtet und der Avatar wird schon mal zum XMarker gemoved, aber dann kann er sich nicht mehr von der Stelle bewegen.

D.h. er kann Waffe ziehe usw. führt auch die Laufen Anim aus, aber er bleibt auf dem Fleck stehen.

(Ich führe diesen Move in einem Interior aus, geht dies möglicherweise nur in Exteriors?)

Kann mir hier jemand helfen?

Gruss
Meclaton
 
Du brauchst eine "once"-Variable,da du den Avatar sonst in jeder Sekunde teleportierst.

Code:
scn name
ref trigref
short once

begin ontriggeractor
if once==0
set trigref to getactionref
set once to 1
trigref.moveto <ziel-ref>
endif
end
 
  • Like
Reaktionen: Meclaton
Das würde ich nicht sagen, da der "onTrigger"-Block sowieso nur in einem Frame ausgeführt wird, da die Zielreferenz danach nicht mehr getriggert wird. Durch eine "doonce"-Variable würdest duch auch wiederholtes Triggern unterbinden. Was ich mir vorstellen könnte ist, dass zwar das Objekt, nicht aber seine Kollision bewegt wird (eigentlich unwahrscheinlich bei NPCs). Dann müsstest du das Skript ungefähr so schreiben:
Code:
scn name

ref trigRef1
ref trigRef2

Begin onTriggerActor

set trigRef1 to getActionRef
if trigRef2
 if trigRef1.getIsReference trigRef2
  return
 endif
endif
set trigRef2 to trigRef1
trigRef1.moveTo <Ref>

end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Meclaton
Yep, mit once klappt es zwar jetzt, aber es soll ja eine Art Tor sein und nach dem ersten move funktioniert die TriggerBox ja dann nicht mehr.

Werde nun noch einmal deine Variante ausprobieren.
 
Ich hatte jetzt mal vermutet, dass der Spieler ebenfalls im Trigger steht und dadurch das Skript imer wieder ausführt... Aber deine Erklärung könnte auch sein...
 
Hi,

der Move wird jetzt ohne Probleme ausgeführt, aber leider nur einmal.

Wenn ich wieder dort hinkomme, wird der move nicht mehr ausgeführt.

Gruss
Meclaton
 
Du musst dich schon entscheiden xD
Welches Skript benutzt du jetzt?
Wenn du das von Diarrhoe benutzt füge folgendes hinzu:

Code:
begin onload
set trigref1 to 0
set trigref2 to 0
end

Wenn du meins benutzt:

Code:
begin onload
set once to 0
end
 
Das liegt daran, dass du als Spieler zweimal dadurch gehst, ohne dass eine andere Referenz getriggert wird. Es muss also die "trigRef2"-Variable ab und zu gelöscht werden, bzw. braucht es eine Art Timer. Probiere es mal so:
Code:
scn name

ref trigRef1
ref trigRef2
short day
float hour

Begin onTriggerActor

set trigRef1 to getActionRef
if trigRef2
 if trigRef1.getIsReference trigRef2
  if day == GameDaysPassed
   if hour <= (GameHour - 0.1)
    return
   endif
  endif
 endif
endif
set trigRef2 to trigRef1
set day to GameDaysPassed
set hour to GameHour
trigRef1.moveTo <Ref>

end
 
Zuletzt bearbeitet:
Mit dem OnLoad-Block habe ich doch eine Ergänzung gegeben, die die Ref löscht ;)
Edit: Aber gut du hast die Timer-Variante nochmal aufgeführt, so kann Meclaton sich entscheiden^^
 
;) Hi, ich habe mich natürlich entschieden beide Varianten zu testen.
Ich denke das verdient schon den Respekt, wenn jemand einem hilft.

@ Der_W@ldmeister bei deinem kompletten Script mit dem OnLoad-Block habe ich keine Veränderung erkennen können.
Es läuft nur einmal.

@ Diarrhoe, auchbei dir noch mal Danke, dass Du mir hilfst. Bei der Eingabe des Scripts habe ich ein Sytax Error bekommen: Unknown Command GameDayPassed

Gruss
Meclaton