#include #include #include #pragma semicolon 1 #define ZOMBIECLASS_CHARGER 6 int hitgroup; new bool:g_HeadShot; new bool:lateLoad; char sDataFilePath[PLATFORM_MAX_PATH]; public APLRes:AskPluginLoad2(Handle:plugin, bool:late, String:error[], errMax) { lateLoad = late; return APLRes_Success; } public OnPluginStart() { if (lateLoad) { for (new client = 1; client <= MaxClients; client++) { if (IsClientInGame(client)) { OnClientPutInServer(client); } } } BuildPath(Path_SM, sDataFilePath, sizeof(sDataFilePath), "data/weapons_damage_charger.ini"); if (!FileExists(sDataFilePath)) { new Handle:open_path = OpenFile(sDataFilePath, "w"); WriteFileLine(open_path, ""); CloseHandle(open_path); PrintToServer("Error Code: WSP-EC-01A"); KvWriteToFile(sDataFilePath); } HookEvent("player_hurt", OnPlayerHurt); } void KvWriteToFile(const char[] path) { KeyValues kv = new KeyValues("damage_modifier"); kv.SetNum("weapon_autoshotgun/charger_damage", 1); kv.SetNum("weapon_hunting_rifle/charger_damage", 1); kv.SetNum("weapon_pistol/charger_damage", 1); kv.SetNum("weapon_rifle_ak47/charger_damage", 1); kv.SetNum("weapon_rifle/charger_damage", 1); kv.SetNum("weapon_pumpshotgun/charger_damage", 1); kv.SetNum("weapon_sniper_awp/charger_damage", 1); kv.SetNum("weapon_shotgun_chrome/charger_damage", 1); kv.SetNum("weapon_pistol_magnum/charger_damage", 1); kv.SetNum("weapon_shotgun_spas/charger_damage", 1); kv.SetNum("weapon_smg/charger_damage", 1); kv.SetNum("weapon_smg_mp5 /charger_damage", 1); kv.SetNum("weapon_smg_silenced/charger_damage", 1); kv.SetNum("weapon_sniper_military/charger_damage", 1); kv.SetNum("weapon_rifle_sg552/charger_damage", 1); kv.SetNum("weapon_sniper_scout/charger_damage", 1); kv.SetNum("weapon_rifle_m60/charger_damage", 1); kv.SetNum("weapon_rifle_desert/charger_damage", 1); kv.SetNum("weapon_autoshotgun/charger_damage_headshot", 1); kv.SetNum("weapon_hunting_rifle/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_pistol/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_rifle_ak47/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_rifle/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_pumpshotgun/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_sniper_awp/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_shotgun_chrome/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_pistol_magnum/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_shotgun_spas/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_smg/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_smg_mp5 /charger_damage_headshot_headshot", 1); kv.SetNum("weapon_smg_silenced/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_sniper_military/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_rifle_sg552/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_sniper_scout/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_rifle_m60/charger_damage_headshot_headshot", 1); kv.SetNum("weapon_rifle_desert/charger_damage_headshot_headshot", 1); kv.ExportToFile(path); delete kv; } public Action:OnPlayerHurt(Handle:event, const String:name[], bool:dontBrodcast) { hitgroup = GetEventInt(event, "hitgroup"); SetEventInt(event, "dmg_health", 0); if(hitgroup == 1) { g_HeadShot = true; } else { g_HeadShot = false; } } public OnClientPutInServer(client) { SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage); } public OnClientDisconnect(client) { SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage); } public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype) { decl String:classname[64]; GetClientWeapon(attacker, classname, sizeof(classname)); if(StrEqual(classname, "weapon_grenade_launcher")) return Plugin_Handled; if (!(damagetype & DMG_BURN)) { if (IsValidCharger(victim)) { if(IsValidClient(victim)) { KeyValues kv = new KeyValues("damage_modifier"); if (kv.ImportFromFile(sDataFilePath)) { if (KvJumpToKey(kv, classname, true)) { int heal = GetClientHealth(victim); PrintToChatAll("Charger=%i", heal); new num = KvGetNum(kv, "charger_damage", 1); damage = (damage * 0) + num; if(g_HeadShot == true) { num = KvGetNum(kv, "charger_damage_headshot_headshot", 1); damage = (damage * 0) + num; } return Plugin_Changed; } } } } } return Plugin_Continue; } public IsValidCharger(client) { if (IsValidClient(client) && GetClientTeam(client) == 3) { new class = GetEntProp(client, Prop_Send, "m_zombieClass"); if (class == ZOMBIECLASS_CHARGER) return true; return false; } return false; } public IsValidClient(client) { if (client <= 0) return false; if (client > MaxClients) return false; if (!IsClientInGame(client)) return false; if (!IsPlayerAlive(client)) return false; return true; }