+
+#### Bugs fixed:
+- [3.3.18] Quick menu settings - settings for 'Show enemy list' was not correctly saved - fixed
+- [3.3.29] Score changing via menu - fixed issue when score is changed to halftime state (for example 10:2 in cg_mr12) - halftime was then called again -> fixed
+
+#### News:
+- [3.3.42] Players left - when last player in team is killed, text "Allies Eliminated" / "Axis Eliminated" is showed
+ (this change was already in zPAM3.20 - i forgot to write it to the change list)
+- [3.3.43] When you hit your teammate, reddish hit mark is showed
+
+- Added text warning on screen to select a team when you ESC welcome (server info) menu
+
+#### Update of existing:
+- [3.3.32] New damage feedback for assists - text "assist" is showed instead of hit mark
+
+- [3.3.41] When 5min timer expires between maps / halfs, warning text is showed for better indication that one team ready will skip the readyup
+
+- [3.3.42] Players left - when some player were killed, "bouncy" animation was used for text. Its removed now because the number sometimes incomprehensibly moved all over the screen
+- [3.3.42] Players left - when last player in team is killed, text "Allies Eliminated" / "Axis Eliminated" is now showed in red color.
+- [3.3.10] Match info - improved detection of new match with different team
+- [3.3.2] Auto-recording - ensuring my team name is always first in demo name
+- [3.3.17] Scoreboard menu - when final scoreboard is showed, players names are showed with colors now
+
@@ -37,6 +70,8 @@ Work on this pam was iniciated by me in 2015 a was not never fully finished. In
@@ -87,21 +122,26 @@ r_polygonOffsetScale and r_polygonOffsetBias warning appears even if they were c
## Installation
-- Download zPAM 3.21 and extract folders with files into following locations:
+- Download zPAM 3.22 and extract folders with files into following locations:
- ./pb/pbsvuser.cfg
- - ./main/zpam321.iwd
+ - ./main/zpam322.iwd
- ./main/mp_toujane_fix_v2.iwd
- ./main/mp_burgundy_fix_v1.iwd
- ./main/server.cfg
+ - ./main/public.cfg
+
+
+- Add ```+exec server.cfg``` into command line arguments and edit the *server.cfg* file to configure your server
+- If you are running public server, add ```+exec public.cfg``` into command line arguments and edit the *public.cfg* file to configure your public server
+- If you use these .cfg files, make sure no other .cfg files are executed!
- Notes:
- When your server is runned, you may get an error message saying "PAM is not installed correctly". To fix this error, follow instructions in [Troubleshooting](#troubleshooting) section
- mp_toujane_fix_v2.iwd and mp_burgundy_fix_v1.iwd are fixed version of original maps - these files needs to be included with PAM, more info in [Questions & Answers](#questions--answers) section
- Toujane FIX changes: https://github.com/eyza-cod2/mp_toujane_fix
- - Burgundy FIX changes: https://github.com/eyza-cod2/mp_burgundy_fix.
- - server.cfg - exec this file for fast server configuration and in case you are running a public server (+exec server)
- - you have to enable downloading via cvar sv_wwwDownload 1 and specify a download url via cvar sv_wwwBaseURL "url"; if you dont have any, you can use sv_wwwBaseURL "http://cod2x.me/zpam321" (this is to make sure fixed maps are downloaded in fast way for players)
+ - Burgundy FIX changes: https://github.com/eyza-cod2/mp_burgundy_fix
+ - you have to enable downloading via cvar sv_wwwDownload 1 and specify a download url via cvar sv_wwwBaseURL "url"; if you dont have any, you can use sv_wwwBaseURL "http://cod2x.me/zpam322" (this is to make sure fixed maps are downloaded in fast way for players)
## Contact
@@ -109,11 +149,27 @@ Write message on discord LetsPlay Europe in #cod2-zpam-3 channel.<
Or add me on discord eyza#7930
Or write me on email kratas.tom@seznam.cz
-Supporters: askeslav, tomik, cokY, Sk1lzZ, YctN, kebit, foxbuster, <==Mustang==>Clan from Hungary, hubertgruber / dutch, excel
-
Please support this work on my Paypal -> https://paypal.me/kratasy
+## Supporters
+
+**askeslav, tomik, lampy**
+Big thanks for consulting and testing
+
+**YctN** (discord: FGH - YctN#1140)
+Big thanks for server support, hosting and fixed maps consulting
+
+**Stendby** (discord: Stendby#3298)
+Big thanks for fixed maps
+
+**mtN** (discord: mtN#8249)
+Big thanks for PAM promoting
+
+**Other supporters:**
+cokY, Sk1lzZ, YctN, kebit, foxbuster, <==Mustang==>Clan from Hungary, hubertgruber / dutch, excel, shady
+
+
## Questions & Answers
@@ -335,8 +391,8 @@ Example: "autorecording_1|matchinfo_1|score_0|playersleft_1"
## Troubleshooting
### Error "zPAM is not installed correctly"
-#### Iwd file zpam321.iwd must be installed in main folder. (fs_game)
- - From version 3.21, all iwd files have to be installed in main folder.
+#### Iwd file zpam322.iwd must be installed in main folder. (fs_game)
+ - From version 3.20, all iwd files have to be installed in main folder.
This is because of bug that cvars / settings changed in game are not saved into the config when running a game with fs_game set.
Make sure cvar /fs_game is empty and iwd files are placed in main folder.
@@ -348,7 +404,7 @@ Make sure cvar /fs_game is empty and iwd files are placed in main folder.
#### WWW downloading must be enabled. Set sv_wwwDownload and sv_wwwBaseURL
- You have to enable www downloading via cvar /sv_wwwDownload 1 and specify a download url via cvar /sv_wwwBaseURL "url".
-- If you dont have any url, you can use /sv_wwwBaseURL "http://cod2x.me/zpam321"
+- If you dont have any url, you can use /sv_wwwBaseURL "http://cod2x.me/zpam322"
- This is to make sure fixed maps are downloaded in fast way for players
#### Old pam / maps detected in main folder. Delete iwd file you see above.
@@ -566,7 +622,8 @@ Added posibility to call bash mode from menu.
[3.3.29] Score changing via menu - in first readyup, you can change a score of teams (in case wrong pam_mode was set, server crash, etc..)
[3.3.30] New spectating system - new UI, auto-spectator is now better, score stats, player progress stats, etc..
[3.3.31] Round report - at the end of the round info about kills and hits you made are printed
-[3.3.32] New damage feedback for assists - when player damaged by you is killed, damage feedback cross is showed
+[3.3.32] New damage feedback for assists - when player damaged by you is killed, "assist" text is showed on screen
+
[3.3.33] Players left - new player names list of alive enemy players above players left counter (can be turned off via menu)
[3.3.34] In readyup, you can throw nades like in strat mode
[3.3.35] New custom settings for map mode in rcon menu - a few of the settings can be changed (for example shotgun rebalance, fast-reload fix) and this change stays applied in next maps
@@ -577,8 +634,12 @@ Added posibility to call bash mode from menu.
[3.3.38] Score in left-top corner can by enabled via settings menu
[3.3.39] For future hit diagnostics, at the end of each round info about hits is saved to cvar pam_damage_debug
[3.3.40] Hitbox rebalance - if you fire from rifle or scope to left arm at +-20* degress, it will be changed to kill to body
-[3.3.41] In halftime-readyup and between map readyup, when 5min timer expire, red timer is showed. If all players from 1 team are ready, match automatically start even if opponent team is not ready.
+[3.3.41] In halftime-readyup and between map readyup, when 5min timer expire, warning and red timer is showed. If all players from 1 team are ready, match automatically start even if opponent team is not ready.
+[3.3.42] Players left - when last player in team is killed, text "Allies Eliminated" / "Axis Eliminated" is showed
+[3.3.43] When you hit your teammate, reddish hit mark is showed
+
-
+
diff --git a/images/assist.png b/images/assist.png
new file mode 100644
index 0000000..655f323
Binary files /dev/null and b/images/assist.png differ
diff --git a/images/auto_readyup.png b/images/auto_readyup.png
index 91c2dbb..840d185 100644
Binary files a/images/auto_readyup.png and b/images/auto_readyup.png differ
diff --git a/images/team_hit.png b/images/team_hit.png
new file mode 100644
index 0000000..3d684ab
Binary files /dev/null and b/images/team_hit.png differ
diff --git a/source/maps/mp/gametypes/_callbacksetup.gsc b/source/maps/mp/gametypes/_callbacksetup.gsc
index abec163..e23c7ac 100644
--- a/source/maps/mp/gametypes/_callbacksetup.gsc
+++ b/source/maps/mp/gametypes/_callbacksetup.gsc
@@ -343,7 +343,7 @@ CodeCallback_PlayerDamage(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath
{
//eAttacker iprintln("^6DMG feedback" + i);
if(isPlayer(eAttacker) && eAttacker != self && !(iDFlags & level.iDFLAGS_NO_PROTECTION))
- eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback();
+ eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback(self);
}
//println("##################### " + "notifyDamage");
diff --git a/source/maps/mp/gametypes/_damagefeedback.gsc b/source/maps/mp/gametypes/_damagefeedback.gsc
index da51402..0345239 100644
--- a/source/maps/mp/gametypes/_damagefeedback.gsc
+++ b/source/maps/mp/gametypes/_damagefeedback.gsc
@@ -10,6 +10,8 @@ init()
{
precacheShader("damage_feedback");
precacheRumble("damage_heavy");
+
+ precacheString2("STRING_ASSIST", &"assist");
}
}
@@ -25,7 +27,7 @@ onCvarChanged(cvar, value, isRegisterTime)
return false;
}
-updateDamageFeedback()
+updateDamageFeedback(enemy)
{
if (level.scr_show_hitblip)
{
@@ -43,6 +45,11 @@ updateDamageFeedback()
self.hud_damagefeedback setShader("damage_feedback", 24, 24);
}
+ color = (1,1,1);
+ if (isPlayer(enemy) && level.gametype == "sd" && !level.in_readyup && enemy.pers["team"] == self.pers["team"])
+ color = (1,0.5,0.5);
+
+ self.hud_damagefeedback.color = color;
self.hud_damagefeedback.alpha = 1;
self.hud_damagefeedback fadeOverTime(1);
self.hud_damagefeedback.alpha = 0;
@@ -56,11 +63,25 @@ updateAssistsFeedback()
{
if (level.scr_show_hitblip)
{
- if(isPlayer(self) && isDefined(self.hud_damagefeedback))
+ if(isPlayer(self))
{
- self.hud_damagefeedback.alpha = 0.5;
- self.hud_damagefeedback fadeOverTime(0.6);
- self.hud_damagefeedback.alpha = 0;
+ if (!isDefined(self.hud_assistfeedback))
+ {
+ self.hud_assistfeedback = newClientHudElem2(self);
+ self.hud_assistfeedback.horzAlign = "center";
+ self.hud_assistfeedback.vertAlign = "middle";
+ self.hud_assistfeedback.x = 0;
+ self.hud_assistfeedback.y = 20;
+ self.hud_assistfeedback.alpha = 0;
+ self.hud_assistfeedback.archived = true;
+ self.hud_assistfeedback.color = (1,1,1);
+ self.hud_assistfeedback.fontSize = 1.1;
+ self.hud_assistfeedback setText(game["STRING_ASSIST"]);
+ }
+
+ self.hud_assistfeedback.alpha = 1;
+ self.hud_assistfeedback fadeOverTime(1.3);
+ self.hud_assistfeedback.alpha = 0;
}
}
}
diff --git a/source/maps/mp/gametypes/_matchinfo.gsc b/source/maps/mp/gametypes/_matchinfo.gsc
index a89d49e..f44797d 100644
--- a/source/maps/mp/gametypes/_matchinfo.gsc
+++ b/source/maps/mp/gametypes/_matchinfo.gsc
@@ -385,7 +385,9 @@ resetAll()
waitForPlayerOrClear(playersLast)
{
- wait level.fps_multiplier * 25;
+ wait level.fps_multiplier * 15;
+
+ resetCount = 0;
for(;;)
{
@@ -396,6 +398,12 @@ waitForPlayerOrClear(playersLast)
// reset matchinfo if 30% of players disconnect or there are no players or there was no players last map
players = getentarray("player", "classname");
if (((players.size * 1.0) < (playersLast * 0.7)) || ((players.size * 1.0) > (playersLast * 1.2)) || players.size <= 1 || playersLast <= 1)
+ resetCount++;
+ else
+ resetCount = 0;
+
+ // We are sure to reset the match info
+ if (resetCount >= 4)
{
clear();
iprintln("Info about teams was cleared.");
@@ -667,7 +675,7 @@ refresh()
if (playersLast != "")
{
level thread waitForPlayerOrClear(int(playersLast));
- setcvar("sv_map_players", "");
+ //setcvar("sv_map_players", "");
}
// Save previous time left
@@ -765,6 +773,17 @@ refresh()
setCvarIfChanged("sv_map_totaltime", game["match_totaltime"]);
+ // Update number of players in first round (and second update only of its higher due to missing player in first round)
+ // If number of players change, matchinfo is reseted next map due to different number of players
+ if (game["match_teams_set"])
+ {
+ savedPlayers = GetCvarInt("sv_map_players"); // GetCvarInt return 0 if cvar is empty string
+ players = getentarray("player", "classname");
+
+ if (savedPlayers == 0 || (game["round"] == 2 && players.size > savedPlayers))
+ setCvarIfChanged("sv_map_players", players.size);
+ }
+
// Total time
if (game["match_totaltime"] > 0)
@@ -823,13 +842,6 @@ refresh()
setCvarIfChanged("sv_map_score", (game["match_team1_score_beforeOvertime"] + team1add) + " : " + (game["match_team2_score_beforeOvertime"] + team2add) + " OT");
}
-
- // Update number of player in this match
- // Update this value only if it increases - avoid decreasing it for case when players disconnect in the middle of the match
- // so next time map restart the info about match is properly reseted due to low number of players
- players = getentarray("player", "classname");
- if (players.size > GetCvarInt("sv_map_players"))
- setCvarIfChanged("sv_map_players", players.size);
}
// Global server cvars visible via HLSW
diff --git a/source/maps/mp/gametypes/_menu_scoreboard.gsc b/source/maps/mp/gametypes/_menu_scoreboard.gsc
index dee1573..031bca7 100644
--- a/source/maps/mp/gametypes/_menu_scoreboard.gsc
+++ b/source/maps/mp/gametypes/_menu_scoreboard.gsc
@@ -196,7 +196,15 @@ addLine(player, name, score, kills, deaths, assists, damages, plants, defuses)
self.scoreboard.names += "^4"; // blue
}
- if (isDefined(name)) self.scoreboard.names += removeColorsFromString(name);
+
+
+ if (isDefined(name))
+ {
+ // In final scoreboard show name colors, otherwise dont
+ if (game["state"] != "intermission")
+ name = removeColorsFromString(name);
+ self.scoreboard.names += name;
+ }
if (isDefined(score)) self.scoreboard.scores += score;
if (isDefined(kills)) self.scoreboard.kills += kills;
if (isDefined(deaths)) self.scoreboard.deaths += deaths;
diff --git a/source/maps/mp/gametypes/_pam.gsc b/source/maps/mp/gametypes/_pam.gsc
index c463a42..d212af1 100644
--- a/source/maps/mp/gametypes/_pam.gsc
+++ b/source/maps/mp/gametypes/_pam.gsc
@@ -4,7 +4,7 @@ init()
{
if(game["firstInit"])
{
- precacheString2("STRING_VERSION_INFO", &"zPAM 3.21"); // ZPAM_RENAME
+ precacheString2("STRING_VERSION_INFO", &"zPAM 3.22"); // ZPAM_RENAME
}
}
diff --git a/source/maps/mp/gametypes/_players_left.gsc b/source/maps/mp/gametypes/_players_left.gsc
index fc09acd..ac9fe4b 100644
--- a/source/maps/mp/gametypes/_players_left.gsc
+++ b/source/maps/mp/gametypes/_players_left.gsc
@@ -56,7 +56,8 @@ onConnected()
self thread createHUD();
// Enable player list by default, can be overwritten by player settings
- self.pers["playersleft_list"] = true;
+ if (!isDefined(self.pers["playersleft_list"]))
+ enable();
}
else
self hide(); // hide is set from previous map
@@ -229,14 +230,6 @@ updateHUD(alliesChanged, axisChanged)
self.playersLeft_myTeam_num setValue(level.axis_alive);
self.playersLeft_enemy_num setValue(level.allies_alive);
-
- // Bounce animation
- if (alliesChanged && self.pers["team"] == "axis")
- {
- self thread doBounceAnimation(self.playersLeft_enemy_num);
- if (level.allies_alive == 0)
- self thread doBounceAnimation(self.playersLeft_enemy);
- }
}
else // allies on left
{
@@ -268,14 +261,6 @@ updateHUD(alliesChanged, axisChanged)
self.playersLeft_myTeam_num setValue(level.allies_alive);
self.playersLeft_enemy_num setValue(level.axis_alive);
-
- // Bounce animation
- if (axisChanged && self.pers["team"] == "allies")
- {
- self thread doBounceAnimation(self.playersLeft_enemy_num);
- if (level.axis_alive == 0)
- self thread doBounceAnimation(self.playersLeft_enemy);
- }
}
if (self.pers["team"] == "spectator")
@@ -287,40 +272,32 @@ updateHUD(alliesChanged, axisChanged)
}
else
{
- self.playersLeft_myTeam.color = (.580,.961,.573);
- self.playersLeft_myTeam_num.color = (.580,.961,.573);
- self.playersLeft_enemy.color = (.055,.855,.996);
- self.playersLeft_enemy_num.color = (.055,.855,.996);
- }
-}
-
-
-doBounceAnimation(element)
-{
- self endon("disconnect");
-
- if (isDefined(element.inBounce))
- return;
-
- // Up down animation
- element moveovertime(0.1);
- element.y = 469;
- element.inBounce = true;
-
- wait level.fps_multiplier * 0.12222;
+ // Eliminetd text is showed
+ if (self.playersLeft_myTeam_num.alpha == 0)
+ {
+ self.playersLeft_myTeam.color = (1,0.2,0.2);
+ // 0 Allies left is showed
+ } else {
+ self.playersLeft_myTeam.color = (.580,.961,.573);
+ self.playersLeft_myTeam_num.color = (.580,.961,.573);
+ }
- element moveovertime(0.2);
- element.y = 479;
- element.inBounce = undefined;
+ // Eliminetd text is showed
+ if (self.playersLeft_enemy_num.alpha == 0)
+ {
+ self.playersLeft_enemy.color = (1,0.2,0.2);
+ // 0 Allies left is showed
+ } else {
+ self.playersLeft_enemy.color = (.055,.855,.996);
+ self.playersLeft_enemy_num.color = (.055,.855,.996);
+ }
+ }
}
-
-
-
isEnabled()
{
return isDefined(self.pers["playersleft_list"]) && self.pers["playersleft_list"];
diff --git a/source/maps/mp/gametypes/_readyup.gsc b/source/maps/mp/gametypes/_readyup.gsc
index d6a4f03..f288d30 100644
--- a/source/maps/mp/gametypes/_readyup.gsc
+++ b/source/maps/mp/gametypes/_readyup.gsc
@@ -43,6 +43,8 @@ init()
game["objective_timeout"] = game["readyup_press_activate"];
+ precacheString2("STRING_READYUP_SELECT_TEAM", &"Select team!");
+
precacheString2("STRING_READYUP_RESUMING_IN", &"Resuming In");
precacheString2("STRING_READYUP_KILLING_DISABLED", &"Disabled");
precacheString2("STRING_READYUP_KILLING_ENABLED", &"Enabled");
@@ -53,6 +55,9 @@ init()
precacheString2("STRING_READYUP_MATCH_CONTINUES_IN", &"Match continues in:");
precacheString2("STRING_READYUP_MATCH_RESUMES_IN", &"Match resumes in:");
+ // Time to readyup expired
+ precacheString2("STRING_READYUP_SET_YOUR_TEAM_AS_READY", &"Time is over. Setting one team ready will skip the Ready-up.");
+
// Readyup warnings
precacheString2("STRING_WARNING_PASSWORD_IS_NOT_SET", &"Warning: Server password is not set");
precacheString2("STRING_WARNING_CHEATS_ARE_ENABLED", &"Warning: Cheats are Enabled");
@@ -194,6 +199,9 @@ onSpawned()
self PrintTeamAndHowToUse();
+ // Warning to select team if player is team none
+ self HUD_SelectTeam();
+
if (level.scr_readyup_nadetraining)
{
@@ -592,9 +600,6 @@ ReadyUp_AutoResume()
// Resume after scr_readyup_autoresume seconds (5 mins defaults)
wait level.fps_multiplier * level.scr_readyup_autoresume * 60;
- // Set your team as ready to skip readyup
- iprintlnbold(game["readyup_timeExpired"]);
- iprintlnbold(game["readyup_skip"]);
level thread HUD_ReadyUp_ResumingIn_ExtraTime();
@@ -1112,6 +1117,24 @@ HUD_ReadyUp_ResumingIn_ExtraTime()
{
level endon("readyup_removeAutoResume");
+ // Set your team as ready to skip readyup
+ level.setYourTeamAsReadyBG = addHUD(-160, 347, undefined, (1,1,1), "left", "top", "center", "top");
+ level.setYourTeamAsReadyBG setShader("black", 320, 20);
+ level.setYourTeamAsReadyBG.alpha = 0.75;
+
+ level.setYourTeamAsReady = newHudElem2();
+ level.setYourTeamAsReady.x = 320;
+ level.setYourTeamAsReady.y = 350;
+ level.setYourTeamAsReady.alignX = "center";
+ level.setYourTeamAsReady.alignY = "top";
+ level.setYourTeamAsReady.fontScale = 1.1;
+ level.setYourTeamAsReady.color = (1, 0, 0);
+ level.setYourTeamAsReady setText(game["STRING_READYUP_SET_YOUR_TEAM_AS_READY"]);
+
+ iprintlnbold(game["readyup_timeExpired"]);
+ iprintlnbold(game["readyup_skip"]);
+
+ // Red extra time
level.ht_resume_clock_extra = newHudElem2();
level.ht_resume_clock_extra.x = level.hud_readyup_offsetX;
level.ht_resume_clock_extra.y = level.hud_readyup_offsetY + 248;
@@ -1158,6 +1181,14 @@ HUD_ReadyUp_ResumingIn_Delete()
level.ht_resume_clock_extra destroy2();
level.ht_resume_clock_extra = undefined;
}
+
+ if (isDefined(level.setYourTeamAsReadyBG))
+ {
+ level.setYourTeamAsReadyBG destroy2();
+ level.setYourTeamAsReadyBG = undefined;
+ level.setYourTeamAsReady destroy2();
+ level.setYourTeamAsReady = undefined;
+ }
}
@@ -1201,6 +1232,34 @@ HUD_Timeout_ResumingIn()
}
+
+// Called each time player is spawned
+HUD_SelectTeam()
+{
+ if (self.pers["team"] == "none")
+ {
+ if (!isDefined(self.selectTeamInfoBG))
+ {
+ // Set your team as ready to skip readyup
+ self.selectTeamInfoBG = addHUDClient(self, -50, -23, undefined, (1,1,1), "left", "top", "center", "middle");
+ self.selectTeamInfoBG setShader("black", 100, 20);
+ self.selectTeamInfoBG.alpha = 0.75;
+
+ self.selectTeamInfo = addHUDClient(self, 0, -20, 1.1, (1,1,1), "center", "top", "center", "middle");
+ self.selectTeamInfo setText(game["STRING_READYUP_SELECT_TEAM"]);
+ }
+
+ }
+ else if (isDefined(self.selectTeamInfo))
+ {
+ self.selectTeamInfoBG destroy2();
+ self.selectTeamInfoBG = undefined;
+ self.selectTeamInfo destroy2();
+ self.selectTeamInfo = undefined;
+ }
+}
+
+
// Black scren + timer countdown
HUD_Half_Start(time)
{
diff --git a/source/maps/mp/gametypes/_record.gsc b/source/maps/mp/gametypes/_record.gsc
index b9d7d46..e67ca3f 100644
--- a/source/maps/mp/gametypes/_record.gsc
+++ b/source/maps/mp/gametypes/_record.gsc
@@ -162,7 +162,7 @@ generateDemoName()
// Assing my team name as first
myTeamName = game["match_team1_name"];
enemyTeamName = game["match_team2_name"];
- if (self.pers["team"] == "axis" && game["match_team2_side"] == "axis")
+ if (self.pers["team"] == game["match_team2_side"])
{
myTeamName = game["match_team2_name"];
enemyTeamName = game["match_team1_name"];
@@ -306,6 +306,8 @@ stopRecordingForAll()
player openMenu(game["menu_exec_cmd"]); // open menu via script
player closeMenu(); // will only close menu opened by script
+ // Serverinfo menu reopen
+ player thread reopenServerinfoMenu();
player iprintln("Recording stopped.");
@@ -316,6 +318,21 @@ stopRecordingForAll()
}
+reopenServerinfoMenu()
+{
+ self endon("disconnect");
+
+ wait level.fps_multiplier * 0.1;
+
+ // Because stop recording may be called when matchinfo is cleared - it will close sevrerinfo menu for connected players
+ // If they are still in serverinfo menu, open that menu again
+ if(!isDefined(self.pers["skipserverinfo"]))
+ {
+ self openMenu(game["menu_serverinfo"]);
+ }
+}
+
+
execRecording()
{
// Auto recording is turned off by player, print atleast warning message
diff --git a/source/maps/mp/gametypes/_score_set.gsc b/source/maps/mp/gametypes/_score_set.gsc
index 89e1f11..689a2a9 100644
--- a/source/maps/mp/gametypes/_score_set.gsc
+++ b/source/maps/mp/gametypes/_score_set.gsc
@@ -85,7 +85,7 @@ handle(team, roundsplayed, value)
- if ((roundsplayed > level.halfround && level.halfround > 0) || (value > level.halfscore && level.halfscore > 0))
+ if ((roundsplayed >= level.halfround && level.halfround > 0) || (value >= level.halfscore && level.halfscore > 0))
game["is_halftime"] = true;
else
game["is_halftime"] = false;
diff --git a/source/maps/mp/gametypes/global/developer.gsc b/source/maps/mp/gametypes/global/developer.gsc
index 00b4836..21a0dc1 100644
--- a/source/maps/mp/gametypes/global/developer.gsc
+++ b/source/maps/mp/gametypes/global/developer.gsc
@@ -511,7 +511,7 @@ onConnected()
self notify("menuresponse", game["menu_serverinfo"], "close");
wait level.frame;
- i = 1;
+ i = 0;
if (i == 0)
{
diff --git a/source/maps/mp/gametypes/global/pam.gsc b/source/maps/mp/gametypes/global/pam.gsc
index ac8bde4..7750b3b 100644
--- a/source/maps/mp/gametypes/global/pam.gsc
+++ b/source/maps/mp/gametypes/global/pam.gsc
@@ -24,7 +24,7 @@ init()
// Errors
precacheString2("STRING_PAM_DONT_STEAL", &"This version of pam is only for testing! Dont steal!");
- precacheString2("STRING_PAM_MUST_EXISTS_UNDER_MAIN", &"Iwd file ^9zpam321.iwd^7 must be installed in ^9main^7 folder. (fs_game)"); // ZPAM_RENAME
+ precacheString2("STRING_PAM_MUST_EXISTS_UNDER_MAIN", &"Iwd file ^9zpam322.iwd^7 must be installed in ^9main^7 folder. (fs_game)"); // ZPAM_RENAME
precacheString2("STRING_PAM_GETTING_IWD_FILES_ERROR", &"Error while getting loaded iwd files. Make sure iwd files does not contains spaces.");
precacheString2("STRING_PAM_TOUJANE_FIX_MISSING", &"Iwd file ^9mp_toujane_fix_v2.iwd^7 must be installed in ^9main^7 folder");
precacheString2("STRING_PAM_BURGUNDY_FIX_MISSING", &"Iwd file ^9mp_burgundy_fix_v1.iwd^7 must be installed in ^9main^7 folder");
@@ -38,7 +38,7 @@ init()
}
- level.pam_folder = "main/zpam321"; // ZPAM_RENAME
+ level.pam_folder = "main/zpam322"; // ZPAM_RENAME
level.pam_mode_change = false;
@@ -222,8 +222,9 @@ CheckInstallation()
blackList[blackList.size] = "zpam310_beta6";
blackList[blackList.size] = "zpam320_test";
blackList[blackList.size] = "zpam320";
+ blackList[blackList.size] = "zpam321";
blackList[blackList.size] = "mp_toujane_fix_v1";
-
+ // ZPAM_RENAME - add old pam
for(i = 0; i < blackList.size; i++)
{
@@ -236,9 +237,6 @@ CheckInstallation()
return;
}
}
-
-
- // TODO check www download url and set github?
}
diff --git a/source/readme.txt b/source/readme.txt
index c2d9cfc..097e72a 100644
--- a/source/readme.txt
+++ b/source/readme.txt
@@ -1,5 +1,5 @@
-zPAM3.1 BETA 6
-Released 2021/01/05
+zPAM3.22
+Released 2021/07/15
This mod was created by EYZA
diff --git a/source/ui_mp/connect.menu b/source/ui_mp/connect.menu
index fbe5d68..7fa279c 100644
--- a/source/ui_mp/connect.menu
+++ b/source/ui_mp/connect.menu
@@ -85,10 +85,10 @@
{
visible 1
origin 447 15
- forecolor 1 1 0 1
- text "You are playing on testing version of zPAM"
+ forecolor 1 1 1 1
+ text "You are playing on server with BETA version of zPAM3.22"
textfont UI_FONT_NORMAL
- textscale 0.25
+ textscale 0.2
textstyle ITEM_TEXTSTYLE_SHADOWED
textalign ITEM_ALIGN_CENTER
decoration
@@ -97,21 +97,22 @@
{
visible 1
origin 447 30
- forecolor 1 1 0 1
+ forecolor 1 1 1 0.8
text "Please report bugs on discord ^2LetsPlay Europe ^7in ^2#cod2-zpam-3 ^7channel."
textfont UI_FONT_NORMAL
- textscale 0.25
+ textscale 0.2
textstyle ITEM_TEXTSTYLE_SHADOWED
textalign ITEM_ALIGN_CENTER
decoration
}
*/
+
itemDef
{
visible 1
origin 447 15
forecolor 1 1 1 1
- text "You are playing on server with ^2zPAM3.21" // ZPAM_RENAME
+ text "You are playing on server with ^2zPAM3.22" // ZPAM_RENAME
textfont UI_FONT_NORMAL
textscale 0.2
textstyle ITEM_TEXTSTYLE_SHADOWED
diff --git a/source/ui_mp/scriptmenus/submenus/ingame_aboutpam.menu b/source/ui_mp/scriptmenus/submenus/ingame_aboutpam.menu
index 5b19de6..dde7708 100644
--- a/source/ui_mp/scriptmenus/submenus/ingame_aboutpam.menu
+++ b/source/ui_mp/scriptmenus/submenus/ingame_aboutpam.menu
@@ -69,7 +69,7 @@ itemDef
visible 1
origin 60 101
forecolor GLOBAL_UNFOCUSED_COLOR
- text "askeslav, tomik, cokY, Sk1lzZ, YctN, kebit, foxbuster"
+ text "askeslav, tomik, cokY, Sk1lzZ, YctN, kebit, foxbuster, shady"
textfont UI_FONT_NORMAL
textscale 0.25
textstyle ITEM_TEXTSTYLE_SHADOWED
diff --git a/zip/main/public.cfg b/zip/main/public.cfg
new file mode 100644
index 0000000..4ebb1f0
--- /dev/null
+++ b/zip/main/public.cfg
@@ -0,0 +1,223 @@
+//************************************************
+// ____ _ __ __ _____
+// | _ \ / \ | \/ | |___ /
+// | |_) | / _ \ | |\/| | |_ \
+// | __/ / ___ \ | | | | ___) |
+// |_| /_/ \_\ |_| |_| |____/
+//
+// *********************************************/
+
+// Put this file inside main folder
+// Exec this file via command line '+exec public'
+// Cvars below are used only if pam_mode is set to public (pam_mode pub)
+// Otherwise these settings are overwritten by pam_mode rules
+
+
+//*******************************
+// S&D Public server settings
+//*******************************
+// Match Style
+set scr_sd_timelimit 0 // Time limit for map. 0=disabled (minutes)
+set scr_sd_half_round 10 // Number of rounds when half-time starts. 0=ignored
+set scr_sd_half_score 0 // Number of score when half-time starts. 0=ignored
+set scr_sd_end_round 20 // Number of rounds when map ends. 0=ignored
+set scr_sd_end_score 0 // Number of score when map ends. 0=ignored
+
+// Round options
+set scr_sd_strat_time 4 // Time before round starts where players cannot move
+set scr_sd_roundlength 2 // Time length of each round (min)
+set scr_sd_end_time 8 // Time et the end of the round (after last player is killed) when you can finding weapons for the next round
+set scr_sd_count_draws 0 // If players are killed at same time - count this round (1) or play new round (0)?
+
+// Bomb settings
+set scr_sd_bombtimer_show 1 // Show bombtimer stopwatch
+set scr_sd_bombtimer 60 // Time untill bomb explodes. (seconds)
+set scr_sd_PlantTime 5
+set scr_sd_DefuseTime 10
+set scr_sd_plant_points 0
+set scr_sd_defuse_points 0
+
+
+
+
+//*******************************
+// TDM Public server settings
+//*******************************
+// Match Style
+set scr_tdm_timelimit 15 // Time limit. When halftime is enabled, its time limit per half. 0=disabled (minutes)
+set scr_tdm_half_score 0 // Number of score when half-time starts. Has no effect when halftime is disabled.
+set scr_tdm_end_score 0 // Number of score when map ends. 0=ignored
+// Halftime
+set scr_tdm_halftime 1 // Do halftime. When 1, scr_tdm_timelimit means time per half
+
+
+
+
+//*******************************
+// DM Public server settings
+//*******************************
+// Match Style
+set scr_dm_timelimit 15 // Time limit. When halftime is enabled, its time limit per half. 0=disabled (minutes)
+set scr_dm_half_score 0 // Number of score when half-time starts. Has no effect when halftime is disabled.
+set scr_dm_end_score 0 // Number of score when map ends. 0=ignored
+// Halftime
+set scr_dm_halftime 0 // Do halftime. When 1, scr_dm_timelimit means time per half
+
+
+
+
+
+
+
+//*******************************
+// Shared gametype script cvars
+//*******************************
+
+// Readyup
+set scr_readyup 0 // Enable readyup [0, 1] 0 = disbled 1 = enabled
+set scr_readyup_autoresume 5 // Minutes to auto-resume halftime [0 - 10] 0 = disabled
+set scr_readyup_nadetraining 0 // Enable strat grenade fly mode in readyup
+set scr_half_start_timer 10 // Count-down timer when First-half starting / Second-half starting / Timeout ending
+
+// Time-out
+set scr_timeouts 0 // Total timeouts for one team
+set scr_timeouts_half 1 // How many per side
+set scr_timeout_length 5 // Length in minutes
+
+// Are there OT Rules?
+set scr_overtime 0
+
+// Hud Options
+set scr_show_players_left 1
+set scr_show_objective_icons 0
+set scr_show_hitblip 1
+
+set scr_show_scoreboard 1 //Score in the upper left corner [0 - 1] 0=hided 1=visible (if 1, score can be still hided by player settings)
+set scr_show_scoreboard_limit 0
+
+// Health Regeneration
+set scr_allow_health_regen 1 // 0=no regen, 1=refill health after "scr_regen_delay"
+set scr_allow_regen_sounds 1
+set scr_regen_delay 5000 //Time before regen starts
+
+// Ambients
+set scr_allow_ambient_fog 0
+set scr_allow_ambient_sounds 0
+set scr_allow_ambient_fire 0
+set scr_allow_ambient_weather 0
+
+
+set scr_allow_shellshock 0 // Create shell shock effect when player is hitted
+set scr_replace_russian 0 // Replace russians with Americans / Brisith
+set scr_blackout 0 // If match is in progress, show map background all over the screen and disable sounds for connected player
+set scr_recording 0 // Starts automatically recording when match starts
+set scr_matchinfo 0 // Show match info in menu (1 = without team names, 2 = with team names)
+set scr_map_vote 1 // Open voting system so players can vote about next map
+set scr_map_vote_replay 0 // Show option to replay this map in voting system
+set scr_auto_deadchat 0 // Automaticly enable / disable deadchat
+set scr_remove_killtriggers 1 // Remove some of the kill-triggers created in 1.3 path
+set scr_bash 0 // Bash mode can be called via menu in readyup
+
+set scr_friendlyfire 1
+set scr_drawfriend 1
+set scr_teambalance 0
+set scr_spectatefree 0
+set scr_spectateenemy 0
+
+set g_allowVote 0
+set g_antilag 0
+set g_maxDroppedWeapons 32
+set sv_fps 30
+set sv_maxRate 25000
+set sv_timeout 60 // Time after 999 player is kicked
+
+set scr_fast_reload_fix 1 // Prevent players from shoting faster via double-scroll bug
+set scr_shotgun_rebalance 1 // Enable shotgun rebalance to fix long shot kills and short range hits
+set scr_prone_peek_fix 1 // Prevent players from doing fast peeks from prone (time, after player can prone again will be increased)
+set scr_mg_peek_fix 1 // When mg is dropped, player is spawned right behid mg
+set scr_hand_hitbox_fix 1 // Damage to left hand is adjusted for rifles and scopes.
+set scr_killcam 0
+
+
+
+//*******************************
+// Weapons
+//*******************************
+
+// Nade spawn counts for each class
+set scr_boltaction_nades 1
+set scr_semiautomatic_nades 1
+set scr_smg_nades 1
+set scr_sniper_nades 1
+set scr_mg_nades 1
+set scr_shotgun_nades 1
+
+// Smoke spawn counts for each class
+set scr_boltaction_smokes 0
+set scr_semiautomatic_smokes 0
+set scr_smg_smokes 0
+set scr_sniper_smokes 0
+set scr_mg_smokes 0
+set scr_shotgun_smokes 1
+
+// Weapon Limits by class per team
+set scr_boltaction_limit 99
+set scr_sniper_limit 1
+set scr_semiautomatic_limit 99
+set scr_smg_limit 99
+set scr_mg_limit 99
+set scr_shotgun_limit 1
+
+// Allow weapon drop when player die
+set scr_boltaction_allow_drop 1
+set scr_sniper_allow_drop 0
+set scr_semiautomatic_allow_drop 1
+set scr_smg_allow_drop 1
+set scr_mg_allow_drop 1
+set scr_shotgun_allow_drop 0
+
+// Allow grenade / smoke drop when player die
+set scr_allow_grenade_drop 1
+set scr_allow_smoke_drop 0
+
+// Player's weapon drop
+set scr_allow_primary_drop 1
+set scr_allow_secondary_drop 1
+
+// Allow/Disallow Weapons
+set scr_allow_greasegun 1
+set scr_allow_m1carbine 1
+set scr_allow_m1garand 1
+set scr_allow_springfield 1
+set scr_allow_thompson 1
+set scr_allow_bar 1
+set scr_allow_sten 1
+set scr_allow_enfield 1
+set scr_allow_enfieldsniper 1
+set scr_allow_bren 1
+set scr_allow_pps42 1
+set scr_allow_nagant 1
+set scr_allow_svt40 1
+set scr_allow_nagantsniper 1
+set scr_allow_ppsh 1
+set scr_allow_mp40 1
+set scr_allow_kar98k 1
+set scr_allow_g43 1
+set scr_allow_kar98ksniper 1
+set scr_allow_mp44 1
+set scr_allow_shotgun 1
+
+set scr_allow_pistols 1
+set scr_allow_turrets 1
+
+// Single Shot Kills
+set scr_no_oneshot_pistol_kills 0
+set scr_no_oneshot_ppsh_kills 0
+
+// PPSH Balance - Limits range of PPSH to same as Tommy
+set scr_balance_ppsh_distance 0
+
+
+
+
+set sv_maprotation "map mp_toujane map mp_burgundy map mp_dawnville map mp_matmata map mp_carentan map mp_farmhouse map mp_brecourt map mp_trainstation map mp_leningrad map mp_downtown map mp_railyard map mp_breakout"
diff --git a/zip/main/server.cfg b/zip/main/server.cfg
index 7b36c1d..d4f7e3e 100644
--- a/zip/main/server.cfg
+++ b/zip/main/server.cfg
@@ -8,19 +8,21 @@
// *********************************************/
// Put this file inside main folder
-// Exec this file via command line +exec server
-
-// PAM mode
-set pam_mode "cg_mr12" // pub, pcw, cg, cg_mr12, ...
+// Exec this file via command line '+exec server'
// Game type
-set g_gametype "sd"
+set g_gametype "sd" // sd, dm, tdm, strat
+
+// PAM mode
+set pam_mode "cg_mr12" // SD: pub, pcw, cg, cg_mr12, cg_2v2, mr3, mr10, mr12, mr15, fun
+ // DM: pub, pcw, warmup
+ // TDM: pub, pcw
// Hostname
-set sv_hostname "Awesome server name | zPAM3.21"
+set sv_hostname "Awesome server name | zPAM3.22"
// Message of the Day
-set scr_motd "Welcome. This server is running zPAM3.21"
+set scr_motd "Welcome. This server is running zPAM3.22"
// Server password
set g_password ""
@@ -29,7 +31,7 @@ set g_password ""
set rcon_password ""
// Mod download url
-seta sv_wwwBaseURL "" // enter a valid URL address, otherwise zPAM will not work
+seta sv_wwwBaseURL "http://cod2x.me/zpam322" // enter a valid URL address, otherwise zPAM will not work
seta sv_wwwDlDisconnected "0"
seta sv_wwwDownload "1"
@@ -39,217 +41,5 @@ set logfile "0"
set g_log "games_mp.log"
set g_logsync "0"
-
-
-// Cvars below are used only if pam_mode is set to pub (public)
-// Otherwise these settings are overwritten by pam_mode rules
-
-
-//*******************************
-// S&D Public server settings
-//*******************************
-// Match Style
-set scr_sd_timelimit 0 // Time limit for map. 0=disabled (minutes)
-set scr_sd_half_round 10 // Number of rounds when half-time starts. 0=ignored
-set scr_sd_half_score 0 // Number of score when half-time starts. 0=ignored
-set scr_sd_end_round 20 // Number of rounds when map ends. 0=ignored
-set scr_sd_end_score 0 // Number of score when map ends. 0=ignored
-
-// Round options
-set scr_sd_strat_time 4 // Time before round starts where players cannot move
-set scr_sd_roundlength 2 // Time length of each round (min)
-set scr_sd_end_time 8 // Time et the end of the round (after last player is killed) when you can finding weapons for the next round
-set scr_sd_count_draws 0 // If players are killed at same time - count this round (1) or play new round (0)?
-
-// Bomb settings
-set scr_sd_bombtimer_show 1 // Show bombtimer stopwatch
-set scr_sd_bombtimer 60 // Time untill bomb explodes. (seconds)
-set scr_sd_PlantTime 5
-set scr_sd_DefuseTime 10
-set scr_sd_plant_points 0
-set scr_sd_defuse_points 0
-
-
-
-
-//*******************************
-// TDM Public server settings
-//*******************************
-// Match Style
-set scr_tdm_timelimit 15 // Time limit. When halftime is enabled, its time limit per half. 0=disabled (minutes)
-set scr_tdm_half_score 0 // Number of score when half-time starts. Has no effect when halftime is disabled.
-set scr_tdm_end_score 0 // Number of score when map ends. 0=ignored
-// Halftime
-set scr_tdm_halftime 1 // Do halftime. When 1, scr_tdm_timelimit means time per half
-
-
-
-
-//*******************************
-// DM Public server settings
-//*******************************
-// Match Style
-set scr_dm_timelimit 15 // Time limit. When halftime is enabled, its time limit per half. 0=disabled (minutes)
-set scr_dm_half_score 0 // Number of score when half-time starts. Has no effect when halftime is disabled.
-set scr_dm_end_score 0 // Number of score when map ends. 0=ignored
-// Halftime
-set scr_dm_halftime 0 // Do halftime. When 1, scr_dm_timelimit means time per half
-
-
-
-
-
-
-
-//*******************************
-// Shared gametype script cvars
-//*******************************
-
-// Readyup
-set scr_readyup 0 // Enable readyup [0, 1] 0 = disbled 1 = enabled
-set scr_readyup_autoresume 5 // Minutes to auto-resume halftime [0 - 10] 0 = disabled
-set scr_readyup_nadetraining 0 // Enable strat grenade fly mode in readyup
-set scr_half_start_timer 10 // Count-down timer when First-half starting / Second-half starting / Timeout ending
-
-// Time-out
-set scr_timeouts 0 // Total timeouts for one team
-set scr_timeouts_half 1 // How many per side
-set scr_timeout_length 5 // Length in minutes
-
-// Are there OT Rules?
-set scr_overtime 0
-
-// Hud Options
-set scr_show_players_left 1
-set scr_show_objective_icons 0
-set scr_show_hitblip 1
-
-set scr_show_scoreboard 1 //Score in the upper left corner [0 - 1] 0=hided 1=visible (if 1, score can be still hided by player settings)
-set scr_show_scoreboard_limit 0
-
-// Health Regeneration
-set scr_allow_health_regen 1 // 0=no regen, 1=refill health after "scr_regen_delay"
-set scr_allow_regen_sounds 1
-set scr_regen_delay 5000 //Time before regen starts
-
-// Ambients
-set scr_allow_ambient_fog 0
-set scr_allow_ambient_sounds 0
-set scr_allow_ambient_fire 0
-set scr_allow_ambient_weather 0
-
-
-set scr_allow_shellshock 0 // Create shell shock effect when player is hitted
-set scr_replace_russian 0 // Replace russians with Americans / Brisith
-set scr_blackout 0 // If match is in progress, show map background all over the screen and disable sounds for connected player
-set scr_recording 0 // Starts automatically recording when match starts
-set scr_matchinfo 0 // Show match info in menu (1 = without team names, 2 = with team names)
-set scr_map_vote 1 // Open voting system so players can vote about next map
-set scr_map_vote_replay 0 // Show option to replay this map in voting system
-set scr_auto_deadchat 0 // Automaticly enable / disable deadchat
-set scr_remove_killtriggers 1 // Remove some of the kill-triggers created in 1.3 path
-set scr_bash 0 // Bash mode can be called via menu in readyup
-
-set scr_friendlyfire 1
-set scr_drawfriend 1
-set scr_teambalance 0
-set scr_spectatefree 0
-set scr_spectateenemy 0
-
-set g_allowVote 0
-set g_antilag 0
-set g_maxDroppedWeapons 32
-set sv_fps 30
-set sv_maxRate 25000
-set sv_timeout 60 // Time after 999 player is kicked
-
-set scr_fast_reload_fix 1 // Prevent players from shoting faster via double-scroll bug
-set scr_shotgun_rebalance 1 // Enable shotgun rebalance to fix long shot kills and short range hits
-set scr_prone_peek_fix 1 // Prevent players from doing fast peeks from prone (time, after player can prone again will be increased)
-set scr_mg_peek_fix 1 // When mg is dropped, player is spawned right behid mg
-set scr_hand_hitbox_fix 1 // Damage to left hand is adjusted for rifles and scopes.
-set scr_killcam 0
-
-
-
-//*******************************
-// Weapons
-//*******************************
-
-// Nade spawn counts for each class
-set scr_boltaction_nades 1
-set scr_semiautomatic_nades 1
-set scr_smg_nades 1
-set scr_sniper_nades 1
-set scr_mg_nades 1
-set scr_shotgun_nades 1
-
-// Smoke spawn counts for each class
-set scr_boltaction_smokes 0
-set scr_semiautomatic_smokes 0
-set scr_smg_smokes 0
-set scr_sniper_smokes 0
-set scr_mg_smokes 0
-set scr_shotgun_smokes 1
-
-// Weapon Limits by class per team
-set scr_boltaction_limit 99
-set scr_sniper_limit 1
-set scr_semiautomatic_limit 99
-set scr_smg_limit 99
-set scr_mg_limit 99
-set scr_shotgun_limit 1
-
-// Allow weapon drop when player die
-set scr_boltaction_allow_drop 1
-set scr_sniper_allow_drop 0
-set scr_semiautomatic_allow_drop 1
-set scr_smg_allow_drop 1
-set scr_mg_allow_drop 1
-set scr_shotgun_allow_drop 0
-
-// Allow grenade / smoke drop when player die
-set scr_allow_grenade_drop 1
-set scr_allow_smoke_drop 0
-
-// Player's weapon drop
-set scr_allow_primary_drop 1
-set scr_allow_secondary_drop 1
-
-// Allow/Disallow Weapons
-set scr_allow_greasegun 1
-set scr_allow_m1carbine 1
-set scr_allow_m1garand 1
-set scr_allow_springfield 1
-set scr_allow_thompson 1
-set scr_allow_bar 1
-set scr_allow_sten 1
-set scr_allow_enfield 1
-set scr_allow_enfieldsniper 1
-set scr_allow_bren 1
-set scr_allow_pps42 1
-set scr_allow_nagant 1
-set scr_allow_svt40 1
-set scr_allow_nagantsniper 1
-set scr_allow_ppsh 1
-set scr_allow_mp40 1
-set scr_allow_kar98k 1
-set scr_allow_g43 1
-set scr_allow_kar98ksniper 1
-set scr_allow_mp44 1
-set scr_allow_shotgun 1
-
-set scr_allow_pistols 1
-set scr_allow_turrets 1
-
-// Single Shot Kills
-set scr_no_oneshot_pistol_kills 0
-set scr_no_oneshot_ppsh_kills 0
-
-// PPSH Balance - Limits range of PPSH to same as Tommy
-set scr_balance_ppsh_distance 0
-
-
-
-
-set sv_maprotation "map mp_toujane map mp_burgundy map mp_dawnville map mp_matmata map mp_carentan map mp_farmhouse map mp_brecourt map mp_trainstation map mp_leningrad map mp_downtown map mp_railyard map mp_breakout"
+// Map selection
+map mp_toujane
diff --git a/zip/main/zpam321.iwd b/zip/main/zpam322.iwd
similarity index 88%
rename from zip/main/zpam321.iwd
rename to zip/main/zpam322.iwd
index 6934613..ac2511f 100644
Binary files a/zip/main/zpam321.iwd and b/zip/main/zpam322.iwd differ
diff --git a/zip/readme.txt b/zip/readme.txt
index af76196..65f745d 100644
--- a/zip/readme.txt
+++ b/zip/readme.txt
@@ -1,17 +1,18 @@
Installation
Extract folders with files into following locations:
- ./pb/pbsvuser.cfg
- - ./main/zpam321.iwd
+ - ./main/zpam322.iwd
- ./main/mp_toujane_fix_v2.iwd
- ./main/mp_burgundy_fix_v1.iwd
- ./main/server.cfg
+ - ./main/public.cfg
-Enable downloading via cvar sv_wwwDownload 1 and specify a download url via cvar sv_wwwBaseURL "url"
-For fast server config exec server.cfg
+Add '+exec server.cfg' into command line arguments and edit the server.cfg file to configure your server
+If you are running public server, add '+exec public.cfg' into command line arguments and edit the public.cfg file to configure your public server
+If you use these .cfg files, make sure no other .cfg files are executed!
More info at: https://github.com/eyza-cod2/zpam3
-
Contact
Write message on discord LetsPlay Europe in #cod2-zpam-3 channel.
Or add me on discord eyza#7930
diff --git a/zpam321.zip b/zpam322.zip
similarity index 96%
rename from zpam321.zip
rename to zpam322.zip
index 7a6c367..f9b1c18 100644
Binary files a/zpam321.zip and b/zpam322.zip differ