Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sourcemod>
- #include <sdktools>
- public Plugin:myinfo =
- {
- name = "Anti Tank Bug",
- author = "Eyal282 ( FuckTheSchool )",
- description = "Prevents Tank incapacitated bug that prevents tank from dying if he was healed some how ( this plugin probably only valid for servers with !buy )",
- version = "1.0",
- url = "<- URL ->"
- }
- public OnPluginStart()
- {
- // The cvar to enable the plugin. 0 = Disabled. 1 = Enabled and kill the tank when he has 0 HP. Other values = Enabled and revive the tank that got 0 HP ( Best one because if the bug occurs, the tank did !buy heal and failed to go back but lost his points ).
- CreateConVar("l4d2_anti_tank_bug", "2");
- // Hook the event for when a player gets incapacitated ( called for tank start of death as well )
- HookEvent("player_incapacitated", Event_Incap, EventHookMode_Post);
- }
- public Action: Event_Incap(Handle hEvent, const char[] name, bool dontBroadcast)
- {
- // Is the cvar enabled?
- if(GetConVarInt(FindConVar("l4d2_anti_tank_bug")) == 0)
- return Plugin_Continue;
- // Get the client ID of the incapacitated player.
- new Tank = GetClientOfUserId(GetEventInt(hEvent, "userid"));
- // Is it a human player?
- if(IsFakeClient(Tank))
- return Plugin_Continue;
- // Is he an infected? Because the event only calls on tanks and survivors, we can already assume it's a tank.
- if(GetClientTeam(Tank) != 3)
- return Plugin_Continue;
- // 7.0 seconds are enough to determine if the tank is bugged or died properly.
- CreateTimer(7.0, Check_Bug, GetClientUserId(Tank));
- return Plugin_Continue;
- }
- public Action:Check_Bug(Handle Timer, int UserId)
- {
- new Tank = GetClientOfUserId(UserId);
- // Is he connected?
- if(!IsClientInGame(Tank))
- return Plugin_Continue;
- // Is he alive or the bug never occured?
- else if(!IsPlayerAlive(Tank))
- return Plugin_Continue;
- // Is he an infected?
- else if(GetClientTeam(Tank) != 3)
- return Plugin_Continue;
- // Is he a tank? He had 0.5 seconds to do !buy hunter or something.
- else if(GetEntProp(Tank, Prop_Send, "m_zombieClass") != 8)
- return Plugin_Continue;
- // The console variable is set to 1. Killing the Tank.
- if(GetConVarInt(FindConVar("l4d2_anti_tank_bug")) == 1)
- {
- // Kill the tank
- ForcePlayerSuicide(Tank);
- // Tell the Tank that he died because he was bugged.
- PrintToChat(Tank, "You were killed due to Tank bug immortality.");
- }
- // The console variable is above 1 ( already checked if 0 ). Reviving the Tank.
- else
- {
- new Float:AbsOrigin[3];
- new Float:EyeAngles[3];
- // Get the Tank's current location.
- GetClientAbsOrigin(Tank, AbsOrigin);
- // Get the location the tank was looking at.
- GetClientEyeAngles(Tank, EyeAngles);
- // Kill the tank
- ForcePlayerSuicide(Tank);
- // Check the current flags of the command z_spawn_old
- new flags = GetCommandFlags("z_spawn_old");
- // Make the game think z_spawn_old is not a cheat command. The flags earlier are to maintain all current flags.
- SetCommandFlags("z_spawn_old", flags & ~FCVAR_CHEAT);
- // Force the Tank to write z_spawn_old Tank which revives him as a tank.
- FakeClientCommand(Tank, "z_spawn_old Tank");
- // Give the flags back to the command z_spawn_old ( if not done then everybody can do z_spawn_old which is bad ).
- SetCommandFlags("z_spawn_old", flags);
- // Teleport the Tank to his old position with the same way he looked at.
- TeleportEntity(Tank, AbsOrigin, EyeAngles, NULL_VECTOR);
- // Tell the Tank that he was "revived" to continue punching the survivors since he probably did !buy heal on himself.
- PrintToChat(Tank, "You were revived due to Tank bug immortality.");
- }
- return Plugin_Continue;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement