Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sourcemod>
- #include <sdktools>
- #include sdkhooks
- //Survivors
- float iDamageGrenadeLauncherS = 100.0;
- float iPowerSFling = 250.0;
- float iRadiusSdie = 1.0
- float iRadiusSFling = 250.0
- float iRadiusSDamage = 500.0
- //Survivors Pipe Bomb
- float iDamagePipeS = 100.0;
- float iPowerSFlingPipe = 250.0;
- float iRadiusSdiePipe = 1.0
- float iRadiusSFlingPipe = 250.0
- float iRadiusSDamagePipe = 500.0
- //Barrel
- float iDamageB = 100.0;
- float iPowerBFling = 250.0;
- float iRadiusBdie = 1.0
- float iRadiusBFling = 250.0
- float iRadiusBDamage = 500.0
- Handle sdkCallPushPlayer;
- public OnPluginStart()
- {
- Handle GameConf = LoadGameConfigFile("gamedata_stager");
- if(GameConf == INVALID_HANDLE)
- {
- SetFailState("Couldn't find the offsets and signatures file. Please, check that it is installed correctly.");
- }
- StartPrepSDKCall(SDKCall_Player);
- PrepSDKCall_SetFromConf(GameConf, SDKConf_Signature, "CTerrorPlayer_Fling");
- PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_ByRef);
- PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain);
- PrepSDKCall_AddParameter(SDKType_CBasePlayer, SDKPass_Pointer);
- PrepSDKCall_AddParameter(SDKType_Float, SDKPass_Plain);
- sdkCallPushPlayer = EndPrepSDKCall();
- }
- public void OnEntityDestroyed(int entity)
- {
- if (IsValidEntity(entity) && IsValidEdict(entity))
- {
- char classname[128];
- GetEdictClassname(entity, classname, 128);
- if (StrEqual(classname, "grenade_launcher_projectile", false))
- {
- GrenadeTouch(entity);
- }
- if (StrEqual(classname, "pipe_bomb_projectile", false))
- {
- BombTouch(entity);
- }
- if (StrEqual(classname, "prop_fuel_barrel", false))
- {
- BarrelTouch(entity);
- }
- }
- }
- public int GrenadeTouch(int entity)
- {
- float pos[3];
- GetEntPropVector(entity, PropType:0, "m_vecOrigin", pos, 0);
- GranadeExplode(entity, pos);
- }
- public int BombTouch(int entity)
- {
- float pos[3];
- GetEntPropVector(entity, PropType:0, "m_vecOrigin", pos, 0);
- BombExplode(entity, pos)
- }
- public int BarrelTouch(int entity)
- {
- float pos[3];
- GetEntPropVector(entity, PropType:0, "m_vecOrigin", pos, 0);
- BarrelExplode(entity, pos);
- }
- int GranadeExplode(int entity, float pos[3])
- {
- float fDistance = 0.0;
- float pos2[3];
- for( int i = 0; i < 32; i++ )
- {
- if (IsValidClient(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
- {
- GetClientAbsOrigin(i, pos2);
- fDistance = GetVectorDistance(pos, pos2);
- if(fDistance < iRadiusSFling)
- {
- Fly(entity, i, iPowerSFling)
- }
- if(fDistance < iRadiusSdie)
- {
- ForcePlayerSuicide(i)
- }
- if(fDistance < iRadiusSDamage)
- {
- int iDamage = RoundToCeil(iDamageGrenadeLauncherS - fDistance)
- ForceDamageEntity(entity, iDamage, i)
- }
- }
- }
- }
- int BombExplode(int entity, float pos[3])
- {
- float fDistance = 0.0;
- float pos2[3];
- for( int i = 0; i < 32; i++ )
- {
- if (IsValidClient(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
- {
- GetClientAbsOrigin(i, pos2);
- fDistance = GetVectorDistance(pos, pos2);
- if(fDistance < iRadiusSFlingPipe)
- {
- Fly(entity, i, iPowerSFlingPipe)
- }
- if(fDistance < iRadiusSdiePipe)
- {
- ForcePlayerSuicide(i)
- }
- if(fDistance < iRadiusSDamagePipe)
- {
- int iDamage = RoundToCeil(iDamagePipeS - fDistance)
- ForceDamageEntity(entity, iDamage, i)
- }
- }
- }
- }
- int BarrelExplode(int entity, float pos[3])
- {
- float fDistance = 0.0;
- float pos2[3];
- for( int i = 0; i < 32; i++ )
- {
- if (IsValidClient(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i))
- {
- GetClientAbsOrigin(i, pos2);
- fDistance = GetVectorDistance(pos, pos2);
- if(fDistance < iRadiusBFling)
- {
- Fly(entity, i, iPowerBFling)
- }
- if(fDistance < iRadiusBdie)
- {
- ForcePlayerSuicide(i)
- }
- if(fDistance < iRadiusBDamage)
- {
- int iDamage = RoundToCeil(iDamageB - fDistance)
- ForceDamageEntity(entity, iDamage, i)
- }
- }
- }
- }
- public Fly(explosion, int target, float power)
- {
- if(target <= 0 || !IsValidEntity(target) || !IsValidEdict(target)) return;
- float targetPos[3], explosionPos[3], traceVec[3], resultingFling[3];
- GetEntPropVector(target, Prop_Data, "m_vecOrigin", targetPos);
- GetEntPropVector(explosion, Prop_Data,"m_vecOrigin", explosionPos);
- if(power < 1)
- return;
- MakeVectorFromPoints(explosionPos, targetPos, traceVec);
- GetVectorAngles(traceVec, resultingFling);
- resultingFling[0] = Cosine(DegToRad(resultingFling[1])) * power;
- resultingFling[1] = Sine(DegToRad(resultingFling[1])) * power;
- resultingFling[2] = power + (power * 0.5);
- if (GetClientTeam(target) == 2)
- {
- SDKCall(sdkCallPushPlayer, target, resultingFling, 76, target, 2.0);
- }
- else
- {
- SDKCall(sdkCallPushPlayer, target, resultingFling, 2, target, 2.0);
- }
- }
- stock void ForceDamageEntity(int causer, int damage, int victim) // thanks to 达斯*维达
- {
- float victim_origin[3];
- char rupture[32];
- char 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);
- int 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 bool IsValidClient(int client)
- {
- if ( client < 1 || client > MaxClients ) return false;
- if( !IsClientInGame(client)) return false;
- if ( !IsPlayerAlive( client )) return false;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement