hardpoint
This commit is contained in:
parent
8f8c7bfe0f
commit
67e0d99db7
@ -1018,10 +1018,12 @@ stock SetGangColorsToGang( gangid )
|
|||||||
|
|
||||||
stock ReturnGangName( i )
|
stock ReturnGangName( i )
|
||||||
{
|
{
|
||||||
static
|
new
|
||||||
szGang[ 30 ];
|
szGang[ 30 ] = "Unknown";
|
||||||
if ( i == INVALID_GANG_ID || !Iter_Contains( gangs, i ) ) szGang = "Unoccupied";
|
|
||||||
else format( szGang, sizeof( szGang ), "%s", g_gangData[ i ] [ E_NAME ] );
|
if ( IsValidGangID( i ) ) {
|
||||||
|
format( szGang, sizeof( szGang ), "%s", g_gangData[ i ] [ E_NAME ] );
|
||||||
|
}
|
||||||
return szGang;
|
return szGang;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,18 +35,21 @@ enum e_GANG_ZONE_DATA
|
|||||||
static const
|
static const
|
||||||
g_gangzoneData[ ] [ e_GANG_ZONE_DATA ] =
|
g_gangzoneData[ ] [ e_GANG_ZONE_DATA ] =
|
||||||
{
|
{
|
||||||
{ -2012.0, 826.5, -1702.0, 942.5, CITY_SF },
|
{ -1725.0, 1301.5, -1538.0, 1437.5, CITY_SF },
|
||||||
{ -2521.0, 575.5, -2399.0, 800.5, CITY_SF },
|
{ -2868.0, 1012.5, -2768.0, 1217.5, CITY_SF },
|
||||||
{ -1569.0, 825.5, -1421.0, 1016.5, CITY_SF },
|
{ -2497.0, 932.5, -2392.0, 1069.5, CITY_SF },
|
||||||
{ -2397.0, 59.5, -2260.0, 232.5, CITY_SF },
|
{ -2054.0, 1084.5, -1892.0, 1171.5, CITY_SF },
|
||||||
{ -2807.0, 295.5, -2614.0, 457.5, CITY_SF },
|
{ -1569.0, 822.5, -1418.0, 1019.5, CITY_SF },
|
||||||
{ -2536.0, -318.5, -2269.0, -222.5, CITY_SF },
|
{ -2088.0, 570.5, -2010.0, 728.5, CITY_SF },
|
||||||
{ -2137.0, 115.5, -2012.0, 313.5, CITY_SF },
|
{ -2526.0, 571.5, -2391.0, 705.5, CITY_SF },
|
||||||
{ -2871.0, 1014.5, -2769.0, 1206.5, CITY_SF },
|
{ -2766.0, 324.5, -2651.0, 426.5, CITY_SF },
|
||||||
{ -1771.0, -50.5, -1685.0, 226.5, CITY_SF },
|
{ -2386.0, 70.5, -2273.0, 227.5, CITY_SF },
|
||||||
{ -2160.0, -1006.5, -1922.0, -711.5, CITY_SF },
|
{ -2139.0, 115.5, -2013.0, 311.5, CITY_SF },
|
||||||
{ -1705.0, 670.5, -1563.0, 724.5, CITY_SF },
|
{ -2001.0, 69.5, -1911.0, 219.5, CITY_SF },
|
||||||
{ -1573.0, -464.5, -1415.0, -303.5, CITY_SF }
|
{ -2096.0, -279.5, -2011.0, -111.5, CITY_SF },
|
||||||
|
{ -2523.0, -321.5, -2264.0, -215.5, CITY_SF },
|
||||||
|
{ -2153.0, -515.5, -1960.0, -374.5, CITY_SF },
|
||||||
|
{ -2000.0, 853.5, -1904.0, 913.5, CITY_SF }
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -66,6 +69,7 @@ new
|
|||||||
Iterator: turfs < MAX_TURFS >,
|
Iterator: turfs < MAX_TURFS >,
|
||||||
|
|
||||||
g_gangHardpointTurf = INVALID_GANG_TURF,
|
g_gangHardpointTurf = INVALID_GANG_TURF,
|
||||||
|
g_gangHardpointPreviousTurf = INVALID_GANG_TURF,
|
||||||
g_gangHardpointAttacker = INVALID_GANG_ID,
|
g_gangHardpointAttacker = INVALID_GANG_ID,
|
||||||
g_gangHardpointCaptureTime [ MAX_GANGS ]
|
g_gangHardpointCaptureTime [ MAX_GANGS ]
|
||||||
|
|
||||||
@ -112,12 +116,15 @@ hook OnServerTickSecond( )
|
|||||||
new
|
new
|
||||||
new_attacker = INVALID_GANG_ID;
|
new_attacker = INVALID_GANG_ID;
|
||||||
|
|
||||||
foreach ( new playerid : Player ) if ( IsPlayerInDynamicArea( playerid, g_gangTurfData[ hardpoint_turf ] [ E_AREA ] ) && GetPlayerGang( playerid ) != INVALID_GANG_ID ) {
|
foreach ( new playerid : Player ) if ( GetPlayerGang( playerid ) != INVALID_GANG_ID && IsPlayerInDynamicArea( playerid, g_gangTurfData[ hardpoint_turf ] [ E_AREA ] ) && Turf_IsAbleToTakeover( playerid ) ) {
|
||||||
new_attacker = GetPlayerGang( playerid );
|
new_attacker = GetPlayerGang( playerid );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( new_attacker != INVALID_GANG_ID ) {
|
||||||
SendClientMessageToGang( g_gangHardpointAttacker, g_gangData[ g_gangHardpointAttacker ] [ E_COLOR ], "[TURF] "COL_WHITE"The territory hardpoint is now being contested by %s!", ReturnGangName( new_attacker ) );
|
SendClientMessageToGang( g_gangHardpointAttacker, g_gangData[ g_gangHardpointAttacker ] [ E_COLOR ], "[TURF] "COL_WHITE"The territory hardpoint is now being contested by %s!", ReturnGangName( new_attacker ) );
|
||||||
|
}
|
||||||
|
|
||||||
Turf_SetHardpointAttacker( new_attacker );
|
Turf_SetHardpointAttacker( new_attacker );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +141,7 @@ hook OnServerTickSecond( )
|
|||||||
new total_capture_seconds = Turf_GetTotalCaptureSeconds( );
|
new total_capture_seconds = Turf_GetTotalCaptureSeconds( );
|
||||||
|
|
||||||
// alert gang members
|
// alert gang members
|
||||||
foreach ( new playerid : Player ) if ( GetPlayerGang( playerid ) != INVALID_GANG_ID && IsPlayerInDynamicArea( playerid, g_gangTurfData[ hardpoint_turf ] [ E_AREA ] ) )
|
foreach ( new playerid : Player ) if ( GetPlayerGang( playerid ) != INVALID_GANG_ID && IsPlayerInDynamicArea( playerid, g_gangTurfData[ hardpoint_turf ] [ E_AREA ] ) && Turf_IsAbleToTakeover( playerid ) )
|
||||||
{
|
{
|
||||||
new player_gang = GetPlayerGang( playerid );
|
new player_gang = GetPlayerGang( playerid );
|
||||||
|
|
||||||
@ -166,7 +173,7 @@ hook OnServerTickSecond( )
|
|||||||
new
|
new
|
||||||
new_attacker = INVALID_GANG_ID;
|
new_attacker = INVALID_GANG_ID;
|
||||||
|
|
||||||
foreach ( new playerid : Player ) if ( IsPlayerInDynamicArea( playerid, g_gangTurfData[ hardpoint_turf ] [ E_AREA ] ) && GetPlayerGang( playerid ) != INVALID_GANG_ID ) {
|
foreach ( new playerid : Player ) if ( GetPlayerGang( playerid ) != INVALID_GANG_ID && IsPlayerInDynamicArea( playerid, g_gangTurfData[ hardpoint_turf ] [ E_AREA ] ) && Turf_IsAbleToTakeover( playerid ) ) {
|
||||||
new_attacker = GetPlayerGang( playerid );
|
new_attacker = GetPlayerGang( playerid );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -195,17 +202,29 @@ stock Turf_CreateHardpoint( )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// force a random turf at all times
|
// force a random turf at all times
|
||||||
new previous_turf = g_gangHardpointTurf, random_turf;
|
new
|
||||||
|
random_turf = INVALID_GANG_TURF;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
random_turf = random( sizeof( g_gangzoneData ) );
|
random_turf = random( sizeof( g_gangzoneData ) );
|
||||||
}
|
}
|
||||||
while ( random_turf == previous_turf );
|
while ( random_turf == g_gangHardpointPreviousTurf );
|
||||||
|
|
||||||
// allocate new hardpoint
|
// allocate new hardpoint
|
||||||
g_gangHardpointTurf = random_turf;
|
g_gangHardpointTurf = random_turf;
|
||||||
g_gangHardpointAttacker = INVALID_GANG_ID;
|
g_gangHardpointAttacker = INVALID_GANG_ID;
|
||||||
|
|
||||||
|
// update hardpoint textdraw
|
||||||
|
foreach ( new playerid : Player )
|
||||||
|
{
|
||||||
|
if ( g_gangHardpointPreviousTurf != INVALID_GANG_TURF && IsPlayerInDynamicArea( playerid, g_gangTurfData[ g_gangHardpointPreviousTurf ] [ E_AREA ] ) ) {
|
||||||
|
CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, g_gangHardpointPreviousTurf );
|
||||||
|
}
|
||||||
|
else if ( g_gangHardpointTurf != INVALID_GANG_TURF && IsPlayerInDynamicArea( playerid, g_gangTurfData[ g_gangHardpointTurf ] [ E_AREA ] ) ) {
|
||||||
|
CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, g_gangHardpointTurf );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// redraw gangzones
|
// redraw gangzones
|
||||||
Turf_RedrawGangZonesForAll( );
|
Turf_RedrawGangZonesForAll( );
|
||||||
printf("New Hardpoint" );
|
printf("New Hardpoint" );
|
||||||
@ -229,18 +248,23 @@ hook OnServerGameDayEnd( )
|
|||||||
// payout gangs
|
// payout gangs
|
||||||
foreach ( new g : gangs )
|
foreach ( new g : gangs )
|
||||||
{
|
{
|
||||||
new
|
new Float: capture_ratio = float( g_gangHardpointCaptureTime[ g ] ) / float( total_capture_seconds );
|
||||||
earnings = floatround( float( g_gangHardpointCaptureTime[ g ] ) / float( total_capture_seconds ) * Turf_GetHardpointPrizePool( ) );
|
new earnings = floatround( capture_ratio * Turf_GetHardpointPrizePool( ) );
|
||||||
|
|
||||||
if ( earnings > 0 )
|
if ( earnings > 0 )
|
||||||
{
|
{
|
||||||
GiveGangCash( g, earnings ), SaveGangData( g );
|
g_gangData[ g ] [ E_RESPECT ] += floatround( capture_ratio * 100.0 ); // give the gang a % of respect out of how much they captured
|
||||||
|
|
||||||
|
GiveGangCash( g, earnings );
|
||||||
|
SaveGangData( g );
|
||||||
|
|
||||||
SendClientMessageToGang( g, g_gangData[ g ] [ E_COLOR ], "[GANG] "COL_GOLD"%s"COL_WHITE" has been earned from territories and deposited in the gang bank account.", cash_format( earnings ) );
|
SendClientMessageToGang( g, g_gangData[ g ] [ E_COLOR ], "[GANG] "COL_GOLD"%s"COL_WHITE" has been earned from territories and deposited in the gang bank account.", cash_format( earnings ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// reset hardpoint
|
// reset hardpoint
|
||||||
|
g_gangHardpointPreviousTurf = g_gangHardpointTurf;
|
||||||
g_gangHardpointTurf = INVALID_GANG_TURF;
|
g_gangHardpointTurf = INVALID_GANG_TURF;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -273,7 +297,14 @@ stock Turf_SetHardpointAttacker( gangid )
|
|||||||
g_gangHardpointAttacker = gangid;
|
g_gangHardpointAttacker = gangid;
|
||||||
|
|
||||||
// alert gang
|
// alert gang
|
||||||
SendClientMessageToGang( g_gangHardpointAttacker, g_gangData[ g_gangHardpointAttacker ] [ E_COLOR ], "[TURF] "COL_WHITE"The gang is now contesting the territory hardpoint!" );
|
if ( gangid != INVALID_GANG_ID ) {
|
||||||
|
SendClientMessageToGang( gangid, g_gangData[ gangid ] [ E_COLOR ], "[TURF] "COL_WHITE"The gang is now contesting the territory hardpoint!" );
|
||||||
|
}
|
||||||
|
|
||||||
|
// update label
|
||||||
|
foreach ( new playerid : Player ) if ( g_gangHardpointTurf != INVALID_GANG_TURF && IsPlayerInDynamicArea( playerid, g_gangTurfData[ g_gangHardpointTurf ] [ E_AREA ] ) ) {
|
||||||
|
CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, g_gangHardpointTurf );
|
||||||
|
}
|
||||||
|
|
||||||
// redraw
|
// redraw
|
||||||
Turf_RedrawGangZonesForAll( );
|
Turf_RedrawGangZonesForAll( );
|
||||||
@ -301,6 +332,26 @@ hook OnPlayerLeaveDynArea( playerid, areaid )
|
|||||||
return Y_HOOKS_CONTINUE_RETURN_1;
|
return Y_HOOKS_CONTINUE_RETURN_1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public OnPlayerUpdateGangZone( playerid, zoneid )
|
||||||
|
{
|
||||||
|
if ( ! IsPlayerMovieMode( playerid ) )
|
||||||
|
{
|
||||||
|
if ( zoneid == INVALID_GANG_TURF )
|
||||||
|
return PlayerTextDrawSetString( playerid, g_ZoneOwnerTD[ playerid ], "_" );
|
||||||
|
|
||||||
|
if ( g_gangTurfData[ zoneid ] [ E_FACILITY_GANG ] != INVALID_GANG_ID ) {
|
||||||
|
PlayerTextDrawSetString( playerid, g_ZoneOwnerTD[ playerid ], sprintf( "~p~(FACILITY)~n~~w~~h~%s", ReturnGangName( g_gangTurfData[ zoneid ] [ E_OWNER ] ) ) );
|
||||||
|
} else {
|
||||||
|
if ( g_gangTurfData[ g_gangHardpointTurf ] [ E_ID ] != g_gangTurfData[ zoneid ] [ E_ID ] ) {
|
||||||
|
PlayerTextDrawSetString( playerid, g_ZoneOwnerTD[ playerid ], "~b~~h~(INACTIVE HARDPOINT)~n~~w~~h~Unchallenged" );
|
||||||
|
} else {
|
||||||
|
PlayerTextDrawSetString( playerid, g_ZoneOwnerTD[ playerid ], sprintf( "~r~~h~(ACTIVE HARDPOINT)~n~~w~~h~%s", g_gangHardpointAttacker != INVALID_GANG_ID ? ( ReturnGangName( g_gangHardpointAttacker ) ) : ( "Unchallenged" ) ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* ** Functions ** */
|
/* ** Functions ** */
|
||||||
stock Turf_Create( Float: min_x, Float: min_y, Float: max_x, Float: max_y, owner_id = INVALID_GANG_ID, color = COLOR_GANGZONE, facility_gang_id = INVALID_GANG_ID )
|
stock Turf_Create( Float: min_x, Float: min_y, Float: max_x, Float: max_y, owner_id = INVALID_GANG_ID, color = COLOR_GANGZONE, facility_gang_id = INVALID_GANG_ID )
|
||||||
{
|
{
|
||||||
@ -407,34 +458,28 @@ stock Turf_GetCentrePos( zoneid, &Float: X, &Float: Y ) // should return the cen
|
|||||||
Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MIN_Y, Y );
|
Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MIN_Y, Y );
|
||||||
}
|
}
|
||||||
|
|
||||||
stock GetPlayersInGangZone( z, g, &is_afk = 0, &in_air = 0 )
|
stock GetPlayersInGangZone( z, g )
|
||||||
{
|
{
|
||||||
if ( g == INVALID_GANG_ID )
|
if ( g == INVALID_GANG_ID )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
new count = 0;
|
new
|
||||||
new Float: Z;
|
count = 0;
|
||||||
|
|
||||||
foreach ( new i : Player ) if ( p_Class[ i ] == CLASS_CIVILIAN && p_GangID[ i ] == g && IsPlayerInDynamicArea( i, g_gangTurfData[ z ] [ E_AREA ] ) )
|
foreach ( new i : Player ) if ( p_GangID[ i ] == g && IsPlayerInDynamicArea( i, g_gangTurfData[ z ] [ E_AREA ] ) && Turf_IsAbleToTakeover( i ) ) {
|
||||||
{
|
|
||||||
if ( ! p_AntiSpawnKillEnabled{ i } && ! IsPlayerPassive( i ) && GetPlayerState( i ) != PLAYER_STATE_SPECTATING )
|
|
||||||
{
|
|
||||||
if ( IsPlayerAFK( i ) )
|
|
||||||
{
|
|
||||||
is_afk++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ( GetPlayerPos( i, Z, Z, Z ) && Z >= 300.0 )
|
|
||||||
{
|
|
||||||
in_air++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stock Turf_IsAbleToTakeover( i ) {
|
||||||
|
new
|
||||||
|
Float: Z;
|
||||||
|
|
||||||
|
GetPlayerPos( i, Z, Z, Z );
|
||||||
|
return p_Class[ i ] == CLASS_CIVILIAN && ! p_AntiSpawnKillEnabled{ i } && ! IsPlayerPassive( i ) && GetPlayerState( i ) != PLAYER_STATE_SPECTATING && ! IsPlayerAFK( i ) && Z <= 250.0;
|
||||||
|
}
|
||||||
|
|
||||||
stock Turf_RedrawPlayerGangZones( playerid )
|
stock Turf_RedrawPlayerGangZones( playerid )
|
||||||
{
|
{
|
||||||
foreach ( new x : turfs )
|
foreach ( new x : turfs )
|
||||||
|
@ -988,19 +988,6 @@ public OnServerSecondTick( )
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OnPlayerUpdateGangZone( playerid, zoneid )
|
|
||||||
{
|
|
||||||
if ( ! p_inMovieMode{ playerid } )
|
|
||||||
{
|
|
||||||
if ( zoneid == INVALID_GANG_TURF )
|
|
||||||
return PlayerTextDrawSetString( playerid, g_ZoneOwnerTD[ playerid ], "_" );
|
|
||||||
|
|
||||||
// if ( p_GangID[ playerid ] != INVALID_GANG_ID && g_gangTurfData[ zoneid ] [ E_OWNER ] == INVALID_GANG_ID ) ShowPlayerHelpDialog( playerid, 2000, "You can take over this turf by typing ~g~/takeover" );
|
|
||||||
PlayerTextDrawSetString( playerid, g_ZoneOwnerTD[ playerid ], sprintf( "~r~~h~(%s)~n~~w~~h~%s", g_gangTurfData[ zoneid ] [ E_FACILITY_GANG ] != INVALID_GANG_ID ? ( "FACILITY" ) : ( "TERRITORY" ), ReturnGangName( g_gangTurfData[ zoneid ] [ E_OWNER ] ) ) );
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OnRulesHTTPResponse( index, response_code, data[ ] )
|
public OnRulesHTTPResponse( index, response_code, data[ ] )
|
||||||
{
|
{
|
||||||
if ( response_code == 200 )
|
if ( response_code == 200 )
|
||||||
|
Loading…
Reference in New Issue
Block a user