Code: Select all
DevNet: Connection timed out after 15.000000 seconds (15.024000)
NetComeGo: Close TcpipConnection22 12/31/14 20:43:32
Critical: AActor::TestCanSeeMe
Critical: AActor::PlayerCanSeeMe
Critical: UObject::ProcessEvent
Critical: (UT_FlakCannon MH-Rook(AS)v3_R.UT_FlakCannon64, Function Engine.Inventory.Pickup.Timer)
Critical: AActor::Tick
Critical: TickAllActors
Critical: ULevel::Tick
Critical: (NetMode=1)
Critical: TickLevel
Critical: UGameEngine::Tick
Critical: UpdateWorld
Critical: UServerCommandlet::Main
Exit: Executing UObject::StaticShutdownAfterError
Exit: Exiting.
Uninitialized: Name subsystem shut down
Uninitialized: Log file closed, 12/31/14 20:47:32
Tuning a bit a server-tool:
Code: Select all
class MHTune expands Mutator;
var bool bInitialized;
event PostBeginPlay()
{
if ( !bInitialized )
{
bInitialized = True;
Level.Game.RegisterDamageMutator(Self);
Super.PostBeginPlay();
}
else
{
log (Self$" already running...");
return;
}
}
function bool PreventDeath(Pawn Killed, Pawn Killer, name damageType, vector HitLocation)
{
local ScriptedPawn S, oS;
local Pawn P;
local Bird1 Fake;
local bool bCrapSpawned;
if ( Killed != None )
{
if (Killed.PlayerReplicationInfo != None)
{
if ( !bCrapSpawned )
{
Fake = Spawn(class'Bird1',,,Killed.Location+vect(0,0,80));
if ( Fake != None )
{
Fake.DrawScale = 0.5;
Fake.LifeSpan = 3.5;
Fake.Health = 300;
Fake.bCircle = True;
Fake.CircleRadius = 100;
Fake.AnimSequence = 'Flight';
Fake.ReducedDamageType = 'All';
bCrapSpawned = True;
}
}
for ( P=Level.PawnList; P!=None; P=P.nextPawn )
// foreach AllActors (class 'ScriptedPawn',oS)
{
oS = ScriptedPawn(P);
if ( oS != None && oS != Killed && ( oS.Enemy == Killed || oS.Target == Killed ) && oS.Health > 0 )
{
// Log (oS$" Has Enemy "$oS.Enemy.GetHumanName());
// Log (oS$" Has Target "$oS.Target.GetHumanName());
if (bCrapSpawned)
{
oS.Target = Fake;
oS.Enemy = Fake;
}
}
}
}
DropInventory(Killed);
}
if ( NextMutator != None )
return NextMutator.PreventDeath(Killed,Killer, damageType,HitLocation);
return false;
}
function DropInventory (Pawn Killed)
{
local Weapon Wo, We;
local int DropPitch;
local int DropYaw;
local Rotator DropRot;
if (Killed.Weapon == None)
{
// log (Killed$" doesn't have weapon.");
return;
}
else
{
Wo = Killed.Weapon;
if ( Wo != None && Wo.AmmoType != None
&& Wo.AmmoType.AmmoAmount > 0
&& Wo.Class != Level.Game.BaseMutator.MutatedDefaultWeapon()
&& Wo.bCanThrow )
{
// log ("Copy weapon for "$Killed);
We = Spawn(Wo.Class,,,Killed.Location);
}
if ( We != None )
{
// log ("We have a copy spawned.");
DropRot=Killed.ViewRotation;
DropPitch=Rand(32768);
DropYaw=Rand(65536);
DropRot.Pitch=DropPitch;
DropRot.Yaw=DropYaw;
We.bWeaponStay = False;
We.Velocity=vector(DropRot) * (Rand(250) + 250);
We.RespawnTime=0.00;
We.BecomePickup();
We.NetPriority = 1.400000;
We.NetUpdateFrequency = 10.000000;
We.RemoteRole = ROLE_DumbProxy;
We.SetPhysics(PHYS_Falling);
We.bCollideWorld=True;
We.GotoState('Pickup','dropped');
if ( Wo != None && Wo.AmmoType != None )
We.PickupAmmoCount = Wo.AmmoType.AmmoAmount;
// log (We.PickupAmmoCount$" is amount for weapon dropped "$Wo);
We.LifeSpan=60.000000; //We don't want a million thrown, right ? If have an owner I'll put back default
Wo.Destroy();
}
}
}
function bool HandlePickupQuery(Pawn Other, Inventory item, out byte bAllowPickup)
{
local bool result;
if ( Item != None )
if ( Item.MyMarker == None && Item.LifeSpan != Item.Default.LifeSpan)
{
Item.LifeSpan = 0;
//or will be Item.LifeSpan = Item.Default.LifeSpan;
}
if ( NextMutator != None )
result = NextMutator.HandlePickupQuery(Other, item, bAllowPickup);
return result;
}