XC_Engine [20] - XC_Core [7b] - XC_IpDrv

User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by sektor2111 »

Speaking about UT_Shieldbelt and similar. Probably these armors will have new A.I. and new Pickup rules (as I did in MH2) but without replacements, ScubaGear, SearchLight. Also code when they have expired might go better (FlashLight). Weapons ? Oh well... AIRating I don't see sanitizer for "AmmoType != None" but it refers to and if weapon is held very fast has chances to mess the Rating. It's probably a need for replacing a few tens of functions (or hundreds) but I think it worth the work + a couple of bools for disabling those who don't need always hacks.
It will be required a rewrite of MH2 according to these cute options...
I'm gonna test if I can tweak original WarlordRocket and SeekingRocket and the rest of things messed up.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by Higor »

Built with VisualStudio 2015.
The additional dependancy statically linked so it doesn't need to be installed - ty anth.
DLL size is much bigger due to linking, and requires a SSE2 CPU.

ReplaceFunction crash fix if called as a static function, no longer requires being called from an actor.

=== Extra functions replaced:
- Weapon.SpawnCopy > PickupAmmoCount and AmmoType are passed to new weapon.
- UT_Invisibility.Activated.EndState > Fix bug making the invisibility persistant to bots after item expiration.

=== Relevancy loop changes:
- Experimental optimizations.
- All Super Relevant actors (bNetOwner and bAlwaysRelevant) are prioritized over all other actors, regardless of their NetPriority.
- Owned actors that haven't been sent to it's owner are checked on every frame, regardless of NetUpdateFrequency.
- When the channel list is saturated, 1 to 4 actors are discarded every second to allow new ones to replace them.
** The two combined things fix maps with over 1000 visible monsters/items.
** Weapons are received a bit faster post-respawn and some projectiles/effects appear faster as well.

- Added bRelevantToOwner property to Actor
** These actors are only sent to clients if their owner is also present on a client's viewpoint, ideal for attachments.
** Channel is immediately closed if owner actor's channel closes (no RelevantTimeout applied)

- Added bRelevantToTeam property to Actor.
** Requires a 'byte' variable named 'Team'.
** These actors are only sent to clients whose team matches this actor's team.
** NOTE: bRelevantToOwner and bRelevantToTeam fully override all other replication conditions.
**** Both options enabled make an actor only relevant if 'Team' matches, AND if owner is present.
Attachments
XC_Engine_hooktest_03.7z
(213.81 KiB) Downloaded 78 times
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by sektor2111 »

Post Tweaking Notes:
- Without replacing Eightball (original old weapon) I went into the deal with "SeekingRocket" hardcoded in weapon. Now original fires a better rocket (hybrid between UT_SeekingRocket and SeekingRocket).
- Persistent problems are... Client Problems - functions called in client by TournamentWeapon+Weapon and which are not fixable. They have logs as previous one but NO LOG is shown as long tweaking takes place in server and server doesn't run client things. Even If I have written a different form + log, I see only Warnings without logs - original function runs there not the new one. At least if I can stabilize server this is a good thing anyway.

Code: Select all

ScriptWarning: EUT_Eightball DM-BL-Grendalkeep-TM_Rv.EUT_Eightball5 (Function Botpack.TournamentWeapon.ClientDown.AnimEnd:0088) GotoState (ClientActive None): State not found
ScriptWarning: EUT_Eightball DM-BL-Grendalkeep-TM_Rv.EUT_Eightball5 (Function Botpack.TournamentWeapon.ClientDown.AnimEnd:0088) GotoState (ClientActive None): State not found
ScriptWarning: EPulseGun DM-BL-Grendalkeep-TM_Rv.EPulseGun4 (Function Botpack.TournamentWeapon.ClientDown.AnimEnd:0088) GotoState (ClientActive None): State not found
ScriptWarning: EPulseGun DM-BL-Grendalkeep-TM_Rv.EPulseGun4 (Function Botpack.TournamentWeapon.ClientDown.AnimEnd:0088) GotoState (ClientActive None): State not found
ScriptWarning: Eminigun2 DM-BL-Grendalkeep-TM_Rv.Eminigun12 (Function Botpack.TournamentWeapon.ClientDown.AnimEnd:0088) GotoState (ClientActive None): State not found
ScriptWarning: ImpactHammer DM-BL-Grendalkeep-TM_Rv.ImpactHammer4 (Function Botpack.TournamentWeapon.ClientDown.AnimEnd:0088) GotoState (ClientActive None): State not found
These occurs at switching Weapon-TournamentWeapon. It's not a crash thing but is good to know that client cannot be too much fixed.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by Higor »

Client logs don't mean too much if it's not spamming.
It's servers that have to run for weeks and are sensitive to this.
XC_Engine_hooktest_04.7z
Linux build. (SSE1)
Windows build (VS2015, SSE1)
(348.38 KiB) Downloaded 79 times
Fixed up spectators on net games (they were unusable in test build 3)
Fixed some crashes in ReplaceFunction method.
Added saturation check to relevancy loop, if connection is saturated the server artificially reduces net tickrate to half for that player when checking non-owned actors (good for high player counts and high tickrates)

Added more script mods:
- SkaarjTrooper.StartUp.BeginState -> Detect mutator-replaced weapons (using fast CollidingActors)
- ScriptedPawn.StartUp.SetHome -> Use NavigationActors iterator to speed up level startup.

Notes:
LCWeapons has a bug so skaarj can't pick up 'LC' weapons previously replaced by another mutator.
This should be pretty much the last test build for a while, will be upping it to a couple of servers later tonight.

PD:
@Barbie you should try this build with that troublesome MH map.
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by sektor2111 »

Higor wrote: Added more script mods:
- SkaarjTrooper.StartUp.BeginState -> Detect mutator-replaced weapons (using fast CollidingActors)
- ScriptedPawn.StartUp.SetHome -> Use NavigationActors iterator to speed up level startup.
I'm gonna check them. Else looks like other things were good with a few exceptions stucking. Trying to hook "SP.Killed" but I changed deal, trying to fix Fly.TacticalMove Post killed. Now I have rewritten these:
Spoiler
ReplaceFunction( class 'Decoration', Class 'XC_Decoration', 'ZoneChange', 'ZoneChange' );
ReplaceFunction( class 'Decoration', Class 'XC_Decoration', 'Destroyed', 'Tw_Destroyed' );
ReplaceFunction( class 'Decoration', Class 'XC_Decoration', 'skinnedFrag', 'Tw_skinnedFrag' );
ReplaceFunction( class 'Decoration', Class 'XC_Decoration', 'Frag', 'Tw_Frag' );
ReplaceFunction( class 'Weapon', Class 'XC_Weapon', 'CheckVisibility', 'CheckVisibility' );
ReplaceFunction( class 'TranslocStart', Class 'XC_TranslocStart', 'SpecialHandling', 'SpecialHandling' );
ReplaceFunction( class 'JumpSpot', Class 'XC_JumpSpot', 'SpecialCost', 'SpecialCost' );
ReplaceFunction( class 'Pickup', Class 'XC_Pickup', 'UsedUp', 'Tw_UsedUp' );
ReplaceFunction( class 'Flashlight', Class 'XC_FlashLight', 'Tick', 'Tw_Tick','Activated' );
ReplaceFunction( class 'Eightball', Class 'XC_Eightball', 'Tick', 'Tw_AltFireTick', 'AltFiring' );
ReplaceFunction( class 'Eightball', Class 'XC_Eightball', 'Tick', 'Tw_FireTick', 'NormalFire' );
ReplaceFunction( class 'Eightball', Class 'XC_Eightball', 'BeginState', 'Tw_BeginState', 'FireRockets' );
ReplaceFunction( class 'ShockProj', Class 'XC_ShockProj', 'SuperExplosion', 'Tw_SuperExplosion' );
ReplaceFunction( class 'NaliRabbit', Class 'XC_NaliRabbit', 'PickDestination', 'Tw_PickDestination', 'Evade' );
ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'MeleeDamageTarget', 'Tw_MeleeDamageTarget' );
ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'StartRoaming', 'Tw_StartRoaming' );
ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'TakeDamage', 'Patroling_TakeDamage', 'Patroling' );
ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'TakeDamage', 'Guarding_TakeDamage', 'Guarding' );
ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'TakeDamage', 'Threatening_TakeDamage', 'Threatening' );
ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'Timer', 'Charging_Timer', 'Charging' );
ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'Timer', 'TacticalMove_Timer', 'TacticalMove' );
// ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'Killed', 'XC_Killed' );
ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'PlayCombatMove', 'XC_PlayCombatMove' );
ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'PickDestination', 'TacticalMove_PickDestination', 'TacticalMove' );
ReplaceFunction( class 'ScriptedPawn', Class 'XC_ScriptedPawn', 'BeginState', 'TacticalMove_BeginState', 'TacticalMove' );
ReplaceFunction( class 'Titan', Class 'XC_Titan', 'SpawnRock', 'Tw_SpawnRock' );
ReplaceFunction( class 'Warlord', Class 'XC_Warlord', 'PlayRangedAttack', 'Tw_WPlayRangedAttack' );
ReplaceFunction( class 'Warlord', Class 'XC_Warlord', 'PlayMovingAttack', 'Tw_WPlayMovingAttack' );
ReplaceFunction( class 'Mercenary', Class 'XC_Mercenary', 'SprayTarget', 'Tw_SprayTarget');
ReplaceFunction( class 'Brute', Class 'XC_Brute', 'PlayRangedAttack', 'Tw_PlayRangedAttack');
ReplaceFunction( class 'Gasbag', Class 'XC_Gasbag', 'PlayRangedAttack', 'Tw_PlayRangedAttack');
ReplaceFunction( class 'SkaarjBerserker', Class 'XC_SkaarjBerserker', 'WhatToDoNext', 'Tw_WhatToDoNext');
Edit:
Disagree with Skaarj Owner for a weapon. Skaarj is not owning nothing, it spawns weapon which is replaced. All what need to do is to check if a weapon with NO Marker is in range and load it properly without any bIsPlayer crap.
Some NsSkaarjTrooper sample - it doesn't fail any weapon:

Code: Select all

	function BeginState()
	{
		Super.BeginState();
// *** Manure not code in here, else spoken, a technology to mess with everything good
//		bIsPlayer = true; // temporarily, till have weapon
// *** Why and why and why ???
		if ( WeaponType != None )
		{
//			bIsPlayer = true; //Just bullshit
			myWeapon = Spawn(WeaponType,Self,,Self.Location);
			if ( myWeapon != None )
			{
// *** Is History
//				bIsPlayer = True; //Never here for my pawns
// *** End of History
				myWeapon.ReSpawnTime = 0.0;
				myWeapon.BecomeItem(); //Do not mess anims
				myWeapon.Instigator = Self;
				AddInventory(myWeapon);
				myWeapon.GiveAmmo(Self);
				myWeapon.WeaponSet(Self);
			}
		}
	}

	function SetHome()
	{
		local Weapon W;

/*		if ( myWeapon != None )
			myWeapon.Touch(self);
		else
		{
*/
			if ( Weapon == None ) //preserve a nasty thing
			foreach Self.RadiusActors(class'Weapon',W,CollisionRadius-1)
			{
				if ( W != None && W.bHeldItem )
				{
					W.ReSpawnTime = 0.0;
					W.BecomeItem();
					W.Instigator = Self;
					AddInventory(W);
					W.GiveAmmo(Self);
					W.WeaponSet(Self);
//**** History ****
//					W.Touch(Self);
//**** Because... it won't ever fight using bIsPlayer occurrence code :p
					break;
				}
			}
//		}
		Super.SetHome();
	}
Happily killing player armed properly. Code is not that fast, but is SAFE, else game-type uses another log class to not mess LogPickup "features". Yep, I'm gonna write these in mutator hacker.
Last edited by sektor2111 on Tue Aug 09, 2016 6:47 am, edited 1 time in total.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by Higor »

There is a SP map where a Skaarj Trooper is scripted to run to a weapon to pick it up, so bIsPlayer is more than intended behaviour.
If something is buggy, is the SetEnemy function.
Feel free to override it within your mutator.

BTW, keep an eye on 'Super' calls.
ALWAYS specify the class that's intended Super or you may end up with an infinite call recursion, example:

DeathMatchPlus.Timer
Doing must be done like this:

Code: Select all

class XC_DMP expands DeathMatchPlus;

function Timer()
{
	Super(GameInfo).Timer();
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by sektor2111 »

1) Whatever is that map, Skaarj is not Owner, is <Instigator> so asking "W.Owner==Self" won't do nothing (Use Log and See), any replaced weapon is not held properly but default "replacewith" says "bHeldItem" because has no Marker. Default MH503+UTJ are doing a bigger mess in here - replacements are held only if are touched later during combat. Mapper knew that bug (and there are other maps with armed troopers placed around weaponry), and it was using it on purpose expecting to never see Skaarj's problem solved (because it was a mess for more than 8-10 years in UT and fully trouble maker). It is old way which is messed up and again what is for bIsPlayer ? Because...
2) Trooper presented by me is not a SkaarjTrooper, it is a subclass of NsSkaarj subclass of NsScriptedPawn Child of ScriptedPawn so it needs to follow chains properly getting over some things in parents to not perform a doubled execution, NsMonster doesn't have major troubles as I figured at stock types, and if you check well, simply my "Trooper" indeed will be Owner for weapon spawned not only Instigator.
3) Problems at MH504 and Skaarj holding a replaced Weapon with TournamentWeapon is solved using a modified ReplaceWith, nothing to do with SetEnemy (which I changed at my monsters because I have my personal one). The only problem is for a non-default Skaarj holding XidiaRifle - that doubled ammo weapon which is done taking in account original MH problems (lousy codes from there). In MH2 I did the same method VIA ReplaceWith, and fixing log got vanished when I was firing up GameSpeed correctly - simply things went at normal when InitGame rules have been changed - THERE was the problem + timers making monster out of timing. At end I externally fixed XidiaRifle problem using another way - PawnControl - waiting a bit to see what's going on and then dealing with Pawn Instigator for a lost weapon. Aside, if by chance a Trooper is unarmed, during regen timers I have a sequence giving to unarmed trooper an "ASMD" weapon just for making it a good boy and this check happens cycling for later spawned Skaarj.
Related to these maps with trooper running like a dumb-ass for a weapon I can rewrite this in a different form translated into a less good english:
If trooper has Weapontype NONE - find a match from Level. If Level is an empty cube use default class weapon which if is again "None" (MyLevel shit) set a default parent one (Dispersion or whatever) end of story. If mapper was only a cube drawer unable to solve trooper problem and found "a cute" idea that bIsPlayer issue, I'm not interested in empty troppers after all. Even without weapon, my trooper is not unkillable as default MH does with default trooper because I'm getting tired to call bIsPlayer for pawn without PlayerReplicationInfo and spreading only Accessed Nones because of "creativity".
Like I asked, let people to write these things as they consider after more than 5 years of battling Skaarj.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by Higor »

sektor2111 wrote:Mapper knew that bug
Mapper would be Eenocks (you mostly know him as Innox), one of Unreal developers.
Map is ExtremeCore.unr
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by sektor2111 »

I'm not surprised... "//till have a weapon" yeah... no wonder.
These developers have their bubbles as well proven not in a single Level, or were "tutorials" in how to use BlockAll and the rest of pathing craps.

Original "idea"
Custom trigger and some actor. Wait in Level 1 second - destroy monster's weapon - alarm monster - monster runs, touch a thing around weapon (some trigger) - bang, load it (optional match some tag).
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by sektor2111 »

A question for Hooktest4: Do I need other tweaks for this stuck type ? Why ?
[attachment=0]Collision_Melted.PNG[/attachment]
I want this disabled. This bot was useless being stuck into chair around a spawn spot used by pupaes. It did not happened before.
Attachments
Collision_Melted.PNG
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by Higor »

Are there AssaultRandomizers on the map?
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by sektor2111 »

No, it's map posted here around some MyLevel thread MH-Frigate_Rv and which was not a problem until this moment.
I should remove several paths (too many) but they were not doing anything evil so I left them alone.

I have PathSwitcher-s and is about Collision - Bot was Stuck in Brush, he came for Button, found pupae, attacked pupae, then God knows what happened. Not even Damage blast could move it, it's fully stuck. I see a few troubles at Berserkers too in up Flak room area. They used to fall between stair but it doesn't happen all time, they might be stuck too... Please FallBack last collision changes.
When a Boss is getting stuck like this, game will do sucks - easy kill with no purpose.
Edit:
[attachment=0]Another_Occurrence.JPG[/attachment]
Definitely not a pathing issue, it's more like a "Spider-Woman" issue...
Edit2:
I can see things normal for this trooper:
Spoiler

Code: Select all

class XC_SkaarjTrooper expands SkaarjTrooper abstract;

native(3552) final iterator function CollidingActors( class<actor> BaseClass, out actor Actor, float Radius, optional vector Loc);
native(3541) final iterator function NavigationActors( class<NavigationPoint> NavClass, out NavigationPoint P,
optional float Distance, optional vector VOrigin, optional bool bVisible);

function StartUp_BeginState()
{
	local Weapon W;

	SetMovementPhysics(); 
	if (Physics == PHYS_Walking)
		SetPhysics(PHYS_Falling);
	if ( WeaponType != None )
		myWeapon = Spawn(WeaponType);
	else
	{
		if (Class.Default.WeaponType != None)
			WeaponType = class.default.WeaponType;
		else
			{
				foreach AllActors (class'Weapon',W)
				{
					WeaponType = W.class;
					Break;
				}
			}
		if ( WeaponType != None )
			myWeapon = Spawn(WeaponType);
		else
		{
			WeaponType = Class 'ASMD';
			myWeapon = Spawn(WeaponType);
		}
	}
	if ( myWeapon != None )
	{
		myWeapon.ReSpawnTime=0.0;
		myWeapon.bWeaponStay=False;
	}
}

function St_SetHome()
{
	local Weapon W;
	local HomeBase aHome;

	if ( myWeapon != None )
	{
		myWeapon.BecomeItem(); //Do not mess anims
		myWeapon.Instigator = Self;
		AddInventory(myWeapon);
		myWeapon.GiveAmmo(Self);
		myWeapon.WeaponSet(Self);
		Weapon=MyWeapon;
	}
	if ( Weapon == None )
	{
		foreach CollidingActors(class'Weapon',W,CollisionRadius-1,Location )
		{
			if ( W.MyMarker == None )
			{
				W.ReSpawnTime=0.0;
				W.BecomeItem();
				W.Instigator = Self;
				AddInventory(W);
				W.GiveAmmo(Self);
				W.WeaponSet(Self);
				Weapon=W;
				break;
			}
		}
	}

	ForEach NavigationActors( class'HomeBase', aHome)
	if ( aHome.Tag == Tag )
	{
		home = aHome;
		return;
	}
}

function Tw_PlayMovingAttack()
{
	local float strafeMag;
	local vector Focus2D, Loc2D, Dest2D;
	local vector lookDir, moveDir, Y;
	local int bUseAltMode;

	if ( Weapon != None )
	{
		if ( Weapon.AmmoType != None )
			Weapon.AmmoType.AmmoAmount = Weapon.AmmoType.Default.AmmoAmount+2;
		Weapon.RateSelf(bUseAltMode);
		ViewRotation = Rotation;
		if ( bUseAltMode == 0 ) 
		{
			bFire = 1;
			bAltFire = 0;
			Weapon.Fire(1.0);
		}
		else
		{
			bFire = 0;
			bAltFire = 1;
			Weapon.AltFire(1.0);
		}
	}
	else
	{
		PlayRunning();
		GoTo NothingBellow;
	}

	if (Region.Zone.bWaterZone)
	{
		PlaySwimming();
		GoTo NothingBellow;
	}

	DesiredSpeed = MaxDesiredSpeed;

	if (Focus == Destination)
	{
		LoopAnim('JogFire', -0.9/GroundSpeed,, 0.4);
		GoTo NothingBellow;
	}
	Focus2D = Focus;
	Focus2D.Z = 0;
	Loc2D = Location;
	Loc2D.Z = 0;
	Dest2D = Destination;
	Dest2D.Z = 0;
	lookDir = Normal(Focus2D - Loc2D);
	moveDir = Normal(Dest2D - Loc2D);
	strafeMag = lookDir dot moveDir;
	if (strafeMag > 0.8)
		LoopAnim('JogFire', -1.0/GroundSpeed,, 0.4);
	else if (strafeMag < -0.8)
		LoopAnim('JogFire', -1.0/GroundSpeed,, 0.4);
	else
	{
		MoveTimer += 0.2;
		DesiredSpeed = 0.6;
		Y = (lookDir Cross vect(0,0,1));
		if ((Y Dot (Dest2D - Loc2D)) > 0) 
		{
			if ( (AnimSequence == 'StrafeRight') || (AnimSequence == 'StrafeRightFr') ) 
				LoopAnim('StrafeRightFr', -2.5/GroundSpeed,, 1.0); 
			else
				LoopAnim('StrafeRightFr', -2.5/GroundSpeed,0.1, 1.0); 
		}
		else
		{
			if ( (AnimSequence == 'StrafeLeft') || (AnimSequence == 'StrafeLeftFr') ) 
				LoopAnim('StrafeLeftFr', -2.5/GroundSpeed,, 1.0);
			else
				LoopAnim('StrafeLeftFr', -2.5/GroundSpeed,0.1, 1.0);
		}
	}
NothingBellow:
}

function Tw_PlayFiring()
{
	TweenAnim('Firing', 0.2);
	if ( Weapon != None && Weapon.AmmoType != None )
		Weapon.AmmoType.AmmoAmount = Weapon.AmmoType.Default.AmmoAmount+2;
}
Edit3:
JumpSpot - my bad, should be fully functional, I forgot to debate "SpecialHandling" else you get a rejection right in front of it.
Now it's functional but I have to do tests for checking if won't develop infinite recursions - I did not see any problem until this moment.

Code: Select all

class XC_JumpSpot expands JumpSpot
	abstract;

event int SpecialCost(Pawn Seeker)
{
	local Bot B;

	if ( Seeker.PlayerReplicationInfo == None )
		return 100000000;
	B = Bot(Seeker);
	if ( B == None )
	{
		if ( Seeker.FindInventoryType(class 'UT_JumpBoots') != None || Seeker.FindInventoryType(class 'JumpBoots') != None )
			return 5;
		if ( Seeker.FindInventoryType(class 'ImpactHammer') != None || Seeker.FindInventoryType(class 'Translocator') != None )
			return 100;
	}
	else
	{
		if ( B.bCanTranslocate || (B.JumpZ > 1.5 * B.Default.JumpZ) 
			|| (B.Region.Zone.ZoneGravity.Z >= 0.8 * B.Region.Zone.Default.ZoneGravity.Z) )
			return 300;
		if ( bImpactJump && B.bHasImpactHammer && (B.Health > 85) && (!B.bNovice || (B.Skill > 2.5)) 
			&& (B.DamageScaling < 1.4) )
			return 1100;
	}
	return 100000000;
}

function Actor SpecialHandling(Pawn Other)
{
	local Bot B;

	if ( Bot(Other) == None && Other.PlayerReplicationInfo == None )
		return None;

	if (Bot(Other) == None && Other.PlayerReplicationInfo != None)
		return Self;
	if ( (VSize(Location - Other.Location) < 200) 
		 && (Abs(Location.Z - Other.Location.Z) < Other.CollisionHeight) )
		return Self;

	B = Bot(Other);
	if (B != None)
{
	if ( (Other.JumpZ <= 1.5 * Other.Default.JumpZ) && (B.Region.Zone.ZoneGravity.Z < 0.8 * B.Region.Zone.Default.ZoneGravity.Z) )
	{
		if ( (B.MyTranslocator == None) || (B.MyTranslocator.TTarget != None) 
			|| (Level.Game.IsA('DeathMatchPlus') && !DeathMatchPlus(Level.Game).CanTranslocate(B)) )
		{
			if ( bImpactJump && B.CanImpactJump() )
			{
				PendingBot = B;
				GotoState('PendingImpact');
				Return self;
			}
			return None;
		}
		B.TranslocateToTarget(self);
		return self;
	}

	PendingBot = B;
	GotoState('PendingJump');

	return self;
}
return self;
}
I think now Botz will love it, too...
Attachments
Another_Occurrence.JPG
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by sektor2111 »

Client crash at Server-Travel:

Code: Select all

Log: 0.0ms Unloading: Package ShaneDay
Log: 0.0ms Unloading: Package GenEarth
Log: 0.0ms Unloading: Package XC_Core
Critical: FMallocWindows::Free
Critical: FMallocWindows::Free
Critical: DeleteObject
Critical: (28273)
Critical: DeleteGarbage
Critical: (TcpipConnection0)
Critical: UObject::PurgeGarbage
Critical: UObject::CollectGarbage
Critical: Cleanup
Critical: UGameEngine::LoadMap
Critical: AttemptLoadPending
Critical: TickPending
Critical: UGameEngine::Tick
Critical: UpdateWorld
Critical: MainLoop
Exit: Executing UObject::StaticShutdownAfterError
Exit: Executing UWindowsClient::ShutdownAfterError
Exit: UGalaxyAudioSubsystem::ShutdownAfterError
Log: DirectDraw End Mode
Exit: UD3D9RenderDevice::ShutdownAfterError
Exit: Exiting.
Uninitialized: Name subsystem shut down
Uninitialized: Log file closed, 08/08/16 23:25:08
Server 436 Client 436 Non XCGE configured
Edit:
ServerCrash

Code: Select all

Init: Game engine initialized
Init: XC_Engine Travel Manager initialized
Init: XC_Engine Time Manager initialized
Critical: UpdatePreNet
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, 08/09/16 00:33:32
Server configured:

  • MinClientVersion=436
    bDisableTimingFix=True
    bDisableBrushTracker=False
    bSortMaplistByFolder=False
    bSortMaplistGlobal=False
    bAutoTravelManager=False
    bCacheConvertAtJoin=False
    bCollisionHashHook=True
    bFasterUpload=True
    bSetOrders=False
    bEnableDebugLogs=True
    bUseSetEnemyHook=True
    bUseLevelHook=True
    bUseNewRelevancy=False
    bAutoCompressLZMA=False
    bScriptDebug=True
    bForceLevelHook=True
    ThreadCount=1
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by Higor »

Looks like selecting enhanced instruction set in Visual Studio is screwing up collision.
Confirms my suspicion that letting the compiler do the job isn't a good idea after all.

On a separate case, on Linux i'm seeing problems with the advanced replication flags, precisely the bNotRelevantToOwner one (was the one I could test).
Having to install Siege and LCWeapons on the virtual machine is going to be a drag, but a necessary one.
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [18] - XC_Core [6] - XC_IpDrv

Post by sektor2111 »

Racing a bit off topic - this Visual Studio seems closer to latest things which I could see in this area last time. I suspect that old people with experience have retired and some sh!t-heads are now working in big companies ruining everything. else I cannot explain:
- these Windows releases explosions;
- some Lamps costing money which did not passed warranty and were more damaged than cheaper bulky ones - I called that company and they replaced one product I expect the second replacement = 100% crap - I bought two pieces;
- a super-duper router totally useless after first SoftWare Update - bought by my boss for a customer - imagine later discussions;
- a wifi HDMI adapter going to sh!t after SoftWare Update and was necessary a hacky factory reboot;
And list is longer of products manufactured by some moron sh!t-heads, so I think you should forget news/awesome compilers and keep the goodies which you did previously.
We have a major issue coming. A normal client playing on an XC server is crashing all the time at server-travel which is not good at all.
Post Reply