Įƒ*žE(@ . x ÕPėk‡@ø(Ya'ÕėĀ (NoneSYF ScriptedPawnMonsterAttackCheckPostBeginPlayEnginebCheckMonsterAttackStopYourFighting WhatToDoNextRegisterDamageMutatorTickWaitingCorePawnActorLevel GameInfo LevelInfoMutatorClassObjectProperty ScriptTextPackage TextBufferEnemyGame TimeSeconds bGameEnded NextMutatorObjectFloatProperty OldEnemyHated Initialized BoolProperty Function UnrealShareLastMonsterAttackTimeDTSƒ@€Ž šSŽ(‰-• Q‚-°‰ ™ »H - -'‰ Fw“*“ iclass StopYourFighting extends Mutator config(SYF); var bool Initialized; var config bool bCheckMonsterAttack; var float LastMonsterAttackTime; function PostBeginPlay() { if (Initialized) return; Initialized = True; Level.Game.RegisterDamageMutator(Self); if ( NextMutator != None ) NextMutator.PostBeginPlay(); } simulated function Tick (float DT) { Super.Tick(DT); if ( Level.Game.bGameEnded ) return; if ((bCheckMonsterAttack) && (LastMonsterAttackTime < Level.TimeSeconds)) // call every x secs MonsterAttackCheck(); } function MonsterAttackCheck() { local ScriptedPawn S; foreach AllActors(class'ScriptedPawn', S) { if (S.Enemy != None && S.Enemy.IsA('ScriptedPawn')) { S.Hated = None; S.Enemy = None; if (S.OldEnemy!=None && S.OldEnemy.IsA('ScriptedPawn')) S.OldEnemy = none; S.WhatToDoNext('Waiting',''); // let the AI have some say in what state they return to } } LastMonsterAttackTime = Level.TimeSeconds; } ž×/a0 ƒĄæ‚w*a/!š**¦‚w‹*‹a/!‹*! !10‰ ˆ ’’’’’’’’’’’’’’’’’’ £ ˜ˆ=$:eƒĮ"ŗ/ƒĮ"ŗ/‡žtČƒĮ"ŗ/ƒĮ"ŗ/ƒĮ"ŗ/ƒĮ"ŗ/‡žtČƒĮ"ŗ/ƒĮ"ŗ/…Ž”…Ž”Œ©Ł«…Ž”…Ž”Œ©Ł«ˆ=$:e —Ó  $ ž’’’  ’’’’ ’’’’ ’’’’ ’’’’ ś’’’ ü’’’# ż’’’ ’’’’ ł’’’ #ś’’’ ū’’’ ū’’’ ü’’’ ü’’’" ų’’’ ü’’’ "ō’’’ ü’’’ ü’’’ ü’’’ #ś’’’ ż’’’ – ' Z ’ ! g ‘ % s ’   ‘& K ŠŽ NW Š™ Ie ” 4tn Š ebˆqG"