Construction Set Skriptthread zum Construction Set

Oh, sorry Kahmul, ich hatte deinen edit wirklich nicht bemerkt. Ich korrigiere das Skript und probiere es nochmal aus. Aber morgen erst, ist schon wieder so spät geworden. Gute Nacht allerseits!;)
 
Sorry für den Doppelpost, aber ein Edit hätte kaum einer bemerkt.

Zunächst einmal vielen Dank Kahmul für dein Skript. Hat geklappt.

Ich möchte nun ein weiteres Skript vorstellen, das zwar funktioniert, aber ich möchte trotzdem von euch wissen, ob es nicht zu aufgebläht ist. Kann man das noch optimieren? Es ist das Skript für die Waffe, welche die magische Barriere zu Fall bringen soll. Es wurde ein wenig angepasst und noch mit Sound und Timer versehen. Wie gesagt, es funktioniert so wie es ist. Aber was meint ihr, kann man es vielleicht noch optimieren?


PHP:
scn AWDEnstaffSkript

Begin ScriptEffectStart

short doonce
if getIsReference AWDObeliskRef
set "00AriellesWeyeDorfVergessenerSchrein".MagicWallHit to ("00  AriellesWeyeDorfVergessenerSchrein".MagicWallHit + 1 )
if "00AriellesWeyeDorfVergessenerSchrein".MagicWallHit == 3    
disable
endif
endif
end

Begin GameMode
playsound AWDMagicBarriereKnall
Float Timer
if(doonce == 2)  
set timer to timer + getsecondspassed 
if(timer >= 4)   
set doonce to 0   
set timer to 0  
return 
endif
endif
end

Würde mich über Vorschläge freuen.
 
Hallo Arielle,

bei dem Skript würde ich so direkt nichts mehr optimieren, lediglich ein wenig das ganze Skript einrücken, aber mehr auch wirklich nicht. ;)

Edit: Mir fällt doch noch was auf, was ist mit der short doonce? Wieso ist die denn im ersten Block? Geht das überhaupt gut? Außerdem, wo wird die denn auf 2 gesetzt damit du unten Abfragen kannst? :?

MfG Master of Worlds
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Arielle 1000
Hallo Arielle,

bei dem Skript würde ich so direkt nichts mehr optimieren, lediglich ein wenig das ganze Skript einrücken, aber mehr auch wirklich nicht. ;)

MfG Master of Worlds

Ich schon. ;)

1.) Variablen deklariert man außerhalb der Skriptblöcke.
2.) Wie soll der GameMode-Block ablaufen? Wo wird DoOnce auf 2 gesetzt?
3.) Einrücken
4.) Wenn möglich IDs ohne Zahlen am Anfang wählen.
Code:
scn AWDEnstaffSkript

short doonce
Float Timer

Begin ScriptEffectStart

if getIsReference AWDObeliskRef
	set "00AriellesWeyeDorfVergessenerSchrein".MagicWallHit to ("00  AriellesWeyeDorfVergessenerSchrein".MagicWallHit + 1 )
	if "00AriellesWeyeDorfVergessenerSchrein".MagicWallHit >= 3    
		disable
	endif
endif
end

Begin GameMode
playsound AWDMagicBarriereKnall
if( doonce == 2 )  
	set timer to timer + getsecondspassed 
	if(timer >= 4)   
		set doonce to 0   
		set timer to 0  
		return 
	endif
endif
end
 
  • Like
Reaktionen: Arielle 1000
Jetzt wo ihr es sagt sehe ich das auch. Das doonce sollte im GameMode-Block sitzen. Ein Wunder, dass es dennoch klappt.
Im Prinzip soll es ja so vonstatten gehen: der Player schießt mit der Waffe 3 mal auf die magische Wand, jeder Schuss wird mit einem Sound untermalt, die Barriere wird nach dem 3. Schuss disabled.
 
Zuletzt bearbeitet:
Wozu hast Du den Timer eingebaut? Der Timer müsste sowieso jeden Frame laufen, damit er die Sekunden zählen kann. Das tut er im Zauber aber nicht.
Mein Skript oben war nur für den Trigger gedacht.
 
Kahmul, dein Trigger-Skript war für etwas ganz anderes.

Oje, jetzt wird's kompliziert, ich erklär das mal von Anfang an:

Der Player befindet sich an einem Ort ausserhalb von Cyrodiil. Er will diesen Ort verlassen, aber eine magische Wand versperrt ihm den Weg.

Mit diesem "AWDEnstaffSkript", das auf der Waffe liegt, wird die magische Wand beschossen. Der timer soll den Sound der Waffe bei jedem Schuss abspielen, also alle 4 Sekunden. Nach dem dritten Schuss fällt die magische Wand, und hier.........Kahmul, hier kommt dein Skript ins Spiel, das auf einem Trigger liegt, mit dem der Spieler diese Welt verlässt und nach Cyrodiil teleportiert wird. Dein Skript funktioniert tadellos und wird auch nicht verändert.
Es geht jetzt lediglich um das Skript, das auf der Waffe liegt, das wir ein wenig angepasst haben.

Es sind also 2 verschiedene Skripte, bitte nichts durcheinanderbringen.:D
 
Ich glaube, Du verstehst mich falsch. Ich frage, wozu Du einen Timer in das Skript eingebaut hast? Du brauchst ihn hier nicht. Der Timer kann noch nicht einmal starten.
 
Er soll jeden Schuss akustisch untermalen, da die Waffe selber akustisch nichts hergibt. Jedes mal wenn die Wand getroffen wird, soll ein Knallgeräusch erschallen, und zwar 4 Sekunden lang.
 
Dann kannst du den Befehl auch im "ScriptEffectStart"-Block benutzen. Außerdem wird ein Zauber-Effekt auf einem Activator sowieso nur einen Frame ausgeführt, ein Timer ist also nutzlos.
 
Code:
scn AWDEnstaffSkript

short doonce
Float Timer

Begin ScriptEffectStart

if getIsReference AWDObeliskRef
    set "00AriellesWeyeDorfVergessenerSchrein".MagicWallHit to ("00  AriellesWeyeDorfVergessenerSchrein".MagicWallHit + 1 )
    playsound AWDMagicBarriereKnall
    if "00AriellesWeyeDorfVergessenerSchrein".MagicWallHit >= 3    
        disable
    endif
endif
end

Das hier reicht schon.
 
  • Like
Reaktionen: Arielle 1000
Kahmul, wird der Sound auch wirklich bei jedem Schlag ertönen?

Im Skript von Kahmul wird erst die Questvariable MagicWallHit auf MagicWallHit +1 gesetzt, danach wird der PlaySoundbefehl genutzt, denn wie du siehst befindet sich beides in der selben If-Abfrage. Wenn die Abfrage also zutrifft, dann sollte der ganze Block innerhalb des If ausgeführt werden. Wenn die Questvariable dann auf 3 steht oder sogar höher ist, verschwindet die Wand. :)

Also ja, er sollte bei jedem Schlag ertönen.

MfG Master of Worlds
 
  • Like
Reaktionen: Arielle 1000
ich habe für jeden npc den man abgefragt hab eine eigene queststage errichtet. "Ihr wart schon bei NPC1/2/3", und die können nicht die selbe Stage, also Nummer, haben.
Wenn ich jetzt als Condition == setze, dann beißt sich das doch irgendwann, weil man wenn man NPC2 besucht hat, NPC1 aber noch nicht, die Stage von NPC1 nicht mehr erreichen kann und es somit mit den Conditions nicht mehr hinhaut.

Das Problem hat sich zwar inzwischen wohl erledigt, aber als Anmerkung noch:

Man könnte auch einfach ein paar mehr QuestStages einrichten, und überspringt die unpassenden einfach. Kleines Beispiel:

QuestStage 10:
alle 3 NPCs anzeigen
Wenn Treffen mit NPC1 gehe zu QuestStage 21
Wenn Treffen mit NPC2 gehe zu QuestStage 22
Wenn Treffen mit NPC3 gehe zu QuestStage 23


QuestStage 21
NPC1 erledigt, und nicht mehr anzeigen
Wenn Treffen mit NPC2 gehe zu QuestStage 31
Wenn Treffen mit NPC3 gehe zu QuestStage 33

QuestStage 22
NPC2 erledigt, und nicht mehr anzeigen
Wenn Treffen mit NPC3 gehe zu QuestStage 32
Wenn Treffen mit NPC1 gehe zu QuestStage 31

QuestStage 23
NPC3 erledigt, und nicht mehr anzeigen
Wenn Treffen mit NPC1 gehe zu QuestStage 33
Wenn Treffen mit NPC2 gehe zu QuestStage 32


QuestStage 31
NPC1 und 2 erledigt, und nicht mehr anzeigen
Wenn Treffen mit NPC3 gehe zu QuestStage 40

QuestStage 32
NPC2 und 3 erledigt, und nicht mehr anzeigen
Wenn Treffen mit NPC1 gehe zu QuestStage 40

QuestStage 33
NPC3 und 1 erledigt, und nicht mehr anzeigen
Wenn Treffen mit NPC2 gehe zu QuestStage 40


QuestStage 40
alle 3 NPCs getroffen

Bei noch mehr NPCs wirds allerdings kompliziert, da wäre der andere Weg (erheblich) einfacher :)
 
Zuletzt bearbeitet:
Ist es möglich einen Zauber per Script auszurüsten?

edit: Noch was; beim Ausführen eines bestimmten Scriptes macht mich OBSE per MessageBox darauf aufmerksam, dass ich mir die OBSE.log-Datei anschauen sollte. Das einzige, was irgendwie auffällig ist, ist dieser Teil:
Code:
** Script Error: Script 090074df in file "Oiobalagea av Molag.esp" **
    Function must be used within a Set statement
Function must be used within a Set statement or OBSE expression
Seltsamer Weisekann ich besagtes Script nicht finden.
Das Script, das die Meldung auslöst sieht so aus:
PHP:
ScriptName OaMMarkSpell

string_var path

Begin ScriptEffectStart

if getbaseobject == OaMSaeule
    sv_Construct string path
    let path := "\Schmelz-OaM\Säule_01.dds"
    if gettexturepath == path
        settexturepath "\Schmelz-OaM\Säule_02.dds"
    else
        settexturepath "\Schmelz-OaM\Säule_01.dds"
    endif
endif

End
 
Zuletzt bearbeitet: