Construction Set Skriptthread zum Construction Set

schmieden

hi, ich habe heute mal wieder ein bisschen an meiner TC mit meinem team gearbeitet und meinen schmieden skript verfasst, wie er eigendlich funzen sollte

hier hab ich schonmal eine fast fertige version in der man sich schon durch die menüs navigieren kann.

ich habe heute grob angefange und wollte sie dann noch erweitern bzw bedingungen ändern

scn Schmiede

short kind
short hand
short weapon

set kind

begin OnActivate
{
MessageBox "Was wollt ihr schmieden?" "Schwert", "Axt", "Hammer";
set Kind to GetButtonPressed;

if kind == 1
{
MessageBox "Welche art von schwert?" "Einhänder", "Zweihänder";
set hand to GetButtonPressed;
}

if kind == 2
{
MessageBox "Wie wollt ihr eure axt führen?" "Einhändig", "zweihändig";
set hand to GetButtonPressed;
}
if kind == 3
{
Messagebox "Wie wollt ihr euren Hammer führen?" "einhändig", "zweihändig"
set hand to GetButtonPressed;
}
}
}

meine frage ist nur, funktioniert diese verschachtelung denn ?? Ich habe das momentan nicht testen können , da jemand anderes gerade an der schmiede arbeitet und ich so ingame noch nichts machen konnte.
2. Kann ich irgendeine fertigkeit dem spieler geben, die er lernen kann, damit er zunehmend bessere waffen schmieden kann?
3. würde das als bedingugn für den hammer funktionieren?
player.getitemcount (id von meinem hammer) 1

mfg IPROMISEYOUCRY
 
Zuletzt bearbeitet:
hi, ich habe heute mal wieder ein bisschen an meiner TC mit meinem team gearbeitet und meinen schmieden skript verfasst, wie er eigendlich funzen sollte

hier hab ich schonmal eine fast fertige version in der man sich schon durch die menüs navigieren kann.

ich habe heute grob angefange und wollte sie dann noch erweitern bzw bedingungen ändern

scn Schmiede

short kind
short hand
short weapon

set kind

begin OnActivate
{
MessageBox "Was wollt ihr schmieden?" "Schwert", "Axt", "Hammer";
set Kind to GetButtonPressed;

if kind == 1
{
MessageBox "Welche art von schwert?" "Einhänder", "Zweihänder";
set hand to GetButtonPressed;
}

if kind == 2
{
MessageBox "Wie wollt ihr eure axt führen?" "Einhändig", "zweihändig";
set hand to GetButtonPressed;
}
if kind == 3
{
Messagebox "Wie wollt ihr euren Hammer führen?" "einhändig", "zweihändig"
set hand to GetButtonPressed;
}
}
}

meine frage ist nur, funktioniert diese verschachtelung denn ?? Ich habe das momentan nicht testen können , da jemand anderes gerade an der schmiede arbeitet und ich so ingame noch nichts machen konnte.
2. Kann ich irgendeine fertigkeit dem spieler geben, die er lernen kann, damit er zunehmend bessere waffen schmieden kann?
3. würde das als bedingugn für den hammer funktionieren?
player.getitemcount (id von meinem hammer) 1

mfg IPROMISEYOUCRY
Das wird so nicht funktionieren. Dein ersten script würde ich so schreiben.

Code:
scn schmiede 

short button4
short button3
short button2
short button1
short kind 
shot hand 
short weapon

Begin onactivate

if kind == 0
MessageBox "Was wollt ihr schmieden?" "Schwert", "Axt", "Hammer"
set kind to 1
elseif kind == 2
			MessageBox "Welche art von schwert?" "Einhänder", "Zweihänder"
set kind to 3
elseif kind == 4
			MessageBox "Wie wollt ihr eure axt führen?" "Einhändig", "zweihändig"
set kind to 5
elseif kind == 6
			Messagebox "Wie wollt ihr euren Hammer führen?" "einhändig", "zweihändig"
set kind to 7
endif
end onActivate

Begin GameMode 
if kind == 1
set button1 to GetButtonPressed
if button1 == 0 
set kind to 2
elseif button1 == 1
set kind to 4
elseif button1 == 2
set kind to 6
endif
endif
if kind == 3
set button2 to GetButtonPressed 
if button2 == 0
set kind to 0
;Die funktion die jetzt passieren soll wenn einhändig gewählt wurde
elseif button2 == 1
set kind to 0
;Die funktion die jetzt passieren soll wenn Zweihändig gewählt wurde
endif
endif
if kind == 5
set button3 to GetButtonPressed
if button3 == 0
set kind to 0
;Die funktion die jetzt passieren soll wenn Einhändig gewählt wurde
elseif button3 == 1
set kind to 0
;Die funktion die jetzt passieren soll wenn Zweihändig gewählt wurde
endif
endif
if kind 7 
set button4 to getButtonPressed
if button4 == 0
set kind to 0
;Die funktion die jetzt passieren soll wenn Einhändig gewählt wurde
if button4 == 1
set kind to 0
;Die funktion die jetzt passieren soll wenn Zweihändig gewählt wurde
So sollte es funktionieren.
Kann ich irgendeine fertigkeit dem spieler geben, die er lernen kann, damit er zunehmend bessere waffen schmieden kann?
Man kann nur die vorhandene Fähigkeit "Schmieden" nehmen, eine neue zu erstellen ist nicht möglich.
3. würde das als bedingugn für den hammer funktionieren?
player.getitemcount (id von meinem hammer) 1
es müsste so sein
Code:
if player.getitemcount (die ID des Hammer) == 1
oder wennn man mehr haben soll als 1 ist es > anstatt == dann gibt es noch >=(d.h. größer oder gleich groß als) <=(keliner oder gleich groß als) und != (d.h. was anderes als im unseren Fall 1)



Ich hoffe ich konnte helfen :)
 
ähm... als das ist jetzt ein bisschen lang?!...
Code:
if kind == 0
MessageBox "Was wollt ihr schmieden?" "Schwert", "Axt", "Hammer"
// das ist die messagebox!
set kind to 1
elseif kind == 2
			MessageBox "Welche art von schwert?" "Einhänder", "Zweihänder"
set kind to 3
elseif kind == 4
			MessageBox "Wie wollt ihr eure axt führen?" "Einhändig", "zweihändig"
set kind to 5
elseif kind == 6
			Messagebox "Wie wollt ihr euren Hammer führen?" "einhändig", "zweihändig"
set kind to 7
endif
also ich verstehe jetzt nicht genau, warum diese die variable kind immer danach geändert wird? ich meine es soll doch ausgelesen werden, welche "kind" of weapon man gewählt hat! also und nicht ob man einhändig oder 2händig

bin momentan ziemlich :shock: von deinem code

mfg IPROMISEYOUCRY
 
Das hat schon seine Richtigkeit... Die Abfrage, welcher "Button" gedrückt wurde kommt immer in einem GameMode-Block.
Wofür sind denn die komischen Klammern in deinem Skript? Sollen die die "endif"s ersetzen?

Ps: Es ist erwiesenermaßen möglich, neue Fertigkeiten zu erstellen. Irgendwie mit OBSE und Pluggy...
 
  • Like
Reaktionen: death-lord
aso, ja die klammern, die sind... ka
Ich habe als letzte sprache c# benutzt, und da setzt man bei einer if funktion immer klammern wie so:
Code:
bool antwort = false;

if (antwort == true) 
{
(dann kommt hier hin, was dann so passiert bsp)
}

so geht das mit den if funktionen in c#, weitaus überschaulicher!
bool ist ein variablentyp, der ja und nein (true und false) beinhalten kann
 
Frage:
Da ich es dumm finde, dass tische immer gedeckt sind, will ich in meiner mod die tische normal lassen, und nur dann soll gedeckt werden, wenn man den diener auf dieses anspricht.
Ich könnte mit einer enable funktion arbeiten, dass dumme ist nur, wenn jemand den tisch abräumt, funktioniert es nicht mehr, gibt es die möglichkeit, sachen an bestimmten orten respawnen zu lassen?
wenn nicht, hat jemand sonst ne idee, wie man sowas regeln kann?
 
Habe auch mal wieder ein Problem:

Ich muss das Script von Create your Companion etwas an meine bedürfnisse anpassen, also denke ich mir, ich mach ein neues Script, wo ich die Änderungen vornehmen kann. So kommt sich meine Mod dann später nicht mir einer anderen in die Haare. Dumm nur, dass das Script nicht angenommen wird, wegen einem Fehler in der Begin- Endstruktur in der Zeile 48 (fett markiert). Das beste: Beim Originalscript kann ich auch nicht speichern, obwohl ich nichts verändert habe.

Hier ist das von mir veränderte Script:
Code:
scn bCYCNPCScript

ref refnpc
ref refbox
ref Actor
short Faction
short Addpackage
float Timer
short temp
short alert
short Inventory
short regulator

begin GameMode

set refnpc to getself

; NPC soll dem Spieler immer freundlich gesinnt sein
If getdisposition player < 100
moddisposition player 100
endif

	; NPC zur Fraktion zuordnen
	If Faction == 0
		SetFactionRank CYCHumanFaction 10
		Set Faction to 1
	EndIf

	; Gibt dem NPC Heilzauber
	If GetActorValue Restoration >= 1
		AddSpell CYCRestoreHealthTouch1Novice
		AddSpell StandardRestoreHealth1Novice
	ElseIf GetActorValue Restoration >= 25
		AddSpell CYCRestoreHealthTouch2Apprentice
		AddSpell StandardRestoreHealth2Apprentice
	ElseIf GetActorValue Restoration >= 50
		AddSpell CYCRestoreHealthTouch3Journeyman
		AddSpell StandardRestoreHealth3Journeyman
	ElseIf GetActorValue Restoration >= 75
		AddSpell CYCRestoreHealthTouch4Expert
		AddSpell StandardRestoreHealth4Expert
	ElseIf GetActorValue Restoration >= 100
		AddSpell CYCRestoreHealthTouch5Master
		AddSpell StandardRestoreHealth5Master
	EndIf

	; Gibt dem NPC Zerstörungszauber
	[B]ElseIf GetActorValue Destruction >= 25[/B]
		AddSpell StandardFireDamageTarget2Apprentice
		AddSpell StandardFrostDamageTarget2Apprentice
		AddSpell StandardShockDamageTarget2Apprentice
	ElseIf GetActorValue Destruction >= 50
		AddSpell StandardFireDamageTarget3Journeyman
		AddSpell StandardFrostDamageTarget3Journeyman
		AddSpell StandardShockDamageTarget3Journeyman
	ElseIf GetActorValue Destruction >= 75
		AddSpell StandardFireDamageTarget4Expert
		AddSpell StandardFrostDamageTarget4Expert
		AddSpell StandardShockDamageTarget4Expert
	ElseIf GetActorValue Destruction >= 100
		AddSpell StandardFireDamageTarget5Master
		AddSpell StandardFrostDamageTarget5Master
		AddSpell StandardShockDamageTarget5Master
	EndIf

	; Gibt dem NPC Beschwörungszauber
	If GetActorValue Conjuration >= 25
		AddSpell StandardSummonSkeletonApprentice
		AddSpell StandardSummonZombieApprentice
		AddSpell StandardSummonScampApprentice
		AddSpell StandardSummonGhostApprentice
	ElseIf GetActorValue Conjuration >= 50
		AddSpell StandardSummonAtronachFlameJourneyman
		AddSpell StandardSummonZombieHeadlessJourneyman
		AddSpell StandardSummonSkeletonGuardianJourneyman
		AddSpell StandardSummonDremoraJourneyman
	ElseIf GetActorValue Conjuration >= 75
		AddSpell StandardSummonClannfearExpert
		AddSpell StandardSummonAtronachFrostExpert
		AddSpell StandardSummonSkeletonHeroExpert
		AddSpell StandardSummonDaedrothExpert
		AddSpell StandardSummonSkeletonChampionExpert
		AddSpell StandardSummonSpiderDaedraExpert
		AddSpell StandardSummonWraithFadedExpert
	ElseIf GetActorValue Conjuration >= 100
		AddSpell StandardSummonAtronachStormMaster
		AddSpell StandardSummonDremoraLordMaster
		AddSpell StandardSummonWraithGloomMaster
	EndIf

	; Gibt dem NPC Schild Zauber
	ElseIf GetActorValue Alteration >= 25
		AddSpell StandardShield2Apprentice
	ElseIf GetActorValue Alteration >= 50
		AddSpell StandardShield3Journeyman
	ElseIf GetActorValue Alteration >= 75
		AddSpell StandardShield4Expert
	ElseIf GetActorValue Alteration >= 100
		AddSpell StandardShield5Master
	EndIf

	; Gibt dem NPC Unsichtbarkeits Zauber
	If GetActorValue Illusion >= 50
		AddSpell StandardInvisibility3Journeyman
	ElseIf GetActorValue Illusion >= 75
		AddSpell StandardInvisibility4Expert
	ElseIf GetActorValue Illusion >= 100
		AddSpell StandardInvisibility5Master
	EndIf

	; Wenn der Spieler schleicht, schleicht auch der NPC
	If Player.IsSneaking  == 1 && GetFactionRank CYCHumanFaction == 1 && IsInCombat == 0
		SetForceSneak 1
	ElseIf GetForceSneak
		SetForceSneak 0
	EndIf

	; Wenn der Spieler die Waffe zieht, zieht auch der NPC seine Waffe
	If alert == 0 && Player.IsWeaponOut == 1 && GetFactionRank CYCHumanFaction == 1
		SetAlert 1
		Set alert to 1
	ElseIf alert == 1 && Player.IsWeaponOut == 0 && GetFactionRank CYCHumanFaction == 1
		SetAlert 0
		Set alert to 0
	EndIf


	If inventory == 1 && GetInFaction CYCHumanFaction == 1
  		if regulator == 3
			AddItem CYCTorch02 1
			EquipItem CYCTorch02
			RemoveItem CYCTorch02 1
			set regulator to 0
			toggleActorsAI
			RemoveScriptPackage "CYCDoShare"
			set inventory to 0
		If CYCQuest.TempFaction == 1
    			AddScriptPackage "CYCFollowNPC"
		EndIf
	EndIf

	if regulator == 2 && MenuMode == 0
		set regulator to 3
		CYCShareBoxRef.RemoveAllItems refnpc
	endif

	if regulator == 1
		toggleActorsAI  
		RemoveAllItems CYCShareBoxRef
		CYCShareBoxRef.Activate Player
		set regulator to 2
	endif
  		if regulator == 0
			CYCShareBoxRef.MoveTo Player 0 0 -50
			refbox.setOwnership
			set regulator to 1
		endif
  	endif


	If CYCQuest.RecallHuman == 1
		Set Actor to Getself
		Actor.MoveTo Player, 128, 0, 0
	EndIf

	If GetFactionRank CYCHumanFaction == 1 && GetDistance Player >= 2048 && GetDead == 0
		Set Actor to GetSelf
		Actor.MoveTo Player
		RemoveScriptpackage
		AddScriptPackage CYCFollowNPC
	EndIf		


End



Begin OnPackageStart "CYCDoShare"

if GetInFaction CYCHumanFaction == 1 && IsInCombat != 1
  set Inventory to 1
endif

End


Begin OnPackageStart "CYCFollowNPC"
	SetAV Responsibility 0
	SetIgnoreFriendlyHits 1
End



Begin OnDeath

Message "Einer Eurer Männer ist gefallen!"

setActorRespawns 0
End
 
Versuchs doch mal mit
Code:
[B]If[/B] GetActorValue Destruction >= 25
Eine abfrage fängt eigentlich immer mit If an und jede weiter mit elseif :roll:

Das Script ist ja nicht von mir, sondern von DarkElf und er muss es ja auch irgendwie abgespeichert haben. :? Werde es aber trotzdem mal probieren, auch wenn ich nicht weiß, was das mit dem Begin-/Endblock zu tun hat.

Hast du das CS auch mit OBSE geöffnet?

Ja, habe ich.
Mir ist aber gerade noch etwas aufgefallen: Der Titel der Fehlermeldung ist "OBSE". Was hat den OBSE mit der Strucktur des Begin-/Endblocks zu tun? :huh:
 
Bitteschön:
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    8,2 KB · Aufrufe: 121
Ja es liegt daran das dort mit Elseif angefangen wird. Du musst mit If anfangen. Weiter unten ist es genauso ô.o...
Hast dus denn jetzt schonmal mit If probiert oder kommt da immer noch die selbe Fehlermeldung?
 
  • Like
Reaktionen: bjoernret
2 Fragen :

Ich hab`heute mal gleich 2 Fragen:

1. Wie befehle ich einem NPC per Skript, er soll sich schlafen legen, wenn er x weit von x entfernt ist? Ich glaube, das könnte der Anfang sein:

Code:
scn NAME

Begin GameMode

If GetDistance <Ref des Markers> < x
[COLOR=Red]???????????[/COLOR]
könnt ihr mir da helfen???

2. Wie befehle ich einem NPC, dass er an einer Stelle stehen bleibt? Per Package oder Skript oder wie??

Ich hoffe auf schnelle Antworten, denn ich brauche die Befehle für mein Projekt :-D
 
Eine Frage:Wie mache ich mehrere Messageboxe??Also z.B. "Was wollt ihr haben?" "Bier" ,"Wein" ,"Skooma"

dann soll das kommen:"Wie viel?" "1" ,"2" ,"´5"

Wie soll man sowas aussehnen lassen:huh:
 
Ich kopiers mal ganz frech aus dem Ei-Der-Zeit Scriptwiki:

Code:
scn Speisekarte
;Written by keris
;9.8.08
 
short Button
short Step 
 
begin OnActivate 
	If IsActionRef Player
  		MessageBox "Was möchtet ihr bestellen? "  "Vorspeise" "Hauptgericht" "Nachtisch" "Nichts"
		Set Step to -1
	EndIf
End
 
 
Begin GameMode
 
	If Step == 0
		Return
	ElseIf Step == -10 ;Message senden
		Set Step to 10
		MessageBox "Welche Vorspeise darf es sein?" "Salat" "Brot"
      	Set Button to -1 
	ElseIf Step == 10 ;zweite Message auswerten 
		Set Button to GetButtonPressed
		If Button == 0
			Player.Additem Lettuce 1
			Set Step  to 0
		ElseIf Button == 1
			Player.Additem Breadloaf 1
			Set Step  to 0
		EndIf
 
	ElseIf Step == -20 ;Message senden
		Set Step to 20
		MessageBox "Welches Hauptgericht darf es sein?" "Rindfleisch" "Hammel "
 
	ElseIf Step == 20 ;zweite Message auswerten
		Set Button to GetButtonPressed
		If Button == 0
			Player.Additem Beef 1
			Set Step to -200
		ElseIf Button == 1
			Player.Additem Mutton 1
			Set Step to -200
		EndIf
 
	ElseIf Step == -200 ;Message senden
		MessageBox "Ihr habt noch keine Getränke gewählt." "Wein" "Bier"
		Set Step to 200
 
	ElseIf Step == 200 ; Message auswerten
  		Set Button to GetButtonPressed
		If Button == 0
			Player.Additem DrinkWine1SurilieGood 1
			Set Step  to 0
		ElseIf Button == 1
			Player.Additem Drinkbeer 1
			Set Step  to 0
		EndIf
 
	ElseIf Step == -30 ;Message senden
		Set Step to 30
		MessageBox "Welcher Nachtisch darf es sein?"  "Apfel" "Kuchen" "Käse" 
 
	ElseIf Step == 30 ;zweite Message auswerten
  		Set Button to GetButtonPressed
		If Button == 0
			Player.Additem Apple 1
			Set Step  to 0
		ElseIf Button == 1
			Player.Additem Sweetcake 1
			Set Step to 0
		ElseIf Button == 2
			Player.Additem CheeseWedge 1
			Set Step to 0
		EndIf
 
	ElseIf Step == -1 ;Anfangsmessage auswerten
 		Set Button to GetButtonPressed
		If Button == 0
			Set Step to -10
		ElseIf Button == 1
			Set Step to -20
		ElseIf Button == 2
			Set Step to -30
		ElseIf Button == 3
			Set Step to 0
		EndIf
	EndIf
 
end

Quelle: Klick