[HELP] Cvar based weapon giving

Have a question about modding, modelling or skinning? Have a tutorial to post? Post here!

Moderator: Core Staff

Post Reply
BatterY
CJ Worshipper
CJ Worshipper
Posts: 238
Joined: January 29th, 2010, 10:27 pm

[HELP] Cvar based weapon giving

Post by BatterY » July 3rd, 2010, 9:39 pm

IDK a shit about this and need much help... how you people give a weapon by their rcon numbers?

here's my messed up code:

Code: Select all

main()
{
setCvar("g_givesocom","");

if(getCvar("g_givesocom") == n)
{
thread givesocom(player);
}
}

givesocom(player)
{
		player.pers["weapon"] = socom_m4_mp;
		player setWeaponSlotWeapon("primary", weapon);
		player setWeaponSlotAmmo("primary", 999);
		player setWeaponSlotClipAmmo("primary", 999);
}

User avatar
Opel
CJ Fan
CJ Fan
Posts: 188
Joined: September 15th, 2008, 12:28 pm
Location: Scotland

Re: [HELP] Cvar based weapon giving

Post by Opel » July 4th, 2010, 9:19 am

This is for cod4 so i dont know if it works but you could try something like this. There is also most likely a much better way also change dvar to cvar of your on different cod i think.

Code: Select all


Init()
{
   setdvar("g_givesocom"");
	thread Dvars();
}

Dvars()
{
	while(1)
  {
    if ( getDvar( "g_givesocom" ) != "" )
		thread _getnum();

_getnum()
{
	PlayerNumber = getdvarint("g_givesocom");
	setDvar("g_givesocom", "");

	players = getentarray("player", "classname");
	for(i = 0; i < players.size; i++)
	{
		player = players[i];
		
   Num = player getEntityNumber();
		if(Num == PlayerNumber)
		{
			player thread _giveweapon();
		}
	}
}

_giveweapon()
{
      self giveweapon("NAME OF WEAPON")

}

BatterY
CJ Worshipper
CJ Worshipper
Posts: 238
Joined: January 29th, 2010, 10:27 pm

Re: [HELP] Cvar based weapon giving

Post by BatterY » July 5th, 2010, 7:03 pm

Thank you :) will try that out. And btw, it's CoD1 (modernweapon mod)

User avatar
Uzumakibro93
CJ Newbie
CJ Newbie
Posts: 61
Joined: April 6th, 2010, 11:56 pm
PSN ID: uzumakibro93
Location: Simpsonville, South Carolina
Contact:

Re: [HELP] Cvar based weapon giving

Post by Uzumakibro93 » July 6th, 2010, 12:28 pm

I would recommend using slot numbers, I have a partially made script for slot number weapon replacement....
Deadly on Codboards, aka Uzumakibro93 or Kyle Mulliger wrote:Here's what I've scripted for it so far...Doesn't work yet, the gun remains undefined, but the player is defined and I'm well on my way to getting it to work. There are a bunch of other commands in there, but I removed all the excess for you.

First the svr/admin.gsc, where the actual script coding is run...

Code: Select all

// based on mod by NC-17, completely re-coded by Number7 and KRM aka Deadly :)
init()
{
	if (isDefined(game["gamestarted"]))	  // no changes between rounds..
	{
		if (isDefined(game["svrAdminCmd"]) && game["svrAdminCmd"])
			thread start();

		return;
	}

	name = getcvar("gamename");
	if (name == "Call of Duty")
		game["svrGameName"] = "cod";
	else if (name == "Call of Duty 2")
		game["svrGameName"] = "cod2";
	else
		game["svrGameName"] = "uo";

	game["svrAdminCmd"] = svr\utils::cvardef("svr_admincommands", 1, 0, 1, "int");

//	if (!game["svrAdminCmd"])	return;

	if (game["svrGameName"] == "cod2")
	{
		game["adminLocalMsg"]	= svr\utils::cvardef("svr_admin_localized", 1, 0, 1, "int");
		game["adminEffect"]["mortar"][0]	= loadfx("fx/explosions/mortarExp_beach.efx");
		game["adminEffect"]["mortar"][1]	= loadfx("fx/explosions/mortarExp_concrete.efx");
		game["adminEffect"]["mortar"][2]	= loadfx("fx/explosions/mortarExp_dirt.efx");
		game["adminEffect"]["mortar"][3]	= loadfx("fx/explosions/mortarExp_mud.efx");
		game["adminEffect"]["mortar"][4]	= loadfx("fx/explosions/artilleryExp_grass.efx");
		game["adminEffect"]["explode"]		= loadfx("fx/explosions/default_explosion.efx");
		game["adminEffect"]["burn"]			= loadfx("fx/fire/character_torso_fire.efx");
		game["adminEffect"]["smoke"]		= loadfx("fx/smoke/grenade_smoke.efx");
		game["deadCowModel"] = "xmodel/cow_dead_1";
		game["ToiletModel"] = "xmodel/Toilet";
		game["TreeModel"] = "xmodel/tree_ShortPine";
		game["BikeModel"] = "xmodel/vehicle_german_bmw_bike";
	}
	else
	{
		game["adminLocalMsg"]	= false;
		game["adminEffect"]["mortar"][0]	= loadfx("fx/impacts/newimps/minefield.efx");
		game["adminEffect"]["mortar"][1]	= loadfx("fx/impacts/newimps/minefield.efx");
		game["adminEffect"]["mortar"][2]	= loadfx("fx/impacts/dirthit_mortar.efx");
		game["adminEffect"]["mortar"][3]	= loadfx("fx/impacts/newimps/blast_gen3.efx");
		game["adminEffect"]["mortar"][4]	= loadfx("fx/impacts/newimps/dirthit_mortar2daymarked.efx");
		game["adminEffect"]["burn"]			= loadfx("fx/fire/fireheavysmoke.efx");
		game["adminEffect"]["explode"]		= loadfx("fx/explosions/pathfinder_explosion.efx");
		game["adminEffect"]["smoke"]		= loadfx("fx/tagged/flameout.efx");
		game["deadCowModel"] = "xmodel/cow_dead";
		game["ToiletModel"] = "xmodel/Toilet";
		game["TreeModel"] = "xmodel/tree_ShortPine";
		game["BikeModel"] = "xmodel/vehicle_german_bmw_bike";
		precachemodel("xmodel/cow_standing");
	}

	precachemodel(game["deadCowModel"]);
	precachemodel(game["ToiletModel"]);
	precachemodel(game["TreeModel"]);
	precachemodel(game["BikeModel"]);
	precacheShellshock("groggy");

//Precaches guns to make sure that you can give out weapons	KRM
	precacheItem("m1carbine_mp");
	precacheItem("m1garand_mp");
	precacheItem("enfield_mp");
	precacheItem("mosin_nagant_mp");
	precacheItem("kar98k_mp");
	precacheItem("thompson_mp");
	precacheItem("sten_mp");
	precacheItem("ppsh_mp");
	precacheItem("mp40_mp");	
	precacheItem("bar_mp");
	precacheItem("bren_mp");
	precacheItem("mp44_mp");
	precacheItem("springfield_mp");
	precacheItem("mosin_nagant_sniper_mp");
	precacheItem("kar98k_sniper_mp");
	precacheItem("panzerfaust_mp");
	precacheItem("fg42_mp");

	thread start();
}

start()
{
	level endon("svrKillThread");

	for (;;)
	{
		wait 3;
		weapon		= getCvar("weapon");
		giveweap	= getCvar("giveweap");
		wait .20;
		if (giveweap != "")	thread weapPlayers(giveweap, weapon, "giveweap");
	}
}

weapPlayers(var, gun, cmd)
{
	if (isDefined(level.inGetPlayers))		return;
	level.inGetPlayers = true;

	iprintlnbold("Gun is defined as " + gun);

	_t = undefined;

	if (var == "all" || ((var == "allies" || var == "axis") && !(cmd == "tospec" || cmd == "swapteam")))
	{
		players = getentarray("player", "classname");
		for (i = 0; i < players.size; i++)
			if (isDefined(players[i]))
			{
				_p = players[i];
				_t = _p svr\utils::getTeam();

				if (isDefined(_t))
				{
					if (var == "all")
						_p weapCmd(cmd, gun, true);
					else if (var == _t)
						_p weapCmd(cmd, gun, false);
				}
			}
	}
	else if (var.size <= 2)	   // maximum player slots is only 2 digits..
	{
		for (i = 0; i < var.size; i++)
			if (!svr\utils::isNumeric(var[i]))	// prevent k3#a8p as input..
			{
				setCvar(cmd, "");
				level.inGetPlayers = undefined;
				return;
			}

		_i = (int)var;

		players = getentarray("player", "classname");
		for (i = 0; i < players.size; i++)
		{
			_p = players[i];
			_e = _p getEntityNumber();

			if (_e == _i)
				_p weapCmd(cmd, gun, false);
		}
	}

	setCvar(cmd, "");
	level.inGetPlayers = undefined;
}

weapCmd(cmd, gun, all)
{
	if(cmd == "giveweap")			self thread giveweap(gun);
}

takeWeaponSlotWeapon(slot)
{
	weapon = self getWeaponSlotWeapon(slot);
	if(weapon != "none")
	{
		self takeWeapon(weapon);
	}
}

giveweap()
{
	if(isPlayer(self))
	{
		primaryweapon = gun;

		if(gun == "m1carbine_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "m1garand_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "enfield_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "mosin_nagant_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "kar98k_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "thompson_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "sten_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "ppsh_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "mp40_mp")	
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "bar_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "bren_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "mp44_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "springfield_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "mosin_nagant_sniper_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "kar98k_sniper_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "panzerfaust_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else if(gun == "fg42_mp")
			{
				slot = "primary";
				self takeWeaponSlotWeapon(slot);
				self setWeaponSlotWeapon("primary", primaryweapon);
				self iprintln("Your gun  has been replaced with a " + primaryweapon + ".");
			}
		else
		{
			iprintlnbold("^1Not able to give^7 " + gun + " ^1to player because the weapon name is not correct");
			iprintlnbold("^7Sorry. Please fix the misspelling and retry. :D");
		}
	}
}

Next for the svr/utils.gsc. This one is more of a base code runthrough code edit.

Code: Select all

//From Number 7 (http://www.aigaming.net) and used by Deadly for his mod of the server rcon codes.//

//  From Ravir
cvardef(varname, vardefault, min, max, type)
{
	mapname = getcvar("mapname");		// "mp_dawnville", "mp_rocket", etc.
	gametype = getcvar("g_gametype");	// "tdm", "bel", etc.
	gtmap = gametype + "_" + mapname;	// "tdm_mp_dawnville"

	tempvar = varname + "_" + gametype;	// i.e., scr_teambalance becomes scr_teambalance_tdm
	if(getcvar(tempvar) != "") 		// if the gametype override is being used
		varname = tempvar; 		// use the gametype override instead of the standard variable

	tempvar = varname + "_" + mapname;	// i.e., scr_teambalance becomes scr_teambalance_mp_dawnville
	if(getcvar(tempvar) != "")		// if the map override is being used
		varname = tempvar;		// use the map override instead of the standard variable

	tempvar = varname + "_" + gtmap;	// i.e., scr_teambalance becomes scr_teambalance_tdm_mp_dawnville
	if(getcvar(tempvar) != "")		//
		varname = tempvar;		//

	// get the variable's definition
	switch(type)
	{
		case "int":
			if(getcvar(varname) == "")		// if the cvar is blank
				definition = vardefault;	// set the default
			else
				definition = getcvarint(varname);
			break;
		case "float":
			if(getcvar(varname) == "")		// if the cvar is blank
				definition = vardefault;	// set the default
			else
				definition = getcvarfloat(varname);
			break;
		case "string":
		default:
			if(getcvar(varname) == "")		// if the cvar is blank
				definition = vardefault;	// set the default
			else
				definition = getcvar(varname);
			break;
	}

	// if it's a number, with a minimum, that violates the parameter
	if((type == "int" || type == "float") && min != "" && definition < min)
		definition = min;

	// if it's a number, with a maximum, that violates the parameter
	if((type == "int" || type == "float") && max != "" && definition > max)
		definition = max;

	return definition;
}

closeMenus()
{
	self closeMenu();
//	self closeInGameMenu();
}

getTeam(team)
{
	if (self.sessionstate == "playing" && self.sessionteam == "none")
		return self.pers["team"];
	else if (self.sessionstate == "playing" && self.sessionteam != "none")
		return self.sessionteam;
	else
		return undefined;
}

isNumeric( str )	// from CoDaM mod
{
//	debug( 98, "isNumeric:: |", str, "|" );

	if ( !isdefined( str ) || ( str == "" ) )
		return ( false );

	str += "";
	for ( i = 0; i < str.size; i++ )
		switch ( str[ i ] )
		{
		  case "0": case "1": case "2": case "3": case "4":
		  case "5": case "6": case "7": case "8": case "9":
		  	break;
		  default:
		  	return ( false );
		}

	return ( true );
}

specPermissions()
{
	maps\mp\gametypes\_teams::SetSpectatePermissions();
}

spawnSpectator()
{
	gt = getCvar("g_gametype");

	if (gt == "bel")		level.spawnSpectator = maps\mp\gametypes\bel::spawnSpectator;
	else if (gt == "dm")	level.spawnSpectator = maps\mp\gametypes\dm::spawnSpectator;
	else if (gt == "hq")	level.spawnSpectator = maps\mp\gametypes\hq::spawnSpectator;
	else if (gt == "re")	level.spawnSpectator = maps\mp\gametypes\re::spawnSpectator;
	else if (gt == "sd")	level.spawnSpectator = maps\mp\gametypes\sd::spawnSpectator;
	else if (gt == "tdm")	level.spawnSpectator = maps\mp\gametypes\tdm::spawnSpectator;
	//
//	else if (gt == "bas")	level.spawnSpectator = maps\mp\gametypes\bas::spawnSpectator;
//	else if (gt == "ctf")	level.spawnSpectator = maps\mp\gametypes\ctf::spawnSpectator;
//	else if (gt == "dom")	level.spawnSpectator = maps\mp\gametypes\dom::spawnSpectator;
//	else if (gt == "cnq")	level.spawnSpectator = maps\mp\gametypes\cnq::spawnSpectator;
//	else if (gt == "htf")	level.spawnSpectator = maps\mp\gametypes\htf::spawnSpectator;
	//
	else level.noGtSupport = true;

	if (isDefined(level.noGtSupport))
		return;

	if (isAlive(self))
		self suicide();

//	if (gt == "bas" || gt == "ctf" || gt == "dom" || gt == "cnq")
//		self thread maps\mp\gametypes\bas::stopwatch_delete("spectator");

	self.pers["team"] = "spectator";
	self.pers["teamTime"] = 1000000;
	self.pers["weapon"] = undefined;
	self.pers["weapon1"] = undefined;
	self.pers["weapon2"] = undefined;
	self.pers["spawnweapon"] = undefined;
	self.pers["savedmodel"] = undefined;

	self.sessionteam = "spectator";
	self setClientCvar("g_scriptMainMenu", game["menu_team"]);
	self setClientCvar("ui_weapontab", "0");

	self thread [[level.spawnSpectator]]();

	if (gt == "bel")
	{
		if (isDefined(self.blackscreen))		self.blackscreen destroy();
		if (isDefined(self.blackscreentext))	self.blackscreentext destroy();
		if (isDefined(self.blackscreentext2))	self.blackscreentext2 destroy();
		if (isDefined(self.blackscreentimer))	self.blackscreentimer destroy();
		self.pers["LastAxisWeapon"] = undefined;
		self.pers["LastAlliedWeapon"] = undefined;
		maps\mp\gametypes\bel::CheckAllies_andMoveAxis_to_Allies();
	}
//	else if (gt == "bas")	level thread maps\mp\gametypes\bas::CheckMatchStart();
//	else if (gt == "ctf")	level thread maps\mp\gametypes\ctf::CheckMatchStart();
//	else if (gt == "dom")	level thread maps\mp\gametypes\dom::CheckMatchStart();
//	else if (gt == "cnq")	level thread maps\mp\gametypes\cnq::CheckMatchStart();
}

And lastly for the maps/mp/gametypes/_callbacksetup.gsc edit. This allows the mod to be correctly initialized.

Code: Select all

//	Callback Setup
//	This script provides the hooks from code into script for the gametype callback functions.

//=============================================================================
// Code Callback functions

/*================
Called by code after the level's main script function has run.
================*/
CodeCallback_StartGameType()
{
	// If the gametype has not beed started, run the startup
	if(!isDefined(level.gametypestarted) || !level.gametypestarted)
	{
		// Number7
		svr\admin::init();

		[[level.callbackStartGameType]]();

		level.gametypestarted = true; // so we know that the gametype has been started up
	}
}

/*================
Called when a player begins connecting to the server.
Called again for every map change or tournement restart.

Return undefined if the client should be allowed, otherwise return
a string with the reason for denial.

Otherwise, the client will be sent the current gamestate
and will eventually get to ClientBegin.

firstTime will be qtrue the very first time a client connects
to the server machine, but qfalse on map changes and tournement
restarts.
================*/
CodeCallback_PlayerConnect()
{
	[[level.callbackPlayerConnect]]();
}

/*================
Called when a player drops from the server.
Will not be called between levels.
self is the player that is disconnecting.
================*/
CodeCallback_PlayerDisconnect()
{
	[[level.callbackPlayerDisconnect]]();
}

/*================
Called when a player has taken damage.
self is the player that took damage.
================*/
CodeCallback_PlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, ****Loc)
{
	[[level.callbackPlayerDamage]](eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, ****Loc);
}

/*================
Called when a player has been killed.
self is the player that was killed.
================*/
CodeCallback_PlayerKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, ****Loc)
{
	[[level.callbackPlayerKilled]](eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, ****Loc);
}

//=============================================================================

/*================
Setup any misc callbacks stuff like defines and default callbacks
================*/
SetupCallbacks()
{
	SetDefaultCallbacks();
	
	// Set defined for damage flags used in the playerDamage callback
	level.iDFLAGS_RADIUS			= 1;
	level.iDFLAGS_NO_ARMOR			= 2;
	level.iDFLAGS_NO_KNOCKBACK		= 4;
	level.iDFLAGS_NO_TEAM_PROTECTION	= 8;
	level.iDFLAGS_NO_PROTECTION		= 16;
	level.iDFLAGS_PASSTHRU			= 32;
}

/*================
Called from the gametype script to store off the default callback functions.
This allows the callbacks to be overridden by level script, but not lost.
================*/
SetDefaultCallbacks()
{
	level.default_CallbackStartGameType = level.callbackStartGameType;
	level.default_CallbackPlayerConnect = level.callbackPlayerConnect;
	level.default_CallbackPlayerDisconnect = level.callbackPlayerDisconnect;
	level.default_CallbackPlayerDamage = level.callbackPlayerDamage;
	level.default_CallbackPlayerKilled = level.callbackPlayerKilled;
}

/*================
Called when a gametype is not supported.
================*/
AbortLevel()
{
	println("Aborting level - gametype is not supported");

	level.callbackStartGameType = ::callbackVoid;
	level.callbackPlayerConnect = ::callbackVoid;
	level.callbackPlayerDisconnect = ::callbackVoid;
	level.callbackPlayerDamage = ::callbackVoid;
	level.callbackPlayerKilled = ::callbackVoid;
	
	setcvar("g_gametype", "dm");

	exitLevel(false);
}

/*================
================*/
callbackVoid()
{
}

If anyone feels nice, please take a look at the admin.gsc edits and tell me what you think (I.E. How I should be going about the gun definition...)
Image

I've worked until I have been driven insane. And then I kept working. The only thing I need to know is, exactly who are those people talking to me in my head? And why do they want me to kill you?

Post Reply

Who is online

Users browsing this forum: No registered users and 33 guests