Construction Set [Frage] Gildenausstoß & wieder aufnahme

Lichtkrieger

Abenteurer
Halli Hallo Hallöle,
Ich wollte mal Fragen wie das Spiel erkennt das man von einer Gilde ausgestoßen ist und man dann wiederaufgenommen von der Gilde wird? Wie mache ich das im TES-CS? :huh:
Vielen Vielen Dank

Zusatz: Wen if ( CellChanged == 1 ) ist dann der Spiler im der Celle oder ist er dann nicht in der Celle. Wen das dafür gar nicht da ist dann wollte ich mal Fragen was da hinkommen muss.
 
Zuletzt bearbeitet:
Achtung! Dieses Posting bezieht sich auf Tes4:Oblivion!

Wenn du überprüfen willst, ob sich ein Spieler in einer Cell befindet brauchst du den Befehl GetInCell. Dieser gibt 1 zurück wenn der Spieler darin ist, laos zB:

if ( player.GetInCell Chorrol == 1 )
; ...
endif

@Gilden:

Ob der Spieler ausgestossen wurde stellst du mit dem Befehl GetPCExpelled fest. (Syntax und Anwendung siehe Link)

edit: doch noch n Beispiel

if ( player.GetPCExpelled DarkBrotherhood == 1 )
; Wiederaufnahme-Quest starten
endif

edit2: wiederaufnehmen kannst ihn dann mit SetPCExpelled (Also auf "0" setzen)
 
Zuletzt bearbeitet:
Aber du meinst doch Morrowind, oder Lichtkrieger? Da lauten die Konsolenbefehle etwas anders (und Chorrol gibt es auch nicht :-D ).
 
*grummel*, das hab ich wohl übersehen, ich schau mal nach denen für MW, sry...

Also für TES3:

Ob ein Spieler ausgestossen wurde findest du heraus mit zb:

Code:
if ( PCExpelled "Mages Guild" == 0 )

=> dann ist er nicht ausgestoßen, wenns "1" ist, ist er ausgestossen

ich vermute, dass man den Player mit diesem Befehl wieder aufnehmen kann:

Code:
PCClearExpelled "Mages Guild"

Allgemein empfehle ich aber mal das Script "expelledMG" anzuschauen.

@CellChange:

zu diesem Befehl steht in der Hilfe das:
CellChanged ;returns 1 for one frame when player changes cells

Das ist also eher nicht das was du brauchst... Wie man das aber jetz genau festellt... wofür brauchst dus denn überhaupt?
 
Zuletzt bearbeitet:
Als aller erstes DANKE,
Ich brauche das CellChanged dafür das wen er eine Taverne Betten mietet das er dann nicht in der Taverne ist und die Tür auf einmal zu ist und er eingeschlossen ist.
Ausserdem noch wen er Häuser baut das die Häuser nicht dann wen er davor wartet aufeinmal da sind er soll erst in eine andere Celle sein dann sollen die Häuser fertig werden.

Also
Begin Haus_Script
Short CellChanged
Short LocalDaypassed

If ( GetJournalindex "Hausbau" == 5 )
If ( LocalDaypassed != Day )
LocalDaypassed to Day
LocalDaypassed to LocalDaypassed + 1
EndIf
EndIf

If ( GetJournalindex "Hausbau" < 5 )
Disable
Else
If ( GetJournalindex "Hausbau" >= 5 )
If ( LocalDaypassed >= 3 )
If ( CellChanged == 0 ) ; Hier weiß ich nicht was da hinkommt 0 oder 1 er soll ja nicht dort sein
Enable
EndIf
EndIf
EndIf
EndIf
End
Nochmals DANKE
 
Zuletzt bearbeitet:
Code:
Short CellChanged

Das muss weg. Schließlich ist das schon definiert.

- und wenn überhaupt muss da ne 1 hin, aber ob das mit diesem Script die optimallösung ist, weiss ich nicht - das Script muss dann aber auf jeden Fall in der selben Zelle wie das Haus steht ausgeführt werden.

edit:

Code:
LocalDaypassed to Day

da muss überall noch ein set davor, also:

Code:
set LocalDaypassed to Day
set LocalDaypassed to LocalDaypassed + 1

Aber an diesem ganzen Block stimmt was nicht - weil LocalDaypassed dann immer auf dem Wert eins mehr als der Tag bleiben wird, weils nur einmal ausgeführt wird das ganze - ich kann dir aber nicht sagen wies richtig gehört, da ich nicht wirklich weiss, wofür das gut sein soll dieser Block...

edit2: vielmehr müsstest du es doch so machen:

Code:
Begin Haus_Script

short LocalDaypassed
short do_once

if ( GetJournalindex "Hausbau" == 5 )
   if ( do_once == 0 )
      LocalDaypassed to Day
      set do_once to 1
   endif
endif

if ( GetJournalindex "Hausbau" < 5 )
   disable
endif

if ( GetJournalindex "Hausbau" >= 5 )
   if ( Day - LocalDaypassed >= 3 )
      if ( CellChanged == 1 )
         enable
;         GetJournalIndex
      endif
   endif
endif

end

edit3:

if ( GetJournalindex "Hausbau" == 5 )
und
if ( GetJournalindex "Hausbau" >= 5 )

überschneiden sich, ich hab mal zwei zweiterem das "=" rausgenommen...

edit4: Scheint doch gepasst zu haben
*grummel*
 
Zuletzt bearbeitet:
Wir sind hier im MW-Forum, drum schreib ich mal wie's bei MW geht:
sobald der Spieler ein Verbrechen gegen ein Mitglied seiner Gilde begeht und dieses Verbrechen bemerkt/gesehen wird wird er aus der Gilde ausgestossen. Verwertbar ist das dann z.B. mit
set localAusgestossen to PCExpelled "FactionID"
Bei der Magiergilde (oben beschrieben) ist es etwas anders gestrickt: in jeder Magiergilde fliegt ein Ring durch den leeren Raum- an dem hängt wohl grade das Script.

Und herauszufinden ob der Spieler drin oder draussen ist geht ganz einfach: (benötigt mindestens Tribunal)

if ( Player-> GetInterior == 1 )
dann ist er drinnen, bei 0 draussen.
 
Zuletzt bearbeitet:
Baal Lukor: Wegen dem Script, dass habe ich auf der schnelle gemacht sorry wen da einige fehler waren musste ebne schnell gehen. Hier das richtige:

Begin ZZ_Schmiede_Haus_01

Short Schmied_BauTag
Short LocalSchmiedBauTage

If ( GetJournalIndex "ZZ_Schmiede_01" == 25 )
If ( Schmied_BauTag == Day )
set Schmied_BauTag to Day
set LocalSchmiedBauTage to LocalSchmiedBauTage +1

If ( GetJournalIndex "ZZ_Schmiede_01" < 25 )
Disable
Else

If ( LocalSchmiedBauTage >= 2 )
Enable

EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
End

ReneMiner: Um bei der Zeile wo man herausfindet ob der Spieler gerade drin oder draussen ist muss dan da nur
if ( Player-> GetInterior == 1 )
oder muss/kann da
if ( Player-> GetInterior "Balmora" == 1 )
if ( Player-> GetInterior "Balmora, Haus Hlaalu" == 1 )

;Also irgendeine Celle

Noch ne Frage: Was muss ich machen wen z.b eine Person stirbt die man Excortieren muss die aber nicht von meiner Hand gestorben ist, also vom Monster getötet wurde. Dann soll der Spieler aus der Gilde fliegen.
 
les mal genau:
Und herauszufinden ob der Spieler drin oder draussen

Diese Funktion gibt dann "1" zurück, wenn der Player in einem Interior ist, und "0" wenn er in einem Exterior ist.

Was hast du denn jetzt plötzlich gegen CellChanged? Wenn das Script in der besagten Zelle ausgeführt wird und dann "1" zurück gibt, dann hat doch der Player das Cell gewechselt, ist also zwangsläufig nicht mehr da, wenn also

if ( CellChanged == 1 )

dann kannste dein Häusle aktivieren... und dein jetziges Script kannste hoffentlich selber auf mein gepostetes oben übertragen, weil ausser ein paar bezeichnungen hat sich ja nix geändert...

übrigens tätest du uns allen einen gefallen wenn du deine Scripts in eine code-box packen würdest und die verschachtelung wenigstens mit einem Leerzeichen andeuten würdest...

btw: Ist dein Script oben absolut unbrauchbar... bitte probiers mal mit dem von mir geposteten nachdem du die Bezeichnungen ersetzt hast... (falsche Verschachtelungen - alle "endifs" stehen am ende - uargs 😉 )
 
Sorry,
1. Ich weis nicht wie das mit den Code gehen soll.
2. Ob die EndIfs am ende oder da wo sie stehen sollen ist meines Wissens egal.
3. Ich habe nicht gegen CellChanged. Ich dachte das hat damit nichts mehr zu tun weil ReneMiner das mit if ( Player-> GetInterior == 1 )
verwendet hat.
4.CellChanged wen ich also die Celle wechsle also Rausgehe zeigt sie 1 an. Heist das das ich wen ich wieder in der gleichen celle gehe (da wo das script ist) das dann CellChanged == 0 ist.
5.
und die verschachtelung wenigstens mit einem Leerzeichen andeuten würdest...
habe ich nicht verstanden.
 
1. Ich weis nicht wie das mit den Code gehen soll.

[.code][/.code] (Jeweils ohne ".")

2. Ob die EndIfs am ende oder da wo sie stehen sollen ist meines Wissens egal.

Oh Nein, ganz und garnicht! Es gibt if-Blöcke und die bestehen aus drei Teilen:

1. Die Bedingung => if ( a == 3 )
2. Der Code der ausgeführt wird, falls die Bedingung zutrifft (Hier kann auch eine weitere if-Konstruktion eingebaut werden) => ; Code
3. Die Abschlussformulierung => endif

schreibst du

Code:
if ( a == 1 )
 if ( b == 2 )
  if ( c == 1 )
   ; mach etwas
  endif
 endif
endif

bewirkt das, dass nur etwas gemacht wird, wenn alle Bedingungen zutreffen, a also 1 ist, b also 2 ist, c also 1 ist.

schreibst du dagegen:

Code:
if ( a == 1 )
 if ( b == 2 )
  ; mach was
 endif
 if ( c == 1 )
  ; mach was
 endif
endif

Wird sowohl dann etwas gemacht, wenn a 1 ist und b 2 ist, ODER wenn a 1 ist und c 1

habe ich nicht verstanden.

In den beiden Code-Boxen etwa weiter oben siehst du so eine Verschachtelung, alles was zwischen einem if und einem endif steht wird vorgerückt, somit ist die Struktur leichter zu erkennen ( Das siehst du zB auch bei dem Script weiter oben von mir )

4.CellChanged wen ich also die Celle wechsle also Rausgehe zeigt sie 1 an. Heist das das ich wen ich wieder in der gleichen celle gehe (da wo das script ist) das dann CellChanged == 0 ist.

Nein, schau dir bitte nochmal den Constwiki-Artikel an. Das gibt einen Frame lang "1" zurück, wenn du eine Cell wechselst, nicht mehr und nicht weniger.

Aber es dürfte doch logisch sein, dass wenn du vorher in der Zelle warst und dann wechselst, dass du dann nachher nicht mehr drin bist? Wenn du also nur in dieser einen Zelle die CellWechsel beobachtest dann kannst du ohne Probleme feststellen, ob der Player noch drin ist oder nicht, du musst das Script halt nur an ein Objekt in genau dieser Zelle anhängen.
 
Zuletzt bearbeitet: