| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678 |
- /*______________________________________________________________________________
- L-SAM "Lordz's Surface To Air Missiles" - v1.3
- Copyright(c) 2014 - L_SAM3.inc
- Author : Lordzâ„¢
- Editor - Desmond
-
- //Functions:
- native CreateSAM(Float:X, Float:Y, Float:Z, Float:rX=0.0, Float:rY=0.0, Float:rZ=0.0, Float:DrawDistance=200.0, Float:Range=300.0, Speed=80, Power=SAM_POWER_NORMAL, bool:follow=false, bool:followlimit=false);
- native IsSAMMissilesFollowing(samid);
- native DestroySAM(samid);
- native AvoidSAMAttacksOnPlayer(playerid, samid);
- native EnableSAMAttacksOnPlayer(playerid, samid);
- native ToggleNoSAMAttacksOnPlayer(playerid, samid, bool:noattack);
- native SetSAMMissileSpeed(samid, speed);
- native SetSAMMissilePower(samid, Power);
- native SetSAMMissileColor(samid, color);
- native GetSAMMissileSpeed(samid);
- native GetSAMMissilePower(samid);
- native GetSAMObjectID(samid);
- native GetSAMMissileColor(samid);
- native IsMissileFollowingLimited(samid);
- native DestroySAMMissile(playerid);
- native IsSAMMissileChasing(playerid);
- ~ Desmond's additions ~
- To determine whenever a launcher will shoot or not
- public MissileAuthorized(playerid)
- Command for SANG to authorize a specific vehicle ID
- CMD:authorizeaircraft(playerid, params[])
- Variable that checks whenever a vehicle ID is authorized
- vehMissileAuthorized[vehicleid]
- Additions were made to LordzSAMTimer, check it out if you wish
- Important note: the author of this include used indentation of 2 tabs, that's why
- it looks weird. It took me a lot of time to try and arrange it but the editor won't let me.
- For now I'm keeping it this way till I can arrange the whole include.
- _______________________________________________________________________________*/
- #define L_SAMUSE_SMOKES
- #if defined _included_l_sam
- #endinput
- #endif
- #define _included_l_sam
- #define MAX_LSAMS 100 //Change this value to create more SAM launchers.
- #define SAM_POWER_LOW 0
- #define SAM_POWER_NORMAL 1
- #define SAM_POWER_HIGH 2
- #define SAM_POWER_BEST 3
- #define MISSILE_RADAR_COLOR 0x660000FF
- enum L_saminfo
- {
- Float:L_SAMX,
- Float:L_SAMY,
- Float:L_SAMZ,
- Float:L_SAMrX,
- Float:L_SAMrY,
- Float:L_SAMrZ,
- Float:L_SAMDrawDistance,
- Float:L_SAMRange,
- L_SAMSpeed,
- L_SAMPower,
- bool:L_SAMFollow,
- bool:L_SAMFollowLimit,
- Float:L_SAMFollowLimitRange,
- bool:L_SAMCreated,
- L_SAMObjectID,
- L_SAMMissileColor,
- }
- new L_SAMData[MAX_LSAMS][L_saminfo],
- L_CountSAMS = 0,
- Float:L_SAMPlayerPos[MAX_PLAYERS][3],
- PlayerMissile[MAX_PLAYERS],
- #if defined L_SAMUSE_SMOKES
- PlayerMissileSmoke[MAX_PLAYERS],
- #endif
- bool:MissileInProgress[MAX_PLAYERS],
- L_SAMMissileObject[MAX_OBJECTS],
- #if defined L_SAMUSE_SMOKES
- L_SAMMissileSmoke[MAX_OBJECTS],
- #endif
- L_SAMMissilePower[MAX_OBJECTS],
- L_SAMMissileSAMID[MAX_OBJECTS],
- L_SAMMissileProgress[MAX_OBJECTS],
- bool:L_SAMFollowStopped[MAX_PLAYERS],
- bool:L_SAM_ExceptionalPlayer[MAX_PLAYERS][MAX_LSAMS],
- bool:L_SAMMissileStopped[MAX_OBJECTS],
- MissileWarning[MAX_PLAYERS],
- PlayerMissileWarningTimerID[MAX_PLAYERS],
- bool:vehMissileAuthorized[MAX_VEHICLES];
- stock CreateSAM(Float:X, Float:Y, Float:Z, Float:rX=0.0, Float:rY=0.0, Float:rZ=0.0, Float:DrawDistance=200.0, Float:Range=300.0, Speed=80, Power=SAM_POWER_NORMAL, bool:follow=false, bool:followlimit=false)
- {
- if(L_CountSAMS > MAX_LSAMS) return printf("• <L_SAM> Error : Couldn't create SAM, maximum SAMS have already been done!"), 0;
- new samid = L_CountSAMS;
- L_SAMData[samid][L_SAMX] = X;
- L_SAMData[samid][L_SAMY] = Y;
- L_SAMData[samid][L_SAMZ] = Z;
- L_SAMData[samid][L_SAMrX] = rX;
- L_SAMData[samid][L_SAMrY] = rY;
- L_SAMData[samid][L_SAMrZ] = rZ;
- L_SAMData[samid][L_SAMDrawDistance] = DrawDistance;
- L_SAMData[samid][L_SAMRange] = Range;
- L_SAMData[samid][L_SAMSpeed] = Speed;
- if(Power >= SAM_POWER_BEST)
- L_SAMData[samid][L_SAMPower] = SAM_POWER_BEST;
- else if(Power <= SAM_POWER_LOW)
- L_SAMData[samid][L_SAMPower] = SAM_POWER_LOW;
- else L_SAMData[samid][L_SAMPower] = Power;
- L_SAMData[samid][L_SAMFollow] = follow;
- L_SAMData[samid][L_SAMFollowLimit] = followlimit;
- L_SAMData[samid][L_SAMFollowLimitRange] = Range;
- L_SAMData[samid][L_SAMObjectID] = CreateObject(18848, X, Y, Z, rX, rY, rZ, DrawDistance);
- L_SAMData[samid][L_SAMMissileColor] = MISSILE_RADAR_COLOR;
- L_SAMData[samid][L_SAMCreated] = true;
- L_CountSAMS++;
- return samid;
- }
- stock DestroySAM(samid)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return 0;
- L_SAMData[samid][L_SAMX] = 0.0;
- L_SAMData[samid][L_SAMY] = 0.0;
- L_SAMData[samid][L_SAMZ] = 0.0;
- L_SAMData[samid][L_SAMrX] = 0.0;
- L_SAMData[samid][L_SAMrY] = 0.0;
- L_SAMData[samid][L_SAMrZ] = 0.0;
- L_SAMData[samid][L_SAMDrawDistance] = 0.0;
- L_SAMData[samid][L_SAMRange] = 0.0;
- L_SAMData[samid][L_SAMSpeed] = 0;
- L_SAMData[samid][L_SAMPower] = 0;
- L_SAMData[samid][L_SAMFollow] = false;
- L_SAMData[samid][L_SAMCreated] = false;
- DestroyObject(L_SAMData[samid][L_SAMObjectID]);
- L_SAMData[samid][L_SAMObjectID] = -1;
- L_SAMData[samid][L_SAMMissileColor] = MISSILE_RADAR_COLOR;
- return 1;
- }
- stock IsMissileFollowingLimited(samid)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return -1;
- if(L_SAMData[samid][L_SAMFollow] == false) return false;
- if(L_SAMData[samid][L_SAMFollowLimit] == false) return false;
- return true;
- }
- //Thanks to RyDeR` for this function!
- stock L_SetObjectFaceCoords3D(iObject, Float: fX, Float: fY, Float: fZ, Float: fRollOffset = 0.0, Float: fPitchOffset = 0.0, Float: fYawOffset = 0.0) {
- new
- Float: fOX,
- Float: fOY,
- Float: fOZ,
- Float: fPitch
- ;
- GetObjectPos(iObject, fOX, fOY, fOZ);
- fPitch = floatsqroot(floatpower(fX - fOX, 2.0) + floatpower(fY - fOY, 2.0));
- fPitch = floatabs(atan2(fPitch, fZ - fOZ));
- fZ = atan2(fY - fOY, fX - fOX) - 90.0; // Yaw
- SetObjectRot(iObject, fRollOffset, fPitch + fPitchOffset, fZ + fYawOffset);
- }
- #if defined FILTERSCRIPT
- public OnFilterScriptInit()
- {
- for(new samid; samid< MAX_LSAMS; samid++)
- {
- L_SAMData[samid][L_SAMX] = 0.0;
- L_SAMData[samid][L_SAMY] = 0.0;
- L_SAMData[samid][L_SAMZ] = 0.0;
- L_SAMData[samid][L_SAMrX] = 0.0;
- L_SAMData[samid][L_SAMrY] = 0.0;
- L_SAMData[samid][L_SAMrZ] = 0.0;
- L_SAMData[samid][L_SAMDrawDistance] = 0.0;
- L_SAMData[samid][L_SAMRange] = 0.0;
- L_SAMData[samid][L_SAMSpeed] = 0;
- L_SAMData[samid][L_SAMPower] = 0;
- L_SAMData[samid][L_SAMFollow] = false;
- L_SAMData[samid][L_SAMCreated] = false;
- L_SAMData[samid][L_SAMObjectID] = -1;
- L_SAMData[samid][L_SAMMissileColor] = MISSILE_RADAR_COLOR;
- for(new a; a< MAX_PLAYERS; a++) L_SAM_ExceptionalPlayer[a][samid] = false;
- }
- for(new i; i< MAX_OBJECTS; i++)
- {
- L_SAMMissileObject[i] = 0;
- L_SAMMissilePower[i] = 0;
- L_SAMMissileSAMID[i] = -1;
- L_SAMMissileProgress[i] = -1;
- }
- for(new i; i< MAX_PLAYERS; i++)
- {
- MissileInProgress[i] = false;
- L_SAMPlayerPos[i][0] = 0.0;
- L_SAMPlayerPos[i][1] = 0.0;
- L_SAMPlayerPos[i][2] = 0.0;
- PlayerMissile[i] = -1;
- L_SAMFollowStopped[i] = false;
- #if defined L_SAMUSE_SMOKES
- PlayerMissileSmoke[i] = -1;
- #endif
- }
- L_CountSAMS = 0;
- SetTimer("LordzSAMTimer", 2500, true);
- CallLocalFunction("L_SAM_OnFS", "");
- return 1;
- }
- #if defined _ALS_OnFilterScriptInit
- #undef OnFilterScriptInit
- #else
- #define _ALS_OnFilterScriptInit
- #endif
- public OnFilterScriptExit()
- {
- for(new i; i< MAX_LSAMS; i++)
- {
- if(L_SAMData[i][L_SAMCreated])
- {
- DestroyObject(L_SAMData[i][L_SAMObjectID]);
- }
- }
- for(new i; i< MAX_OBJECTS; i++)
- {
- if(L_SAMMissileProgress[i])
- {
- DestroyObject(i);
- #if defined L_SAMUSE_SMOKES
- DestroyObject(L_SAMMissileSmoke[i]);
- #endif
- }
- }
- CallLocalFunction("L_SAM_OnFSExit", "");
- return 1;
- }
- #if defined _ALS_OnFilterScriptExit
- #undef OnFilterScriptExit
- #else
- #define _ALS_OnFilterScriptExit
- #endif
- forward L_SAM_OnFS();
- forward L_SAM_OnFSExit();
- #else
- public OnGameModeInit()
- {
- for(new samid; samid< MAX_LSAMS; samid++)
- {
- L_SAMData[samid][L_SAMX] = 0.0;
- L_SAMData[samid][L_SAMY] = 0.0;
- L_SAMData[samid][L_SAMZ] = 0.0;
- L_SAMData[samid][L_SAMrX] = 0.0;
- L_SAMData[samid][L_SAMrY] = 0.0;
- L_SAMData[samid][L_SAMrZ] = 0.0;
- L_SAMData[samid][L_SAMDrawDistance] = 0.0;
- L_SAMData[samid][L_SAMRange] = 0.0;
- L_SAMData[samid][L_SAMSpeed] = 0;
- L_SAMData[samid][L_SAMPower] = 0;
- L_SAMData[samid][L_SAMFollow] = false;
- L_SAMData[samid][L_SAMCreated] = false;
- L_SAMData[samid][L_SAMObjectID] = -1;
- L_SAMData[samid][L_SAMMissileColor] = MISSILE_RADAR_COLOR;
- for(new a; a< MAX_PLAYERS; a++) L_SAM_ExceptionalPlayer[a][samid] = false;
- }
- for(new i; i< MAX_OBJECTS; i++)
- {
- L_SAMMissileObject[i] = 0;
- L_SAMMissilePower[i] = 0;
- L_SAMMissileSAMID[i] = -1;
- L_SAMMissileProgress[i] = -1;
- }
- for(new i; i< MAX_PLAYERS; i++)
- {
- MissileInProgress[i] = false;
- L_SAMPlayerPos[i][0] = 0.0;
- L_SAMPlayerPos[i][1] = 0.0;
- L_SAMPlayerPos[i][2] = 0.0;
- PlayerMissile[i] = -1;
- L_SAMFollowStopped[i] = false;
- #if defined L_SAMUSE_SMOKES
- PlayerMissileSmoke[i] = -1;
- #endif
- }
- L_CountSAMS = 0;
- SetTimer("LordzSAMTimer", 2500, true);
- CallLocalFunction("L_SAM_OnGM", "");
- return 1;
- }
- #if defined _ALS_OnGameModeInit
- #undef OnGameModeInit
- #else
- #define _ALS_OnGameModeInit
- #endif
- forward L_SAM_OnGM();
- public OnGameModeExit()
- {
- for(new i; i< MAX_LSAMS; i++)
- {
- if(L_SAMData[i][L_SAMCreated])
- {
- DestroyObject(L_SAMData[i][L_SAMObjectID]);
- }
- }
- for(new i; i< MAX_OBJECTS; i++)
- {
- if(L_SAMMissileProgress[i])
- {
- DestroyObject(i);
- #if defined L_SAMUSE_SMOKES
- DestroyObject(L_SAMMissileSmoke[i]);
- #endif
- }
- }
- CallLocalFunction("L_SAM_OnGMExit", "");
- return 1;
- }
- #if defined _ALS_OnGameModeExit
- #undef OnGameModeExit
- #else
- #define _ALS_OnGameModeExit
- #endif
- forward L_SAM_OnGMExit();
- #endif
- forward LordzSAMTimer();
- stock AvoidSAMAttacksOnPlayer(playerid, samid)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return -1;
- L_SAM_ExceptionalPlayer[playerid][samid] = true;
- return 1;
- }
- stock EnableSAMAttacksOnPlayer(playerid, samid)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return -1;
- L_SAM_ExceptionalPlayer[playerid][samid] = false;
- return 1;
- }
- stock ToggleNoSAMAttacksOnPlayer(playerid, samid, bool:noattack)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return -1;
- L_SAM_ExceptionalPlayer[playerid][samid] = noattack;
- return 1;
- }
- stock SetSAMMissileSpeed(samid, speed)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return 0;
- L_SAMData[samid][L_SAMSpeed] = speed;
- return 1;
- }
- stock GetSAMMissileSpeed(samid)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return -1;
- return L_SAMData[samid][L_SAMSpeed];
- }
- stock SetSAMMissilePower(samid, Power)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return -1;
- if(Power >= SAM_POWER_BEST) L_SAMData[samid][L_SAMPower] = SAM_POWER_BEST;
- else if(Power <= SAM_POWER_LOW) L_SAMData[samid][L_SAMPower] = SAM_POWER_LOW;
- else L_SAMData[samid][L_SAMPower] = Power;
- return Power;
- }
- stock GetSAMMissilePower(samid)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return -1;
- return L_SAMData[samid][L_SAMPower];
- }
- stock GetSAMObjectID(samid)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return -1;
- return L_SAMData[samid][L_SAMObjectID];
- }
- stock IsSAMMissilesFollowing(samid)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return -1;
- if(L_SAMData[samid][L_SAMFollow] == true) return true;
- else return false;
- }
- stock SetSAMMissileColor(samid, color)
- {
- if(L_SAMData[samid][L_SAMCreated] == false) return 0;
- L_SAMData[samid][L_SAMMissileColor] = color;
- return 1;
- }
- stock GetSAMMissileColor(samid)
- {
- return L_SAMData[samid][L_SAMMissileColor];
- }
- //Thanks to the person who created the function "randomEx"
- stock L_randomEx(minnum = cellmin, maxnum = cellmax) return random(maxnum - minnum + 1) + minnum;
- forward MissileAuthorized(playerid);
- public MissileAuthorized(playerid)
- {
- if(pDeathState[playerid] == PLAYER_STATE_REVIVE || pDeathState[playerid] == PLAYER_STATE_INHOSP) return 1; // prevent the launcher from constantly shooting at players that were just taken down
- if(!IsPlayerInAnyVehicle(playerid)) return 1;
- if(!IsAHelicopter(GetPlayerVehicleID(playerid)) && !IsAPlane(GetPlayerVehicleID(playerid))) return 1;
- new vehfaction = sVehicleInfo[GetDynamicVehicleID(GetPlayerVehicleID(playerid))][v_faction];
- if(vehfaction == FACTION_SAPD || vehfaction == FACTION_FBI || vehfaction == FACTION_FMD || vehfaction == 5 || vehfaction == FACTION_GOV || vehfaction == FACTION_SANG) return 1;
- if(vehMissileAuthorized[GetPlayerVehicleID(playerid)]) return 1;
- return 0;
- }
- forward GivePlayerMissileWarning(playerid);
- public GivePlayerMissileWarning(playerid)
- {
- MissileWarning[playerid] = 5;
- GameTextForPlayer(playerid, "~r~RESTRICTED ZONE~n~~r~LEAVE NOW ~w~(5 SECONDS LEFT)", 1000, 3);
- PlayerMissileWarningTimerID[playerid] = SetTimerEx("PlayerMissileWarning", 1000, true, "i", playerid);
- return 1;
- }
- forward PlayerMissileWarning(playerid);
- public PlayerMissileWarning(playerid)
- {
- new warningmsg[128];
- if(MissileWarning[playerid] > 0) MissileWarning[playerid]--;
- if(MissileWarning[playerid] == 0) KillTimer(PlayerMissileWarningTimerID[playerid]);
- format(warningmsg, sizeof(warningmsg), "~r~RESTRICTED ZONE~n~~r~LEAVE NOW ~w~(%d SECONDS LEFT)", MissileWarning[playerid]);
- GameTextForPlayer(playerid, warningmsg, 1000, 3);
- return 1;
- }
- public LordzSAMTimer()
- {
- for(new i; i< MAX_LSAMS; i++)
- {
- if(L_SAMData[i][L_SAMCreated])
- {
- for(new a, amax = GetMaxPlayers(); a< amax; a++)
- {
- if(!IsPlayerConnected(a)) continue;
- if(MissileAuthorized(a)) continue;
- if(!IsPlayerInRangeOfPoint(a, L_SAMData[i][L_SAMRange], L_SAMData[i][L_SAMX], L_SAMData[i][L_SAMY], L_SAMData[i][L_SAMZ])) continue;
- if(L_SAM_ExceptionalPlayer[a][i] == true) continue;
- if(MissileInProgress[a] == true) continue;
- if(MissileWarning[a] > 0) continue;
- if(MissileWarning[a] == -1) {
- new counter = 0, msg[128];
- foreach(new player: Player)
- {
- if(GetPlayerVehicleID(player) != GetPlayerVehicleID(a)) continue;
- GivePlayerMissileWarning(player);
- counter++;
- }
- format(msg, sizeof(msg), "Anti Aircraft (%d) has spotted a %s (%d occupied), taking it down in 5 seconds.", i, GetVehicleFriendlyName(GetPlayerVehicleID(a)), counter);
- SendRadioMessage(FACTION_SANG, COLOR_RED, msg);
- continue;
- }
- GetPlayerPos(a, L_SAMPlayerPos[a][0], L_SAMPlayerPos[a][1], L_SAMPlayerPos[a][2]);
- new p_missileobj = CreateObject(345, L_SAMData[i][L_SAMX], L_SAMData[i][L_SAMY], L_SAMData[i][L_SAMZ], 0.0, 0.0, 0.0, 300.0);
- #if defined L_SAMUSE_SMOKES
- new p_missilesmoke = CreateObject(18723, L_SAMData[i][L_SAMX], L_SAMData[i][L_SAMY], L_SAMData[i][L_SAMZ], 0.0, 0.0, 0.0, 300.0);
- AttachObjectToObject(p_missilesmoke, p_missileobj, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1);
- #endif
- PlayerMissile[a] = p_missileobj;
- #if defined L_SAMUSE_SMOKES
- PlayerMissileSmoke[a] = p_missilesmoke;
- #endif
- L_SAMMissileObject[p_missileobj] = 1;
- #if defined L_SAMUSE_SMOKES
- L_SAMMissileSmoke[p_missileobj] = p_missilesmoke;
- #endif
- L_SAMMissilePower[p_missileobj] = L_SAMData[i][L_SAMPower];
- L_SAMMissileSAMID[p_missileobj] = i;
- L_SAMMissileProgress[p_missileobj] = a;
- L_SetObjectFaceCoords3D(p_missileobj, L_SAMPlayerPos[a][0], L_SAMPlayerPos[a][1], L_SAMPlayerPos[a][2]);
- MoveObject(p_missileobj, L_SAMPlayerPos[a][0], L_SAMPlayerPos[a][1], L_SAMPlayerPos[a][2], L_SAMData[i][L_SAMSpeed]);
- MissileInProgress[a] = true;
-
- if(L_SAMData[i][L_SAMFollow] == true) L_SAMFollowStopped[a] = false;
- CallLocalFunction("OnSAMMissileLaunch", "ii", a, i);
- }
- }
- }
- return 1;
- }
- stock DestroySAMMissile(playerid)
- {
- if(!MissileInProgress[playerid]) return 0;
- L_SAMMissileStopped[PlayerMissile[playerid]] = false;
- L_SAMFollowStopped[playerid] = true;
- return CallLocalFunction("OnObjectMoved", "i", PlayerMissile[playerid]);
- }
- stock IsSAMMissileChasing(playerid)
- {
- if(MissileInProgress[playerid]) return true;
- else return false;
- }
- public OnObjectMoved(objectid)
- {
- if(L_SAMMissileObject[objectid] == 1)
- {
- if(L_SAMMissileStopped[objectid] == false)
- {
- new Float:X, Float:Y, Float:Z;
- GetObjectPos(objectid, X, Y, Z);
- switch(L_SAMMissilePower[objectid])
- {
- case SAM_POWER_LOW: CreateExplosion(X+4.0, Y+4.0, Z, 2, 12.0);
- case SAM_POWER_NORMAL: CreateExplosion(X+6.0, Y+6.0, Z, 6, 10.0);
- case SAM_POWER_HIGH:
- {
- CreateExplosion(X+8.0,Y, Z, 7, 10.0);
- CreateExplosion(X-8.0,Y, Z, 7, 10.0);
- CreateExplosion(X, Y+8.0,Z, 7, 10.0);
- CreateExplosion(X, Y-8.0,Z, 7, 10.0);
- }
- case SAM_POWER_BEST:
- {
- new Float:range = 8.0;
- CreateExplosion(X+range,Y, Z, 6, 10.0);
- CreateExplosion(X-range,Y, Z, 6, 10.0);
- CreateExplosion(X, Y+range,Z, 6, 10.0);
- CreateExplosion(X, Y-range,Z, 6, 10.0);
- CreateExplosion(X+range,Y+range,Z, 6, 10.0);
- CreateExplosion(X-range,Y+range,Z, 6, 10.0);
- CreateExplosion(X-range,Y-range,Z, 6, 10.0);
- }
- }
- if(IsPlayerConnected(L_SAMMissileProgress[objectid]) && L_SAMFollowStopped[L_SAMMissileProgress[objectid]] == false)
- CallLocalFunction("OnSAMMissileHitPlayer", "ii", L_SAMMissileProgress[objectid], L_SAMMissileSAMID[objectid]);
- DestroyObject(objectid);
- #if defined L_SAMUSE_SMOKES
- DestroyObject(L_SAMMissileSmoke[objectid]);
- #endif
- L_SAMMissileObject[objectid] = 0;
- L_SAMMissilePower[objectid] = 0;
- L_SAMMissileSAMID[objectid] = -1;
- MissileInProgress[L_SAMMissileProgress[objectid]] = false;
- L_SAMMissileProgress[objectid] = -1;
- }
- }
- CallLocalFunction("L_SAM_OnObjMoved", "i", objectid);
- return 1;
- }
- forward OnSAMMissileLaunch(playerid, samid);
- forward OnSAMMissileHitPlayer(playerid, samid);
- public OnSAMMissileHitPlayer(playerid, samid)
- {
- foreach(new i: Player)
- {
- if(GetPlayerVehicleID(i) != GetPlayerVehicleID(playerid)) continue;
- if(PlayerInfo[i][pAdmin] > 1) continue;
- SetPlayerHealth(i, 0); // make sure the players inside the vehicle are dead, since the explosion doesn't kill you since you're in a vehicle.
- MissileWarning[i] = -1;
- }
- return 1;
- }
- #if defined _ALS_OnObjectMoved
- #undef OnObjectMoved
- #else
- #define _ALS_OnObjectMoved
- #endif
- forward L_SAM_OnObjMoved(objectid);
- public OnPlayerConnect(playerid)
- {
- for(new i; i< MAX_LSAMS; i++) L_SAM_ExceptionalPlayer[playerid][i] = false;
- CallLocalFunction("L_SAM_OPC", "i", playerid);
- MissileWarning[playerid] = -1;
- return 1;
- }
- #if defined _ALS_OnPlayerConnect
- #undef OnPlayerConnect
- #else
- #define _ALS_OnPlayerConnect
- #endif
- forward L_SAM_OPC(playerid);
- public OnPlayerSpawn(playerid)
- {
- if(MissileInProgress[playerid] == true)
- {
- L_SAMMissileStopped[PlayerMissile[playerid]] = false;
- CallLocalFunction("OnObjectMoved", "i", PlayerMissile[playerid]);
- }
- CallLocalFunction("L_SAM_OPS", "i", playerid);
- return 1;
- }
- #if defined _ALS_OnPlayerSpawn
- #undef OnPlayerSpawn
- #else
- #define _ALS_OnPlayerSpawn
- #endif
- forward L_SAM_OPS(playerid);
- #define OnObjectMoved L_SAM_OnObjMoved
- #define OnGameModeInit L_SAM_OnGM
- #define OnGameModeExit L_SAM_OnGMExit
- #define OnPlayerConnect L_SAM_OPC
- #define OnPlayerSpawn L_SAM_OPS
- CMD:authorizeaircraft(playerid, params[])
- {
- if(PlayerInfo[playerid][pMember] != FACTION_SANG) return AdmErrorMsg;
- new vehid;
- if(sscanf(params, "d", vehid)) return SendClientMessage(playerid, -1, "{00BFFF}Usage:{FFFFFF} /authorizeaircraft [vehicleID]");
- if(vehid == INVALID_VEHICLE_ID) return SendClientMessage(playerid, COLOR_GREY, "Invalid vehicle ID.");
- if(!IsAHelicopter(vehid) && !IsAPlane(vehid)) return SendClientMessage(playerid, COLOR_GREY, "That vehicle is not an aircraft.");
- vehMissileAuthorized[vehid] = !vehMissileAuthorized[vehid];
- new msg[128];
- if(vehMissileAuthorized[vehid])
- {
- format(msg, sizeof(msg), "%s has authorized aircraft #%d (%s)", PlayerICName(playerid), vehid, GetVehicleFriendlyName(vehid));
- SendRadioMessage(FACTION_SANG, COLOR_SANG, msg);
- }
- else
- {
- format(msg, sizeof(msg), "%s has unauthorized aircraft #%d (%s)", PlayerICName(playerid), vehid, GetVehicleFriendlyName(vehid));
- SendRadioMessage(FACTION_SANG, COLOR_SANG, msg);
- }
- return 1;
- }
|