Construction Set Der Scriptthread

Der Spieler soll aufgrund des Scripts für eine bestimte Zeit in eine Interiorcell teleportiert werden, das fertige Script müsste dann also so aussehen, oder?

begin "FR_Sh_Trank5script"

float Timer
short OnPCEquip
short PCSkipEquip
short state

set timer to timer + GetSecondsPassed

if ( state == 0 )
Set PCSkipEquip to 1
set state to 1
elseif ( state == 1 )
if ( OnPCEquip == 1 )
set global_trank_getrunken to 1
set PCSkipEquip to 0
set OnPCEquip to 0
set state to 2
endif
elseif ( state == 2 )
Player->Equip, "FR_SH_Trank5", 1
Player->PositionCell, 110, 110, 0, 180, "X"
MessageBox: "A."
endif

if ( timer >= 90 )
set timer to 0
ResetActors
Player->PositionCell, -262, -37, 355, 180, "A"
EnableTeleporting
MessageBox, "X."
endif

end

PS: Fehlermeldung: Could not find variable: global_trank_getrunken?
PPS: Ich dachte langsam hätt ichs raus, aber jetzt sitz ich vor meinem Laptop und seh aus wie der Ochs vorm Stadltor. Ich mag Morrowind!
PPPS: Verzeiht das ich erst drei Tage später antworte. Ich hab leider einen sehr sehr unregelmäßigen Job.
 
Zuletzt bearbeitet:
Das kann nicht funktionieren - aus mehreren Gründen.

1. die Global - die musst du anlegen.
Killfetzer hat sie genutzt, um den Status zu speichern, ob der Trank schon getrunken wurde.
2. Der Rückteleport
Wie soll das funktionieren? Es kann nicht gehen, denn du zerstörst durch "Equip" den Trank (Scriptholder), der den Rücktransport auslösen soll.

Ich würde in diesem Fall mit einem Hintergrundscript für den Teleport arbeiten.
 
  • Like
Reaktionen: Freelancer_T
Ah okay, daran hatte ich nicht gedacht.
Dann müsste ich ein Global script anlegen, dass ständig überprüft, ob der trank getrunken wird oder nicht, bzw. dann den Timer startet oder?
 
muss nicht global. Du kannst ein Light-Objekt machen welches nicht tragbar markiert ist und dem Spieler eins davon ins Inventar adden. Das Objekt sollte aber keine Lichteffekte (radius so klein wie geht) und keine Farbe(grau) haben. An dieses light machst Du dein Script und es ist immer am Spieler solange bis Du es remove'st.
PS: Es ist im Inventar nicht sichtbar so das der Spieler es weder verkaufen noch sonstwie verlieren könnte.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Freelancer_T
Ich würde dir ein aufgerufenes, globales Script empfehlen. Du startest ein globales Script über StartScript und nach getaner Arbeit terminiert sich das mit StopScript selbst.
 
  • Like
Reaktionen: Freelancer_T
Wobei die Variante von ReneMiner auch einen gewissen Charme hat. Wenn das Licht gewichts-, farblos und radiuslos ist, kann man damit einiges anstellen. Zum Beispiel es als Variablenspeicher benutzen oder als Kontrollscriptholder für Quests oder besondere Inventartransaktionen. Ich würde sagen, vom Aufwand her bleibt es sich in etwa gleich, wobei ich auch ein Hintergrundscript bevorzugen würde, wenn es nur um diese Sache geht.
 
  • Like
Reaktionen: Freelancer_T
Welche Methode würde weniger Systemressourcen fressen?
Anbei sei gesagt, dass ich sieben verschiedene mit scripten belegte Tränke habe und das ganze jetzt mit einem Globalscript überprüfe, welches ständig auf alle 7 Tränke prüft.
Ist das brauchbar oder ist die Methode mit dem Farblosen Licht weniger Ressourcenfressend?
 
Zuletzt bearbeitet:
Es kommt etwa auf's Gleiche raus- Du brauchst ein neues extra Objekt an dem ein Script hängt oder ein zusätzliches global laufendes Script. Die Schwierigkeit das globale Script dauerhaft zu starten kann mann umgehen indem man es als Startscript einsetzt oder von solch einem starten lässt, von einem persistenten Objekt lokal("pseudo-global") oder eben von einem Objekt im Inventar an das der Spieler nicht rankommt. Letzteres macht Starten und Stoppen recht einfach und nahzu komplikationsfrei indem man das Objekt mit dem Script added oder removed.
Komplikationen gibt es aber wenn man versucht von einem Objekt aus dem Inventar heraus (welches dieses Light dann wäre) andere Objekte in der Spielwelt zu erschaffen/platzieren/"beschwören" (z.B. "PlaceAtMe" in so einem Script führt zum Crash)
 
  • Like
Reaktionen: Freelancer_T
Ich hab jetzt versucht ein Globalscript zu schreiben, dass all dies überwacht, aber irgendwie bekomm ichs nicht hin.
Gestartet wird das script über ein Greeting.
Hab drei Varianten durch, die mir logisch erschienen wären und kein Tau was ich falsch mache
In der ersten habe ich im Prinzip dieses Script verwendet, bloß mit if und elseif, anstatt while.
FR_SH_Trank1 tut auch ganz ordentlich was er soll, zumindest mit while, aber alle anderen wollen nicht.
begin "FR_SH_GlTrD"


short FRZV
float SHTimer


set FRZV to random, 3 ; Zufallsvariable für Wahl des Vampirclans


if (MenuMode == 1)
return
endif


while (FRGlTr1 == 1)
MessageBox "Die Macht Dibellas fließt durch euren Körper, schenkt euch die Kraft der Begehrten und lässt euch die Welt durch die Augen junger Liebe sehen."
Set FRGlTr1 to 0
endwhile


while (FRGlTr3 == 1)
if (PCwerewolf == 1)
MessageBox "Die Macht Hircines zerstört die Wirkung dieses Trankes"
Set FRGlTr3 to 0
endif
endwhile


while (FRGlTr3 == 1)
if ( Player->GetSpell "werewolf blood" == 1 )
MessageBox "Die Macht Hircines zerstört die Wirkung dieses Trankes"
Set FRGlTr3 to 0
endif
endwhile


while (FRGlTr3 == 1)
if (PCWerewolf <= 0)
if (FRZV == 0)
if ( Player->GetSpell "werewolf blood" == 0 )
player->cast "Vampire blood aundae", player
Set FRGlTr3 to 0
endif
endif
endif
endwhile


while (FRGlTr3 == 1)
if (PCWerewolf <= 0)
if (FRZV == 1)
if ( Player->GetSpell "werewolf blood" == 0 )
player->cast "Vampire blood berne", player
Set FRGlTr3 to 0
endif
endif
endif
endwhile




while (FRGlTr3 == 1)
if (PCWerewolf <= 0)
if (FRZV == 2)
if ( Player->GetSpell "werewolf blood" == 0 )
player->cast "Vampire blood quarra", player
Set FRGlTr3 to 0
endif
endif
endif
endwhile


while (FRGlTr4 == 1)
if (PCVampire>= 0)
if ( Player->GetSpell "vampire blood aundae" == 0 )
if ( Player->GetSpell "vampire blood berne" == 0 )
if ( Player->GetSpell "vampire blood quarra" == 0 )
player->cast, "werewolf blood", "player"
Set FRGlTr4 to 0
endif
endif
endif
endif
endwhile


while (FRGlTr4 == 1)
if (PCVampire== 1)
Messagebox "Die Macht Molag Bals zerstört die Wirkung des Trankes"
Set FRGlTr4 to 0
endif
endwhile


while (FRGlTr4 == 1)
if ( Player->GetSpell "vampire blood aundae" == 1 )
Messagebox "Die Macht Molag Bals zerstört die Wirkung des Trankes"
Set FRGlTr4 to 0
endif
endwhile


while (FRGlTr4 == 1)
if ( Player->GetSpell "vampire blood berne" == 1 )
Messagebox "Die Macht Molag Bals zerstört die Wirkung des Trankes"
Set FRGlTr4 to 0
endif
endwhile


while (FRGlTr4 == 1)
if ( Player->GetSpell "vampire blood quarra" == 1 )
Messagebox "Die Macht Molag Bals zerstört die Wirkung des Trankes"
Set FRGlTr4 to 0
endif
endwhile


while (FRGlTr5== 1)
set SHtimer to SHtimer + GetSecondsPassed
Player->PositionCell, 110, 110, 0, 180, "Sanguines Kammer"
MessageBox: "Für kurze Zeit erlaubt euch der Trank, das Reich Sanguines zu betreten."
Disable Teleporting
Set FRGlTr5 to 2
endwhile


while (FRGlTr5 == 2)
Disable Teleporting
endwhile

if ( SHtimer >= 90 )
set SHtimer to 0
ResetActors
Player->PositionCell, -262, -37, 355, 180, "Suran, Deseles Haus der irdischen Freuden"
EnableTeleporting
Set FRGlTr5 to 0
MessageBox, "Eure Zeit in der Kammer ist zu Ende, doch Sanguine scheint euch noch etwas Freude zu gönnen und ihr erwacht verwirrt in den Armen einer blonden Nord."
endif


while (FRGlTr7 == 1)
MessageBox "Nocturnals Liebe umgibt euch und ihr fühlt euch in den Schatten geborgen"
Set FrGlTr7 to 0
endwhile


return
end
Danach hab ich mir mal Killfetzers scriptingkurs durchgelesen und versucht daraus schlau zu werden. Herausgekommen ist folgendes, wieder mit mäßigem Erfolg:
begin "FR_SH_GlTrD"


short FRZV
float SHTimer






if (MenuMode == 1)
return
endif


if (FRGlTr1 == 1)
MessageBox "Die Macht Dibellas fließt durch euren Körper, schenkt euch die Kraft der Begehrten und lässt euch die Welt durch die Augen junger Liebe sehen."
Set FRGlTr1 to 0
endif


elseif (FRGlTr3 == 1)
set FRZV to random, 3 ; Zufallsvariable für Wahl des Vampirclans


if (PCwerewolf == 1)
MessageBox "Die Macht Hircines zerstört die Wirkung dieses Trankes"
Set FRGlTr3 to 0
endif


elseif ( Player->GetSpell "werewolf blood" == 1 )
MessageBox "Die Macht Hircines zerstört die Wirkung dieses Trankes"
Set FRGlTr3 to 0
endif


elseif (PCWerewolf <= 0)
if ( Player->GetSpell "werewolf blood" == 0 )
if (FRZV == 0)
player->cast "Vampire blood aundae", player
Set FRGlTr3 to 0
elseif (FRZV == 1)
player->cast "Vampire blood berne", player
Set FRGlTr3 to 0
endif
elseif (FRZV == 2)
player->cast "Vampire blood quarra", player
Set FRGlTr3 to 0
endif
endif
endif
endif


endif
endif






elseif (FRGlTr4 == 1)


if (PCVampire== 1)
Messagebox "Die Macht Molag Bals zerstört die Wirkung des Trankes"
Set FRGlTr4 to 0
endif

elseif ( Player->GetSpell "vampire blood aundae" == 1 )
Messagebox "Die Macht Molag Bals zerstört die Wirkung des Trankes"
Set FRGlTr4 to 0
endif
elseif ( Player->GetSpell "vampire blood berne" == 1 )
Messagebox "Die Macht Molag Bals zerstört die Wirkung des Trankes"
Set FRGlTr4 to 0
endif


elseif ( Player->GetSpell "vampire blood quarra" == 1 )
Messagebox "Die Macht Molag Bals zerstört die Wirkung des Trankes"
Set FRGlTr4 to 0
endif


elseif (PCVampire<= 0)
if ( Player->GetSpell "vampire blood aundae" == 0 )
if ( Player->GetSpell "vampire blood berne" == 0 )
if ( Player->GetSpell "vampire blood quarra" == 0 )
player->cast, "werewolf blood", "player"
Set FRGlTr4 to 0
endif
endif
endif
endif
endif






elseif (FRGlTr5== 1)
set SHtimer to SHtimer + GetSecondsPassed
Player->PositionCell, 110, 110, 0, 180, "Sanguines Kammer"
MessageBox: "Für kurze Zeit erlaubt euch der Trank, das Reich Sanguines zu betreten."
Disable Teleporting
Set FRGlTr5 to 2
endif


while (FRGlTr5 == 2)
Disable Teleporting
endwhile

if ( SHtimer >= 90 )
set SHtimer to 0
ResetActors
Player->PositionCell, -262, -37, 355, 180, "Suran, Deseles Haus der irdischen Freuden"
EnableTeleporting
Set FRGlTr5 to 0
MessageBox, "Eure Zeit in der Kammer ist zu Ende, doch Sanguine scheint euch noch etwas Freude zu gönnen und ihr erwacht verwirrt in den Armen einer blonden Nord."
endif


elseif (FRGlTr7 == 1)
MessageBox "Nocturnals Liebe umgibt euch und ihr fühlt euch in den Schatten geborgen"
Set FrGlTr7 to 0
endif


return

end

Selbes ergebnis, erster Trank funktioniert, alle anderen nicht.
Habe danach auch noch ein While (MenuMode == 0) vor If (FrGlTr1 == 1) und ne endwhile vorm Return platziert und das return gelöscht und damit meinen ersten Freeze fabriziert.
Bin irgendwie stolz auf mich, hab aber immer noch kein Plan was ich falsch mache und erbitte jetzt demütigst eure Hilfe.
EDIT: Wie mache ich hier im Forum Tabstopps. So ist das ganze doch einfach ******e zu lesen.
 
Zuletzt bearbeitet:
EDIT: Wie mache ich hier im Forum Tabstopps. So ist das ganze doch einfach ******e zu lesen.
Gar nicht.

Schreib den Text in einem Texteditor und kopiere ihn dann ins Posting. Setze das eingefügte Script danach in den "
Code:
"-Tag - so bleiben alle Tabstops erhalten.

Das sieht dann etwa so aus:
[CODE]begin "FR_SH_GlTrD"
short FRZV
float SHTimer

IF (MenuMode == 1)
    return
ElseIF ( SHTimer > 0 )
    DisableTeleporting
    set SHTimer to ( SHTimer - GetSecondsPassed )
    return ;Blocks other Potions while in Sanguines Plane
ElseIF ( SHTimer < 0 )
    set SHTimer to 0
    ResetActors
    Player->PositionCell, -262, -37, 355, 180, "Suran, Deseles Haus der irdischen Freuden"
    EnableTeleporting
    set FRGlTr5 to 0
    MessageBox, "Eure Zeit in der Kammer ist zu Ende, doch Sanguine   scheint euch noch etwas Freude zu gönnen und ihr erwacht verwirrt in  den  Armen einer blonden Nord."
    return
EndIF

IF    (FRGlTr5 == 1)
    Player->PositionCell, 110, 110, 0, 180, "Sanguines Kammer"
    MessageBox: "Für kurze Zeit erlaubt euch der Trank, das Reich Sanguines zu betreten."
    set FRGlTr5 to 0
    set SHTimer to 90 + ( 0 * GetSecondsPassed )
ElseIF    (FRGlTr1 == 1)
    MessageBox "Die Macht Dibellas fließt durch euren Körper, schenkt  euch  die Kraft der Begehrten und lässt euch die Welt durch die Augen  junger  Liebe sehen."
    set FRGlTr1 to 0

ElseIF    ( FRGlTr3 == 1 )
    IF (PCWerewolf <= 0 )
      IF ( Player->GetSpell "werewolf blood" == 0 )
        set FRGlTr3 to 0
      EndIF
    EndIF
    IF ( FRGlTr3 != 0 )
      MessageBox "Die Macht Hircines zerstört die Wirkung dieses Trankes"
      set FRGlTr3 to 0
      return
    EndIF

    set FRZV to ( Random, 3)    ; Zufallsvariable für Wahl des Vampirclans
    IF (FRZV == 0)
      player->AddSpell "Vampire blood aundae"
    ElseIF (FRZV == 1)
      player->AddSpell "Vampire blood berne"
    ElseIF (FRZV == 2)
      player->AddSpell "Vampire blood quarra"
    EndIF

ElseIF (FRGlTr4 == 1)
    IF (PCVampire <= 0 )
      IF ( player->GetSpell "vampire blood aundae" == 0 )
        IF ( player->GetSpell "vampire blood berne" == 0 )
          IF ( player->GetSpell "vampire blood quarra" == 0 )
            set FRGlTr4 to 0
          EndIF
        EndIF
      EndIF
    EndIF
    IF ( FRGlTr4 != 0 )
      Messagebox "Die Macht Molag Bals zerstört die Wirkung des Trankes"
      set FRGlTr4 to 0
      return
    EndIF

    player->AddSpell "werewolf blood"

ElseIF (FRGlTr7 == 1)
    MessageBox "Nocturnals Liebe umgibt euch und ihr fühlt euch in den Schatten geborgen"
    Set FrGlTr7 to 0
EndIF

end
Keine Ahnung, ob meine Scriptüberarbeitung funktioniert, ich hab mal versucht, den Sinn des Scripts zu entschlüsseln.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Freelancer_T
Nein funktioniert leider ebenfalls nicht, aber danke. Ich krieg das schon irgendwie gebacken und wenn ich mir scripting for dummies noch fünfmal durchlesen muss...
 
Und erneut muss ich um eure Hilfe bitten.
Diesesmal wollte ich "Fischen" scripten. Wobei es im Prinzip nur darum geht, dass auf aktivieren eines "Angelkissens" und bei besitzen einer Angel und Ködern, ein Fisch ins Inventar gelegt wird (je nach Köder ein anderer Fisch), sowie der Köder entfernt wird, beim ersten Mal ein Journaleintrag, der aber bei den darauffolgenden Fischaktionen nicht mehr auftaucht und natürlich Messageboxen, die einen darauf hinweisen, dass man keine Angel bzw. keine Köder mehr hat und was evtl als Köder zu verwenden ist.
Was hab ich diesmal falsch gemacht?

Code:
[FONT=System, sans-serif][SIZE=2][B]Begin FR_SH_Ha1_Angeln[/B][/SIZE][/FONT]
 

 [FONT=System, sans-serif][SIZE=2][B]short Angelan[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]short Koder1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]short Koder2[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]short Koder3[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]short Koder4[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]short Koder5[/B][/SIZE][/FONT]
 

 [FONT=System, sans-serif][SIZE=2][B]Set Angelan to "player"->getItemcount, "FR_SH_Angel"[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]Set Koder1 to "player"->getItemcount, "ingred_bc_hypha_facia" ;Faciapilz Wert 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]Set Koder2 to "player"->getItemcount, "ingred_hound_meat_01" ;Hundefleisch Wert 2[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]Set Koder3 to "player"->getItemcount, "ingred_bread_01" ;Brot Wert 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]Set Koder4 to "player"->getItemcount, "ingred_racer_plumes_01" ;Läuferfeder Wert 20[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]Set Koder5 to "player"->getItemcount, "ingred_bc_coda_flower" ;Codablume Wert 23[/B][/SIZE][/FONT]
 

 [FONT=System, sans-serif][SIZE=2][B]if (onactivate == 1)[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]	if Journal "FR_SH_Ha1" > 4[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]		if Angelan > 0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			if Koder1 > 0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->additem "FR_SH_Fish1" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->removeitem "ingred_bc_hypha_facia" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			elseif Koder2 >0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->additem "FR_SH_Fish2" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->removeitem "ingred_hound_meat_01" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			elseif Koder3 >0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->additem "FR_SH_Fish3" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->removeitem "ingred_bread_01" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			elseif Koder4 >0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->additem "FR_SH_Fish4" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->removeitem "Ingred_racer_plumes_01" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			elseif Koder5 >0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->additem "FR_SH_Fish5" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->removeitem "ingred_bc_coda_flower" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			endif[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]		elseif Angelan > 0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			MessageBox "Ihr benötigt einen Köder, wie Hundefleisch, Rattenfleisch, Brot, Läuferfedern, oder Ähnliches."[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]		else[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			Messagebox "Ihr benötigt eine Angel."[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]		endif[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]	elseif Journal "FR_SH_Ha1" < 4[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]		if Angelan > 0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			if Koder1 > 0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->additem "FR_SH_Fish1" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->removeitem "ingred_bc_hypha_facia" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				Journal "FR_SH_Ha1", 4[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			elseif Koder2 > 0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->additem "FR_SH_Fish2" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->removeitem "ingred_hound_meat_01" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				Journal "FR_SH_Ha1", 4[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			elseif Koder3 > 0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->additem "FR_SH_Fish3" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->removeitem "ingred_bread_01" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				Journal "FR_SH_Ha1", 4[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			elseif Koder4 > 0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->additem "FR_SH_Fish4" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->removeitem "ingred_racer_plumes_01" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				Journal "FR_SH_Ha1", 4[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			elseif Koder5 > 0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->additem "FR_SH_Fish5" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				player->removeitem "ingred_bc_coda_flower" 1[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]				Journal "FR_SH_Ha1", 4[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			endif[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]		elseif Angelan > 0[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]			MessageBox "Ihr benötigt einen Köder, wie Hundefleisch, Rattenfleisch, Brot, Läuferfedern, oder Ähnliches."[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]		endif[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]	else[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]		Messagebox "Ihr benötigt eine Angel."[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]	endif[/B][/SIZE][/FONT]
 [FONT=System, sans-serif][SIZE=2][B]endif[/B][/SIZE][/FONT]

 [FONT=System, sans-serif][SIZE=2][B]end
[/B][/SIZE][/FONT]
 
Zuletzt bearbeitet:
Ich habe die Idee eine Waffe oder einen Rüstungsgegenstand zu erstellen, das den Charakter stärker macht, je weniger Lebenspunkte er prozentual besitzt.

Im Falle einer Waffe sollte der Schaden steigen.

Im Falle eines Rüstungsgegenstandes sollte die Fähigkeit "Angriff festigen" oder "Festigen Stärke" erhöht werden.

Allerdings weiß ich nicht ganz, wie ein solcher Script aussehen muss, um den Schaden einer Waffe bzw. die Stärke einer Rüstung, abhängig der Gesundheit meines Charakters, zu erhöhen.

Hat jemand eine Idee, oder sogar eine Lösung? Und geht das überhaupt mit prozentualen Werten, oder kann ich das nur mit ganzen Zahlen machen?
 
Den Schaden einer Waffe kann man nicht mit Scripting erhöhen. Man kann sie auch nicht reparieren oder anderweitig Datentechnisch verändern. Was man machen kann, ist dem Spieler eine Ability zu verpassen, abhängig vom verloren gegangenen Leben. Die Funktion GetHealthGetRatio würde hier den Prozentwert für die Berechnung liefern. Jedoch gilt es zu bedenken, dass Abilities so wie alle anderen magischen Effekte zwar von ihrer Wirkung her ggfs. mit den Eigenschaften des Spielers skalieren, ihre Werte selbst können es jedoch nicht.

Was ich damit sagen will, ist dass es nicht möglich ist einen Effekt "Festigen [Eigenschaft] [X]" zu generieren, den man von außen mit einer Variable beliebig hoch oder runter regulieren kann. Man müsste also Stufen definieren und für jede Stufe eine Ability mit dem Effekt in einer vordefinierten Stärke generieren. Dann würde das Script mit einer einfachen IF/ELSEIF Konstruktion die Ability entfernen und neu setzen (wenn nötig).

Ein Script könnte in etwa so aussehen:
Code:
begin lex_AbilityOnLifeloss_sc
short HPBuffer
short HPValue
short Reset

ElseIF player->HasItemEquipped "ITEMID"
	set Reset to 0
Else
	IF ( Reset < 0 )
		return
	EndIF
	set Reset to -1
ENDIF

set HPBuffer to HPValue
set HPValue to 10 * ( player->GetHealthGetRatio )

IF ( Reset == 0 )
  IF ( HPBuffer != HPValue )
    set Reset to 1
  EndIF
EndIF

IF ( Reset != 0 )
  player->RemoveSpell "ABID01"
  player->RemoveSpell "ABID02"
  ...
  player->RemoveSpell "ABID10"
  set Reset to ( Reset - 1 )
EndIF

IF ( Reset == 0 )
  IF ( HPValue < 1 )
    player->AddSpell "ABID10"
  ElseIF ( HPValue < 2 )
    player->AddSpell "ABID09"
  ...
  ElseIF ( HPValue < 9 )
    player->AddSpell "ABID02"
  ElseIF ( HPValue < 10 )
    player->AddSpell "ABID01"
  EndIF
EndIF

end
Das würde einen Buff in zehn Stärkestufen geben, setzt allerdings zehn Abilities voraus. Es ist auch unique, denn ein zweites Item würde nicht noch mal so buffen können, das braucht dann neue Abilities, damit die sich nicht gegenseitig überschreiben. Allerdings ohne Gewähr, da ich das da nur so ins Blau reingehämmert habe und mir grad Zeit/Lust fehlen, es zu testen ^_^
 
  • Like
Reaktionen: Gorgoroth
Vielen lieben Dank für die Hilfe. Dann werde ich das vorerst etwas aufschieben, bis ich mir selbstsicherer bin.

Ich weiß nicht, ob diese Frage hier reingehört, aber:

Ich habe vor einen kleinen durchgedrehten Argonier zu machen. Charaktererstellung ist ja nicht so schwer, allerdings hänge ich an einem Punkt fest: ich möchte, dass Bestechungen bei ihm immer scheitern und er dann mit dem Satz "Habt Ihr nicht etwas Anderes? Mondzucker zum Beispiel?" antwortet. Dann sollte es für den Spieler nur noch zwei Möglichkeiten geben (diese Antwortmöglichkeiten in rot), nämlich entweder "Mondzucker geben" oder eben "sich weigern". Ich kenne das von den Geistern, dass egal wieviel Draken man ihnen geben will, dass sie immer antworten mit "was will ein Geist mit Geld?" aber wie schaffe ich das bei dem Charakter?

Edit: Ist es eigentlich auch möglich dem NPC einen anderen Begrüßungsdialog zu geben, wenn man ihn getötet hat und er später respawnt?
 
Zuletzt bearbeitet:
Wahrscheinlich hast du die Antwort inzwischen längst selbst rausgefunden, aber weil ich so stolz bin, es als totaler Modding-Noob auch hingekriegt zu haben: Die entsprechenden Interaktionen werden im Dialog-Menü über den Reiter 'Persuasion' angesprochen. "Bribe fail" und "Bribe success". Wenn du in beiden Feldern nur eine Dialogoption für deinen NPC einträgst ("Ich will Mondzucker!"), ohne das Feld "Disp/Index" zu befüllen, müsste es klappen. Danach kannst du im Result-Feld ja deine beiden "Choice"-Dialoge für die Spielerfigur eintragen, mit wiederum den entsprechenden Folgedialogen. Wobei ich das weitere Bestechungsgespräch dann allerdings in ein eigenes, normales Dialog-Topic verlegt habe. Ich bin nicht sicher, ob an dieser Stelle so lange Gespräche (es sind ja dann doch drei Möglichkeiten abzuarbeiten: Nein, du kriegst keinen Mondzucker - Ja, du kriegst Mondzucker und ich habe auch welchen - Ja, du kriegst Mondzucker, aber upps, ich hab gar keinen in der Tasche) überhaupt vorgesehen sind.

Und ich bin, wie gesagt, total neu mit dem CS. Es funktioniert bei mir einwandfrei, aber ich kann nicht beurteilen, ob es vielleicht anderweitig Probleme macht.
 
  • Like
Reaktionen: Gorgoroth
Da bin ich mal wieder mit einem neuen Skriptproblem.

Ich möchte auf einem Baum (Organischer Container mit Respawn) ein Skript legen, der beim Aktivieren einen fragt, ob man den Baum fällen möchte. Stimmt man dem zu, kommt man ins Containermenü. Wenn man nun den Container leert, soll der Baum verschwinden und erst wieder auftauchen, wenn der Inhalt respawnt wurde.
Kann es so ein Script geben und wenn ja wie müsste es aussehen?

Mein Versuch funzt leider nicht:
begin _ly_tree_container
short state
short button
float timer

if ( GetItemCount "ID Gegenstand" == 0 )
disable
else
enable
endif

if ( onActivate == 1 )
MessageBox "Soll der Baum gefällt werden?" "Ja" "Nein"
set Button to GetButtonPressed
endif

if ( Button == -1 ) ; Nothing
return;
endif

if ( Button == 0 )
Activate
endif

endif

end

Danke schonmal im Voraus.
 
Versuch es damit:

Code:
begin _ly_tree_container
short button
short State

IF ( MenuMode )
	return
ElseIF ( GetDisabled )
	IF ( GetItemCount "ItemID" != 0 )
		enable
	EndIF
	return
ElseIF ( GetItemCount "ItemID" <= 0 )
	disable
	return
EndIF

IF ( State == 0 )
	IF ( OnActivate == 0 )
		return
	EndIF
	MessageBox "Soll der Baum gefällt werden?" "Ja" "Nein"
	set State to 1
EndIF

IF ( State == 1 )
	set Button to GetButtonPressed

	IF ( Button == -1 ) ; Nothing
		return
	ElseIF ( Button == 0 )
		activate
	EndIF

	set State to 0
EndIF

end
Du solltest folgendes zusätzlich machen:

  1. erstelle ein LichtObjekt, nicht tragbar, kein Radius, alle Farben auf Null (wenn du das nicht ohnehin schon für irgendwas erstellt hast)
  2. erstelle den Container mit Organic/Respawns Haken aktiv und lege das Lichtobjekt hinein, sowie das lootbare Objekt "ItemID" in entsprechender Zahl
  3. verlinke dein Item "ItemID" in mein Script und pack das dann auf den Container.
  4. Das Lichtobjekt verhindert den "TakeAll"-Bug bei Containern, wenn diese ganze geleert werden und von außen darauf zugegriffen werden soll. Ich bin mir nicht mehr sicher, ob es auch bei Respawn ein Preoblem gibt, also pack es lieber mit rein. Du kannst dieses Dummy problemlos noch für ganz andere Sachen verwenden, wenn es erst einmal da ist.

Probiere es aus, sollte funktionieren.
 
  • Like
Reaktionen: Lyali