Roadblock and spikestrips improvements
This commit is contained in:
parent
6da47b2cd0
commit
7dcfe85b83
@ -13,9 +13,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma compat 1
|
#pragma compat 1
|
||||||
#pragma option -d3
|
// #pragma option -d3
|
||||||
#pragma dynamic 7200000
|
#pragma dynamic 7200000
|
||||||
// #define DEBUG_MODE
|
#define DEBUG_MODE
|
||||||
|
|
||||||
#if defined DEBUG_MODE
|
#if defined DEBUG_MODE
|
||||||
#pragma option -d3
|
#pragma option -d3
|
||||||
@ -364,14 +364,15 @@ stock const
|
|||||||
{ "{8ADE47}Stephanie:"COL_WHITE" Check out what your favourite weapon is with "COL_GREY"/weaponstats"COL_WHITE"!" },
|
{ "{8ADE47}Stephanie:"COL_WHITE" Check out what your favourite weapon is with "COL_GREY"/weaponstats"COL_WHITE"!" },
|
||||||
{ "{8ADE47}Stephanie:"COL_WHITE" The secret monthly top donor can claim a prize at the end of the month!" },
|
{ "{8ADE47}Stephanie:"COL_WHITE" The secret monthly top donor can claim a prize at the end of the month!" },
|
||||||
{ "{8ADE47}Stephanie:"COL_WHITE" Got any feedback for the server? Use "COL_GREY"/feedback"COL_WHITE"!" },
|
{ "{8ADE47}Stephanie:"COL_WHITE" Got any feedback for the server? Use "COL_GREY"/feedback"COL_WHITE"!" },
|
||||||
{ "{8ADE47}Stephanie:"COL_WHITE" Attach an email to your account using "COL_GREY"/email"COL_WHITE" for free 5 IC and strong security features!" },
|
{ "{8ADE47}Stephanie:"COL_WHITE" Attach an email to your account using "COL_GREY"/email"COL_WHITE" for security features and free 3 days of VIP!" },
|
||||||
{ "{8ADE47}Stephanie:"COL_WHITE" Want to form a criminal enterprise? Create a gang and invite your friends with "COL_GREY"/gang create"COL_WHITE"!" },
|
{ "{8ADE47}Stephanie:"COL_WHITE" Want to form a criminal enterprise? Create a gang and invite your friends with "COL_GREY"/gang create"COL_WHITE"!" },
|
||||||
{ "SLOT_MACHINES" },
|
{ "SLOT_MACHINES" },
|
||||||
{ "{8ADE47}Stephanie:"COL_WHITE" Play roulette at a casino and win up to 35x on the money you place on a single number!" },
|
{ "{8ADE47}Stephanie:"COL_WHITE" Play roulette at a casino and win up to 35x on the money you place on a single number!" },
|
||||||
{ "{8ADE47}Stephanie:"COL_WHITE" Play blackjack at a casino and double your money very quickly!" },
|
{ "{8ADE47}Stephanie:"COL_WHITE" Play blackjack at a casino and double your money very quickly!" },
|
||||||
{ "{8ADE47}Stephanie:"COL_WHITE" Play Poker with your friends at any casino! Beat your way to riches!" },
|
{ "{8ADE47}Stephanie:"COL_WHITE" Play Poker with your friends at any casino! Beat your way to riches!" },
|
||||||
{ "{8ADE47}Stephanie:"COL_WHITE" Get casino rewards points by gambling at any casino! Use "COL_GREY"/casino rewards"COL_WHITE" to spend them!" },
|
{ "{8ADE47}Stephanie:"COL_WHITE" Get casino rewards points by gambling at any casino! Use "COL_GREY"/casino rewards"COL_WHITE" to spend them!" },
|
||||||
{ "{8ADE47}Stephanie:"COL_WHITE" Race your friends in a street race or outrun race by using "COL_GREY"/race"COL_WHITE"!" }
|
{ "{8ADE47}Stephanie:"COL_WHITE" Race your friends in a street race or outrun race by using "COL_GREY"/race"COL_WHITE"!" },
|
||||||
|
{ "{8ADE47}Stephanie:"COL_WHITE" Want 3 days of free V.I.P? Add an "COL_GREY"/email"COL_WHITE" to your account!" }
|
||||||
},
|
},
|
||||||
killedWords[ ] [ ] =
|
killedWords[ ] [ ] =
|
||||||
{
|
{
|
||||||
@ -1119,20 +1120,23 @@ new
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ** Road Blocks ** */
|
/* ** Road Blocks ** */
|
||||||
#define MAX_ROADBLOCKS ( 20 )
|
#define MAX_ROADBLOCKS ( 32 )
|
||||||
|
|
||||||
enum E_ROADBLOCK_DATA
|
enum E_ROADBLOCK_DATA
|
||||||
{
|
{
|
||||||
bool: E_CREATED, E_OBJECT_ID, Text3D: E_LABEL
|
E_OBJECT_ID, Text3D: E_LABEL, E_CREATOR,
|
||||||
|
|
||||||
|
Float: E_X, Float: E_Y, Float: E_Z
|
||||||
};
|
};
|
||||||
|
|
||||||
enum E_ROADBLOCK_OBJ_DATA
|
enum E_ROADBLOCK_OBJ_DATA
|
||||||
{
|
{
|
||||||
E_NAME[ 17 ], E_MODEL, Float: E_OFFSET
|
E_NAME[ 17 ], E_MODEL, Float: E_OFFSET
|
||||||
}
|
};
|
||||||
|
|
||||||
new
|
new
|
||||||
g_roadblockData [ MAX_ROADBLOCKS ] [ E_ROADBLOCK_DATA ],
|
g_roadblockData [ MAX_ROADBLOCKS ] [ E_ROADBLOCK_DATA ],
|
||||||
|
Iterator: roadblocks < MAX_ROADBLOCKS >,
|
||||||
|
|
||||||
g_roadblockObjectData [ ] [ E_ROADBLOCK_OBJ_DATA ] =
|
g_roadblockObjectData [ ] [ E_ROADBLOCK_OBJ_DATA ] =
|
||||||
{
|
{
|
||||||
@ -1146,16 +1150,19 @@ new
|
|||||||
;
|
;
|
||||||
|
|
||||||
/* ** Spike Strips ** */
|
/* ** Spike Strips ** */
|
||||||
#define MAX_SPIKESTRIPS ( 20 )
|
#define MAX_SPIKESTRIPS ( 32 )
|
||||||
|
|
||||||
enum E_SPIKE_STRIP_DATA
|
enum E_SPIKE_STRIP_DATA
|
||||||
{
|
{
|
||||||
E_OBJECT_ID, Text3D: E_LABEL, E_SPHERE
|
E_OBJECT_ID, Text3D: E_LABEL, E_SPHERE,
|
||||||
|
E_CREATOR,
|
||||||
|
|
||||||
|
Float: E_X, Float: E_Y, Float: E_Z
|
||||||
};
|
};
|
||||||
|
|
||||||
new
|
new
|
||||||
g_spikestripData [ MAX_SPIKESTRIPS ] [ E_SPIKE_STRIP_DATA ],
|
g_spikestripData [ MAX_SPIKESTRIPS ] [ E_SPIKE_STRIP_DATA ],
|
||||||
Iterator:SpikeStrip< MAX_SPIKESTRIPS >
|
Iterator: spikestrips < MAX_SPIKESTRIPS >
|
||||||
;
|
;
|
||||||
|
|
||||||
/* ** Gang System ** */
|
/* ** Gang System ** */
|
||||||
@ -1273,7 +1280,7 @@ enum E_GPS_DATA
|
|||||||
};
|
};
|
||||||
|
|
||||||
new
|
new
|
||||||
g_gpsData [ 62 ] [ E_GPS_DATA ]
|
g_gpsData [ 63 ] [ E_GPS_DATA ]
|
||||||
;
|
;
|
||||||
|
|
||||||
/* ** ATM System ** */
|
/* ** ATM System ** */
|
||||||
@ -4012,7 +4019,7 @@ public OnGameModeInit()
|
|||||||
CreateNavigation( "City Hall", -2766.4087, 375.5447, 6.33470, CITY_SF ); // 9
|
CreateNavigation( "City Hall", -2766.4087, 375.5447, 6.33470, CITY_SF ); // 9
|
||||||
CreateNavigation( "Supa Save", -2446.3350, 752.2393, 35.1719, CITY_SF ); // 10
|
CreateNavigation( "Supa Save", -2446.3350, 752.2393, 35.1719, CITY_SF ); // 10
|
||||||
CreateNavigation( "Vehicle Dealership", -2521.1895, -624.942, 132.780, CITY_SF ); // 11
|
CreateNavigation( "Vehicle Dealership", -2521.1895, -624.942, 132.780, CITY_SF ); // 11
|
||||||
//CreateNavigation( "Vehicle Impound", -1370.2954, -206.7451, 6.0000, CITY_SF ); // 12
|
CreateNavigation( "Trucking", -2127.8599, -228.7343, 35.3203, CITY_SF ); // 12
|
||||||
CreateNavigation( "Paintball", -2172.2017, 252.1113, 35.3388, CITY_SF ); // 13
|
CreateNavigation( "Paintball", -2172.2017, 252.1113, 35.3388, CITY_SF ); // 13
|
||||||
CreateNavigation( "Airport", -1422.4063, -286.5081, 14.148, CITY_SF ); // 15
|
CreateNavigation( "Airport", -1422.4063, -286.5081, 14.148, CITY_SF ); // 15
|
||||||
CreateNavigation( "V.I.P Lounge", -1880.7598, 822.3964, 35.1778, CITY_SF ); // 16
|
CreateNavigation( "V.I.P Lounge", -1880.7598, 822.3964, 35.1778, CITY_SF ); // 16
|
||||||
@ -5011,6 +5018,10 @@ public OnServerUpdate( )
|
|||||||
UpdateDynamic3DTextLabelText( p_RewardsLabel_4Drags[ playerid ], COLOR_GOLD, sprintf( "[CASINO REWARDS]\n\n"COL_WHITE"You have %s rewards points!", points_format( p_CasinoRewardsPoints[ playerid ] ) ) );
|
UpdateDynamic3DTextLabelText( p_RewardsLabel_4Drags[ playerid ], COLOR_GOLD, sprintf( "[CASINO REWARDS]\n\n"COL_WHITE"You have %s rewards points!", points_format( p_CasinoRewardsPoints[ playerid ] ) ) );
|
||||||
UpdateDynamic3DTextLabelText( p_RewardsLabel_Visage[ playerid ], COLOR_GOLD, sprintf( "[CASINO REWARDS]\n\n"COL_WHITE"You have %s rewards points!", points_format( p_CasinoRewardsPoints[ playerid ] ) ) );
|
UpdateDynamic3DTextLabelText( p_RewardsLabel_Visage[ playerid ], COLOR_GOLD, sprintf( "[CASINO REWARDS]\n\n"COL_WHITE"You have %s rewards points!", points_format( p_CasinoRewardsPoints[ playerid ] ) ) );
|
||||||
|
|
||||||
|
// Remove spike strips & roadblocks
|
||||||
|
if ( p_Class[ playerid ] == CLASS_POLICE )
|
||||||
|
ClearPlayerRoadblocks( playerid );
|
||||||
|
|
||||||
// Toggle total coin bar
|
// Toggle total coin bar
|
||||||
if ( !p_PlayerSettings[ playerid ] { SETTING_COINS_BAR } )
|
if ( !p_PlayerSettings[ playerid ] { SETTING_COINS_BAR } )
|
||||||
PlayerTextDrawSetString( playerid, p_CoinsTD[ playerid ], sprintf( "%05.3f", p_IrresistibleCoins[ playerid ] ) );
|
PlayerTextDrawSetString( playerid, p_CoinsTD[ playerid ], sprintf( "%05.3f", p_IrresistibleCoins[ playerid ] ) );
|
||||||
@ -5036,8 +5047,7 @@ public OnServerUpdate( )
|
|||||||
cancelPlayerTruckingCourier( playerid, iVehicle, .ticks = 60 );
|
cancelPlayerTruckingCourier( playerid, iVehicle, .ticks = 60 );
|
||||||
|
|
||||||
// Remove invalid visage highrollers
|
// Remove invalid visage highrollers
|
||||||
if ( ! p_IsCasinoHighRoller{ playerid } && IsPlayerInHighRoller( playerid ) )
|
if ( ! p_IsCasinoHighRoller{ playerid } && IsPlayerInHighRoller( playerid ) ) {
|
||||||
{
|
|
||||||
SetPlayerPos( playerid, 2597.8943, 1603.1852, 1506.1733 );
|
SetPlayerPos( playerid, 2597.8943, 1603.1852, 1506.1733 );
|
||||||
SendError( playerid, "You need to be a Highroller to access this area. Get access through Casino Rewards." );
|
SendError( playerid, "You need to be a Highroller to access this area. Get access through Casino Rewards." );
|
||||||
}
|
}
|
||||||
@ -5635,9 +5645,6 @@ public ZoneTimer( )
|
|||||||
|
|
||||||
for( new i; i < 20; i++ )
|
for( new i; i < 20; i++ )
|
||||||
{
|
{
|
||||||
if ( g_roadblockData[ i ] [ E_CREATED ] ) destroyRoadBlockStrip( i );
|
|
||||||
if ( Iter_Contains( SpikeStrip, i ) ) destroySpikeStrip( i );
|
|
||||||
|
|
||||||
if ( i < MAX_TREES )
|
if ( i < MAX_TREES )
|
||||||
{
|
{
|
||||||
if ( g_treeData[ i ] [ E_CREATED ] == true && g_treeData[ i ] [ E_CHOPPED ] == true )
|
if ( g_treeData[ i ] [ E_CREATED ] == true && g_treeData[ i ] [ E_CHOPPED ] == true )
|
||||||
@ -6337,6 +6344,7 @@ public OnPlayerDisconnect( playerid, reason )
|
|||||||
resetPlayerStreaks( playerid );
|
resetPlayerStreaks( playerid );
|
||||||
StopPlayerTruckingCourier( playerid );
|
StopPlayerTruckingCourier( playerid );
|
||||||
RemovePlayerFromRace( playerid );
|
RemovePlayerFromRace( playerid );
|
||||||
|
ClearPlayerRoadblocks( playerid, .distance_check = false );
|
||||||
p_Detained { playerid } = false;
|
p_Detained { playerid } = false;
|
||||||
p_Tied { playerid } = false;
|
p_Tied { playerid } = false;
|
||||||
p_Kidnapped { playerid } = false;
|
p_Kidnapped { playerid } = false;
|
||||||
@ -7348,6 +7356,7 @@ public OnPlayerDeath( playerid, killerid, reason )
|
|||||||
RemoveEquippedOre( playerid );
|
RemoveEquippedOre( playerid );
|
||||||
KillTimer( p_CuffAbuseTimer[ playerid ] );
|
KillTimer( p_CuffAbuseTimer[ playerid ] );
|
||||||
PlayerTextDrawHide( playerid, p_LocationTD[ playerid ] );
|
PlayerTextDrawHide( playerid, p_LocationTD[ playerid ] );
|
||||||
|
ClearPlayerRoadblocks( playerid, .distance_check = false );
|
||||||
p_Tazed{ playerid } = false;
|
p_Tazed{ playerid } = false;
|
||||||
p_WeaponDealing{ playerid } = false;
|
p_WeaponDealing{ playerid } = false;
|
||||||
p_WeaponDealer[ playerid ] = INVALID_PLAYER_ID;
|
p_WeaponDealer[ playerid ] = INVALID_PLAYER_ID;
|
||||||
@ -8589,7 +8598,7 @@ stock randomArrayItem( const array[ ], exclude = 0xFFFF, arraysize = sizeof( arr
|
|||||||
public OnPlayerCommandPerformed( playerid, cmdtext[ ], success )
|
public OnPlayerCommandPerformed( playerid, cmdtext[ ], success )
|
||||||
{
|
{
|
||||||
if ( !success ) {
|
if ( !success ) {
|
||||||
AddFileLogLine( "invalid_commands.txt", sprintf( "%s (score %d) : %s", ReturnPlayerName( playerid ), GetPlayerScore( playerid ), cmdtext ) );
|
AddFileLogLine( "invalid_commands.txt", sprintf( "%s (score %d) : %s\r\n", ReturnPlayerName( playerid ), GetPlayerScore( playerid ), cmdtext ) );
|
||||||
return SendError( playerid, "You have entered an invalid command. To display the command list type /commands or /cmds." );
|
return SendError( playerid, "You have entered an invalid command. To display the command list type /commands or /cmds." );
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@ -12363,18 +12372,30 @@ CMD:bj( playerid, params[ ] )
|
|||||||
|
|
||||||
CMD:dssall( playerid, params[ ] )
|
CMD:dssall( playerid, params[ ] )
|
||||||
{
|
{
|
||||||
if ( !p_inFBI{ playerid } && !p_AdminLevel[ playerid ] )
|
new removed = 0;
|
||||||
|
new is_admin = p_AdminLevel[ playerid ];
|
||||||
|
|
||||||
|
if ( ! p_inFBI{ playerid } && ! is_admin )
|
||||||
return SendError( playerid, "You are not in the FBI." );
|
return SendError( playerid, "You are not in the FBI." );
|
||||||
|
|
||||||
if ( !Iter_Count(SpikeStrip) )
|
foreach ( new handle : spikestrips )
|
||||||
return SendError( playerid, "There is nothing left to destroy." );
|
{
|
||||||
|
if ( ! is_admin && g_spikestripData[ handle ] [ E_CREATOR ] != playerid )
|
||||||
|
continue;
|
||||||
|
|
||||||
for( new i = 0; i < MAX_SPIKESTRIPS; i++ ) if ( Iter_Contains( SpikeStrip, i ) )
|
new
|
||||||
destroySpikeStrip( i );
|
cur = handle;
|
||||||
|
|
||||||
SendServerMessage( playerid, "You have succesfully destroyed all spike strips." );
|
destroySpikeStrip( handle, .remove_iter = false );
|
||||||
SendClientMessageToCops( -1, ""COL_BLUE"[SPIKE STRIPS CLEARED]"COL_WHITE" %s(%d) has destroyed all spike strips set!", ReturnPlayerName( playerid ), playerid );
|
Iter_SafeRemove( spikestrips, cur, handle );
|
||||||
return 1;
|
removed ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( removed ) {
|
||||||
|
return SendServerMessage( playerid, "You have removed all your spike strips." );
|
||||||
|
} else {
|
||||||
|
return SendError( playerid, "There are no spike strips to remove by you." );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CMD:dss( playerid, params[ ] )
|
CMD:dss( playerid, params[ ] )
|
||||||
@ -12386,7 +12407,8 @@ CMD:dss( playerid, params[ ] )
|
|||||||
if ( !p_inFBI{ playerid } ) return SendError( playerid, "You are not in the FBI." );
|
if ( !p_inFBI{ playerid } ) return SendError( playerid, "You are not in the FBI." );
|
||||||
else if ( sscanf( params, "d", rbID ) ) return SendUsage( playerid, "/dss [SPIKE_STRIP_ID]" );
|
else if ( sscanf( params, "d", rbID ) ) return SendUsage( playerid, "/dss [SPIKE_STRIP_ID]" );
|
||||||
else if ( rbID < 0 || rbID >= MAX_SPIKESTRIPS ) return SendError( playerid, "Invalid Spike Strip ID." );
|
else if ( rbID < 0 || rbID >= MAX_SPIKESTRIPS ) return SendError( playerid, "Invalid Spike Strip ID." );
|
||||||
else if ( !Iter_Contains( SpikeStrip, rbID ) ) return SendError( playerid, "Invalid Spike Strip ID." );
|
else if ( !Iter_Contains( spikestrips, rbID ) ) return SendError( playerid, "Invalid Spike Strip ID." );
|
||||||
|
else if ( g_spikestripData[ rbID ] [ E_CREATOR ] != playerid ) return SendError( playerid, "You have not created this spike strip." );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
destroySpikeStrip( rbID );
|
destroySpikeStrip( rbID );
|
||||||
@ -12400,6 +12422,7 @@ CMD:spike( playerid, params[ ] ) return cmd_setspike( playerid, params );
|
|||||||
CMD:setspike( playerid, params[ ] )
|
CMD:setspike( playerid, params[ ] )
|
||||||
{
|
{
|
||||||
if ( GetPlayerInterior( playerid ) != 0 || GetPlayerVirtualWorld( playerid ) != 0 ) return SendError( playerid, "You cannot use this command inside buildings." );
|
if ( GetPlayerInterior( playerid ) != 0 || GetPlayerVirtualWorld( playerid ) != 0 ) return SendError( playerid, "You cannot use this command inside buildings." );
|
||||||
|
else if ( GetPlayerScore( playerid ) < 250 ) return SendError( playerid, "You need at least 250 score to use this feature." );
|
||||||
else if ( IsPlayerKidnapped( playerid ) ) return SendError( playerid, "You are kidnapped, you cannot do this." );
|
else if ( IsPlayerKidnapped( playerid ) ) return SendError( playerid, "You are kidnapped, you cannot do this." );
|
||||||
else if ( IsPlayerJailed( playerid ) ) return SendError( playerid, "You are jailed, you cannot do this." );
|
else if ( IsPlayerJailed( playerid ) ) return SendError( playerid, "You are jailed, you cannot do this." );
|
||||||
else if ( IsPlayerTied( playerid ) ) return SendError( playerid, "You are tied, you cannot do this." );
|
else if ( IsPlayerTied( playerid ) ) return SendError( playerid, "You are tied, you cannot do this." );
|
||||||
@ -12665,18 +12688,30 @@ stock SwitchHouseOwners( ID, playerid, buyerid )
|
|||||||
|
|
||||||
CMD:drball( playerid, params[ ] )
|
CMD:drball( playerid, params[ ] )
|
||||||
{
|
{
|
||||||
if ( !p_inFBI{ playerid } && !p_AdminLevel[ playerid ] ) return SendError( playerid, "You are not in the FBI." );
|
new removed = 0;
|
||||||
new count = 0;
|
new is_admin = p_AdminLevel[ playerid ];
|
||||||
for( new i; i < MAX_ROADBLOCKS; i++ ) {
|
|
||||||
if ( g_roadblockData[ i ] [ E_CREATED ] ) count++, destroyRoadBlockStrip( i );
|
if ( ! p_inFBI{ playerid } && ! is_admin )
|
||||||
}
|
return SendError( playerid, "You are not in the FBI." );
|
||||||
if ( count > 0 )
|
|
||||||
|
foreach ( new handle : roadblocks )
|
||||||
{
|
{
|
||||||
SendServerMessage( playerid, "You have succesfully destroyed all road blocks." );
|
if ( ! is_admin && g_roadblockData[ handle ] [ E_CREATOR ] != playerid )
|
||||||
SendClientMessageToCops( -1, ""COL_BLUE"[ROAD BLOCKS CLEARED]"COL_WHITE" %s(%d) has destroyed all road blocks set!", ReturnPlayerName( playerid ), playerid );
|
continue;
|
||||||
|
|
||||||
|
new
|
||||||
|
cur = handle;
|
||||||
|
|
||||||
|
destroyRoadBlockStrip( handle, .remove_iter = false );
|
||||||
|
Iter_SafeRemove( roadblocks, cur, handle );
|
||||||
|
removed ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( removed ) {
|
||||||
|
return SendServerMessage( playerid, "You have removed all your roadblocks." );
|
||||||
|
} else {
|
||||||
|
return SendError( playerid, "There are no roadblocks to remove by you." );
|
||||||
}
|
}
|
||||||
else SendError( playerid, "There is nothing left to destroy." );
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CMD:drb( playerid, params[ ] )
|
CMD:drb( playerid, params[ ] )
|
||||||
@ -12686,9 +12721,11 @@ CMD:drb( playerid, params[ ] )
|
|||||||
;
|
;
|
||||||
|
|
||||||
if ( !p_inFBI{ playerid } ) return SendError( playerid, "You are not in the FBI." );
|
if ( !p_inFBI{ playerid } ) return SendError( playerid, "You are not in the FBI." );
|
||||||
|
else if ( GetPlayerScore( playerid ) < 250 ) return SendError( playerid, "You need at least 250 score to use this feature." );
|
||||||
else if ( sscanf( params, "d", rbID ) ) return SendUsage( playerid, "/drb [ROADBLOCK_ID]" );
|
else if ( sscanf( params, "d", rbID ) ) return SendUsage( playerid, "/drb [ROADBLOCK_ID]" );
|
||||||
else if ( rbID < 0 || rbID > MAX_ROADBLOCKS ) return SendError( playerid, "Invalid road block ID." );
|
else if ( rbID < 0 || rbID > MAX_ROADBLOCKS ) return SendError( playerid, "Invalid road block ID." );
|
||||||
else if ( g_roadblockData[ rbID ] [ E_CREATED ] == false ) return SendError( playerid, "Invalid road block ID." );
|
else if ( Iter_Contains( roadblocks, rbID ) ) return SendError( playerid, "Invalid road block ID." );
|
||||||
|
else if ( g_roadblockData[ rbID ] [ E_CREATOR ] != playerid ) return SendError( playerid, "You have not created this spike strip." );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
destroyRoadBlockStrip( rbID );
|
destroyRoadBlockStrip( rbID );
|
||||||
@ -19415,7 +19452,7 @@ public OnPlayerEnterDynamicArea( playerid, areaid )
|
|||||||
iModel = GetVehicleModel( iVehicle );
|
iModel = GetVehicleModel( iVehicle );
|
||||||
|
|
||||||
// spike strip system
|
// spike strip system
|
||||||
foreach(new i : SpikeStrip) if ( g_spikestripData[ i ] [ E_SPHERE ] == areaid ) {
|
foreach(new i : spikestrips) if ( g_spikestripData[ i ] [ E_SPHERE ] == areaid ) {
|
||||||
GetVehicleDamageStatus( iVehicle, panels, doors, lights, tires );
|
GetVehicleDamageStatus( iVehicle, panels, doors, lights, tires );
|
||||||
UpdateVehicleDamageStatus( iVehicle, panels, doors, lights, ( tires = encode_tires( 1, 1, 1, 1 ) ) );
|
UpdateVehicleDamageStatus( iVehicle, panels, doors, lights, ( tires = encode_tires( 1, 1, 1, 1 ) ) );
|
||||||
destroySpikeStrip( i );
|
destroySpikeStrip( i );
|
||||||
@ -21519,13 +21556,8 @@ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
|
|||||||
szBigQuery[ 764 ]
|
szBigQuery[ 764 ]
|
||||||
;
|
;
|
||||||
|
|
||||||
if ( response == 1 ) PlayerPlaySound( playerid, 1083, 0.0, 0.0, 0.0 ); // Confirmation sound
|
|
||||||
else PlayerPlaySound( playerid, 1084, 0.0, 0.0, 0.0 ); // Cancellation sound
|
|
||||||
|
|
||||||
if ( g_DialogLogging ) printf( "[DIALOG_LOG] %s(%d) - %d, %d, %d, %s", ReturnPlayerName( playerid ), playerid, dialogid, response, listitem, inputtext );
|
if ( g_DialogLogging ) printf( "[DIALOG_LOG] %s(%d) - %d, %d, %d, %s", ReturnPlayerName( playerid ), playerid, dialogid, response, listitem, inputtext );
|
||||||
|
|
||||||
if ( strlen( inputtext ) ) strreplacechar( inputtext, '%', '#' ); // The percentage injection crasher (critical)
|
|
||||||
|
|
||||||
if ( dialogid == DIALOG_LOGIN )
|
if ( dialogid == DIALOG_LOGIN )
|
||||||
{
|
{
|
||||||
if ( response )
|
if ( response )
|
||||||
@ -23950,9 +23982,10 @@ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
|
|||||||
|
|
||||||
Beep( playerid );
|
Beep( playerid );
|
||||||
p_AddedEmail{ playerid } = true;
|
p_AddedEmail{ playerid } = true;
|
||||||
p_IrresistibleCoins[ playerid ] += 5.0;
|
//p_IrresistibleCoins[ playerid ] += 5.0;
|
||||||
|
SetPlayerVipLevel( playerid, VIP_REGULAR, .gifted = false, .cash_xp = false, .interval = 259560 ); // 3 days of vip
|
||||||
mysql_single_query( sprintf( "UPDATE `USERS` SET `USED_EMAIL`=1 WHERE `ID`=%d", p_AccountID[ playerid ] ) );
|
mysql_single_query( sprintf( "UPDATE `USERS` SET `USED_EMAIL`=1 WHERE `ID`=%d", p_AccountID[ playerid ] ) );
|
||||||
SendGlobalMessage( COLOR_BLUE, "[EMAIL CONFIRMED]"COL_GREY" %s(%d) has confirmed their "COL_BLUE"/email"COL_GREY" and received free 5.0 IC!", ReturnPlayerName( playerid ), playerid );
|
SendGlobalMessage( COLOR_GOLD, "[EMAIL CONFIRMED]"COL_GREY" %s(%d) has confirmed their "COL_GOLD"/email"COL_GREY" and received 3 days of V.I.P!", ReturnPlayerName( playerid ), playerid );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29438,50 +29471,46 @@ stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, &Float:z, Float:distanc
|
|||||||
y += (distance * floatcos(-a, degrees));
|
y += (distance * floatcos(-a, degrees));
|
||||||
}
|
}
|
||||||
|
|
||||||
stock getRoadBlockSlot( )
|
stock destroyRoadBlockStrip( rbid, bool: remove_iter = false )
|
||||||
{
|
{
|
||||||
for( new i; i < MAX_ROADBLOCKS; i++ )
|
if ( ! Iter_Contains( roadblocks, rbid ) )
|
||||||
{
|
|
||||||
if ( !g_roadblockData[ i ] [ E_CREATED ] )
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
stock destroyRoadBlockStrip( rbid )
|
|
||||||
{
|
|
||||||
if ( rbid == -1 && !g_roadblockData[ rbid ] [ E_CREATED ] )
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
DestroyDynamicObject( g_roadblockData[ rbid ] [ E_OBJECT_ID ] );
|
DestroyDynamicObject( g_roadblockData[ rbid ] [ E_OBJECT_ID ] );
|
||||||
DestroyDynamic3DTextLabel( g_roadblockData[ rbid ] [ E_LABEL ] );
|
DestroyDynamic3DTextLabel( g_roadblockData[ rbid ] [ E_LABEL ] );
|
||||||
|
|
||||||
g_roadblockData[ rbid ] [ E_CREATED ] = false;
|
g_roadblockData[ rbid ] [ E_LABEL ] = Text3D: INVALID_3DTEXT_ID;
|
||||||
g_roadblockData[ rbid ] [ E_LABEL ] = Text3D: 0xFFFF;
|
|
||||||
g_roadblockData[ rbid ] [ E_OBJECT_ID ] = INVALID_OBJECT_ID;
|
g_roadblockData[ rbid ] [ E_OBJECT_ID ] = INVALID_OBJECT_ID;
|
||||||
|
|
||||||
|
if ( remove_iter ) Iter_Remove( roadblocks, rbid );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
stock createRoadBlockStrip( playerid, type )
|
stock createRoadBlockStrip( playerid, type )
|
||||||
{
|
{
|
||||||
new
|
new
|
||||||
ID = getRoadBlockSlot( ),
|
ID = Iter_Free( roadblocks ),
|
||||||
Float: X, Float: Y, Float: Z, Float: Degree
|
Float: X, Float: Y, Float: Z, Float: Degree
|
||||||
;
|
;
|
||||||
|
|
||||||
if ( ID != -1 )
|
if ( ID != ITER_NONE )
|
||||||
{
|
{
|
||||||
GetXYInFrontOfPlayer( playerid, X, Y, Z, 2.0 );
|
GetXYInFrontOfPlayer( playerid, X, Y, Z, 2.0 );
|
||||||
GetPlayerFacingAngle( playerid, Degree );
|
GetPlayerFacingAngle( playerid, Degree );
|
||||||
|
|
||||||
|
g_roadblockData[ ID ] [ E_CREATOR ] = playerid;
|
||||||
|
g_roadblockData[ ID ] [ E_X ] = X;
|
||||||
|
g_roadblockData[ ID ] [ E_Y ] = Y;
|
||||||
|
g_roadblockData[ ID ] [ E_Z ] = Z;
|
||||||
|
|
||||||
DestroyDynamicObject( g_roadblockData[ ID ] [ E_OBJECT_ID ] );
|
DestroyDynamicObject( g_roadblockData[ ID ] [ E_OBJECT_ID ] );
|
||||||
DestroyDynamic3DTextLabel( g_roadblockData[ ID ] [ E_LABEL ] );
|
DestroyDynamic3DTextLabel( g_roadblockData[ ID ] [ E_LABEL ] );
|
||||||
|
|
||||||
g_roadblockData[ ID ] [ E_OBJECT_ID ] = CreateDynamicObject( g_roadblockObjectData[ type ] [ E_MODEL ], X, Y, Z - g_roadblockObjectData[ type ] [ E_OFFSET ], 0, 0, Degree + 180.0 );
|
g_roadblockData[ ID ] [ E_OBJECT_ID ] = CreateDynamicObject( g_roadblockObjectData[ type ] [ E_MODEL ], X, Y, Z - g_roadblockObjectData[ type ] [ E_OFFSET ], 0, 0, Degree + 180.0 );
|
||||||
g_roadblockData[ ID ] [ E_LABEL ] = CreateDynamic3DTextLabel( sprintf( "%s(%d)\n"COL_GREY"Placed by %s!", g_roadblockObjectData[ type ] [ E_NAME ], ID, ReturnPlayerName( playerid ) ), COLOR_GOLD, X, Y, Z, 20.0 );
|
g_roadblockData[ ID ] [ E_LABEL ] = CreateDynamic3DTextLabel( sprintf( "%s(%d)\n"COL_GREY"Placed by %s!", g_roadblockObjectData[ type ] [ E_NAME ], ID, ReturnPlayerName( playerid ) ), COLOR_GOLD, X, Y, Z, 20.0 );
|
||||||
g_roadblockData[ ID ] [ E_CREATED ] = true;
|
|
||||||
|
|
||||||
Streamer_Update( playerid ); // SyncObject( playerid );
|
Streamer_Update( playerid );
|
||||||
|
Iter_Add( roadblocks, ID );
|
||||||
}
|
}
|
||||||
return ID;
|
return ID;
|
||||||
}
|
}
|
||||||
@ -29525,7 +29554,7 @@ stock SetObjectFacePoint(iObjectID, Float: fX, Float: fY, Float: fOffset, bool:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stock destroySpikeStrip( i )
|
stock destroySpikeStrip( i, bool: remove_iter = true )
|
||||||
{
|
{
|
||||||
if ( i == -1 )
|
if ( i == -1 )
|
||||||
return 0;
|
return 0;
|
||||||
@ -29538,7 +29567,7 @@ stock destroySpikeStrip( i )
|
|||||||
g_spikestripData[ i ] [ E_OBJECT_ID ] = INVALID_OBJECT_ID;
|
g_spikestripData[ i ] [ E_OBJECT_ID ] = INVALID_OBJECT_ID;
|
||||||
g_spikestripData[ i ] [ E_LABEL ] = Text3D: 0xFFFF;
|
g_spikestripData[ i ] [ E_LABEL ] = Text3D: 0xFFFF;
|
||||||
|
|
||||||
Iter_Remove(SpikeStrip, i);
|
if ( remove_iter ) Iter_Remove( spikestrips, i );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29546,7 +29575,7 @@ stock CreateSpikeStrip( playerid, Float: X, Float: Y, Float: Z, Float: Angle )
|
|||||||
{
|
{
|
||||||
new
|
new
|
||||||
bVehicle = IsPlayerInAnyVehicle( playerid ),
|
bVehicle = IsPlayerInAnyVehicle( playerid ),
|
||||||
i = Iter_Free(SpikeStrip)
|
i = Iter_Free( spikestrips )
|
||||||
;
|
;
|
||||||
|
|
||||||
if ( i != ITER_NONE )
|
if ( i != ITER_NONE )
|
||||||
@ -29555,18 +29584,51 @@ stock CreateSpikeStrip( playerid, Float: X, Float: Y, Float: Z, Float: Angle )
|
|||||||
DestroyDynamicObject ( g_spikestripData[ i ] [ E_OBJECT_ID ] );
|
DestroyDynamicObject ( g_spikestripData[ i ] [ E_OBJECT_ID ] );
|
||||||
DestroyDynamic3DTextLabel ( g_spikestripData[ i ] [ E_LABEL ] );
|
DestroyDynamic3DTextLabel ( g_spikestripData[ i ] [ E_LABEL ] );
|
||||||
|
|
||||||
|
g_spikestripData[ i ] [ E_CREATOR ] = playerid;
|
||||||
|
g_spikestripData[ i ] [ E_X ] = X;
|
||||||
|
g_spikestripData[ i ] [ E_Y ] = Y;
|
||||||
|
g_spikestripData[ i ] [ E_Z ] = Z;
|
||||||
|
|
||||||
g_spikestripData[ i ] [ E_LABEL ] = CreateDynamic3DTextLabel( sprintf( "Spike Strip(%d)\n"COL_GREY"Placed by %s!", i, ReturnPlayerName( playerid ) ), COLOR_GOLD, X, Y, Z, 20.0 );
|
g_spikestripData[ i ] [ E_LABEL ] = CreateDynamic3DTextLabel( sprintf( "Spike Strip(%d)\n"COL_GREY"Placed by %s!", i, ReturnPlayerName( playerid ) ), COLOR_GOLD, X, Y, Z, 20.0 );
|
||||||
g_spikestripData[ i ] [ E_OBJECT_ID ] = CreateDynamicObject( 2899, X, Y, Z - ( bVehicle ? 0.6 : 0.9 ), 0, 0, Angle - 90.0);
|
g_spikestripData[ i ] [ E_OBJECT_ID ] = CreateDynamicObject( 2899, X, Y, Z - ( bVehicle ? 0.6 : 0.9 ), 0, 0, Angle - 90.0);
|
||||||
g_spikestripData[ i ] [ E_SPHERE ] = CreateDynamicCircle( X, Y, 4.0 );
|
g_spikestripData[ i ] [ E_SPHERE ] = CreateDynamicCircle( X, Y, 4.0 );
|
||||||
|
|
||||||
if ( !bVehicle )
|
Streamer_Update( playerid );
|
||||||
Streamer_Update( playerid ); // SyncObject( playerid ); // Shows the object instantly.
|
Iter_Add( spikestrips, i );
|
||||||
|
|
||||||
Iter_Add(SpikeStrip, i);
|
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stock ClearPlayerRoadblocks( playerid, bool: distance_check = true )
|
||||||
|
{
|
||||||
|
// remove spike strips
|
||||||
|
foreach ( new handle : spikestrips ) if ( g_spikestripData[ handle ] [ E_CREATOR ] == playerid ) {
|
||||||
|
if ( distance_check && GetPlayerDistanceFromPoint( playerid, g_spikestripData[ handle ] [ E_X ], g_spikestripData[ handle ] [ E_Y ], g_spikestripData[ handle ] [ E_Z ] ) < 75.0 ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
new
|
||||||
|
cur = handle;
|
||||||
|
|
||||||
|
destroySpikeStrip( handle, .remove_iter = false );
|
||||||
|
Iter_SafeRemove( spikestrips, cur, handle );
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove roadblocks
|
||||||
|
foreach ( new handle : roadblocks ) if ( g_roadblockData[ handle ] [ E_CREATOR ] == playerid ) {
|
||||||
|
if ( distance_check && GetPlayerDistanceFromPoint( playerid, g_roadblockData[ handle ] [ E_X ], g_roadblockData[ handle ] [ E_Y ], g_roadblockData[ handle ] [ E_Z ] ) < 100.0 ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
new
|
||||||
|
cur = handle;
|
||||||
|
|
||||||
|
destroyRoadBlockStrip( handle, .remove_iter = false );
|
||||||
|
Iter_SafeRemove( roadblocks, cur, handle );
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
stock encode_tires( tires1, tires2, tires3, tires4 )
|
stock encode_tires( tires1, tires2, tires3, tires4 )
|
||||||
return tires1 | (tires2 << 1) | (tires3 << 2) | (tires4 << 3);
|
return tires1 | (tires2 << 1) | (tires3 << 2) | (tires4 << 3);
|
||||||
|
|
||||||
@ -32267,11 +32329,13 @@ stock hasBadDrivebyWeapon( playerid )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
stock SetPlayerVipLevel( pID, level, bool: gifted = false )
|
stock SetPlayerVipLevel( pID, level, bool: gifted = false, bool: cash_xp = true, interval = 2595600 )
|
||||||
{
|
{
|
||||||
if ( !IsPlayerConnected( pID ) )
|
if ( !IsPlayerConnected( pID ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if ( cash_xp )
|
||||||
|
{
|
||||||
switch( level )
|
switch( level )
|
||||||
{
|
{
|
||||||
case VIP_REGULAR: GivePlayerXP( pID, 2000 ), GivePlayerCash( pID, 500000 );
|
case VIP_REGULAR: GivePlayerXP( pID, 2000 ), GivePlayerCash( pID, 500000 );
|
||||||
@ -32316,11 +32380,12 @@ stock SetPlayerVipLevel( pID, level, bool: gifted = false )
|
|||||||
}
|
}
|
||||||
default: printf("VIP NOT FOUND %d LEVEL SPECIFIED", level);
|
default: printf("VIP NOT FOUND %d LEVEL SPECIFIED", level);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( p_VIPLevel[ pID ] < level ) p_VIPLevel[ pID ] = level;
|
if ( p_VIPLevel[ pID ] < level ) p_VIPLevel[ pID ] = level;
|
||||||
if ( level > 0 ) {
|
if ( level > 0 ) {
|
||||||
if ( p_VIPExpiretime[ pID ] > g_iTime ) p_VIPExpiretime[ pID ] += 2595600;
|
if ( p_VIPExpiretime[ pID ] > g_iTime ) p_VIPExpiretime[ pID ] += interval;
|
||||||
else p_VIPExpiretime[ pID ] += ( g_iTime + 2595600 );
|
else p_VIPExpiretime[ pID ] += ( g_iTime + interval );
|
||||||
}
|
}
|
||||||
else { p_VIPExpiretime[ pID ] = 0; }
|
else { p_VIPExpiretime[ pID ] = 0; }
|
||||||
}
|
}
|
||||||
@ -35941,7 +36006,7 @@ stock ShowPlayerAccountGuard( playerid )
|
|||||||
|
|
||||||
// award user for adding their email
|
// award user for adding their email
|
||||||
if ( p_AddedEmail{ playerid } == false ) {
|
if ( p_AddedEmail{ playerid } == false ) {
|
||||||
strcat( szBigString, "\n"COL_GOLD"Claim Free 5 IC For Confirming!\t \t"COL_GOLD">>>" );
|
strcat( szBigString, "\n"COL_GOLD"Claim Free 3 Days Of Regular VIP!\t"COL_GOLD">>>" );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
szBigString = ""COL_WHITE"Your account email is "COL_RED"unconfirmed\t \nConfirm Email\t"COL_GREY">>>";
|
szBigString = ""COL_WHITE"Your account email is "COL_RED"unconfirmed\t \nConfirm Email\t"COL_GREY">>>";
|
||||||
|
@ -1 +1,5 @@
|
|||||||
(+) Implements cash cards. A way for prizes to be given out to members easily. Use /cashcard to redeem.
|
(+) Implements cash cards. A way for prizes to be given out to members easily. Use /cashcard to redeem.
|
||||||
|
(+) Adds Trucking to the San Fierro GPS.
|
||||||
|
(/) Roadblocks and spike strips can be created by players, and won't be removed unless they are not near them.
|
||||||
|
(/) /drball will only remove your roadblocks (unless you're an admin).
|
||||||
|
(/) You need at least 250 score to use "/setspike" and "/crb".
|
||||||
|
Loading…
Reference in New Issue
Block a user