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...)