Monster Match

Discussions about GameTypes
User avatar
Barbie
Godlike
Posts: 2792
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Re: Monster Match

Post by Barbie »

Thanks - could you please enable redirected downloads? Waiting 10 minutes for 6 MB is really annoying...^^
"Multiple exclamation marks," he went on, shaking his head, "are a sure sign of a diseased mind." --Terry Pratchett
User avatar
Deepu
Adept
Posts: 350
Joined: Mon Nov 11, 2013 7:56 am
Personal rank: Average
Location: India
Contact:

Re: Monster Match

Post by Deepu »

Oh I forgot that sorry adding....
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Monster Match

Post by sektor2111 »

I'm not sure how goes this thing:
[attachment=0]Class.png[/attachment]
That source is real ? I did not see class called in package and neither in U files. I was trying to start a match for figuring how goes...
Attachments
Class.png
User avatar
Deepu
Adept
Posts: 350
Joined: Mon Nov 11, 2013 7:56 am
Personal rank: Average
Location: India
Contact:

Re: Monster Match

Post by Deepu »

Please delete MMGameTest.u, MMGameTest. int & Sources (then join)
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Monster Match

Post by sektor2111 »

That one was a LOCAL game. If I'm deleting files I won't be able to launch nothing. If you want things fixed you should clarify how to start this game.
Steps needed:
1) Firing game - firing console;
2) Acting, killing, being killed - watching logs;
3) Firing server - opening console;
4) Firing client - console opened;
5) Firing with UCC+the rest of things;
6) Firing again client + console.

As long as I cannot start game I have to clean all those null classes called or I won't be able to fix anything just blindly.

Edit: Merged Posts my Myself.
Reason: Double Posting :loool:
Allright, I figured problem, maps was issue calling an unexistent class. I have renamed a DM one to MM.
I'm not sure if this is what was supposed to happen. A bunch of pawns in my Team and 1 single Fly on Blues, LOL.

There are a bunch of lines to solve... I'll see how goes problem with free time (because I need some) for this chapter.
Last edited by sektor2111 on Fri Nov 20, 2015 7:06 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: Monster Match

Post by sektor2111 »

.
Last edited by sektor2111 on Fri Nov 20, 2015 7:07 am, 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: Monster Match

Post by Deepu »

Also you can check in server. Thank you!
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Monster Match

Post by sektor2111 »

Deepak O V wrote:Also you can check in server. Thank you!
I was checking and almost to get late at job. Dude, if you don't have a redirect perhaps you will wanna try XC stuff for automated deal. It was nasty to wait a lot of minutes for a few MB, c'mon...
User avatar
Deepu
Adept
Posts: 350
Joined: Mon Nov 11, 2013 7:56 am
Personal rank: Average
Location: India
Contact:

Re: Monster Match

Post by Deepu »

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

Re: Monster Match

Post by sektor2111 »

Allright, because that function killed is loaded and aggressive I did some research using a tool which I did in clocking purpose using XC_Core. It's a mutator using this code:

Code: Select all

class Sp expands mutator;

var Pawn Birdie;
var bool bSpawned;

function PostBeginPlay()
{
	settimer(2,True);
}

event Timer()
{

	local float F[2], Time;

	SpawnCrap();
	class'XC_CoreStatics'.static.Clock( F);
	if ( Birdie != None ){};
	Time = class'XC_CoreStatics'.static.UnClock( F);
	log ("Proximity type took "$Time);
	if ( Birdie != None ) bSpawned = True;
	class'XC_CoreStatics'.static.Clock( F);
	if (bSPawned){};
	Time = class'XC_CoreStatics'.static.UnClock( F);
	log ("Bool type took "$Time);
	class'XC_CoreStatics'.static.Clock( F);
	if (Level.Game.IsA('DeathMatchPlus')){};
	Time = class'XC_CoreStatics'.static.UnClock( F);
	log ("Level Check Using ISA > "$Time);
	class'XC_CoreStatics'.static.Clock( F);
	if ( DeathMatchPlus(Level.Game) != None ){};
	Time = class'XC_CoreStatics'.static.UnClock( F);
	log ("Level Check Using Proximity > "$Time);
}

function SpawnCrap()
{
	Birdie = Spawn(class'Bird1');
}
And then logging results.

Code: Select all

ScriptLog: Proximity type took 0.000001
ScriptLog: Bool type took 0.000000
ScriptLog: Level Check Using ISA > 0.000001
ScriptLog: Level Check Using Proximity > 0.000001
ScriptLog: Proximity type took 0.000001
ScriptLog: Bool type took 0.000000
ScriptLog: Level Check Using ISA > 0.000001
ScriptLog: Level Check Using Proximity > 0.000000
ScriptLog: Proximity type took 0.000001
ScriptLog: Bool type took 0.000000
ScriptLog: Level Check Using ISA > 0.000001
ScriptLog: Level Check Using Proximity > 0.000001
ScriptLog: Proximity type took 0.000001
ScriptLog: Bool type took 0.000000
ScriptLog: Level Check Using ISA > 0.000001
ScriptLog: Level Check Using Proximity > 0.000001
ScriptLog: Proximity type took 0.000001
ScriptLog: Bool type took 0.000000
ScriptLog: Level Check Using ISA > 0.000001
ScriptLog: Level Check Using Proximity > 0.000001
ScriptLog: Proximity type took 0.000001
ScriptLog: Bool type took 0.000000
ScriptLog: Level Check Using ISA > 0.000001
ScriptLog: Level Check Using Proximity > 0.000000
Now I can figure something (not sure if you are interested) but:
Slower seems ISA check
A bit faster is Proximity check
Pretty Instant is Boolean
Let's see some sequence from killed which has the mostly 2 Instances:
1) Exist a Killer
2) There is no Killer
Which means a recommendation:

Code: Select all

function Killed(pawn killer, pawn Other, name damageType)
{
local bool bKiller, bKillerPlayer;

bKiller = If (Killer != None) //set boolean a bit faster
bKillerPlayer = if ( Killer != None && Killer.PlayerReplicationInfo != None )

//Start with evil stuff
if (!bKiller)
{
DoStuff();
return;
}
else //All stuff which means Killer != None
{
 //if (Other.IsA('MM_Fly')) changed to
if (MM_Fly(Other) != None)
{
if (bKillerPlayer)
 Killer.PlayerReplicationInfo.Score += mm_fly(other).scorevalue;
}
if (MM_pupae(Other) != None)
{
if (bKillerPlayer)
 killer.PlayerReplicationInfo.Score += mm_pupae(other).scorevalue;
}
.....
}
}
You will call Super only if you have player stuff else will be a cascade to engine which cannot really manage all kill types.
Just suggestions to speed up because is too much talk there. Else you can set and deal with booleans much fast than "bla != None" + ISA checks.
Also this scoring might be done Health dependant with a score-factor and that penalty calling a single time a monster.

Edit:_______
Continuing. The way of DeathMatchPLus should take in account "if (Other == None) return;" - this is EPIC code and I cannot be sure if it gets often called but for sure filter goes there through your Super.Killed.... SO... multiple calls to "if (Other != None)" doesn't make any sense after that return. I need some Light for brain here - self kills penalty added later after some score for even self kills...

Code: Select all

if ( (Killer != None) && (Other.IsA('MM_pupae')) ) //Simple check
{
	if (mm_pupae(other).bzombie)
	{
		killer.PlayerReplicationInfo.Score += -1; //But still wonder about PlayerReplicationInfo
	}
else
	{
		killer.PlayerReplicationInfo.Score += mm_pupae(other).scorevalue;
	}
}
//suicide//

	if ( (Other != None) && ((Killer == other) && (other.IsA('MM_Pupae'))
|| (Killer == none)) ) //No Killer here
killer.PlayerReplicationInfo.Score -= 3; //But trying to setup Score at None + Still wander about PlayerReplicationInfo
//because MMScorePri is a ReplicationInfo spawned and seems to make deals with Player Connected...
// That I need to track and log it for seeing how much spawns for which Owner.
User avatar
Deepu
Adept
Posts: 350
Joined: Mon Nov 11, 2013 7:56 am
Personal rank: Average
Location: India
Contact:

Re: Monster Match

Post by Deepu »

Some confusion. I recompile your new edited code with old code?
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Monster Match

Post by sektor2111 »

Deepak O V wrote: I recompile your new edited code with old code?
Not really, I gave examples and what I consider issues. You might check forward because that function is big, is not only about pupaes and fly, see the rest, try to understand conditions.

Okay - looking at "IsRelevant" - several things for me doesn't have code relevance.

Code: Select all

	if ( bArenaMutator )
	{
		if ( Other.IsA('Inventory')	&& (Inventory(Other).MyMarker != None) && !Other.IsA('MM_Ammo')&& !Other.IsA('MMAmmo')&& !Other.IsA('MM_MonsterTool')&& !Other.IsA('MMBronzeMonsterTool')&& !Other.IsA('MMGoldMonsterTool')&& !Other.IsA('MMMonsterTool')&& !Other.IsA('MMSilverMonsterTool')&& !Other.IsA('TournamentHealth')&& !Other.IsA('ThighPads')&& !Other.IsA('UT_JumpBoots')&& !Other.IsA('UT_ShieldBelt')&& !Other.IsA('Seeds')&& !Other.IsA('SCUBAGear')&& !Other.IsA('JumpBoots')&& !Other.IsA('Health')&& !Other.IsA('Flare')&& !Other.IsA('Flare')&& !Other.IsA('BerserkerPickup')&& !Other.IsA('BoostPickup')&& !Other.IsA('LifePickup')&& !Other.IsA('MonsterPickup')&& !Other.IsA('NaliSpiritPickup')&& !Other.IsA('SavingPickup')&& !Other.IsA('SavingsPickup')&& !Other.IsA('SpeedPickup')&& !Other.IsA('TitanTool')&& !Other.IsA('UnHolyPickup')&& !Other.IsA('MMShieldBelt')&& !Other.IsA('MonsterInventory'))

////Rakiayn: determine what pickups are allowed in mm////


		{
			Inventory(Other).MyMarker.markedItem = None;
			return false;
		}
	} else {
		if ( Other.IsA('Inventory')	&& (Inventory(Other).MyMarker != None) && !Other.IsA('MM_Ammo')&& !Other.IsA('MMAmmo')&& !Other.IsA('MM_MonsterTool')&& !Other.IsA('MMBronzeMonsterTool')&& !Other.IsA('MMGoldMonsterTool')&& !Other.IsA('MMMonsterTool')&& !Other.IsA('MMSilverMonsterTool')&& !Other.IsA('TournamentHealth')&& !Other.IsA('ThighPads')&& !Other.IsA('UT_JumpBoots')&& !Other.IsA('UT_ShieldBelt')&& !Other.IsA('Seeds')&& !Other.IsA('SCUBAGear')&& !Other.IsA('JumpBoots')&& !Other.IsA('Health')&& !Other.IsA('Flare')&& !Other.IsA('Flare')&& !Other.IsA('BerserkerPickup')&& !Other.IsA('BoostPickup')&& !Other.IsA('LifePickup')&& !Other.IsA('MonsterPickup')&& !Other.IsA('NaliSpiritPickup')&& !Other.IsA('SavingPickup')&& !Other.IsA('SavingsPickup')&& !Other.IsA('SpeedPickup')&& !Other.IsA('TitanTool')&& !Other.IsA('UnHolyPickup')&& !Other.IsA('MMShieldBelt')&& !Other.IsA('MonsterInventory'))

////Rakiayn: determine what pickups are allowed in mm////

		{
			Inventory(Other).MyMarker.markedItem = None;
			return false;
		}
	}
With or without bArenaMutator both conditions are the same. Why this double sort of check ? Simply put these once ignoring any "if-else" things. Perhaps things are simplified and accelerated if you have MMPickup as master class and all the rest are childs accepted. If stuff is not yours or a child of yours, simply discard it. You don't need bunches of checks.
User avatar
Deepu
Adept
Posts: 350
Joined: Mon Nov 11, 2013 7:56 am
Personal rank: Average
Location: India
Contact:

Re: Monster Match

Post by Deepu »

Code: Select all

	if ( bArenaMutator )
	{
		if ( Other.IsA('Inventory')	&& (Inventory(Other).MyMarker != None) && !Other.IsA('MM_Ammo')&& !Other.IsA('MMAmmo')&& !Other.IsA('MM_MonsterTool')&& !Other.IsA('MMBronzeMonsterTool')&& !Other.IsA('MMGoldMonsterTool')&& !Other.IsA('MMMonsterTool')&& !Other.IsA('MMSilverMonsterTool')&& !Other.IsA('TournamentHealth')&& !Other.IsA('ThighPads')&& !Other.IsA('UT_JumpBoots')&& !Other.IsA('UT_ShieldBelt')&& !Other.IsA('Seeds')&& !Other.IsA('SCUBAGear')&& !Other.IsA('JumpBoots')&& !Other.IsA('Health')&& !Other.IsA('Flare')&& !Other.IsA('BerserkerPickup')&& !Other.IsA('BoostPickup')&& !Other.IsA('LifePickup')&& !Other.IsA('MonsterPickup')&& !Other.IsA('NaliSpiritPickup')&& !Other.IsA('SavingPickup')&& !Other.IsA('SavingsPickup')&& !Other.IsA('SpeedPickup')&& !Other.IsA('TitanTool')&& !Other.IsA('UnHolyPickup')&& !Other.IsA('MMShieldBelt')&& !Other.IsA('MonsterInventory'))

////Rakiayn: determine what pickups are allowed in mm////


		{
			Inventory(Other).MyMarker.markedItem = None;
			return false;
		}
	}
		return Super.IsRelevant(Other);
}
See this. If we can't fix these errors release this version of MM?
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Monster Match

Post by sektor2111 »

That "if (bArenaMutator)" is useless. Controller does the same thing. if bArena else THE SAME - Why this kinda Left-Right Nothing code ? Did you understand what is there ?
User avatar
Deepu
Adept
Posts: 350
Joined: Mon Nov 11, 2013 7:56 am
Personal rank: Average
Location: India
Contact:

Re: Monster Match

Post by Deepu »

OK leave it that code. We can release this version of MM or release fully fixed version?
Post Reply