Roadblock and spikestrips improvements

This commit is contained in:
Lorenc 2018-04-01 09:45:22 +10:00
parent 6da47b2cd0
commit 7dcfe85b83
2 changed files with 186 additions and 117 deletions

View File

@ -13,9 +13,9 @@
*/
#pragma compat 1
#pragma option -d3
// #pragma option -d3
#pragma dynamic 7200000
// #define DEBUG_MODE
#define DEBUG_MODE
#if defined DEBUG_MODE
#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" 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" 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"!" },
{ "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 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" 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[ ] [ ] =
{
@ -1119,20 +1120,23 @@ new
#endif
/* ** Road Blocks ** */
#define MAX_ROADBLOCKS ( 20 )
#define MAX_ROADBLOCKS ( 32 )
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
{
E_NAME[ 17 ], E_MODEL, Float: E_OFFSET
}
};
new
g_roadblockData [ MAX_ROADBLOCKS ] [ E_ROADBLOCK_DATA ],
Iterator: roadblocks < MAX_ROADBLOCKS >,
g_roadblockObjectData [ ] [ E_ROADBLOCK_OBJ_DATA ] =
{
@ -1146,16 +1150,19 @@ new
;
/* ** Spike Strips ** */
#define MAX_SPIKESTRIPS ( 20 )
#define MAX_SPIKESTRIPS ( 32 )
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
g_spikestripData [ MAX_SPIKESTRIPS ] [ E_SPIKE_STRIP_DATA ],
Iterator:SpikeStrip< MAX_SPIKESTRIPS >
Iterator: spikestrips < MAX_SPIKESTRIPS >
;
/* ** Gang System ** */
@ -1273,7 +1280,7 @@ enum E_GPS_DATA
};
new
g_gpsData [ 62 ] [ E_GPS_DATA ]
g_gpsData [ 63 ] [ E_GPS_DATA ]
;
/* ** ATM System ** */
@ -4012,7 +4019,7 @@ public OnGameModeInit()
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( "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( "Airport", -1422.4063, -286.5081, 14.148, CITY_SF ); // 15
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_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
if ( !p_PlayerSettings[ playerid ] { SETTING_COINS_BAR } )
PlayerTextDrawSetString( playerid, p_CoinsTD[ playerid ], sprintf( "%05.3f", p_IrresistibleCoins[ playerid ] ) );
@ -5036,8 +5047,7 @@ public OnServerUpdate( )
cancelPlayerTruckingCourier( playerid, iVehicle, .ticks = 60 );
// Remove invalid visage highrollers
if ( ! p_IsCasinoHighRoller{ playerid } && IsPlayerInHighRoller( playerid ) )
{
if ( ! p_IsCasinoHighRoller{ playerid } && IsPlayerInHighRoller( playerid ) ) {
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." );
}
@ -5635,9 +5645,6 @@ public ZoneTimer( )
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 ( g_treeData[ i ] [ E_CREATED ] == true && g_treeData[ i ] [ E_CHOPPED ] == true )
@ -6337,6 +6344,7 @@ public OnPlayerDisconnect( playerid, reason )
resetPlayerStreaks( playerid );
StopPlayerTruckingCourier( playerid );
RemovePlayerFromRace( playerid );
ClearPlayerRoadblocks( playerid, .distance_check = false );
p_Detained { playerid } = false;
p_Tied { playerid } = false;
p_Kidnapped { playerid } = false;
@ -7348,6 +7356,7 @@ public OnPlayerDeath( playerid, killerid, reason )
RemoveEquippedOre( playerid );
KillTimer( p_CuffAbuseTimer[ playerid ] );
PlayerTextDrawHide( playerid, p_LocationTD[ playerid ] );
ClearPlayerRoadblocks( playerid, .distance_check = false );
p_Tazed{ playerid } = false;
p_WeaponDealing{ playerid } = false;
p_WeaponDealer[ playerid ] = INVALID_PLAYER_ID;
@ -8589,7 +8598,7 @@ stock randomArrayItem( const array[ ], exclude = 0xFFFF, arraysize = sizeof( arr
public OnPlayerCommandPerformed( playerid, cmdtext[ ], 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 1;
@ -12363,18 +12372,30 @@ CMD:bj( 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." );
if ( !Iter_Count(SpikeStrip) )
return SendError( playerid, "There is nothing left to destroy." );
foreach ( new handle : spikestrips )
{
if ( ! is_admin && g_spikestripData[ handle ] [ E_CREATOR ] != playerid )
continue;
for( new i = 0; i < MAX_SPIKESTRIPS; i++ ) if ( Iter_Contains( SpikeStrip, i ) )
destroySpikeStrip( i );
new
cur = handle;
SendServerMessage( playerid, "You have succesfully destroyed all spike strips." );
SendClientMessageToCops( -1, ""COL_BLUE"[SPIKE STRIPS CLEARED]"COL_WHITE" %s(%d) has destroyed all spike strips set!", ReturnPlayerName( playerid ), playerid );
return 1;
destroySpikeStrip( handle, .remove_iter = false );
Iter_SafeRemove( spikestrips, cur, handle );
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[ ] )
@ -12386,7 +12407,8 @@ CMD:dss( playerid, params[ ] )
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 ( 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
{
destroySpikeStrip( rbID );
@ -12400,6 +12422,7 @@ CMD:spike( playerid, params[ ] ) return 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." );
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 ( 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." );
@ -12665,18 +12688,30 @@ stock SwitchHouseOwners( ID, playerid, buyerid )
CMD:drball( playerid, params[ ] )
{
if ( !p_inFBI{ playerid } && !p_AdminLevel[ playerid ] ) return SendError( playerid, "You are not in the FBI." );
new count = 0;
for( new i; i < MAX_ROADBLOCKS; i++ ) {
if ( g_roadblockData[ i ] [ E_CREATED ] ) count++, destroyRoadBlockStrip( i );
}
if ( count > 0 )
new removed = 0;
new is_admin = p_AdminLevel[ playerid ];
if ( ! p_inFBI{ playerid } && ! is_admin )
return SendError( playerid, "You are not in the FBI." );
foreach ( new handle : roadblocks )
{
SendServerMessage( playerid, "You have succesfully destroyed all road blocks." );
SendClientMessageToCops( -1, ""COL_BLUE"[ROAD BLOCKS CLEARED]"COL_WHITE" %s(%d) has destroyed all road blocks set!", ReturnPlayerName( playerid ), playerid );
if ( ! is_admin && g_roadblockData[ handle ] [ E_CREATOR ] != 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[ ] )
@ -12686,9 +12721,11 @@ CMD:drb( playerid, params[ ] )
;
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 ( 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
{
destroyRoadBlockStrip( rbID );
@ -19415,7 +19452,7 @@ public OnPlayerEnterDynamicArea( playerid, areaid )
iModel = GetVehicleModel( iVehicle );
// 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 );
UpdateVehicleDamageStatus( iVehicle, panels, doors, lights, ( tires = encode_tires( 1, 1, 1, 1 ) ) );
destroySpikeStrip( i );
@ -21519,13 +21556,8 @@ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
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 ( strlen( inputtext ) ) strreplacechar( inputtext, '%', '#' ); // The percentage injection crasher (critical)
if ( dialogid == DIALOG_LOGIN )
{
if ( response )
@ -23950,9 +23982,10 @@ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Beep( playerid );
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 ] ) );
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;
}
}
@ -29438,50 +29471,46 @@ stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, &Float:z, Float:distanc
y += (distance * floatcos(-a, degrees));
}
stock getRoadBlockSlot( )
stock destroyRoadBlockStrip( rbid, bool: remove_iter = false )
{
for( new i; i < MAX_ROADBLOCKS; i++ )
{
if ( !g_roadblockData[ i ] [ E_CREATED ] )
return i;
}
return -1;
}
stock destroyRoadBlockStrip( rbid )
{
if ( rbid == -1 && !g_roadblockData[ rbid ] [ E_CREATED ] )
if ( ! Iter_Contains( roadblocks, rbid ) )
return 0;
DestroyDynamicObject( g_roadblockData[ rbid ] [ E_OBJECT_ID ] );
DestroyDynamic3DTextLabel( g_roadblockData[ rbid ] [ E_LABEL ] );
g_roadblockData[ rbid ] [ E_CREATED ] = false;
g_roadblockData[ rbid ] [ E_LABEL ] = Text3D: 0xFFFF;
g_roadblockData[ rbid ] [ E_LABEL ] = Text3D: INVALID_3DTEXT_ID;
g_roadblockData[ rbid ] [ E_OBJECT_ID ] = INVALID_OBJECT_ID;
if ( remove_iter ) Iter_Remove( roadblocks, rbid );
return 1;
}
stock createRoadBlockStrip( playerid, type )
{
new
ID = getRoadBlockSlot( ),
ID = Iter_Free( roadblocks ),
Float: X, Float: Y, Float: Z, Float: Degree
;
if ( ID != -1 )
if ( ID != ITER_NONE )
{
GetXYInFrontOfPlayer( playerid, X, Y, Z, 2.0 );
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 ] );
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_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;
}
@ -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 )
return 0;
@ -29538,7 +29567,7 @@ stock destroySpikeStrip( i )
g_spikestripData[ i ] [ E_OBJECT_ID ] = INVALID_OBJECT_ID;
g_spikestripData[ i ] [ E_LABEL ] = Text3D: 0xFFFF;
Iter_Remove(SpikeStrip, i);
if ( remove_iter ) Iter_Remove( spikestrips, i );
return 1;
}
@ -29546,7 +29575,7 @@ stock CreateSpikeStrip( playerid, Float: X, Float: Y, Float: Z, Float: Angle )
{
new
bVehicle = IsPlayerInAnyVehicle( playerid ),
i = Iter_Free(SpikeStrip)
i = Iter_Free( spikestrips )
;
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 ] );
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_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 );
if ( !bVehicle )
Streamer_Update( playerid ); // SyncObject( playerid ); // Shows the object instantly.
Iter_Add(SpikeStrip, i);
Streamer_Update( playerid );
Iter_Add( spikestrips, 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 )
return tires1 | (tires2 << 1) | (tires3 << 2) | (tires4 << 3);
@ -32267,11 +32329,13 @@ stock hasBadDrivebyWeapon( playerid )
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 ) )
return;
if ( cash_xp )
{
switch( level )
{
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);
}
}
if ( p_VIPLevel[ pID ] < level ) p_VIPLevel[ pID ] = level;
if ( level > 0 ) {
if ( p_VIPExpiretime[ pID ] > g_iTime ) p_VIPExpiretime[ pID ] += 2595600;
else p_VIPExpiretime[ pID ] += ( g_iTime + 2595600 );
if ( p_VIPExpiretime[ pID ] > g_iTime ) p_VIPExpiretime[ pID ] += interval;
else p_VIPExpiretime[ pID ] += ( g_iTime + interval );
}
else { p_VIPExpiretime[ pID ] = 0; }
}
@ -35941,7 +36006,7 @@ stock ShowPlayerAccountGuard( playerid )
// award user for adding their email
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 {
szBigString = ""COL_WHITE"Your account email is "COL_RED"unconfirmed\t \nConfirm Email\t"COL_GREY">>>";

View File

@ -1 +1,5 @@
(+) 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".