rendered paste body// //
// shark Guard 1.0 //
// ------------- //
// based on //
// Surface to Air Missile //
// By LucifeR //
// Lucifer@vgames.co.il //
#include <a_samp>
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xFF0000AA
#define TEAM_ARMY 9
#define MAX_shark 3
new shark[MAX_PLAYERS][MAX_shark];
new shark_T[MAX_PLAYERS][MAX_shark];
new shark_M[MAX_PLAYERS];
new shark_I[MAX_PLAYERS];
new shark_re[MAX_PLAYERS];
new shark_timervar;
forward shark_timer();
forward shark_lunch(playerid);
forward shark_go(playerid, num);
forward shark_relunch(playerid);
public OnFilterScriptInit()
{
printf(" _ _ ");
printf(" ( ) _ _ ____ _ ___ ____| \\_ ");
printf(" | | | | | |/ ___|(_)/ __|/ __ | \\ \\ ");
printf(" | | | | | | | | | |_ / / /_/ / / ");
printf(" | |____| |_| | |___ | | _| |___ | | \\ ");
printf(" |______\\_____/\\____||_|_| \\____|| |\\ \\ ");
printf(" shark guard");
printf(" shark convesion by c-middia ");
shark_timervar = SetTimer("shark_timer", 100, 1);
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
public OnPlayerConnect(playerid)
{
shark_setup(playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
return 1;
}
public OnPlayerSpawn(playerid)
{
shark_setup(playerid);
return 1;
}
public OnPlayerDeath(playerid)
{
shark_setup(playerid);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if((strcmp(cmdtext, "/shark on", true) == 0) && (IsPlayerAdmin(playerid)))
{
new tmpstr[256], playername[256];
GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
shark_timervar = SetTimer("shark_timer", 500, 1);
format(tmpstr, 256, " ***** shark system activated by %s!", playername);
for(new i=0; i <= MAX_PLAYERS; i++)
{
SendClientMessage(i, COLOR_RED, tmpstr);
}
return 1;
}
if((strcmp(cmdtext, "/shark off", true) == 0) && (IsPlayerAdmin(playerid)))
{
new tmpstr[256], playername[256];
GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
KillTimer(shark_timervar);
format(tmpstr, 256, " ****** shark system has been disabled by %s!", playername);
for(new i=0; i <= MAX_PLAYERS; i++)
{
SendClientMessage(i, COLOR_GREEN, tmpstr);
}
return 1;
}
if((strcmp(cmdtext, "/shark", true) == 0) && (IsPlayerAdmin(playerid)))
{
SendClientMessage(playerid, 0xFFFFFFFF, "usage: /shark [on/off]");
return 1;
}
return 0;
}
//enum shark_ar//setupfloats
//{
//Float:minX,
//Float:minY,
//Float:minZ,
//Float:maxX,
//Float:maxY,
//Float:maxZ
//}
new Float:sharkarea [6] = {-3250.0,1000.0,-25.0,-1935.0,2157.0,-0.1};
public shark_timer()
{
for(new playerid=0; playerid <= MAX_PLAYERS; playerid++)
if(shark_M[playerid] == 0 && IsPlayerConnected(playerid) && isPlayerInArea(playerid, sharkarea ) && !IsPlayerInAnyVehicle(playerid))
{
if(shark_M[playerid] == 0)
{
shark_M[playerid] = 1;
shark_lunch(playerid);
}
}
}
shark_setup(playerid)
{
shark_re[playerid] = 0;
shark_M[playerid]=0;
for(new i=(MAX_shark-1); i <= 0; i++)
{
if(shark[playerid][i] != 0 && IsValidObject(shark[playerid][i])) { DestroyObject(shark[playerid][i]); }
shark[playerid][i] = 0;
shark_T[playerid][i] = 0;
}
}
public shark_lunch(playerid)
{
GetPlayerTeam(playerid);
// if(shark_M[playerid] != (IsPlayerAdmin(playerid)) && shark_M[playerid] == 1 && !(shark[playerid][0] > 0))//
if(shark_M[playerid] == 1 && !(shark[playerid][0] > 0))//TEAM_ARMY
{
shark[playerid][0] = CreateObject(1608, -2550.0, 1830.0, -10.0, 0.0, 30.0, 270.0);
shark_T[playerid][0] =SetTimerEx("shark_go", 100, 1, "d d", playerid, 0);
CreateExplosion(14.939204, 1720.225097, 24.630422, 4, 1);
}
}
public shark_go(playerid, num)
{
new Float:ox,Float:oy,Float:oz;
GetObjectPos(shark[playerid][num], ox, oy, oz);
if(isPlayerNearPos(playerid, ox, oy, oz, 1))
{
KillTimer(shark_T[playerid][num]);
CreateExplosion(ox, oy, oz, 7, 2);
CreateExplosion(ox, oy, oz, 7, 2);
DestroyObject(shark[playerid][num]);
shark[playerid][num] = 0;
RemovePlayerMapIcon(playerid, shark_I[playerid]);
SetTimerEx("shark_relunch", 3000, 0, "d", playerid);
shark_re[playerid] = 1;
if(!IsPlayerConnected(playerid))
{
KillTimer(shark_T[playerid][num]);
DestroyObject(shark[playerid][num]);
shark[playerid][num] = 0;
RemovePlayerMapIcon(playerid, shark_I[playerid]);
shark_re[playerid] = 0;
}
}
else
{
new Float:px,Float:py,Float:pz;
GetPlayerPos(playerid, px, py, pz);
MoveObject(shark[playerid][num], px, py, pz, 60);
SetObjectToFaceCords(shark[playerid][num], px, py, pz);
shark_M[playerid]-=1;
PlayerPlaySound(playerid, 1057, px, py, pz);
RemovePlayerMapIcon(playerid, shark_I[playerid]);
SetPlayerMapIcon(playerid, shark_I[playerid], ox, oy, oz, 0, COLOR_RED);
if(!IsPlayerConnected(playerid))
{
KillTimer(shark_T[playerid][num]);
DestroyObject(shark[playerid][num]);
shark[playerid][num] = 0;
RemovePlayerMapIcon(playerid, shark_I[playerid]);
shark_re[playerid] = 0;
}
}
}
//public shark_relunch(playerid)
//{
// new Float:h;
// GetPlayerHealth(playerid, h);
// if(h > 0 && shark_re[playerid] == 1)
// shark_lunch(playerid);
//
// shark_re[playerid] = 0;
//}
SetObjectToFaceCords(objectid, Float:x1,Float:y1,Float:z1)
{
// SetObjectToFaceCords() By LucifeR //
// LucifeR@vgames.co.il //
// setting the objects cords
new Float:x2,Float:y2,Float:z2;
GetObjectPos(objectid, x2,y2,z2);
// setting the distance values
new Float:DX = floatabs(x2-x1);
new Float:DY = floatabs(y2-y1);
new Float:DZ = floatabs(z2-z1);
// defining the angles and setting them to 0
new Float:yaw = 0;
new Float:pitch = 0;
// check that there isnt any 0 in one of the distances,
// if there is any use the given parameters:
if(DY == 0 || DX == 0)
{
if(DY == 0 && DX > 0) {
yaw = 00;
pitch = 0; }
else if(DY == 0 && DX < 0) {
yaw = 180;
pitch = 180; }
else if(DY > 0 && DX == 0) {
yaw = 90;
pitch = 90; }
else if(DY < 0 && DX == 0) {
yaw = 270;
pitch = 270; }
else if(DY == 0 && DX == 0) {
yaw = 0;
pitch = 0; }
}
// calculating the angale using atan
else // non of the distances is 0.
{
// calculatin the angles
yaw = atan(DX/DY);
pitch = atan(floatsqroot(DX*DX + DZ*DZ) / DY);
// there are three quarters in a circle, now i will
// check wich circle this is and change the angles
// according to it.
if(x1 > x2 && y1 <= y2) {
yaw = yaw + 90;
pitch = pitch - 45; }
else if(x1 <= x2 && y1 < y2) {
yaw = 90 - yaw;
pitch = pitch - 45; }
else if(x1 < x2 && y1 >= y2) {
yaw = yaw - 90;
pitch = pitch - 45; }
else if(x1 >= x2 && y1 > y2) {
yaw = 270 - yaw;
pitch = pitch + 315; }
// the pitch could be only in two quarters, lets see wich one:
if(z1 < z2)
pitch = 360-pitch;
}
// setting the object rotation (should be twice cuz of lame GTA rotation system)
SetObjectRot(objectid, 0, 0, yaw);
SetObjectRot(objectid, 0, pitch, yaw+90);
}
isPlayerNearPos(playerID, Float:x, Float:y, Float:z, c)
{
new Float:PX, Float:PY, Float:PZ;
GetPlayerPos(playerID, PX, PY, PZ);
if((x-c < PX) && (x+c > PX) && (y-c < PY) && (y+c > PY) && (z-c < PZ) && (z+c > PZ))
{
return 1;
}
return 0;
}
isPlayerInArea(playerID, Float:data[6])
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerID, X, Y, Z);
if(X >= data[0] && X <= data[3] && Y >= data[1] && Y <= data[4] && Z >= data[2] && Z <= data[5] ) {
return 1;
}
return 0;
}