Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sourcemod>
- #include <sdktools>
- #include <sdkhooks>
- new vClient[MAXPLAYERS+1];
- public Action:OnPlayerRunCmd(client, &buttons, &impuls, Float:vel[3], Float:angles[3], &weapon)
- {
- if(bIsSurvivor(client))
- {
- char sWeaponEx[32];
- int iCurrentWeapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
- if (IsValidEntity(iCurrentWeapon) && IsValidEdict(iCurrentWeapon))
- {
- GetEntityClassname(iCurrentWeapon, sWeaponEx, sizeof(sWeaponEx))
- if(StrEqual(sWeaponEx, "weapon_melee"))
- {
- if(impuls == 201)
- {
- SDKCallWeaponDrop(client, iCurrentWeapon);
- SDKHook(iCurrentWeapon, SDKHook_StartTouchPost, OnTouch)
- vClient[client] = client;
- }
- }
- }
- }
- }
- public OnTouch(int thing, int other)
- {
- if(!IsValidClient(other))
- {
- SDKUnhook(thing, SDKHook_StartTouchPost, OnTouch)
- }
- else if(other != vClient[other])
- {
- ForceDamageEntity(thing, 250, other)
- }
- }
- stock void vSetVector(float target[3], float x, float y, float z)
- {
- target[0] = x;
- target[1] = y;
- target[2] = z;
- }
- stock bool:IsValidClient( client )
- {
- if ( client < 1 || client > MaxClients ) return false;
- if ( !IsClientConnected( client )) return false;
- if ( !IsClientInGame( client )) return false;
- if ( !IsPlayerAlive( client )) return false;
- return true;
- }
- stock ForceDamageEntity(causer, damage, victim)
- {
- float victim_origin[3];
- new String:rupture[32];
- new String:damage_victim[32];
- IntToString(damage, rupture, sizeof(rupture));
- Format(damage_victim, sizeof(damage_victim), "hurtme%d", victim);
- GetEntPropVector(victim, Prop_Send, "m_vecOrigin", victim_origin);
- new entity = CreateEntityByName("point_hurt");
- DispatchKeyValue(victim, "targetname", damage_victim);
- DispatchKeyValue(entity, "DamageTarget", damage_victim);
- DispatchKeyValue(entity, "Damage", rupture);
- DispatchSpawn(entity);
- TeleportEntity(entity, victim_origin, NULL_VECTOR, NULL_VECTOR);
- AcceptEntityInput(entity, "Hurt", (causer > 0 && causer <= MaxClients) ? causer : -1);
- DispatchKeyValue(entity, "classname", "point_hurt");
- DispatchKeyValue(victim, "targetname", "null");
- AcceptEntityInput(entity, "Kill");
- }
- stock SDKCallWeaponDrop(client, weapon)
- {
- decl Float:vecAngles[3], Float:vecTarget[3], Float:vecVelocity[3];
- if (GetPlayerEye(client, vecTarget))
- {
- GetClientEyeAngles(client, vecAngles);
- GetAngleVectors(vecAngles, vecVelocity, NULL_VECTOR, NULL_VECTOR)
- vecVelocity[0] *= 475.0;
- vecVelocity[1] *= 475.0;
- vecVelocity[2] *= 475.0;
- SDKHooks_DropWeapon(client, weapon, NULL_VECTOR, NULL_VECTOR);
- TeleportEntity(weapon, NULL_VECTOR, NULL_VECTOR, vecVelocity)
- }
- }
- stock bool:GetPlayerEye(client, Float:vecTarget[3])
- {
- decl Float:Origin[3], Float:Angles[3];
- GetClientEyePosition(client, Origin);
- GetClientEyeAngles(client, Angles);
- new Handle:trace = TR_TraceRayFilterEx(Origin, Angles, MASK_SHOT, RayType_Infinite, TraceEntityFilterPlayer);
- if (TR_DidHit(trace))
- {
- TR_GetEndPosition(vecTarget, trace);
- CloseHandle(trace);
- return true;
- }
- CloseHandle(trace);
- return false;
- }
- public bool:TraceEntityFilterPlayer(entity, contentsMask)
- {
- return entity > GetMaxClients() || !entity;
- }
- stock bool bIsSurvivor(int client)
- {
- return client > 0 && client <= MaxClients && IsClientInGame(client) && GetClientTeam(client) == 2 && !IsClientInKickQueue(client) && IsPlayerAlive(client);
- }
Advertisement
Add Comment
Please, Sign In to add comment