Config options now supports on/off along with yes/no.
Fixed ZMenu and player names in infect menu being truncated. Added Hitgroup Management to ZAdmin.
This commit is contained in:
@ -884,15 +884,15 @@ public Action:ConfigReloadAllCommand(client, argc)
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts string of "yes" or "no" to a boolean value.
|
||||
* Converts string of "yes/on" or "no/off" to a boolean value.
|
||||
*
|
||||
* @param option "yes" or "no" string to be converted.
|
||||
* @param option "yes/on" or "no/off" string to be converted.
|
||||
* @return True if string is "yes", false otherwise.
|
||||
*/
|
||||
stock bool:ConfigSettingToBool(const String:option[])
|
||||
{
|
||||
// If option is equal to "yes," then return true.
|
||||
if (StrEqual(option, "yes", false))
|
||||
if (StrEqual(option, "yes", false) || StrEqual(option, "on", false))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -904,8 +904,8 @@ stock bool:ConfigSettingToBool(const String:option[])
|
||||
/**
|
||||
* Converts boolean value to "yes" or "no".
|
||||
*
|
||||
* @param bOption True/false value to be converted to "yes"/"no", respectively.
|
||||
* @param option Destination string buffer to store "yes" or "no" in.
|
||||
* @param bOption True/false value to be converted to "yes/on"/"no/off", respectively.
|
||||
* @param option Destination string buffer to store "yes/on" or "no/off" in.
|
||||
* @param maxlen Length of destination string buffer (wont't be more than 4).
|
||||
* @param yesno When true, returns "yes/no", false returns "on/off."
|
||||
*/
|
||||
|
@ -170,6 +170,13 @@ public ZRTools_Action:DamageTraceAttack(client, inflictor, attacker, Float:damag
|
||||
|
||||
// Here we know that attacker and client are different teams.
|
||||
|
||||
// If client is a human, then allow damage.
|
||||
if (InfectIsClientHuman(client))
|
||||
{
|
||||
// Allow damage.
|
||||
return ZRTools_Continue;
|
||||
}
|
||||
|
||||
// If damage hitgroups cvar is disabled, then allow damage.
|
||||
new bool:damagehitgroups = GetConVarBool(g_hCvarsList[CVAR_DAMAGE_HITGROUPS]);
|
||||
if (!damagehitgroups)
|
||||
|
@ -349,6 +349,154 @@ stock Float:HitgroupsGetKnockback(index)
|
||||
return Float:GetArrayCell(arrayHitgroup, _:HITGROUPS_DATA_KNOCKBACK);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends list of hitgroups to client.
|
||||
*
|
||||
* @param client The client index.
|
||||
* @return True if sent successfully, false if not.
|
||||
*/
|
||||
bool:HitgroupsMenuHitgroups(client)
|
||||
{
|
||||
// If hitgroups is disabled, then stop.
|
||||
new bool:hitgroups = GetConVarBool(g_hCvarsList[CVAR_HITGROUPS]);
|
||||
if (!hitgroups)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create menu handle.
|
||||
new Handle:menu_hitgroups = CreateMenu(HitgroupsMenuHitgroupsHandle);
|
||||
|
||||
// Set client as translation target.
|
||||
SetGlobalTransTarget(client);
|
||||
|
||||
SetMenuTitle(menu_hitgroups, "%t\n ", "Hitgroups menu hitgroups title");
|
||||
|
||||
decl String:enableall[32];
|
||||
decl String:headshotsonly[32];
|
||||
|
||||
// Format menu options.
|
||||
Format(enableall, sizeof(enableall), "%t", "Hitgroups menu hitgroups enable all");
|
||||
Format(headshotsonly, sizeof(headshotsonly), "%t\n ", "Hitgroups menu hitgroups headshots only");
|
||||
|
||||
// Add options to menu.
|
||||
AddMenuItem(menu_hitgroups, "Enable All", enableall);
|
||||
AddMenuItem(menu_hitgroups, "Headshots Only", headshotsonly);
|
||||
|
||||
decl String:hitgroupoption[MAX_NAME_LENGTH];
|
||||
decl String:hitgroupcandamage[MAX_NAME_LENGTH];
|
||||
decl String:hitgroupid[4];
|
||||
|
||||
// x = Hitgroup index.
|
||||
new size = GetArraySize(arrayHitgroups);
|
||||
for (new x = 0; x < size; x++)
|
||||
{
|
||||
// Get hitgroup name.
|
||||
HitgroupsGetName(x, hitgroupoption, sizeof(hitgroupoption));
|
||||
IntToString(x, hitgroupid, sizeof(hitgroupid));
|
||||
|
||||
// Convert bool to "On/Off"
|
||||
ConfigBoolToSetting(HitgroupsCanDamage(x), hitgroupcandamage, sizeof(hitgroupcandamage), false);
|
||||
|
||||
// Format "on/off" to the option.
|
||||
Format(hitgroupoption, sizeof(hitgroupoption), "%s: %s", hitgroupoption, hitgroupcandamage);
|
||||
|
||||
// Add option to menu.
|
||||
AddMenuItem(menu_hitgroups, hitgroupid, hitgroupoption);
|
||||
}
|
||||
|
||||
// Create a "Back" button to the main admin menu.
|
||||
SetMenuExitBackButton(menu_hitgroups, true);
|
||||
|
||||
// Send menu.
|
||||
DisplayMenu(menu_hitgroups, client, MENU_TIME_FOREVER);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when client selects option in the infect clients menu, and handles it.
|
||||
* @param menu_weapons_main Handle of the menu being used.
|
||||
* @param action The action done on the menu (see menus.inc, enum MenuAction).
|
||||
* @param client The client index.
|
||||
* @param slot The slot index selected (starting from 0).
|
||||
*/
|
||||
public HitgroupsMenuHitgroupsHandle(Handle:menu_hitgroups, MenuAction:action, client, slot)
|
||||
{
|
||||
// Client selected an option.
|
||||
if (action == MenuAction_Select)
|
||||
{
|
||||
switch(slot)
|
||||
{
|
||||
// Enable all hitgroups.
|
||||
case 0:
|
||||
{
|
||||
// x = Hitgroup index.
|
||||
new size = GetArraySize(arrayHitgroups);
|
||||
for (new x = 0; x < size; x++)
|
||||
{
|
||||
// Enable hitgroup.
|
||||
HitgroupsSetDamage(x, true);
|
||||
}
|
||||
|
||||
// Tell the server that all hitgroups have been enabled.
|
||||
TranslationPrintToChatAll(true, false, "Hitgroups command enable all successful");
|
||||
}
|
||||
// Headshots only.
|
||||
case 1:
|
||||
{
|
||||
// x = Hitgroup index.
|
||||
new size = GetArraySize(arrayHitgroups);
|
||||
for (new x = 0; x < size; x++)
|
||||
{
|
||||
if (HitgroupsGetIndex(x) == HITGROUP_HEAD)
|
||||
{
|
||||
// Enable hitgroup.
|
||||
HitgroupsSetDamage(x, true);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Disable hitgroup.
|
||||
HitgroupsSetDamage(x, false);
|
||||
}
|
||||
|
||||
// Tell the server that headshots only been enabled.
|
||||
TranslationPrintToChatAll(true, false, "Hitgroups command headshots only successful");
|
||||
}
|
||||
default:
|
||||
{
|
||||
// Get selected hitgroup index.
|
||||
decl String:hitgroupid[4];
|
||||
GetMenuItem(menu_hitgroups, slot, hitgroupid, sizeof(hitgroupid));
|
||||
new hitgroup = StringToInt(hitgroupid);
|
||||
|
||||
// Toggle value.
|
||||
new bool:hitgroupcandamage = HitgroupsCanDamage(hitgroup);
|
||||
HitgroupsSetDamage(hitgroup, !hitgroupcandamage);
|
||||
}
|
||||
}
|
||||
|
||||
// Re-send menu.
|
||||
HitgroupsMenuHitgroups(client);
|
||||
}
|
||||
// Client closed the menu.
|
||||
if (action == MenuAction_Cancel)
|
||||
{
|
||||
// Client hit "Back" button.
|
||||
if (slot == MenuCancel_ExitBack)
|
||||
{
|
||||
// Re-open admin menu.
|
||||
ZAdminMenu(client);
|
||||
}
|
||||
}
|
||||
// Client hit "Exit" button.
|
||||
else if (action == MenuAction_End)
|
||||
{
|
||||
CloseHandle(menu_hitgroups);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Command callback (zr_hitgroup)
|
||||
* Toggles or sets if a zombie's hitgroup can be damaged.
|
||||
@ -436,17 +584,12 @@ public Action:HitgroupsCommand(client, argc)
|
||||
*/
|
||||
public Action:HitgroupsEnableAllCommand(client, argc)
|
||||
{
|
||||
new hitgroup;
|
||||
|
||||
// x = Hitgroup index.
|
||||
new size = GetArraySize(arrayHitgroups);
|
||||
for (new x = 0; x < size; x++)
|
||||
{
|
||||
// Get CS:S hitgroup index.
|
||||
hitgroup = HitgroupsGetIndex(x);
|
||||
|
||||
// Set that hitgroup index to true for damage.
|
||||
HitgroupsSetDamage(hitgroup, true);
|
||||
HitgroupsSetDamage(x, true);
|
||||
}
|
||||
|
||||
// Tell the server that all hitgroups have been enabled.
|
||||
@ -467,27 +610,22 @@ public Action:HitgroupsEnableAllCommand(client, argc)
|
||||
*/
|
||||
public Action:HitgroupsHeadshotsOnlyCommand(client, argc)
|
||||
{
|
||||
new hitgroup;
|
||||
|
||||
// x = Hitgroup index.
|
||||
new size = GetArraySize(arrayHitgroups);
|
||||
for (new x = 0; x < size; x++)
|
||||
{
|
||||
// Get CS:S hitgroup index.
|
||||
hitgroup = HitgroupsGetIndex(x);
|
||||
|
||||
// If this hitgroup is the head, then enable it and stop.
|
||||
if (hitgroup == HITGROUP_HEAD)
|
||||
if (HitgroupsGetIndex(x) == HITGROUP_HEAD)
|
||||
{
|
||||
HitgroupsSetDamage(hitgroup, true);
|
||||
HitgroupsSetDamage(x, true);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Set that hitgroup index to true for damage.
|
||||
HitgroupsSetDamage(hitgroup, false);
|
||||
HitgroupsSetDamage(x, false);
|
||||
}
|
||||
|
||||
// Tell the server that all hitgroups have been enabled.
|
||||
// Tell the server that headshots only been enabled.
|
||||
TranslationPrintToChatAll(true, false, "Hitgroups command headshots only successful");
|
||||
|
||||
// Log action to game events.
|
||||
|
@ -807,7 +807,7 @@ InfectMenuClients(client)
|
||||
|
||||
SetMenuTitle(menu_infect_clients, "%t\n ", "Infect menu clients title");
|
||||
|
||||
decl String:clientoption[MAX_NAME_LENGTH];
|
||||
decl String:clientoption[64];
|
||||
decl String:clientuserid[8];
|
||||
|
||||
// x = Client index.
|
||||
|
@ -210,7 +210,7 @@ WeaponsMenuTypeWeapons(client)
|
||||
decl String:unrestrictall[64];
|
||||
|
||||
Format(restrictall, sizeof(restrictall), "%t", "Weapons menu restrict types restrict all", typename);
|
||||
Format(unrestrictall, sizeof(unrestrictall), "%t", "Weapons menu restrict types unrestrict all", typename);
|
||||
Format(unrestrictall, sizeof(unrestrictall), "%t\n ", "Weapons menu restrict types unrestrict all", typename);
|
||||
|
||||
// Draw items as selectable only if not all weapons within the type are restricted or unrestricted.
|
||||
AddMenuItem(menu_weapons_typeweapons, "restrictall", restrictall, MenuGetItemDraw(!RestrictIsTypeUniform(true, g_iWeaponsCurType[client])));
|
||||
|
@ -80,14 +80,16 @@ bool:ZAdminMenu(client)
|
||||
SetMenuTitle(menu_zadmin, "%t\n ", "ZAdmin main title");
|
||||
|
||||
decl String:classmultipliers[64];
|
||||
decl String:weapons[64];
|
||||
decl String:hitgroups[64];
|
||||
decl String:infect[64];
|
||||
decl String:zspawn[64];
|
||||
decl String:ztele[64];
|
||||
decl String:weapons[64];
|
||||
decl String:infect[64];
|
||||
//decl String:logflags[64];
|
||||
|
||||
Format(classmultipliers, sizeof(classmultipliers), "%t", "ZAdmin main class multipliers");
|
||||
Format(weapons, sizeof(weapons), "%t", "ZAdmin main weapons");
|
||||
Format(hitgroups, sizeof(hitgroups), "%t", "ZAdmin main hitgroups");
|
||||
Format(infect, sizeof(infect), "%t", "ZAdmin main zombie");
|
||||
Format(zspawn, sizeof(zspawn), "%t", "ZAdmin main force zspawn");
|
||||
Format(ztele, sizeof(ztele), "%t", "ZAdmin main force ztele");
|
||||
@ -95,6 +97,7 @@ bool:ZAdminMenu(client)
|
||||
|
||||
AddMenuItem(menu_zadmin, "classmultipliers", classmultipliers);
|
||||
AddMenuItem(menu_zadmin, "weapons", weapons);
|
||||
AddMenuItem(menu_zadmin, "hitgroups", hitgroups);
|
||||
AddMenuItem(menu_zadmin, "infect", infect);
|
||||
AddMenuItem(menu_zadmin, "zspawn", zspawn);
|
||||
AddMenuItem(menu_zadmin, "ztele", ztele);
|
||||
@ -137,8 +140,13 @@ public ZAdminMenuHandle(Handle:menu_zadmin, MenuAction:action, client, slot)
|
||||
{
|
||||
resend = !WeaponsMenuMain(client);
|
||||
}
|
||||
// Zombie management.
|
||||
// Hitgroup management.
|
||||
case 2:
|
||||
{
|
||||
resend = !HitgroupsMenuHitgroups(client);
|
||||
}
|
||||
// Zombie management.
|
||||
case 3:
|
||||
{
|
||||
// We're not resending this menu.
|
||||
resend = false;
|
||||
@ -147,7 +155,7 @@ public ZAdminMenuHandle(Handle:menu_zadmin, MenuAction:action, client, slot)
|
||||
InfectMenuClients(client);
|
||||
}
|
||||
// Force ZSpawn.
|
||||
case 3:
|
||||
case 4:
|
||||
{
|
||||
// We're not resending this menu.
|
||||
resend = false;
|
||||
@ -156,7 +164,7 @@ public ZAdminMenuHandle(Handle:menu_zadmin, MenuAction:action, client, slot)
|
||||
MenuClientList(client, ZSpawnForceHandle, "ZSpawn clients title");
|
||||
}
|
||||
// Force ZTele.
|
||||
case 4:
|
||||
case 5:
|
||||
{
|
||||
// We're not resending this menu.
|
||||
resend = false;
|
||||
|
Reference in New Issue
Block a user