Construction Set Skriptthread zum Construction Set

Hallo

Ich hätte da mal eine Frage wodurch kommt es das ich wenn ich einem Skript etwas hinzufüge, ich beim Speichern im Cs eine Syntaxfehlermeldung bekomme die mit der Änderung nicht das geringste zu tun hat? Das Problem tritt auch auf wenn ich nur einen Buchstaben lösche und wieder schreibe damit das Skript als geändert angesehen wird also gar nichts verändert wurde.

Gruß Thayja

mhh beinhaltet das script vlt OBSE befehle?
wenn ja startest du das CS mit OBSE?
falls nicht solltest du das unbedingt tun ansonsten erkennt das CS die OBSE befehle nicht und kann somit die Scripte zwar laden, aber nicht speichern.

mfg takbir
 
@ _DICE_: So müsste es heißen:
Code:
Scn aaassassinJamesScript

Begin GameMode

If GetDead == 0
return
Elseif ( GetDead == 1 ) && ( GetStage aaassassinguild1 < 10 )
        SetStage aaassassinguild1 10
        AddTopic aaaJamesisdeadwhatisnext
EndIf

End
AddTopic funktioniert etwas anders.
AddTopic "addet" nicht wirklich ein Thema, sondern macht es dem Spieler bekannt. Deswegen darfst du auch keine Referenz vor AddTopic hinschreiben, sonst klappt es nicht.
Was den return-befehl angeht: Sobald der ausgeführt wird, wird alles, was danach steht, übersprungen (um Performance zu sparen, glaube ich). Deswegen ist ein return-befehl am Ende nutzlos.

Nur um sicher zu gehen: Der Script muss auf einem NPC liegen.
 
Zuletzt bearbeitet:
Ja, das Skript liegt auf einem NPC und stimmt, wenn das Return für Performance sorgt, sollte es an den Anfang. Ich kenn es halt nur als Notnagel falls ein DAU es schafft, die Schleife auszuhebeln.
AddTopic ohne ref probier ich sofort.

Edit: Tut leider trotzdem nicht. Ich hab testhalber eine MessageBox an das Ende des Skriptes gesetzt, die wird angezeigt. Also eghe ich davon aus, dass das Skript funktioniert. Aber warum erscheint das Topic dann nicht bei dem NPC? Im Questfenster ist es in der linken Tabelle eingetragen, Conditions hatte ich mal, hab ich aber auch ohne getestet.
Ich verstehe es nicht.
 
Zuletzt bearbeitet von einem Moderator:
Dafür gibt es mehrere, mögliche Fehlerquellen. Was mir spontan einfällt:
-fehlende Priority der Quest (ich empfehle 60)
-die Condition "GetIsPlayableRace == 1" bei "Quest Data" der Quest
-fehlende Condition beim Topic (zB. GetIsID [SpeakerID])

Überprüfe die Punkte mal.
 
  • Like
Reaktionen: 1 Person
Danke nun geht's.
Muss wohl an IsPlayableRace liegen, hatte ich vorher nicht drin.
 
Hi!

Ist es eigentlich generell besser Werte auf die von verschiedenen Scripts aus zugegriffen wird in globalen Variablen zu speichern oder einfach über die Referenz darauf zuzugreifen? Also gibt's da evtl. Unterschiede in der Performance oder ist das völlig gleich von wo ausgelesen wird?
 
Was für Werte sind denn das?
Davon hängt es ja auch etwas ab.

Wenn es ein fester Wert ist, hat eine Global vermutlich den Vorteil, dass sie kürzer ist, aber ob es da einen Performanceunterschied gibt, weiß ich nicht genau.
 
Sind hauptsächlich short Variablen, die ich momentan als globale Variablen habe. Mittlerweile ist aber ein Objekt hinzugekommen, das per Script diese globalen Variablen verändert. Ich könnte die Globalen ja jetzt alle zu Script-Variablen des neuen Objekts machen. Hab mich halt gefragt, ob das in irgendeiner Form nen Unterschied macht, aber is wohl Jacke wie Hose oder?
 
Item einem NPC hinzufügen

Hi, ich möchte im Rahmen eines Quests einem NPC einen Gegenstand hinzufügen. Ganz einfache Sache eigentlich...sollte man meinen...

Habe es versucht mit:

Code:
NPC_ID.AddItem Item_ID 1

Klappt nur nicht...
 
@Jollina: Hast Du irgendwelche Bedingungen?
Am besten wäre es, Du würdest das Skript mal posten.
 
Hi,
also ich habe ein Problem mit folgendem Script:

Code:
scn MyScript

short aaaWahl01

short AnzahlDex

short AnzahlMana

short AnzahlHeal

Begin OnActivate

MessageBox "Welchen Trank wollt ihr brauen?" , "Heiltrank(2 Heilpflanzen)" , "Magietrank(3 Zauberwurzeln)" , "Ausdauertrank(3 Kraftwurzeln)"

End

Begin GameMode

set aaaWahl01 to GetButtonPressed

set AnzahlHeal to player.GetItemCount "aaaHealPlant01"

set AnzahlMana to player.GetItemCount "aaaManaPlant01"

set AnzahlDex to player.GetItemCount "aaaDexPlant01"

if aaaWahl01 == 0
   if AnzahlHeal >= 2
       player.removeitem "aaaHealPlant01" 2
       player.additem "aaaERZHealTrank01" 1
      if AnzahlHeal <= 1 
       MessageBox "Du hast nicjt genug Zutaten" , "Weiter"
      endif
   endif
endif

if aaaWahl01 == 1
   if AnzahlMana >= 3
      player.removeitem "aaaManaPlant01" 3
      player.additem "aaaERZManaTrank01" 1
     if AnzahlMana < 3
       MessageBox "Du hast nicht genug Zutaten" , "Weiter"
     endif
   endif
endif

if aaaWahl01 == 2
   if AnzahlMana >= 3
       player.removeitem "aaaDexPlant01" 3
       player.additem "aaaERZDexTrank01" 1
      if AnzahlMana < 3
         MessageBox "Du hast nicht genug Zutaten" , "Weiter"
      endif
   endif
endif
end
Wenn der Spieler nicht genug Zutaten hat soll eine MessageBox darauf hinweisen aber im als ich es im Spiel testen wollten erscheint keine MessageBox woran liegt das?
 
Code:
scn MyScript

short aaaWahl01

short AnzahlDex

short AnzahlMana

short AnzahlHeal

Begin OnActivate
set aaaWahl01 to GetButtonPressed

set AnzahlHeal to player.GetItemCount "aaaHealPlant01"

set AnzahlMana to player.GetItemCount "aaaManaPlant01"

set AnzahlDex to player.GetItemCount "aaaDexPlant01"

MessageBox "Welchen Trank wollt ihr brauen?" , "Heiltrank(2 Heilpflanzen)" , "Magietrank(3 Zauberwurzeln)" , "Ausdauertrank(3 Kraftwurzeln)"

End

Begin GameMode

if aaaWahl01 == -1
 set aaaWahl01 to GetButtonPressed
 elseif aaaWahl01 == 0
      if AnzahlHeal <= 1 
       MessageBox "Du hast nicht genug Zutaten"
       elseif AnzahlHeal >= 2
       player.removeitem "aaaHealPlant01" 2
       player.additem "aaaERZHealTrank01" 1
      endif
 elseif aaaWahl01 == 1
     if AnzahlMana < 3
       MessageBox "Du hast nicht genug Zutaten"
    elseif AnzahlMana >= 3
      player.removeitem "aaaManaPlant01" 3
      player.additem "aaaERZManaTrank01" 1
     endif
  elseif aaaWahl01 == 2
      if AnzahlMana < 3
         MessageBox "Du hast nicht genug Zutaten"
      elseif AnzahlMana >= 3
       player.removeitem "aaaDexPlant01" 3
       player.additem "aaaERZDexTrank01" 1
      endif
   endif
endif
end

Versuch es mal so, ich kanns jetz nicht testen, da ich die zutaten nicht habe ;)
 
  • Like
Reaktionen: EraZeR
Jetz funktioniert es aber die Meldung wird jetzt in jedem Frame angezeigt:cry::cry::cry::cry:(weil es ja im GameMode läuft)
 
Probier mal den hier:
Code:
scn MyScript

short button
short AnzahlDex
short AnzahlMana
short AnzahlHeal

Begin OnActivate

set AnzahlHeal to player.GetItemCount aaaHealPlant01
set AnzahlMana to player.GetItemCount aaaManaPlant01
set AnzahlDex to player.GetItemCount aaaDexPlant01

MessageBox "Welchen Trank wollt ihr brauen?" , "Heiltrank(2 Heilpflanzen)" , "Magietrank(3 Zauberwurzeln)" , "Ausdauertrank(3 Kraftwurzeln)"

End

Begin GameMode

set button to GetButtonPressed

if button == 0
   if AnzahlHeal >= 2
       player.removeitem aaaHealPlant01 2
       player.additem aaaERZHealTrank01 1
   Elseif AnzahlHeal < 2
       MessageBox "Du hast nicht genug Zutaten"
   endif

Elseif button == 1
   if AnzahlMana >= 3
      player.removeitem aaaManaPlant01 3
      player.additem aaaERZManaTrank01 1
   Elseif AnzahlMana < 3
       MessageBox "Du hast nicht genug Zutaten"
   endif

elseif button == 2
   if AnzahlMana >= 3
       player.removeitem aaaDexPlant01 3
       player.additem aaaERZDexTrank01 1
   Elseif AnzahlMana < 3
         MessageBox "Du hast nicht genug Zutaten"
   endif
endif
end
 
  • Like
Reaktionen: EraZeR
Code:
scn MyScript

short button
short AnzahlDex
short AnzahlMana
short AnzahlHeal

Begin OnActivate

set AnzahlHeal to player.GetItemCount aaaHealPlant01
set AnzahlMana to player.GetItemCount aaaManaPlant01
set AnzahlDex to player.GetItemCount aaaDexPlant01
Set Button to GetButtonPressed

MessageBox "Welchen Trank wollt ihr brauen?" , "Heiltrank(2 Heilpflanzen)" , "Magietrank(3 Zauberwurzeln)" , "Ausdauertrank(3 Kraftwurzeln)"

End

Begin GameMode

set button to GetButtonPressed
If Button == -1
Set Button to GetButtonPressed
elseif button == 0
   if AnzahlHeal >= 2
       player.removeitem aaaHealPlant01 2
       player.additem aaaERZHealTrank01 1
   Elseif AnzahlHeal < 2
       MessageBox "Du hast nicht genug Zutaten"
   endif

Elseif button == 1
   if AnzahlMana >= 3
      player.removeitem aaaManaPlant01 3
      player.additem aaaERZManaTrank01 1
   Elseif AnzahlMana < 3
       MessageBox "Du hast nicht genug Zutaten"
   endif

elseif button == 2
   if AnzahlMana >= 3
       player.removeitem aaaDexPlant01 3
       player.additem aaaERZDexTrank01 1
   Elseif AnzahlMana < 3
         MessageBox "Du hast nicht genug Zutaten"
   endif
endif
end
Versuch das mal, vielleicht funktioniert es.
 
  • Like
Reaktionen: EraZeR
Sorry Leute aber eure Scripts helfen mir nicht weiter wenn die erste MessageBox erscheint kommt sofort wieder eine neue. Das liegt daran, dass das Script zum Teil im GameMode ausgeführt wird.Ich habe es auch schon mit control-variablen versucht die dann nach erscheinen der MessageBox auf 1 gesetz werden sollen aber das funktioniert auch nicht:cry::cry::cry:
 
Das müsste etwas anders laufen.
Du setzt alle Messageboxen, die es gibt, in den OnActivate-Block.
Zusätzlich deklarierst du eine neue Variable, mit der du sozusagen die Seitenzahl bestimmst.

Dann etwa so:

Code:
short seite

begin OnActivate
...
if seite == 1
   Messagebox 1
elseif seite == 2
   Messagebox 2
...
endif
end

begin GameMode
...
if button == 0 && seite == [x]
...
   elseif Anzahlx < 2
       set seite to [entsprechende Messagebox]

So sollte das klappen.
Solltest du das nicht ganz verstanden haben, schreib ich dir das nochmal ganz auf.

PS:
Wieso habt ihr 3x "Set button to GetButtonPressed" ?
Das scheint mir etwas viel.^^
 
Zuletzt bearbeitet:
  • Like
Reaktionen: EraZeR