// // // shark Guard 1.0 // // ------------- // // based on // // Surface to Air Missile // // By LucifeR // // Lucifer@vgames.co.il // #include #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; }