Files
SMScripts/scripting/testplugin2.sp
2025-04-15 22:27:20 -04:00

96 lines
2.6 KiB
SourcePawn

#include <sdktools>
#include <sourcemod>
#pragma newdecls required
bool aimAtPlayers = false;
static char PLUGIN_VERSION[8] = "1.0.0";
public Plugin myinfo = {
name = "Fartsy's Ass - Framework",
author = "Fartsy#8998",
description = "Framework for Fartsy's Ass (MvM Mods)",
version = PLUGIN_VERSION,
url = "https://forums.firehostredux.com"
};
public void OnPluginStart() {
RegServerCmd("fb_test", Command_Test, "");
RegServerCmd("fb_stoptest", Command_StopTest, "");
}
public Action Command_Test(int args) {
aimAtPlayers = true;
}
public Action Command_StopTest(int args){
aimAtPlayers = false;
}
public Action GetClosestEnemy(int entity) {
int x = -1;
float flDistMin = -1.0;
float flDist;
float position[3];
float yPos[3];
GetEntPropVector(entity, Prop_Send, "m_vecOrigin", position);
for (int y = 1; y <= MaxClients; y++)
if (IsClientInGame(y) && IsPlayerAlive(y) && GetClientTeam(y) == 2) {
GetClientAbsOrigin(y, yPos);
flDist = GetVectorDistance(position, yPos);
if (flDist < 0.0)
flDist *= -1.0;
if (flDistMin == -1.0 || flDist < flDistMin) {
flDistMin = flDist;
x = y;
}
}
return x;
}
public void OnGameFrame(){
if(!aimAtPlayers){
return;
} else {
tickClosest();
}
}
//Target player
//I wonder what this could do... What would happen if I played around with this function to rewrite it for a very specific purpose...
public Action tickClosest() {
float angles[3];
float clientEyes[3];
float targetEyes[3];
float resultant[3];
int Ent = FindEntityByClassname(-1, "func_tracktrain"); //Get index of the entity.
if (Ent == -1) {
PrintToChatAll("Ent not found");
return Plugin_Handled;
} else {
char targetname[128];
GetEntPropString(Ent, Prop_Data, "m_iName", targetname, sizeof(targetname));
if (StrEqual(targetname, "base")) {
GetEntPropVector(Ent, Prop_Send, "m_vecOrigin", targetEyes);
int x = GetClosestEnemy(Ent);
if(x == -1){
return Plugin_Handled;
}
else{
//PrintToChatAll("Client %N is closest. They are #%i.", x, x);
GetClientEyePosition(x, clientEyes);
MakeVectorFromPoints(targetEyes, clientEyes, resultant);
GetVectorAngles(resultant, angles);
if (angles[0] >= 270) {
angles[0] -= 270;
angles[0] = (90 - angles[0]);
} else {
if (angles[0] <= 90) {
angles[0] *= -1;
}
}
TeleportEntity(Ent, NULL_VECTOR, angles, NULL_VECTOR);
}
}
}
return Plugin_Handled;
}