Using this?Can libcod enforce it before player connects?Code:player setClientCvar("cl_allowdownload", "1");
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); } }
"Does not work" is an error report for a bug between keyboard and chair.
All hail Artie Effem
agribilos (21st May 2020)
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.
Last edited by agribilos; 21st May 2020 at 14:52.
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"]); }
Last edited by agribilos; 22nd May 2020 at 16:42. Reason: I forgot to add the teamkills parts.
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]);
}
"Does not work" is an error report for a bug between keyboard and chair.
All hail Artie Effem
agribilos (22nd May 2020)
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]; }