Need assistance with a small weapon replacement mutator:

You need help? It's here!
Post Reply
LegendaryAgent
Member
Posts: 80
Joined: Thu 29 Sep , 2011 12:26 am
Contact:

Need assistance with a small weapon replacement mutator:

Post by LegendaryAgent » Thu 29 Sep , 2011 12:36 am

Hey guys, i want to use this mutator because i have messed up a bit with it already and suited it to my server needs, the mutator is called swaptoolv11, however there is a slight problem with it right now, it changes inventory weapons for players, bots and even monsters, and thats actually my problem really, it shouldnt change weapons for monsters as it makes the server crash because of that.

I know where its doing that change in the inventory i know where to block it but i just dont know what if statement i must use to filter monsters, to make it easier for you i have bolded the key section where it needs to be filtered, technically all i am looking for is something like:
If (Actor != Monster)
{
if ( NextMutator != None )
return NextMutator.GetInventoryClassOverride(InventoryClassName);
return InventoryClassName;
}

Code: Select all

//==============================================================================
// SwapTool for Unreal Tournament 2004
// Version 1.1
// 2/3/2005
// Author - Matt Miller a.k.a. T-Bone
//==============================================================================
class MutSwapTool1A extends Mutator
	config(SwapToolV111A);

var config int bSwapWeapon[17];
var config string WeaponClassName[17];
var class<Weapon> WeaponClass[17];
var string WeaponAmmoName[12];

var config int bSwapVehicle[17];
var config string VehicleClassName[9];
var class<SVehicle> VehicleClass[9];

var class<Weapon> StandardWeaponClass[18];
var string StandardWeaponAmmoName[12];
var class<Weapon> DummyWeaponClass;
var string DummyWeaponClassName;

var class<SVehicle> BPVehicleClass[3];

var class<Weapon> CustomWeaponClassFix[2];
var string CustomAmmoClassFix[2];

// Add third party weapon/vehicle packages to Server Packages list
event PreBeginPlay()
{
	local array<string> ServerPackageNames;
	local string CurPackage;
	local bool bNonRepeat;
	local int i, j;

	Super.PreBeginPlay();

	for (i=0; i<17; i++)
	{
		if ( InStr(WeaponClassName[i], ".") != -1 && bool(bSwapWeapon[i]) )
		{
			CurPackage = Left(WeaponClassName[i], InStr(WeaponClassName[i], ".") );

			if (CurPackage != "XWeapons" && CurPackage != "UTClassic" && CurPackage != "Onslaught" && CurPackage != "OnslaughtFull")
			{
				bNonRepeat = True;

				for (j=0; j < ServerPackageNames.Length; j++)
				{
					if (CurPackage == ServerPackageNames[j])
					{
						bNonRepeat = False;
						break;
					}
				}

				if (bNonRepeat)
					ServerPackageNames[ServerPackageNames.Length] = CurPackage;
			}
		}
	}

	for (i=0; i<9; i++)
	{
		if ( InStr(VehicleClassName[i], ".") != -1 && bool(bSwapVehicle[i]) )
		{
			CurPackage = Left(VehicleClassName[i], InStr(VehicleClassName[i], ".") );

			if (CurPackage != "Onslaught" && CurPackage != "OnslaughtFull" && CurPackage != "OnslaughtBP")
			{
				bNonRepeat = True;

				for (j=0; j < ServerPackageNames.Length; j++)
				{
					if (CurPackage == ServerPackageNames[j])
					{
						bNonRepeat = False;
						break;
					}
				}

				if (bNonRepeat)
					ServerPackageNames[ServerPackageNames.Length] = CurPackage;
			}
		}
	}

	for (i=0; i < ServerPackageNames.Length; i++)
	{
		AddToPackageMap(ServerPackageNames[i]);
	}
}

function PostBeginPlay()
{
	local int i;

	Super.PostBeginPlay();

	// Load Weapons
	for (i=0; i < 17; i++)
	{
		if (WeaponClassName[i] ~= "none" || !bool(bSwapWeapon[i]) )
			WeaponClass[i] = None;
		else
			WeaponClass[i] = class<Weapon>(DynamicLoadObject(WeaponClassName[i],class'Class'));
	}

	// Get Ammo Class Names
	for (i=2; i < 14; i++)
	{
		if ( (WeaponClass[i] != None) && (WeaponClass[i].default.FireModeClass[0] != None)
			&& (WeaponClass[i].default.FireModeClass[0].default.AmmoClass != None)
			&& (WeaponClass[i].default.FireModeClass[0].default.AmmoClass.default.PickupClass != None) )
			WeaponAmmoName[i-2] = string(WeaponClass[i].default.FireModeClass[0].default.AmmoClass.default.PickupClass);
		else if ( WeaponClass[i] == CustomWeaponClassFix[0] )
			WeaponAmmoName[i-2] = CustomAmmoClassFix[0];
		else if ( WeaponClass[i] == CustomWeaponClassFix[1] )
			WeaponAmmoName[i-2] = CustomAmmoClassFix[1];
		else
			WeaponAmmoName[i-2] = "none";

	}

	// Load Vehicles
	for (i=0; i < 9; i++)
	{
		if (VehicleClassName[i] ~= "none" || !bool(bSwapVehicle[i]) )
			VehicleClass[i] = None;
		else
			VehicleClass[i] = class<SVehicle>(DynamicLoadObject(VehicleClassName[i],class'Class'));
	}

	// Load BPVehicles
	BPVehicleClass[0] = class<SVehicle>(DynamicLoadObject("OnslaughtBP.ONSDualAttackCraft",class'Class',True));
	BPVehicleClass[1] = class<SVehicle>(DynamicLoadObject("OnslaughtBP.ONSArtillery",class'Class',True));
	BPVehicleClass[2] = class<SVehicle>(DynamicLoadObject("OnslaughtBP.ONSShockTank",class'Class',True));

	SetTimer(0.1,False);
}

function Timer()
{
	local ONSVehicleFactory Factory;

	foreach AllActors(class'ONSVehicleFactory', Factory)
	{
		switch (Factory.VehicleClass)
		{
			// Replace Manta
			case Class'Onslaught.ONSHoverBike':
				if (bool(bSwapVehicle[0]))
				{
					if (VehicleClass[0] == None)
					{
						Factory.Deactivate();
						Factory.bNeverActivate = True;
					}
					else
						Factory.VehicleClass = VehicleClass[0];
				}
				break;

			// Replace Scorpion
			case Class'Onslaught.ONSRV':
				if (bool(bSwapVehicle[1]))
				{
					if (VehicleClass[1] == None)
					{
						Factory.Deactivate();
						Factory.bNeverActivate = True;
					}
					else
						Factory.VehicleClass = VehicleClass[1];
				}
				break;

			// Replace Hellbender
			case Class'Onslaught.ONSPRV':
				if (bool(bSwapVehicle[2]))
				{
					if (VehicleClass[2] == None)
					{
						Factory.Deactivate();
						Factory.bNeverActivate = True;
					}
					else
						Factory.VehicleClass = VehicleClass[2];
				}
				break;

			// Replace Raptor
			case Class'Onslaught.ONSAttackCraft':
				if (bool(bSwapVehicle[3]))
				{
					if (VehicleClass[3] == None)
					{
						Factory.Deactivate();
						Factory.bNeverActivate = True;
					}
					else
						Factory.VehicleClass = VehicleClass[3];
				}
				break;

			// Replace Goliath
			case Class'Onslaught.ONSHoverTank':
				if (bool(bSwapVehicle[4]))
				{
					if (VehicleClass[4] == None)
					{
						Factory.Deactivate();
						Factory.bNeverActivate = True;
					}
					else
						Factory.VehicleClass = VehicleClass[4];
				}
				break;

			// Replace Leviathan
			case Class'OnslaughtFull.ONSMobileAssaultStation':
				if (bool(bSwapVehicle[5]))
				{
					if (VehicleClass[5] == None)
					{
						Factory.Deactivate();
						Factory.bNeverActivate = True;
					}
					else
						Factory.VehicleClass = VehicleClass[5];
				}
				break;

			// Replace Cicada
			case BPVehicleClass[0]:
				if (bool(bSwapVehicle[6]))
				{
					if (VehicleClass[6] == None)
					{
						Factory.Deactivate();
						Factory.bNeverActivate = True;
					}
					else
						Factory.VehicleClass = VehicleClass[6];
				}
				break;

			// Replace SPMA
			case BPVehicleClass[1]:
				if (bool(bSwapVehicle[7]))
				{
					if (VehicleClass[7] == None)
					{
						Factory.Deactivate();
						Factory.bNeverActivate = True;
					}
					else
						Factory.VehicleClass = VehicleClass[7];
				}
				break;

			// Replace Paladin
			case BPVehicleClass[2]:
				if (bool(bSwapVehicle[8]))
				{
					if (VehicleClass[8] == None)
					{
						Factory.Deactivate();
						Factory.bNeverActivate = True;
					}
					else
						Factory.VehicleClass = VehicleClass[8];
				}
				break;
		}
	}
}

function string GetInventoryClassOverride(string InventoryClassName)
{
	local int i;
	// Replace default weapons in LMS
	for (i=0; i < 3; i++)
	{
		if ( InventoryClassName == string(StandardWeaponClass[i]) )
		{
			if (bool(bSwapWeapon[i]))
			{
				if ( WeaponClass[i] != None )
					InventoryClassName = WeaponClassName[i];
				else
					InventoryClassName = DummyWeaponClassName;
			}

			if ( i == 17 )
                	{
				InventoryClassName = WeaponClassName[5];
                	}
			break;
		}
	}
 	if ( NextMutator != None )
	return NextMutator.GetInventoryClassOverride(InventoryClassName);
	return InventoryClassName; 
}


function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
{
	local WeaponLocker L;
	local int i, j;

	bSuperRelevant = 0;

	// Swap out default weapon pickups with our weapon pickups
	if ( Other.IsA('xWeaponBase') )
	{
		for (i=2; i < 17; i++)
		{
			if ( xWeaponBase(Other).WeaponType == StandardWeaponClass[i] )
			{
				if (bool(bSwapWeapon[i]))
				{
					if ( WeaponClass[i] != None )
					{
						xWeaponBase(Other).WeaponType = WeaponClass[i];
						return True;
					}
					else
					{
						xWeaponBase(Other).WeaponType = DummyWeaponClass;
						xWeaponBase(Other).bHidden = True;
						if (xWeaponBase(Other).myEmitter != None)
							xWeaponBase(Other).myEmitter.Destroy();
					}
				}
				break;
			}
		}
	}

	// Swap out default ammo pickups with our ammo pickups
	// AmbientGlow mess is just my way of tagging ammo that has already been replaced
	else if ( Other.IsA('Ammo') && Other.AmbientGlow != 117 )
	{
		for (i=0; i < 12; i++)
		{
			if (string(Other.Class) == StandardWeaponAmmoName[i])
			{
				if (bool(bSwapWeapon[i+2]) && WeaponAmmoName[i] != StandardWeaponAmmoName[i])
				{
					if (WeaponAmmoName[i] != "none")
						ReplaceWith(Other, WeaponAmmoName[i]);
					return False;
				}
				break;
			}
		}
	}

	// Swap out default weapons inside lockers with our weapons
	else if (WeaponLocker(Other) != None)
	{
		L = WeaponLocker(Other);
		for (j = 0; j < L.Weapons.Length; j++)
		{
			for (i=0; i < 17; i++)
			{
				if ( L.Weapons[j].WeaponClass == StandardWeaponClass[i] )
				{
					if (bool(bSwapWeapon[i]))
					{
						if (WeaponClass[i] != None)
							L.Weapons[j].WeaponClass = WeaponClass[i];
						else
							L.Weapons[j].WeaponClass = DummyWeaponClass;
					}
					break;
				}
			}
		}
	}

	return True;
}

function bool ReplaceWith(actor Other, string aClassName)
{
	local Actor A;
	local class<Actor> aClass;

	if ( aClassName == "" )
		return true;

	aClass = class<Actor>(DynamicLoadObject(aClassName, class'Class'));

	if ( class<Ammo>(aClass) != None )
		class<Ammo>(aClass).Default.AmbientGlow = 117; // Tag replacement ammo

	if ( aClass != None )
		A = Spawn(aClass,Other.Owner,Other.tag,Other.Location, Other.Rotation);
	if ( Other.IsA('Pickup') )
	{
		if ( Pickup(Other).MyMarker != None )
		{
			Pickup(Other).MyMarker.markedItem = Pickup(A);
			if ( Pickup(A) != None )
			{
				Pickup(A).MyMarker = Pickup(Other).MyMarker;
				A.SetLocation(A.Location
					+ (A.CollisionHeight - Other.CollisionHeight) * vect(0,0,1));
			}
			Pickup(Other).MyMarker = None;
		}
		else if ( A.IsA('Pickup') )
			Pickup(A).Respawntime = 0.0;
	}

	class<Ammo>(aClass).Default.AmbientGlow = 128;

	if ( A != None )
	{
		A.event = Other.event;
		A.tag = Other.tag;
		return true;
	}
	return false;
}

defaultproperties
{
     CustomWeaponClassFix(0)=Class'ChaosUT.Claw'
     CustomWeaponClassFix(1)=Class'ChaosUT.CGL'
     StandardWeaponClass(0)=Class'XWeapons.Translauncher'
     StandardWeaponClass(1)=Class'XWeapons.ShieldGun'
     StandardWeaponClass(2)=Class'XWeapons.AssaultRifle'
     StandardWeaponClass(3)=Class'XWeapons.BioRifle'
     StandardWeaponClass(4)=Class'XWeapons.ShockRifle'
     StandardWeaponClass(5)=Class'XWeapons.LinkGun'
     StandardWeaponClass(6)=Class'XWeapons.Minigun'
     StandardWeaponClass(7)=Class'XWeapons.FlakCannon'
     StandardWeaponClass(8)=Class'XWeapons.RocketLauncher'
     StandardWeaponClass(9)=Class'XWeapons.SniperRifle'
     StandardWeaponClass(10)=Class'UTClassic.ClassicSniperRifle'
     StandardWeaponClass(11)=Class'Onslaught.ONSMineLayer'
     StandardWeaponClass(12)=Class'Onslaught.ONSGrenadeLauncher'
     StandardWeaponClass(13)=Class'Onslaught.ONSAVRiL'
     StandardWeaponClass(14)=Class'OnslaughtFull.ONSPainter'
     StandardWeaponClass(15)=Class'XWeapons.Painter'
     StandardWeaponClass(16)=Class'XWeapons.Redeemer'
     StandardWeaponClass(17)=Class'UT2004RPG.RPGLinkGun'
     CustomAmmoClassFix(0)="ChaosUT.ClawProxyAmmoPickup"
     CustomAmmoClassFix(1)="ChaosUT.CGLStandardAmmoPickup"
     StandardWeaponAmmoName(0)="XWeapons.AssaultAmmoPickup"
     StandardWeaponAmmoName(1)="XWeapons.BioAmmoPickup"
     StandardWeaponAmmoName(2)="XWeapons.ShockAmmoPickup"
     StandardWeaponAmmoName(3)="XWeapons.LinkAmmoPickup"
     StandardWeaponAmmoName(4)="XWeapons.MinigunAmmoPickup"
     StandardWeaponAmmoName(5)="XWeapons.FlakAmmoPickup"
     StandardWeaponAmmoName(6)="XWeapons.RocketAmmoPickup"
     StandardWeaponAmmoName(7)="XWeapons.SniperAmmoPickup"
     StandardWeaponAmmoName(8)="UTClassic.ClassicSniperAmmoPickup"
     StandardWeaponAmmoName(9)="Onslaught.ONSMineAmmoPickup"
     StandardWeaponAmmoName(10)="Onslaught.ONSGrenadeAmmoPickup"
     StandardWeaponAmmoName(11)="Onslaught.ONSAVRiLAmmoPickup"
     DummyWeaponClass=Class'SwapToolV111A.STDummyW1A'
     DummyWeaponClassName="SwapToolV111A.STDummyW1A"
     ConfigMenuClassName="SwapToolV111A.SwapToolConfig1A"
     GroupName="SwapTool1A"
     FriendlyName="SwapTool1A"
     Description="Swap out default weapons and vehicles with those of your choosing.||version 1A based on V1.1"
}


Thats kinda it, sorry if this is as easy as i think it is, i just dont know what to replace if (actor != monster) with...

Thanks in advance!

LegendaryAgent
Member
Posts: 80
Joined: Thu 29 Sep , 2011 12:26 am
Contact:

Re: Need assistance with a small weapon replacement mutator:

Post by LegendaryAgent » Thu 29 Sep , 2011 1:15 am

i understand that this is more time consuming than i have imagined, was hoping that i could someone replace t hat if statement with something that could filter block monsters through, well if is trully that time consuming then nvm, i can live with making a custom class for the assaultrifle or something for the monsters, its not the prettiest thing to work around but it beats having the server crashing all the time lol.

Cheers!

iZumo
Disappeared Administrator
Posts: 4196
Joined: Fri 19 Mar , 2010 1:21 am
Location: Earth
Contact:

Re: Need assistance with a small weapon replacement mutator:

Post by iZumo » Thu 29 Sep , 2011 1:48 pm

When placing a monster on the map, in UnrealPawn section set "bNoDefaultInventory" to true.

LegendaryAgent
Member
Posts: 80
Joined: Thu 29 Sep , 2011 12:26 am
Contact:

Re: Need assistance with a small weapon replacement mutator:

Post by LegendaryAgent » Thu 29 Sep , 2011 5:47 pm

Izumo_CZ wrote:When placing a monster on the map, in UnrealPawn section set "bNoDefaultInventory" to true.

heya thx for the help, i put this in every monster defaultproperties right? what does this exactly do? take their shieldgun and assault rifle out or?

iZumo
Disappeared Administrator
Posts: 4196
Joined: Fri 19 Mar , 2010 1:21 am
Location: Earth
Contact:

Re: Need assistance with a small weapon replacement mutator:

Post by iZumo » Thu 29 Sep , 2011 6:01 pm

Yes, for every monster placed in map. It will make them not to request the default inventory (ShieldGun & AssaultRifle).

LegendaryAgent
Member
Posts: 80
Joined: Thu 29 Sep , 2011 12:26 am
Contact:

Re: Need assistance with a small weapon replacement mutator:

Post by LegendaryAgent » Fri 30 Sep , 2011 12:18 am

Izumo_CZ wrote:Yes, for every monster placed in map. It will make them not to request the default inventory (ShieldGun & AssaultRifle).
hmmm alright thx for the tip man, ill use it next time i need it, for now since i already have to edit them ill put different stuff in.

thx again for the patience to reply me.

Cheers!

LegendaryAgent
Member
Posts: 80
Joined: Thu 29 Sep , 2011 12:26 am
Contact:

Re: Need assistance with a small weapon replacement mutator:

Post by LegendaryAgent » Sun 02 Oct , 2011 10:12 pm

LegendaryAgent wrote:
Izumo_CZ wrote:Yes, for every monster placed in map. It will make them not to request the default inventory (ShieldGun & AssaultRifle).
hmmm alright thx for the tip man, ill use it next time i need it, for now since i already have to edit them ill put different stuff in.

thx again for the patience to reply me.

Cheers!

very weird :S

i have added bnodefaultinventory=true in
defaultproperties
{
}

i still get the accessed none: default inventory in server log o.O

Post Reply

Who is online

Users browsing this forum: No registered users and 33 guests