Bonjour chers amis scripteurs, dans le cadre d'une traduction, un mod d'arène pour être plus précis, je me suis rendu compte d'un truc qui pouvait être fâcheux à la longue en restant là-bas dans l'arène. Je veux parler des corps qui en s'accumulant ferait ramer le jeu, j'ai donc pensé à un script pour faire disparaître les corps et l'auteur me dit qu'il n'arriverait pas à scripter le truc.
Je vais donc chercher le script de la Leveler tower car il y a une arène dedans avec un script qui enlève les corps pendant une explosion, je le trouve

, je l'ouvre pour voir à peu près comment cela se présente

, je vais mettre le script en question, je ne sais pas par contre si j'ai le droit de le faire mais WillieSea dit qu'il met ses ressources à disposition de tous mais uniquement les siennes pour les autres dont il s'est servis pour son mod il faut demander à leurs auteurs respectifs :
► Afficher le texte
Scriptname LevelersArenaDeathScript extends activemagiceffect
{Remove Corpse Magic Effect script}
ObjectReference Property LevelersArenaChestREF Auto
Faction Property PlayerFollowerFaction Auto
Faction Property CurrentFollowerFaction Auto
FormList Property LevelersArenaWeaponsFLST Auto
FormList Property LevelersPileFLST Auto
Event OnEffectStart(Actor akTarget, Actor akCaster)
if akTarget.IsDead()
akTarget.RemoveAllItems(akTransferTo = LevelersArenaChestREF)
akTarget.Disable()
akTarget.Delete()
else
If akTarget != Game.GetPlayer()
if akTarget.IsInFaction(PlayerFollowerFaction) || akTarget.IsInFaction(CurrentFollowerFaction)
;do nothing
else
akTarget.Kill()
endif
endif
endif
ObjectReference MyFormListItem = Game.FindRandomReferenceOfAnyTypeInListFromRef(LevelersArenaWeaponsFLST, akTarget, 1500)
If MyFormListItem != none
; MyFormListItem.Activate(Game.GetPlayer())
LevelersArenaChestREF.AddItem(MyFormListItem)
MyFormListItem.Disable()
MyFormListItem.Delete()
Endif
ObjectReference MyFormListAsh = Game.FindRandomReferenceOfAnyTypeInListFromRef(LevelersPileFLST, akTarget, 1500)
If MyFormListAsh != none
; MyFormListAsh.RemoveAllItems(akTransferTo = LevelersArenaChestREF)
MyFormListAsh.Disable()
MyFormListAsh.Delete()
Endif
endEvent
Je triche en recopiant ce qui m'interesse car je ne veux pas transférer l'inventaire des PNJ dans un coffre donc je passe le " akTarget.RemoveAllItems(akTransferTo = LevelersArenaChestREF)" , ensuite le akTarget.Disable je ne sais pas s'il est indispensable mais le akTarget.Delete oui s'il sert vraiment à effacer le " target " , Bon de ce que j'ai ou crois avoir compris en parcourant ce script c'est qu'il faut dire au jeu que si en activant le levier le " target " est mort, il doit enlever tous les objets et effacer le " target ", est-ce que je me trompe ? Je vais vous mettre mon essai de script :
► Afficher le texte
ScriptName arenaremovecorpsesscript Extends ActiveMagicEffect -> pour dire qu'on veux un effet magique ?
Event OnEffectStart(Actor akTarget, Actor akCaster) ->pour dire que l'effet se declenche par activation
If akTarget.IsDead() ->pour dire s'il les "targets" sont morts.
akTarget.RemoveAllItems() -> pour enlever les objets de l'arène
akTarget.Disable() -> pas sur que se soit indispensable
akTarget.Delete() -> pour effacer les corps
EndIf
EndEvent
Je me doute bien que ce n'est pas aussi simple car mon script n'est pas très grand par rapport au script de Williesea, d'abord j'aimerais pouvoir attacher ce script au bouton d'activation des combats de sorte que lorsqu'on appuie dessus, pour sortir de l'arène, le script se lance et enlève les corps en activant un effet magique ( une explosion par exemple) pour ne pas voir les corps disparaître par magie.
En écrivant ce message j'ai vu le "RegisterForUpdateGameTime()" qui fait que l'on peut effectuer une action tout les X intervalle d'heure de jeu ( mais la notre ou celle du jeu ? ), ne serait-il pas plus simple dans ce cas de faire un script qui nettoierais l'arène tous les X heures ?
En tout cas merci de m'avoir lu et si vous avez une solution ou un script tout fait sachez que je le prendrais avec plaisir et vous serez crédité pour votre travail sur le script.