| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- /*
- /$$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$$
- | $$$ | $$ /$$__ $$ | $$__ $$| $$__ $$
- | $$$$| $$| $$ \__/ | $$ \ $$| $$ \ $$
- | $$ $$ $$| $$ /$$$$ /$$$$$$| $$$$$$$/| $$$$$$$/
- | $$ $$$$| $$|_ $$|______/| $$__ $$| $$____/
- | $$\ $$$| $$ \ $$ | $$ \ $$| $$
- | $$ \ $$| $$$$$$/ | $$ | $$| $$
- |__/ \__/ \______/ |__/ |__/|__/
- Fire System
- Next Generation Gaming, LLC
- (created by Next Generation Gaming Development Team)
-
- * Copyright (c) 2016, Next Generation Gaming, LLC
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are not permitted in any case.
- *
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #include <YSI\y_hooks>
- #define MAX_FIRES 100
- #define MAX_FIRE_HEALTH 1000
- #define MAX_FIRE_AREAS 3
- #define MAX_FIRE_TYPES 3
- #define DEFAULT_FDSA_REQUIRED 1
- new iGlobalZoneAreas[MAX_FIRE_AREAS];
- new Float:fire_fRandomLocations[10][3] = {
-
- {1381.2661, -1088.7556, 27.3906},
- {823.4922, -1102.9449, 25.7891},
- {1112.0642, -1370.0339, 13.9844},
- {1789.2281, -1384.4358, 15.7578},
- {2101.0112, -1359.6780, 23.9844},
- {2351.9951, -1419.2737, 24.0000},
- {2151.0457, -1808.0161, 13.5464},
- {2326.3098, -1897.3530, 13.6172},
- {2357.0618, -1990.4791, 13.5469},
- {1730.1848, -2335.4980, 13.5469}
- };
- /*
- task FireTask[60000]() { // 300000
- new iFDSAOnline;
- foreach(new i: Player) {
- if(IsAMedic(i)) iFDSAOnline++;
- }
- if(iFDSAOnline >= DEFAULT_FDSA_REQUIRED) {
-
- if(random(100) < 10) CreateTypeFire(random(MAX_FIRE_TYPES));
- }
- }
- */
- hook OnGameModeInit() {
- iGlobalZoneAreas[0] = CreateDynamicRectangle(gMainZones[0][SAZONE_AREA][0], gMainZones[0][SAZONE_AREA][1], gMainZones[0][SAZONE_AREA][3], gMainZones[0][SAZONE_AREA][4]); // Los Santos
- iGlobalZoneAreas[1] = CreateDynamicRectangle(gMainZones[6][SAZONE_AREA][0], gMainZones[6][SAZONE_AREA][1], gMainZones[6][SAZONE_AREA][3], gMainZones[6][SAZONE_AREA][4]); // Red County
- iGlobalZoneAreas[2] = CreateDynamicRectangle(gMainZones[7][SAZONE_AREA][0], gMainZones[7][SAZONE_AREA][1], gMainZones[7][SAZONE_AREA][3], gMainZones[7][SAZONE_AREA][4]); // Flint County
- }
- hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
- if(arrAntiCheat[playerid][ac_iFlags][AC_DIALOGSPOOFING] > 0) return 1;
- switch(dialogid) {
- case DIALOG_FIRES: {
- SetPlayerPos(playerid, arrFires[ListItemTrackId[playerid][listitem]][fire_fPos][0],
- arrFires[ListItemTrackId[playerid][listitem]][fire_fPos][1], arrFires[ListItemTrackId[playerid][listitem]][fire_fPos][2]);
- }
- }
- return 0;
- }
- stock CreateTypeFire(iTypeID) {
- new iTargetID;
- switch(iTypeID) {
- case 0: { // Houses
- iTargetID = Fire_GetRandomValidID(iTypeID);
- if(iTargetID != -1) {
- new szLocation[MAX_ZONE_NAME];
- CreateStructureFire(HouseInfo[iTargetID][hExteriorX], HouseInfo[iTargetID][hExteriorY], HouseInfo[iTargetID][hExteriorZ], HouseInfo[iTargetID][hExtVW]);
- CreateStructureFire(HouseInfo[iTargetID][hInteriorX], HouseInfo[iTargetID][hInteriorY], HouseInfo[iTargetID][hInteriorZ], HouseInfo[iTargetID][hIntVW]);
- arrFires[iTargetID][fire_iTypeID] = iTypeID;
- Get3DZone(HouseInfo[iTargetID][hExteriorX], HouseInfo[iTargetID][hExteriorY], HouseInfo[iTargetID][hExteriorZ], szLocation, sizeof(szLocation));
- format(szMiscArray, sizeof(szMiscArray), "** There was a fire reported somewhere in %s.", szLocation);
- SendGroupMessage(GROUP_TYPE_MEDIC, COLOR_LIGHTRED, szMiscArray);
- }
- }
- case 1: { // Businesses
- iTargetID = Fire_GetRandomValidID(iTypeID);
- if(iTargetID != -1) {
- new szLocation[MAX_ZONE_NAME];
- CreateStructureFire(Businesses[iTargetID][bExtPos][0], Businesses[iTargetID][bExtPos][1], Businesses[iTargetID][bExtPos][2], 0);
- CreateStructureFire(Businesses[iTargetID][bIntPos][0], Businesses[iTargetID][bIntPos][1], Businesses[iTargetID][bIntPos][2], Businesses[iTargetID][bVW]);
- arrFires[iTargetID][fire_iTypeID] = iTypeID;
- Get3DZone(Businesses[iTargetID][bExtPos][0], Businesses[iTargetID][bExtPos][1], Businesses[iTargetID][bExtPos][2], szLocation, sizeof(szLocation));
- format(szMiscArray, sizeof(szMiscArray), "** There was a fire reported somewhere in %s.", szLocation);
- SendGroupMessage(GROUP_TYPE_MEDIC, COLOR_LIGHTRED, szMiscArray);
- }
- }
- case 2: { // Random
- new szLocation[MAX_ZONE_NAME];
- iTargetID = random(sizeof(fire_fRandomLocations));
- CreateStructureFire(fire_fRandomLocations[iTargetID][0], fire_fRandomLocations[iTargetID][1], fire_fRandomLocations[iTargetID][2], 0);
- arrFires[iTargetID][fire_iTypeID] = iTypeID;
- Get3DZone(fire_fRandomLocations[iTargetID][0], fire_fRandomLocations[iTargetID][1], fire_fRandomLocations[iTargetID][2], szLocation, sizeof(szLocation));
- format(szMiscArray, sizeof(szMiscArray), "** There was a fire reported somewhere in %s.", szLocation);
- SendGroupMessage(GROUP_TYPE_MEDIC, COLOR_LIGHTRED, szMiscArray);
- }
- }
- }
- stock Fire_GetRandomValidID(iTypeID) {
- new iCheckID,
- iTargetID = -1,
- iZoneArea = random(MAX_FIRE_AREAS),
- iAttempts;
- switch(iTypeID) {
- case 0: {
- while(iCheckID != iTargetID) {
- iTargetID = random(MAX_HOUSES);
- if(HouseInfo[iTargetID][hExteriorX] != 0.0 && HouseInfo[iTargetID][hExteriorZ] < 100 && IsPointInDynamicArea(iGlobalZoneAreas[iZoneArea], HouseInfo[iTargetID][hExteriorX], HouseInfo[iTargetID][hExteriorY], HouseInfo[iTargetID][hExteriorZ])) {
- iCheckID = iTargetID;
- }
- iAttempts++;
- if(iAttempts >= MAX_HOUSES) break;
- }
- }
- case 1: {
- while(iCheckID != iTargetID) {
- iTargetID = random(MAX_BUSINESSES);
- if(Businesses[iTargetID][bExtPos][0] != 0.0 && HouseInfo[iTargetID][hExteriorZ] < 100 && IsPointInDynamicArea(iGlobalZoneAreas[iZoneArea], Businesses[iTargetID][bExtPos][0], Businesses[iTargetID][bExtPos][1], Businesses[iTargetID][bExtPos][2])) {
-
- iCheckID = iTargetID;
- }
- iAttempts++;
- if(iAttempts >= MAX_BUSINESSES) break;
- }
- }
- }
- return iTargetID;
- }
- CreateStructureFire(Float:FirePosX, Float:FirePosY, Float:FirePosZ, VW) {
- if(iServerFires < MAX_FIRES) {
- new next = GetAvailableFireSlot();
- arrFires[next][fire_iObjectID] = CreateDynamicObject(18691, FirePosX, FirePosY, FirePosZ - 1.5, 0,0,0, VW, .streamdistance = 300);
- arrFires[next][fire_iAreaID] = CreateDynamicSphere(FirePosX, FirePosY, FirePosZ, 3.0, VW);
- arrFires[next][fire_fPos][0] = FirePosX;
- arrFires[next][fire_fPos][1] = FirePosY;
- arrFires[next][fire_fPos][2] = FirePosZ;
- // Streamer_SetIntData(STREAMER_TYPE_OBJECT, arrFires[next][fire_iObjectID], E_STREAMER_EXTRA_ID, next);
- Streamer_SetIntData(STREAMER_TYPE_AREA, arrFires[next][fire_iAreaID], E_STREAMER_EXTRA_ID, next);
-
- arrFires[next][fire_iHealth] = MAX_FIRE_HEALTH;
- format(szMiscArray, sizeof(szMiscArray), "%d/%d\nID%d", arrFires[next][fire_iHealth], MAX_FIRE_HEALTH, next);
- arrFires[next][fire_iTextID] = CreateDynamic3DTextLabel(szMiscArray, 0xFFFFFFFFF, FirePosX, FirePosY, FirePosZ, 20, .worldid = VW);
- ++iServerFires;
- }
- }
- DeleteStructureFire(iFireID) {
- if(!IsValidDynamicObject(arrFires[iFireID][fire_iObjectID])) return 1;
- else DestroyDynamicObject(arrFires[iFireID][fire_iObjectID]), arrFires[iFireID][fire_iObjectID] = -1;
- if(IsValidDynamic3DTextLabel(arrFires[iFireID][fire_iTextID])) DestroyDynamic3DTextLabel(arrFires[iFireID][fire_iTextID]), arrFires[iFireID][fire_iTextID] = Text3D:-1;
- if(IsValidDynamicArea(arrFires[iFireID][fire_iAreaID])) DestroyDynamicArea(arrFires[iFireID][fire_iAreaID]);
- if(iServerFires) --iServerFires;
- return 1;
- }
- IsValidStructureFire(iFireID) {
- if(IsValidDynamicObject(arrFires[iFireID][fire_iObjectID])) return true;
- else return false;
- }
- GetAvailableFireSlot() {
- for(new i; i < MAX_FIRES; i++) {
- if(!IsValidDynamicObject(arrFires[i][fire_iObjectID])) return i;
- }
- return -1;
- }
- GetFireType(iTypeID) {
- new szResult[32];
- switch(iTypeID) {
- case 0: szResult = "House Fire";
- case 1: szResult = "Business Fire";
- case 2: szResult = "Random Fire";
- default: szResult = "Admin Fire";
- }
- return szResult;
- }
- hook OnPlayerUpdate(playerid) {
- new newkeys, dir1, dir2;
- GetPlayerKeys(playerid, newkeys, dir1, dir2);
-
- if(ActiveKey(KEY_FIRE)) {
- if(GetPlayerWeapon(playerid) == WEAPON_FIREEXTINGUISHER) {
- new n;
- for(n = 0; n < MAX_FIRES; n++) {
- if(IsValidStructureFire(n)) {
- if(IsPlayerAimingAt(playerid, arrFires[n][fire_fPos][0], arrFires[n][fire_fPos][1], arrFires[n][fire_fPos][2], 1) \
- && IsPlayerInRangeOfPoint(playerid, 4, arrFires[n][fire_fPos][0], arrFires[n][fire_fPos][1], arrFires[n][fire_fPos][2])) {
- arrFires[n][fire_iHealth] -=2;
- format(szMiscArray, sizeof(szMiscArray), "%d/%d\nID%d", arrFires[n][fire_iHealth], MAX_FIRE_HEALTH, n);
- UpdateDynamic3DTextLabelText(arrFires[n][fire_iTextID], 0xFFFFFFFF, szMiscArray);
- if(arrFires[n][fire_iHealth] <=0) {
- DeleteStructureFire(n);
- }
- }
- }
- }
- }
- if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 407 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 601) {
- new n;
- for(n = 0; n < MAX_FIRES; n++) {
- if(IsValidStructureFire(n)) {
- if(IsPlayerAimingAt(playerid, arrFires[n][fire_fPos][0], arrFires[n][fire_fPos][1], arrFires[n][fire_fPos][2], 3) \
- && IsPlayerInRangeOfPoint(playerid, 20, arrFires[n][fire_fPos][0], arrFires[n][fire_fPos][1], arrFires[n][fire_fPos][2])) {
- arrFires[n][fire_iHealth] -=5;
- format(szMiscArray, sizeof(szMiscArray), "%d/%d\nID%d", arrFires[n][fire_iHealth], MAX_FIRE_HEALTH, n);
- UpdateDynamic3DTextLabelText(arrFires[n][fire_iTextID], 0xFFFFFFFF, szMiscArray);
- if(arrFires[n][fire_iHealth] <=0)
- {
- DeleteStructureFire(n);
- }
- }
- }
- }
- }
- }
- return 1;
- }
- hook OnPlayerEnterDynamicArea(playerid, areaid) {
- new i = Streamer_GetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID);
- if(0 <= i < MAX_FIRES) {
- if(arrFires[i][fire_iAreaID] == areaid) OnEnterFire(playerid, i);
- }
- return 1;
- }
- hook OnPlayerLeaveDynamicArea(playerid, areaid) {
- new i = Streamer_GetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID);
- if(0 <= i < MAX_FIRES) {
- if(arrFires[i][fire_iAreaID] == areaid) DeletePVar(playerid, "pInFire");
- }
- return 1;
- }
- forward OnEnterFire(i, fireid);
- public OnEnterFire(i, fireid) {
- new
- Float:oX, Float:oY, Float:oZ;
-
- if(GetPVarType(i, "pGodMode")) return 1;
- if(IsValidStructureFire(fireid)) {
- if(!GetPVarType(i, "pInFire")) SetTimerEx("Fire_HealthTimer", 1000, false, "i", i);
- SetPVarInt(i, "pInFire", 1);
- }
- return 1;
- }
- forward Fire_HealthTimer(playerid);
- public Fire_HealthTimer(playerid) {
- new Float:ftempHP;
- GetHealth(playerid, ftempHP);
- if(GetPlayerSkin(playerid) == 277 || GetPlayerSkin(playerid) == 278 || GetPlayerSkin(playerid) == 279) SetHealth(playerid, ftempHP - 5);
- else SetHealth(playerid, ftempHP - 20);
- if(GetPVarType(playerid, "pInFire")) SetTimerEx("Fire_HealthTimer", 1000, false, "i", playerid);
- return 1;
- }
- CMD:fires(playerid, params[]) {
- if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1 && PlayerInfo[playerid][pGangModerator] < 1 && PlayerInfo[playerid][pFactionModerator] < 1) return 1;
- if(GetPVarInt(playerid, "FireStart") != 1) {
- SetPVarInt(playerid, "FireStart", 1);
- SendClientMessageEx(playerid, COLOR_GREY, "You are now in fire creation mode");
- SendClientMessageEx(playerid, COLOR_GREY, "Please use a weapon and shoot whereever you wish to create a fire");
- }
- else {
- SendClientMessageEx(playerid, COLOR_GREY, "You have exited fire creation mode and are no longer able to create fires");
- DeletePVar(playerid, "FireStart");
- }
- return 1;
- }
- CMD:destroyfire(playerid, params[]) {
- if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1 && PlayerInfo[playerid][pGangModerator] < 1 && PlayerInfo[playerid][pFactionModerator] < 1) return 1;
- new fire;
- if(sscanf(params, "d", fire)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /destroyfire [fireid]");
- if(!(0 <= fire <= MAX_FIRES)) return SendClientMessageEx(playerid, COLOR_GREY, "Invalid Fire ID!");
- DeleteStructureFire(fire);
- return 1;
- }
- CMD:destroyfires(playerid, params[]) {
- if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1 && PlayerInfo[playerid][pGangModerator] < 2 && PlayerInfo[playerid][pFactionModerator] < 2) return 1;
- for(new i; i < MAX_FIRES; i++) {
- DeleteStructureFire(i);
- }
- SendClientMessageEx(playerid, COLOR_GRAD1, "You removed all the server's fires.");
- return 1;
- }
- CMD:gotofire(playerid, params[]) {
- if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1 && PlayerInfo[playerid][pGangModerator] < 1 && PlayerInfo[playerid][pFactionModerator] < 1) return 1;
- new fire,
- Float:fPos[3];
- if(sscanf(params, "d", fire)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /gotofire [fireid]");
- if(!(0 <= fire <= MAX_FIRES)) return SendClientMessageEx(playerid, COLOR_GREY, "Invalid Fire ID!");
- if(!IsValidStructureFire(fire)) return SendClientMessageEx(playerid, COLOR_GREY, "Fire has not been created!");
- GetDynamicObjectPos(arrFires[fire][fire_iObjectID], fPos[0], fPos[1], fPos[2]);
- SetPlayerPos(playerid, fPos[0], fPos[1], fPos[2]);
- return 1;
- }
- CMD:setfstrength(playerid, params[]) {
- if(PlayerInfo[playerid][pAdmin] < 4 && PlayerInfo[playerid][pASM] < 1 && PlayerInfo[playerid][pGangModerator] < 1 && PlayerInfo[playerid][pFactionModerator] < 1) return 1;
- new fire, strength;
- if(sscanf(params, "dd", fire, strength)) return SendClientMessageEx(playerid, COLOR_GREY, "USAGE: /setfstrength [fireid] [strength]");
- if(!(0 <= fire <= MAX_FIRES)) return SendClientMessageEx(playerid, COLOR_GREY, "Invalid Fire ID!");
- if(!IsValidStructureFire(fire)) return SendClientMessageEx(playerid, COLOR_GREY, "Fire has not been created!");
- arrFires[fire][fire_iHealth] = strength;
- return 1;
- }
- CMD:viewfires(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_GENERAL, 1)) return 1;
- new x,
- szLocation[MAX_ZONE_NAME];
- szMiscArray[0] = 0;
- for(new i; i < iServerFires; ++i) {
- if(IsValidDynamicObject(arrFires[i][fire_iObjectID])) {
-
- Get3DZone(arrFires[i][fire_fPos][0], arrFires[i][fire_fPos][1], arrFires[i][fire_fPos][2], szLocation, sizeof(szLocation));
- format(szMiscArray, sizeof(szMiscArray), "%s\nFire %d | Strength: %d | Type: %s | Location: %s", szMiscArray,
- i, arrFires[i][fire_iHealth], GetFireType(arrFires[i][fire_iTypeID]), szLocation);
- ListItemTrackId[playerid][x] = i;
- x++;
- }
- }
- if(!x) SendClientMessageEx(playerid, COLOR_GRAD1, "There are no fires.");
- else ShowPlayerDialogEx(playerid, DIALOG_FIRES, DIALOG_STYLE_LIST, "Fires", szMiscArray, "Teleport", "Cancel");
- return 1;
- }
|