Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sourcemod>
- #include <sdktools>
- #include <sdkhooks>
- #pragma semicolon 1.0
- #define ZOMBIECLASS_SMOKER 1
- #define ZOMBIECLASS_BOOMER 2
- #define ZOMBIECLASS_HUNTER 3
- #define ZOMBIECLASS_SPITTER 4
- #define ZOMBIECLASS_JOCKEY 5
- #define ZOMBIECLASS_CHARGER 6
- #define ZOMBIECLASS_WITCH 7
- #define ZOMBIECLASS_TANK 8
- char Message[32];
- HintIndex[2048+1];
- HintEntity[2048+1];
- 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/melee_damage_specials.ini");
- if (!FileExists(sDataFilePath))
- {
- new Handle:open_path = OpenFile(sDataFilePath, "w");
- WriteFileLine(open_path, "");
- CloseHandle(open_path);
- PrintToServer("Error Code: WSP-EC-01.0A");
- KvWriteToFile(sDataFilePath);
- }
- HookEvent("player_spawn", ePlayerSpawn);
- HookEvent("player_death", ePlayerDeath, EventHookMode_Pre);
- }
- public void ePlayerSpawn(Event event, const char[] name, bool dontBroadcast)
- {
- int special = GetClientOfUserId(GetEventInt(event, "userid"));
- if (IsValidClient(special) && GetClientTeam(special) == 3)
- CreateHintEntity(special);
- }
- public void ePlayerDeath(Event event, const char[] name, bool dontBroadcast)
- {
- int special = GetClientOfUserId(GetEventInt(event, "userid"));
- if (IsValidClient(special) && GetClientTeam(special) == 3)
- DestroyHintEntity(special);
- }
- void KvWriteToFile(const char[] path)
- {
- KeyValues kv = new KeyValues("damage_melee");
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_baseball_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_cricket_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_crowbar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_electric_guitar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_fireaxe/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_frying_pan/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_golfclub/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_katana/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_machete/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_tonfa/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SMOKER/weapon_knife/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_baseball_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_cricket_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_crowbar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_electric_guitar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_fireaxe/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_frying_pan/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_golfclub/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_katana/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_machete/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_tonfa/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_BOOMER/weapon_knife/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/weapon_baseball_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/weapon_cricket_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/weapon_crowbar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/weapon_electric_guitar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/fireaxe/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/weapon_frying_pan/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/weapon_golfclub/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/weapon_katana/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/weapon_machete/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/weapon_tonfa/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_HUNTER/weapon_knife/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_baseball_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_cricket_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_crowbar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_electric_guitar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_fireaxe/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_frying_pan/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_golfclub/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_katana/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_machete/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_tonfa/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_SPITTER/weapon_knife/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_baseball_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_cricket_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_crowbar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_electric_guitar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_fireaxe/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_frying_pan/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_golfclub/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_katana/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_machete/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_tonfa/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_JOCKEY/weapon_knife/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_baseball_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_cricket_bat/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_crowbar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_electric_guitar/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_fireaxe/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_frying_pan/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_golfclub/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_katana/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_machete/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_tonfa/damage", 1.0);
- kv.SetFloat("ZOMBIECLASS_CHARGER/weapon_knife/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_baseball_bat/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_cricket_bat/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_crowbar/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_electric_guitar/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_fireaxe/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_frying_pan/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_golfclub/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_katana/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_machete/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_tonfa/damage", 1.0);
- kv.SetFloat(" ZOMBIECLASS_TANK/weapon_knife/damage", 1.0);
- kv.ExportToFile(path);
- delete kv;
- }
- public OnClientPutInServer(client)
- {
- SDKHook(client, SDKHook_TraceAttack, _SI_OnTraceAttack);
- }
- public OnClientDisconnect(client)
- {
- SDKUnhook(client, SDKHook_TraceAttack, _SI_OnTraceAttack);
- }
- public Action:_SI_OnTraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
- {
- decl String:weaponname[64];
- GetClientWeapon(attacker, weaponname, sizeof(weaponname));
- if (StrEqual(weaponname, "weapon_melee"))
- {
- GetEntPropString(GetPlayerWeaponSlot(attacker, 1), Prop_Data, "m_strMapSetScriptName", weaponname, sizeof(weaponname));
- KeyValues kv = new KeyValues("damage_melee");
- if (kv.ImportFromFile(sDataFilePath))
- {
- int health = GetEntProp(victim, Prop_Send, "m_iHealth");
- Format(Message, sizeof(Message), "%d", health);
- Format(weaponname, sizeof(weaponname), "weapon_%s", weaponname);
- if(GetEntProp(victim, Prop_Send, "m_zombieClass") == 1)
- {
- if (KvJumpToKey(kv, "ZOMBIECLASS_SMOKER", true))
- {
- if (KvJumpToKey(kv, weaponname, true))
- {
- DisplayInstructorHint(victim, 0.0, 0.0, 0.0, true, false, "", "", "", false, {255, 255, 0}, Message);
- float num = KvGetFloat(kv, "damage", 1.0);
- int heal = GetClientHealth(victim);
- PrintToChatAll("Smoker=%i", heal);
- damage = num;
- return Plugin_Changed;
- }
- }
- }
- else if(GetEntProp(victim, Prop_Send, "m_zombieClass") == 2)
- {
- if (KvJumpToKey(kv, "ZOMBIECLASS_BOOMER", true))
- {
- if (KvJumpToKey(kv, weaponname, true))
- {
- DisplayInstructorHint(victim, 0.0, 0.0, 0.0, true, false, "", "", "", false, {255, 255, 0}, Message);
- float num = KvGetFloat(kv, "damage", 1.0);
- int heal = GetClientHealth(victim);
- PrintToChatAll("Boomer=%i", heal);
- damage = num;
- return Plugin_Changed;
- }
- }
- }
- else if(GetEntProp(victim, Prop_Send, "m_zombieClass") == 3)
- {
- if (KvJumpToKey(kv, "ZOMBIECLASS_HUNTER", true))
- {
- if (KvJumpToKey(kv, weaponname, true))
- {
- DisplayInstructorHint(victim, 0.0, 0.0, 0.0, true, false, "", "", "", false, {255, 255, 0}, Message);
- float num = KvGetFloat(kv, "damage", 1.0);
- int heal = GetClientHealth(victim);
- PrintToChatAll("Hunter=%i", heal);
- PrintToChatAll("%s", weaponname);
- damage = num;
- return Plugin_Changed;
- }
- }
- }
- else if(GetEntProp(victim, Prop_Send, "m_zombieClass") == 4)
- {
- if (KvJumpToKey(kv, "ZOMBIECLASS_SPITTER", true))
- {
- if (KvJumpToKey(kv, weaponname, true))
- {
- DisplayInstructorHint(victim, 0.0, 0.0, 0.0, true, false, "", "", "", false, {255, 255, 0}, Message);
- float num = KvGetFloat(kv, "damage", 1.0);
- int heal = GetClientHealth(victim);
- PrintToChatAll("Spitterr=%i", heal);
- damage = num;
- return Plugin_Changed;
- }
- }
- }
- else if(GetEntProp(victim, Prop_Send, "m_zombieClass") == 5)
- {
- if (KvJumpToKey(kv, "ZOMBIECLASS_JOCKEY", true))
- {
- if (KvJumpToKey(kv, weaponname, true))
- {
- DisplayInstructorHint(victim, 0.0, 0.0, 0.0, true, false, "", "", "", false, {255, 255, 0}, Message);
- float num = KvGetFloat(kv, "damage", 1.0);
- int heal = GetClientHealth(victim);
- PrintToChatAll("Jockey=%i", heal);
- damage = num;
- return Plugin_Changed;
- }
- }
- }
- else if(GetEntProp(victim, Prop_Send, "m_zombieClass") == 6)
- {
- if (KvJumpToKey(kv, "ZOMBIECLASS_CHARGER", true))
- {
- if (KvJumpToKey(kv, weaponname, true))
- {
- DisplayInstructorHint(victim, 0.0, 0.0, 0.0, true, false, "", "", "", false, {255, 255, 0}, Message);
- float num = KvGetFloat(kv, "damage", 1.0);
- int heal = GetClientHealth(victim);
- PrintToChatAll("Charger=%i", heal);
- damage = num;
- return Plugin_Changed;
- }
- }
- }
- else if(GetEntProp(victim, Prop_Send, "m_zombieClass") == 8)
- {
- if (KvJumpToKey(kv, "ZOMBIECLASS_TANK", true))
- {
- if (KvJumpToKey(kv, weaponname, true))
- {
- DisplayInstructorHint(victim, 0.0, 0.0, 0.0, true, false, "", "", "", false, {255, 255, 0}, Message);
- float num = KvGetFloat(kv, "damage", 1.0);
- int heal = GetClientHealth(victim);
- PrintToChatAll("Tank=%i", heal);
- damage = num;
- return Plugin_Changed;
- }
- }
- }
- }
- }
- return Plugin_Stop;
- }
- stock void DisplayInstructorHint(int target, float fTime, float fHeight, float fRange, bool bFollow, bool bShowOffScreen, char[] sIconOnScreen, char[] sIconOffScreen, char[] sCmd, bool bShowTextAlways, int iColor[3], char sText[32])
- {
- char sBuffer[32];
- FormatEx(sBuffer, sizeof(sBuffer), "si_%d", target);
- DispatchKeyValue(target, "targetname", sBuffer);
- DispatchKeyValue(HintEntity[target], "hint_target", sBuffer);
- DispatchKeyValue(HintEntity[target], "hint_name", sBuffer);
- DispatchKeyValue(HintEntity[target], "hint_replace_key", sBuffer);
- FormatEx(sBuffer, sizeof(sBuffer), "%d", !bFollow);
- DispatchKeyValue(HintEntity[target], "hint_static", sBuffer);
- DispatchKeyValue(HintEntity[target], "hint_timeout", "0.0");
- FormatEx(sBuffer, sizeof(sBuffer), "%d", RoundToFloor(fHeight));
- DispatchKeyValue(HintEntity[target], "hint_icon_offset", sBuffer);
- FormatEx(sBuffer, sizeof(sBuffer), "%d", RoundToFloor(fRange));
- DispatchKeyValue(HintEntity[target], "hint_range", sBuffer);
- FormatEx(sBuffer, sizeof(sBuffer), "%d", !bShowOffScreen);
- DispatchKeyValue(HintEntity[target], "hint_nooffscreen", sBuffer);
- DispatchKeyValue(HintEntity[target], "hint_icon_onscreen", sIconOnScreen);
- DispatchKeyValue(HintEntity[target], "hint_icon_offscreen", sIconOffScreen);
- DispatchKeyValue(HintEntity[target], "hint_binding", sCmd);
- // Shows text behind walls (false limits distance of seeing hint)
- FormatEx(sBuffer, sizeof(sBuffer), "%d", bShowTextAlways);
- DispatchKeyValue(HintEntity[target], "hint_forcecaption", sBuffer);
- FormatEx(sBuffer, sizeof(sBuffer), "%d %d %d", iColor[0], iColor[1], iColor[2]);
- DispatchKeyValue(HintEntity[target], "hint_color", sBuffer);
- //ReplaceString(sText, sizeof(sText), "\n", " ");
- DispatchKeyValue(HintEntity[target], "hint_caption", sText);
- DispatchKeyValue(HintEntity[target], "hint_activator_caption", sText);
- DispatchKeyValue(HintEntity[target], "hint_flags", "0");
- DispatchKeyValue(HintEntity[target], "hint_display_limit", "0");
- DispatchKeyValue(HintEntity[target], "hint_suppress_rest", "1");
- DispatchKeyValue(HintEntity[target], "hint_instance_type", "2");
- DispatchKeyValue(HintEntity[target], "hint_auto_start", "false"); //true
- DispatchKeyValue(HintEntity[target], "hint_local_player_only", "true");
- DispatchKeyValue(HintEntity[target], "hint_allow_nodraw_target", "true");
- //DispatchKeyValue(HintEntity[target], "hint_pulseoption", "1");
- //DispatchKeyValue(HintEntity[target], "hint_alphaoption", "1");
- //DispatchKeyValue(HintEntity[target], "hint_shakeoption", "1");
- DispatchSpawn(HintEntity[target]);
- AcceptEntityInput(HintEntity[target], "ShowHint");
- HintIndex[target] = EntIndexToEntRef(HintEntity[target]);
- }
- void DestroyHintEntity(int client)
- {
- if(IsValidEntRef(HintIndex[client]))
- {
- AcceptEntityInput(HintIndex[client], "Kill");
- HintIndex[client] = -1;
- }
- }
- void CreateHintEntity(int client)
- {
- if(IsValidEntRef(HintIndex[client]))
- {
- AcceptEntityInput(HintIndex[client], "Kill");
- HintIndex[client] = -1;
- }
- HintEntity[client] = CreateEntityByName("env_instructor_hint");
- if(HintEntity[client] < 0)
- return;
- DispatchSpawn(HintEntity[client]);
- HintIndex[client] = EntIndexToEntRef(HintEntity[client]);
- }
- stock bool IsValidClient(int client)
- {
- return (client > 0 && client <= MaxClients && IsClientInGame(client));
- }
- stock bool IsIncapped(int client)
- {
- return (GetEntProp(client, Prop_Send, "m_isIncapacitated", 1) > 0);
- }
- static bool IsValidEntRef(int iEntRef)
- {
- static int iEntity;
- iEntity = EntRefToEntIndex(iEntRef);
- return (iEntRef && iEntity != INVALID_ENT_REFERENCE && IsValidEntity(iEntity));
- }
Advertisement
Add Comment
Please, Sign In to add comment