Construction Set Der Scriptthread

Wo wir grade dabei sind hätte ich auch eine kleine Frage. Gibt es eine Möglichkeit dem Spieler das benutzen vom Rückkehr Zauber zu verbieten?
Ich könnte sogar meinen das es das in irgend einer Mod mal gab, kann mich natürlich täuschen, aber ich hoffe mal das hier einer eine Lösung hat. :)
 
es gibt DisableTeleporting (und Enable)
und es gibt 3 Original-Scripte die es verwenden:
das in der Endgegner-Kammer und die in der Endgegnerkammer der AddOns
Leider hat man da seitens Entwickler geschlampt und verbietet nur noch im "neusten" AddOn dort teleportieren, wer Bloodmoon hat kann das also ungestört bei Dagoth und SothaSil und auch sonst überall.
Du könntest sicherstellen dass ein Script mit Disable jeden Frame läuft (und nach dem TR und BM Scripts gestartet wurde), dann is teleportieren überall aus (Recall und Intervention)
 
  • Like
Reaktionen: 1 Person
Wo wir grade dabei sind hätte ich auch eine kleine Frage. Gibt es eine Möglichkeit dem Spieler das benutzen vom Rückkehr Zauber zu verbieten?
Ich könnte sogar meinen das es das in irgend einer Mod mal gab, kann mich natürlich täuschen, aber ich hoffe mal das hier einer eine Lösung hat. :)

Wie IvanDaVile gesagt hat, kann man jeden Frame DisableTeleporting ausführen, dies verhindert aber keine gescripteten Teleports (also z.B. Teleporteramulette).

Alternativ kannst du mit einem globalen Script einen Zellenwechsel detektieren und den Spieler, wenn er sich danach nicht mehr in einer erlaubten Zelle aufhält, dorthin zurück teleporieren (per Script). Richtig gemacht sieht der Spieler die andere Zelle für genau einen Frame und Teleport ist absolut unmöglich. Eine genauere Anleitung dafür findest du in Scripting for Dummies.
 
  • Like
Reaktionen: 1 Person
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.

Im Grunde soll es so ablaufen: jede Wache aus dieser "Fraktion" die in einen gewissen Abstand zum Player steht und praktisch die Waffe sieht, soll ihn warnen, die Waffe wegzustecken, ansonsten wird er angegriffen. Wie die Warnung ausgesprochen werden soll ist an sich recht egal, aber ich selbst finde eine erzwungenen Dialog am besten. sollte er die Waffe weg stecken, wird nichts passieren, Magie selbst zähle ich hier nicht als Waffe..

ja es können auch mehrere Fractionsangehörige an Ort sein, ob die Wache nun schon die Waffe zieht und ihn erst dreimal warnt, oder erst danach..hmm..würde sagen ja...
 
Im Grunde soll es so ablaufen: jede Wache aus dieser "Fraktion" die in einen gewissen Abstand zum Player steht und praktisch die Waffe sieht, soll ihn warnen, die Waffe wegzustecken, ansonsten wird er angegriffen. Wie die Warnung ausgesprochen werden soll ist an sich recht egal, aber ich selbst finde eine erzwungenen Dialog am besten. sollte er die Waffe weg stecken, wird nichts passieren, Magie selbst zähle ich hier nicht als Waffe..

Dann solltest du dein Script in etwa so aufbauen. Das legst du dann auf jede Wache deiner Fraktion.

Code:
begin my_fraction_weapon_ctlr_script

short state
short n                  ;soll jede Wache wissen, wieoft gewarnt wurde, nimmst du statt dem n eine globale Variable
short timedelay
float timer

if ( MenuMode == 1 )
  return
endif

if ( my_weapon_detect == 1 )  ;globale Variable, die verhindert, dass mehrere Wachen gleichzeitig die Waffe reklamieren
  set timer to 0
  set state to 0
  set my_weapon_detect to 0
endif

set timedelay to 5  ;Zeit in Sekunden bis die Wache erneut warnt/nach Waffen guckt

if ( state == 0 )
  set timer to timer + GetSecondsPassed
  if ( timer >= timedelay )
    set state to 1
  endif
endif

if ( state == 1 )
 if ( Player->GetWeaponDrawn == 1 )
  if ( GetDistance Player < 512 )
    if ( GetLOS Player == 1 )
      if ( GetPCSneaking == 0 )
        if ( Player->GetInvisibile == 0 )  ;der Funktionsname ist tatsächlich falschgeschrieben
          if ( Player->GetChameleon <= 50 )  ; Grenzwert ab der Chameleon auch ohne Schleichen funktionieren soll
            set state to 2
            set my_weapon_detect to 1
          endif
        endif
      endif
    endif
  endif
 endif
endif

if ( state == 2 )
  set timer to 0
  set state to 0
  set n to n + 1
  if ( n < 3 )
    ForceGreeting
  else
    PCExpell "my_fraction"
    SetFight 100
    StartCombat Player
  endif
endif
  
end

Getestet ist das Script nicht, können also durchaus noch Fehler drin sein, aber rein prinzipiell könnte es so aussehen.

ja es können auch mehrere Fractionsangehörige an Ort sein, ob die Wache nun schon die Waffe zieht und ihn erst dreimal warnt, oder erst danach..hmm..würde sagen ja...

Eine Oder-Frage mit ja zu beantworten, hilft leider nicht sonderlich :p
 
Hi, Ich hab hier ein Script der anscheint nicht funktioniert
Der Script war in ein Plug-in dabei
Wen ich mir denn anschaue soll er wol die Schuss Geräusche der Armbrust/Bogen ändern.

Könnt ihr bitte denn korrigieren?
begin Dave_TempShockGunShot

short tronando

if ( player-> HasItemEquipped "Temp_dwmr_gunVoid01" == 1 )

if ( GetSoundPlaying "shot_gun" == 1)

if ( tronando == 0 )

PlaySound, "shock hit"
set tronando to 1

endif

endif

endif

if ( GetSoundPlaying "shot_gun" == 0)

set tronando to 0

endif

end Dave_TempShockGunShot

Ich hab damit schon herum Geschossen aber es war der selbe Schusston, wie beim Bogen etc.
Ich habe mir denn Sound selber mal angehört und er klingt auch anders.
Aber im Spiel hört man ihn halt nicht.
 
Das wundert mich nicht. Das Ding scheint mir nur die halbe Miete zu sein. Das Script wartet darauf, dass der Shotgun Sound abgespielt wird und soll dann den Schußsound spielen. Wenn also die Waffe beim Abfeuern den Shotgun Sound erzeugen soll, muß da noch ein zweites Script existieren, was dieser Waffe eben den besagten Sound zuweist und ihn spielt.
 
Ich wollte euch Fragen ob ihr mir ein Schiebetür Script machen könnt?

Wen man sie Aktiviert geht die Tür nach Links auf und wen man nochmal sie Aktieviert geht sie wider zu. ^^

EDIT:
Wen es Ok ist wollte ich noch eine 2. Script Frage stellen.
Der 2. Script soll Pfeile zum Leuchten Bringen
Es gibt zwar schon einen "bladescript" aber wen ich denn mir anschaue
vermute ich das er nur bei Schwertern geht da man ja ein Pfeil nicht ziehen tut wie ein Schwert wo durch der Script anscheinend Aktiviert wird.
 
Zuletzt bearbeitet:
Ich wollte euch Fragen ob ihr mir ein Schiebetür Script machen könnt?

Wen man sie Aktiviert geht die Tür nach Links auf und wen man nochmal sie Aktieviert geht sie wider zu. ^^

Eine Schiebetür ist nicht das Problem. Das Problem ist, dass du die nötigen Werte selbst einstellen musst. Schau dir das Script auf den Gittern der Geisterpforte an. Wenn du dort statt MoveWorld Z die entsprechende seitliche Achse (X oder Y) benutzt und die Zahlenwerte anpasst, hast du damit eine Schiebetür.

Der 2. Script soll Pfeile zum Leuchten Bringen
Es gibt zwar schon einen "bladescript" aber wen ich denn mir anschaue
vermute ich das er nur bei Schwertern geht da man ja ein Pfeil nicht ziehen tut wie ein Schwert wo durch der Script anscheinend Aktiviert wird.

Das wird nicht funktionieren, aber aus einem anderen Grund. In dem Script wird dem Spieler eine Lampe ohne Mesh ins Inventar eingefügt. Dies hat anscheinend zur Wirkung, dass der Spieler leuchtet. Da ein Pfeil aber kein Inventar hat, kann die Lampe ihm aber nicht hinzugefügt werden. Dein leuchtender Pfeil würde also nur den Spieler beleuchten, sich aber nicht mit dem Pfeil mitbewegen.
 
  • Like
Reaktionen: Houdini
Eine Schiebetür ist nicht das Problem. Das Problem ist, dass du die nötigen Werte selbst einstellen musst. Schau dir das Script auf den Gittern der Geisterpforte an. Wenn du dort statt MoveWorld Z die entsprechende seitliche Achse (X oder Y) benutzt und die Zahlenwerte anpasst, hast du damit eine Schiebetür.

Stimmt denn Script könnte ich benutzen.
Was muss man nochmal ändern da mit man denn Script Aktivieren kann?
OnActivate?

Aber so weit ich weiß sind die Türen bei der Geisterpforte so das sie nach einer bestimmten Zeit sich von selbst schlissen
wie mache ich das ich das manuell machen muss?
 
Na einfach die Stelle, wo man die Richtung, Ziel usw. angibt kopieren, Werte ändern, den Timer löschen, fertig.

Code:
;move gate up (210 units)
    if ( timer < 3 )
          "ex_gg_portcullis_01"->MoveWorld z 70
                 ;set back to start
                      elseif ( timer > 21 )
          "ex_gg_portcullis_01"->SetAtStart
               set State to 0 ;can now press button again
       set GG_Gate1_State to 0
    set timer to 0
;move gate down (210 units)
      elseif ( timer > 18 )

In diesem Teil müsste der Timer durch einen weiteren 'druck' ersetzt werden.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Houdini
Hallo,

Ich bräuchte einen Script, mit dem man ein Objekt zu einer Art ''Werkstatt'' machen kann.
Man hat verschiedenste Kombinationsmöglichkeiten, mit denen man Sachen fertigen kann. Z.B. 10 Ebenerz, 1 Langschwert und 1 Seele eines Feueratronachen und bekommt am Ende ein Ebenherz-feuerschwert heraus.
Davon gäbe es dann sehr viele möglichkeiten.

So wie ich mir das gedacht habe, sollte es nur einen Script-teil geben, der sehr oft kopiert werden kann, demnach mit vielen elseif's versehen. Und man kann die Fähigkeiten so oft benutzen wie man woll.
Ums noch etwas interessanter zu machen, wollte ich neben dem obenbeschriebenen Apperat noch einen haben, der aber nur eine bestimmte Chance angibt, 50%, 25% usw., damit einem das Herstellen, bei starken Sachen nicht gleich gelingt.

Ich hoffe meine Idee ist gut rübergekommen und verständlich und hoffe, auch das es machbar ist, aber so weit ich weis müsste es eigendlich gehen.

Gruß: TakoTatsujin
 
bin etwas aus der Übung ... aber ungefähr so müsste das aussehen:
Code:
short OnPcEquip
short button
short chance

if ( OnPcEquip == 0 )
   return
endif

messagebox "Was wollt Ihr herstellen?", "Feuerschwert", "was anderes", "Nichts"

set button to GetButtonPressed
set chance to Random100

if ( button == 0 )
   if ( chance > 50 )
      if ( ( player->getitemcount "komponente1" ) > 9 )
         if ( ( player->getitemcount "komponente2" ) > 0 )
            if ( ( player->getitemcount "komponente3" ) > 0 )
               player->removeitem "komponente1" 10 
               player->removeitem "komponente2" 1
               player->removeitem "komponente3" 1
               player->additem "feuerschwert" 1
               messagebox "Feuerschwert hergestellt"
            endif
         endif
      endif
   endif
elseif ( button == 1 )
   if ( chance > 75 )
      ;was anderes
   endif
endif

set OnPcEquip to 0
da es bei mir aber schon ein paar Jahre her ist und das ungetestet geb ich keine Garantie obs fehlerfrei ist ab

zu deinem Flammenschwert-Beispiel kann ich dir aber zumindest schonmal sagen, dass man die Art der Seele in Seelensteinen nicht ermitteln kann ... musst dir da also was anderes ausdenken
 
Zuletzt bearbeitet:
  • Like
Reaktionen: TakoTatsujin
zu deinem Flammenschwert-Beispiel kann ich dir aber zumindest schonmal sagen, dass man die Art der Seele in Seelensteinen nicht ermitteln kann ... musst dir da also was anderes ausdenken

Natürlich geht das ;)
Mit Seelensteinen geht nicht viel, aber abfragen, ob man eine bestimmte Seele besitzt, ist möglich.

Hier ein Auszug aus einem meiner Scripte, das prüft, ob die Seele eines Klippenläufers in irgendeinem Seelenstein ist, wenn ja wird dieser Seelenstein entfernt. Gleichzeitig prüft er, ob Azuras Stern dabei entfernt wurde und fügt ihn im Zweifel wieder hinzu.

Code:
if ( Player->HasSoulGem "cliff racer" >= 1 )
	set count to "Player"->GetItemCount "Misc_SoulGem_Azura"
	Player->RemoveSoulGem "cliff racer"
	if ( Player->GetItemCount "Misc_SoulGem_Azura" < count )
		Player->AddItem "Misc_SoulGem_Azura" 1
		MessageBox "Azuras Stern stellt sich von selbst wieder her."
	endif
endif
 
oh dann bin ich wohl doch etwas mehr aus der Übung als ich dachte ;) ... wusste ich ehrlich gesagt nicht mehr - aber jetzt weiß ich ja Bescheid :-D

hab hier übrigens nur mal reingeschaut, weil ich gestern meine Skriptmods wieder entdeckt habe, welche schon ein paar Jahre zurückliegen ... werd da nochmal drüberschauen, etwas aufmöbeln und eventuell ein paar hier im Forum reinstellen
 
Leider funktioniert der Script nicht :/.
Wenn ich mein neuse Objekt mit dem Script anrede, passiert da garnichts.


Um die Funktionaliät nochmal anzuschreiben, er soll in etwas so funktionieren wie der Horadrimwürfel bei Diablo 2. Allerdings nicht der Teil mit man gibt 3 schlechte Tränke hinein und bekommt 1 guten heraus. Man konnte mit dem ja auch Waffen zusammenbauen, ich glaube bei einer Quest mit nem Streitkolben musste man das sogar.

Gruß: TakoTatsujin
 
Also der Horadrimwürfel ist schon ein wenig was anderes als eine Schmiede ;)

In dem Fall gehst du hin und machst dir einen Container (zB, my_magic_chest ;)) auf die legst du zum Beispiel dieses Script:

Code:
begin my_magic_chest_script

short state
short button

if ( state == 0 )
  if ( OnActivate == 1 )
    MessageBox "Was wollt Ihr tun?" "Truhe öffnen" "Würfeln"
    set state to 1
  endif
endif

if ( state == 1 )
  set button to GetButtonPressed
  if ( button == 0 )
    Activate
    set state to 0
    Return
  elseif ( button == 1 )
    set state to 2
  endif
endif

if ( state == 2 )    ;hier kommen jetzt die Rezepte rein
  if ( GetItemCount "Khalims Flegel" >= 1 )
    if ( GetItemCount "Khalims Auge" >= 1 )
      if ( GetItemCount "Khalims Herz" >= 1 )
        if ( GetItemCount "Khalims Gehirn" >= 1 )
          RemoveItem "Khalims Flegel" 1
          RemoveItem "Khalims Auge" 1
          RemoveItem "Khalims Herz" 1
          RemoveItem "Khalims Gehirn" 1
          AddItem "Khalims Wille" 1
          PlaySound "mysticism cast"
          set state to 0
          Activate
          Return
        endif
      endif
    endif
  endif

  ;hier dann das nächste Rezept
endif

end

Anders als im Horadrimwürfel würden hier alle Rezepte auch gleichzeitig funktionieren und überflüssige Gegenstände würden nicht beeinflusst werden.
 
  • Like
Reaktionen: TakoTatsujin
Im CS klappt alles wunderbar, aber wenn ich den Würfel anklicke, und auf Öffnen gehe, springt kurz der container auf, geht dann aber sofort wieder zu, ohne, das ich etwas machen kann. Ich habe auch die Sachen dabei, die ich mir eingetragen habe, aber irgendetwas stimmt noch nicht.

So sieht der Script jetzt aus. Ich habe 5x Ebenerz dabei, 5 Feuersalz und 5 Große Seelensteine, aber mein Schwert bekomm ich dennoch nicht.

Und wenn ich einmal auf ''Würfeln'' klicke, kann ich den Würfel garnicht mehr benutzen.

Code:
[B][SIZE=2]begin my_magic_chest_script[/SIZE][/B]
[B][SIZE=2]short state[/SIZE][/B]
[B][SIZE=2]short button[/SIZE][/B]
[B][SIZE=2]if ( state == 0 )[/SIZE][/B]
[B][SIZE=2]if ( OnActivate == 1 )[/SIZE][/B]
[B][SIZE=2]MessageBox "Was wollt Ihr tun?" "Truhe öffnen" "Würfeln"[/SIZE][/B]
[B][SIZE=2]set state to 1[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]if ( state == 1 )[/SIZE][/B]
[B][SIZE=2]set button to GetButtonPressed[/SIZE][/B]
[B][SIZE=2]if ( button == 0 )[/SIZE][/B]
[B][SIZE=2]Activate[/SIZE][/B]
[B][SIZE=2]set state to 0[/SIZE][/B]
[B][SIZE=2]Return[/SIZE][/B]
[B][SIZE=2]elseif ( button == 1 )[/SIZE][/B]
[B][SIZE=2]set state to 2[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]if ( state == 2 ) ;hier kommen jetzt die Rezepte rein[/SIZE][/B]
[B][SIZE=2]if ( GetItemCount "ingred_fire_salts_01" >= 1 )[/SIZE][/B]
[B][SIZE=2]if ( GetItemCount "ingred_raw_ebony_01" >= 1 )[/SIZE][/B]
[B][SIZE=2]if ( GetItemCount "Misc_SoulGem_Grand" >= 1 ) [/SIZE][/B]
[B][SIZE=2]RemoveItem "ingred_fire_salts_01" 5[/SIZE][/B]
[B][SIZE=2]RemoveItem "ingred_raw_ebony_01" 5[/SIZE][/B]
[B][SIZE=2]RemoveItem "Misc_SoulGem_Grand" 5[/SIZE][/B]
[B][SIZE=2]AddItem "feuerschwert" 1[/SIZE][/B]
[B][SIZE=2]PlaySound "mysticism cast"[/SIZE][/B]
[B][SIZE=2]set state to 0[/SIZE][/B]
[B][SIZE=2]Activate[/SIZE][/B]
[B][SIZE=2]Return[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2];hier dann das nächste Rezept[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
[B][SIZE=2]end[/SIZE][/B]

Gruß: TakoTatsujin
 
Zuletzt bearbeitet: