Skip to content

Commit 3878f46

Browse files
authored
Add new CVar's for default weapons (#470)
1 parent 532c132 commit 3878f46

File tree

7 files changed

+225
-21
lines changed

7 files changed

+225
-21
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,14 @@ Archive's bin directory contains 2 subdirectories, 'bugfixed' and 'pure'
8686
| mp_radio_timeout | 1.5 | 0.0 | - | Delay between player Radio messages. (in seconds).<br/>`0` disable delay |
8787
| mp_radio_maxinround | 60 | - | - | Maximum Radio messages count for player per round.<br/>`0` disable radio messages |
8888
| mp_buy_anywhere | 0 | 0 | 3 | When set, players can buy anywhere, not only in buyzones.<br/> `0` disabled.<br/>`1` both teams <br/>`2` only Terrorists team <br/>`3` only CT team |
89+
| mp_t_default_grenades | "" | "" | - | The default grenades that the Ts will spawn with. |
90+
| mp_t_give_player_knife | 1 | 0 | 1 | Whether Terrorist player spawn with knife. |
91+
| mp_t_default_weapons_primary | "" | "" | - | The default primary (rifle) weapon that the Ts will spawn with. |
92+
| mp_t_default_weapons_secondary | "glock18" | "" | - | The default secondary (pistol) weapon that the Ts will spawn with. |
93+
| mp_ct_default_grenades | "" | "" | - | The default grenades that the CTs will spawn with. |
94+
| mp_ct_give_player_knife | 1 | 0 | 1 | Whether Counter-Terrorist player spawn with knife. |
95+
| mp_ct_default_weapons_primary | "" | "" | - | The default primary (rifle) weapon that the CTs will spawn with. |
96+
| mp_ct_default_weapons_secondary | "usp" | "" | - | The default secondary (pistol) weapon that the CTs will spawn with. |
8997
| mp_give_player_c4 | 1 | 0 | 1 | Whether this map should spawn a C4 bomb for a player or not.<br/> `0` disabled<br/>`1` enabled |
9098
| mp_weapons_allow_map_placed | 1 | 0 | 1 | When set, map weapons (located on the floor by map) will be shown.<br/> `0` hide all map weapons.<br/>`1` enabled<br/>`NOTE`: Effect will work after round restart. |
9199
| mp_fadetoblack | 0 | 0 | 2 | Observer's screen will fade to black on kill event or permanent.<br/> `0` No fade.<br/>`1` Fade to black and won't be able to watch anybody.<br/>`2` fade to black only on kill moment. |

dist/game.cfg

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,3 +394,50 @@ mp_fadetoblack 0
394394
// Default value: "1"
395395
mp_falldamage 1
396396
397+
// The default grenades that the Ts will spawn with.
398+
// Usage: "hegrenade flash sgren"
399+
//
400+
// Default value: ""
401+
mp_t_default_grenades ""
402+
403+
// Whether Terrorist player spawn with knife.
404+
// 0 - disabled
405+
// 1 - enabled (default behaviour)
406+
//
407+
// Default value: "1"
408+
mp_t_give_player_knife 1
409+
410+
// The default primary (rifle) weapon that the Ts will spawn with.
411+
// Usage: "awp m4a1 mp5navy"
412+
//
413+
// Default value: ""
414+
mp_t_default_weapons_primary ""
415+
416+
// The default secondary (pistol) weapon that the Ts will spawn with.
417+
//
418+
// Default value: "glock18"
419+
mp_t_default_weapons_secondary "glock18"
420+
421+
// The default grenades that the CTs will spawn with.
422+
// Usage: "hegrenade flash sgren"
423+
//
424+
// Default value: ""
425+
mp_ct_default_grenades ""
426+
427+
// Whether Counter-Terrorist player spawn with knife.
428+
// 0 - disabled
429+
// 1 - enabled (default behaviour)
430+
//
431+
// Default value: "1"
432+
mp_ct_give_player_knife 1
433+
434+
// The default primary (rifle) weapon that the CTs will spawn with.
435+
// Usage: "awp m4a1 mp5navy"
436+
//
437+
// Default value: ""
438+
mp_ct_default_weapons_primary ""
439+
440+
// The default secondary (pistol) weapon that the CTs will spawn with.
441+
//
442+
// Default value: "usp"
443+
mp_ct_default_weapons_secondary "usp"

regamedll/dlls/game.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ cvar_t radio_timeout = { "mp_radio_timeout", "1.5", FCVAR_SERVER, 1.5f
149149
cvar_t radio_maxinround = { "mp_radio_maxinround", "60", FCVAR_SERVER, 60.0f, nullptr };
150150
cvar_t falldamage = { "mp_falldamage", "1", FCVAR_SERVER, 1.0f, nullptr };
151151

152+
cvar_t ct_default_grenades = { "mp_ct_default_grenades", "", 0, 0.0f, nullptr };
153+
cvar_t ct_give_player_knife = { "mp_ct_give_player_knife", "1", 0, 1.0f, nullptr };
154+
cvar_t ct_default_weapons_secondary = { "mp_ct_default_weapons_secondary", "usp", 0, 0.0f, nullptr };
155+
cvar_t ct_default_weapons_primary = { "mp_ct_default_weapons_primary", "", 0, 0.0f, nullptr };
156+
cvar_t t_default_grenades = { "mp_t_default_grenades", "", 0, 0.0f, nullptr };
157+
cvar_t t_give_player_knife = { "mp_t_give_player_knife", "1", 0, 1.0f, nullptr };
158+
cvar_t t_default_weapons_secondary = { "mp_t_default_weapons_secondary", "glock18", 0, 0.0f, nullptr };
159+
cvar_t t_default_weapons_primary = { "mp_t_default_weapons_primary", "", 0, 0.0f, nullptr };
152160

153161
void GameDLL_Version_f()
154162
{
@@ -362,7 +370,16 @@ void EXT_FUNC GameDLLInit()
362370
CVAR_REGISTER(&radio_timeout);
363371
CVAR_REGISTER(&radio_maxinround);
364372
CVAR_REGISTER(&falldamage);
365-
373+
374+
CVAR_REGISTER(&ct_default_grenades);
375+
CVAR_REGISTER(&ct_give_player_knife);
376+
CVAR_REGISTER(&ct_default_weapons_secondary);
377+
CVAR_REGISTER(&ct_default_weapons_primary);
378+
CVAR_REGISTER(&t_default_grenades);
379+
CVAR_REGISTER(&t_give_player_knife);
380+
CVAR_REGISTER(&t_default_weapons_secondary);
381+
CVAR_REGISTER(&t_default_weapons_primary);
382+
366383
// print version
367384
CONSOLE_ECHO("ReGameDLL version: " APP_VERSION "\n");
368385

regamedll/dlls/game.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,15 @@ extern cvar_t radio_timeout;
175175
extern cvar_t radio_maxinround;
176176
extern cvar_t falldamage;
177177

178+
extern cvar_t ct_default_grenades;
179+
extern cvar_t ct_give_player_knife;
180+
extern cvar_t ct_default_weapons_secondary;
181+
extern cvar_t ct_default_weapons_primary;
182+
extern cvar_t t_default_grenades;
183+
extern cvar_t t_give_player_knife;
184+
extern cvar_t t_default_weapons_secondary;
185+
extern cvar_t t_default_weapons_primary;
186+
178187
#endif
179188

180189
extern cvar_t scoreboard_showmoney;

regamedll/dlls/items.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,3 +550,41 @@ ItemID GetItemIdByArmoury(ArmouryItemPack armoury)
550550
default: return ITEM_NONE;
551551
}
552552
}
553+
554+
ItemID GetItemIdByWeaponId(int weaponId)
555+
{
556+
switch (static_cast<WeaponIdType>(weaponId))
557+
{
558+
case WEAPON_KNIFE: return ITEM_KNIFE;
559+
case WEAPON_MP5N: return ITEM_MP5N;
560+
case WEAPON_TMP: return ITEM_TMP;
561+
case WEAPON_P90: return ITEM_P90;
562+
case WEAPON_MAC10: return ITEM_MAC10;
563+
case WEAPON_AK47: return ITEM_AK47;
564+
case WEAPON_SG552: return ITEM_SG552;
565+
case WEAPON_M4A1: return ITEM_M4A1;
566+
case WEAPON_AUG: return ITEM_AUG;
567+
case WEAPON_SCOUT: return ITEM_SCOUT;
568+
case WEAPON_G3SG1: return ITEM_G3SG1;
569+
case WEAPON_AWP: return ITEM_AWP;
570+
case WEAPON_M3: return ITEM_M3;
571+
case WEAPON_XM1014: return ITEM_XM1014;
572+
case WEAPON_C4: return ITEM_C4;
573+
case WEAPON_M249: return ITEM_M249;
574+
case WEAPON_FLASHBANG: return ITEM_FLASHBANG;
575+
case WEAPON_HEGRENADE: return ITEM_HEGRENADE;
576+
case WEAPON_SMOKEGRENADE: return ITEM_SMOKEGRENADE;
577+
case WEAPON_SHIELDGUN: return ITEM_SHIELDGUN;
578+
case WEAPON_GLOCK18: return ITEM_GLOCK18;
579+
case WEAPON_USP: return ITEM_USP;
580+
case WEAPON_ELITE: return ITEM_ELITE;
581+
case WEAPON_FIVESEVEN: return ITEM_FIVESEVEN;
582+
case WEAPON_P228: return ITEM_P228;
583+
case WEAPON_DEAGLE: return ITEM_DEAGLE;
584+
case WEAPON_FAMAS: return ITEM_FAMAS;
585+
case WEAPON_SG550: return ITEM_SG550;
586+
case WEAPON_GALIL: return ITEM_GALIL;
587+
case WEAPON_UMP45: return ITEM_UMP45;
588+
default: return ITEM_NONE;
589+
}
590+
}

regamedll/dlls/items.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,4 @@ class CItemThighPack: public CItem
175175

176176
ItemID GetItemIdByName(const char *pszName);
177177
ItemID GetItemIdByArmoury(ArmouryItemPack armoury);
178+
ItemID GetItemIdByWeaponId(int weaponId);

regamedll/dlls/player.cpp

Lines changed: 104 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,38 +1471,123 @@ void EXT_FUNC CBasePlayer::__API_HOOK(GiveDefaultItems)()
14711471
#endif
14721472

14731473
#ifdef REGAMEDLL_ADD
1474-
auto GiveWeapon = [&](int ammo, char *pszWeaponName) {
1474+
auto GiveWeapon = [&](int ammo, const char *pszWeaponName) {
14751475
auto pItem = static_cast<CBasePlayerItem *>(GiveNamedItemEx(pszWeaponName));
14761476
if (pItem) {
14771477
GiveAmmo(refill_bpammo_weapons.value != 0.0f ? pItem->iMaxAmmo1() : ammo, pItem->pszAmmo1(), pItem->iMaxAmmo1());
14781478
}
14791479
};
14801480

1481-
switch (m_iTeam)
1482-
{
1483-
case CT:
1484-
{
1485-
if (!HasRestrictItem(ITEM_KNIFE, ITEM_TYPE_EQUIPPED)) {
1486-
GiveNamedItem("weapon_knife");
1487-
}
1488-
if (!HasRestrictItem(ITEM_USP, ITEM_TYPE_EQUIPPED)) {
1489-
GiveWeapon(m_bIsVIP ? 12 : 24, "weapon_usp");
1490-
}
1481+
bool bGiveKnife = false;
1482+
if (m_iTeam == CT)
1483+
bGiveKnife = ct_give_player_knife.value != 0;
1484+
else if (m_iTeam == TERRORIST)
1485+
bGiveKnife = t_give_player_knife.value != 0;
14911486

1492-
break;
1487+
if (bGiveKnife && !HasRestrictItem(ITEM_KNIFE, ITEM_TYPE_EQUIPPED)) {
1488+
GiveNamedItemEx("weapon_knife");
14931489
}
1494-
case TERRORIST:
1490+
1491+
const int iAmountOfBPAmmo = m_bIsVIP ? 1 : 2; // Give regular the player backpack ammo twice more than to VIP the player
1492+
1493+
// Give default secondary equipment
14951494
{
1496-
if (!HasRestrictItem(ITEM_KNIFE, ITEM_TYPE_EQUIPPED)) {
1497-
GiveNamedItem("weapon_knife");
1498-
}
1499-
if (!HasRestrictItem(ITEM_GLOCK18, ITEM_TYPE_EQUIPPED)) {
1500-
GiveWeapon(40, "weapon_glock18");
1495+
char *secondaryString = NULL;
1496+
if (m_iTeam == CT)
1497+
secondaryString = ct_default_weapons_secondary.string;
1498+
else if (m_iTeam == TERRORIST)
1499+
secondaryString = t_default_weapons_secondary.string;
1500+
1501+
if (secondaryString && secondaryString[0] != '\0')
1502+
{
1503+
secondaryString = SharedParse(secondaryString);
1504+
1505+
while (secondaryString)
1506+
{
1507+
WeaponInfoStruct *weaponInfo;
1508+
WeaponIdType weaponId = AliasToWeaponID(SharedGetToken());
1509+
if (weaponId != WEAPON_NONE)
1510+
weaponInfo = GetWeaponInfo(weaponId);
1511+
else
1512+
weaponInfo = GetWeaponInfo(SharedGetToken());
1513+
1514+
if (weaponInfo) {
1515+
const auto iItemID = GetItemIdByWeaponId(weaponInfo->id);
1516+
if (iItemID != ITEM_NONE && !HasRestrictItem(iItemID, ITEM_TYPE_EQUIPPED) && IsSecondaryWeapon(iItemID)) {
1517+
GiveWeapon(weaponInfo->gunClipSize * iAmountOfBPAmmo, weaponInfo->entityName);
1518+
}
1519+
}
1520+
1521+
secondaryString = SharedParse(secondaryString);
1522+
}
15011523
}
1524+
}
15021525

1503-
break;
1526+
// Give default primary equipment
1527+
{
1528+
char *primaryString = NULL;
1529+
1530+
if (m_iTeam == CT)
1531+
primaryString = ct_default_weapons_primary.string;
1532+
else if (m_iTeam == TERRORIST)
1533+
primaryString = t_default_weapons_primary.string;
1534+
1535+
if (primaryString && primaryString[0] != '\0')
1536+
{
1537+
primaryString = SharedParse(primaryString);
1538+
1539+
while (primaryString)
1540+
{
1541+
WeaponInfoStruct *weaponInfo;
1542+
WeaponIdType weaponId = AliasToWeaponID(SharedGetToken());
1543+
if (weaponId != WEAPON_NONE)
1544+
weaponInfo = GetWeaponInfo(weaponId);
1545+
else
1546+
weaponInfo = GetWeaponInfo(SharedGetToken());
1547+
1548+
if (weaponInfo) {
1549+
const auto iItemID = GetItemIdByWeaponId(weaponInfo->id);
1550+
if (iItemID != ITEM_NONE && !HasRestrictItem(iItemID, ITEM_TYPE_EQUIPPED) && IsPrimaryWeapon(iItemID)) {
1551+
GiveWeapon(weaponInfo->gunClipSize * iAmountOfBPAmmo, weaponInfo->entityName);
1552+
}
1553+
}
1554+
1555+
primaryString = SharedParse(primaryString);
1556+
}
1557+
}
15041558
}
1559+
1560+
// Give the player grenades if he needs them
1561+
char *grenadeString = NULL;
1562+
if (m_iTeam == CT)
1563+
grenadeString = ct_default_grenades.string;
1564+
else if (m_iTeam == TERRORIST)
1565+
grenadeString = t_default_grenades.string;
1566+
1567+
if (grenadeString && grenadeString[0] != '\0')
1568+
{
1569+
grenadeString = SharedParse(grenadeString);
1570+
1571+
while (grenadeString)
1572+
{
1573+
WeaponInfoStruct *weaponInfo;
1574+
WeaponIdType weaponId = AliasToWeaponID(SharedGetToken());
1575+
if (weaponId != WEAPON_NONE)
1576+
weaponInfo = GetWeaponInfo(weaponId);
1577+
else
1578+
weaponInfo = GetWeaponInfo(SharedGetToken());
1579+
1580+
if (weaponInfo) {
1581+
const auto iItemID = GetItemIdByWeaponId(weaponInfo->id);
1582+
if (iItemID != ITEM_NONE && !HasRestrictItem(iItemID, ITEM_TYPE_EQUIPPED) && IsGrenadeWeapon(iItemID)) {
1583+
GiveNamedItemEx(weaponInfo->entityName);
1584+
}
1585+
}
1586+
1587+
grenadeString = SharedParse(grenadeString);
1588+
}
15051589
}
1590+
15061591
#else
15071592
switch (m_iTeam)
15081593
{
@@ -1518,7 +1603,6 @@ void EXT_FUNC CBasePlayer::__API_HOOK(GiveDefaultItems)()
15181603
break;
15191604
}
15201605
#endif
1521-
15221606
}
15231607

15241608
void CBasePlayer::RemoveAllItems(BOOL removeSuit)

0 commit comments

Comments
 (0)