patch pour mart's mutants mod

Toutes vos idées pour créer des mods.
Répondre
tiwi
Confrère
Messages : 5

patch pour mart's mutants mod

Message par tiwi »

salut a tous,

Eh oui, je joue encore avec fallout 3 dont je trouve l'histoire mieux que le new vegas (trop éloigné de l'esprit de fallout).

Je vous propose un patch pour ce formidable mod qu'est mart's mutants mod (6.2) qui malheureusement crée des plantages vraiment trop réguliers pour être utilisable.

Enfin, ... Je vous filerais un esp quand j'aurais trouvé comment uploader un fichier sur le site...

bien à vous.
tiwi
Confrère
Messages : 5

Re: patch pour mart's mutants mod

Message par tiwi »

bon apparement je n'ai pas la possibilité d'uploader donc je fournirais les script en mode texte et vous modifierez vous-même dans votre geck préféré.
tiwi
Confrère
Messages : 5

Re: patch pour mart's mutants mod

Message par tiwi »

Faudra attendre que je puisse faire ça car pas d'internet chez moi donc en attendant, voilà les scripts concernés:
aMMMzDeathClawNoFlyToken : resurrect on GetDead == 0 block - GameMode remake. (et ça marche, m'en a fait baver celle là)
aMMMzNightPerception : removespell and addspell - add IsSpellTarget conditions + GetEquipped replace GetItemCount for Form list usage.
aMMMzCorpseFlies : ? - add iTimer = -1 to avoid multiples dispel calls ??? What exactly do dispel/removespell ?.
tiwi
Confrère
Messages : 5

Re: patch pour mart's mutants mod

Message par tiwi »

J'ai débusqué un autre problème sur les Tokens:
Un additem TokenA génère:
TokenA.GameMode/TokenA.AddItem/TokenA.GameMode
Les initialisations de Martigen étant dans les "OnAdd", nous obtenons des appels a GameMode avec des variables non initialisées.


Des références retournées par GetCombatTarget ne sont pas testées comme pouvant être nulles.


Ci dessous, vous trouverez les fonctions a modifier qui devraient enlever la plupart des crash.

;####################################################################
scn aMMMzCorpseFliesToken

float iTimer
short iDice
ref rNPC

Begin GameMode
if rNPC == 0
set rNPC to GetContainer
set iTimer to GameDaysPassed + 0.25
endif
if GameDaysPassed >= iTimer
set iDice to (GetRandomPercent / 25) + 1
rNPC.placeatme zMMMzCorpseFly iDice 0 0
removeme
endif
End


;####################################################################
scn aMMMzDeathClawNoFlyToken

ref rNPC
ref rTarget ; <- untested
float z1
float z2
float zDiff

Begin GameMode
if rNPC == 0
set rNPC to GetContainer
set z1 to rNPC.GetPos z
endif

if rNPC.GetDead
removeme
else
set z2 to z1
set z1 to rNPC.GetPos z
set zDiff to z1 - z2
if zDiff > 20
if rNPC.IsInCombat
set rTarget to rNPC.GetCombatTarget
set zDiff to 0
endif
rNPC.moveTo rNPC
if rTarget
rNPC.startcombat rTarget
set rTarget to 0
elseif zDiff
rNPC.resetai
else
rNPC.setalert 1
endif
endif
endif
End

;####################################################################
scn aMMMzGargToken

ref rNPC
ref rTarget

Begin GameMode
if rNPC == 0
set rNPC to GetContainer
if rNPC.GetScale == 1.75
removeme
endif
endif
if rNPC.GetDead == 0 && rNPC.IsInCombat
set rTarget to rNPC.GetCombatTarget
if rTarget && rTarget.GetScale == 1.75 && rTarget.GetDistance rNPC < 500
rTarget.PushActorAway rNPC 25
rNPC.cios zMMMzGargantuanDemolish
endif
else
removeme
endif
End

;####################################################################
scn aMMMzGhoulRaiseCrippleToken

ref rNPC
short iToggle
short iHealth

Begin GameMode
if rNPC == 0
set rNPC to GetContainer
set iToggle to GetRandomPercent + 1
if iToggle < 25
rNPC.modav rightmobilitycondition -100
elseif iToggle < 50
rNPC.modav leftmobilitycondition -100
endif
if ((rNPC.getav energy) - 40) <= 0
rNPC.modav rightmobilitycondition -100
rNPC.modav leftmobilitycondition -100
rNPC.setav aggression 2
rNPC.setav confidence 0
endif
set iHealth to (rNPC.GetAV health) * 0.6
rNPC.damageav health iHealth
endif
set iToggle to iToggle - 1
if iToggle < 0
removeme
endif
End

;####################################################################
scn aMMMzGhoulRaiseToken

ref rNPC
float iTimer
float fHeading
short iType

Begin GameMode
if rNPC == 0
set rNPC to GetContainer
set iTimer to (GetRandomPercent / 2) + 5
set iType to (rNPC.GetBaseAV energy) - 50
endif
set iTimer to iTimer - GetSecondsPassed
if iTimer > 0 || rNPC.GetDistance Player < 1000
return
elseif rNPC.IsLimbGone 0 == 1 || rNPC.IsLimbGone 1 == 1 || rNPC.IsLimbGone 7 == 1 || rNPC.IsLimbGone 10 == 1
removeme
endif
set fHeading to Player.GetHeadingAngle rNPC
if (((90 < fHeading) && (fHeading < 270)) || ((-270 < fHeading) && (fHeading < -90)))
if rNPC.IsLimbGone 3 && rNPC.IsLimbGone 5
if iType == 1
rNPC.placeatme zMMMzGhoulRaiseNA1A 1 0 0
elseif iType == 2
rNPC.placeatme zMMMzGhoulRaiseNA1B 1 0 0
elseif iType == 3
rNPC.placeatme zMMMzGhoulRaiseNA1B1MMM 1 0 0
elseif iType == 4
rNPC.placeatme zMMMzGhoulRaiseNA1B2MMM 1 0 0
elseif iType == 5
rNPC.placeatme zMMMzGhoulRaiseNA1B3MMM 1 0 0
elseif iType == 6
rNPC.placeatme zMMMzGhoulRaiseNA1B4MMM 1 0 0
elseif iType == 7
rNPC.placeatme zMMMzGhoulRaiseNA1B5MMM 1 0 0
elseif iType == 8
rNPC.placeatme zMMMzGhoulRaiseNA1B6MMM 1 0 0
elseif iType == 9
rNPC.placeatme zMMMzGhoulRaiseNA1B7MMM 1 0 0
elseif iType == 10
rNPC.placeatme zMMMzGhoulRaiseNA1B8MMM 1 0 0
elseif iType == 11
rNPC.placeatme zMMMzGhoulRaiseNA1B9MMM 1 0 0
elseif iType == 12
rNPC.placeatme zMMMzGhoulRaiseNA1BAMMM 1 0 0
elseif iType == 13
rNPC.placeatme zMMMzGhoulRaiseNA1BBMMM 1 0 0
elseif iType == 14
rNPC.placeatme zMMMzGhoulRaiseNA1BCMMM 1 0 0
elseif iType == 15
rNPC.placeatme zMMMzGhoulRaiseNA1BDMMM 1 0 0
elseif iType == 16
rNPC.placeatme zMMMzGhoulRaiseNA2A 1 0 0
elseif iType == 17
rNPC.placeatme zMMMzGhoulRaiseNA2B 1 0 0
elseif iType == 18
rNPC.placeatme zMMMzGhoulRaiseNA2B1MMM 1 0 0
elseif iType == 19
rNPC.placeatme zMMMzGhoulRaiseNA2B2MMM 1 0 0
elseif iType == 20
rNPC.placeatme zMMMzGhoulRaiseNA2B3MMM 1 0 0
elseif iType == 21
rNPC.placeatme zMMMzGhoulRaiseNA2B4MMM 1 0 0
endif
elseif rNPC.IsLimbGone 3
if iType == 1
rNPC.placeatme zMMMzGhoulRaiseNL1A 1 0 0
elseif iType == 2
rNPC.placeatme zMMMzGhoulRaiseNL1B 1 0 0
elseif iType == 3
rNPC.placeatme zMMMzGhoulRaiseNL1B1MMM 1 0 0
elseif iType == 4
rNPC.placeatme zMMMzGhoulRaiseNL1B2MMM 1 0 0
elseif iType == 5
rNPC.placeatme zMMMzGhoulRaiseNL1B3MMM 1 0 0
elseif iType == 6
rNPC.placeatme zMMMzGhoulRaiseNL1B4MMM 1 0 0
elseif iType == 7
rNPC.placeatme zMMMzGhoulRaiseNL1B5MMM 1 0 0
elseif iType == 8
rNPC.placeatme zMMMzGhoulRaiseNL1B6MMM 1 0 0
elseif iType == 9
rNPC.placeatme zMMMzGhoulRaiseNL1B7MMM 1 0 0
elseif iType == 10
rNPC.placeatme zMMMzGhoulRaiseNL1B8MMM 1 0 0
elseif iType == 11
rNPC.placeatme zMMMzGhoulRaiseNL1B9MMM 1 0 0
elseif iType == 12
rNPC.placeatme zMMMzGhoulRaiseNL1BAMMM 1 0 0
elseif iType == 13
rNPC.placeatme zMMMzGhoulRaiseNL1BBMMM 1 0 0
elseif iType == 14
rNPC.placeatme zMMMzGhoulRaiseNL1BCMMM 1 0 0
elseif iType == 15
rNPC.placeatme zMMMzGhoulRaiseNL1BDMMM 1 0 0
elseif iType == 16
rNPC.placeatme zMMMzGhoulRaiseNL2A 1 0 0
elseif iType == 17
rNPC.placeatme zMMMzGhoulRaiseNL2B 1 0 0
elseif iType == 18
rNPC.placeatme zMMMzGhoulRaiseNL2B1MMM 1 0 0
elseif iType == 19
rNPC.placeatme zMMMzGhoulRaiseNL2B2MMM 1 0 0
elseif iType == 20
rNPC.placeatme zMMMzGhoulRaiseNL2B3MMM 1 0 0
elseif iType == 21
rNPC.placeatme zMMMzGhoulRaiseNL2B4MMM 1 0 0
endif
elseif rNPC.IsLimbGone 5
if iType == 1
rNPC.placeatme zMMMzGhoulRaiseNR1A 1 0 0
elseif iType == 2
rNPC.placeatme zMMMzGhoulRaiseNR1B 1 0 0
elseif iType == 3
rNPC.placeatme zMMMzGhoulRaiseNR1B1MMM 1 0 0
elseif iType == 4
rNPC.placeatme zMMMzGhoulRaiseNR1B2MMM 1 0 0
elseif iType == 5
rNPC.placeatme zMMMzGhoulRaiseNR1B3MMM 1 0 0
elseif iType == 6
rNPC.placeatme zMMMzGhoulRaiseNR1B4MMM 1 0 0
elseif iType == 7
rNPC.placeatme zMMMzGhoulRaiseNR1B5MMM 1 0 0
elseif iType == 8
rNPC.placeatme zMMMzGhoulRaiseNR1B6MMM 1 0 0
elseif iType == 9
rNPC.placeatme zMMMzGhoulRaiseNR1B7MMM 1 0 0
elseif iType == 10
rNPC.placeatme zMMMzGhoulRaiseNR1B8MMM 1 0 0
elseif iType == 11
rNPC.placeatme zMMMzGhoulRaiseNR1B9MMM 1 0 0
elseif iType == 12
rNPC.placeatme zMMMzGhoulRaiseNR1BAMMM 1 0 0
elseif iType == 13
rNPC.placeatme zMMMzGhoulRaiseNR1BBMMM 1 0 0
elseif iType == 14
rNPC.placeatme zMMMzGhoulRaiseNR1BCMMM 1 0 0
elseif iType == 15
rNPC.placeatme zMMMzGhoulRaiseNR1BDMMM 1 0 0
elseif iType == 16
rNPC.placeatme zMMMzGhoulRaiseNR2A 1 0 0
elseif iType == 17
rNPC.placeatme zMMMzGhoulRaiseNR2B 1 0 0
elseif iType == 18
rNPC.placeatme zMMMzGhoulRaiseNR2B1MMM 1 0 0
elseif iType == 19
rNPC.placeatme zMMMzGhoulRaiseNR2B2MMM 1 0 0
elseif iType == 20
rNPC.placeatme zMMMzGhoulRaiseNR2B3MMM 1 0 0
elseif iType == 21
rNPC.placeatme zMMMzGhoulRaiseNR2B4MMM 1 0 0
endif
else
if iType == 1
rNPC.placeatme zMMMzGhoulRaise1A 1 0 0
elseif iType == 2
rNPC.placeatme zMMMzGhoulRaise1B 1 0 0
elseif iType == 3
rNPC.placeatme zMMMzGhoulRaise1B1MMM 1 0 0
elseif iType == 4
rNPC.placeatme zMMMzGhoulRaise1B2MMM 1 0 0
elseif iType == 5
rNPC.placeatme zMMMzGhoulRaise1B3MMM 1 0 0
elseif iType == 6
rNPC.placeatme zMMMzGhoulRaise1B4MMM 1 0 0
elseif iType == 7
rNPC.placeatme zMMMzGhoulRaise1B5MMM 1 0 0
elseif iType == 8
rNPC.placeatme zMMMzGhoulRaise1B6MMM 1 0 0
elseif iType == 9
rNPC.placeatme zMMMzGhoulRaise1B7MMM 1 0 0
elseif iType == 10
rNPC.placeatme zMMMzGhoulRaise1B8MMM 1 0 0
elseif iType == 11
rNPC.placeatme zMMMzGhoulRaise1B9MMM 1 0 0
elseif iType == 12
rNPC.placeatme zMMMzGhoulRaise1BAMMM 1 0 0
elseif iType == 13
rNPC.placeatme zMMMzGhoulRaise1BBMMM 1 0 0
elseif iType == 14
rNPC.placeatme zMMMzGhoulRaise1BCMMM 1 0 0
elseif iType == 15
rNPC.placeatme zMMMzGhoulRaise1BDMMM 1 0 0
elseif iType == 16
rNPC.placeatme zMMMzGhoulRaise2A 1 0 0
elseif iType == 17
rNPC.placeatme zMMMzGhoulRaise2B 1 0 0
elseif iType == 18
rNPC.placeatme zMMMzGhoulRaise2B1MMM 1 0 0
elseif iType == 19
rNPC.placeatme zMMMzGhoulRaise2B2MMM 1 0 0
elseif iType == 20
rNPC.placeatme zMMMzGhoulRaise2B3MMM 1 0 0
elseif iType == 21
rNPC.placeatme zMMMzGhoulRaise2B4MMM 1 0 0
endif
endif
rNPC.disable
rNPC.markfordelete
removeme
endif
end

;####################################################################
scn aMMMzGhoulRamblerToken

ref rNPC
short iTimer

Begin GameMode
if rNPC == 0
set rNPC to GetContainer
rNPC.modav rightmobilitycondition -100
rNPC.modav leftmobilitycondition -100
endif
set iTimer to iTimer + GetSecondsPassed
if iTimer > 5
removeme
endif
End

;####################################################################
scn aMMMzNightGhoulVisionToken

float iTimer
float iHour
ref rNPC

Begin GameMode
if rNPC == 0
set iTimer to MMMzNightGhoulVisionTimer
set iHour to GameDaysPassed + 0.08
set rNPC to GetContainer
if rNPC.GetItemCount zMMMzNightGhoulVisionToken > 1
rNPC.removeitem zMMMzNightGhoulVisionToken 1 1
endif
rNPC.setav speedmult 200
rNPC.riMod zMMMzSunglassesISFX
rNPC.iMod zMMMzSunglassesISFX
showmessage zMMMzNightGhoulVisionStartMessage
endif
set iTimer to iTimer - GetSecondsPassed
if iTimer < 0 || (GameDaysPassed >= iHour)
; showmessage zMMMzNightGhoulVisionStopMessage
rNPC.setav speedmult 100
rNPC.riMod zMMMzSunglassesISFX
rNPC.equipitem zMMMzNightGhoulVisionToken 0 1 ; Workaround engine bug to get speedmult to take effect immediately
rNPC.removeitem zMMMzNightGhoulVisionToken 1 1
endif
End

;####################################################################
scn aMMMzSpawn_StalkerCreaturesToken

short iDice
short iXmod
short iYmod
ref rSpawn
ref rNPC

Begin GameMode
if rNPC == 0
set iDice to 2
set rNPC to GetContainer
endif
if iDice > 0
if GetRandomPercent < 40
set rSpawn to rNPC.placeatme zMMMzStalkerDogTemplate 1
else
set rSpawn to rNPC.placeatme zMMMzStalkerBoarTemplate 1
endif
set iXmod to -7500 + ((GetRandomPercent +1) * 150)
set iYmod to -7500 + ((GetRandomPercent +1) * 150)
rSpawn.moveto rSpawn iXmod iYmod -50000
rSpawn.stopcombat
rSpawn.scaonactor
set iDice to iDice - 1
else
removeme
endif
End

;####################################################################
scn aMMMzStaggerToken

ref rNPC
ref rTarget
short iNewHealth
short iOldHealth

Begin GameMode
if rNPC == 0
set rNPC to GetContainer
set iOldHealth to (rNPC.getav health)
endif
if rNPC.GetDead
removeme
else
set iNewHealth to (rNPC.getav health)
if iOldHealth != iNewHealth
set iOldHealth to iNewHealth
if rNPC.GetHealthPercentage > 0.60
return
elseif rNPC.GetHealthPercentage > 0.40
if GetRandomPercent > 20
return
endif
elseif rNPC.GetHealthPercentage > 0.20
if GetRandomPercent > 40
return
endif
endif
set rTarget to rNPC.GetCombatTarget
if rTarget && rTarget.getdistance rNPC > 400
rTarget.pushactoraway rNPC -10
else
rTarget.pushactoraway rNPC 10
endif
endif
endif
End

;####################################################################
scn aMMMzNightPerception

short iChanged

Begin ScriptEffectUpdate
If iChanged == zMMMzMMM.iDayNight
return
else
set iChanged to zMMMzMMM.iDayNight
if ( iChanged == 1 || IsInInterior == 1 )
if IsSpellTarget zMMMzNightPerceptionMod
removespell zMMMzNightPerceptionMod
endif
elseif GetEquipped zMMMzHelmetCheck == 0 && IsSpellTarget zMMMzNightPerceptionMod == 0
addspell zMMMzNightPerceptionMod
endif
endif
End

;####################################################################
scn zMMMzSpawnRemovalGargantuan

short iRunLoad
ref rSelf
ref rTarget
short iReward

Begin OnReset
set iRunLoad to 0 ; Actors loaded from another actor, and not a template (aka level list), retain their variables
End

Begin OnLoad
if IsInInterior == 1
disable
markfordelete
endif
if iRunLoad == 0 && GetDead == 0
set iRunLoad to 1
setscale 1.75
set rSelf to GetSelf
setFactionRank superMutantFaction 5
endif
End

Begin OnHit Player
if gethealthpercentage < 0.25
set iReward to 1
endif
End

Begin GameMode
if IsInCombat == 1
set rTarget to GetCombatTarget
if rTarget && rTarget != Player && rTarget.GetItemCount zMMMzGargToken == 0
rTarget.additem zMMMzGargToken 1
endif
endif
End

Begin OnDeath
if iReward == 1
player.rewardxp 300
endif
set BehemothsKilled to BehemothsKilled + 1
if BehemothsKilled >= BehemothsMax
AddAchievement 48
endif
End

;####################################################################
scn zMMMzSpawnRemovalGargantuanEvergreen

short iRunLoad
ref rSelf
ref rTarget
short iReward

Begin OnReset
set iRunLoad to 0 ; Actors loaded from another actor, and not a template (aka level list), retain their variables
End

Begin OnLoad
if IsInInterior == 1
disable
markfordelete
endif
if iRunLoad == 0 && GetDead == 0
set iRunLoad to 1
setscale 1.75
set rSelf to GetSelf
setFactionRank superMutantFaction 5
endif
End

Begin OnHit Player
if gethealthpercentage < 0.25
set iReward to 1
endif
End

Begin GameMode
if IsInCombat == 1
set rTarget to GetCombatTarget
if rTarget && rTarget != Player && rTarget.GetItemCount zMMMzGargToken == 0
rTarget.additem zMMMzGargToken 1
endif
endif
End

Begin OnDeath
if iReward == 1
player.rewardxp 300
endif
set BehemothsKilled to BehemothsKilled + 1
if BehemothsKilled >= BehemothsMax
AddAchievement 48
endif
End
Avatar du membre
Redondepremière
Scribe | Intendante | Traductrice d'élite
Scribe | Intendante | Traductrice d'élite
Messages : 6051

Re: patch pour mart's mutants mod

Message par Redondepremière »

Salut,

J'arrive peut-être un peu après coup, mais je te recommande d'éviter si possible le multipost.

De plus, comme tu ne l'a pas encore fait, je te recommande de venir te présenter ici, où tu pourras bien évidemment signaler que tu souhaites modder sur FO3 et donc recevoir le rang de Moddeur en herbe, qui te donnera accès à, outre des tutos, la possibilité de mettre ton mod dans le sanctuaire des scribes afin qu'ils le relisent pour savoir s'il est prêt à être mis en ligne (si je ne me trompe pas).
Par ailleurs, comme le mod que tu prépares ici est une correction d'un mod préexistant, il serait utile de vérifier si l'auteur autorise la publication de versions modifiées ou de patchs en esps séparés ; si refus il y a, ce serait fort dommage, car tu ne pourrais alors pas l'uploader ici.

Bonne continuation.
Si gentille petite créature atlante, quelques secondes de recueillement pour toi.
Ah bah non. On a pas le temps. ~ MOrlOck, 2014

Je surveille les mods que je traduis/tiens à jour, merci de ne pas signaler leurs màjs.

Modder Morro/Obli/FO3/FNV proprement de nos jours
Répondre

Retourner vers « Idées »