Construction Set Der Scriptthread

Code:
if (OnActivate == 1)
if (GetLevel < 5 )
MessageBox "Ihr seid nicht würdig, diese Ausrüstung zu tragen."
endif
endif

einfach am Anfang des zweiten einfügen ( nach begin drachenbogen_A_AirForge_sheathe)
sollte das nicht Player->GetLevel heißen?
 
Also der Script mit denn Level funktioniert einwandfrei, des wegen kann ich dir es leider nicht sagen ob es doch so sein muss.

Also ich soll es so machen?

Code:
begin drachenbogen_A_AirForge_sheathe

if (OnActivate == 1)
  if (GetLevel < 5 )
    MessageBox "Ihr seid nicht würdig, diese Ausrüstung zu tragen."
  endif
endif

Short DoOnce

If ( player->getitemcount "drachenbogen" ==0 )
    if ( player->getitemcount "1Elipsen" >=1 )
        player->removeitem "1Elipsen",1
endif
            if ( player->getitemcount "2elipsen" >=1 )
            Player->removeitem "2elipsen", 1
endif
return
endif


If ( Player -> HasItemEquipped "drachenbogen" )
    If ( Player -> GetWeaponDrawn )
        If ( DoOnce == 0 )
                player->removeitem "1Elipsen",1
                player->additem "2elipsen", 1
                player-> equip "2elipsen", 1
                set DoOnce to 1
endif
            elseif ( DoOnce == 1 )
                player-> removeitem "2elipsen", 1
                player->additem "1Elipsen", 1
                player->equip "1Elipsen",1
                set DoOnce to 0
        endif
    endif
endif

Float timer
Short OnPCEquip
Short arrowCount

If ( MenuMode == 1 )
    Return
Endif

If ( OnPCEquip == 0 )
    return
endif

If (timer < .5)
    Set timer to (timer + GetSecondsPassed)
    return
else
    Set timer to 0
Endif

Set arrowCount to ( player -> GetItemCount, "drachenpfeil" )

If ( OnPCEquip == 1 )

    If ( arrowCount <= 0 )
        if ( player->getmagicka >= 8 )
            player->additem "drachenpfeil" 15
            player->Equip, "drachenpfeil" 15
            player->modcurrentmagicka -8
        endif
    else
        if ( player -> HasItemEquipped "drachenpfeil" )
            return
        endif
        player->Equip, "drachenpfeil" 15
    endif

endif

End
 
ja so ist es richtig. Es MUSS übrigens Player->GetLevel heißen, so wie es dasteht wird der Level des Bogens abgefragt und der ist 0, man könnte ihn also nie anlegen (ich habs ausprobiert).
Es ist übrigens schöner (=übersichtlich) wenn man die Variable alle oben hinschreib. Natürlich ist das vollkommen egal für die Funktion, aber früher oder später erkennt man selbst, dass es sinn macht seine Programme in einem deutlih lesbaren Format zu schreiben.
 
  • Like
Reaktionen: Houdini
achso ich hab es bis jetzt so getestet ob es wirklich blocken tut wen man es versucht zu nehmen

Also ich habe denn Script dann so stehen aber da fehlt etwas bzw da muss was verbessert werden:
Begin 5ruestung_block_L5

if (OnActivate == 1)
if (Player->GetLevel < 5 )
MessageBox "Ihr seid nicht würdig, diese Ausrüstung zu tragen."
endif
endif

end

Bei mir kommen dann 3 Fehlermeldungen:

"Line 4 function refernce object "if" not found."
"Line 4 function reference object "OnActivate" not found"
und der hier "Syntax Error Line4. Miss mached parenthesis."

Man das kann noch was werden, wen ich versuche das Script System zu verstehen... Kannst du mir Bitte denn Script neu schreiben?
 
Zuletzt bearbeitet:
Code:
if ( OnActivate )
	if ( ( Player->GetLevel ) < 5 )
		MessageBox "Ihr seid nicht würdig, diese Ausrüstung zu tragen."
	else
		Activate
	endif
endif

OnActivate = Benutzen (mit Leertaste oder ins geöffnete Inventar ziehen wollen) 1, falls das passiert, 0 sonst
GetLevel < 5 ist für das CS auch ein gültiger ausdruck, also wundert es sich über das davor
Missmatched parenthesis = falsch gesetzte Klammer, weil Ausdruck nicht verstanden
OnActivate stellt den Versuch aber nur fest und blockt den Zugriff, deswegen muss man nochmal mit Activate nachlegen (wenn die Bedingung zu aufheben erfüllt ist)
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Houdini
Ich komme zu euch, als bescheidener Bittsteller, mit einem Script, der einfach nicht funktionieren will :p

Der Script sollte auf eine Tür und folgendes bewirken:
Versucht der Spieler die Tür zu aktivieren ploppt eine MessageBox auf, deren Text ein Item anbietet. Es bleibt nichts anderes übrig als "Item nehmen" zu klicken, daraufhin bekommt man es auch.
Bei erneutem Aktivieren soll nichts passieren und eine weitere MessageBox à la "Nun verschwinde endlich" kommen (An der zweiten Box hab ich mich noch nicht versucht. Es klappt ja nichtmal die abgespeckte Version).

Dank meines grenzenlosen Optimismus hab ichs natürlich erstmal selbst versucht:
Code:
begin meinsuperscript

short state

	if (  OnActivate  == 1  )
		if ( state == 0  )

			MessageBox, "Willst das Item?", "Item nehmen"
			player-> additem, "Item" 1
			set state to 1

		endif
	endif

end

Klappt leider nicht. Also, wo ist der Fehler versteckt?
Danke im Vorraus
 
Zuletzt bearbeitet:
Versuch's mal damit:
Code:
begin meinsuperscript
short state

IF ( OnActivate == 0 )
 IF ( state < 1 )
  return
 EndIF
EndIF

IF ( state == -1 )
 MessageBox, "Verzieh Dich endlich!"
 return
EndIF

IF ( state == 0 )
 MessageBox "Eh Du... willst'n U haben?", "Das U nehmen."
 set state to 1
 return
EndIF

IF ( GetButtonPressed < 0 )
 return
EndIF

player->additem "UID" 1
set state to -1

end
 
  • Like
Reaktionen: Luke
Mist, ich war zu langsam, da ich aber auch grad eines gebaut habe:
Code:
begin meinsuperscript

short state

	if (  OnActivate  == 1  )
		if ( state == 0  )
			set state to 1
			MessageBox, "Willst das Item?", "Item nehmen"
		elseif ( state == 2 )
			MessageBox, "Schlange??"
		endif
	endif

	if ( state == 1 )
		if ( GetButtonPressed == 0 )
			player-> additem, "item" 1
			set state to 2
		endif
	endif

end
 
  • Like
Reaktionen: Luke
Danke an beide
£exas Script funktioniert ausgezeichnet, da hab ich Ivans garnicht mehr ausprobiert, tut mir Leid.
Dennoch werd ich bei Bedarf seins modifizieren. Ist mir vom Denkansatz her klarer :p
 
Sooo, ich bins mal wieder mit einem Scriptproblem
Nachdem mein eigener Versuch in einer mehr oder minder merkwürdigen Katastrophe geendet hat (Interior war weg, hallo?) trage ich meine Fragen wieder hierher.

Diesmal sinds drei Scripte die im Zusammenhang zueinander stehn.

1. Beim Aktivieren eines Activators soll das Tagebuch aktualisiert und der Wasserstand auf 15015 gesetzt werden.
2. Beim in Script 1 erwähnten Tagebucheintrag soll ein Activator enabled werden.
3. Beim in Script 1 erwähnten Tagebucheintrag soll ein Activator disabled werden.

Über meine erbärmlichen Versuche, die Sache selbst zu lösen breiten wir lieber den Mantel des Schweigens.
Danke im Voraus :)
 
Aaalso, versuchs mal so:
Code:
begin MyScript

float waterlevel
float waterlift
short direction

in (menumode == 1 )
  return
endif

if ( onactivate == 1)

set direction to 1

set waterlift to 200 * GetSecondsPassed
set waterlift to waterlift * direction
ModWaterLevel waterlift


set newwaterlevel to GetWaterLevel
if  (  direction == 1 )
	if  (  newwaterlevel >= 15015  )
		SetWaterLevel 15015
		set direction to 0
	endif
endif

myActivator1 -> disable
myActivator2 -> enable
Journal "MyJournalID" X
endif
end
So oder so ähnlich :)
Das X mußt du natürlich durch die entsprechende zahl deines Eintrags ersetzen :)
mfg erc

Edit: Bevor ihr euch wundert: ich hab die Wasserteile aus dem Script aus Tribunal geklaut :) die sollten alos eigntlich klappen :D
 
  • Like
Reaktionen: Luke
Danke für die Hilfe. Ich werds auch so schnell wie möglich testen, nur etwas bereitet mir Kopfschmerzen.
myActivator1 -> disable
myActivator2 -> enable
Ist bei diesen Zeilen auch gewährleistet, dass die Activators, die enabled werden vorher disabled waren?
Brauch ich da Sonderscripte für die betreffenden Activators?
Macht es einen unterschied, ob ich nur einen Activator hab oder ganz viele mit der selben ID?
 
Ist bei diesen Zeilen auch gewährleistet, dass die Activators, die enabled werden vorher disabled waren?

Einem Objekt ist es egal, wenn es mehrmals enabled oder disabled wird. In so fern egal.

Macht es einen unterschied, ob ich nur einen Activator hab oder ganz viele mit der selben ID?

Das funktioniert nur für Objekte, die "Reference Persistent" sind. Diese Objekte dürfen also nur einmal vorkommen (und sie müssen einmal vorkommen!). Damit erübrigt sich wohl die Frage ;)

Wenn du viele Gegenstände zu einem bestimmten Tagebucheintrag verändern willst, schreibst du einfach ein Script und legst es auf jeden betroffenen Gegenstand:

Code:
begin my_journal_disable_script

short state

if ( state == 0 )
  Disable
  set state to 1
endif

if ( state == 1 )
  if ( GetJournalIndex "testquest" == 100 )
    Enable
    set state to 2
  endif
endif

end
 
  • Like
Reaktionen: Luke
okeydokey

Hab die scripte ausprobiert, der von Erc hat leider nicht funktioniert.
Ich hab mich stattdessen selbst nochmal drangewagt:
Code:
begin wasserscript

short state

if (  state == 0  )
	if (  OnActivate == 1  )
		Journal "tagebuch" X
		setwaterlevel 15015
		set state to 1
	endif
endif

if (  state == 1  )
	if (  OnActivate == 1  )
		return		
	endif
endif

end

in Kombination mit Killfetzers Script hat alles so geklappt, wie es sollte. :)
Danke!
 
Code:
begin meinScript

short state
short seem

if (  state == 0  )
	if (  OnActivate == 1  )
		if (  GetItemCount, "meinRing" <= 1  )
			player-> removeItem, "meinRing" 1
			playSound, "conjuration area"
			Journal "meinEintrag" 80		
			MessageBox, "Ring zum Aktivieren verwendet"
			set state to 1
		endif
	endif
endif

if (  state == 0  )
	if (  OnActivate == 1  )
		if (  GetItemCount, "meinRing" == 0  )
			if (  seem == 0  ) 
				Journal "meinEintrag" 70	
			        MessageBox, "Es klappt nicht."
				set seem to 1
			endif
			playsound, "Gate Large Locked"			
		endif
	endif
endif

if (  state == 1  )
	if (  OnActivate == 1  )
		return		
	endif
endif

end

Okay, diesmal hab ich wirklich alles versucht :roll:
Den Script da oben hatte ich schon in Zich anderen Versionen (auch einmal alles brav ineinandergeschachtelt mit "elseifs" und wasweißichnochalles)

Der Script liegt auf einem Activator und soll bei Aktivierung folgendes tun:
Besitzt der Spieler "meinRing" soll der Tagebucheintrag "meinEintrag" 80 kommen. Zudem soll "meinRing" aus dem Inventar entfernt werden, eine MessageBox kommen und ein Sound abgespielt werden.
Sollte der Spieler "meinRing" nicht besitzen kommt ein anderer Tagebucheintrag ("meinEintrag" 70) und eine andere MessageBox .
Der Tagebucheintrag 70 soll aber nur einmal kommen, weil ich es unschön find, wenn jedes Mal die Meldung kommt, das Tagebuch sei aktualisiert worden, obwohls nicht stimmt. :?

Bei meinen Versuchen, die Sache selbst zu machen ist bisher immer nur eine der beiden Opionen gekommen, unabhängig davon, ob man "meinRing" hat oder nicht.
Wo ist der Fehler?
Danke schonmal.
 
Der Script liegt auf einem Activator und soll bei Aktivierung folgendes tun:
Besitzt der Spieler "meinRing" soll der Tagebucheintrag "meinEintrag" 80 kommen. Zudem soll "meinRing" aus dem Inventar entfernt werden, eine MessageBox kommen und ein Sound abgespielt werden.
Sollte der Spieler "meinRing" nicht besitzen kommt ein anderer Tagebucheintrag ("meinEintrag" 70) und eine andere MessageBox .
Der Tagebucheintrag 70 soll aber nur einmal kommen, weil ich es unschön find, wenn jedes Mal die Meldung kommt, das Tagebuch sei aktualisiert worden, obwohls nicht stimmt. :?

Ich gehe mal nicht von deinem Script aus. Dieses hier liefert dir die gewünschten Effekte:

Code:
begin my_toractivate_script

if ( OnActivate == 1 )
  if (Player->GetItemCount "mein Ring" >= 1 )
    Player-> removeItem, "meinRing" 1
    PlaySound "conjuration area"
    Journal "meinEintrag" 80		
    MessageBox, "Ring zum Aktivieren verwendet"
  else
    if ( GetJournalIndex "meinEintrag" < 70 )
      Journal "meinEintrag" 70
    endif
    MessageBox, "Es klappt nicht."
    PlaySound "Gate Large Locked"
  endif
endif

end

PS: Nenn deine Objekte etwas spezieller, sonst hast du Kompatiblitätsprobleme mit vielen anderen Mods.
Mein Tipp hierzu: Füge vor jedes Item dein Kürzel davor und danach ein Kürzel für die Mod (zB meine Mod Geisterlaterne hat vor allen Objekten kf_gl_ stehen).
 
  • Like
Reaktionen: Luke
Sicher, meine IDs sind nicht SO allgemein^^
Die eigentliche ID des Ringes ist "Luke_mdx_gatering"
Ich mach nur solche Dummy-IDs in diesem Thread, weil es a) kürzer und b) "anonymer" ist.
Auch die Inhalte von MessageBoces sind für den Scriptthread meist drastisch gekürzt. ;)

Script getestet und als funktionstüchtig befunden. Herzlichen Dank
 
Hallo ihr lieben ;)

So auch ich habe eine Scriptanfrage an euch

Folgende Situation:
Der Spieler soll dreimal gewarnt werden, eher er angegriffen wird, wenn er mit einer gezogenen Waffe erwischt wird. Das ganze soll nur von einer gewissen Fraktion ausgeführt werden.

Was ist zu beachten und was muss ich dabei einhalten ;)

Danke an euch im Voraus.
 
Das kann recht simpel sein - oder sehr komplex weren. Es hängt davon ab, was du dir vorstellst. Wie genau soll das mit der Warnung ablaufen? Mach mal ein paar detailliertere Angaben zu deinen Vorstellungen:

Soll es ein erzwungenes Ansprechen des Spielers geben oder n ur eine verbale Reaktion des NPCs bzw. eine MessageBox?

Soll es passieren, sobald man die Waffe in der Sichtweite eines Angehörigen der Fraktion zieht oder sich mit gezogener Waffe irgendeiner NPC nähert?

Muß man Unsichtbarkeit, Schleichen oder Chamäleonzauber berücksichtigen?

Soll es immer so sein oder abhängig von der Entfernung, ob gewarnt wird.

Können theoretisch mehrere Angehörige der Fraktion am gleichen Ort sein?

Soll es eine Rolle spielen, ob der Spieler vorher angegriffen wurde?

Zählen Zauber auch als gezogene Waffe?

Was soll passieren, wenn man mehr als drei Mal erwischt wurde...


Solche Fragen sollten geklärt sein, bevor man überhaupt anfängt, dazu etwas zu programmieren. Einiges davon ist recht trivial, anderes erfordert ordentlich Aufwand.
 
  • Like
Reaktionen: Dax`ta