Ergebnis 1 bis 10 von 813

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #13
    Not my Fallout Avatar von Boïndil
    Registriert seit
    20.07.2008
    Ort
    Vaullt 101
    Beiträge
    12.122
    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:	128 
Größe:	113,2 KB 
ID:	22765  
    Geändert von Boïndil (20.04.2017 um 20:15 Uhr)
    No mods for Failout 76.

Berechtigungen

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