Construction Set Herberge??

DvK

Abenteurer
Hallo

ich bau gerade ein paar Siedlungen, weil mir Cyrodiil etwas zu unbelebt ist.

Und damit der Spieler beim Besuch nicht immer in fremden Betten schlafen muss, würde ich gerne eine kleine Herberge bauen, in der der Spieler ein Zimmer mieten kann.

Leider bin ich noch ein Anfänger und mit skripten hab ich auchs nicht so.

Exterior ist schon gebaut, alle Interiors bis halt auf die Herberge auch.

Hab auch gestern und heute nach einem Tutorial gesucht, aber nichts gefunden.


E:

Was ich vergessen hab. Das Tut von bart hab ich gefunden, hilft mir aber nicht, da ich mehrere Siedlungen bauen möchte und nur sehr ungern etwas lösche.
 
Zuletzt bearbeitet:
warum guckste dir net einfach ma den Gastwirt-NPC von Skingrad oder so an, da kannste dir die AI usw angucken... die haben ein script das kopierst du und änderst die kopie wie dus willst
 
Zuletzt bearbeitet:
Naja, wie gesagt, scripten kann ich nicht. Könnte vielleicht mal jemand kurz beschreiben was welcher Befehl in dem z.B. Script der Weye herberge bezweckt??

So könnte ich das am Besten verstehen.
 
Zuletzt bearbeitet:
Ok, ich hab mir mal ein Script angeschaut, und fand, dass auch ich es verstehen konnte.

Hier ist das Miet Script von der Weye herberge. Die Begriffe und Befehle erkläre ich, so wie ich denke das sie richtig sind.



Scriptname, sollte klar sein, ist der Name des Skripts.
CellName, bestimmte die Zelle in der das Zimmer vermietet wird.
Publican, bestimmt die Person welche das Script aktiviert.
Room, weiß ich nicht genau, denke mal das das nur ein kommentar ist.
Door Ref, bestimmt die Tür welche geöffnet wird.



short rent
short rentday
short rentmonth
short cleanup
short setup

sind mir alle 5 nicht ganz klar.

begin gamemode


if ( rent == 1 ) bezweckt das der nachfolgende Script teil beginnt, wenn der Spieler die miete bezahlt.

set rentday to GameDay, setzt den Tag des Mietens auf den InGame Tag.
set rentmonth to GameMonth, setzt den Monat des Mietens auf den InGame Monat.
set setup to 1, weiß ich nicht ganz.
DOOR.unlock, öffnet die Tür zum Zimmer.
BED.SetOwnership, bestimmt den Spieler als Besitzer des Bettes.

if ( GameDay != rentday ), sagt dem Script das hier weitergearbeitet werden soll, wenn die vorigen Veränderungen vollzogen wurden.
set cleanup to 1, weiß ich nicht.
elseif ( GameMonth != rentmonth ), das selbe wie bei GameDay

if ( Player.GetInCell WawnetInnTavern == 0 ), nicht sicher, denke aber dass das folgende aktiviert werden soll wenn der Spieler die Herberge verlässt.
set rent to 0, 0 steht für ngeativ, bedeutet, der Spieler ist nicht mehr dier Mieter.
set setup to 0, keine Ahnung was der Befehl verdeutet,
set rentday to 0, der Spieler hat seinen letzten "Miettag" verbraucht
set rentmonth to 0, das selbe wie bei rentday
set cleanup to 0, keine Ahnung
WawnetInnRentDoor.SetOpenState 0, Vorher wurde das Zimmer als öffentlicher Teil bestimmt, jetzt als privater.
WawnetInnRentDoor.lock 30, das Zimmer wird wieder abgeschloßen.
WawnetInnRentBed.SetOwnership NPC, hier wird bestimmt welchem NPC der Raum jetzt wieder gehört.

End, beendet das Script.



Hier noch das "normale" script.

Code:
Scriptname Publican_WawnetInnNerussa

;CellName: WawnetInnTavern
;Publican: Nerussa
;Room: upstairs, last door on the right
;Door Ref: WawnetInnRentDoor



short rent
short rentday
short rentmonth
short cleanup
short setup



begin gamemode


if ( rent == 1 )
	
	if ( setup == 0 )
		set rentday to GameDay
		set rentmonth to GameMonth
		set setup to 1
		WawnetInnRentDoor.unlock	
		WawnetInnRentBed.SetOwnership

	else
	
		if ( GameDay != rentday )
			set cleanup to 1
		elseif ( GameMonth != rentmonth )
			set cleanup to 1
		endif
	endif

	if ( Player.GetInCell WawnetInnTavern == 0 )
		if ( Cleanup == 1 )
			set Cleanup to 2
		endif
	endif

	if ( Cleanup == 2 )
		
		set rent to 0 
		set setup to 0
		set rentday to 0
		set rentmonth to 0
		set cleanup to 0
		WawnetInnRentDoor.SetOpenState 0
		WawnetInnRentDoor.lock 30
		WawnetInnRentBed.SetOwnership Nerussa
	endif
endif



End
 
  • Like
Reaktionen: Smiler
Hier der Code mit Erklärungen
Code:
Scriptname Publican_WawnetInnNerussa

;CellName: WawnetInnTavern
;Publican: Nerussa
;Room: upstairs, last door on the right
;Door Ref: WawnetInnRentDoor


Short rent                                              ; Wird im Dialog auf 1 gesetzt, wenn man das Zimmer mietet
Short rentday                                           ; Speichert den aktuellen Tag
Short rentmonth                                         ; Speichert den aktuellen Monat
Short cleanup                                           ; Trigger, um das den Ausgangszustand wieder herzustellen, wenn Mietdauer abgelaufen ist
Short setup                                             ; Speichert, ob die Eigentumsrechte usw. schon geändert wurden, wenn der Spieler das Zimmer mietet.

Begin GameMode

    If ( rent == 1 )                                    ; Wenn Zimmer gemietet wurde

        If ( setup == 0 )                               ; Wenn Zimmer jetzt gerade erst gemietet wurde
            Set rentday to GameDay                      ; Tag merken, an dem die Mietzeit beginnt
            Set rentmonth to GameMonth                  ; Monat merken, an dem die Mietzeit beginnt
            Set setup to 1                              ; Merken, dass Tag und Monat gespeichert, das Zimmer aufgeschlossen und die Eigentumsrechte gesetzt wurden
            WawnetInnRentDoor.Unlock                    ; Zimmertüre entriegeln
            WawnetInnRentBed.SetOwnership               ; Eigentumrechte des Bettes löschen (Eigentümer war vorher Nerussa)
        Else                                            ; Anderenfalls - falls das SetUp des Zimmers schon gemacht wurde
            If ( GameDay != rentday )                   ; Feststellen, ob das Zimmer NICHT HEUTE gemietet wurde
                Set cleanup to 1                        ; Wenn ja (also gestern oder früher gemietet), Trigger setzen, um dem Player die weitere Nutzung zu verbieten
            ElseIf ( GameMonth != rentmonth )           ; Feststellen, ob das Zimmer NICHT IN DIESEM MONAT gemietet wurde (doppelste Absicherung)
                Set cleanup to 1                        ; Wenn ja (also letzten Monat oder früher gemietet) Trigger setzen, um dem Player die weitere Nutzung zu verbieten
            EndIf
        EndIf
    
        If ( Player.GetInCell WawnetInnTavern == 0 )    ; Wenn der Player sich nicht im Gasthof befindet
            If ( Cleanup == 1 )                         ; Wenn Trigger gesetzt ist, um weitere Nutzung des Zimmers zu verbieten
                set Cleanup to 2                        ; Trigger 1 Stufe weiter auf 2 schalten und den Reset des Zimmers einzuleiten
            EndIf
        EndIf
    
        If ( Cleanup == 2 )                             ; Zimmer soll zurückgesetzt werden
            Set rent to 0                               ; Startwert 0
            Set setup to 0                              ; Startwert 0
            Set rentday to 0                            ; Startwert 0
            Set rentmonth to 0                          ; Startwert 0
            Set cleanup to 0                            ; Startwert 0
            WawnetInnRentDoor.SetOpenState 0            ; Türe abschließen
            WawnetInnRentDoor.Lock 30                   ; Level des Schlosses setzen
            WawnetInnRentBed.SetOwnership Nerussa       ; Eigentumsrechte für das Bett wieder der Wirtin zuordnen
        EndIf

    EndIf
End

Das Script merkt sich Tag und Monat, weil es sonst sein könnte, dass der Spieler das Zimmer am 15.3. mietet, dann einen Monat nicht im Gasthof war und zufällig am selben Tagesdatum (am 15. des Folgemonats) wieder dort auftaucht. Die Mietzeit läuft also ab, wenn der Tag, an dem die Mietzeit gegann NICHT das heute Tagesdatum war ODER der Monat in dem die Mietzeit begann, NICHT dieser Monat war.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: DvK
Hab das jetzt abgeändert und hinzugefügt.

Dann bin ich auf Quests gegangen und hab natürlich für meinen Wirt die Antworten erstellt.

Folgendes Problem:

Ich hab alles genauso eingestellt wie bei den anderen, aber bei mir wird die bejahende Antwort InGame einfach nicht angezeigt, sondern nur die verneinende.

Ich hab wirklich jedes Feld doppelt und dreifach kontrolliert, hab aber keinen Fehler gefunden.
 
  • Like
Reaktionen: Smiler
Ich hab alles genauso eingestellt wie bei den anderen, aber bei mir wird die bejahende Antwort InGame einfach nicht angezeigt, sondern nur die verneinende.
Dann hat der Player entweder nicht genügend Geld, um das Zimmer mieten zu können, oder hast bei der Frage nach dem Bett nicht beide Antwortmöglichkeiten als Choice eingetragen.

Jedenfalls wären das die wahrscheinlichsten Ursachen. Falls das doch so ist, musst Du halt das Ding mal posten, damit man sich das ansehen kann - ODER ausführlich und genau schreiben, was Du gemacht hast.

Wenn Du das nicht sowieso schon gemacht hast, öffne Nerussa mal unter Actors -> NPC.
In Nerussas Bearbeitungsfenster klickst Du dann links unten auf Dialogue, um ALLE Dialoge von der auf einen Blick sehen zu können.
Dann müsste dir der Fehler eigentlich sofort ins Gesicht springen...
 
  • Like
Reaktionen: Smiler und DvK
Ich hab alles abgeglichen, keinen Fehler entdeckt, aber mein Char hat die 15 Gold nicht, ist nur ein Test Char, ich guck nachher mal ob es daran liegt, weil das wäre für mich nurnoch der einzige Grund der stimmen könnte.

Danke.

E:

Es lag tatsächlich an dem fehlendem Gold...

Frag mich nur wofür dann der Wirt die Möglichkeit "Ihr habt nicht genug Geld" sagen kann.

Aber es klappt jetzt.
Danke nochmal
 
Zuletzt bearbeitet: