Construction Set Skriptthread zum Construction Set

@ diarrhoe

ich denk ich weiß woran es liegt. ich hab jetzt einfach mal objekte in die welt gesetzt und sie mit folgenden scripts belegt.:

Code:
scn XFXWelkynd2SCRIPT

short init

Begin onActivate

player.additem Welkyndstone 20


endif

endif
end

Code:
scn XFXWelkynd3SCRIPT

short init

Begin onActivate

If Player.getitemcount Welkyndstone == 20
    player.removeitem Welkyndstone  20
 player.additem varlastone 1


endif

endif
end

Code:
scn XFXWelkynd4SCRIPT

short init

Begin onActivate

If Player.getitemcount varlastone == 5
    player.removeitem varlastone 5
 player.additem XFXLevelgreatWelkynd 1


endif

endif
end

bis hierhin funktioniert alles wunderbar. Aber als ich dann dass hier versucht habe:

Code:
scn XFXWelkynd5SCRIPT

short init
short Button

Begin onActivate

Messagebox "Ich will einen..." , "Großen Welkyndstone" , "abrechen"

set Button to getbuttonpressed
    
IF Button == 0 

If Player.getitemcount varlastone == 5
    player.removeitem varlastone 5
 player.additem XFXLevelgreatWelkynd 1


endif

endif
end

Bei diesem versuch hat es nicht funktiert. Die Messagebox hat sich geöffnet und ich hab eben auf den button "Großen Welkyndstone" gedrückt die box hat sich geschlossen und nichts hat sich getan. Allso muss es i-wie an der Box liegen.
 
@Raistlin:
Das dürfte daran liegen, dass die Button-Abfrage im OnActivate-Block steht und nicht - wie es sein sollte - in einem GameMode-Block...
Wieso benutzt du eigentlich mehr "endifs" als "ifs" in deinen Skripts?

@death-lord:
hab imemr noch das problem :(

Nein! Entweder benutzt du einen Skripteffekt, oder du reduzierst die Funktion auf bestimmte NPCs, denen du einen OnHit(-With)-Block ins Skript einträgst...

@Unbekannter:
Versuchs mal so:
Code:
scn LiteOverhaulCreatureScriptBoarAI

short once1
short once2
short once3
ref mySelf

Begin Gamemode
 set mySelf to getSelf
 if getdistance player >=1000
  if once1 == 0
   setAV Aggression 30
   setAV Confidence 100
   set once1 to 1
  endif
 elseif getDistance player < 1000 && getDistance player >= 500
  if once2 == 0
   setAV Aggression 100
   setAV Confidence 0
   set once2 to 1
  endif
 elseif getDistance player < 500
  if once3 == 0
   setAV Aggression 90
   setAV Confidence 80
   set once3 to 1
  endif
 endif

 if once1 == 1
  if getDistance player < 1000
   set once1 to 0
  endif
 endif
 if once2 == 1
  if getDistance player >= 1000 || getDistance player < 500
   set once2 to 0
  endif
 endif
 if once3 == 1
  if getDistance player >= 500
   set once3 to 0
  endif
 endif
end
Beim zweiten Skript weiß ich nicht, was die random-Abfrage da soll... Die ist in meinen Augen überflüssig...
Du könntest für das Flüchten sonst auch mal "Yield" ausprobieren...
 
Zuletzt bearbeitet:
  • Like
Reaktionen: death-lord
Was jetzt?
Ich wundere mich, dass das CS das Skript abspeichert, wenn "ifs" und "endifs" nicht übereinstimmen...
Ansonsten: ja! Messagebox-Abfragen gehören in den GameMode-Block.
 
habs jetzt mal so geschrieben

Code:
scn XFXWelkynd5SCRIPT

short init
short Button

Begin onActivate

if init == 1
set init to 1

endif
end

begin Gamemode

if init == 1

Messagebox "Ich will einen..." , "Großen Welkyndstone" , "abrechen"

set Button to getbuttonpressed
    
IF Button == 0 

 player.additem XFXLevelgreatWelkynd 1


endif

endif
end


geht aber immernochnicht ^^ wiso sollte ich es eurer meinung nach schreiben ?
 
Zuletzt bearbeitet:
Hallo. Ich habe ein Problem mit diesem Script:
.........

end[/SPOILER]

Er wird auf eine Kreatur gelegt. Wenn der Spieler ganz weit weg ist, soll die Kreatur garnichts machen, kommt er näher, soll sie fliehen und wenn er ganz nah ist, soll die Kreatur angreifen.



Zitat ende

Also wie soll das denn logisch gehen. Entweder die Kreatur flieht oder sie ist halt nah? Beides geht ja schlecht abzufragen.
 
@ Death-Lord

Es geht. Mit OBSE :D
Du überprüfst einfach ob die Waffe die zurzeit getragen wird Deine Waffe ist (GetEquippedObject), dann überprüfst du ob der Spieler grade zuschlägt (Mit IsAttacking) und überprüfst dann ob der Feind der sich in diesem Moment im Fadenkreuz des Spielers befindet (GetCrosshairRef) weniger Leben hat als vorher. Dafür musst du halt einen GameMode Block machen der das Target bestimmt und dessen Grundleben/Aktuelles Leben abspeicherst um dieses dann abzufragen.

Ziemlich umständlich aber es sollte eventuell funktionieren.
 
Ich habe noch eins/zwei Probleme mit meinem Script. Es geht da um mein Schmiede-Projekt guckt ihr hier!

Code:
scn SmithApprenticeForgeScript

short Button
short Step 
 
Begin OnActivate 

If IsActionRef Player && [COLOR=Red]( ForgeFireOpenMediumParent.GetDisabled == 0 )[/COLOR] && ( Player.GetStage SmithApprentice >= 15 ) && ( Player.GetActorValue Armorer >=15 ) 
    MessageBox "Für welche Waffe/Rüstung wollt Ihr Rohmaterial erhitzen?","Dolch","zurück"
    Set Step to -1
EndIf
End

Begin GameMode

If Step == 0
    Return
ElseIf Step == -10
    Set Step to 10
    MessageBox "Welches Rohmaterial möchtet Ihr verarbeiten?","Eisen","Feineisen"
Set Button to -1 
ElseIf Step == 10
    Set Button to GetButtonPressed
    If Button == 0 && [COLOR=Blue]( Player.GetItemCount OreNugget >=4 )[/COLOR]
        Player.RemoveItem OreNugget 4
        [COLOR=Lime]Player.AddItem WeapIronDagger 1[/COLOR]
        Set Step to 0

    ElseIf Button == 1 && [COLOR=Blue]( Player.GetItemCount OreNugget >=2 ) && ( Player.GetItemCount Gem0GoldNugget >=2 )[/COLOR]
        Player.RemoveItem OreNugget 2
        Player.RemoveItem Gem0GoldNugget 2
        [COLOR=Lime]Player.AddItem WeapIronDaggerFine 1[/COLOR]
        Set Step to 0
    EndIf
EndIf

ElseIf Step == -1
    Set Button to GetButtonPressed
    If Button == 0
        Set Step to -10
    ElseIf Button == 1
        Set Step to 0
    EndIf
EndIf
End

zu 1.
erledigt

zu 2.
Hier soll eine Message kommen in etwa "Nicht genug Rohmaterial".

zur 3.
Der Zustand der Gegenstände, die dem Inventar hinzugefügt werden, soll auf 0 oder 1 (also kaputt) sein. Wie geht das?

Danke für die Hilfe!


Kann mir jemand helfen? Ich weiß, mit den Messages ist wahrscheinlich pupseinfach, aber ich komme zur keiner Lösung.

Danke!
 
Setz einfach die abfrage nach dem Rohmaterial in eine eigene If Schleife unter der Button abfrage und setze dann ein Else dazu mit einer Message.
 
  • Like
Reaktionen: Jollina
@ Death-Lord

Es geht. Mit OBSE :D
Du überprüfst einfach ob die Waffe die zurzeit getragen wird Deine Waffe ist (GetEquippedObject), dann überprüfst du ob der Spieler grade zuschlägt (Mit IsAttacking) und überprüfst dann ob der Feind der sich in diesem Moment im Fadenkreuz des Spielers befindet (GetCrosshairRef) weniger Leben hat als vorher. Dafür musst du halt einen GameMode Block machen der das Target bestimmt und dessen Grundleben/Aktuelles Leben abspeicherst um dieses dann abzufragen.

Ziemlich umständlich aber es sollte eventuell funktionieren.
och ******e
dann muss ich wohl jeden npc einen 1000&more zeilen script geben denn auf obse hab ich kein bock. Da die mod auch für andere ohne obse sein soll
 
Ich habe noch eins/zwei Probleme mit meinem Script. Es geht da um mein Schmiede-Projekt guckt ihr hier!

Code:
scn SmithApprenticeForgeScript

short Button
short Step 
 
Begin OnActivate 

If IsActionRef Player && [COLOR=Red]( ForgeFireOpenMediumParent.GetDisabled == 0 )[/COLOR] && ( Player.GetStage SmithApprentice >= 15 ) && ( Player.GetActorValue Armorer >=15 ) 
    MessageBox "Für welche Waffe/Rüstung wollt Ihr Rohmaterial erhitzen?","Dolch","zurück"
    Set Step to -1
EndIf
End

Begin GameMode

If Step == 0
    Return
ElseIf Step == -10
    Set Step to 10
    MessageBox "Welches Rohmaterial möchtet Ihr verarbeiten?","Eisen","Feineisen"
Set Button to -1 
ElseIf Step == 10
    Set Button to GetButtonPressed
    If Button == 0 && [COLOR=Blue]( Player.GetItemCount OreNugget >=4 )[/COLOR]
        Player.RemoveItem OreNugget 4
        [COLOR=Lime]Player.AddItem WeapIronDagger 1[/COLOR]
        Set Step to 0

    ElseIf Button == 1 && [COLOR=Blue]( Player.GetItemCount OreNugget >=2 ) && ( Player.GetItemCount Gem0GoldNugget >=2 )[/COLOR]
        Player.RemoveItem OreNugget 2
        Player.RemoveItem Gem0GoldNugget 2
        [COLOR=Lime]Player.AddItem WeapIronDaggerFine 1[/COLOR]
        Set Step to 0
    EndIf
EndIf

ElseIf Step == -1
    Set Button to GetButtonPressed
    If Button == 0
        Set Step to -10
    ElseIf Button == 1
        Set Step to 0
    EndIf
EndIf
End

zu 1.
erledigt

zu 2.
erledigt

zur 3.
Der Zustand der Gegenstände, die dem Inventar hinzugefügt werden, soll auf 0 oder 1 (also kaputt) sein. Wie geht das?

Danke für die Hilfe!


Jemand eine Idee für 3? Sollte wenn geht ohne OBSE möglich sein. Danke!
 
Ohne OBSE afaik nicht möglich außer du willst 5 mal die Selbe Waffe machen nur halt immer mit ner unterschiedlichen Repair stufe...
 
Hallo!

Ich benötige mal wieder eure Hilfe!
Ich würde gerne ein paar Zauber per Script nach laden des SPiels automatisch mir hinzufügen lassen, nur weis ich das passende Script leider nicht!
Danke für jede Hilfe!

MfG