diff --git a/gamemodes/irresistible/cnr/features/_features.pwn b/gamemodes/irresistible/cnr/features/_features.pwn index d72904c..0268b1c 100644 --- a/gamemodes/irresistible/cnr/features/_features.pwn +++ b/gamemodes/irresistible/cnr/features/_features.pwn @@ -36,6 +36,7 @@ #include "irresistible\cnr\features\bribes.pwn" #include "irresistible\cnr\features\info_pickups.pwn" #include "irresistible\cnr\features\crime_reports.pwn" +#include "irresistible\cnr\features\fires.pwn" // disabled // #include "irresistible\cnr\features\eastereggs.pwn" diff --git a/gamemodes/irresistible/cnr/features/fires.pwn b/gamemodes/irresistible/cnr/features/fires.pwn new file mode 100644 index 0000000..dea8bc7 --- /dev/null +++ b/gamemodes/irresistible/cnr/features/fires.pwn @@ -0,0 +1,226 @@ +/* + * Irresistible Gaming (c) 2018 + * Developed by Lorenc Pekaj + * Module: cnr\features\fires.pwn + * Purpose: extinguishable fire system + */ + +/* ** Includes ** */ +#include < YSI\y_hooks > + +/* ** Definitions ** */ +#define MAX_FIRES ( 10 ) + +/* ** Variables ** */ +enum E_FIRE_DATA +{ + bool: E_CREATED, E_OBJECT, Float: E_HEALTH, + E_HOUSE, Text3D: E_LABEL +}; + +static stock + g_fireData [ MAX_FIRES ] [ E_FIRE_DATA ], + p_FireDistanceTimer [ MAX_PLAYERS ] = { -1, ... }, + bool: fire_toggled = false +; + +/* ** Forwards ** */ +forward OnPlayerTakeOutFire ( playerid, fireid ); + +/* ** Hooks ** */ +hook OnPlayerDisconnect( playerid, reason ) +{ + StopPlayerFireTracker( playerid ); + return 1; +} + +#if defined AC_INCLUDED +hook OnPlayerDeathEx( playerid, killerid, reason, Float: damage, bodypart ) +#else +hook OnPlayerDeath( playerid, killerid, reason ) +#endif +{ + StopPlayerFireTracker( playerid ); + return 1; +} + +hook OnPlayerUpdateEx( playerid ) +{ + new + iKeys; + + GetPlayerKeys( playerid, iKeys, tmpVariable, tmpVariable ); + + // Taking Out Fires + if ( p_Class[ playerid ] == CLASS_FIREMAN && ( iKeys & KEY_FIRE ) || ( iKeys & KEY_WALK ) ) + { + new + iVehicle = GetPlayerVehicleID( playerid ); + + if ( GetPlayerWeapon( playerid ) == 42 || GetVehicleModel( iVehicle ) == 407 ) + { + for( new i = 0; i < sizeof( g_fireData ); i ++ ) if ( g_fireData[ i ] [ E_CREATED ] ) + { + static + Float: fX, Float: fY, Float: fZ; + + if ( GetDynamicObjectPos( g_fireData[ i ] [ E_OBJECT ], fX, fY, fZ ) ) + { + fZ += 2.3; + + if ( IsPlayerInRangeOfPoint( playerid, ( GetVehicleModel( iVehicle ) == 407 ? 25.0 : 10.0 ), fX, fY, fZ ) ) + { + if ( IsPlayerAimingAt( playerid, fX, fY, fZ, ( GetVehicleModel( iVehicle ) == 407 ? 3.0 : 1.0 ) ) ) + { + if ( g_fireData[ i ] [ E_HEALTH ] > 0.0 ) + { + if ( ( g_fireData[ i ] [ E_HEALTH ] -= GetVehicleModel( iVehicle ) == 407 ? ( 2.85 + fRandomEx( 1.0, 5.0 ) ) : ( 1.25 + fRandomEx( 1.0, 5.0 ) ) ) < 0.0 ) + g_fireData[ i ] [ E_HEALTH ] = 0.0; + + UpdateDynamic3DTextLabelText( g_fireData[ i ] [ E_LABEL ], COLOR_YELLOW, sprintf( "%0.1f", g_fireData[ i ] [ E_HEALTH ] ) ); + } + else + { + ach_HandleExtinguishedFires( playerid ); + SendClientMessageToFireman( -1, "{A83434}[FIREMAN]{FFFFFF} %s(%d) has extinguished house fire %d.", ReturnPlayerName( playerid ), playerid, i ); + GivePlayerScore( playerid, 2 ); + //GivePlayerExperience( playerid, E_FIREMAN ); + GivePlayerCash( playerid, 5000 ); + + g_fireData[ i ] [ E_CREATED ] = false; + g_fireData[ i ] [ E_HOUSE ] = -1; + DestroyDynamicObject( g_fireData[ i ] [ E_OBJECT ] ); + g_fireData[ i ] [ E_OBJECT ] = INVALID_OBJECT_ID; + DestroyDynamic3DTextLabel( g_fireData[ i ] [ E_LABEL ] ); + g_fireData[ i ] [ E_LABEL ] = Text3D: INVALID_3DTEXT_ID; + g_fireData[ i ] [ E_HEALTH ] = 0.0; + UpdateDynamic3DTextLabelText( g_fireData[ i ] [ E_LABEL ], COLOR_YELLOW, sprintf( "%0.1f", g_fireData[ i ] [ E_HEALTH ] ) ); + } + break; + } + } + } + } + } + } + return 1; +} + +/* ** Commands ** */ +CMD:firetracker( playerid, params[ ] ) +{ + if ( p_Class[ playerid ] != CLASS_FIREMAN ) + return SendError( playerid, "You are not a fireman." ); + + if ( p_FireDistanceTimer[ playerid ] != -1 ) + return StopPlayerFireTracker( playerid ), SendServerMessage( playerid, "You have turned off your fire tracker." ); + + KillTimer( p_FireDistanceTimer[ playerid ] ); + p_FireDistanceTimer[ playerid ] = SetTimerEx( "OnPlayerFireDistanceUpdate", 1000, true, "d", playerid ); + SendServerMessage( playerid, "Find the fires and extinguish them." ); + return 1; +} + +stock StopPlayerFireTracker( playerid ) +{ + KillTimer( p_FireDistanceTimer[ playerid ] ); + p_FireDistanceTimer[ playerid ] = -1; + + PlayerTextDrawHide( playerid, p_FireDistance1[ playerid ] ); + PlayerTextDrawHide( playerid, p_FireDistance2[ playerid ] ); + return 1; +} + +/* ** Functions ** */ +stock CreateFire( ) +{ + if ( fire_toggled ) + { + for ( new i = 0; i < sizeof( g_fireData ); i ++ ) if ( g_fireData[ i ] [ E_CREATED ] == true ) + { + g_fireData[ i ] [ E_CREATED ] = false; + g_fireData[ i ] [ E_HOUSE ] = -1; + DestroyDynamicObject( g_fireData[ i ] [ E_OBJECT ] ); + g_fireData[ i ] [ E_OBJECT ] = INVALID_OBJECT_ID; + DestroyDynamic3DTextLabel( g_fireData[ i ] [ E_LABEL ] ); + g_fireData[ i ] [ E_LABEL ] = Text3D: INVALID_3DTEXT_ID; + } + + fire_toggled = false; + CreateFire( ); + } + else + { + static + Float: X, Float: Y, Float: Z; + + for ( new i = 0; i < sizeof( g_fireData ); i ++ ) + { + new + house = GetRandomCreatedHouse( ); + + if ( Iter_Contains( houses, house ) ) + { + GetHousePos( house, X, Y, Z ); + g_fireData[ i ] [ E_HEALTH ] = 100.0 + fRandomEx( 1, 25 ); + g_fireData[ i ] [ E_HOUSE ] = house; + g_fireData[ i ] [ E_CREATED ] = true; + g_fireData[ i ] [ E_LABEL ] = CreateDynamic3DTextLabel( sprintf( "%0.1f", g_fireData[ i ] [ E_HEALTH ] ), COLOR_YELLOW, X, Y, Z + 0.5, 20.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1 ); + g_fireData[ i ] [ E_OBJECT ] = CreateDynamicObject( 18691, X, Y, Z - 2.3, 0.0, 0.0, 0.0 ); + } + } + fire_toggled = true; + } + return 1; +} + +stock IsHouseOnFire( houseid ) +{ + if ( houseid < 0 || houseid > MAX_HOUSES ) + return 0; + + if ( ! Iter_Contains( houses, houseid ) ) + return 0; + + for( new i, Float: X, Float: Y, Float: Z; i < sizeof( g_fireData ); i++ ) + { + if ( g_fireData[ i ] [ E_CREATED ] ) + { + GetDynamicObjectPos( g_fireData[ i ] [ E_OBJECT ], X, Y, Z ); // Z is unused due to the object. + if ( g_houseData[ houseid ] [ E_EX ] == X && g_houseData[ houseid ] [ E_EY ] == Y ) + { + return 1; + } + } + } + return 0; +} + +function OnPlayerFireDistanceUpdate( playerid ) +{ + new + Float: X, Float: Y, Float: Z, Float: dis, + szFire1[ 128 ], szFire2[ 128 ] + ; + + for( new i; i < sizeof( g_fireData ); i++ ) + { + GetDynamicObjectPos( g_fireData[ i ] [ E_OBJECT ], X, Y, Z ); + dis = GetPlayerDistanceFromPoint( playerid, X, Y, Z ); + if ( i < floatround( sizeof( g_fireData ) / 2 ) ) + { + if ( g_fireData[ i ] [ E_CREATED ] == false ) format( szFire1, sizeof( szFire1 ), "%s~r~FIRE %d:%s ~g~Stopped~n~", szFire1, i,i==1?(" "):("") ); + else format( szFire1, sizeof( szFire1 ), "%s~r~FIRE %d:%s~w~ %0.0f m~n~", szFire1, i,i==1?("_"):(""), dis ); + } + else + { + if ( g_fireData[ i ] [ E_CREATED ] == false ) format( szFire2, sizeof( szFire2 ), "%s~r~FIRE %d:%s ~g~Stopped~n~", szFire2, i,i==1?(" "):("") ); + else format( szFire2, sizeof( szFire2 ), "%s~r~FIRE %d:%s~w~ %0.0f m~n~", szFire2, i,i==1?("_"):(""), dis ); + } + } + PlayerTextDrawSetString( playerid, p_FireDistance1[ playerid ], szFire1 ); + PlayerTextDrawSetString( playerid, p_FireDistance2[ playerid ], szFire2 ); + PlayerTextDrawShow( playerid, p_FireDistance1[ playerid ] ); + PlayerTextDrawShow( playerid, p_FireDistance2[ playerid ] ); + return 1; +} diff --git a/gamemodes/irresistible/cnr/player.pwn b/gamemodes/irresistible/cnr/player.pwn index 3563085..eb7ecaf 100644 --- a/gamemodes/irresistible/cnr/player.pwn +++ b/gamemodes/irresistible/cnr/player.pwn @@ -88,7 +88,6 @@ new bool: p_MoneyBag [ MAX_PLAYERS char ], p_CopBanned [ MAX_PLAYERS char ], p_AntiEMP [ MAX_PLAYERS ], - p_FireDistanceTimer [ MAX_PLAYERS ] = { 0xFF, ... }, p_Warns [ MAX_PLAYERS ], p_Wood [ MAX_PLAYERS ], p_LumberjackDeliver [ MAX_PLAYERS ] = { 0xFFFF, ... }, diff --git a/gamemodes/sf-cnr.pwn b/gamemodes/sf-cnr.pwn index 529fa6e..dcec8b4 100644 --- a/gamemodes/sf-cnr.pwn +++ b/gamemodes/sf-cnr.pwn @@ -70,8 +70,6 @@ new bool: False = false; #define IsPlayerNpcEx(%0) (IsPlayerNPC(%0) || strmatch(p_PlayerIP[%0], "127.0.0.1")) /* Beast Functions */ -#define SendClientMessageToFireman(%1,%2,%3) \ - do{foreach(new fI : Player){if (p_Class[fI]==CLASS_FIREMAN)format(szNormalString,sizeof(szNormalString),(%2),%3),SendClientMessage(fI,(%1),szNormalString);}}while(False) #define SendClientMessageToVips(%1,%2,%3) \ do{foreach(new fI : Player){if (p_VIPLevel[fI]>=VIP_REGULAR)format(szNormalString,sizeof(szNormalString),(%2),%3),SendClientMessage(fI,(%1),szNormalString);}}while(False) #define SendClientMessageToAmbulance(%1,%2,%3) \ @@ -153,20 +151,6 @@ new Iterator:gates ; -/* ** Fire System ** */ -enum E_FIRE_DATA -{ - bool: E_CREATED, E_OBJECT, Float: E_HEALTH, - E_HOUSE, Text3D: E_LABEL -}; - -new - g_fireData [ 10 ] [ E_FIRE_DATA ], - bool: fire_toggled = false -; - -public OnPlayerTakeOutFire ( playerid, fireid ); - /* ** Weed System ** */ #define MAX_WEED_STORAGE 6 #define MAX_WEED ( 42 ) @@ -794,19 +778,6 @@ public OnGameModeInit() CreateDynamicPickup( 371, 2, 1318.92200, 2002.7311, 1200.250 ); // Parachute @Shamal CreateDynamicPickup( 371, 2, -1745.2754, 59.301500, 866.4556 ); // Parachute @Veloxity - /* ** RDM protection ** - static const - Float: radius = 100.0; - - for( new i = 0; i < sizeof( g_SanFierroSpawns ); i++ ) - CreateNoDeathmatchZone( radius, g_SanFierroSpawns[ i ] [ RANDOM_SPAWN_X ], g_SanFierroSpawns[ i ] [ RANDOM_SPAWN_Y ] ); - - //CreateNoDeathmatchZone( radius, g_FiremanSpawns[ 0 ] [ RANDOM_SPAWN_X ], g_FiremanSpawns[ 0 ] [ RANDOM_SPAWN_Y ] ); - CreateNoDeathmatchZone( radius, g_MedicSpawns[ 0 ] [ RANDOM_SPAWN_X ], g_MedicSpawns[ 0 ] [ RANDOM_SPAWN_Y ] ); - CreateNoDeathmatchZone( radius, g_ArmySpawns[ 0 ] [ RANDOM_SPAWN_X ], g_ArmySpawns[ 0 ] [ RANDOM_SPAWN_Y ] ); - CreateNoDeathmatchZone( radius, g_CIASpawns[ 0 ] [ RANDOM_SPAWN_X ], g_CIASpawns[ 0 ] [ RANDOM_SPAWN_Y ] ); - CreateNoDeathmatchZone( radius, g_PoliceSpawns[ 0 ] [ RANDOM_SPAWN_X ], g_PoliceSpawns[ 0 ] [ RANDOM_SPAWN_Y ] );*/ - /* ** Set everyone offline ** */ mysql_single_query( "UPDATE `USERS` SET `ONLINE` = 0" ); @@ -1108,22 +1079,6 @@ public OnPlayerEditDynamicObject( playerid, objectid, response, Float:x, Float:y return 1; } -public OnPlayerTakeOutFire( playerid, fireid ) -{ - Achievement::HandleExtinguishedFires( playerid ); - SendClientMessageToFireman( -1, "{A83434}[FIREMAN]{FFFFFF} %s(%d) has extinguished house fire %d.", ReturnPlayerName( playerid ), playerid, fireid ); - GivePlayerScore( playerid, 2 ); - //GivePlayerExperience( playerid, E_FIREMAN ); - GivePlayerCash( playerid, 5000 ); - g_fireData[ fireid ] [ E_CREATED ] = false; - g_fireData[ fireid ] [ E_HOUSE ] = -1; - DestroyDynamicObject ( g_fireData[ fireid ] [ E_OBJECT ] ); - g_fireData[ fireid ] [ E_OBJECT ] = INVALID_OBJECT_ID; - DestroyDynamic3DTextLabel ( g_fireData[ fireid ] [ E_LABEL ] ); - g_fireData[ fireid ] [ E_LABEL ] = Text3D: 0xFFFF; - return 1; -} - public OnGameModeExit( ) { KillTimer( rl_ServerUpdate ); @@ -1136,8 +1091,8 @@ public OnGameModeExit( ) public OnServerUpdateTimer( ) { static - iState, iVehicle, iWeapon, iAmmo, iKeys, - Float: fX, Float: fY, Float: fZ, Float: fLastRate + iState, iVehicle, iWeapon, iAmmo, + Float: fLastRate ; // for hooks @@ -1189,8 +1144,6 @@ public OnServerUpdateTimer( ) iWeapon = GetPlayerWeapon( playerid ); iState = GetPlayerState( playerid ); - GetPlayerKeys( playerid, iKeys, tmpVariable, tmpVariable ); - // Generally Updated textdraws PlayerTextDrawSetString( playerid, p_LocationTD[ playerid ], GetPlayerArea( playerid ) ); @@ -1382,42 +1335,6 @@ public OnServerUpdateTimer( ) } } - // Taking Out Fires - if ( p_Class[ playerid ] == CLASS_FIREMAN && ( iKeys & KEY_FIRE ) || ( iKeys & KEY_WALK ) ) - { - if ( iWeapon == 42 || GetVehicleModel( iVehicle ) == 407 ) - { - for( new i; i < sizeof( g_fireData ); i ++ ) if ( g_fireData[ i ] [ E_CREATED ] ) - { - if ( GetDynamicObjectPos( g_fireData[ i ] [ E_OBJECT ], fX, fY, fZ ) ) - { - fZ += 2.3; - - if ( IsPlayerInRangeOfPoint( playerid, ( GetVehicleModel( iVehicle ) == 407 ? 25.0 : 10.0 ), fX, fY, fZ ) ) - { - if ( IsPlayerAimingAt( playerid, fX, fY, fZ, ( GetVehicleModel( iVehicle ) == 407 ? 3.0 : 1.0 ) ) ) - { - if ( g_fireData[ i ] [ E_HEALTH ] > 0.0 ) - { - if ( ( g_fireData[ i ] [ E_HEALTH ] -= GetVehicleModel( iVehicle ) == 407 ? ( 2.85 + fRandomEx( 1.0, 5.0 ) ) : ( 1.25 + fRandomEx( 1.0, 5.0 ) ) ) < 0.0 ) - g_fireData[ i ] [ E_HEALTH ] = 0.0; - - UpdateDynamic3DTextLabelText( g_fireData[ i ] [ E_LABEL ], COLOR_YELLOW, sprintf( "%0.1f", g_fireData[ i ] [ E_HEALTH ] ) ); - } - else - { - g_fireData[ i ] [ E_HEALTH ] = 0.0; - CallLocalFunction( "OnPlayerTakeOutFire", "dd", playerid, i ); - UpdateDynamic3DTextLabelText( g_fireData[ i ] [ E_LABEL ], COLOR_YELLOW, sprintf( "%0.1f", g_fireData[ i ] [ E_HEALTH ] ) ); - } - break; - } - } - } - } - } - } - // Check if the player's VIP has expired CheckPlayerVipExpiry( playerid ); @@ -1852,8 +1769,6 @@ public OnPlayerRequestClass( playerid, classid ) TextDrawHideForPlayer( playerid, g_CurrentRankTD ); TextDrawHideForPlayer( playerid, g_currentXPTD ); TextDrawHideForPlayer( playerid, g_DoubleXPTD ); - KillTimer( p_FireDistanceTimer[ playerid ] ); - p_FireDistanceTimer[ playerid ] = 0xFF; PlayerTextDrawHide( playerid, p_FireDistance1[ playerid ] ); PlayerTextDrawHide( playerid, p_FireDistance2[ playerid ] ); p_MoneyBag{ playerid } = false; @@ -2415,8 +2330,6 @@ public OnPlayerDisconnect( playerid, reason ) //p_CopTutorialProgress{ playerid } = 0; DestroyDynamicRaceCP( p_MiningExport[ playerid ] ); p_MiningExport[ playerid ] = 0xFFFF; - KillTimer( p_FireDistanceTimer[ playerid ] ); - p_FireDistanceTimer[ playerid ] = 0xFF; p_ContractedAmount[ playerid ] = 0; ClearPlayerWantedLevel( playerid ); Delete3DTextLabel( p_InfoLabel[ playerid ] ); @@ -3832,35 +3745,6 @@ function emp_deactivate( vehicleid ) return 1; } -function OnPlayerFireDistanceUpdate( playerid ) -{ - new - Float: X, Float: Y, Float: Z, Float: dis, - szFire1[ 128 ], szFire2[ 128 ] - ; - - for( new i; i < sizeof( g_fireData ); i++ ) - { - GetDynamicObjectPos( g_fireData[ i ] [ E_OBJECT ], X, Y, Z ); - dis = GetPlayerDistanceFromPoint( playerid, X, Y, Z ); - if ( i < floatround( sizeof( g_fireData ) / 2 ) ) - { - if ( g_fireData[ i ] [ E_CREATED ] == false ) format( szFire1, sizeof( szFire1 ), "%s~r~FIRE %d:%s ~g~Stopped~n~", szFire1, i,i==1?(" "):("") ); - else format( szFire1, sizeof( szFire1 ), "%s~r~FIRE %d:%s~w~ %0.0f m~n~", szFire1, i,i==1?("_"):(""), dis ); - } - else - { - if ( g_fireData[ i ] [ E_CREATED ] == false ) format( szFire2, sizeof( szFire2 ), "%s~r~FIRE %d:%s ~g~Stopped~n~", szFire2, i,i==1?(" "):("") ); - else format( szFire2, sizeof( szFire2 ), "%s~r~FIRE %d:%s~w~ %0.0f m~n~", szFire2, i,i==1?("_"):(""), dis ); - } - } - PlayerTextDrawSetString( playerid, p_FireDistance1[ playerid ], szFire1 ); - PlayerTextDrawSetString( playerid, p_FireDistance2[ playerid ], szFire2 ); - PlayerTextDrawShow( playerid, p_FireDistance1[ playerid ] ); - PlayerTextDrawShow( playerid, p_FireDistance2[ playerid ] ); - return 1; -} - public OnPlayerLeaveGang( playerid, gangid, reason ) { switch( reason ) @@ -6245,28 +6129,6 @@ CMD:idof( playerid, params[ ] ) return 1; } -CMD:firetracker( playerid, params[ ] ) -{ - if ( p_Class[ playerid ] != CLASS_FIREMAN ) - return SendError( playerid, "You are not a fireman." ); - - KillTimer( p_FireDistanceTimer[ playerid ] ); - p_FireDistanceTimer[ playerid ] = 0xFF; - p_FireDistanceTimer[ playerid ] = SetTimerEx( "OnPlayerFireDistanceUpdate", 1000, true, "d", playerid ); - SendServerMessage( playerid, "Fire's have been tracked and have been forwarded to you in meters. Find the fires and extinguish them." ); - return 1; -} - -CMD:rfiretracker( playerid, params[ ] ) -{ - KillTimer( p_FireDistanceTimer[ playerid ] ); - p_FireDistanceTimer[ playerid ] = 0xFF; - PlayerTextDrawHide( playerid, p_FireDistance1[ playerid ] ); - PlayerTextDrawHide( playerid, p_FireDistance2[ playerid ] ); - SendServerMessage( playerid, "You have turned off your fire tracker." ); - return 1; -} - CMD:playercolor( playerid, params[ ] ) return cmd_pc( playerid, params ); CMD:pc( playerid, params[ ] ) { @@ -15432,70 +15294,6 @@ stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius) return false; } -stock CreateFire( ) -{ - static string[ 6 ]; - if ( fire_toggled ) - { - for( new i; i < sizeof( g_fireData ); i ++ ) - { - if ( g_fireData[ i ] [ E_CREATED ] == true ) - { - g_fireData[ i ] [ E_CREATED ] = false; - g_fireData[ i ] [ E_HOUSE ] = -1; - DestroyDynamicObject( g_fireData[ i ] [ E_OBJECT ] ); - g_fireData[ i ] [ E_OBJECT ] = INVALID_OBJECT_ID; - DestroyDynamic3DTextLabel( g_fireData[ i ] [ E_LABEL ] ); - g_fireData[ i ] [ E_LABEL ] = Text3D: 0xFFFF; - } - } - fire_toggled = false; - CreateFire( ); - } - else - { - for( new i = 0; i < sizeof( g_fireData ); i ++ ) - { - new - house = GetRandomCreatedHouse( ); - - if ( Iter_Contains( houses, house ) ) - { - g_fireData[ i ] [ E_HEALTH ] = 100.0 + fRandomEx( 1, 25 ); - g_fireData[ i ] [ E_HOUSE ] = house; - g_fireData[ i ] [ E_CREATED ] = true; - format( string, sizeof( string ), "%0.1f", g_fireData[ i ] [ E_HEALTH ] ); - g_fireData[ i ] [ E_LABEL ] = CreateDynamic3DTextLabel( string, COLOR_YELLOW, g_houseData[ house ] [ E_EX ], g_houseData[ house ] [ E_EY ], g_houseData[ house ] [ E_EZ ] + 0.5, 20.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1 ); - g_fireData[ i ] [ E_OBJECT ] = CreateDynamicObject( 18691, g_houseData[ house ] [ E_EX ], g_houseData[ house ] [ E_EY ], g_houseData[ house ] [ E_EZ ] - 2.3, 0.0, 0.0, 0.0 ); - } - } - fire_toggled = true; - } - return 1; -} - -stock IsHouseOnFire( houseid ) -{ - if ( houseid < 0 || houseid > MAX_HOUSES ) - return 0; - - if ( ! Iter_Contains( houses, houseid ) ) - return 0; - - for( new i, Float: X, Float: Y, Float: Z; i < sizeof( g_fireData ); i++ ) - { - if ( g_fireData[ i ] [ E_CREATED ] ) - { - GetDynamicObjectPos( g_fireData[ i ] [ E_OBJECT ], X, Y, Z ); // Z is unused due to the object. - if ( g_houseData[ houseid ] [ E_EX ] == X && g_houseData[ houseid ] [ E_EY ] == Y ) - { - return 1; - } - } - } - return 0; -} - stock ShowAchievement( playerid, achievement[ ], score = -1 ) { if ( score != -1 ) { @@ -18835,6 +18633,19 @@ stock SendClientMessageToCops( colour, format[ ], va_args<> ) // Conversion to f return 1; } +stock SendClientMessageToFireman( colour, format[ ], va_args<> ) // Conversion to foreach 14 stuffed the define, not sure how... +{ + static + out[ 144 ]; + + va_format( out, sizeof( out ), format, va_start<2> ); + + foreach ( new i : Player ) if ( p_Class[ i ] == CLASS_FIREMAN ) { + SendClientMessage( i, colour, out ); + } + return 1; +} + stock GetPlayerOutsidePos( playerid, &Float: X, &Float: Y, &Float: Z ) // gets the player position, if interior then the last checkpoint position { new