Jump to content

JustChill

Premium Member
  • Posts

    284
  • Joined

  • Last visited

Posts posted by JustChill

  1. Also be aware that PositionCell and PositionWorld use radians for the rotation value:

    [reference.]PositionCell x,y,z, zRot, CellID

    So "zRot" does not work with a simple "GetAngle" function, if you want to move something dynamically.

    float xCoord
    float yCoord
    float zCoord
    float zRot
    ref rToMove
    ref rTarget
    ref rRefCurCell
     
    Let rToMove := ;=> A reference you want to move.
    Let rTarget := ;=> A possibly dynamic thing where you want to move the reference above.
    Let xCoord := rTarget.GetPOS X
    Let yCoord := rTarget.GetPOS Y
    Let zCoord := rTarget.GetPOS Z
    Let zRot := rTarget.GetAngle Z
    Let zRot *= 0.01745 ;=> To convert it to radians for the Postion-function
    rTarget.Disable
    if rTarget.IsInInterior
      Let rRefCurCell := rTarget.GetParentCell
      rToMove.PositionCell xCoord, yCoord, zCoord, zRot, rRefCurCell
    else
      Let rRefCurCell := rTarget.GetParentWorldspace
      rToMove.PositionWorld xCoord, yCoord, zCoord, zRot, rRefCurCell
    endif
    

    This script merely replaces the rTarget reference with the rToMove reference.

  2. That would be actually pretty easy to do.

     

    Scan the current cell for all objects and filter through them.

    If it is something that can be picked up (ammunition, weapon, flora) simply activate it.

    Only downside would be that you hear tons of "pickup"-sounds at once. XD

     

    Also the solution I am thinking about, simply won't have any animation of objects flying to the player.

    They simply land in the player's inventory.

  3. Hey there they should function perfectly fine.

    I made a tiny box on top of a house to add a key, while the regular box is pretty big this one was considered as cheat or easter egg to get into the house early.

    So I made it very, very, very, tiny and well hidden. ^^

     

    When it comes to the scale of other objects it depends... I am not at the GECK right now, but the base form of creatures has a built-in scale value.

    You can change that value directly in the base form, but this will affect all references of that creature.

     

    If container have such a scale function in the base form either, it will also affect all references of that container.

     

    HOWEVER, as you say you use it in the render window, then this is actually the scale of the placed reference. It should NOT affect the base form.

    So all other references of that container should still have regular size.

  4. Actually, that is my point, to make all fiends non-hostile. My follower is a Great Khan, and his companion perk is to calm the fiends, since Khans sell to the Fiends. So his script is working properly when he's hired, the fiends are behaving as intended. The trouble I'm having is when he is fired, I'm not sure how to properly remove that perk so things go back to normal.

    Ah, thanks for the clarification. That's a pretty intense follower then. ^^

     

    In that case

    SetEnemy FiendsFactionNV PlayerFaction 1 1

    should be what you need.

     

    This will set the fiends to "neutral", but as they should have other traits (aggressive I guess), the neutral should be overwritten.

    If you want to be on the sure side however, you can fairly use

    SetEnemy FiendsFactionNV PlayerFaction

    as that will turn them hostile again for good.

     

    SetAlly befriends therefore

    SetAlly FiendsFactionNV PlayerFaction 0 0

    would not work.

    As they would still stay friendly, towards the player. Just not a "friend" in the case that they come to the players aid in combat.

     

     

    That's how the animal friend perk works by the way!

     

    Setally AnimalFriendFaction PlayerFaction

    --> This is rank 1 of the friendship perk.

     

    SetAlly AnimalFriendFaction PlayerFaction 1 1

    --> This is rank 2 of the friendship perk.

  5. Hey there!

     

    Your command affects the whole "FiendsFactionNV". So not only your hire will be friendly, but also all other fiends in that faction.

     

    It would be better to create an own faction for your mod and simply add your hire into that faction. Set that faction to be a friend of the player.

    "SetAlly" is savegame baked so it's enough to use that command once, or even set up your own faction in a good relation to the player.

    When you unhire the person, simply remove it from that faction again and it should fall back into old behaviour.

     

    Hope this helped a bit. :)

     

    Cheers

  6. Alright... So interestingly, they don't load up hostile upon start when all the creatures are added into the list in

    Menu Mode 4

    and then added into the respective animal friend faction.

     

    However, as that's the main menu it's not possible to gather variables (from a savegame) that change the faction of just some specific creatures.

     

    So I assume that the change of faction is performed at a point upon loading a recently started game, where the script fails to do so.

    Funnily reloading the very same save once more fixes it.

     

    So one attempt would be to make the mod static (creatures are added to faction upon main menu) or to find a method to apply faction changes while loading a save, as otherwise it seems they do not get applied. :(

     

    Even more weird the Nightstalkers load up as allies but then turn hostile. But having them being corrected upon reloading is even weirder. oO

  7. So I went back into this whole thing with factions...

    This time my approach is to have form lists which contain the respective base forms and use SetBaseFactionRank as before.

     

     

    HOWEVER, it turns out that starting a game and then loading a savegame where the player is in fron of dynamic factions seems not to be a good idea.

    As upon loading these turn out hostile, even if the player has the correct perk.

     

     

    scn DHMoperationalSetFactionsScript
    
    short sAnimalListCountOP
    short sAnimalListIndexOP
    ref rAnimalListFormOP
    short sEvaluateAllyEnemy
    
    Begin Function{sEvaluateAllyEnemy}
        if sEvaluateAllyEnemy
            if Player.HasPerk DHMAnimalFriend
                SetEnemy PlayerFaction DHMMammalFriendFaction 1 1
            endif
            if Player.HasPerk DHMReptileFriend
                SetEnemy PlayerFaction DHMReptileFriendFaction 1 1
            endif
            if Player.HasPerk DHMInsectFriend
                SetEnemy PlayerFaction DHMInsectFriendFaction 1 1
            endif
            if Player.HasPerk DHMAbomiFriend
                SetEnemy PlayerFaction DHMAbomiFriendFaction 1 1
            endif
        endif
    
        if DHMMCMQuest.DHMAlsoBosses
            Let sAnimalListCountOP := ListGetCount DHMMammalBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMMammalBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMMammalFriendFaction 0 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            Let sAnimalListCountOP := ListGetCount DHMGeckoBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMGeckoBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMReptileFriendFaction 0 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            Let sAnimalListCountOP := ListGetCount DHMArthopodBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMArthopodBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMInsectFriendFaction 0 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            Let sAnimalListCountOP := ListGetCount DHMAbominationBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMAbominationBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
        else
            Let sAnimalListCountOP := ListGetCount DHMMammalBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMMammalBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMMammalFriendFaction -1 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            Let sAnimalListCountOP := ListGetCount DHMGeckoBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMGeckoBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMReptileFriendFaction -1 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            Let sAnimalListCountOP := ListGetCount DHMArthopodBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMArthopodBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMInsectFriendFaction -1 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            Let sAnimalListCountOP := ListGetCount DHMAbominationBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMAbominationBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
        endif
        Let sAnimalListIndexOP := 0
        if DHMMCMQuest.DHMAlsoCyber
            Let sAnimalListCountOP := ListGetCount DHMCyberdogListDlcOWB
            if sAnimalListCountOP
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMCyberdogListDlcOWB sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMMammalFriendFaction 0 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            endif
            Let sAnimalListIndexOP := 0
            if DHMMCMQuest.DHMAlsoBosses
                Let sAnimalListCountOP := ListGetCount DHMCyberdogBossListDlcOWB
                if sAnimalListCountOP
                    While sAnimalListIndexOP < sAnimalListCountOP
                        Let rAnimalListFormOP := ListGetNthForm DHMCyberdogBossListDlcOWB sAnimalListIndexOP
                        if isFormValid rAnimalListFormOP
                            SetBaseFactionRank DHMMammalFriendFaction 0 rAnimalListFormOP
                        endif
                        Let sAnimalListIndexOP += 1
                    Loop
                endif
            else
                Let sAnimalListCountOP := ListGetCount DHMCyberdogBossListDlcOWB
                if sAnimalListCountOP
                    While sAnimalListIndexOP < sAnimalListCountOP
                        Let rAnimalListFormOP := ListGetNthForm DHMCyberdogBossListDlcOWB sAnimalListIndexOP
                        if isFormValid rAnimalListFormOP
                            SetBaseFactionRank DHMMammalFriendFaction -1 rAnimalListFormOP
                        endif
                        Let sAnimalListIndexOP += 1
                    Loop
                endif
            endif
        else
            Let sAnimalListCountOP := ListGetCount DHMCyberdogListDlcOWB
            if sAnimalListCountOP
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMCyberdogListDlcOWB sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMMammalFriendFaction -1 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            endif
            Let sAnimalListIndexOP := 0
            Let sAnimalListCountOP := ListGetCount DHMCyberdogBossListDlcOWB
            if sAnimalListCountOP
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMCyberdogBossListDlcOWB sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMMammalFriendFaction -1 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            endif
        endif
        Let sAnimalListIndexOP := 0
        if DHMMCMQuest.DHMAddDClawsToReptile
            Let sAnimalListCountOP := ListGetCount DHMDeathClawList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMDeathClawList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMReptileFriendFaction 0 rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP            
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            if DHMMCMQuest.DHMAlsoBosses
                Let sAnimalListCountOP := ListGetCount DHMDeathClawBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMDeathClawBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMReptileFriendFaction 0 rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP            
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            else
                Let sAnimalListCountOP := ListGetCount DHMDeathClawBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMDeathClawBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMReptileFriendFaction -1 rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP            
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            endif
        else
            Let sAnimalListCountOP := ListGetCount DHMDeathClawList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMDeathClawList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                    SetBaseFactionRank DHMReptileFriendFaction -1 rAnimalListFormOP            
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            if DHMMCMQuest.DHMAlsoBosses
                Let sAnimalListCountOP := ListGetCount DHMDeathClawBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMDeathClawBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                        SetBaseFactionRank DHMReptileFriendFaction -1 rAnimalListFormOP            
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            else
                Let sAnimalListCountOP := ListGetCount DHMDeathClawBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMDeathClawBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                        SetBaseFactionRank DHMReptileFriendFaction -1 rAnimalListFormOP            
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            endif
        endif
        Let sAnimalListIndexOP := 0
        if DHMMCMQuest.DHMAddGhoulToAbom
            Let sAnimalListCountOP := ListGetCount DHMGhoulList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMGhoulList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            if DHMMCMQuest.DHMAlsoBosses
                Let sAnimalListCountOP := ListGetCount DHMGhoulBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMGhoulBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            else
                Let sAnimalListCountOP := ListGetCount DHMGhoulBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMGhoulBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            endif
        else
            Let sAnimalListCountOP := ListGetCount DHMGhoulList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMGhoulList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            Let sAnimalListCountOP := ListGetCount DHMGhoulBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMGhoulBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
        endif
        Let sAnimalListIndexOP := 0
        if DHMMCMQuest.DHMAddSuperMuToAbom
            Let sAnimalListCountOP := ListGetCount DHMSupermutantList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMSupermutantList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            if DHMMCMQuest.DHMAlsoBosses
                Let sAnimalListCountOP := ListGetCount DHMSupermutantBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMSupermutantBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            else
                Let sAnimalListCountOP := ListGetCount DHMSupermutantBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMSupermutantBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            endif
        else
            Let sAnimalListCountOP := ListGetCount DHMSupermutantList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMSupermutantList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            Let sAnimalListCountOP := ListGetCount DHMSupermutantBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMSupermutantBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
        endif
        Let sAnimalListIndexOP := 0
        if DHMMCMQuest.DHMAddNightkinToAbom
            Let sAnimalListCountOP := ListGetCount DHMNightkinList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMNightkinList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            if DHMMCMQuest.DHMAlsoBosses
                Let sAnimalListCountOP := ListGetCount DHMNightkinBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMNightkinBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            else
                Let sAnimalListCountOP := ListGetCount DHMNightkinBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMNightkinBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            endif
        else
            Let sAnimalListCountOP := ListGetCount DHMNightkinList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMNightkinList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            Let sAnimalListCountOP := ListGetCount DHMNightkinBossList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMNightkinBossList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                endif
                Let sAnimalListIndexOP += 1
            Loop
        endif
        Let sAnimalListIndexOP := 0
        if DHMMCMQuest.DHMAddGhostPeopToAbomDLC
            Let sAnimalListCountOP := ListGetCount DHMGhostPeopleListDlcDM
            if sAnimalListCountOP
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMGhostPeopleListDlcDM sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
                Let sAnimalListIndexOP := 0
            endif
            Let sAnimalListIndexOP := 0
            if DHMMCMQuest.DHMAlsoBosses
                Let sAnimalListCountOP := ListGetCount DHMGhostPeopleBossListDlcDM
                if sAnimalListCountOP
                    While sAnimalListIndexOP < sAnimalListCountOP
                        Let rAnimalListFormOP := ListGetNthForm DHMGhostPeopleBossListDlcDM sAnimalListIndexOP
                        if isFormValid rAnimalListFormOP
                            SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                        endif
                        Let sAnimalListIndexOP += 1
                    Loop
                endif
            else
                Let sAnimalListCountOP := ListGetCount DHMGhostPeopleBossListDlcDM
                if sAnimalListCountOP
                    While sAnimalListIndexOP < sAnimalListCountOP
                        Let rAnimalListFormOP := ListGetNthForm DHMGhostPeopleBossListDlcDM sAnimalListIndexOP
                        if isFormValid rAnimalListFormOP
                            SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                        endif
                        Let sAnimalListIndexOP += 1
                    Loop
                endif
            endif
        else
            Let sAnimalListCountOP := ListGetCount DHMGhostPeopleListDlcDM
            if sAnimalListCountOP
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMGhostPeopleListDlcDM sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
                Let sAnimalListIndexOP := 0
                Let sAnimalListCountOP := ListGetCount DHMGhostPeopleBossListDlcDM
                if sAnimalListCountOP
                    While sAnimalListIndexOP < sAnimalListCountOP
                        Let rAnimalListFormOP := ListGetNthForm DHMGhostPeopleBossListDlcDM sAnimalListIndexOP
                        if isFormValid rAnimalListFormOP
                            SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                        endif
                        Let sAnimalListIndexOP += 1
                    Loop
                endif
            endif
        endif
        Let sAnimalListIndexOP := 0
        if DHMMCMQuest.DHMAddNStalkerToMammal
            Let sAnimalListCountOP := ListGetCount DHMNightStalkerList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMNightStalkerList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMMammalFriendFaction 0 rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP            
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            if DHMMCMQuest.DHMAlsoBosses
                Let sAnimalListCountOP := ListGetCount DHMNightStalkerBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMNightStalkerBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMMammalFriendFaction 0 rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP            
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            else
                Let sAnimalListCountOP := ListGetCount DHMNightStalkerBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMNightStalkerBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMMammalFriendFaction -1 rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP            
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            endif
        else
            Let sAnimalListCountOP := ListGetCount DHMNightStalkerList
            While sAnimalListIndexOP < sAnimalListCountOP
                Let rAnimalListFormOP := ListGetNthForm DHMNightStalkerList sAnimalListIndexOP
                if isFormValid rAnimalListFormOP
                    SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                    SetBaseFactionRank DHMMammalFriendFaction -1 rAnimalListFormOP            
                endif
                Let sAnimalListIndexOP += 1
            Loop
            Let sAnimalListIndexOP := 0
            if DHMMCMQuest.DHMAlsoBosses
                Let sAnimalListCountOP := ListGetCount DHMNightStalkerBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMNightStalkerBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction 0 rAnimalListFormOP
                        SetBaseFactionRank DHMMammalFriendFaction -1 rAnimalListFormOP            
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            else
                Let sAnimalListCountOP := ListGetCount DHMNightStalkerBossList
                While sAnimalListIndexOP < sAnimalListCountOP
                    Let rAnimalListFormOP := ListGetNthForm DHMNightStalkerBossList sAnimalListIndexOP
                    if isFormValid rAnimalListFormOP
                        SetBaseFactionRank DHMAbomiFriendFaction -1 rAnimalListFormOP
                        SetBaseFactionRank DHMMammalFriendFaction -1 rAnimalListFormOP            
                    endif
                    Let sAnimalListIndexOP += 1
                Loop
            endif
        endif
        Let sAnimalListIndexOP := 0
    
        if sEvaluateAllyEnemy
            if Player.GetPerkRank DHMAnimalFriend == 1
                SetAlly PlayerFaction DHMMammalFriendFaction
            elseif Player.GetPerkRank DHMAnimalFriend == 2
                SetAlly PlayerFaction DHMMammalFriendFaction 1 1
            endif
            if Player.GetPerkRank DHMReptileFriend == 1
                SetAlly PlayerFaction DHMReptileFriendFaction
            elseif Player.GetPerkRank DHMReptileFriend == 2
                SetAlly PlayerFaction DHMReptileFriendFaction 1 1
            endif
            if Player.GetPerkRank DHMInsectFriend == 1
                SetAlly PlayerFaction DHMInsectFriendFaction
            elseif Player.GetPerkRank DHMInsectFriend == 2
                SetAlly PlayerFaction DHMInsectFriendFaction 1 1
            endif
            if Player.GetPerkRank DHMAbomiFriend == 1
                SetAlly PlayerFaction DHMAbomiFriendFaction
            elseif Player.GetPerkRank DHMAbomiFriend == 2
                SetAlly PlayerFaction DHMAbomiFriendFaction 1 1
            endif
        endif
    End

     

     

    This function evaluates the faction. It's working normally, except when loading a game after booting the game, as said.

    Funnily, when loading a game again the factions get correct.

     

    But this doesn't sound like a proper solution... "Load the game once more to fix faction issues". oO

     

     

    The funny thing is, the boss (Den Mother --> Nightstalker) in that cave is always correct, but the spawned ones seem to have issues with getting grouped into the correct faction initially.

    While they don't when the save is loaded again.

     

     

     

     

    Is it possible that the script is too heavy?

    The function only get triggered upon loading, or when changing settings in MCM.

    And these spawned Nightstalkers always seem to have issues realizing that they should not be hostile. Somehow they do not want to get into the faction (or out of it) easily. :/

  8. What has the Creation Kit to do with it? This is the Oblivion-hub.

    I am using the Construction Set Extender and even with that one, there is no baked in option to create BSA-archives.

     

    For Oblivion, I mostly use BSAcmd or BSAopt.

     

    BSA Commander is uploaded on the Oblivion Nexus and works very well with it, but may appear a bit clunky.

     

    BSA Optimizer is uploaded on the Skyrim Nexus, but works well for Oblivion too and is a bit more intuitive than the BSA Commander.

    Even though being a bit more intiuitive is just my subjective opinion.

  9. Hey there,

     

    I recently thought of continuing on Nehrim by making a fish mod, but the resources from Sjors Boomschors appear to be gone from Nexus. :sad:

     

    SB Resource - Saltwater Fish

    and

    SB Resource - Clear Stream Fish

    don't exist anymore, yet there are other mods on Nexus that still use these resources.

    Would it be allowed to get them from there or can't these fish resources be used anymore?

     

    This mod for example uses the resources.

    Would it be enough if I write into the credits, that I got them from there and the originals come from Sjors Boomschors?

     

    Kindest regards,

    JC

  10. Hey,

    as of recently entering the final phase of my work on Nehrim, I also changed the script of the socket of the statue in Castle Darlan so it can be re-created.

    Aside of that, I either changed the original appearance as I sometimes found a unconscious player copy laying around on the socket. oO

     

    This appeared to work very well:

     

     

    SCN BurgDarlanStatueScript
    
    ref playerstatue
    ref UNFplayerstatueOLD
    Short StatueOnce
    short Button
    ref rUNFpcEquTorch
    ref rUNFinvRef
    
    Begin OnActivate
        if ( StatueOnce == 2 ) && ( IsActionRef player == 1 ) && ( GetPCIsSex Male )
            PlaySound "UIMenuPrevNext"
            MessageBoxEx "Statue of the Hero of Darlan: He freed Castle Darlan and the village of Mortram in the year %.0f of the Third Era after Treomar.%r%r%rThe stonemason is motivated and would like to re-create your statue at any time.%rDo you want to get your statue re-created?|Yes|No"  VarStatueYear
            Let StatueOnce := 3
        elseif ( StatueOnce == 2 ) && ( IsActionRef player == 1 ) && ( GetPCIsSex Female )
            PlaySound "UIMenuPrevNext"
            MessageBoxEx "Statue of the Heroine of Darlan: She freed Castle Darlan and the village of Mortram in the year %.0f of the Third Era after Treomar.%r%r%rThe stonemason is motivated and would like to re-create your statue at any time.%rDo you want to get your statue re-created?|Yes|No",  VarStatueYear
            Let StatueOnce := 3
        else
            PlaySound "UIMenuCancel"
            Return
        endif
    End
    
    Begin GameMode
    if StatueOnce == 3
        Let Button := GetButtonPressed
        if Button == 0
            Let StatueOnce := 0
            Message "Should be called stone master not stonemason!"
        elseif Button == 1
            Let StatueOnce := 2    
        endif
    elseif StatueOnce == 2 && playerStatue.IsIdlePlaying == 0    ;=> Failsafes for stone, no idle and wrong placement.
        if playerstatue.GetPos Z < 10900
            playerStatue.moveto DarlanStatueMarkerRef
            if playerstatue.GetCurrentPackage == PlayerStatuePosePackage
            else
                playerStatue.AddScriptPackage PlayerStatuePosePackage
            endif
        endif
        if playerStatue.HasEffectShader effectStone
        else
            playerStatue.pms effectstone
        endif
        playerstatue.PickIdle StatueIdle
    elseif StatueOnce == 1 && playerstatue.HasEffectShader effectStone == 0
        playerstatue.pms effectStone    ;=> To ensure the effectShader is applied ASAP after creating the copy.
    elseif StatueOnce == 1 && playerStatue.IsWeaponOut
        playerStatue.setunconscious 1
        playerStatue.AddScriptPackage PlayerStatuePosePackage
        Let StatueOnce := 2
    elseif (StatueOnce == 0 && GetStage MQ18 > 49 && Player.IsRidingHorse == 0 && Player.GetCurrentAIPackage != 22 && Player.GetCurrentAIPackage != 23)
        Let rUNFpcEquTorch := Player.GetEquippedObject 14 ;=> We MUST NOT create a statue, when the player is interacting with a horse!!!!!!!
        if rUNFpcEquTorch
            Player.UnequipItemSilent rUNFpcEquTorch    ;=> So no torches will be transfered to the actor copy.
        endif                                        ;=> Prevents the weapon & torch in one hand bug.
            
        ForEach rUNFinvRef <- PlayerRef            
            if rUNFinvRef.IsEquipped                    ;=> We move ALL unequipped items into safety.
            else                                        ;=> CreateFullActorCopy also copies the whole inventory and creates new
                rUNFinvRef.RemoveMeIR UnfPCItemSaferREF    ;=> BaseForms out of the item (safed into the savegame).
            endif                                        
        Loop
            
        if playerstatue                ;=> Previously created is now disabled and later removed.
            playerStatue.Disable
            Let UNFplayerstatueOLD := playerstatue
        endif
            
        Let playerStatue := player.CreateFullActorCopy
    
        playerStatue.moveto DarlanStatueMarkerRef
        playerStatue.setalert 1
        playerStatue.setdestroyed 1        ; so you can't activate player;
        playerStatue.setscale 1.8
        playerStatue.setav speed 0        ; so you can't move it around
        playerStatue.setghost 1
        UnfPCItemSaferREF.RemoveAllItems Player        ;=> I WANT MY ITEMS BACK!
        Let StatueOnce := 1
        if rUNFpcEquTorch
            Player.EquipItemSilent rUNFpcEquTorch
        endif
        if UNFplayerstatueOLD
            UNFplayerstatueOLD.DeleteFullActorCopy    ;=> Acts as return, therefore will be done at the end.
        endif                                        ;=> Old statue is removed from the savegame.
    endif
    End

     

     

    I just had to add the new container for saving the items of the player, but removing them before creating a full actor copy, won't make so many useless copies fo these items.

  11. I still use Audacity for cutting audio, etc as i like how simple it is and it's for free.

     

    But I never hear audio ingame, when saving it with Audacity. So I have to convert it again afterwards with VLC Media Player.

    As I said, maybe my "LAME.dll" has issues or the MP3Tag format is weird.

     

    So if someone has similar issues, using VLC Media Player to convert the MP3 again helps (at least in my case). ;)

  12. Voice Lines need a specific MP3 format.

     

    I use Audacity too, but maybe my "LAME.dll" for Audacity's MP3 conversion doesn't work properly.

    I always use the right format for voice lines "64 kbit/s, 44 Hz, Mono" but it never works when I save them with Audacity.

    So I finally use VLC Player to convert them into working MP3s with the very same format.

     

    Could be the MP3 tags, as Audacity always ask me which Tag format I would prefer, while VLC simply converts the file.

  13. Hey, thanks for the details.

     

    The only thing where I know it's used in my mods is where I simply took over the script from Nehrim Expanded. ^^

     

        ForEach NMOactiveSpellEffectsPlayer <- (Player.GetActiveEffectCodes)   
            let NMOeffectIndex := NMOactiveSpellEffectsPlayer["value"]   
            if (MagicEffectUsesCreatureC NMOeffectIndex)   
                let NMOeffectKey := NMOactiveSpellEffectsPlayer["key"]       
                let NMOsingleBaseNpcREF := Player.GetNthActiveEffectSummonRef NMOeffectKey
                if NMOSummonedRef1 == 0 && NMOsingleBaseNpcREF
                    if NMOSummonedRef2 == 0 && NMOSummonedRef3
                        Let NMOSummonedRef1 := NMOsingleBaseNpcREF
                    elseif NMOSummonedRef2 != NMOsingleBaseNpcREF && NMOSummonedRef3 != NMOsingleBaseNpcREF
                        Let NMOSummonedRef1 := NMOsingleBaseNpcREF
                    endif
                endif
                if NMOSummonedRef2 == 0 && NMOsingleBaseNpcREF
                    if NMOSummonedRef1 == 0 && NMOSummonedRef3 == 0
                        Let NMOSummonedRef2 := NMOsingleBaseNpcREF
                    elseif NMOSummonedRef1 != NMOsingleBaseNpcREF && NMOSummonedRef3 != NMOsingleBaseNpcREF
                        Let NMOSummonedRef2 := NMOsingleBaseNpcREF
                    endif
                endif
                if NMOSummonedRef3 == 0 && NMOsingleBaseNpcREF
                    if NMOSummonedRef1 == 0 && NMOSummonedRef2 == 0
                        Let NMOSummonedRef3 := NMOsingleBaseNpcREF
                    elseif NMOSummonedRef1 != NMOsingleBaseNpcREF && NMOSummonedRef2 != NMOsingleBaseNpcREF
                        Let NMOSummonedRef3 := NMOsingleBaseNpcREF
                    endif
                endif
                Set NMOsingleBaseNpcREF to 0
            endif
        Loop

     

    This will generate 3 references for the summoned creatures of the player, but I barely knew why or how it works. It just works. ^^

     

     

    So I guess "<-" means that like in your example every item from the container gets translated into the item reference.

    Pretty interesting. :)

  14. "PekChestSortingQUST", but this looks like a questID with that "QUST"-tag. ^^

    Is "State" really a local variable from an object script which you are changing here or is it a quest variable?

     

    I know quest variables are like "hidden" global variables as they can get accessed at any point with the proper syntax.

     

    But there is nowhere a documentation to be found about local variables from object scripts being accessed via "ReferenceID.VarName", so I was wondering. ;)

  15. Use TES5Edit.

     

    After merging, click onto a loaded plugin a context menu with many options appears.

     

    One of these options is "Clean Masters (Remove all unused masters)".

     

    It will then try and remove all masters that are not required. That said it only works, if you really removed ALL the references pointing onto other mods.

    Previously on older xEdit versions, you were allowed to simply remove any master by hand.

    Yet that's flawed as it's easy to forget some references pointing to another mod.

    Therefore this new "Clean Masters"-function is far more reliable.

  16. You are welcome. :smile:

    Dialogue Conditions are still a bit weird to me.

     

    When I enhanced the dialogues of a quest in Nehrim to have dynamic response possibilities

    Dialogue Result Script:
    
    If GetStage <Quest> == 10
    AddTopic QuestTopic1
    AddTopic QuestTopic2
    AddTopic QuestTopic3
    elseif GetStage <Quest> == 11
    AddTopic QuestTopic2
    elseif GetStage <Quest> == 12
    AddTopic QuestTopic2
    AddTopic QuestTopic3
    endif

    This worked for dynamic responses the player can choose from, but the topic then also appeared for another NPC, so I had to add more conditions to it until it was finally just available for the one NPC I wanted to have it.

  17. I recently found something interesting in the "Nehrim.esm" which is the master for the total conversion Nehrim - At Fate's Edge.

     

    And I am not sure if this is actually a thing or just some weird stuff.

    Set DoorReferenceID.HebelBetaetigt to 1

    So... "DoorReferenceID" is the reference name of a door placed in the world space and "HebelBetaetigt" is a local variable in that door script.

    It's accessed here from another object script (the script of the lever / Hebel actually).

     

    I know that quest variables can be accessed by this syntax

    Questname.VarName

    but I never heard about this Object Script thing.

     

    Yet it appears it seemed to work - functionality wise - in the game.

     

    But I wonder if this were able to cause instabilities. I've changed "HebelBetaetigt" to a quest variable now and also changed all instances where "HebelBetaetigt" is used to point to the actual quest variable and not to the one in the Object Script of the door.

     

     

    Still not sure if this was actually necessary?!

     

    Does anyone know if this is actually a save thing to do, accessing variables of Object Scripts in that way?

     

    Cheers

×
×
  • Create New...