Using this?Can libcod enforce it before player connects?Code:player setClientCvar("cl_allowdownload", "1");
Printable View
Using this?Can libcod enforce it before player connects?Code:player setClientCvar("cl_allowdownload", "1");
Ok thanks. I'll give it a try when i install libcod.
I need a little help.
Saving the players stats and updating them works fine using the functions from _stattracking.gsc (the non mysql version). Now i am trying to add a hud for displaying them. So because my coding experience is limited i tried modifying _hud_playerscore.gsc to test. I made a file called _myhud.gsc that contains :
I tried calling _myhud.gsc within _stattracking.gsc in the init function.Code:init()
{
level thread onPlayerConnect();
}
onPlayerConnect()
{
for(;;)
{
level waittill("connecting", player);
player thread onPlayerSpawned();
player thread onJoinedTeam();
player thread onJoinedSpectators();
player thread onUpdatePlayerScoreHUD();
}
}
onJoinedTeam()
{
self endon("disconnect");
for(;;)
{
self waittill("joined_team");
self thread removePlayerHUD();
}
}
onJoinedSpectators()
{
self endon("disconnect");
for(;;)
{
self waittill("joined_spectators");
self thread removePlayerHUD();
}
}
onPlayerSpawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
if(!isdefined(self.hud_deaths))
{
self.hud_deaths = newClientHudElem(self);
self.hud_deaths.horzAlign = "left";
self.hud_deaths.vertAlign = "top";
self.hud_deaths.x = 36;
self.hud_deaths.y = 46;
self.hud_deaths.font = "default";
self.hud_deaths.fontscale = 2;
self.hud_deaths.archived = false;
}
self thread updatePlayerScoreHUD();
}
}
onUpdatePlayerScoreHUD()
{
for(;;)
{
self waittill("update_playerscore_hud");
self thread updatePlayerScoreHUD();
}
}
updatePlayerScoreHUD()
{
if(isDefined(self.hud_deaths))
deaths = self getstat("deaths");
self.hud_deaths setValue(deaths);
}
removePlayerHUD()
{
if(isDefined(self.hud_deaths))
self.hud_deaths destroy();
}
When i try to run server i get this error:Code:init()
{
game["menu_clientcmd"] = "clientcmd";
precacheMenu(game["menu_clientcmd"]);
init_stattracking();
init_ranks();
thread waitforconnect();
thread scanForBan();
thread maps\mp\gametypes\_myhud::init();
}
Any help would be highly appreciatedCode:******* script compile error *******
uninitialised variable 'deaths': (file 'maps/mp/gametypes/_myhud.gsc', line 86)
self.hud_deaths setValue(deaths);
*
************************************
********************
ERROR: script compile error
(see console for details)
********************
----- Server Shutdown -----
Sending heartbeat to cod2master.activision.com
==== ShutdownGame ====
Change
toCode:updatePlayerScoreHUD()
{
if(isDefined(self.hud_deaths))
deaths = self getstat("deaths");
self.hud_deaths setValue(deaths);
}
Code:updatePlayerScoreHUD()
{
if(isDefined(self.hud_deaths))
{
deaths = self getstat("deaths");
self.hud_deaths setValue(deaths);
}
}
Ok that was too obvious for me to see :)
I also had to add #include maps\mp\gametypes\_stattracking; in _myhud.gsc and rename init() to init1()
Now it loads fine without error but allways displays zero.
Do i need to rename the functions in _myhud.gsc ? They have the same name as in _hud_playerscore.gsc. Does it cause any conflict if i don't?
Edit:
Forgot to tell that i tested it local on my pc playing alone and throwing grenades to my self. If it means anything.
Ok i managed to fix it. Was some dumb declaration i made (for debugging perposes) in spawnPlayer() function. Now it displays correctly.
Ok so i made a basic hud for displaying some of the player stats i use. It's probably not the most efficient one (especially the part with the rank names) but i want to share it anyways. Suggestions and corrections are welcome.
Code:#include maps\mp\gametypes\_stattracking;
init1()
{
game["deaths"] = &"^6Total Deaths: ^7";
game["kills"] = &"^3Total kills: ^7";
game["headshots"] = &"^3Headshots: ^7";
game["suicides"] = &"^6Suicides: ^7";
game["rank"] = &"^8Rank: ^5";
game["killstreak"] = &"^3Longest Killstreak: ^7";
game["melee"] = &"^3Melee kills: ^7";
game["teamkills"] = &"^6Team kills: ^7";
precacheShader("white");
precacheString(game["deaths"]);
precacheString(game["kills"]);
precacheString(game["headshots"]);
precacheString(game["melee"]);
precacheString(game["suicides"]);
precacheString(game["rank"]);
precacheString(game["killstreak"]);
precacheString(game["teamkills"]);
level thread onPlayerConnect();
level thread ranknamesinit();
}
onPlayerConnect()
{
for(;;)
{
level waittill("connecting", player);
player thread onPlayerSpawned();
player thread onJoinedTeam();
player thread onJoinedSpectators();
player thread onUpdatePlayerScoreHUD();
}
}
onJoinedTeam()
{
self endon("disconnect");
for(;;)
{
self waittill("joined_team");
self thread removePlayerHUD();
}
}
onJoinedSpectators()
{
self endon("disconnect");
for(;;)
{
self waittill("joined_spectators");
self thread removePlayerHUD();
}
}
onPlayerSpawned()
{
self endon("disconnect");
offset=0;
gametype = getCvar("g_gametype");
frf="0";
frf= getCvar("scr_friendlyfire");
if(gametype == "tdm")
offset=25;
for(;;)
{
self waittill("spawned_player");
if(!isdefined(self.hud_kills))
{
self.hud_kills = newClientHudElem(self);
self.hud_kills.horzAlign = "left";
self.hud_kills.vertAlign = "top";
self.hud_kills.x = 10;
self.hud_kills.y = 50 + offset;
self.hud_kills.font = "default";
self.hud_kills.fontscale = .8;
self.hud_kills.archived = false;
self.hud_kills.label = game["kills"];
}
if(!isdefined(self.hud_deaths))
{
self.hud_deaths = newClientHudElem(self);
self.hud_deaths.horzAlign = "left";
self.hud_deaths.vertAlign = "top";
self.hud_deaths.x = 10;
self.hud_deaths.y = 58 + offset;
self.hud_deaths.font = "default";
self.hud_deaths.fontscale = .8;
self.hud_deaths.archived = false;
self.hud_deaths.label = game["deaths"];
}
if(!isdefined(self.hud_suicides))
{
self.hud_suicides = newClientHudElem(self);
self.hud_suicides.horzAlign = "left";
self.hud_suicides.vertAlign = "top";
self.hud_suicides.x = 10;
self.hud_suicides.y = 66 + offset;
self.hud_suicides.font = "default";
self.hud_suicides.fontscale = .8;
self.hud_suicides.archived = false;
self.hud_suicides.label = game["suicides"];
}
if(!isdefined(self.hud_headshots))
{
self.hud_headshots = newClientHudElem(self);
self.hud_headshots.horzAlign = "left";
self.hud_headshots.vertAlign = "top";
self.hud_headshots.x = 10;
self.hud_headshots.y = 74 + offset;
self.hud_headshots.font = "default";
self.hud_headshots.fontscale = .8;
self.hud_headshots.archived = false;
self.hud_headshots.label = game["headshots"];
}
if(!isdefined(self.hud_melee))
{
self.hud_melee = newClientHudElem(self);
self.hud_melee.horzAlign = "left";
self.hud_melee.vertAlign = "top";
self.hud_melee.x = 10;
self.hud_melee.y = 82 + offset;
self.hud_melee.font = "default";
self.hud_melee.fontscale = .8;
self.hud_melee.archived = false;
self.hud_melee.label = game["melee"];
}
if(!isdefined(self.hud_lkillstr))
{
self.hud_lkillstr = newClientHudElem(self);
self.hud_lkillstr.horzAlign = "left";
self.hud_lkillstr.vertAlign = "top";
self.hud_lkillstr.x = 10;
self.hud_lkillstr.y = 90 + offset;
self.hud_lkillstr.font = "default";
self.hud_lkillstr.fontscale = .8;
self.hud_lkillstr.archived = false;
self.hud_lkillstr.label = game["killstreak"];
}
if(!isdefined(self.hud_rank))
{
self.hud_rank = newClientHudElem(self);
self.hud_rank.horzAlign = "left";
self.hud_rank.vertAlign = "top";
self.hud_rank.x = 10;
self.hud_rank.y = 98 + offset;
self.hud_rank.font = "default";
self.hud_rank.fontscale = .8;
self.hud_rank.archived = false;
self.hud_rank.label = game["rank"];
}
if(!isdefined(self.hud_teamkills) && gametype=="tdm" && frf=="1")
{
self.hud_teamkills = newClientHudElem(self);
self.hud_teamkills.horzAlign = "left";
self.hud_teamkills.vertAlign = "top";
self.hud_teamkills.x = 10;
self.hud_teamkills.y = 106 + offset;
self.hud_teamkills.font = "default";
self.hud_teamkills.fontscale = .8;
self.hud_teamkills.archived = false;
self.hud_teamkills.label = game["teamkills"];
}
self thread updatePlayerScoreHUD();
}
}
onUpdatePlayerScoreHUD()
{
for(;;)
{
self waittill("update_playerscore_hud");
self thread updatePlayerScoreHUD();
}
}
updatePlayerScoreHUD()
{
if(isDefined(self.hud_deaths))
{
deaths = self getstat("deaths");
self.hud_deaths setValue(deaths);
}
if(isDefined(self.hud_headshots))
{
headshots = self getstat("headshots");
self.hud_headshots setValue(headshots);
}
if(isDefined(self.hud_kills))
{
kills= self getstat("kills");
self.hud_kills setValue(kills);
}
if(isdefined(self.hud_suicides))
{
suicides= self getstat("suicides");
self.hud_suicides setValue(suicides);
}
if(isdefined(self.hud_melee))
{
melee= self getstat("meleekills");
self.hud_melee setValue(melee);
}
if(isdefined(self.hud_lkillstr))
{
lkillstr= self getstat("longest_killstreak");
self.hud_lkillstr setValue(lkillstr);
}
if(isdefined(self.hud_rank))
{
rank= self getstat("rank");
self getrankname(rank);
}
if(isdefined(self.hud_teamkills))
{
teamkills= self getstat("teamkills");
self.hud_teamkills setValue(teamkills);
}
}
removePlayerHUD()
{
if(isDefined(self.hud_deaths))
self.hud_deaths destroy();
if(isDefined(self.hud_headshots))
self.hud_headshots destroy();
if(isDefined(self.hud_kills))
self.hud_kills destroy();
if(isdefined(self.hud_suicides))
self.hud_suicides destroy();
if(isdefined(self.hud_melee))
self.hud_melee destroy();
if(isdefined(self.hud_lkillstr))
self.hud_lkillstr destroy();
if(isdefined(self.hud_rank))
self.hud_rank destroy();
if(isdefined(self.hud_teamkills))
self.hud_teamkills destroy();
}
getrankname(rank)
{
switch(rank)
{
case 0:
self.hud_rank setText(game["0"]);
break;
case 1:
self.hud_rank setText(game["1"]);
break;
case 2:
self.hud_rank setText(game["2"]);
break;
case 3:
self.hud_rank setText(game["3"]);
break;
case 4:
self.hud_rank setText(game["4"]);
break;
case 5:
self.hud_rank setText(game["5"]);
break;
case 6:
self.hud_rank setText(game["6"]);
break;
case 7:
self.hud_rank setText(game["7"]);
break;
case 8:
self.hud_rank setText(game["8"]);
break;
case 9:
self.hud_rank setText(game["9"]);
break;
case 10:
self.hud_rank setText(game["10"]);
break;
case 11:
self.hud_rank setText(game["11"]);
break;
case 12:
self.hud_rank setText(game["12"]);
break;
case 13:
self.hud_rank setText(game["13"]);
break;
case 14:
self.hud_rank setText(game["14"]);
break;
case 15:
self.hud_rank setText(game["15"]);
break;
case 16:
self.hud_rank setText(game["16"]);
break;
case 17:
self.hud_rank setText(game["17"]);
break;
case 18:
self.hud_rank setText(game["18"]);
break;
case 19:
self.hud_rank setText(game["19"]);
break;
case 20:
self.hud_rank setText(game["20"]);
break;
case 21:
self.hud_rank setText(game["21"]);
break;
case 22:
self.hud_rank setText(game["22"]);
break;
case 23:
self.hud_rank setText(game["23"]);
break;
case 24:
self.hud_rank setText(game["24"]);
break;
case 25:
self.hud_rank setText(game["25"]);
break;
case 26:
self.hud_rank setText(game["26"]);
break;
case 27:
self.hud_rank setText(game["27"]);
break;
case 28:
self.hud_rank setText(game["28"]);
break;
case 29:
self.hud_rank setText(game["29"]);
break;
case 30:
self.hud_rank setText(game["30"]);
break;
case 31:
self.hud_rank setText(game["31"]);
break;
case 32:
self.hud_rank setText(game["32"]);
break;
case 33:
self.hud_rank setText(game["33"]);
break;
case 34:
self.hud_rank setText(game["34"]);
break;
case 35:
self.hud_rank setText(game["35"]);
break;
case 36:
self.hud_rank setText(game["36"]);
break;
case 37:
self.hud_rank setText(game["37"]);
break;
case 38:
self.hud_rank setText(game["38"]);
break;
case 39:
self.hud_rank setText(game["39"]);
break;
case 40:
self.hud_rank setText(game["40"]);
break;
case 41:
self.hud_rank setText(game["41"]);
break;
case 42:
self.hud_rank setText(game["42"]);
break;
case 43:
self.hud_rank setText(game["43"]);
break;
case 44:
self.hud_rank setText(game["44"]);
break;
case 45:
self.hud_rank setText(game["45"]);
break;
case 46:
self.hud_rank setText(game["46"]);
break;
case 47:
self.hud_rank setText(game["47"]);
break;
case 48:
self.hud_rank setText(game["48"]);
break;
case 49:
self.hud_rank setText(game["49"]);
break;
case 50:
self.hud_rank setText(game["50"]);
break;
case 51:
self.hud_rank setText(game["51"]);
break;
case 52:
self.hud_rank setText(game["52"]);
break;
case 53:
self.hud_rank setText(game["53"]);
break;
case 54:
self.hud_rank setText(game["54"]);
break;
}
}
ranknamesinit()
{
game["0"] = &"Private First Class";
game["1"] = &"Private First Class I";
game["2"] = &"Private First Class II";
game["3"] = &"Lance Corporal";
game["4"] = &"Lance Corporal I";
game["5"] = &"Lance Corporal II";
game["6"] = &"Corporal";
game["7"] = &"Corporal I";
game["8"] = &"Corporal II";
game["9"] = &"Sergeant";
game["10"] = &"Sergeant I";
game["11"] = &"Sergeant II";
game["12"] = &"Staff Sergeant";
game["13"] = &"Staff Sergeant I";
game["14"] = &"Staff Sergeant II";
game["15"] = &"Gunnery Sergeant";
game["16"] = &"Gunnery Sergeant I";
game["17"] = &"Gunnery Sergeant II";
game["18"] = &"Master Sergeant";
game["19"] = &"Master Sergeant I";
game["20"] = &"Master Sergeant II";
game["21"] = &"Master Gunnery Sergeant";
game["22"] = &"Master Gunnery Sergeant I";
game["23"] = &"Master Gunnery Sergeant II";
game["24"] = &"2nd Lieutenant";
game["25"] = &"2nd Lieutenant I";
game["26"] = &"2nd Lieutenant II";
game["27"] = &"1st Lieutenant";
game["28"] = &"1st Lieutenant I";
game["29"] = &"1st Lieutenant II";
game["30"] = &"Captain";
game["31"] = &"Captain I";
game["32"] = &"Captain II";
game["33"] = &"Major";
game["34"] = &"Major I";
game["35"] = &"Major II";
game["36"] = &"Lt. Colonel";
game["37"] = &"Lt. Colonel I";
game["38"] = &"Lt. Colonel II";
game["39"] = &"Colonel";
game["40"] = &"Colonel I";
game["41"] = &"Colonel II";
game["42"] = &"Brigadier General";
game["43"] = &"Brigadier General I";
game["44"] = &"Brigadier General II";
game["45"] = &"Major General";
game["46"] = &"Major General I";
game["47"] = &"Major General II";
game["48"] = &"Lieutenant General";
game["49"] = &"Lieutenant General I";
game["50"] = &"Lieutenant General II";
game["51"] = &"General";
game["52"] = &"General I";
game["53"] = &"General II";
game["54"] = &"Commander";
precacheString(game["0"]);
precacheString(game["1"]);
precacheString(game["2"]);
precacheString(game["3"]);
precacheString(game["4"]);
precacheString(game["5"]);
precacheString(game["6"]);
precacheString(game["7"]);
precacheString(game["8"]);
precacheString(game["9"]);
precacheString(game["10"]);
precacheString(game["11"]);
precacheString(game["12"]);
precacheString(game["13"]);
precacheString(game["14"]);
precacheString(game["15"]);
precacheString(game["16"]);
precacheString(game["17"]);
precacheString(game["18"]);
precacheString(game["19"]);
precacheString(game["20"]);
precacheString(game["21"]);
precacheString(game["22"]);
precacheString(game["23"]);
precacheString(game["24"]);
precacheString(game["25"]);
precacheString(game["26"]);
precacheString(game["27"]);
precacheString(game["28"]);
precacheString(game["29"]);
precacheString(game["30"]);
precacheString(game["31"]);
precacheString(game["32"]);
precacheString(game["33"]);
precacheString(game["34"]);
precacheString(game["35"]);
precacheString(game["36"]);
precacheString(game["37"]);
precacheString(game["38"]);
precacheString(game["39"]);
precacheString(game["40"]);
precacheString(game["41"]);
precacheString(game["42"]);
precacheString(game["43"]);
precacheString(game["44"]);
precacheString(game["45"]);
precacheString(game["46"]);
precacheString(game["47"]);
precacheString(game["48"]);
precacheString(game["49"]);
precacheString(game["50"]);
precacheString(game["51"]);
precacheString(game["52"]);
precacheString(game["53"]);
precacheString(game["54"]);
}
PHP Code:
getrankname(rank)
{
if(rank >= 0 && rank < game["rankname"].size)
self.hud_rank setText(game["rankname"][rank]);
}
ranknamesinit()
{
game["rankname"] = [];
game["rankname"][0] = &"Private First Class";
game["rankname"][1] = &"Private First Class I";
game["rankname"][2] = &"Private First Class II";
game["rankname"][3] = &"Lance Corporal";
game["rankname"][4] = &"Lance Corporal I";
game["rankname"][5] = &"Lance Corporal II";
game["rankname"][6] = &"Corporal";
game["rankname"][7] = &"Corporal I";
game["rankname"][8] = &"Corporal II";
game["rankname"][9] = &"Sergeant";
game["rankname"][10] = &"Sergeant I";
game["rankname"][11] = &"Sergeant II";
game["rankname"][12] = &"Staff Sergeant";
game["rankname"][13] = &"Staff Sergeant I";
game["rankname"][14] = &"Staff Sergeant II";
game["rankname"][15] = &"Gunnery Sergeant";
game["rankname"][16] = &"Gunnery Sergeant I";
game["rankname"][17] = &"Gunnery Sergeant II";
game["rankname"][18] = &"Master Sergeant";
game["rankname"][19] = &"Master Sergeant I";
game["rankname"][20] = &"Master Sergeant II";
game["rankname"][21] = &"Master Gunnery Sergeant";
game["rankname"][22] = &"Master Gunnery Sergeant I";
game["rankname"][23] = &"Master Gunnery Sergeant II";
game["rankname"][24] = &"2nd Lieutenant";
game["rankname"][25] = &"2nd Lieutenant I";
game["rankname"][26] = &"2nd Lieutenant II";
game["rankname"][27] = &"1st Lieutenant";
game["rankname"][28] = &"1st Lieutenant I";
game["rankname"][29] = &"1st Lieutenant II";
game["rankname"][30] = &"Captain";
game["rankname"][31] = &"Captain I";
game["rankname"][32] = &"Captain II";
game["rankname"][33] = &"Major";
game["rankname"][34] = &"Major I";
game["rankname"][35] = &"Major II";
game["rankname"][36] = &"Lt. Colonel";
game["rankname"][37] = &"Lt. Colonel I";
game["rankname"][38] = &"Lt. Colonel II";
game["rankname"][39] = &"Colonel";
game["rankname"][40] = &"Colonel I";
game["rankname"][41] = &"Colonel II";
game["rankname"][42] = &"Brigadier General";
game["rankname"][43] = &"Brigadier General I";
game["rankname"][44] = &"Brigadier General II";
game["rankname"][45] = &"Major General";
game["rankname"][46] = &"Major General I";
game["rankname"][47] = &"Major General II";
game["rankname"][48] = &"Lieutenant General";
game["rankname"][49] = &"Lieutenant General I";
game["rankname"][50] = &"Lieutenant General II";
game["rankname"][51] = &"General";
game["rankname"][52] = &"General I";
game["rankname"][53] = &"General II";
game["rankname"][54] = &"Commander";
for(i = 0; i < game["rankname"].size; i++)
precachestring(game["rankname"][i]);
}
Thank you for the correction. I will try it as soon as possible.
If i modify the getstat() function like this it returns the rank name instead of the rank number. Is there a way to put the result in an array to use in the hud? Because i tried and it gave me error about not being localized string. Sorry for asking too many questions...
Code:getstat(stat)
{
switch(stat)
{
case "rank":
return level.ranks[self.stats["rank"]].name;
}
if(!isdefined(stat))
return;
if(!isdefined(self) || !isplayer(self))
return;
if(!isdefined(self.stats[stat]))
return 0;
else
return self.stats[stat];
}