address issue with player unable to rob chuff ... move progress bar data there

This commit is contained in:
Lorenc Pekaj 2018-10-10 20:05:55 +11:00
parent cca1f347f1
commit 3524501d76
2 changed files with 140 additions and 120 deletions

View File

@ -151,9 +151,10 @@ hook OnPlayerKeyStateChange( playerid, newkeys, oldkeys )
if ( PRESSED( KEY_WALK ) ) if ( PRESSED( KEY_WALK ) )
{ {
if ( CanPlayerExitEntrance( playerid ) && player_vehicle ) if ( ! player_vehicle )
{ {
new Float: fX, Float: fY; new
Float: fX, Float: fY;
UpdatePlayerEntranceExitTick( playerid ); UpdatePlayerEntranceExitTick( playerid );
@ -212,8 +213,137 @@ hook OnPlayerSpawn( playerid )
return Y_HOOKS_CONTINUE_RETURN_1; return Y_HOOKS_CONTINUE_RETURN_1;
} }
/* ** Commands ** */ hook OnPlayerWeaponShot( playerid, weaponid, hittype, hitid, Float: fX, Float: fY, Float: fZ )
{
if ( hittype == BULLET_HIT_TYPE_VEHICLE )
{
// Secured Truck!
if ( g_secureTruckVehicle == hitid && GetPlayerSurfingVehicleID( playerid ) != g_secureTruckVehicle && IsPlayerConnected( g_secureTruckDriver ) && GetPlayerClass( playerid ) != CLASS_POLICE )
{
if ( IsSecurityDriverAFK( ) )
return 1; // Nothing cheeky when he's disabled.
static
Float: X, Float: Y, Float: Z;
GetPlayerPos( playerid, X, Y, Z );
for ( new i = 0; i < sizeof( g_secureTruckOffsets ); i++ ) if ( g_secureTruckOffsets[ i ] [ E_ENABLED ] )
{
if ( IsPointToPoint( 0.25, fX, fY, fZ, g_secureTruckOffsets[ i ] [ E_X ], g_secureTruckOffsets[ i ] [ E_Y ], g_secureTruckOffsets[ i ] [ E_Z ] ) )
{
new
Float: hingeDamage = floatdiv( GetWeaponDamageFromDistance( weaponid, GetVehicleDistanceFromPoint( hitid, X, Y, Z ) ), 2 );
if ( floatround( g_secureTruckOffsets[ i ] [ E_HP ] -= hingeDamage ) > 0.0 ) {
SendClientMessage( g_secureTruckDriver, 0x112233FF, "[0x01][NPC] PROVOKED." );
format( szNormalString, 6, "%0.0f%%", g_secureTruckOffsets[ i ] [ E_HP ] );
UpdateDynamic3DTextLabelText( g_secureTruckVehicleLabel[ i ], setAlpha( COLOR_GREY, 0x90 ), szNormalString );
} else {
g_secureTruckOffsets[ i ] [ E_HP ] = 0.0;
g_secureTruckOffsets[ i ] [ E_ENABLED ] = false;
UpdateDynamic3DTextLabelText( g_secureTruckVehicleLabel[ i ], setAlpha( COLOR_RED, 0x90 ), "0%" );
if ( allSecurityOffsetsShot( ) ) {
g_secureTruckData[ E_LOOT ] = RandomEx( 20000, 30000 );
g_secureTruckData[ E_ROBBED ] = false;
g_secureTruckData[ E_OPEN ] = true;
g_secureTruckData[ E_BEING_ROBBED ] = false;
SetVehicleParamsCarDoors( hitid, 0, 0, 1, 1 );
ShowPlayerHelpDialog( playerid, 5000, "You've successfully disabled the security truck.~n~~n~To rob it, press ~r~~k~~SNEAK_ABOUT~~w~ behind the truck." );
SendClientMessage( g_secureTruckDriver, 0x112233FF, "[0x00][NPC] TRUCK DISABLED." );
}
}
break;
}
}
return 1;
}
}
return 1;
}
hook OnPlayerProgressUpdate( playerid, progressid, bool: canceled, params )
{
static
Float: X, Float: Y, Float: Z, Float: Angle;
if ( progressid == PROGRESS_ROBTRUCK )
{
GetVehiclePos( g_secureTruckVehicle, X, Y, Z );
GetVehicleZAngle( g_secureTruckVehicle, Angle );
X += ( SECURE_TRUCK_DISTANCE * floatsin( -Angle + 180, degrees ) );
Y += ( SECURE_TRUCK_DISTANCE * floatcos( -Angle + 180, degrees ) );
if ( ! IsPlayerInRangeOfPoint( playerid, SECURE_TRUCK_RADIUS, X, Y, Z ) || !IsPlayerSpawned( playerid ) || !IsPlayerConnected( playerid ) || IsPlayerInAnyVehicle( playerid ) || GetPlayerState( playerid ) == PLAYER_STATE_WASTED || canceled )
{
g_secureTruckData[ E_BEING_ROBBED ] = false;
StopProgressBar( playerid );
return Y_HOOKS_BREAK_RETURN_1;
}
}
return 1;
}
hook OnProgressCompleted( playerid, progressid, params )
{
static
Float: X, Float: Y, Float: Z, Float: Angle;
if ( progressid == PROGRESS_ROBTRUCK )
{
GetVehiclePos( g_secureTruckVehicle, X, Y, Z );
GetVehicleZAngle( g_secureTruckVehicle, Angle );
X += ( SECURE_TRUCK_DISTANCE * floatsin( -Angle + 180, degrees ) );
Y += ( SECURE_TRUCK_DISTANCE * floatcos( -Angle + 180, degrees ) );
if ( IsPlayerInRangeOfPoint( playerid, SECURE_TRUCK_RADIUS, X, Y, Z ) && IsPlayerSpawned( playerid ) && IsPlayerConnected( playerid ) && !IsPlayerInAnyVehicle( playerid ) && GetPlayerState( playerid ) != PLAYER_STATE_WASTED )
{
if ( g_secureTruckData[ E_BEING_ROBBED ] && g_secureTruckData[ E_OPEN ] == true && g_secureTruckData[ E_ROBBED ] == false )
{
new
szCity[ MAX_ZONE_NAME ],
szLocation[ MAX_ZONE_NAME ]
;
GetPlayerPos ( playerid, X, Y, Z );
Get2DCity ( szCity, X, Y, Z );
GetZoneFromCoordinates ( szLocation, X, Y, Z );
g_secureTruckData[ E_BEING_ROBBED ] = true;
g_secureTruckData[ E_ROBBED ] = true;
GivePlayerWantedLevel ( playerid, 24 );
GivePlayerScore ( playerid, 5 );
GivePlayerExperience ( playerid, E_ROBBERY, 2.0 );
if ( random( 101 ) >= 20 ) {
if ( IsPlayerConnected( playerid ) && p_MoneyBag{ playerid } == true ) {
new extra_loot = floatround( float( g_secureTruckData[ E_LOOT ] ) * ROBBERY_MONEYCASE_BONUS );
g_secureTruckData[ E_LOOT ] = extra_loot;
}
ach_HandlePlayerRobbery( playerid );
SplitPlayerCashForGang( playerid, float( g_secureTruckData[ E_LOOT ] ) );
SendGlobalMessage( -1, ""COL_GOLD"[ROBBERY]"COL_WHITE" %s(%d) has robbed "COL_GOLD"%s"COL_WHITE" from a Security Truck near %s in %s!", ReturnPlayerName( playerid ), playerid, cash_format( g_secureTruckData[ E_LOOT ] ), szLocation, szCity );
} else {
CreateCrimeReport( playerid );
SendClientMessageToCops( -1, ""COL_BLUE"[ROBBERY]"COL_WHITE" %s has failed robbing a security truck near %s, suspect is armed and dangerous.", ReturnPlayerName( playerid ), szLocation );
SendServerMessage( playerid, "You've found nothing tangible in here. Cops have been alerted." );
}
SendClientMessage( g_secureTruckDriver, 0x112233FF, "[0x02] RESTART." );
}
else SendError( playerid, "An unexpected error occurred." );
}
}
return 1;
}
/* ** Commands ** */
CMD:chuffloc( playerid, params[ ] ) CMD:chuffloc( playerid, params[ ] )
{ {
static static

View File

@ -2597,7 +2597,7 @@ public OnPlayerSpawn( playerid )
return 1; return 1;
} }
public OnPlayerWeaponShot( playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ ) public OnPlayerWeaponShot( playerid, weaponid, hittype, hitid, Float: fX, Float: fY, Float: fZ )
{ {
if ( p_AdminLevel[ playerid ] < 1 && IsWeaponBanned( weaponid ) ) { if ( p_AdminLevel[ playerid ] < 1 && IsWeaponBanned( weaponid ) ) {
return 0; return 0;
@ -2643,7 +2643,7 @@ public OnPlayerWeaponShot( playerid, weaponid, hittype, hitid, Float:fX, Float:f
else if ( hittype == BULLET_HIT_TYPE_VEHICLE ) else if ( hittype == BULLET_HIT_TYPE_VEHICLE )
{ {
new new
Float: Health, Float: Damage, Float: Health,
iModel = GetVehicleModel( hitid ) iModel = GetVehicleModel( hitid )
; ;
@ -2651,52 +2651,15 @@ public OnPlayerWeaponShot( playerid, weaponid, hittype, hitid, Float:fX, Float:f
g_VehicleLastAttacked[ hitid ] = g_iTime; g_VehicleLastAttacked[ hitid ] = g_iTime;
// BMX, Bike, Mountain Bike, Train, Train Cargo, Train Passenger, Tram, Freight Box // BMX, Bike, Mountain Bike, Train, Train Cargo, Train Passenger, Tram, Freight Box
if ( iModel != 481 && iModel != 509 && iModel != 510 && iModel != 537 && iModel != 569 && iModel != 570 && iModel != 538 && iModel != 449 && iModel != 590 ) { if ( iModel != 481 && iModel != 509 && iModel != 510 && iModel != 537 && iModel != 569 && iModel != 570 && iModel != 538 && iModel != 449 && iModel != 590 )
{
GetPlayerPos( playerid, X, Y, Z ); GetPlayerPos( playerid, X, Y, Z );
GetVehicleHealth( hitid, Health ); GetVehicleHealth( hitid, Health );
Damage = GetWeaponDamageFromDistance( weaponid, GetVehicleDistanceFromPoint( hitid, X, Y, Z ) );
#if defined __cnr__chuffsec
// Secured Truck!
if ( g_secureTruckVehicle == hitid && GetPlayerSurfingVehicleID( playerid ) != g_secureTruckVehicle && IsPlayerConnected( g_secureTruckDriver ) && p_Class[ playerid ] != CLASS_POLICE )
{
if ( IsSecurityDriverAFK( ) )
return 1; // Nothing cheeky when he's disabled.
for( new i = 0; i < sizeof( g_secureTruckOffsets ); i++ ) if ( g_secureTruckOffsets[ i ] [ E_ENABLED ] )
{
if ( IsPointToPoint( 0.25, fX, fY, fZ, g_secureTruckOffsets[ i ] [ E_X ], g_secureTruckOffsets[ i ] [ E_Y ], g_secureTruckOffsets[ i ] [ E_Z ] ) )
{
new Float: hingeDamage = floatdiv( Damage, 2 );
if ( floatround( g_secureTruckOffsets[ i ] [ E_HP ] -= hingeDamage ) > 0.0 ) {
SendClientMessage( g_secureTruckDriver, 0x112233FF, "[0x01][NPC] PROVOKED." );
format( szNormalString, 6, "%0.0f%%", g_secureTruckOffsets[ i ] [ E_HP ] );
UpdateDynamic3DTextLabelText( g_secureTruckVehicleLabel[ i ], setAlpha( COLOR_GREY, 0x90 ), szNormalString );
} else {
g_secureTruckOffsets[ i ] [ E_HP ] = 0.0;
g_secureTruckOffsets[ i ] [ E_ENABLED ] = false;
UpdateDynamic3DTextLabelText( g_secureTruckVehicleLabel[ i ], setAlpha( COLOR_RED, 0x90 ), "0%" );
if ( allSecurityOffsetsShot( ) ) {
g_secureTruckData[ E_LOOT ] = RandomEx( 20000, 30000 );
g_secureTruckData[ E_ROBBED ] = false;
g_secureTruckData[ E_OPEN ] = true;
g_secureTruckData[ E_BEING_ROBBED ] = false;
SetVehicleParamsCarDoors( hitid, 0, 0, 1, 1 );
ShowPlayerHelpDialog( playerid, 5000, "You've successfully disabled the security truck.~n~~n~To rob it, press ~r~~k~~SNEAK_ABOUT~~w~ behind the truck." );
SendClientMessage( g_secureTruckDriver, 0x112233FF, "[0x00][NPC] TRUCK DISABLED." );
}
}
break;
}
}
return 1;
}
#endif
new new
iDriver = GetVehicleDriver( hitid ); Float: Damage = GetWeaponDamageFromDistance( weaponid, GetVehicleDistanceFromPoint( hitid, X, Y, Z ) ),
iDriver = GetVehicleDriver( hitid )
;
if ( iDriver == INVALID_PLAYER_ID ) if ( iDriver == INVALID_PLAYER_ID )
{ {
@ -3733,9 +3696,6 @@ public OnPlayerLeaveGang( playerid, gangid, reason )
public OnPlayerProgressUpdate( playerid, progressid, bool: canceled, params ) public OnPlayerProgressUpdate( playerid, progressid, bool: canceled, params )
{ {
static
Float: X, Float: Y, Float: Z;
if ( progressid == PROGRESS_CRACKING || progressid == PROGRESS_BRUTEFORCE ) { if ( progressid == PROGRESS_CRACKING || progressid == PROGRESS_BRUTEFORCE ) {
if ( !IsPlayerSpawned( playerid ) || !IsPlayerInDynamicCP( playerid, g_houseData[ p_HouseCrackingPW[ playerid ] ] [ E_CHECKPOINT ] [ 0 ] ) || !IsPlayerConnected( playerid ) || IsPlayerInAnyVehicle( playerid ) || canceled ) if ( !IsPlayerSpawned( playerid ) || !IsPlayerInDynamicCP( playerid, g_houseData[ p_HouseCrackingPW[ playerid ] ] [ E_CHECKPOINT ] [ 0 ] ) || !IsPlayerConnected( playerid ) || IsPlayerInAnyVehicle( playerid ) || canceled )
return g_houseData[ p_HouseCrackingPW[ playerid ] ] [ E_BEING_CRACKED ] = false, StopProgressBar( playerid ), 1; return g_houseData[ p_HouseCrackingPW[ playerid ] ] [ E_BEING_CRACKED ] = false, StopProgressBar( playerid ), 1;
@ -3783,23 +3743,6 @@ public OnPlayerProgressUpdate( playerid, progressid, bool: canceled, params )
if ( !IsPlayerInRangeOfPoint( playerid, 2.0, 2084.2842, 1234.0254, 414.7454 ) || !IsPlayerInMethlab( playerid ) || canceled ) if ( !IsPlayerInRangeOfPoint( playerid, 2.0, 2084.2842, 1234.0254, 414.7454 ) || !IsPlayerInMethlab( playerid ) || canceled )
return DeletePVar( playerid, "pouring_chemical" ), StopProgressBar( playerid ), 1; return DeletePVar( playerid, "pouring_chemical" ), StopProgressBar( playerid ), 1;
} }
#if defined __cnr__chuffsec
else if ( progressid == PROGRESS_ROBTRUCK )
{
static Float: Angle;
GetVehiclePos( g_secureTruckVehicle, X, Y, Z );
GetVehicleZAngle( g_secureTruckVehicle, Angle );
X += ( SECURE_TRUCK_DISTANCE * floatsin( -Angle + 180, degrees ) );
Y += ( SECURE_TRUCK_DISTANCE * floatcos( -Angle + 180, degrees ) );
if ( !IsPlayerInRangeOfPoint( playerid, SECURE_TRUCK_RADIUS, X, Y, Z ) || !IsPlayerSpawned( playerid ) || !IsPlayerConnected( playerid ) || IsPlayerInAnyVehicle( playerid ) || GetPlayerState( playerid ) == PLAYER_STATE_WASTED || canceled )
{
g_secureTruckData[ E_BEING_ROBBED ] = false;
StopProgressBar( playerid );
return 1;
}
}
#endif
return 1; return 1;
} }
@ -4077,63 +4020,10 @@ public OnProgressCompleted( playerid, progressid, params )
SendServerMessage( playerid, "You've yielded a pound of meth. Take your bags over to "COL_GREY"Cluckin' Bell"COL_WHITE" for exportation." ); SendServerMessage( playerid, "You've yielded a pound of meth. Take your bags over to "COL_GREY"Cluckin' Bell"COL_WHITE" for exportation." );
} }
} }
#if defined __cnr__chuffsec
case PROGRESS_ROBTRUCK:
{
static Float: Angle;
GetVehiclePos( g_secureTruckVehicle, X, Y, Z );
GetVehicleZAngle( g_secureTruckVehicle, Angle );
X += ( SECURE_TRUCK_DISTANCE * floatsin( -Angle + 180, degrees ) );
Y += ( SECURE_TRUCK_DISTANCE * floatcos( -Angle + 180, degrees ) );
if ( IsPlayerInRangeOfPoint( playerid, SECURE_TRUCK_RADIUS, X, Y, Z ) && IsPlayerSpawned( playerid ) && IsPlayerConnected( playerid ) && !IsPlayerInAnyVehicle( playerid ) && GetPlayerState( playerid ) != PLAYER_STATE_WASTED )
{
if ( g_secureTruckData[ E_BEING_ROBBED ] && g_secureTruckData[ E_OPEN ] == true && g_secureTruckData[ E_ROBBED ] == false )
{
new
szCity[ MAX_ZONE_NAME ],
szLocation[ MAX_ZONE_NAME ]
;
GetPlayerPos ( playerid, X, Y, Z );
Get2DCity ( szCity, X, Y, Z );
GetZoneFromCoordinates ( szLocation, X, Y, Z );
g_secureTruckData[ E_BEING_ROBBED ] = true;
g_secureTruckData[ E_ROBBED ] = true;
GivePlayerWantedLevel ( playerid, 24 );
GivePlayerScore ( playerid, 5 );
GivePlayerExperience ( playerid, E_ROBBERY, 2.0 );
if ( random( 101 ) >= 20 ) {
if ( IsPlayerConnected( playerid ) && p_MoneyBag{ playerid } == true ) {
new extra_loot = floatround( float( g_secureTruckData[ E_LOOT ] ) * ROBBERY_MONEYCASE_BONUS );
g_secureTruckData[ E_LOOT ] = extra_loot;
}
Achievement::HandlePlayerRobbery( playerid );
SplitPlayerCashForGang( playerid, float( g_secureTruckData[ E_LOOT ] ) );
SendGlobalMessage( -1, ""COL_GOLD"[ROBBERY]"COL_WHITE" %s(%d) has robbed "COL_GOLD"%s"COL_WHITE" from a Security Truck near %s in %s!", ReturnPlayerName( playerid ), playerid, cash_format( g_secureTruckData[ E_LOOT ] ), szLocation, szCity );
} else {
CreateCrimeReport( playerid );
SendClientMessageToCops( -1, ""COL_BLUE"[ROBBERY]"COL_WHITE" %s has failed robbing a security truck near %s, suspect is armed and dangerous.", ReturnPlayerName( playerid ), szLocation );
SendServerMessage( playerid, "You've found nothing tangible in here. Cops have been alerted." );
}
SendClientMessage( g_secureTruckDriver, 0x112233FF, "[0x02] RESTART." );
}
else SendError( playerid, "An unexpected error occurred." );
}
}
#endif
} }
return 1; return 1;
} }
stock randomArrayItem( const array[ ], exclude = 0xFFFF, arraysize = sizeof( array ) ) stock randomArrayItem( const array[ ], exclude = 0xFFFF, arraysize = sizeof( array ) )
{ {
new new