Unreal Tournament 469

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

Re: Unreal Tournament 469

Post by sektor2111 »

ScriptedPawn do seems to have new bool functions, interesting stuff but... I don't know how do they work with old assets, perhaps net drivers are having some fine tuning and also garbage collector... I cannot speak without a document or without testing these intensive. At least mods which I've done years ago don't seems to have problems...
Okay, I must check that UTDMT myself - the one which I fixed, not that wreck spamming logs with junks...
User avatar
Deepu
Adept
Posts: 350
Joined: Mon Nov 11, 2013 7:56 am
Personal rank: Average
Location: India
Contact:

Re: Unreal Tournament 469

Post by Deepu »

Confirmed Team Monsters are not supported with new patch, works with 436, 451 & 451b.

Code: Select all

ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold2 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold2 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold2 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold2 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold3 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold3 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_MercenaryEliteGold MM-Harobed.MM_MercenaryEliteGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold3 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold3 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold3 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliRabbitGold MM-Harobed.MM_NaliRabbitGold3 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_SkaarjBerserkerGold MM-Harobed.MM_SkaarjBerserkerGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_KrallGold MM-Harobed.MM_KrallGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliWarriorGold MM-Harobed.MM_NaliWarriorGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_SkaarjBerserkerGold MM-Harobed.MM_SkaarjBerserkerGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_PupaeGold MM-Harobed.MM_PupaeGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_PupaeGold MM-Harobed.MM_PupaeGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_PupaeGold MM-Harobed.MM_PupaeGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_NaliWarriorGold MM-Harobed.MM_NaliWarriorGold1 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_SkaarjBerserkerGold MM-Harobed.MM_SkaarjBerserkerGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
ScriptWarning: MM_PupaeGold MM-Harobed.MM_PupaeGold0 (Function MMG3.MM_Monsters.SetEnemy:04F6) Accessed None 'NewEnemy'
I'm analyzing what happened in new patch!
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Unreal Tournament 469

Post by sektor2111 »

CTF-FaceTitans
Tested using my custom CTF and UTDMT (adjusted version).
No issues have been encountered.
So my paranoid codes don't need any update... good news for me :lol2: .
A single time a red Titan did not respawn, perhaps place was taken by a Team Bot.

No worries yet, not everything is cool at game-travel known as server-travel to the same map...
CrashesAtServerTravel.PNG
CrashesAtServerTravel.PNG (10.49 KiB) Viewed 593 times
Last edited by sektor2111 on Tue Jun 30, 2020 8:16 pm, edited 1 time in total.
User avatar
Deepu
Adept
Posts: 350
Joined: Mon Nov 11, 2013 7:56 am
Personal rank: Average
Location: India
Contact:

Re: Unreal Tournament 469

Post by Deepu »

where you fixed? i can't able find that error, i'm getting tons of accessed nones errors

Code: Select all

function bool SetEnemy( Pawn NewEnemy )
{
	local bool result;
	local eAttitude newAttitude, oldAttitude;
	local bool noOldEnemy;
	local float newStrength;

	if ( !IsAlivePawn(NewEnemy) ||
	     NewEnemy == self ||
		 NewEnemy.IsA('Spectator') ||
		 NewEnemy.IsA('FlockPawn') ||
		 NewEnemy.GetStateName() == 'PlayerWaiting' ||
	    (!bCanWalk && !bCanFly && !NewEnemy.FootRegion.Zone.bWaterZone) )
	    return false;
	if ( PlayerReplicationInfo != None && NewEnemy.PlayerReplicationInfo != None && Level.Game.bTeamGame )
	{
		if ( NewEnemy.PlayerReplicationInfo.Team == 255 ||
			PlayerReplicationInfo.Team == NewEnemy.PlayerReplicationInfo.Team )
				return false;
	}
	noOldEnemy = (Enemy == None);
	result = false;
	newAttitude = AttitudeTo(NewEnemy);
	if ( !noOldEnemy )
	{
		if (Enemy == NewEnemy)
			return true;
		else if ( NewEnemy.bIsPlayer && (AlarmTag != '') )
		{
			OldEnemy = Enemy;
			Enemy = NewEnemy;
			result = true;
		} 
		else if ( newAttitude == ATTITUDE_Friendly )
		{
			if ( bIgnoreFriends || NewEnemy.Enemy == NewEnemy )
				return false;
			if ( (NewEnemy.Enemy != None) && (NewEnemy.Enemy.Health > 0) && NewEnemy.Enemy != NewEnemy ) 
			{
				if ( NewEnemy.Enemy.bIsPlayer && (NewEnemy.AttitudeToPlayer < AttitudeToPlayer) )
					AttitudeToPlayer = NewEnemy.AttitudeToPlayer;
				if ( AttitudeTo(NewEnemy.Enemy) < AttitudeTo(Enemy) )
				{
					OldEnemy = Enemy;
					Enemy = NewEnemy.Enemy;
					result = true;
				}
			}
		}
		else 
		{
			oldAttitude = AttitudeTo(Enemy);
			if ( (newAttitude < oldAttitude) || 
				( (newAttitude == oldAttitude) 
					&& ((VSize(NewEnemy.Location - Location) < VSize(Enemy.Location - Location)) 
						|| !LineOfSightTo(Enemy)) ) ) 
			{
				if ( bIsPlayer && Enemy.IsA('PlayerPawn') && !NewEnemy.IsA('PlayerPawn') )
				{
					newStrength = relativeStrength(NewEnemy);
					if ( (newStrength < 0.2) && (relativeStrength(Enemy) < FMin(0, newStrength))  
						&& (IsInState('Hunting')) && (Level.TimeSeconds - HuntStartTime < 5) )
						result = false;
					else
					{
						result = true;
						OldEnemy = Enemy;
						Enemy = NewEnemy;
					}
				} 
				else
				{
					result = true;
					OldEnemy = Enemy;
					Enemy = NewEnemy;
				}
			}
		}
	}
	else if ( newAttitude < ATTITUDE_Ignore )
	{
		result = true;
		Enemy = NewEnemy;
	}
	else if ( newAttitude == ATTITUDE_Friendly )
	{
		if ( NewEnemy.bIsPlayer && (AlarmTag != '') )
		{
			Enemy = NewEnemy;
			result = true;
		} 
		if (bIgnoreFriends)
			return false;

		if ( (NewEnemy.Enemy != None) && (NewEnemy.Enemy.Health > 0) ) 
		{
			result = true;
			Enemy = NewEnemy.Enemy;
			if (Enemy.bIsPlayer)
				AttitudeToPlayer = ScriptedPawn(NewEnemy).AttitudeToPlayer;
			else if ( (ScriptedPawn(NewEnemy) != None) && (ScriptedPawn(NewEnemy).Hated == Enemy) )
				Hated = Enemy;
		}
	}

	if ( result )
	{
		LastSeenPos = Enemy.Location;
		LastSeeingPos = Location;
		EnemyAcquired();
		if ( !bFirstHatePlayer && Enemy.bIsPlayer && (FirstHatePlayerEvent != '') )
			TriggerFirstHate();
	}
	else if ( NewEnemy.bIsPlayer && (NewAttitude < ATTITUDE_Threaten) )
		OldEnemy = NewEnemy;
				
	return result;
}

function eAttitude AttitudeTo(Pawn Other)
{
	if ( PlayerReplicationInfo != None && Other.PlayerReplicationInfo != None && Level.Game.bTeamGame )
	{
		if ( Other.PlayerReplicationInfo.Team == 255 ||
			PlayerReplicationInfo.Team == Other.PlayerReplicationInfo.Team )
			return ATTITUDE_Friendly;
	}
	return Super.AttitudeTo(Other);
}
User avatar
OjitroC
Godlike
Posts: 3605
Joined: Sat Sep 12, 2015 8:46 pm

Re: Unreal Tournament 469

Post by OjitroC »

sektor2111 wrote: Tue Jun 30, 2020 7:24 pm ScriptedPawn do seems to have new bool functions, interesting stuff but... I don't know how do they work with old assets,
So what's going to happen with existing custom 'monsters' subclassed from ScriptedPawn? Presumably, when using them in 469, the new ScriptedPawn class will be looking for those bool functions in the old 'monsters' and won't find them - or is that not the way it works?
User avatar
Deepu
Adept
Posts: 350
Joined: Mon Nov 11, 2013 7:56 am
Personal rank: Average
Location: India
Contact:

Re: Unreal Tournament 469

Post by Deepu »

This is only happens for Team based monsters, not MH, i think
User avatar
EvilGrins
Godlike
Posts: 9668
Joined: Thu Jun 30, 2011 8:12 pm
Personal rank: God of Fudge
Location: Palo Alto, CA
Contact:

Re: Unreal Tournament 469

Post by EvilGrins »

Deepu wrote: Tue Jun 30, 2020 8:08 pm This is only happens for Team based monsters, not MH, i think
Makes sense, UTDMW & UTDMT don't work in MH. I tried numerous times to incorporate them but with no luck.

viewtopic.php?f=5&t=5035
http://unreal-games.livejournal.com/
Image
medor wrote:Replace Skaarj with EvilGrins :mrgreen:
Smilies · viewtopic.php?f=8&t=13758
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Unreal Tournament 469

Post by sektor2111 »

@Deepu
I did not fix anything anywhere but I'm assuming this SetEnemy gets called at your pawns for some reason and.... NewEnemy it's None. If I well recall, I think I wrote my own SetEnemy in that UTDMT and then... it runs my code not 469 code...
The thing is you might need to rewrite this SetEnemy based on your needs.
Top wrapping might be as I do in all my Bool

Code: Select all

if (NewEnemy == None)
	return False;
If I'm looking at this call

Code: Select all

if (!IsAlivePawn(NewEnemy).........
For me if NewEnemy is equal with a NONE it will sound like

Code: Select all

if (!IsAlivePawn(None)......... //Accessed None
And then I might expect a None access. What do you think ?
And now the big questions: Who does this SetEnemy call and/or how is this enemy removed or none ?
User avatar
Deepu
Adept
Posts: 350
Joined: Mon Nov 11, 2013 7:56 am
Personal rank: Average
Location: India
Contact:

Re: Unreal Tournament 469

Post by Deepu »

I discovered the bug,

before i used this, this function is calling to super for scriptedpawn's function eAttitude AttitudeTo(Pawn Other)

Code: Select all

function eAttitude AttitudeTo(Pawn Other)
{
	if ( PlayerReplicationInfo != None && Other.PlayerReplicationInfo != None && Level.Game.bTeamGame )
	{
		if ( Other.PlayerReplicationInfo.Team == 255 ||
			PlayerReplicationInfo.Team == Other.PlayerReplicationInfo.Team )
			return ATTITUDE_Friendly;
	}
	return Super.AttitudeTo(Other);
}
Now i changed to whole function eAttitude AttitudeTo(Pawn Other)

Code: Select all

function eAttitude AttitudeTo(Pawn Other)
{
	if ( PlayerReplicationInfo != None && Other.PlayerReplicationInfo != None && Level.Game.bTeamGame )
	{
		if ( Other.PlayerReplicationInfo.Team == 255 ||
			PlayerReplicationInfo.Team == Other.PlayerReplicationInfo.Team )
			return ATTITUDE_Friendly;
	}
	if ( Other == None )
		return ATTITUDE_Ignore;
	if (Other.bIsPlayer)
	{
		if ( bIsPlayer && Level.Game.bTeamGame && (Other.PlayerReplicationInfo != none) && (Team == Other.PlayerReplicationInfo.Team) )
			return ATTITUDE_Friendly;
		else if ( (Intelligence > BRAINS_None) && 
			((AttitudeToPlayer == ATTITUDE_Hate) || (AttitudeToPlayer == ATTITUDE_Threaten) 
				|| (AttitudeToPlayer == ATTITUDE_Fear)) )
		{
			if (RelativeStrength(Other) > Aggressiveness)
				AttitudeToPlayer = AttitudeWithFear();
			else if (AttitudeToPlayer == ATTITUDE_Fear)
				AttitudeToPlayer = ATTITUDE_Hate;
		}
		return AttitudeToPlayer;
	}
	else if (Hated == Other)
	{
		if (RelativeStrength(Other) >= Aggressiveness)
			return AttitudeWithFear();
		else 
			return ATTITUDE_Hate;
	}
	else if ( (TeamTag != '') && (ScriptedPawn(Other) != None) && (TeamTag == ScriptedPawn(Other).TeamTag) )
		return ATTITUDE_Friendly;
	else	
		return AttitudeToCreature(Other);
}
Problem resolved!!!
Buggie
Godlike
Posts: 2697
Joined: Sat Mar 21, 2020 5:32 am

Re: Unreal Tournament 469

Post by Buggie »

I have few suggestion/wishes for new patch.

1. Make possibility store bot patches separate from map. Great example is DM-Deck-16][ and teleport to Redemeer. Bots can not use this, because teleport outside from map. So this navigation point outside net of bot patches.
It is very easy to fix, but you can not do this without package mismatch. But this thing (bot pathes) need only on server. it is not need for clients.
So can be good if this can be fixed without some hack stuff (like mutator which fix patches on level load).
Maybe good if this part of map can be override from some file named similar but with different extension. And this file created by some new option in UnrealEd, like "build patches and store in separate file".

2. Make UnrealEd proper search for Tag and Event. At least for prebuild classes like Dispatcher and RoundRobin. You can not find this Actors by their internal Events on current search in UnrealEd 2.0.
Possible make interface for searcher for custom classes.
Also will be good if engine draw lines between Dispatcher and target Actors too with same manner. Currently it is not happen because used not Event property.
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Unreal Tournament 469

Post by sektor2111 »

Buggie wrote: Tue Jun 30, 2020 9:31 pm 1. Make possibility store bot patches separate from...
...
Totally agree here. Some stuff can be doable as XC extension at server level and even for Editor as a builder-plugin - client can have other deals...
Buggie wrote: Tue Jun 30, 2020 9:31 pm At least for prebuild classes like Dispatcher and RoundRobin
Don't forget StochasticTrigger...
User avatar
anth
Adept
Posts: 257
Joined: Thu May 13, 2010 2:23 am

Re: Unreal Tournament 469

Post by anth »

It is/was not our intention to change the intended behavior of any bots/scripted pawns. If the behavior of team scripted pawns changed, then you should report this as a bug so we can fix it.

@sektor: When exactly does this crash trigger? Can you report the bug at oldunreal please? I often overlook bugs that are reported here.
Buggie
Godlike
Posts: 2697
Joined: Sat Mar 21, 2020 5:32 am

Re: Unreal Tournament 469

Post by Buggie »

1. No one talks about changing behavior. It's about dividing (or make part loadable with override) the map into parts so that you can rebuild the path without getting the difference of the packets.

On the other hand, if the problem of packet mismatch is resolved (and it will be resolved, as previously reported), then the question is not so urgent.
Especially in light of the fact that you can set the normal speed for downloading packages.

2. This is a bug. Actors search does not find some features by Tag or Event, if they are not specified in the standard fields.
Last edited by Buggie on Wed Jul 01, 2020 11:53 am, edited 1 time in total.
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Unreal Tournament 469

Post by sektor2111 »

anth wrote: Wed Jul 01, 2020 7:34 am When exactly does this crash trigger? Can you report the bug at oldunreal please? I often overlook bugs that are reported here
Miss-understanding. Buggie said about finding some specified Events, what actor does these, it's not a crash problem. Dispatcher uses a list of events not shown - it's harder to debug a map this way. These are aren't shown as arrows pointing a future trigger action. He wants showing all Red-Arrows heading to Tags for a game specified trigger action. Also such actors causing events in other way known to me are StochasticTriggers and RoundRobin. Their internal Events aren't showing where triggering is taking action, what actors are targeted in these internal Events. Editor shows only arrows Event -> Tag.

If you ask me about picture above, it's a crash happening at playing the same map again in a practice session - I often see this and I had to restart UT for still playing the same map - testing a map requires playing it multiple times.

Next:
You don't need to head Pawn to a closer Navigation Node (ANY NODE) if this has ExtraCost = 100,000,000 - If node has that thing modified there are reasons for that - this node should not be reachable until has a normal navigable ExtraCost and then unlocking path - this sounds more logic to me. If this node is a searching goal, I understand to find it (from a closer point like any actor) but not taking it as RouteCache[0] followed by next paths when this has a locked ExtraCost.
Buggie
Godlike
Posts: 2697
Joined: Sat Mar 21, 2020 5:32 am

Re: Unreal Tournament 469

Post by Buggie »

Another notice: In UnrealEd 2.0 search dialog in code do not handle Enter as press "Find" button.
Post Reply