Seite 79 von 82 ErsteErste ... 29697778798081 ... LetzteLetzte
Ergebnis 781 bis 790 von 813

Thema: Eure Modding-Pläne für Fallout 4

  1. #781
    Not my president Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.064
    Gamer IDs

    Gamertag: PixelMurder

    Standard

    Mehr Downloads bedeuten auch mehr Bug-Meldungen, auch mehr Bug-Meldungen, die eigentlich keine sind.
    Und manche Mods sind trotz einiger Bugs hervorragende Arbeit, mal abgesehen, dass manche Bugs prinzipbedingte Fehler sind, die man überhaupt nicht fixen kann oder nur mit unverhältnismässigem Aufwand. Hinzu kommt, dass manche tolle Mesher sind, aber einfach clippende Animationen von der Stange nehmen müssen, weil man einfach nicht alles selbst kann.

    Übrigens zocke ich auch wirklich ausgiebig und habe oft meinen Spass daran, ob es beim Bauen oder beim Ghul-Knüppeln ist. Okay, anschliessend habe ich wieder zwei A4-Bätter mit Verbesserungswüsnchen vollgekritzelt.

    Im Moment bin ich gerade daran, die Packages der Siedler zu verbessern, damit sie nie wie die Ölgötzen da stehen(das ist ein Bug oder auch einfach nur unfertig). Ausserdem hatte ich gestern die Idee, Libertalia zur vollwertigen Siedlung zu machen, nachdem ich jetzt schon positive Erfahrung mit Thicket Excavations gemacht habe, wo es auf keinen Fall schlechter läuft, als in Vanilla.
    Ticket Excavations ist schon die grösste und gleichzeitig höchste Siedlung des Spiels, aber Libertalia ist noch grösser und mindestens ebenso episch. Da kann ich dann ein wenig Waterworld spielen

    Edit
    So sieht übrigens das Workshop-System aus, das hier kann ich im Prinzip in eine potentielle Siedlung kopieren und da konfigurieren.

    Die zwei gelben Blöcke sind die Bau-Grenzen, die kann ich überlappend positionieren und auf die richtige Grössse bringen, und kann dann innerhalb bauen. Libertalia ist etwa recht lang und hat komische Grenzen, da braucht vielleicht noch einen oder zwei Blöcke mehr, um das nachzubilden.
    Der grüne Block ist die Sandbox-Grenze für die Siedler, da reicht einer, das muss nicht genau sein.
    Dann gibts den XMarker, der das Zentrum der Siedlung definiert, dahin gehen Karawanen und alle Packages beziehen sich darauf. Beim Spanwmarker werden neue Siedler oder Überfälle gespawnt.
    Die Werkbank ist auch mit einem Ressourcen-Container verlinkt, der vom System benötigt wird. Dann als Deko verlinkte Werkbänke. Entwder kann ich noch mehr anhängen oder bestehende löschen, falls nicht notwednig.

    Links oben ist meine Erweiterung, ein blauer Aktivator, der mit zwei Spawnmarkern verlinkt ist, wo Kleinzeug gespanwt wird, um ab und zu die Siedler auf Vordermann zu bringen oder irgendwann mal auch grössere Feinde zu spawnen. Der Aktivator enthält auch ein Script, das ich im Editor-Fenster konfigurieren kann: Wer muss getötet werden, welche Quest muss erfüllt sein, um den Workshop freizuschalten. Das Script wird ständig duchlaufen, um Siedlungseigenschaften und anderes Zeug zu kontrollieren, auch en Workshop zu debuggen.
    Ziemlich geil. Mit dem Aktivator kann ich im Prinzip auf sämtliche öffentliche Variablen und Funktionen eines Workshops zugreifen, ob es ein bestehender oder neuer Workshop ist. Der fügt den Workshop auch per Script in die Liste ein, damit man Karawanenwege damit machen kann, das funktioniert wie mit DLC.

    Nochmals Edit
    Hier mein neues hübsches Script zum Überwachen eines Workshops, das ich nächstens austesten gehe.
    Geplant sind schon Überfälle, aber zuerst muss mal die Basis laufen.

    Scriptname THEW:THEWWorkshopController extends ObjectReference

    Spoiler:
    Code:
    Group Common
        Actor Property Player Auto Const Mandatory
        WorkShopScript Property MyWorkShop Auto Const Mandatory
        GlobalVariable Property GameDaysPassed Auto Const Mandatory
        GlobalVariable Property GameHour Auto Const Mandatory
    EndGroup
    
    Group Unlock
        Bool Property UnlockWhenCleared = true Auto Const
        ObjectReference[] Property ActorRefsToKill Auto Const Mandatory
        Quest[] Property QuestsToComplete Auto Const Mandatory
    EndGroup
    
    Group Annoyance
        Float Property AnnoyanceIntervalDays = 0.3 Auto Const
        ActorBase[] Property AnnoyanceActors Auto Const
        ObjectReference[] Property AnnoyanceMarker Auto Const Mandatory
    EndGroup
    
    Group Enemies
        Float Property EnemyIntervalDays = 1.5 Auto Const
        ActorBase[] Property EnemyActorsBoss Auto Const
        ActorBase[] Property EnemyActorsKnight Auto Const
        ActorBase[] Property EnemyActorsGeneral Auto Const
        ActorBase[] Property EnemyActorsPet Auto Const
        ObjectReference[] Property SpawnEnemyMarker Auto Const
    EndGroup
    
    bool sysInitialized         = false
    bool workShopInitialized     = false
    float sysInterval             = 60.0
    int updateTimerId            = 1
    float updateInterval        = 0.1
    int annoyanceTimerId        = 2
    float minAnnoyanceDay        = 0.2
    float maxAnnoyanceDay        = 0.5
    float annoyanceDay            = 0.0
    int attackTimerId            = 3
    float minAttackDay            = 1.5
    float maxAttackDay            = 3.0
    float attackDay            = 0.0
    bool actorRefsKilled         = false
    bool questsCompleted        = false
    bool locationCleared        = false
            
    Event OnLoad()
        DebugTrace("Workshop Controller loaded")
        if sysInitialized == false    
            sysInitialized = true
            DebugTrace("Workshop Controller initialized")
            MonitorWorkshop()
        endif
        if workShopInitialized == true
            ; Do something
        endif
    EndEvent
    
    Event OnTimer(int aiTimerID)
        MonitorWorkshop()
    EndEvent
    
    Event OnTimerGameTime(int aiTimerID)
        if aiTimerId == updateTimerId
            UpdateWorkshop()
        elseif aiTimerId == annoyanceTimerId
            SpawnAnnoyance()
        elseif aiTimerId == attackTimerId
            SpawnEnemy()
        endif
    EndEvent
    
    ; Monitor workshop location until all conditions are met
    Function MonitorWorkshop()
        if workShopInitialized == false && WorkshopCanBeInitialized()
            DebugTrace("Workshop unlocked")
            workShopInitialized = true
            StartTimerGameTime(updateInterval, updateTimerId)
            StartTimerGameTime(Utility.RandomFloat(minAnnoyanceDay, maxAnnoyanceDay), annoyanceTimerId)
            StartTimerGameTime(Utility.RandomFloat(minAttackDay, maxAttackDay), attackTimerId)
        else
            StartTimer(sysInterval)
        endif
    EndFunction
    
    Function UpdateWorkshop()
        ; Do something
        StartTimerGameTime(updateInterval, updateTimerId)
    EndFunction
    
    Function SpawnAnnoyance()
        debugTrace("Annoyance spawned")
        if AnnoyanceActors.Length > 0
            int spawnType = 0
            if  AnnoyanceActors.Length > 1
                spawnType = Utility.RandomInt(0, AnnoyanceActors.Length - 1)
            endif
            ObjectReference spawnedActor
            ObjectReference spawnMarker = GetSpawnMarker()
            spawnedActor = spawnMarker.PlaceAtMe(AnnoyanceActors[spawnType], 1)
            spawnedActor.SetLinkedRef(self)
        endif
        StartTimerGameTime(Utility.RandomFloat(minAnnoyanceDay, maxAnnoyanceDay), annoyanceTimerId)
    EndFunction
    
    Function SpawnEnemy()
        debugTrace("Enemies spawned")
        ; To Do
        StartTimerGameTime(Utility.RandomFloat(minAttackDay, maxAttackDay), attackTimerId)
    EndFunction
    
    Bool Function PlayerIsNearby()
        bool nearBy = GetDistance(Game.GetPlayer()) < 2500
        return nearBy
    EndFunction
    
    Bool Function WorkshopCanBeInitialized()
        if actorRefsKilled == false
            if ActorRefsToKill.Length > 0
                int killCount = 0
                while (c < ActorRefsToKill.Length)
                    if (ActorRefsToKill[c] as Actor).IsDead()
                        killCount += 1
                    endif
                    c += 1
                endwhile
                if killCount == ActorRefsToKill.Length
                    DebugTrace("All actors killed")
                    actorRefsKilled = true
                endif
            else
                DebugTrace("No actor to kill")
                actorRefsKilled = true
            endif
        endif
        if questsCompleted == false
            if QuestsToComplete.Length > 0
                int questCount = 0
                while (c < QuestsToComplete.Length)
                    if QuestsToComplete[c].IsCompleted()
                        questCount += 1
                    endif
                    c += 1
                endwhile
                if questCount == QuestsToComplete.Length
                    DebugTrace("All quests completed")
                    questsCompleted = true
                endif
            else
                DebugTrace("No quest to complete")
                questsCompleted = true
            endif
        endif
        if UnlockWhenCleared
            if GetCurrentLocation().IsCleared()
                DebugTrace("Location cleared")
                locationCleared = true
            endif
        else
            DebugTrace("No location to clear")
            locationCleared = true
        endif
        if actorRefsKilled && questsCompleted && locationCleared
            DebugTrace("All quests completed, all actors killed, location cleared")
            return true
        else
            return false
        endif
    EndFunction
    
    ObjectReference Function GetSpawnMarker()
        int c = 0
        float  highestDistance = 0
        ObjectReference spawnMarker
        while (c < SpawnMarkerList.Length)
            if SpawnMarkerList[c].GetDistance(Game.GetPlayer()) > highestDistance
                highestDistance = SpawnMarkerList[c].GetDistance(Game.GetPlayer())
                spawnMarker = SpawnMarkerList[c]
            endif
            c += 1
        endwhile
        return spawnMarker
    EndFunction
    
    Function DebugTrace(string text)
        Debug.Trace("THEW DEBUG - Workshop Controller - Workshop: " + MyWorkShop + " - " + text)
    EndFunction
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	_settlement-system.jpg 
Hits:	32 
Größe:	113,2 KB 
ID:	22765  

  2. #782
    Not my president Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.064
    Gamer IDs

    Gamertag: PixelMurder

    Standard

    Hah, alles mein

    Okay, noch nicht ganz, da fehlt noch was, wie ich beim Auswerten der Logs gemerkt habe. Der Shop würde zwar funktionieren, ist aber noch nicht richtig mit der WorkshopParentQuest verlinkt, die alle Siedlungen in einem Array haben muss, um sie kontrolieren und updaten zu können. Dieser Array wird automatisch erstellt, wenn man einen neuen Durchgang beginnt, alle Locations mit gewissen Keywords und einer Workbench werden automatisch ermittelt. Desahlb funktioniert auch Thicket Excavations einwandfrei, weil die Siedlung beim Neustart schon drin war.
    Zum Glück kann ich beim Workshop-DLC abkupfern, wie man Sieldungen nachträglich hinzufügt, das ist eine einfache Funktion, die ich von meinem Aktivator-Script auf WorkshopParent aufrufen kann.

    Die Siedlung ist zwar richtig episch, wird aber ihre Macken haben. Curie habe ich oft schwimmen sehen, die Stege da sind einfach zu eng und der Weg zum Siedlungszentrum ist tatsächlich unterbrochen: entweder muss man den Lift nehmen oder schwimmen. Mal sehen, ob ich das im Baumodus verbessern kann, wenn ich vorhandene Stege breiter mache und neue hinzufüge.

    Ausserdem ist die Performance da relativ schlecht, ich vermute, dass das an den schwimmenden Plattformen liegt, die sich heben und senken. Das ist ein weiteres Problem, damit Objekte sich mit den Plattformen bewegen, müssen sie im Plattform-Obbjekt eingeklinkt sein, das geht nur im Editor. Aber okay, hat auch so genug Platz da, wie man in den Screenshots sieht.

    Edit
    So, hier das neue Script, das ich gleich testen gehe... Aber erst, wenn ich die Bootstexturen debugt habe, das gönne ich mir noch davor, da ich nicht auf schwammiges Zeug stehe.

    Scriptname THEW:THEWWorkshopController extends ObjectReference

    Spoiler:
    Code:
    Group Flags
        Bool Property IsNewWorkshop = true Auto Const
        { If set to true, this workshop will be added to the workshop parent quest. Generally used for newly installed settlements. }
        Bool Property UnlockWhenAble = true Auto Const
        { If set to true, this workshop will be unlocked from this script when all conditions are met. Generally used for newly installed settlements.}
    EndGroup
    
    Group Data
        Actor Property Player Auto Const Mandatory
        WorkShopParentScript Property WorkShopParent Auto Const Mandatory
        WorkShopScript Property WorkShop Auto Const Mandatory
        GlobalVariable Property GameDaysPassed Auto Const Mandatory
        GlobalVariable Property GameHour Auto Const Mandatory
        ObjectReference[] Property AttackMarker Auto Const Mandatory
    EndGroup
    
    Group UnlockConditions
        Bool Property UnlockWhenCleared = false Auto Const
        ObjectReference[] Property ActorRefsToKill Auto Const
        Quest[] Property QuestsToComplete Auto Const
        Quest:QuestStage[] Property QuestStagesToComplete Auto Const
    EndGroup
    
    Group AnnoyanceSytem
        ActorBase[] Property AnnoyanceActors Auto Const
    EndGroup
    
    Group AttackSystem
        WorkshopAttack[] Property WorkshopAttacks Auto Const
    EndGroup
    
    bool sysInitialized             = false
    bool workShopInitialized         = false
    float sysInterval                 = 60.0
    int updateTimerId                = 1
    float updateInterval            = 0.25
    int annoyanceTimerId            = 2
    float minAnnoyanceDay            = 1.0
    float maxAnnoyanceDay            = 1.5
    float annoyanceDay                = 0.0
    int attackTimerId                = 3
    float minAttackDay                = 7.0
    float maxAttackDay                = 12.0
    float attackDay                = 0.0
    bool actorRefsKilled             = false
    bool questsCompleted            = false
    bool questStagesCompleted         = false
    bool locationCleared            = false
    
    Struct WorkshopAttack
        Bool NightOnly = false
        Bool IsHardcore = false
        ActorBase EnemyActorsBoss
        ActorBase EnemyActorsKnight
        ActorBase EnemyActorsGeneral
        ActorBase EnemyActorsPet
    EndStruct
            
    Event OnLoad()
        DebugTrace("Workshop Controller loaded")
        if sysInitialized == false    
            sysInitialized = true
            RegisterkWorkshop()
            MonitorWorkshop()
        endif
        if workShopInitialized == true
            ; Do something
        endif
    EndEvent
    
    Event OnTimer(int aiTimerID)
        MonitorWorkshop()
    EndEvent
    
    Event OnTimerGameTime(int aiTimerID)
        if aiTimerId == updateTimerId
            UpdateWorkshop()
        elseif aiTimerId == annoyanceTimerId
            SpawnAnnoyance()
        elseif aiTimerId == attackTimerId
            SpawnEnemy()
        endif
    EndEvent
    
    ; Monitor workshop location until all conditions are met
    Function MonitorWorkshop()
        if workShopInitialized == false && WorkshopCanBeInitialized()
            workShopInitialized = true
            UnlockWorkshop()
            StartTimerGameTime(updateInterval, updateTimerId)
            StartTimerGameTime(Utility.RandomFloat(minAnnoyanceDay, maxAnnoyanceDay), annoyanceTimerId)
            StartTimerGameTime(Utility.RandomFloat(minAttackDay, maxAttackDay), attackTimerId)
        else
            StartTimer(sysInterval)
        endif
    EndFunction
    
    Function UpdateWorkshop()
        ; Do something
        StartTimerGameTime(updateInterval, updateTimerId)
    EndFunction
    
    Function RegisterkWorkshop()
        DebugTrace("Trying to register workshop")
        if IsNewWorkshop
            WorkshopScript[] newWorkshops = new WorkshopScript[0]
            newWorkshops.Add(WorkShop)
            ; add new workshops to main workshop arrays
            if WorkshopParent.ReinitializeLocationsPUBLIC(newWorkshops, self) == false
                ; no locations to initialize - we're done (otherwise we wait for WorkshopInitializeLocation event sequence to complete)
                DebugTrace("Workshop registered")
            endif
        endif
    EndFunction
    
    Function UnlockWorkshop()
        DebugTrace("Workshop unlocked")
        if WorkShop.OwnedByPlayer == false && UnlockWhenAble == true
            WorkShop.SetOwnedByPlayer(true)
        endif
    EndFunction
    
    Function SpawnAnnoyance()
        debugTrace("Annoyance spawned")
        if AnnoyanceActors.Length > 0
            int spawnType = 0
            if  AnnoyanceActors.Length > 1
                spawnType = Utility.RandomInt(0, AnnoyanceActors.Length - 1)
            endif
            ObjectReference spawnedActor
            ObjectReference spawnMarkerRef = GetSpawnMarker()
            spawnedActor = spawnMarkerRef.PlaceAtMe(AnnoyanceActors[spawnType], 1)
            spawnedActor.SetLinkedRef(self)
        endif
        StartTimerGameTime(Utility.RandomFloat(minAnnoyanceDay, maxAnnoyanceDay), annoyanceTimerId)
    EndFunction
    
    Function SpawnEnemy()
        debugTrace("Enemies spawned")
        ; To Do
        StartTimerGameTime(Utility.RandomFloat(minAttackDay, maxAttackDay), attackTimerId)
    EndFunction
    
    Bool Function PlayerIsNearby()
        bool nearBy = GetDistance(Game.GetPlayer()) < 2500
        return nearBy
    EndFunction
    
    Bool Function WorkshopCanBeInitialized()
        int c = 0
        if WorkShop.OwnedByPlayer == true
            return true
        endif
        if actorRefsKilled == false
            if ActorRefsToKill.Length > 0
                int killCount = 0
                c = 0
                while (c < ActorRefsToKill.Length)
                    if (ActorRefsToKill[c] as Actor).IsDead()
                        killCount += 1
                    endif
                    c += 1
                endwhile
                if killCount == ActorRefsToKill.Length
                    DebugTrace("All actors killed")
                    actorRefsKilled = true
                endif
            else
                DebugTrace("No actor to kill")
                actorRefsKilled = true
            endif
        endif
        if questsCompleted == false
            if QuestsToComplete.Length > 0
                int questCount = 0
                c = 0
                while (c < QuestsToComplete.Length)
                    if QuestsToComplete[c].IsCompleted()
                        questCount += 1
                    endif
                    c += 1
                endwhile
                if questCount == QuestsToComplete.Length
                    DebugTrace("All quests completed")
                    questsCompleted = true
                endif
            else
                DebugTrace("No quest to complete")
                questsCompleted = true
            endif
        endif
        if questStagesCompleted == false
            if QuestStagesToComplete.Length > 0
                int questStagesCount = 0
                c = 0
                while (c < QuestStagesToComplete.Length)
                    if (QuestStagesToComplete[c].QuestToSet as Quest).IsStageDone(QuestStagesToComplete[c].StageToSet)
                        questStagesCount += 1
                    endif
                    c += 1
                endwhile
                if questStagesCount == QuestStagesToComplete.Length
                    DebugTrace("All quests stages completed")
                    questStagesCompleted = true
                endif
            else
                DebugTrace("No quest stages to complete")
                questStagesCompleted = true
            endif
        endif
        if locationCleared == false
            if UnlockWhenCleared
                if GetCurrentLocation().IsCleared()
                    DebugTrace("Location cleared")
                    locationCleared = true
                endif
            else
                DebugTrace("No location to clear")
                locationCleared = true
            endif
        endif
        if actorRefsKilled && questsCompleted && questStagesCompleted  && locationCleared
            DebugTrace("All quests and quest stages completed, all actors killed, location cleared")
            return true
        else
            return false
        endif
    EndFunction
    
    ObjectReference Function GetSpawnMarker()
        int c = 0
        float  highestDistance = 0
        ObjectReference spawnMarkerRef
        while (c < AttackMarker.Length)
            if AttackMarker[c].GetDistance(Game.GetPlayer()) > highestDistance
                highestDistance = AttackMarker[c].GetDistance(Game.GetPlayer())
                spawnMarkerRef = AttackMarker[c]
            endif
            c += 1
        endwhile
        return spawnMarkerRef
    EndFunction
    
    Function DebugTrace(string text)
        Debug.Trace("THEW DEBUG - Workshop Controller - Workshop: " + WorkShop + " - " + text)
    EndFunction
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-21-15-28-52-133.jpg 
Hits:	32 
Größe:	108,3 KB 
ID:	22768   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-21-15-29-13-651.jpg 
Hits:	30 
Größe:	76,6 KB 
ID:	22769   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-21-19-16-39-422.jpg 
Hits:	29 
Größe:	64,8 KB 
ID:	22770   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-21-20-03-07-421.jpg 
Hits:	30 
Größe:	118,3 KB 
ID:	22771  

  3. #783
    Not my president Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.064
    Gamer IDs

    Gamertag: PixelMurder

    Standard

    So, nachdem ich den Bogen raus habe, kann ich in weniger als einer Viertel Stunde eine neue Siedlung einbauen, z.B. den Listening Post Bravo, Danse hat sicher Freude an ein wenig Gesellschaft. Allerdings ist der Vertibird von Elder Maxson da noch nicht abgeflogen. Habe sogar kurz nachgesehen, aber das ist mir ernsthaft zu mühsam, mich durch dieses Labyrinth von Quest-Szenen zu schlagen und rauszufinden, wieso der Vertibird nicht fliegen möchte.
    Aber das reiht sich nahtlos in die immer länger werdende Liste der Kaputtheiten. Musste schon zwei Siedlungen meinen Schalter zum manuellen Freischalten anhängen, weil die trotz geclearter Location nicht freigeschaltet wurden. Die Workshops selbst sind aber von keinem Mod geändert und mir ist auch nach recht langer Suche noch kein Grund dafür untergekommen. Es spricht alles dafür, dass es klappen müsste.
    Dann kirege ich Sommerville immer noch nicht unter Kontrolle. Man kann da zwar Sielder zuweisen, aber jeder Siedler und auch die drei Default-Nasen da scheinen einfach keine erkennbare KI zu haben. Die stehen unwiederbringlich am Ort und höchstens im Kampf reagieren sie kurz, bevor sie sich wieder deaktivieren. Würde sagen, das Navmesh da muss kaputt sein, das führt zu genau solchen Reaktionen.. Das ist tatsächlich geändert und zwar von Rebuilt Series Prewar Houses.
    Hingegen funktionieren meine selbst eingebauten Workshops nicht schlechter, als die anderen. Da drin funktioniert alles, was funktonieren muss: Siedler zuweisen, Karawanen oder NPC dahin schicken, alles scrappen. Okay, Libertalia ist tatsächlich keine gute Siedlung, man muss es gesehen haben, wie sich die Brahmine über die Stehe dahin schlagen und Siedler den Weg nicht mehr finden.
    Aber okay, den Workshop kann man ja konfigurieren und ich selbst habe ein Rezept eingebaut, das es mir erlaubt, den Siedlungszentrum-Marker dahin zu verschieben, wo die Brahmine am wenigsten Wegfindungsprobleme haben, das ist ein nettes kleines Feature, das mir im Nexus ein paar Endorement geben könnte.
    Okay, habe nicht mehr soviel Zeit wie auch schon, da bastle ich einfach ein wenig für mich, zuwas ich gerade Lust habe. Z.B. kann ich jetzt offiziell jedes Grünzeug aus Vanilla und den DLC pflanzen, vom Seegras über Schilf bis zu den grössen Bäumen und sogar Baumgruppen mit Efeu drauf. Ausserdem habe ich noch Variationen von hübschen Pflanzen wie Bloodleaf eingebaut, die keinerlei Ressorucen im Workshop haben und nur zur Deko da sind.
    Dann habe ich mir noch erschiedene Effektstrahler in jeweils drei Lichtstärken und Radien gegönnt, damit kann man etwa Wasser zum sanften Leuchten bringen oder ein gruseliges Flair hinkriegen. Die Richtungen sind bisher Kerzenlicht, Blut, grünlich, bläulich und neutral. Brauche noch mehr von denen.

  4. #784
    Not my president Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.064
    Gamer IDs

    Gamertag: PixelMurder

    Standard

    Stecke gerade wieder am Punkt, wie auch schon in Skyrim, da ich die Taten meiner Verbündeten nicht mehr mitmachen will und sich das Spiel wie Endgame anzufühlen beginnt. Ein wenig besser als in Skyrim, wo ich in über 1500 Stunden etwa zwei Mal die Hauptquest absolviert habe und ein Mal in den Krieg zog. Habe auch nie die Assassinen-Quests fertig gemacht, da es mir bereits reichte, als ich einen armen Bettler killen sollte. Das konnte ich einfach nicht tun. Man könnte soagr sagen, dass es ein gutes Zeichen für ein Spiel ist, wenn man bewusst Dinge nicht tut, die man nicht mit sich vereinen kann. In Saints Row 2 gibts mir nix zu denken, mit einem brennenden Buggy durch die Ladenpassage zu fahren, aber in Fallout und Skyrim habe ich Prinzipien. Die es mir zum Beispiel verbieten, Leute anzugreifen, die mich nicht vorher angegriffen haben und die ich nicht als Gefahr für die Menschheit einschätze. Es hat nicht mit mangelnder Aggressionen zu tun, denn Gunner, Mutanten und Ghule vermöble ich gerne dreihundert Stunden lang.
    Aber gleichzeitig fühlt es sich ein wenig schal an, denn die epischen Quests und Aha-Momente auf Missionen sind eher rar. Ich wäre gerne mit Liberty Prime auf eine epische Endmission, ich will dazu vorher nur nicht die Railroad überfallen. Auch der Angriff auf Bunker Hills vom Institut her hat mich genervt, habe eigentlich da nur zugesehen, die Androiden laufen lassen und anschliessend meinem missratenen Sohnemann die Meinung gegeigt. Eiegentlich würde ich ja auch gerne mal in der Zeit zurück und ins Ödland der Haupttadt reisen, und diesem Gör da Manieren beibringen, das mal Boss der BoS wird

    Aber okay, ich kann ja neuerdings auch Maulwurfsratten züchten, wie man sieht. Experimentiere noch an der KI rum, habe Prototypen von Herden-Tieren oder anderen, die auch Wache sein können.
    Muss bei Maulwurfsratten nicht sein. War aber trotzdem lustig anzusehen, wie meine Maulwurfsrattenherde mit einer legendären Brutmutter als Anführerin selbstständig aus dem Käfig raus rannte, die Stingswings killten und wieder schön brav zurück an ihren Platz gingen, bei mir funktionieren halt solche Sachen, wenn ich sie mache, selbst die Viecher haben eine anständige KI.

    Seit heute kann ich auch noch Mirelurk-Babies züchten, die genau wie alle anderen Futter-Tiere eine mehr oder wneiger zufällige Rate von Ressourcen in den Workshop abgeben. Überlege mir, meine The Wanderer-Creatures wenigstens hier im Forum rufzuladen, das ist nur eine schlanke esp, die keinerlei Änderungen an der Welt macht. Abhängigkeit ist ausschliesslich Far Harbor.

    Features:
    -craftbare Aktivatoren für verschiedene Deko-, Zucht- und Wachtiere: Maulwurfsratten, Radstags, Blähfliegen, Brahmine, Wölfe, Mutantenhunde, Haushunde, Raider-Hunde(inklusive Rüstung), Mirelurk-Babies, Kaninchen, Hühner
    -der Aktivator kann verschoben werden und die Tiere halten sich recht failsafe immer im Umkreis davon auf
    -Tiere können sterben, werden aber beim Zell-Reset wieder regeneriert
    -unterschiedliche KI-Verhalten und Mut, alle Hunde sind Wachen, während andere Viecher sich im Kampf eher zurückhalten
    -Tiere wie Brahmine und Radstags geben Ressourcen in den Workshop
    -NPCs lassen sich den Aktivatoren zuweisen(noch im Test)
    -Wachhunde geben Sicherheit, andere Viecher Happiness

    Das ist nicht speziell gut balanciert, es kostet nicht viel, die Aktivatoren zu bauen und die Ausbeute ist auch nicht gewaltig, es geht hier eher um Deko.

    Ausserdem habe ich jetzt gerade die vierte neue Sieldung in Betrieb genommen und zwar lake Quannapowit, da würde ich selbst gerne wohnen. Bisher hatte ich Libertalia, Thicket Excvations, Listening Post Bravo. Alle Siedlungen funktionieren vollständig: Sielder hinschicken, Rekrutierung per Radio, Überfälle, .usw. Jetzt fehlt noch eine epische Siedlung Richtung Glowing Sea.

    Edit
    Heute wollte ich in das Mechanisten Lair, aber scheinbar ist mir der bekannte Bug untergekommen, dass Wände und andere Objekte unsichtbar werden, während es unspielbar lagt, das kennt sogar das Wiki. Natürlich frage ich mich immer zuerst, ob es meine Schuld ist, wenn im Spiel was nicht geht, obwohl mir die Erfahrung anderes sagt. Aber da ist nix spezielles.
    Habe mal testweise alle vollkommen sinnlosen Deko-Schweinereien und Nebel entfernt, das sind schätzungsweise weit über 500 Objekte, die nur die Performance kaputt machen, aber keinen optischen Sinn haben. Gerade das Lair ist wie kaum ein anderer Dungeon übersäht von Schmutz-Decals, die meisten sind einfache hellgraue Flächen in niederer Auflösung, die einem in den Augen schmerzen.
    Und siehe da: keine optischen Bugs mehr und die Perfomance ist vom Unspielbaren ins Ertragbare gestiegen. Habe nebenbei auch gleich noch an die 10 Scripte gefixt, die mir das Log zumüllten, z.B. Sound-Instanzen ohne gültige ID, die ohne Check gestoppt wurden oder das völlig kaputte Protectron-Script, das bescheidene Spotlight-Script und anderes.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-27-17-36-31-623.jpg 
Hits:	32 
Größe:	134,0 KB 
ID:	22778   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-28-20-24-37-904.jpg 
Hits:	32 
Größe:	161,1 KB 
ID:	22777   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-28-20-37-53-819.jpg 
Hits:	29 
Größe:	183,5 KB 
ID:	22776   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-27-16-21-53-642.jpg 
Hits:	31 
Größe:	169,2 KB 
ID:	22779  

  5. #785
    Not my president Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.064
    Gamer IDs

    Gamertag: PixelMurder

    Standard

    Habe noch meine Methoden verbessert, wie ich möglichst schnell einen funktionierenden Workshop hinkriege, der voll ins System eingebunden ist.
    Zuerst habe ich ein verbessertes Template erstellt, das ich einfach irgendwo hin kopieren und konfigurieren kann. Das beinhaltet alle Trigger, Marker und Verlinkungen, die notwendig sind.
    Mein Controller-Script habe ich auch noch verbessert, damit man möglichst wenig und möglichst einfach konfigurieren kann.

    1: Alle Objekte aus meiner Dev-Zelle kopieren
    2: Alles in die gewünschte Aussenzelle kopieren
    3: Meinen Workshop-Controller konfigurieren(Freischaltbedingungen, Optionen)
    4: Den Workshop konfogrieren(Optionen)
    5: All Objekte am richtigen Ort platzieren und die Grenzen-Trigger anpassen
    6: EncounterZone und Location im CK auf Workshop einstellen( geht nicht per Script)
    7: Alle Zellen, die vom Workshop betroffen sind, mit der richtigen Location verbinden und auchnoch gleich eine Form-ID geben
    8: In FO4Edit die Previs-Files und statischen Referenzen löschen, damit alls gescrappt werden kann

    Im besten Fall habe ich das in 10 Minuten gemacht, ausser ich muss noch einige Dinge am Ort anpassen, damit die Siedlung besser funktioniert, eine halbe Stunde ist eher realistisch. Im Fall dieses Militärgeländes brauchte es noch einen Map-Marker und ich musste die vorhandenen Workbenches an den Workshop anhängen. Im Spiel habe ich noch gemerkt, dass ich eine Wand flicken und Efeu entfernen muss, das clipte.

    Anyway, zwei weitere nette Siedlungen, die tatsächlich so ausgewählt sind, wie wenn ich ingame nach einer guten Siedlung gesucht hätte(was ich ja eigentlich auch tue, gehe bewusst Stellen auf der Karte nach, die interessant aussehen): hat schon Gebäude, kann gut verteidigt werden, sieht nett aus in der Umgebung.
    In Vanilla habe ich oft das Gefühl, wer würde in so einem Loch wohnen wollen, das ausserdem von einem strategischen Tiefflieger ausgewählt wurde. Ausserdem komme ich an haufenweise einigermassen intakten und hübschen Wohngelegenheiten vorbei, kriege aber selbst ein Gelände, das von einem völlig kaputten Gebäude verschwendet wird, das ich in Vanilla auch nicht scrpappen kann.
    Werde bei Gelgenheit noch mehr Siedlungen nachwerfen, eine Auutobahnbrücke fehlt mir noch.
    Okay, eigentlich habe ich jetzt soviele Siedlungen, dass sie sich überhaupt nicht mehr richtig handeln lassen. Im nächsten Durchgang verzichte ich dann gleich drauf, die schlechteren Workshops freizuschalten.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-30-11-03-12-051.jpg 
Hits:	56 
Größe:	158,4 KB 
ID:	22780   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-30-11-13-48-724.jpg 
Hits:	155 
Größe:	144,9 KB 
ID:	22781   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-30-11-19-35-741.jpg 
Hits:	116 
Größe:	130,8 KB 
ID:	22782   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-04-30-11-23-57-450.jpg 
Hits:	185 
Größe:	162,1 KB 
ID:	22783  

  6. #786
    Not my president Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.064
    Gamer IDs

    Gamertag: PixelMurder

    Standard

    Gestern musste ich mal eine kleine Pause im Siedlungsbau einlegen, um an einer anderen Baustelle Hand anzulegen, die mir seit ein paar Tagen auf den Sack geht.
    Habe also doch noch die Mission übernommen, die Railroad anzugreifen. Allerdings wollte ich nicht gleich losziehen und baute ein wenig sonstwo rum, besuchte Siedlungen und ging am Schluss am Boston Airport schlafen. Seither tauchte Deacon spätestens nach jedem Schläfchen auf, ballert in der Gegend rum und bringt die Siedler-KI durcheinander, die wir wir alle wissen, eh schon am Anschlag ist. Siedler und auch Robots werden teilweise feindlich, Minutemen ballern auf Deacon, Deacon ballert zurück, ein einziges Chaos. Deacon ist immer noch protected, d.h. er geht zu Boden, statt zu sterben und steht nach einer Weile wieder auf und das Geballer geht von vorne los.
    Bin dann der Sache nachgegangen, Quests, Quest-Scripte, Actor-Scripte, Quest-Szenen, Quest-Alias. Für mich sieht das ganz so aus, als ob Decon zwar zu Begin der Quest ein Travel-Package mit Quest-Condition und Ziel North Church kriegt, aber weder als Begleiter, noch aus dem zugewiesenen Workshop entfernt wird, ihm werden auch keine Fraktionen entzogen. So führt das dazu, dass Deacon irgendiwe hergebeamt wird, wenn ich schlafe und zwar mit wiedersprüchlichen Fraktionen. Das führt dazu, dass es eher Zufall ist, wer wem hilft und wer wen angreift. Z.B. scheint ein Automatron-Bot plötzlich feindlich zu werden, weil Deacon angegriffen wird, weil er warscheinlich immer noch die Begleiter- und Workshop-Fraktion hat.

    Zum Glück habe ich bereits eine laufende Companion-KI-Control-Quest, die ich um ein THEWCompanionDebugScript erweitert habe, wo in einem Intervall bestimmte Bedingungen überprüft und Abhilf egetroffen wird.
    Deacon etwa wird als Begleiter unbrauchbar gemacht, sobald die Quest BOS302B begonnen hat. Sein Team-Status wird aufgehoben und sämtlich relevanten Fraktionen werden entfernt. Er wird aus dem aktuell zugewiesenen Workshop entfernt und er verliert auch sämtliche Siedler-Fraktionen und Keywords. Auserdem wird er per MoveTo in das Railroad-HQ verschoben. Und tadaa, wo ich vorher reptierbar einen Schlaf-Save laden konnte und sofort alles im Chaos versank, bleb alles ruhig.

  7. #787
    Not my president Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.064
    Gamer IDs

    Gamertag: PixelMurder

    Standard

    Ha, geil, habe heute kurz nochmals zwei Siedlungen eingebaut, nachdem ich gestern ein paar bisher unbekannte Gebiete absuchte.

    Das ist nun die Liste mener neuen Siedlungen, die voll funktionsfähig sind.

    • Natick Power Plant MDPL-13 (ein grosses und ein kleines intaktes Gebäude, ein Zaun drum gibts bereits, das gab einen neuen Map-Marker)
    • Robotics Pioneer Park (da wo die vier Robots sind, ein Häuschen, ein hübscher Teich)
    • Fairline Hill Estates (überlege mir gerade, das in Tranquility Lane umzubenennen, so sieht nämlich die Karte da aus, ein kleines Städtchen mit intakten Gebäuden in den Wäldern, top)
    • Listening Post Bravo (kriegt man nach der Quest, Danse habe ich dahin beordert, ein kleiner Bunker, ein grosser voll verlinkter(scrapbarer und baubarer) Keller, eine Landepiste für meinen Vertibird(Schnellreisemarker mit Teibstoff-Verbrauch)
    • Quartermastery Fort Hagen (drei intakte grosse Schuppen in den Wäldern, 6 PA-Station waren schon da)
    • Lake Quannapowit (nur ein kleines Bootshäuschen, aber ein schöner See in den Wädlern)
    • Libertalia (episch, funktioniert leider wegen der Navmeshes da nicht besonders gut)
    • Ticket Exvacations (episch, ein ganzer Steinbruch für mich, mit Terminal, an dem man die Wasserhöhe bestimmen oder es ganz abstellen kann, supergeil)
    • Outpost Zimonja hat von mir einen eigenen Keller gekriegt, der volll verlinkt ist


    Im Moment sind Listening Post Bravo und Quartermastery Fort Hagen meine Favoriten. Das eine ist mein BOS-Outcast-Settlement, das andere meine PA- und Automatron-Werkstätte.
    Wenn ich Fairline Hill Estates sehe, fühlt es sich ein wenig schal an, was ich an völlig kaputten Vanilla-Siedlungen kriege. Und ein Sielder möchte bei MDPL-13 siedeln, damit er keine Zeit mit Bauen verschwenden muss.

    Das ird übrigen langsam zum Overhaul, da sind auch sonstige Tweaks darin enthalten, z.B. dass Überfälle eine extrem hohe Chance kriegen, wenn man in der Nähe ist, während sie sonst sinkt oder völlig geblockt sind, wenn man sich in einem Interior oder einem anderen Worldspace befindet.

    Mein The Wanderer-Creatures-Modul wird auch immer besser, ich liebe meine Mirelruk Hatchlinge. Sind sie nicht niedich Sind auch fast doppelt so gross, wie in Vanilla und geben Mielurkfleisch in den Workshop. Das Wasser in dem die schwimmen, ist übrigens auch gecraftet, super Mod, der Aka Water World.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-05-04-19-54-52-402.jpg 
Hits:	28 
Größe:	89,5 KB 
ID:	22785   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-05-04-19-57-02-766.jpg 
Hits:	89 
Größe:	81,0 KB 
ID:	22786   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-05-04-19-45-26-489.jpg 
Hits:	126 
Größe:	159,5 KB 
ID:	22787   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-05-04-19-47-14-817.jpg 
Hits:	25 
Größe:	70,1 KB 
ID:	22788  

  8. #788
    Not my president Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.064
    Gamer IDs

    Gamertag: PixelMurder

    Standard

    Zwischendurch gibts ja auch immer wieder Rückschläge, etwa dass meine neue Siedlung Listening Post Bravo plötzlich auf der Karte nicht mehr als Siedlung(mit Stats) dargestellt wird, obwohl die Routen dahin laufen und die Siedlung tadellos funktioniert und auch im der Pipboy-Liste die normalen Werte zeigt. Hat wahrscheinlich vom zeiltichen Rahmen her damit zu tun, dass ich den Keller des Bunkers mit der Siedlung aussen verlinkt habe. Komme allerdings ncht drauf, wo das Problem liegt, scheint alles korrekt eingestellt zu sein. Finde es aber sicher noch raus.

    Aber okay, die Erfolgserlebnisse mit neuen Tweaks wiegen das auf. Ich gehe niemals ins Spiel, ohne mindestens zehn Dinge geändert oder erweitert zu haben, die es gleich zu testen gilt.

    War ja naheliegend, dass ich mein System zum Craften von Zuchtvieh um interessantere Actors erweitern musste. Jetz kann man auch Todeskrallen-Babies, Hunde-Welpen, BOS-Outcast-PA-Soldaten, Scribes oder Eyebots craften.
    Die haben je nachdem dem im Gegensatz zum Zuchtvieh Wach-Packages drauf, die ich gerade schleife. Die sollen nicht nur wie die Ölgötzen da stehen, sondenr sich auch mal am Hintern kratzen oder eine rauchen. Das gibt noch ein wenig Arbeit. Aber die dabei gemachte Erfahrungen werde ich dann bei den Siedlern anwenden.
    Natürlich denke ich mir noch Unique-Charaktere aus, wie z.B. Eyebots mit laufendem Radio Diamond City oder so.

    Dann kann ich jetzt sämtliche Fisch-Statics bauen, die es in Far Harbor gibt(Racks mit Fischen belegte Tische, ausgeweidete Wale, usw.), und habe natürlich gleich einen Fischladen am Lake Quannapowit aufgestellt.

    Dan experimentiere ich rum, wie ich Siedler neuen Pflanzen, Idle-Markern und anderem Zeug zuweisen kann. Wenn man über dreissig Siedler haben kann, hat es irgendwann ausreichend Wachen, Sammler und Bauern, langweilig. Ich möchte noch irgendwelche Interaktionsmöglichkeiten ohne Ressourcenausstoss einbauen, die überzählige Sielder selbst beziehen können, analog den Plfanzen, da gibt es auch Automatismen. Da wären z.B. Kochherde, Werkbänke, Patrol-Marker oder Wachposten. Wenn sie beschäftigt sind, sind sie glücklicher, machen aber auch die Siedlung lebendiger.
    Das hat irgendwas mit Multiressourcen zu tun, ein Sielder kann mehrere Pflanzen haben und wenn man neue hinbaut und er noch Ressorucen verarbeiten kann, weist er sich automatisch zu. Das ist wahrscheinlich der Asnatzpunkt, muss das mit den Pflanzen auf craftbare Ineraktionsmöglichkeiten übertragen. Das sollte zu schaffen sein.

    Soviel zu basteln

  9. #789
    Not my president Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.064
    Gamer IDs

    Gamertag: PixelMurder

    Standard

    So, hier die neueste Version meinen Scripts, das ich durchaus als Kern eines Overhauls verstehe.

    Diesen Controller kann man neuen und vorhandenen Workshops anhängen. Neue Workshops fügt es geordnet dem System zu, bereits vorhandene werden debuggt und erweitert.
    Jetz kann ich neu bestimmen, welchhe Liste von Objekten wahlweise disabled oder enabled werden, wenn der Workshop freigeschaltet wird. Biete sich gerade für so Plätze wie meine neue Siedlung Crater House an. Da deaktiviere ich automatisch die RAD-Marker, die das unbewohnbar machen würden. Beim Listening Post hat es hingegen einen Hinrichtungsmarker für die Quest und da knien dann plötzlich die Begleiter oder Siedler am Boden.

    Scriptname THEW:THEWWorkshopController extends ObjectReference

    Spoiler:
    Code:
    Group Flags
        Bool Property IsNewWorkshop = true Auto Const
        { If set to true, this workshop will be added to the workshop parent quest. Generally used for newly installed settlements. }
        Bool Property UnlockWhenAble = true Auto Const
        { If set to true, this workshop will be unlocked from this script when all conditions are met. Generally used for newly installed settlements.}
    EndGroup
    
    Group EnaableDisableOnUnlock
        ObjectReference[] Property EnableOnUnlock Auto Const
        {References to enable on unlock.}
        ObjectReference[] Property DisableOnUnlock Auto Const
        {References to disable on unlock.}
    EndGroup
    
    Group Data
        Actor Property Player Auto Const Mandatory
        WorkShopParentScript Property WorkShopParent Auto Const Mandatory
        WorkShopScript Property WorkShop Auto Const
        { This should only be used if you cannot link to the workshop for a reason. Otherwise you need to link the workshop.}
        GlobalVariable Property GameDaysPassed Auto Const Mandatory
        GlobalVariable Property GameHour Auto Const Mandatory
        ObjectReference[] Property AttackMarker Auto Const
        {Obsolete - delete var before next playthrough. }
        KeyWord Property WorkshopLinkAttackMarker Auto Const Mandatory
    EndGroup
    
    Group UnlockConditions
        Bool Property UnlockForFree = false Auto Const
        { If this is set true, no further checks are made. }
        Bool Property UnlockWhenCleared = false Auto Const
        ObjectReference[] Property ActorRefsToKill Auto Const
        Quest[] Property QuestsToComplete Auto Const
        Quest:QuestStage[] Property QuestStagesToComplete Auto Const
    EndGroup
    
    Group SettlementSystem
        Bool Property AddSettlersOnInit = false Auto Const
        Int Property AddSettlersCount = 3 Auto Const
    EndGroup
    
    Group AnnoyanceSytem
        ActorBase[] Property AnnoyanceActors Auto Const
    EndGroup
    
    Group AttackSystem
        WorkshopAttack[] Property WorkshopAttacks Auto Const
    EndGroup
    
    ; Internal vars
    bool sysInitialized                 = false
    bool workShopInitialized             = false
    bool workShopRegistered         = false
    bool settlersSpawned            = false
    float sysInterval                 = 60.0
    int updateTimerId                = 1
    float updateInterval                = 0.25
    int annoyanceTimerId            = 2
    float minAnnoyanceDay            = 3.0
    float maxAnnoyanceDay            = 5.5
    float annoyanceDay                = 0.0
    int attackTimerId                = 3
    float minAttackDay                = 7.0
    float maxAttackDay                = 12.0
    float attackDay                    = 0.0
    bool actorRefsKilled                 = false
    bool questsCompleted            = false
    bool questStagesCompleted         = false
    bool locationCleared                = false
    WorkShopScript workshopRef
    
    Struct WorkshopAttack
        Bool NightOnly = false
        Bool IsHardcore = false
        ActorBase EnemyActorsBoss
        ActorBase EnemyActorsKnight
        ActorBase EnemyActorsGeneral
        ActorBase EnemyActorsPet
    EndStruct
            
    Event OnLoad()
        DebugTrace("Workshop Controller loaded")
        if sysInitialized == false    
            sysInitialized = true
            GetMyWorkshop()
            RegisterWorkshop()
            MonitorWorkshop()
        endif
        if workShopInitialized == true
            ; Do something
        endif
    EndEvent
    
    Event OnTimer(int aiTimerID)
        ; Workaround for already installed workshops, remove this before next playthrough
        if !workshopRef
            GetMyWorkshop()
        endif
        MonitorWorkshop()
    EndEvent
    
    Event OnTimerGameTime(int aiTimerID)
        ; Workaround for already installed workshops, remove this before next playthrough
        if !workshopRef
            GetMyWorkshop()
        endif
        if aiTimerId == updateTimerId
            UpdateWorkshop()
        elseif aiTimerId == annoyanceTimerId
            SpawnAnnoyance()
        elseif aiTimerId == attackTimerId
            SpawnEnemy()
        endif
    EndEvent
    
    ; Monitor workshop location until all conditions are met
    Function MonitorWorkshop()
        if workShopInitialized == false && WorkshopCanBeInitialized()
            workShopInitialized = true
            UnlockWorkshop()
            StartTimerGameTime(updateInterval, updateTimerId)
            StartTimerGameTime(Utility.RandomFloat(minAnnoyanceDay, maxAnnoyanceDay), annoyanceTimerId)
            StartTimerGameTime(Utility.RandomFloat(minAttackDay, maxAttackDay), attackTimerId)
        else
            StartTimer(sysInterval)
        endif
    EndFunction
    
    ; Update workshop in an interval
    Function UpdateWorkshop()
        ; Spawn first settlers
        if settlersSpawned == false && AddSettlersOnInit 
             settlersSpawned = true
            int c = 0
            while c < AddSettlersCount
                Debug.Trace("Initial settler created")
                WorkshopParent.CreateActorPUBLIC(workshopRef, GetSpawnMarker(), c == 0)
                c += 1
            endWhile
        endif
        ; To do more
        StartTimerGameTime(updateInterval, updateTimerId)
    EndFunction
    
    Function RegisterWorkshop()
        DebugTrace("Trying to register workshop")
        if IsNewWorkshop
            WorkshopScript[] newWorkshops = new WorkshopScript[0]
            newWorkshops.Add(workshopRef)
            ; add new workshops to main workshop arrays
            if WorkshopParent.ReinitializeLocationsPUBLIC(newWorkshops, self) == false
                ; no locations to initialize - we're done (otherwise we wait for WorkshopInitializeLocation event sequence to complete)
                workShopRegistered = true
                DebugTrace("Workshop registered")
            endif
        else
            DebugTrace("Workshop allready registered")
            workShopRegistered = true
        endif
    EndFunction
    
    Function UnlockWorkshop()
        DebugTrace("Workshop unlocked")
        if workshopRef.OwnedByPlayer == false && UnlockWhenAble == true
            workshopRef.SetOwnedByPlayer(true)
        endif
        int c = 0
        if EnableOnUnlock.Length > 0
            c = 0
            while (c < EnableOnUnlock.Length)
                EnableOnUnlock[c].Enable()
                c += 1
            endwhile
        endif
        if DisableOnUnlock.Length > 0
            c = 0
            while (c < DisableOnUnlock.Length)
                DisableOnUnlock[c].Disable()
                c += 1
            endwhile
        endif
    EndFunction
    
    Function SpawnAnnoyance()
        if AnnoyanceActors.Length > 0 && PlayerIsNearby()
            debugTrace("Annoyance spawned")
            int spawnType = 0
            if  AnnoyanceActors.Length > 1
                spawnType = Utility.RandomInt(0, AnnoyanceActors.Length - 1)
            endif
            ObjectReference spawnedActor
            ObjectReference spawnMarkerRef = GetSpawnMarker()
            spawnedActor = spawnMarkerRef.PlaceAtMe(AnnoyanceActors[spawnType], 1)
            spawnedActor.SetLinkedRef(self)
        endif
        StartTimerGameTime(Utility.RandomFloat(minAnnoyanceDay, maxAnnoyanceDay), annoyanceTimerId)
    EndFunction
    
    Function SpawnEnemy()
        if PlayerIsNearby()
            debugTrace("Enemies spawned")
        endif
        ; To Do
        StartTimerGameTime(Utility.RandomFloat(minAttackDay, maxAttackDay), attackTimerId)
    EndFunction
    
    Function GetMyWorkshop()
        if GetLinkedRef() as WorkShopScript
            workshopRef = GetLinkedRef() as WorkShopScript
        elseif Workshop
            workshopRef = Workshop
        endif
    EndFunction
    
    Bool Function PlayerIsNearby(float distance = 2500.0)
        bool nearBy = GetDistance(Game.GetPlayer()) < distance
        return nearBy
    EndFunction
    
    Bool Function WorkshopCanBeInitialized()
        int c = 0
        ; Worshop not registered yet
        if workShopRegistered == false
            return false
        endif
        ; Workshop allready owned by player
        if workshopRef.OwnedByPlayer == true
            return true
        endif
        ; Workshop can be unlocked for free
        if UnlockForFree == true
            return true
        endif
        ; Actors to kill check
        if actorRefsKilled == false
            if ActorRefsToKill.Length > 0
                int killCount = 0
                c = 0
                while (c < ActorRefsToKill.Length)
                    if (ActorRefsToKill[c] as Actor).IsDead()
                        killCount += 1
                    endif
                    c += 1
                endwhile
                if killCount == ActorRefsToKill.Length
                    DebugTrace("All actors killed")
                    actorRefsKilled = true
                endif
            else
                DebugTrace("No actor to kill")
                actorRefsKilled = true
            endif
        endif
        ; Quests completed check
        if questsCompleted == false
            if QuestsToComplete.Length > 0
                int questCount = 0
                c = 0
                while (c < QuestsToComplete.Length)
                    if QuestsToComplete[c].IsCompleted()
                        questCount += 1
                    endif
                    c += 1
                endwhile
                if questCount == QuestsToComplete.Length
                    DebugTrace("All quests completed")
                    questsCompleted = true
                endif
            else
                DebugTrace("No quest to complete")
                questsCompleted = true
            endif
        endif
        ; Quest stages completed check
        if questStagesCompleted == false
            if QuestStagesToComplete.Length > 0
                int questStagesCount = 0
                c = 0
                while (c < QuestStagesToComplete.Length)
                    DebugTrace("Checking for quest " + (QuestStagesToComplete[c].QuestToSet as Quest) + "  stage " + QuestStagesToComplete[c].StageToSet + ". Current stage: " + (QuestStagesToComplete[c].QuestToSet as Quest).GetStage())
                    if (QuestStagesToComplete[c].QuestToSet as Quest).GetStage() > QuestStagesToComplete[c].StageToSet || (QuestStagesToComplete[c].QuestToSet as Quest).IsCompleted()
                        questStagesCount += 1
                    endif
                    c += 1
                endwhile
                if questStagesCount == QuestStagesToComplete.Length
                    DebugTrace("All quests stages completed")
                    questStagesCompleted = true
                endif
            else
                DebugTrace("No quest stages to complete")
                questStagesCompleted = true
            endif
        endif
        ; Location cleared check
        if locationCleared == false
            if UnlockWhenCleared
                if GetCurrentLocation().IsCleared()
                    DebugTrace("Location cleared")
                    locationCleared = true
                endif
            else
                DebugTrace("No location to clear")
                locationCleared = true
            endif
        endif
        ; Check if all conditions are met
        if actorRefsKilled && questsCompleted && questStagesCompleted  && locationCleared
            DebugTrace("All quests and quest stages completed, all actors killed, location cleared")
            return true
        else
            return false
        endif
    EndFunction
    
    ObjectReference Function GetSpawnMarker()
        int c = 0
        float  highestDistance = 0
        ObjectReference attackMarkerRef
        ObjectReference[] attackMarkers = GetLinkedRefChildren(WorkshopLinkAttackMarker)
        while (c < attackMarkers.Length)
            if attackMarkers[c].GetDistance(Game.GetPlayer()) > highestDistance
                highestDistance = attackMarkers[c].GetDistance(Game.GetPlayer())
                attackMarkerRef = attackMarkers[c]
            endif
            c += 1
        endwhile
        return attackMarkerRef
    EndFunction
    
    ; Callback function for workshop parent.
    Event WorkshopParentScript.WorkshopInitializeLocation(WorkshopParentScript akSender, Var[] akArgs)
        if workShopRegistered == false
            DebugTrace("WorkshopInitializeLocation event received")
            if (akArgs.Length > 0)
                WorkshopScript workshopCheck = akArgs[0] as WorkshopScript
                if workshopCheck
                    workShopRegistered = true
                    DebugTrace("Workshop " + workshopCheck.GetWorkshopID() + " successfully registered.")
                else
                    DebugTrace("WorkshopInitializeLocation event received with invalid arguments")
                endif
            else
                DebugTrace("WorkshopInitializeLocation event received with insufficient arguments")
            endif
        endif
    EndEvent
    
    Function DebugTrace(string text)
        Debug.Trace("THEW DEBUG - Workshop Controller - Workshop: " + workshopRef + " - " + text)
    EndFunction


    Das hier ist Work in progress, aber da fehlen hauptsächlich noch ein paar Goodies, mit eigenem Überfall-System. Habe allerdings die struct-Arrays schon vorgesehen, um ganze Gruppen von Gegnern mit Boss, Soldaten und Kampftieren zu spawnen. Also da nähert sich Papyrus einer echten hochstehenden objektorientrten Sprache an, z.B. mit structs, mit denen man die Eigenschaften eines Objekts beschreiben kann, die man anschliessend bequem in einem Eigenschaftenfenster setzen kann, z.B. einen BaseActor, einer Schwierigkeitsstufe und Tageszeit. Man kann die structs auch in einen Array nehmen, dann werden einzelne Speicherplätze davon zufällig ermittelt. Elegant.

    Das Debug-Feature gehe ich jetzt gleich austesten, ob man das mit kaputten Workshops wie Somerville verwenden kann, die bereits falsch initialisiert wurden . Es ist tatsächlich so, dass es passieren aknn, dass beliebige Workshops nicht richtig registriert werden, worauf dann kleine bis grobe Bugs auftauchen. Sowas kann in Vanilla passieren, aber Mods verschärfen das, gerade solche, die Worldspace-Zellen anfassen oder andere, die einen Keller-Workshop beinhalten, der mit dem Parent verlinkt sind. Wenn da etwa das Location-Flag auf einer Zelle weg oder geändert ist, kann das schon reichen, um einen Workshop zu schrotten. Möglicherweise gehen sogar bereits funktionierende Workshops an einem anderen Ort kaputt, wenn ein neuer hinzukommt, der nicht richtig konfiguriert ist.

    Habe aber auch noch ein anderes hübsches Feature meines Siedlungs-Mods zu testen und zwar craftbare Klamotten-Pakete für Siedler, die ungefähr soviel Material verbrauchen, wie realistisch ist. Im Moment teste ich es gerade mit BoS-Klamotten verschiedener Stile: Soldat, Techniker, Scribe, Pilot, Officer, PA-Soldat. Die Pakete kann man craften und einem Siedler zustecken, der dieses Outfit anzieht. Das Outfit besteht aus gelevelten Listen von Klamotten eines Stils, das beinhaltet auch Brillen, Kopfbedeckungen, usw.
    Ist ja okay, hier und da mal einen Siedler von Hand auszurüsten, aber das artet in Arbeit aus, wenn es mehr sind.

    Edit
    Ziemlich geil, es kann tatsächlich einen bereits freigeschalteten, aber falsch initialisierten Workshop debuggen. Vorher konnte ich beim Leuchtturm keine Siedler per Sender rufen, keine aus einem andeen Workshop zuweisen und keine Karawanen dahin senden. Dahin gesprungen und es hat sofort alles funktioniert.
    Somervile bliebt weiterhin kaputt, da funzten eigentlich alle oben genannten Dinge und ich konnte auch Siedler zuweisen, aber die bewegen sich da nicht richtig, was alles auf ein kaputtes Navmesh hindeutet. jetzt reisse ich da tatsächlich mal testweise die Zelle aus Settlement Expansion und Rebuilt Series Prewar Hosues raus.

    Und sehr geil, das mit den craftbaren Outfits hat auf Anhieb geklappt, ein Paket craften, einem Siedler zuschieben und schon steht er voll bekleidet in neuem Outfit da Jetzt kann ich endlich beim Listening Post Bravo Gas geben und ihn in eine BoS-Outcast-Siedlung verwandeln.

  10. #790
    Not my president Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.064
    Gamer IDs

    Gamertag: PixelMurder

    Standard

    Schon geil, mein Siedlungsoverhaul wird immer besser. Da das mit den zusteckbaren Klamotten hervorragend klappte, habe ich bisher gleich dreissig Stile eingebaut: Bartender, Barmaid, Doctor, Wache, Provisioner, Söldner, Raider, Raider Bitch, Fischer, Farmer, Techniker, Arbeiter, .... Die ganzen Ränge der BoS von Initiate bis Paladin mit PA und MG hatte ich schon.

    Dazu passend habe ich auch noch die Segnungen der sogenannten Static Collections entdeckt. Man kann im CK im Render-Fenster einfach ein paar Objekte hübsch platzieren, dann diese alle markieren und mit der rechten Maustaste zu einer Collection vereinen, die man anschliessend auch craften und scrappen kann. Siehe Screenshot, Fischverkäuferin(Resultat meines Klamotten-Craft-Objekts) und Fischverkaufsstand Ausserdem war mein erstes Experiment der Bürotisch eines BoS-Offiziers. Ohne Mods geht so ein Tisch eigentlich gar nicht. Die Flagge auf dem Tisch ist etwa eine grosse skalierte Flagge und auch die Fische haben eine skalierte Grösse, was leider zumindest mit Gamepad nicht mit Place Everywehre ingame möglich ist.
    Übrigens sind sonst allw Fisch-Meshes aus Vanilla oder Far Harbor, nur mit besseren Texturen natürlich.

    Hat allerdings den Nachteil, dass man auch wirklich nur statische Objekte verwenden kann, also keine Aktivatoren, Container, Idle Marker oder generell bewegliche Dinge, eigentlich gar nichts, was ein Script tragen kann.
    Z.B. ist die Kasse im Screenshot aus einem Mod, dafür habe ich einfach den Platz auf dem Tisch freigelassen und sie anschliessend gecraftet und darauf platziert. Allerdings kann man auch den Pfad zu einer Kasse als Container in ein neus Static kopieren, dann ist das einfach eine Kasse ohne Container-Funktion, was eigentlich auch ausreicht.

    Ein weiterer Nachteil ist der, dass das Resultat der Verschmelzung nicht gut platzierbar ist, entweder möchte es sich 30 Zentimeter über Boden oder bis zu den Fischen darin steckend positionieren. Man kann es bisher unter keinen Umständen richtig platzieren. Okay, es gibt auch noch Keywords, die die Positionierung von Objekten steuern können, oder vielleicht gibt es auch noch Tweaks, die man an den Static Collections machen kann. Aber für den privaten Gebrauch reicht das eigentlich aus, im Prinzip kann ich auch eine erhöhte Hütte bauen, ich kann ja einen Boden auf die richtige Höhe unter dem Tisch legen. Könnte mir übrigens vorstellen, dass ein solcher Mod mit zwanzig hübschen Tischen ziemlich viel Endorsements kriegen würde, nur mit Vanilla-Asssets. Okay, Northland Diggers hat sehr hübsche Werkbänke und andere haben hübschere Verkaufsstände, aber dieser Fischstand ist schon ziemlich geil, wenn er mit einem Homemaker-Verkausmarker kombiniert wird.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	bandicam-2017-05-14-14-37-38-460.jpg 
Hits:	15 
Größe:	90,0 KB 
ID:	22790   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-05-14-18-16-23-234.jpg 
Hits:	18 
Größe:	182,7 KB 
ID:	22791   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-05-14-18-55-04-724.jpg 
Hits:	19 
Größe:	183,1 KB 
ID:	22792   Klicke auf die Grafik für eine größere Ansicht 

Name:	Fallout4-2017-05-14-19-02-25-091.jpg 
Hits:	15 
Größe:	172,5 KB 
ID:	22793  

Seite 79 von 82 ErsteErste ... 29697778798081 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •