Code: Select all
ScriptWarning: SkaarjDemon MH-FightOn.SkaarjDemon0 (Function MUPawns.SkaarjDemon.ClawDamageTarget:0025) Accessed None
ScriptWarning: SkaarjDemon MH-FightOn.SkaarjDemon0 (Function UnrealShare.ScriptedPawn.MeleeDamageTarget:000D) Accessed None
ScriptWarning: SkaarjDemon MH-FightOn.SkaarjDemon0 (Function UnrealShare.ScriptedPawn.MeleeDamageTarget:0030) Accessed None
ScriptWarning: SkaarjDemon MH-FightOn.SkaarjDemon0 (Function MUPawns.SkaarjDemon.ClawDamageTarget:0025) Accessed None
ScriptWarning: SkaarjDemon MH-FightOn.SkaarjDemon0 (Function UnrealShare.ScriptedPawn.MeleeDamageTarget:000D) Accessed None
ScriptWarning: SkaarjDemon MH-FightOn.SkaarjDemon0 (Function UnrealShare.ScriptedPawn.MeleeDamageTarget:0030) Accessed None
ScriptWarning: SkaarjDemon MH-FightOn.SkaarjDemon0 (Function MUPawns.SkaarjDemon.ClawDamageTarget:0025) Accessed None
ScriptWarning: SkaarjDemon MH-FightOn.SkaarjDemon0 (Function UnrealShare.ScriptedPawn.MeleeDamageTarget:000D) Accessed None
ScriptWarning: SkaarjDemon MH-FightOn.SkaarjDemon0 (Function UnrealShare.ScriptedPawn.MeleeDamageTarget:0030) Accessed None
.............
Critical: appError called:
Critical: GhostSkaarj MH-FightOn.GhostSkaarj7 (Function MUPawns.SkaarjZombie.WhatToDoNext:0015) Runaway loop detected (over 10000000 iterations)
Exit: Executing UObject::StaticShutdownAfterError
Critical: FFrame::Serialize
Critical: AActor::ProcessState
Critical: Object GhostSkaarj MH-FightOn.GhostSkaarj7, Old State State UnrealShare.ScriptedPawn.Attacking, New State State UnrealShare.ScriptedPawn.Attacking
Critical: AActor::Tick
Critical: TickAllActors
Critical: ULevel::Tick
Critical: (NetMode=1)
Critical: TickLevel
Critical: UGameEngine::Tick
Critical: UpdateWorld
Critical: UServerCommandlet::Main
Exit: Exiting.
Uninitialized: Name subsystem shut down
What is the problem in that function ? Take a breath and see
Code: Select all
function bool MeleeDamageTarget(int hitdamage, vector pushdir)
{
local vector HitLocation, HitNormal, TargetPoint;
local actor HitActor;
// check if still in melee range
If ( (VSize(Target.Location - Location) <= MeleeRange * 1.4 + Target.CollisionRadius + CollisionRadius)
&& ((Physics == PHYS_Flying) || (Physics == PHYS_Swimming) || (Abs(Location.Z - Enemy.Location.Z)
<= FMax(CollisionHeight, Enemy.CollisionHeight) + 0.5 * FMin(CollisionHeight, Enemy.CollisionHeight))) )
{
HitActor = Trace(HitLocation, HitNormal, Enemy.Location, Location, false);
if ( HitActor != None )
return false;
Target.TakeDamage(hitdamage, Self,HitLocation, pushdir, 'hacked');
return true;
}
return false;
}
- first of all function gets called unwrapped;
- second is Null checking for stuff making a soup with Enemy and Target - sometimes are not the same thing - see TTShoot type things.
Doing new sorta stupid creatures I was interested to see if anyone have a tiny interest in a quality work but looks like NONE really cares... so NONE goes in logs too.
Tryouts at solving issue:
#1
Code: Select all
function bool MeleeDamageTarget(int hitdamage, vector pushdir)
{
local vector HitLocation, HitNormal, TargetPoint;
local actor HitActor;
//Setup things first
if ( Enemy !=None && Enemy.Health > 0 && Target == None )
Target = Enemy;
//
// check if still in melee range - AND IF EXIST A SHIT In RANGE
if (Target != None)
If ( (VSize(Target.Location - Location) <= MeleeRange * 1.4 + Target.CollisionRadius + CollisionRadius)
&& ((Physics == PHYS_Flying) || (Physics == PHYS_Swimming) || (Abs(Location.Z - Target.Location.Z)
<= FMax(CollisionHeight, Target.CollisionHeight) + 0.5 * FMin(CollisionHeight, Target.CollisionHeight))) )
{
HitActor = Trace(HitLocation, HitNormal, Target.Location, Location, false);
if ( HitActor != None )
return false;
Target.TakeDamage(hitdamage, Self,HitLocation, pushdir, 'hacked');
return true;
}
return false;
}
Code: Select all
function bool MeleeDamageTarget(int hitdamage, vector pushdir)
{
local vector HitLocation, HitNormal, TargetPoint;
local actor HitActor;
//Setup things first
if ( (Enemy !=None
&& Enemy.Health > 0
&& !Enemy.bHidden
&& Enemy.Mesh != None ) //AND SO ON
&& Target == None )
Target = Enemy;
if (Target == None)
return False;
// check if still in melee range - - // -
if (Target != None)
If ( (VSize(Target.Location - Location) <= MeleeRange * 1.4 + Target.CollisionRadius + CollisionRadius)
&& ((Physics == PHYS_Flying) || (Physics == PHYS_Swimming) || (Abs(Location.Z - Target.Location.Z)
<= FMax(CollisionHeight, Target.CollisionHeight) + 0.5 * FMin(CollisionHeight, Target.CollisionHeight))) )
{
HitActor = Trace(HitLocation, HitNormal, Target.Location, Location, false);
if ( HitActor != None )
return false;
Target.TakeDamage(hitdamage, Self,HitLocation, pushdir, 'hacked');
return true;
}
return false;
}
#3 - Child of something ?
Code: Select all
function bool MeleeDamageTarget(int hitdamage, vector pushdir)
{
local vector HitLocation, HitNormal, TargetPoint;
local actor HitActor;
//Setup things first
if ( (Enemy !=None
&& Enemy.Health > 0
&& !Enemy.bHidden
&& Enemy.Mesh != None ) //AND SO ON
&& Target == None )
Target = Enemy;
if (Target == None)
return False;
if (Target != None)
return Super(ScriptedPawn).MeleeDamageTarget(hitdamage,pushdir); //Check the call and allow original code to run if you cry for it
return False;
That crash belongs to COPY-PASTE habits. First of all Berserker code do crash like that and looks like is a code moved with no fix. We can debate solutions if exist interest, else... No debates and MAP REMOVED - Good Night and Sweet Dreams, dear !