Construction Set Skriptthread zum Construction Set

@ Schmelz:
Das Aufteilen sähe in etwa so aus:
Code:
array_var actors
ref actor
ref item

short key
short state

if state == 0
  ar_construct actors array
  let actor := getFirstRef 69 1
  while actor
    if actor.getIsReference player == 0 && actor.getDead
      let actors[key] := actor
      let key += 1
    endif
    getNextRef
  loop
  let state := 1
  return
elseif state == 1
  let actor := actors[key]
  let key -= 1
  forEach item <- actor
    if item.isOffLimits 7 || item.isQuestItem
      continue
    else
      item.removeMeIR player
    endif
  loop
  if key == 0
    let state := 2
  endif
endif

Aber Gildurs Skripts ist womöglich besser, da kürzer.
 
  • Like
Reaktionen: Schmelz
Gildurs Lösung führte auch zum Absturz.
Jetzt arbeite ich gerade Diarrhoe's in Gildurs ein...

edit:

Hier mal mein Ansatz:

Code:
short controlvar
ref actor
ref item
array_var items
short arrayindex

elseif controlvar == 13

ar_construct items array
set item to getfirstref 70 1 1
while actor
    set actor to item.getContainer
    if actor.getdead == 1 && actor != player
        if (isquestitem item)
            continue
        endif
        if (item.isOffLimits 7 == 0)
            let items[arrayindex] := item
            let arrayindex += 1
        endif
    endif
    set item to getnextref
loop
set controlvar to 14

elseif controlvar == 14

set arraycontrolvar to 0
set item to items[arraycontrolvar]
while item
    item.removeMeIR player
loop

set controlvar to 15
Und ja, das ist nur ein Auszug...

Ich bekomme aber einen "Expected end of line" bei "ar_construct items array".
 
Zuletzt bearbeitet:
Kein Absturz mehr, aber auch keine Wirkung mehr...?????

edit: Jetzt hab ich in Gildur's Variante den Teil mit dem Questitem gestrichen (weil er für meine Zwecke vollkommen egal ist) und jetzt gibts wieder'n Absturz!??
 
Zuletzt bearbeitet:
Erkläre mir bitte mal, was genau dein Script machen soll, denn bisher ist mir die Abfrage mit offlimits etwas fragwürdig.
 
Ich will das alle Objekte aus den Inventaren toter Personen und Kreaturen in der Umgebung, die keine "rote Hand" haben (also das es erlaubt ist sie zu nehmen) ins Spieler-Inventar wechseln.
 
Dachte ich auch, aber beim testen hatte ich auf ein mal was gestohlenes im Inventar.

edit: Kann man denn davon ausgehen, dass es eigentlich so sein sollte?
Dann währe ja mit "removealitems player" (0) alles getan^^
 
Zuletzt bearbeitet:
Hast du in deiner Abfrage auch drin, ob es ein Actor ist? Denn sonst könntest du ja vllt Items aus Kisten bekommen haben, die dann gestohlen waren:?
 
Getestet und funktioniert:

Code:
scn aaActivatorTestSCRIPT

ref actor
ref actoritem

Begin GameMode
set actor to getfirstref 69 2
while actor
	if actor.getdead == 1 && actor != player
		foreach actoritem <- actor
		if (actoritem.isOffLimits 7 == 0)
			actoritem.removemeIR player
		endif
		loop
	endif
	set actor to getnextref
loop
End

Abfrage für Quest-item müsstest du selbst noch einbauen, allerdings denke ich, dass es so schon gut ist. Weder absturz, noch eingefrorener Bildschirm. Habe Testweise NPCs in meiner Umgebung mit "kill" gekillt und alle ihre items bekommen.
 
  • Like
Reaktionen: Schmelz
@Gildur: also so?: -> Gibt bei mir 'n Absturz (und wozu überhaupt die Questitemabfrage?)
Code:
set actor to getfirstref 69 1
while actor
    if actor.getdead == 1 && actor != player
        foreach item <- actor
            if (isquestitem item)
                continue
            endif
            if (item.isOffLimits 7 == 0)
                item.removemeIR player
            endif
        loop
    endif
    set actor to getnextref
loop
@W@ldmeister:
Das macht der "removeallitems player" schon selbst wenn man keine 1 dranhängt^^
 
Das Problem lag dann warscheinlich doch woanders...

@Gildur: Die Questitem-Abfrage ist sogar SCHULD an meinen Abstürzen!!!!!!!!!
 
Gut dann schick ich gleich mal was in eigener Sache hinterher;) Allerdings ist das Skript derart monströs, dass ich nur einen Teil poste:
ScriptName HutSkeletonScript
Short Pressed
Short Button

[...]
;IF YOU CHOSE TO CHANGE SETTINGS
Begin GameMode
If Pressed == 1
Set Button to GetButtonPressed
If Button == 0
Messagebox "Wollt Ihr das Level Eures Begleiters erhöhen?" "Level um 1 erhöhen (Kosten: 10000 Gold)" "Level um 5 erhöhen (Kosten: 50000 Gold)" "Level um 10 erhöhen (Kosten: 100000 Gold)" "Level nicht erhöhen"
Set PressedLevel to 1
Set Pressed to 0
Set Button to 5
Elseif Button == 1
MessageBox "Waffe wechseln zu?" "Pfeil und Bogen" "Axt" "Schwert" "Nahkampf" "Waffe behalten"
Set PressedEquipment to 1
Set Pressed to 0
Set Button to 5
Elseif Button == 2
MessageBox "Was soll Euer Begleiter tun?" "Folgen" "Schleichend folgen" "Warten"
Set PressedPursuit to 1
Set Pressed to 0
Set Button to 5
Elseif Button == 3
If GotHeal == 0 && GotFire == 0 && GotFrost == 0 && GotShock == 0
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Heilzauber 25 Pkt. auf sich selbst (Kosten: 1 Welkyndstein)" "Feuerschaden 25 Pkt. auf Ziel (Kosten: 2 Welkyndsteine)" "Eisschaden 25 Pkt. auf Ziel (Kosten: 3 Welkyndsteine)" "Schockschaden 25 Pkt. auf Ziel (Kosten: 5 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu1 to 1
Elseif GotHeal == 1 && GotFire == 0 && GotFrost == 0 && GotShock == 0
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Feuerschaden 25 Pkt. auf Ziel (Kosten: 2 Welkyndsteine)" "Eisschaden 25 Pkt. auf Ziel (Kosten: 3 Welkyndsteine)" "Schockschaden 25 Pkt. auf Ziel (Kosten: 5 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu2 to 1
Elseif GotHeal == 0 && GotFire == 1 && GotFrost == 0 && GotShock == 0
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Heilzauber 25 Pkt. auf sich selbst (Kosten: 1 Welkyndstein)" "Eisschaden 25 Pkt. auf Ziel (Kosten: 3 Welkyndsteine)" "Schockschaden 25 Pkt. auf Ziel (Kosten: 5 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu3 to 1
Elseif GotHeal == 0 && GotFire == 0 && GotFrost == 1 && GotShock == 0
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Heilzauber 25 Pkt. auf sich selbst (Kosten: 1 Welkyndstein)" "Feuerschaden 25 Pkt. auf Ziel (Kosten: 2 Welkyndsteine)" "Schockschaden 25 Pkt. auf Ziel (Kosten: 5 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu4 to 1
Elseif GotHeal == 0 && GotFire == 0 && GotFrost == 0 && GotShock == 1
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Heilzauber 25 Pkt. auf sich selbst (Kosten: 1 Welkyndstein)" "Feuerschaden 25 Pkt. auf Ziel (Kosten: 2 Welkyndsteine)" "Eisschaden 25 Pkt. auf Ziel (Kosten: 3 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu5 to 1
Elseif GotHeal == 1 && GotFire == 1 && GotFrost == 0 && GotShock == 0
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Eisschaden 25 Pkt. auf Ziel (Kosten: 3 Welkyndsteine)" "Schockschaden 25 Pkt. auf Ziel (Kosten: 5 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu6 to 1
Elseif GotHeal == 1 && GotFire == 0 && GotFrost == 1 && GotShock == 0
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Feuerschaden 25 Pkt. auf Ziel (Kosten: 2 Welkyndsteine)" "Schockschaden 25 Pkt. auf Ziel (Kosten: 5 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu7 to 1
Elseif GotHeal == 1 && GotFire == 0 && GotFrost == 0 && GotShock == 1
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Feuerschaden 25 Pkt. auf Ziel (Kosten: 2 Welkyndsteine)" "Eisschaden 25 Pkt. auf Ziel (Kosten: 3 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu8 to 1
Elseif GotHeal == 0 && GotFire == 1 && GotFrost == 1 && GotShock == 0
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Heilzauber 25 Pkt. auf sich selbst (Kosten: 1 Welkyndstein)" "Schockschaden 25 Pkt. auf Ziel (Kosten: 5 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu9 to 1
Elseif GotHeal == 0 && GotFire == 1 && GotFrost == 0 && GotShock == 1
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Heilzauber 25 Pkt. auf sich selbst (Kosten: 1 Welkyndstein)" "Eisschaden 25 Pkt. auf Ziel (Kosten: 3 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu10 to 1
Elseif GotHeal == 0 && GotFire == 0 && GotFrost == 1 && GotShock == 1
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Heilzauber 25 Pkt. auf sich selbst (Kosten: 1 Welkyndstein)" "Feuerschaden 25 Pkt. auf Ziel (Kosten: 2 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu11 to 1
Elseif GotHeal == 1 && GotFire == 1 && GotFrost == 1 && GotShock == 0
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Schockschaden 25 Pkt. auf Ziel (Kosten: 5 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu12 to 1
Elseif GotHeal == 1 && GotFire == 1 && GotFrost == 0 && GotShock == 1
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Eisschaden 25 Pkt. auf Ziel (Kosten: 3 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu13 to 1
Elseif GotHeal == 1 && GotFire == 0 && GotFrost == 1 && GotShock == 1
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Feuerschaden 25 Pkt. auf Ziel (Kosten: 2 Welkyndsteine)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu14 to 1
Elseif GotHeal == 0 && GotFire == 1 && GotFrost == 1 && GotShock == 1
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Heilzauber 25 Pkt. auf sich selbst (Kosten: 1 Welkyndstein)" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu15 to 1
Elseif GotHeal == 1 && GotFire == 1 && GotFrost == 1 && GotShock == 1
Messagebox "Welchen Zauber wollt Ihr Eurem Begleiter beibringen?" "Magicka-Wert um 100 Pkt. erhöhen (Kosten: 5 Varlasteine)" "Nichts lehren"
Set SpellMenu16 to 1
Endif
; SPELL MENUS WILL RUN IN QUEST-SCRIPT
Set HutSkeletonQuest.StartSpellMenu to 1
Set Pressed to 0
Set Button to 5
Elseif Button==4
;Do nothing
Set Pressed to 0
Set button to 5
Endif
Endif
End

ScriptName HutSkeletonQuestScript
Short StartSpellMenu
Float fQuestDelayTime


;SPELL MENU 1
Begin GameMode
If StartSpellMenu == 1
Set fQuestDelayTime to 0.01
If SpellMenu1 == 1
Set SpellMenu1Button to GetButtonPressed
If SpellMenu1Button == 0
If Player.GetItemCount WelkyndStone >= 1
HutSkeletonLeveledRef.Addspell HutSkeletonSpellHeal
Message "Euer Begleiter hat einen neuen Zauber erlernt"
Player.RemoveItem WelkyndStone 1
PlaySound UIStatsSkillUp
Set GotHeal to 1
Else
Set CanNotPay to 1
Endif
Set SpellMenu1Button to 5
Set SpellMenu1 to 0
Elseif SpellMenu1Button == 1
If Player.GetItemCount WelkyndStone >= 2
HutSkeletonLeveledRef.Addspell HutSkeletonSpellFire
Message "Euer Begleiter hat einen neuen Zauber erlernt"
Player.RemoveItem WelkyndStone 2
PlaySound UIStatsSkillUp
Set GotFire to 1
Else
Set CanNotPay to 1
Endif
Set SpellMenu1Button to 5
Set SpellMenu1 to 0
Elseif SpellMenu1Button == 2
If Player.GetItemCount WelkyndStone >= 3
HutSkeletonLeveledRef.Addspell HutSkeletonSpellFrost
Message "Euer Begleiter hat einen neuen Zauber erlernt"
Player.RemoveItem WelkyndStone 3
PlaySound UIStatsSkillUp
Set GotFrost to 1
Else
Set CanNotPay to 1
Endif
Set SpellMenu1Button to 5
Set SpellMenu1 to 0
Elseif SpellMenu1Button == 3
If Player.GetItemCount WelkyndStone >= 5
HutSkeletonLeveledRef.Addspell HutSkeletonSpellShock
Message "Euer Begleiter hat einen neuen Zauber erlernt"
Player.RemoveItem WelkyndStone 5
PlaySound UIStatsSkillUp
Set GotShock to 1
Else
Set CanNotPay to 1
Endif
Set SpellMenu1Button to 5
Set SpellMenu1 to 0
Elseif SpellMenu1Button == 4
If Player.GetItemCount VarlaStone >= 5
Set IncreaseMagicka to 1
Message "Der Magicka-Wert Eures Begleiters wurde erhöht"
Player.RemoveItem VarlaStone 5
PlaySound UIItemEnchant
Else
Set CanNotPay to 1
Endif
Set SpellMenu1Button to 5
Set SpellMenu1 to 0
Elseif SpellMenu1Button == 5
;Do nothing
Set SpellMenu1Button to 6
Set SpellMenu1 to 0
Endif

;SPELL MENU 2
(Geht so weiter bis SpellMenu16)

(Alle SpellMenus, SpellMenuButtons, CanNotPay und die GotHeal/Fire/Frost/Shock sind Globals) Das Companion-Skript läuft eigentlich, aber wenn ich etwas auswähle, hat es keine Auswirkung - die ja im Quest-Skript geregelt wird...