diff --git a/gamemodes/irresistible/cnr/commands/admin/admin_four.pwn b/gamemodes/irresistible/cnr/commands/admin/admin_four.pwn index c6886e8..544c5fc 100644 --- a/gamemodes/irresistible/cnr/commands/admin/admin_four.pwn +++ b/gamemodes/irresistible/cnr/commands/admin/admin_four.pwn @@ -24,6 +24,7 @@ CMD:destroyallav( playerid, params[ ] ) return 1; } +#if !defined __cloudy_event_system CMD:event( playerid, params[ ] ) { if ( p_AdminLevel[ playerid ] < 4 ) return SendError( playerid, ADMIN_COMMAND_REJECT ); @@ -31,6 +32,7 @@ CMD:event( playerid, params[ ] ) SendClientMessageFormatted( playerid, -1, ""COL_PINK"[ADMIN]"COL_WHITE" You have your world to 69." ); return SetPlayerVirtualWorld( playerid, 69 ); } +#endif CMD:setworld( playerid, params[ ] ) { diff --git a/gamemodes/irresistible/cnr/commands/cmd_help.pwn b/gamemodes/irresistible/cnr/commands/cmd_help.pwn index 5526263..985f183 100644 --- a/gamemodes/irresistible/cnr/commands/cmd_help.pwn +++ b/gamemodes/irresistible/cnr/commands/cmd_help.pwn @@ -58,7 +58,7 @@ hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) return cmd_help( playerid, "" ); if ( listitem >= 64 ) - return SendError( playerid, "Unable to process request, contact Damen in regards to this." ); + return SendError( playerid, "Unable to process request, contact " SERVER_OPERATOR " in regards to this." ); new digits[ 64 ]; diff --git a/gamemodes/irresistible/cnr/features/_features.pwn b/gamemodes/irresistible/cnr/features/_features.pwn index 935b172..cc9696e 100644 --- a/gamemodes/irresistible/cnr/features/_features.pwn +++ b/gamemodes/irresistible/cnr/features/_features.pwn @@ -22,6 +22,9 @@ #include "irresistible\cnr\features\visage\_visage.pwn" #include "irresistible\cnr\features\battleroyale\_battleroyale.pwn" +// developer exclusive modules +#include "irresistible\cnr\features\cloudy\_cloudy.pwn" + // special (xmas/easter/nye) // #include "irresistible\cnr\features\christmas.pwn" #include "irresistible\cnr\features\eastereggs.pwn" diff --git a/gamemodes/irresistible/cnr/features/animations.pwn b/gamemodes/irresistible/cnr/features/animations.pwn index 74e34ac..f833194 100644 --- a/gamemodes/irresistible/cnr/features/animations.pwn +++ b/gamemodes/irresistible/cnr/features/animations.pwn @@ -354,7 +354,6 @@ stock CreateLoopingAnimation( playerid, animlib[ ], animname[ ], Float:Speed, lo else if ( IsPlayerInWater( playerid ) ) return SendError( playerid, "You cannot use this command since you're in water." ); else if ( IsPlayerMining( playerid ) ) return SendError( playerid, "You cannot use this command since you're mining." ); else if ( IsPlayerBoxing( playerid ) ) return SendError( playerid, "You cannot use this command since you're boxing." ); - else if ( IsPlayerInEvent( playerid ) ) return SendError( playerid, "You cannot use this command since you're in an event." ); else if ( GetPlayerAnimationIndex( playerid ) == 1660 ) return SendError( playerid, "You cannot use this command since you're using a vending machine." ); else if ( IsPlayerAttachedObjectSlotUsed( playerid, 0 ) ) return SendError( playerid, "You cannot use this command since you're robbing." ); else if ( IsPlayingAnimation( playerid, "ROB_BANK", "CAT_Safe_Rob" ) ) return SendError( playerid, "You cannot use this command since you're robbing." ); @@ -365,6 +364,16 @@ stock CreateLoopingAnimation( playerid, animlib[ ], animname[ ], Float:Speed, lo else if ( GetPlayerWeapon( playerid ) == 46 ) return SendError( playerid, "You cannot use this command while wearing a parachute." ); else { + // event check + #if defined __cloudy_event_system + if ( IsPlayerInEvent( playerid ) && ! EventSettingAllow( EVENT_SETTING_KIDNAP ) ) + #else + if ( IsPlayerInEvent( playerid ) ) + #endif + { + return SendError( playerid, "You cannot use this command since you're in an event." ); + } + SetPlayerSpecialAction( playerid, 0 ); if ( specialaction == 0 ) { ApplyAnimation( playerid, animlib, "null", 0.0, 0, 0, 0, 0, 0 ); diff --git a/gamemodes/irresistible/cnr/features/c4.pwn b/gamemodes/irresistible/cnr/features/c4.pwn index cc7a4d1..84ce6a3 100644 --- a/gamemodes/irresistible/cnr/features/c4.pwn +++ b/gamemodes/irresistible/cnr/features/c4.pwn @@ -154,7 +154,11 @@ hook OnPlayerKeyStateChange( playerid, newkeys, oldkeys ) { /* ** Commands ** */ CMD:c4( playerid, params[ ] ) { - if ( IsPlayerInEvent( playerid ) ) return SendError( playerid, "You cannot use this command since you're in an event." ); + #if defined __cloudy_event_system + if ( IsPlayerInEvent( playerid ) && ! EventSettingAllow( EVENT_SETTING_C4 ) ) { + return SendError( playerid, "You cannot use this command since you're in an event." ); + } + #endif if ( !strcmp( params, "plant", true, 5 ) ) { diff --git a/gamemodes/irresistible/cnr/features/cloudy/.gitignore b/gamemodes/irresistible/cnr/features/cloudy/.gitignore new file mode 100644 index 0000000..93604c3 --- /dev/null +++ b/gamemodes/irresistible/cnr/features/cloudy/.gitignore @@ -0,0 +1,3 @@ +*.pwn +*.amx +!_cloudy.pwn \ No newline at end of file diff --git a/gamemodes/irresistible/cnr/features/cloudy/_cloudy.pwn b/gamemodes/irresistible/cnr/features/cloudy/_cloudy.pwn new file mode 100644 index 0000000..3ad8c8e --- /dev/null +++ b/gamemodes/irresistible/cnr/features/cloudy/_cloudy.pwn @@ -0,0 +1,9 @@ +/* + * Irresistible Gaming (c) 2019 + * Developed by Cloudy + * Module: cnr\features\cloudy\_cloudy.pwn + * Purpose: encloses all of cloudy's module related work + */ + +/* ** Includes ** */ +#tryinclude "irresistible\cnr\features\cloudy\event_system.pwn" \ No newline at end of file diff --git a/gamemodes/irresistible/cnr/features/cop/arrest.pwn b/gamemodes/irresistible/cnr/features/cop/arrest.pwn index 9717ce1..66879ba 100644 --- a/gamemodes/irresistible/cnr/features/cop/arrest.pwn +++ b/gamemodes/irresistible/cnr/features/cop/arrest.pwn @@ -29,7 +29,7 @@ hook OnPlayerEnterDynamicCP( playerid, checkpointid ) checkpointid == g_Checkpoints[ CP_DROP_OFF_DIABLO ] || checkpointid == g_Checkpoints[ CP_DROP_OFF_QUBRADOS ] || checkpointid == g_Checkpoints[ CP_DROP_OFF_COP_LS ] || checkpointid == g_Checkpoints[ CP_DROP_OFF_FBI_LS ] || checkpointid == g_Checkpoints[ CP_DROP_OFF_FBI_LV ] || checkpointid == g_Checkpoints[ CP_DROP_OFF_COP_LV ] || - checkpointid == g_Checkpoints[ CP_DROP_OFF_FBI ] || checkpointid == g_Checkpoints[ CP_DROP_OFF_HELI ] ) + checkpointid == g_Checkpoints[ CP_DROP_OFF_FBI ] || checkpointid == g_Checkpoints[ CP_DROP_OFF_HELI ] ) { if ( p_Class[ playerid ] != CLASS_POLICE ) return 1; @@ -115,9 +115,19 @@ CMD:taze( playerid, params[ ] ) if ( IsPlayerJailed( playerid ) ) return SendError( playerid, "You cannot use this command while in jail." ); if ( IsPlayerTied( victimid ) ) return SendError( playerid, "Tazing a tied player is pretty useless, though you can use /untie for a harder job!" ); if ( IsPlayerLoadingObjects( victimid ) ) return SendError( playerid, "This player is in a object-loading state." ); - if ( IsPlayerInEvent( playerid ) ) return SendError( playerid, "You cannot use this command since you're in an event." ); if ( GetPlayerState( playerid ) == PLAYER_STATE_WASTED ) return SendError( playerid, "You cannot use this command since you are dead." ); if ( p_TazingImmunity[ victimid ] > g_iTime ) return SendError( playerid, "You must wait %d seconds before tazing this player.", p_TazingImmunity[ victimid ] - g_iTime ); + + // event check + #if defined __cloudy_event_system + if ( IsPlayerInEvent( playerid ) && ! EventSettingAllow( EVENT_SETTING_KIDNAP ) ) + #else + if ( IsPlayerInEvent( playerid ) ) + #endif + { + return SendError( playerid, "You cannot use this command since you're in an event." ); + } + if ( random( 101 ) < 90 ) { GameTextForPlayer( victimid, "~n~~r~TAZED!", 2000, 4 ); diff --git a/gamemodes/irresistible/cnr/features/gangs/gangs.pwn b/gamemodes/irresistible/cnr/features/gangs/gangs.pwn index 067e070..8b98ff3 100644 --- a/gamemodes/irresistible/cnr/features/gangs/gangs.pwn +++ b/gamemodes/irresistible/cnr/features/gangs/gangs.pwn @@ -635,7 +635,7 @@ thread OnPlayerGangLoaded( playerid ) else { p_GangID[ playerid ] = -1; - SendServerMessage( playerid, "Had an issue loading your gang. Contact Damen (0x92F)." ); + SendServerMessage( playerid, "Had an issue loading your gang. Contact " SERVER_OPERATOR " (0x92F)." ); printf("[GANG] [ERROR] Had an issue loading a gang row id %d", gang_sql_id ); } } diff --git a/gamemodes/irresistible/cnr/features/gangs/turfs.pwn b/gamemodes/irresistible/cnr/features/gangs/turfs.pwn index dfd450e..f4b4e8c 100644 --- a/gamemodes/irresistible/cnr/features/gangs/turfs.pwn +++ b/gamemodes/irresistible/cnr/features/gangs/turfs.pwn @@ -1,8 +1,8 @@ /* * Irresistible Gaming (c) 2018 * Developed by Lorenc - * Module: - * Purpose: + * Module: cnr\features\gangs\turfs.pwn + * Purpose: turfing module for gangs */ /* ** Includes ** */ @@ -15,11 +15,12 @@ #define MAX_TURFS ( sizeof( g_gangzoneData ) ) #endif -#define INVALID_GANG_TURF ( -1 ) -#define TAKEOVER_NEEDED_PEOPLE ( 1 ) - #define COLOR_GANGZONE 0x00000080 +#define INVALID_GANG_TURF ( -1 ) + +#define TAKEOVER_NEEDED_PEOPLE ( 1 ) + /* Mean (μ): 61551.012315113 Median: 38190.51 @@ -97,7 +98,7 @@ new forward OnPlayerUpdateGangZone( playerid, zoneid ); /* ** Hooks ** */ -hook OnScriptInit( ) +hook OnGameModeInit( ) { /* ** Gangzone Allocation ** */ for ( new i = 0; i < sizeof( g_gangzoneData ); i++ ) { @@ -106,170 +107,12 @@ hook OnScriptInit( ) return 1; } -hook OnGangUnload( gangid, bool: deleted ) -{ - // Empty out the turfs - foreach ( new z : turfs ) - { - if ( g_gangTurfData[ z ] [ E_OWNER ] == gangid ) - { - new - facility_gang = g_gangTurfData[ z ] [ E_FACILITY_GANG ]; - - if ( g_gangTurfData[ z ] [ E_FACILITY_GANG ] != INVALID_GANG_ID && Iter_Contains( gangs, g_gangTurfData[ z ] [ E_FACILITY_GANG ] ) ) - { - g_gangTurfData[ z ] [ E_COLOR ] = setAlpha( g_gangData[ facility_gang ] [ E_COLOR ], 0x80 ); - g_gangTurfData[ z ] [ E_OWNER ] = facility_gang; - GangZoneShowForAll( g_gangTurfData[ z ] [ E_ID ], g_gangTurfData[ z ] [ E_COLOR ] ); - } - else - { - g_gangTurfData[ z ] [ E_COLOR ] = COLOR_GANGZONE; - g_gangTurfData[ z ] [ E_OWNER ] = INVALID_GANG_ID; - GangZoneShowForAll( g_gangTurfData[ z ] [ E_ID ], COLOR_GANGZONE ); - } - } - } - - return 1; -} - -hook OnPlayerGangChangeColor( playerid, gangid ) -{ - foreach ( new x : turfs ) - { - // set the new color to the turfs - if ( g_gangTurfData[ x ] [ E_OWNER ] == gangid ) { - g_gangTurfData[ x ] [ E_COLOR ] = setAlpha( g_gangData[ gangid ] [ E_COLOR ], 0x80 ); - } - - // resume flashing if gang war - if ( g_gangzoneAttacker[ x ] == gangid ) { - GangZoneStopFlashForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ] ); - GangZoneFlashForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ], setAlpha( g_gangData[ gangid ] [ E_COLOR ], 0x80 ) ); - } else { - GangZoneHideForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ] ); - GangZoneShowForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ], g_gangTurfData[ x ] [ E_COLOR ] ); - } - } - - - return 1; -} - -hook OnPlayerSpawn( playerid ) -{ - foreach( new zoneid : turfs ) - { - // resume flashing if gang war - if ( g_gangzoneAttacker[ zoneid ] != INVALID_GANG_ID && Iter_Contains( gangs, g_gangzoneAttacker[ zoneid ] ) ) { - GangZoneFlashForPlayer( playerid, g_gangTurfData[ zoneid ] [ E_ID ], setAlpha( g_gangData[ g_gangzoneAttacker[ zoneid ] ] [ E_COLOR ], 0x80 ) ); - } else { - GangZoneShowForPlayer( playerid, g_gangTurfData[ zoneid ] [ E_ID ], g_gangTurfData[ zoneid ] [ E_COLOR ] ); - } - } - - return 1; -} - -hook OnPlayerEnterDynArea( playerid, areaid ) -{ - if ( ! IsPlayerNPC( playerid ) ) - { - new - first_turf = Turf_GetFirstTurf( playerid ); - - CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, first_turf ); - } - return Y_HOOKS_CONTINUE_RETURN_1; -} - -hook OnPlayerLeaveDynArea( playerid, areaid ) -{ - if ( ! IsPlayerNPC( playerid ) ) - { - new - total_areas = GetPlayerNumberDynamicAreas( playerid ); - - // reduced to another area - if ( total_areas ) - { - new - first_turf = Turf_GetFirstTurf( playerid ); - - CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, first_turf ); - } - - // if the player is in no areas, then they left - else CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, INVALID_GANG_TURF ); - } - 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 ( p_GangID[ playerid ] != INVALID_GANG_ID && g_gangTurfData[ zoneid ] [ E_OWNER ] == INVALID_GANG_ID ) - // ShowPlayerHelpDialog( playerid, 10000, "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" ), g_gangTurfData[ zoneid ] [ E_OWNER ] == -1 ? ( "Uncaptured" ) : ( ReturnGangName( g_gangTurfData[ zoneid ] [ E_OWNER ] ) ) ) ); - } - return 1; -} - -hook OnServerGameDayEnd( ) -{ - foreach(new g : gangs) - { - - new online_members = GetOnlineGangMembers( g ); - - if ( online_members >= TAKEOVER_NEEDED_PEOPLE ) - { - new - profit = 0; - - foreach( new zoneid : turfs ) if ( g_gangTurfData[ zoneid ] [ E_OWNER ] != INVALID_GANG_ID && g_gangTurfData[ zoneid ] [ E_OWNER ] == g ) - { - // facilities will not pay out respect - if ( g_gangTurfData[ zoneid ] [ E_FACILITY_GANG ] == INVALID_GANG_ID ) { - g_gangData[ g ] [ E_RESPECT ] ++; - } - - // accumulate profit - profit += Turf_GetProfitability( zoneid, online_members ); - } - - if ( profit > 0 ) { - GiveGangCash( g, profit ); - 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( profit ) ); - } - - foreach( new p : Player ) - { - if ( IsPlayerAdmin( p ) ) - { - format( szNormalString, sizeof( szNormalString ), "Gang ID: %i - Online Active Members: %i - Profit: %i", g, online_members, profit ); - SendClientMessage( p, -1, szNormalString ); - } - } - } - } - - return 1; -} - -hook OnServerTickSecond( ) +hook OnServerUpdate( ) { new oCount = 0; - foreach( new z : turfs ) + foreach ( new z : turfs ) { if ( g_gangzoneAttacker[ z ] != INVALID_GANG_ID ) { @@ -303,7 +146,7 @@ hook OnServerTickSecond( ) static szLocation[ MAX_ZONE_NAME ], szCity[ MAX_ZONE_NAME ]; new earned_money = 0; - //new owner_gang = g_gangTurfData[ z ] [ E_OWNER ]; + new owner_gang = g_gangTurfData[ z ] [ E_OWNER ]; new attacker_gang = g_gangzoneAttacker[ z ]; new Float: min_x, Float: min_y; @@ -324,13 +167,20 @@ hook OnServerTickSecond( ) g_gangzoneAttackTimeout [ z ] = 0; // Money Grub - if ( Iter_Contains( gangs, attacker_gang ) ) + if ( Iter_Contains( gangs, owner_gang ) ) { - new online_opmembers = GetOnlineGangMembers( attacker_gang ); - new zone_money = Turf_GetProfitability( z, online_opmembers ); + new afk_opmembers, online_opmembers = GetOnlineGangMembers( owner_gang, .afk_members = afk_opmembers ); + new zone_money = Turf_GetProfitability( z, online_opmembers - afk_opmembers ); - earned_money = floatround( float( zone_money ) * 0.5 ); - GiveGangCash( attacker_gang, earned_money ); + if ( g_gangData[ owner_gang ] [ E_BANK ] > zone_money ) + { + // deduct from gang bank and give to op, take 10% as fee + g_gangData[ owner_gang ] [ E_BANK ] -= zone_money; + SaveGangData( owner_gang ); + + earned_money = floatround( float( zone_money ) * 0.9 ); + g_gangData[ attacker_gang ] [ E_BANK ] += earned_money; + } // credit respect g_gangData[ attacker_gang ] [ E_RESPECT ] ++; @@ -390,126 +240,111 @@ hook OnServerTickSecond( ) } } } - return 1; } -/* ** 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 ) +hook OnServerGameDayEnd( ) { - new - id = Iter_Free( turfs ); - - if ( id != ITER_NONE ) + // payday for gangs holding turfs + foreach ( new g : gangs ) { - // set turf owners - g_gangTurfData[ id ] [ E_OWNER ] = owner_id; - g_gangTurfData[ id ] [ E_COLOR ] = color; - g_gangTurfData[ id ] [ E_FACILITY_GANG ] = facility_gang_id; + new + afk_members, online_members = GetOnlineGangMembers( g, .afk_members = afk_members ); - // create area - g_gangTurfData[ id ] [ E_ID ] = GangZoneCreate( min_x, min_y, max_x, max_y ); - g_gangTurfData[ id ] [ E_AREA ] = CreateDynamicRectangle( min_x, min_y, max_x, max_y, 0, 0 ); - - // add to iterator - Iter_Add( turfs, id ); - } - return id; -} - -stock Turf_GetCentrePos( zoneid, &Float: X, &Float: Y ) // should return the centre but will do for now -{ - Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MIN_X, X ); - Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MIN_Y, Y ); -} - -stock Turf_GetOwner( id ) { - return g_gangTurfData[ id ] [ E_OWNER ]; -} - -stock Turf_GetFacility( id ) { - return g_gangTurfData[ id ] [ E_FACILITY_GANG ]; -} - -stock Turf_GetFirstTurf( playerid ) -{ - new - current_areas[ 4 ]; - - GetPlayerDynamicAreas( playerid, current_areas ); - - foreach( new i : Reverse(turfs) ) - { - if ( current_areas[ 0 ] == g_gangTurfData[ i ] [ E_AREA ] || current_areas[ 1 ] == g_gangTurfData[ i ] [ E_AREA ] || current_areas[ 2 ] == g_gangTurfData[ i ] [ E_AREA ] || current_areas[ 3 ] == g_gangTurfData[ i ] [ E_AREA ] ) + printf("Online %d/%d",online_members,afk_members); + if ( online_members >= TAKEOVER_NEEDED_PEOPLE ) { - return i; + new + profit = 0; + + foreach( new zoneid : turfs ) if ( g_gangTurfData[ zoneid ] [ E_OWNER ] != INVALID_GANG_ID && g_gangTurfData[ zoneid ] [ E_OWNER ] == g ) + { + // facilities will not pay out respect + if ( g_gangTurfData[ zoneid ] [ E_FACILITY_GANG ] == INVALID_GANG_ID ) { + g_gangData[ g ] [ E_RESPECT ] ++; + } + + // accumulate profit + profit += Turf_GetProfitability( zoneid, online_members - afk_members ); + } + + GiveGangCash( g, profit ); + + if ( profit > 0 ) { + 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( profit ) ); + } } } - return -1; + return 1; } -stock Turf_GetProfitability( zoneid, gang_members, Float: default_pay = 750.0 ) +hook OnPlayerEnterDynArea( playerid, areaid ) { - // size adjustments - if ( g_gangzoneData[ zoneid ] [ E_SIZE ] < TURF_SIZE_SMALL ) // lower than 1st quartile, decrease pay - default_pay *= 0.75; - - if ( g_gangzoneData[ zoneid ] [ E_SIZE ] > TURF_SIZE_LARGE ) // higher than 1st quartile, increase pay - default_pay *= 1.25; - - // city adjustments - if ( g_gangzoneData[ zoneid ] [ E_CITY ] == CITY_SF ) - default_pay *= 1.25; - - if ( g_gangzoneData[ zoneid ] [ E_CITY ] == CITY_COUNTRY || g_gangzoneData[ zoneid ] [ E_CITY ] == CITY_DESERTS ) - default_pay *= 1.1; - - // handle online active players boost - new Float: player_boost = 0.06 * float( gang_members ) + 0.75; - default_pay *= player_boost > 1.35 ? 1.35 : player_boost; - - // return rounded number - return floatround( default_pay ); -} - -stock GetGangCapturedTurfs( gangid ) -{ - new - z, - c; - - foreach ( z : turfs ) if ( g_gangTurfData[ z ] [ E_OWNER ] != INVALID_GANG_ID && g_gangTurfData[ z ] [ E_OWNER ] == gangid ) { - c++; - } - return c; -} - -stock GetPlayersInGangZone( z, g, &is_afk = 0, &in_air = 0 ) -{ - if ( g == INVALID_GANG_ID ) - return 0; - - new count = 0; - new Float: Z; - - foreach ( new i : Player ) if ( p_Class[ i ] == CLASS_CIVILIAN && p_GangID[ i ] == g && IsPlayerInDynamicArea( i, g_gangTurfData[ z ] [ E_AREA ] ) ) + if ( ! IsPlayerNPC( playerid ) ) { - if ( GetPlayerState( i ) != PLAYER_STATE_SPECTATING ) + new + first_turf = Turf_GetFirstTurf( playerid ); + + if ( ! IsPlayerMovieMode( playerid ) ) { - if ( IsPlayerAFK( i ) ) - { - is_afk++; - continue; - } - if ( GetPlayerPos( i, Z, Z, Z ) && Z >= 300.0 ) - { - in_air++; - continue; - } - count++; + if ( first_turf == INVALID_GANG_TURF ) + return PlayerTextDrawSetString( playerid, g_ZoneOwnerTD[ playerid ], "_" ); + + // if ( p_GangID[ playerid ] != INVALID_GANG_ID && g_gangTurfData[ first_turf ] [ 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[ first_turf ] [ E_FACILITY_GANG ] != INVALID_GANG_ID ? ( "FACILITY" ) : ( "TERRITORY" ), ReturnGangName( g_gangTurfData[ first_turf ] [ E_OWNER ] ) ) ); } } - return count; + return Y_HOOKS_CONTINUE_RETURN_1; +} + +hook OnPlayerSpawn( playerid ) +{ + // Gang Zones + foreach( new zoneid : turfs ) + { + // resume flashing if gang war + if ( g_gangzoneAttacker[ zoneid ] != INVALID_GANG_ID && Iter_Contains( gangs, g_gangzoneAttacker[ zoneid ] ) ) { + GangZoneFlashForPlayer( playerid, g_gangTurfData[ zoneid ] [ E_ID ], setAlpha( g_gangData[ g_gangzoneAttacker[ zoneid ] ] [ E_COLOR ], 0x80 ) ); + } else { + GangZoneShowForPlayer( playerid, g_gangTurfData[ zoneid ] [ E_ID ], g_gangTurfData[ zoneid ] [ E_COLOR ] ); + } + } + return 1; +} + +hook OnPlayerUnloadTextdraws( playerid ) +{ + PlayerTextDrawHide( playerid, g_ZoneOwnerTD[ playerid ] ); + return 1; +} + +hook OnPlayerLoadTextdraws( playerid ) +{ + PlayerTextDrawShow( playerid, g_ZoneOwnerTD[ playerid ] ); + return 1; +} + +hook OnPlayerLeaveDynArea( playerid, areaid ) +{ + if ( ! IsPlayerNPC( playerid ) ) + { + new + total_areas = GetPlayerNumberDynamicAreas( playerid ); + + // reduced to another area + if ( total_areas ) + { + new + first_turf = Turf_GetFirstTurf( playerid ); + + CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, first_turf ); + } + + // if the player is in no areas, then they left + else CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, INVALID_GANG_TURF ); + } + return Y_HOOKS_CONTINUE_RETURN_1; } /* ** Commands ** */ @@ -524,9 +359,6 @@ CMD:takeover( playerid, params[ ] ) if ( GetPlayerInterior( playerid ) != 0 && GetPlayerVirtualWorld( playerid ) != 0 ) return SendError( playerid, "You cannot do this inside interiors." ); - if ( IsPlayerAdminOnDuty( playerid ) ) - return SendError( playerid, "You can't capture while on duty!" ); - if ( IsPlayerJailed( playerid ) || IsPlayerUsingOrbitalCannon( playerid ) ) return SendError( playerid, "You cannot do this at the moment." ); @@ -545,6 +377,7 @@ CMD:takeover( playerid, params[ ] ) if ( g_gangzoneAttacker[ z ] != INVALID_GANG_ID ) return SendError( playerid, "This turf is currently being attacked." ); new opposing_count = GetPlayersInGangZone( z, g_gangTurfData[ z ] [ E_OWNER ] ); // Opposing check + // existing gang members if ( g_gangTurfData[ z ] [ E_OWNER ] != INVALID_GANG_ID && opposing_count ) { return SendError( playerid, "There are gang members within this turf, kill them!" ); @@ -581,8 +414,18 @@ CMD:takeover( playerid, params[ ] ) g_gangzoneAttackCount[ z ] = 0; GangZoneFlashForAll( g_gangTurfData[ z ] [ E_ID ], setAlpha( g_gangData[ gangid ] [ E_COLOR ], 0x80 ) ); SendClientMessage( playerid, g_gangData[ gangid ] [ E_COLOR ], "[TURF]{FFFFFF} You are now beginning to take over the turf. Stay inside the area with your gang for 60 seconds. Don't die." ); - if ( g_gangTurfData[ z ] [ E_OWNER ] != INVALID_GANG_ID ) { - SendClientMessageToGang( g_gangTurfData[ z ] [ E_OWNER ], g_gangData[ g_gangTurfData[ z ] [ E_OWNER ] ] [ E_COLOR ], "[GANG]{FFFFFF} Our territory is being attacked by "COL_GREY"%s"COL_WHITE", defend it!", g_gangData[ g_gangzoneAttacker[ z ] ] [ E_NAME ] ); + + if ( g_gangTurfData[ z ] [ E_OWNER ] != INVALID_GANG_ID ) + { + new + szLocation[ MAX_ZONE_NAME ], Float: min_x, Float: min_y; + + Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ z ] [ E_AREA ], E_STREAMER_MIN_X, min_x ); + Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ z ] [ E_AREA ], E_STREAMER_MIN_Y, min_y ); + + GetZoneFromCoordinates( szLocation, min_x, min_y ); + + SendClientMessageToGang( g_gangTurfData[ z ] [ E_OWNER ], g_gangData[ g_gangTurfData[ z ] [ E_OWNER ] ] [ E_COLOR ], "[GANG]"COL_WHITE" Our territory is being attacked by "COL_GREY"%s"COL_WHITE" in %s, defend it!", g_gangData[ g_gangzoneAttacker[ z ] ] [ E_NAME ], szLocation ); } } else @@ -593,4 +436,208 @@ CMD:takeover( playerid, params[ ] ) } } return SendError( playerid, "You are not in any gangzone." ); -} \ No newline at end of file +} + +/* ** 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 ) +{ + new + id = Iter_Free( turfs ); + + if ( id != ITER_NONE ) + { + // set turf owners + g_gangTurfData[ id ] [ E_OWNER ] = owner_id; + g_gangTurfData[ id ] [ E_COLOR ] = color; + g_gangTurfData[ id ] [ E_FACILITY_GANG ] = facility_gang_id; + + // create area + g_gangTurfData[ id ] [ E_ID ] = GangZoneCreate( min_x, min_y, max_x, max_y ); + g_gangTurfData[ id ] [ E_AREA ] = CreateDynamicRectangle( min_x, min_y, max_x, max_y, 0, 0 ); + + // add to iterator + Iter_Add( turfs, id ); + } + return id; +} + +stock Turf_GetOwner( id ) { + return g_gangTurfData[ id ] [ E_OWNER ]; +} + +stock Turf_GetFacility( id ) { + return g_gangTurfData[ id ] [ E_FACILITY_GANG ]; +} + +stock Turf_GetFirstTurf( playerid ) +{ + new + current_areas[ 4 ]; + + GetPlayerDynamicAreas( playerid, current_areas ); + + foreach( new i : Reverse(turfs) ) + { + if ( current_areas[ 0 ] == g_gangTurfData[ i ] [ E_AREA ] || current_areas[ 1 ] == g_gangTurfData[ i ] [ E_AREA ] || current_areas[ 2 ] == g_gangTurfData[ i ] [ E_AREA ] || current_areas[ 3 ] == g_gangTurfData[ i ] [ E_AREA ] ) + { + return i; + } + } + return -1; +} + +stock Turf_GetProfitability( zoneid, gang_members, Float: default_pay = 4000.0 ) +{ + // size adjustments + //if ( g_gangzoneData[ zoneid ] [ E_SIZE ] < TURF_SIZE_SMALL ) // lower than 1st quartile, decrease pay + // default_pay *= 0.75; + + // Normal Gang Zones + if ( zoneid < sizeof( g_gangzoneData ) ) + { + if ( g_gangzoneData[ zoneid ] [ E_SIZE ] > TURF_SIZE_LARGE ) // higher than 1st quartile, increase pay + default_pay *= 1.25; + + // city adjustments + if ( g_gangzoneData[ zoneid ] [ E_CITY ] == CITY_SF ) + default_pay *= 1.25; + + if ( g_gangzoneData[ zoneid ] [ E_CITY ] == CITY_COUNTRY || g_gangzoneData[ zoneid ] [ E_CITY ] == CITY_DESERTS ) + default_pay *= 1.1; + } + + // facility 2x + if ( g_gangTurfData[ zoneid ] [ E_FACILITY_GANG ] != INVALID_GANG_ID ) + default_pay *= 2; + + // get online players + new Float: player_boost = 0.0; + + if ( gang_members >= 10 ) player_boost = 1.5; + else if ( gang_members > 1 ) player_boost = 1.0 + float( gang_members - 1 ) * 0.05; + + // max boost + default_pay *= player_boost > 1.5 ? 1.5 : player_boost; + + // return rounded number + return floatround( default_pay ); +} + +stock Turf_ResetGangTurfs( gangid ) +{ + foreach ( new z : turfs ) + { + if ( g_gangTurfData[ z ] [ E_OWNER ] == gangid ) + { + new + facility_gang = g_gangTurfData[ z ] [ E_FACILITY_GANG ]; + + if ( g_gangTurfData[ z ] [ E_FACILITY_GANG ] != INVALID_GANG_ID && Iter_Contains( gangs, g_gangTurfData[ z ] [ E_FACILITY_GANG ] ) ) + { + g_gangTurfData[ z ] [ E_COLOR ] = setAlpha( g_gangData[ facility_gang ] [ E_COLOR ], 0x80 ); + g_gangTurfData[ z ] [ E_OWNER ] = facility_gang; + GangZoneShowForAll( g_gangTurfData[ z ] [ E_ID ], g_gangTurfData[ z ] [ E_COLOR ] ); + } + else + { + g_gangTurfData[ z ] [ E_COLOR ] = COLOR_GANGZONE; + g_gangTurfData[ z ] [ E_OWNER ] = INVALID_GANG_ID; + GangZoneShowForAll( g_gangTurfData[ z ] [ E_ID ], COLOR_GANGZONE ); + } + } + } +} + +stock Turf_ShowGangOwners( playerid ) +{ + if ( ! Iter_Count( turfs ) ) + return SendError( playerid, "There is currently no trufs on the server." ); + + szHugeString[ 0 ] = '\0'; + + foreach( new turfid : turfs ) + { + new + szLocation[ MAX_ZONE_NAME ], Float: min_x, Float: min_y; + + Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ turfid ] [ E_AREA ], E_STREAMER_MIN_X, min_x ); + Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ turfid ] [ E_AREA ], E_STREAMER_MIN_Y, min_y ); + + GetZoneFromCoordinates( szLocation, min_x, min_y ); + + if ( g_gangTurfData[ turfid ][ E_OWNER ] == INVALID_GANG_ID ) { + format( szHugeString, sizeof( szHugeString ), "%s%s\t"COL_GREY"Unoccupied\n", szHugeString, szLocation ); + } + else { + format( szHugeString, sizeof( szHugeString ), "%s%s\t{%06x}%s\n", szHugeString, szLocation, g_gangTurfData[ turfid ][ E_COLOR ] >>> 8 , ReturnGangName( g_gangTurfData[ turfid ][ E_OWNER ] ) ); + } + } + return ShowPlayerDialog( playerid, DIALOG_NULL, DIALOG_STYLE_TABLIST, ""COL_WHITE"Gang Turfs", szHugeString, "Close", "" ); +} + +stock Turf_RedrawPlayerGangZones( playerid, gangid ) +{ + foreach ( new x : turfs ) + { + // set the new color to the turfs + if ( g_gangTurfData[ x ] [ E_OWNER ] == gangid ) { + g_gangTurfData[ x ] [ E_COLOR ] = setAlpha( g_gangData[ gangid ] [ E_COLOR ], 0x80 ); + } + + // resume flashing if gang war + if ( g_gangzoneAttacker[ x ] == gangid ) { + GangZoneStopFlashForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ] ); + GangZoneFlashForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ], setAlpha( g_gangData[ gangid ] [ E_COLOR ], 0x80 ) ); + } else { + GangZoneHideForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ] ); + GangZoneShowForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ], g_gangTurfData[ x ] [ E_COLOR ] ); + } + } + return 1; +} + +stock Turf_GetCentrePos( zoneid, &Float: X, &Float: Y ) // should return the centre but will do for now +{ + Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MIN_X, X ); + Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MIN_Y, Y ); +} + +stock GetGangCapturedTurfs( gangid ) +{ + new + z, + c; + + foreach ( z : turfs ) if ( g_gangTurfData[ z ] [ E_OWNER ] != INVALID_GANG_ID && g_gangTurfData[ z ] [ E_OWNER ] == gangid ) { + c++; + } + return c; +} + +stock GetPlayersInGangZone( z, g, &is_afk = 0, &in_air = 0 ) +{ + if ( g == INVALID_GANG_ID ) + return 0; + + new count = 0; + new Float: Z; + + foreach ( new i : Player ) if ( p_Class[ i ] == CLASS_CIVILIAN && p_GangID[ i ] == g && IsPlayerInDynamicArea( i, g_gangTurfData[ z ] [ E_AREA ] ) ) + { + if ( ! IsPlayerSpawnProtected( 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++; + } + } + return count; +} diff --git a/gamemodes/irresistible/cnr/features/gangs/turfs_old.pwn b/gamemodes/irresistible/cnr/features/gangs/turfs_old.pwn deleted file mode 100644 index da62057..0000000 --- a/gamemodes/irresistible/cnr/features/gangs/turfs_old.pwn +++ /dev/null @@ -1,648 +0,0 @@ -/* - * Irresistible Gaming (c) 2018 - * Developed by Lorenc - * Module: cnr\features\gangs\turfs.pwn - * Purpose: turfing module for gangs - */ - -/* ** Includes ** */ -#include < YSI\y_hooks > - -/* ** Gang Zone Numbers ** */ -#define GANGZONE_DEFAULT_BORDER_SIZE 2.0 // default thickness of borders -#define GANGZONE_DEFAULT_NUMBER_SIZE 0.6 // default thickness of numbers -#include < gangzones > - -/* ** Definitions ** */ -#if defined MAX_FACILITIES - #define MAX_TURFS ( sizeof( g_gangzoneData ) + MAX_FACILITIES ) -#else - #define MAX_TURFS ( sizeof( g_gangzoneData ) ) -#endif - -#define INVALID_GANG_TURF ( -1 ) - -#define TAKEOVER_NEEDED_PEOPLE ( 1 ) - -#define COLOR_GANGZONE 0x00000080 -#define COLOR_HARDPOINT 0xFF000080 - -/* ** Macros ** */ -#define ShowHardpointIconForPlayer(%0) \ - Streamer_AppendArrayData( STREAMER_TYPE_MAP_ICON, g_gangHardpointMapIcon, E_STREAMER_PLAYER_ID, %0 ) - -#define HideHardpointIconForPlayer(%0) \ - Streamer_RemoveArrayData( STREAMER_TYPE_MAP_ICON, g_gangHardpointMapIcon, E_STREAMER_PLAYER_ID, %0 ) - -/* ** Variables ** */ -enum e_GANG_ZONE_DATA -{ - Float: E_MIN_X, - Float: E_MIN_Y, - Float: E_MAX_X, - Float: E_MAX_Y, - E_CITY -}; - -static const - g_gangzoneData[ ] [ e_GANG_ZONE_DATA ] = - { - { -2076.0, 1036.5, -1873.0, 1088.5, CITY_SF }, - { -2014.0, 937.5, -1873.0, 1036.5, CITY_SF }, - { -2014.0, 829.5, -1886.0, 937.5, CITY_SF }, - { -1873.0, 937.5, -1787.0, 1112.5, CITY_SF }, - { -2014.0, 719.5, -1886.0, 829.5, CITY_SF }, - { -1886.0, 829.5, -1788.0, 937.5, CITY_SF }, - { -1886.0, 719.5, -1788.0, 829.5, CITY_SF }, - { -1788.0, 829.5, -1723.0, 937.5, CITY_SF }, - { -1723.0, 829.5, -1642.0, 937.5, CITY_SF }, - { -1642.0, 829.5, -1564.0, 937.5, CITY_SF }, - { -1564.0, 828.5, -1421.0, 1015.5, CITY_SF }, - { -1667.0, 720.5, -1563.0, 829.5, CITY_SF }, - { -1788.0, 719.5, -1667.0, 829.5, CITY_SF }, - { -1787.0, 935.5, -1704.0, 1037.5, CITY_SF }, - { -1787.0, 1037.5, -1704.0, 1112.5, CITY_SF }, - { -2130.0, 816.5, -2014.0, 1036.5, CITY_SF } - } -; - -/* ** Variables ** */ -enum E_TURF_ZONE_DATA { - E_ID, - - E_OWNER, - E_COLOR, - - E_AREA, - E_FACILITY_GANG -}; - -new - g_gangTurfData [ MAX_TURFS ] [ E_TURF_ZONE_DATA ], - Iterator: turfs < MAX_TURFS >, - Iterator: gangzoneturfs < MAX_TURFS >, - - Float: g_weekAveragePlayers = 0.0, - Float: g_weekSecondsElapsed = 0.0, - - g_gangHardpointRotation = -1, - g_gangHardpointTurf = INVALID_GANG_TURF, - g_gangHardpointPreviousTurf = INVALID_GANG_TURF, - g_gangHardpointAttacker = INVALID_GANG_ID, - g_gangHardpointMapIcon = -1, - - g_gangHardpointCaptureTime [ MAX_GANGS ] - -; - -/* ** Forwards ** */ -forward OnPlayerUpdateGangZone( playerid, zoneid ); - -stock Float: Turf_GetHardpointPrizePool( Float: max_payout = 500000.0 ) -{ - new - Float: total_payout = ( g_weekAveragePlayers / g_weekSecondsElapsed ) * 7500.0; - - return total_payout < max_payout ? total_payout : max_payout; -} - -/* ** Hooks ** */ -hook OnGameModeInit( ) -{ - // Gangzone Allocation - for ( new i = 0; i < sizeof( g_gangzoneData ); i ++ ) { - new turfid = Turf_Create( g_gangzoneData[ i ] [ E_MIN_X ], g_gangzoneData[ i ] [ E_MIN_Y ], g_gangzoneData[ i ] [ E_MAX_X ], g_gangzoneData[ i ] [ E_MAX_Y ], INVALID_GANG_ID, COLOR_GANGZONE, .bordersize = GANGZONE_DEFAULT_BORDER_SIZE, .numbersize = GANGZONE_DEFAULT_NUMBER_SIZE ); - Iter_Add( gangzoneturfs, turfid ); - } - - // Reset Iterator - g_gangHardpointRotation = Iter_Last( gangzoneturfs ); - return 1; -} - -hook OnServerTickSecond( ) -{ - new - hardpoint_turf = g_gangHardpointTurf; - - if ( hardpoint_turf == INVALID_GANG_TURF ) { - return Turf_CreateHardpoint( ); - } - - // accumulate average player count - g_weekAveragePlayers += float( Iter_Count( Player ) ); - g_weekSecondsElapsed ++; - - // begin auto turf takeover etc - if ( g_gangHardpointAttacker != INVALID_GANG_ID ) - { - new total_in_turf = Turf_GetPlayersInTurf( hardpoint_turf ); - new attacking_members = GetPlayersInGangZone( hardpoint_turf, g_gangHardpointAttacker ); - - // no attacking members inside the turf - if ( ! attacking_members ) - { - new - new_attacker = 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 ); - 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 ) ); - } - - Turf_SetHardpointAttacker( new_attacker ); - } - - new - current_attacker = g_gangHardpointAttacker; - - // the attacker could be changed from above, so double checking - if ( current_attacker != INVALID_GANG_ID ) - { - // add seconds - g_gangHardpointCaptureTime[ current_attacker ] ++; - - // get capture time - new total_capture_seconds = Turf_GetTotalCaptureSeconds( ); - - // alert gang members - 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 ); - - // calculate player earnings - new potential_earnings = total_capture_seconds > 0 ? floatround( float( g_gangHardpointCaptureTime[ player_gang ] ) / float( total_capture_seconds ) * Turf_GetHardpointPrizePool( ) ) : 0; - - // message the attacker that they gotta attack - if ( player_gang == current_attacker ) - { - new - rivals_members = total_in_turf - attacking_members; - - if ( rivals_members ) { - ShowPlayerHelpDialog( playerid, 2500, "~b~Defend~w~ from %d enemy gang member%s!~n~~n~Earning potential is ~g~%s", rivals_members, rivals_members == 1 ? ( "" ) : ( "s" ), cash_format( potential_earnings ) ); - } else { - ShowPlayerHelpDialog( playerid, 2500, "~g~%s~w~ is in control for %s!~n~~n~Earning potential is ~g~%s", ReturnGangName( current_attacker ), TimeConvert( g_gangHardpointCaptureTime[ current_attacker ] ), cash_format( potential_earnings ) ); - } - } - - // message the defender - else if ( player_gang != current_attacker ) { - ShowPlayerHelpDialog( playerid, 2500, "~r~Kill~w~ %d %s member%s!~n~~n~Earning potential is ~r~%s", attacking_members, ReturnGangName( current_attacker ), attacking_members == 1 ? ( "" ) : ( "s" ), cash_format( potential_earnings ) ); - } - } - } - } - else - { - new - new_attacker = 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 ); - break; - } - - Turf_SetHardpointAttacker( new_attacker ); - } - return 1; -} - -stock Turf_GetPlayersInTurf( turfid ) -{ - new - players_accum = 0; - - foreach ( new g : gangs ) { - players_accum += GetPlayersInGangZone( turfid, g ); - } - return players_accum; -} - -stock Turf_CreateHardpoint( ) -{ - // reset gang accumulated time - for ( new i = 0; i < sizeof ( g_gangHardpointCaptureTime ); i ++ ) { - g_gangHardpointCaptureTime[ i ] = 0; - } - - // fixed zone rotation - new current_rotation = g_gangHardpointRotation; - - // reset rotation - if ( current_rotation >= Iter_Last( gangzoneturfs ) ) { - g_gangHardpointRotation = Iter_First( gangzoneturfs ); - } - // get next in rotation - else { - g_gangHardpointRotation = Iter_Next( gangzoneturfs, current_rotation ); - } - - // allocate new hardpoint - g_gangHardpointTurf = g_gangHardpointRotation; - g_gangHardpointAttacker = INVALID_GANG_ID; - DestroyDynamicMapIcon( g_gangHardpointMapIcon ); - - // 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 ); - } - } - - // create map icon - new - Float: middle_x, Float: middle_y; - - Turf_GetMiddlePos( g_gangHardpointTurf, middle_x, middle_y ); - - g_gangHardpointMapIcon = CreateDynamicMapIcon( middle_x, middle_y, 0.0, 19, -1, .worldid = 0, .interiorid = 0, .playerid = 0, .streamdistance = 3000.0, .style = MAPICON_GLOBAL ); - Streamer_RemoveArrayData( STREAMER_TYPE_MAP_ICON, g_gangHardpointMapIcon, E_STREAMER_PLAYER_ID, 0 ); - - // redraw gangzones - Turf_RedrawGangZonesForAll( ); - return 1; -} - -hook OnGangUnload( gangid, bool: deleted ) -{ - g_gangHardpointCaptureTime[ gangid ] = 0; - return 1; -} - -hook OnPlayerLeaveGang( playerid, gangid, reason ) -{ - HideHardpointIconForPlayer( playerid ); - return 1; -} - -hook OnPlayerJoinGang( playerid, gangid ) -{ - ShowHardpointIconForPlayer( playerid ); - return 1; -} - -hook OnServerGameDayEnd( ) -{ - new - total_capture_seconds = Turf_GetTotalCaptureSeconds( ); - - // payout gangs if there is any capable - if ( total_capture_seconds ) - { - // payout gangs - foreach ( new g : gangs ) - { - new Float: capture_ratio = float( g_gangHardpointCaptureTime[ g ] ) / float( total_capture_seconds ); - new earnings = floatround( capture_ratio * Turf_GetHardpointPrizePool( ) ); - - if ( earnings > 0 ) - { - 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 ); - - foreach ( new p : Player ) if ( GetPlayerGang( p ) == g ) { - PlayerPlaySound( p, 36205, 0.0, 0.0, 0.0 ); - } - - 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 ) ); - } - } - } - - // get previous turf - new previous_turf = Iter_Prev( gangzoneturfs, g_gangHardpointTurf ); - - if ( previous_turf >= Iter_Last( gangzoneturfs ) ) { - previous_turf = INVALID_GANG_TURF; - } - - // reset hardpoint - g_gangHardpointPreviousTurf = previous_turf; - g_gangHardpointTurf = INVALID_GANG_TURF; - g_weekAveragePlayers = 0.0; - g_weekSecondsElapsed = 0.0; - return 1; -} - -hook OnPlayerSpawn( playerid ) -{ - Turf_RedrawPlayerGangZones( playerid ); - return 1; -} - -hook OnPlayerEnterDynArea( playerid, areaid ) -{ - if ( ! IsPlayerNPC( playerid ) ) - { - new - first_turf = Turf_GetFirstTurf( playerid ); - - // update textdraws - CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, first_turf ); - } - return Y_HOOKS_CONTINUE_RETURN_1; -} - -stock Turf_SetHardpointAttacker( gangid ) -{ - if ( g_gangHardpointAttacker == INVALID_GANG_ID && gangid == INVALID_GANG_ID ) - return; - - // set current attacker - g_gangHardpointAttacker = gangid; - - // alert gang - 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 - Turf_RedrawGangZonesForAll( ); -} - -hook OnPlayerLeaveDynArea( playerid, areaid ) -{ - if ( ! IsPlayerNPC( playerid ) ) - { - new - total_areas = GetPlayerNumberDynamicAreas( playerid ); - - // reduced to another area - if ( total_areas ) - { - new - first_turf = Turf_GetFirstTurf( playerid ); - - CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, first_turf ); - } - - // if the player is in no areas, then they left - else CallLocalFunction( "OnPlayerUpdateGangZone", "dd", playerid, INVALID_GANG_TURF ); - } - 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 { - DisablePlayerSpawnProtection( playerid ); - 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 ** */ -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, Float: bordersize = GANGZONE_DEFAULT_BORDER_SIZE, Float: numbersize = 0.0 ) -{ - new - id = Iter_Free( turfs ); - - if ( id != ITER_NONE ) - { - // set turf owners - g_gangTurfData[ id ] [ E_OWNER ] = owner_id; - g_gangTurfData[ id ] [ E_COLOR ] = color; - g_gangTurfData[ id ] [ E_FACILITY_GANG ] = facility_gang_id; - - // create area - g_gangTurfData[ id ] [ E_ID ] = GangZoneCreate( min_x, min_y, max_x, max_y, .bordersize = bordersize, .numbersize = numbersize ); - g_gangTurfData[ id ] [ E_AREA ] = CreateDynamicRectangle( min_x, min_y, max_x, max_y, 0, 0 ); - - // add to iterator - Iter_Add( turfs, id ); - } - return id; -} - -stock Turf_GetOwner( id ) { - return g_gangTurfData[ id ] [ E_OWNER ]; -} - -stock Turf_GetFacility( id ) { - return g_gangTurfData[ id ] [ E_FACILITY_GANG ]; -} - -stock Turf_GetFirstTurf( playerid ) -{ - new - current_areas[ 4 ]; - - GetPlayerDynamicAreas( playerid, current_areas ); - - foreach( new i : Reverse(turfs) ) - { - if ( current_areas[ 0 ] == g_gangTurfData[ i ] [ E_AREA ] || current_areas[ 1 ] == g_gangTurfData[ i ] [ E_AREA ] || current_areas[ 2 ] == g_gangTurfData[ i ] [ E_AREA ] || current_areas[ 3 ] == g_gangTurfData[ i ] [ E_AREA ] ) - { - return i; - } - } - return -1; -} - -stock Turf_ResetGangTurfs( gangid ) -{ - foreach ( new z : turfs ) - { - if ( g_gangTurfData[ z ] [ E_OWNER ] == gangid ) - { - new - facility_gang = g_gangTurfData[ z ] [ E_FACILITY_GANG ]; - - if ( g_gangTurfData[ z ] [ E_FACILITY_GANG ] != INVALID_GANG_ID && Iter_Contains( gangs, g_gangTurfData[ z ] [ E_FACILITY_GANG ] ) ) - { - g_gangTurfData[ z ] [ E_COLOR ] = setAlpha( g_gangData[ facility_gang ] [ E_COLOR ], 0x80 ); - g_gangTurfData[ z ] [ E_OWNER ] = facility_gang; - GangZoneShowForAll( g_gangTurfData[ z ] [ E_ID ], g_gangTurfData[ z ] [ E_COLOR ] ); - } - else - { - g_gangTurfData[ z ] [ E_COLOR ] = COLOR_GANGZONE; - g_gangTurfData[ z ] [ E_OWNER ] = INVALID_GANG_ID; - GangZoneShowForAll( g_gangTurfData[ z ] [ E_ID ], COLOR_GANGZONE ); - } - } - } -} - -stock Turf_ShowGangOwners( playerid ) -{ - if ( ! Iter_Count( turfs ) ) - return SendError( playerid, "There is currently no trufs on the server." ); - - szHugeString[ 0 ] = '\0'; - - foreach( new turfid : turfs ) - { - new - szLocation[ MAX_ZONE_NAME ], Float: min_x, Float: min_y; - - Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ turfid ] [ E_AREA ], E_STREAMER_MIN_X, min_x ); - Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ turfid ] [ E_AREA ], E_STREAMER_MIN_Y, min_y ); - - GetZoneFromCoordinates( szLocation, min_x, min_y ); - - if ( g_gangTurfData[ turfid ][ E_OWNER ] == INVALID_GANG_ID ) { - format( szHugeString, sizeof( szHugeString ), "%s%s\t"COL_GREY"Unoccupied\n", szHugeString, szLocation ); - } - else { - format( szHugeString, sizeof( szHugeString ), "%s%s\t{%06x}%s\n", szHugeString, szLocation, g_gangTurfData[ turfid ][ E_COLOR ] >>> 8 , ReturnGangName( g_gangTurfData[ turfid ][ E_OWNER ] ) ); - } - } - return ShowPlayerDialog( playerid, DIALOG_NULL, DIALOG_STYLE_TABLIST, ""COL_WHITE"Gang Turfs", szHugeString, "Close", "" ); -} - -stock Turf_GetCentrePos( zoneid, &Float: X, &Float: Y ) // should return the centre but will do for now -{ - Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MIN_X, X ); - Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MIN_Y, Y ); -} - -stock GetPlayersInGangZone( z, g ) -{ - if ( g == INVALID_GANG_ID ) - return 0; - - new - count = 0; - - foreach ( new i : Player ) if ( p_GangID[ i ] == g && IsPlayerInDynamicArea( i, g_gangTurfData[ z ] [ E_AREA ] ) && Turf_IsAbleToTakeover( i ) ) { - count++; - } - return count; -} - -stock Turf_IsAbleToTakeover( i ) { - new - Float: Z; - - GetPlayerPos( i, Z, Z, Z ); - return p_Class[ i ] == CLASS_CIVILIAN && ! IsPlayerSpawnProtected( i ) && ! IsPlayerAdminOnDuty( i ) && GetPlayerState( i ) != PLAYER_STATE_SPECTATING && ! IsPlayerAFK( i ) && Z <= 250.0; -} - -stock Turf_HideAllGangZones( playerid ) -{ - foreach ( new x : turfs ) - { - GangZoneHideForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ] ); - } - return 1; -} - -stock Turf_RedrawPlayerGangZones( playerid ) -{ - foreach ( new x : turfs ) - { - if ( g_gangHardpointTurf == g_gangTurfData[ x ] [ E_ID ] ) { - if ( g_gangHardpointAttacker != INVALID_GANG_ID ) { - GangZoneStopFlashForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ] ); - GangZoneFlashForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ], setAlpha( g_gangData[ g_gangHardpointAttacker ] [ E_COLOR ], 0x80 ) ); - } else { - GangZoneHideForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ] ); - GangZoneShowForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ], g_gangHardpointTurf == g_gangTurfData[ x ] [ E_ID ] ? COLOR_HARDPOINT : g_gangTurfData[ x ] [ E_COLOR ] ); - } - } else { - GangZoneHideForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ] ); - GangZoneShowForPlayer( playerid, g_gangTurfData[ x ] [ E_ID ], g_gangTurfData[ x ] [ E_COLOR ] ); - } - } - - if ( GetPlayerClass( playerid ) == CLASS_CIVILIAN && GetPlayerGang( playerid ) != INVALID_GANG_ID ) { - ShowHardpointIconForPlayer( playerid ); - } else { - HideHardpointIconForPlayer( playerid ); - } - return 1; -} - -stock Turf_RedrawGangZonesForAll( ) -{ - foreach ( new x : turfs ) - { - if ( g_gangHardpointTurf == g_gangTurfData[ x ] [ E_ID ] ) { - if ( g_gangHardpointAttacker != INVALID_GANG_ID ) { - GangZoneStopFlashForAll( g_gangTurfData[ x ] [ E_ID ] ); - GangZoneFlashForAll( g_gangTurfData[ x ] [ E_ID ], setAlpha( g_gangData[ g_gangHardpointAttacker ] [ E_COLOR ], 0x80 ) ); - } else { - GangZoneHideForAll( g_gangTurfData[ x ] [ E_ID ] ); - GangZoneShowForAll( g_gangTurfData[ x ] [ E_ID ], g_gangHardpointTurf == g_gangTurfData[ x ] [ E_ID ] ? COLOR_HARDPOINT : g_gangTurfData[ x ] [ E_COLOR ] ); - } - } else { - GangZoneHideForAll( g_gangTurfData[ x ] [ E_ID ] ); - GangZoneShowForAll( g_gangTurfData[ x ] [ E_ID ], g_gangTurfData[ x ] [ E_COLOR ] ); - } - } - - foreach ( new playerid : Player ) { - if ( GetPlayerClass( playerid ) == CLASS_CIVILIAN && GetPlayerGang( playerid ) != INVALID_GANG_ID ) { - ShowHardpointIconForPlayer( playerid ); - } else { - HideHardpointIconForPlayer( playerid ); - } - } - return 1; -} - -stock Turf_GetTotalCaptureSeconds( ) { - - new - accum_seconds = 0; - - for ( new i = 0; i < sizeof ( g_gangHardpointCaptureTime ); i ++ ) { - accum_seconds += g_gangHardpointCaptureTime[ i ]; - } - return accum_seconds; -} - -stock Turf_GetMiddlePos( zoneid, &Float: middle_x, &Float: middle_y ) -{ - new - Float: min_x, Float: min_y, Float: max_x, Float: max_y; - - Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MIN_X, min_x ); - Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MIN_Y, min_y ); - Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MAX_X, max_x ); - Streamer_GetFloatData( STREAMER_TYPE_AREA, g_gangTurfData[ zoneid ] [ E_AREA ], E_STREAMER_MAX_Y, max_y ); - - middle_x = ( min_x + max_x ) / 2.0; - middle_y = ( min_y + max_y ) / 2.0; -} - -stock GetGangCapturedTurfs( gangid ) -{ - new - z, - c; - - foreach ( z : turfs ) if ( g_gangTurfData[ z ] [ E_OWNER ] != INVALID_GANG_ID && g_gangTurfData[ z ] [ E_OWNER ] == gangid ) { - c++; - } - return c; -} \ No newline at end of file diff --git a/gamemodes/irresistible/cnr/features/houses/house.pwn b/gamemodes/irresistible/cnr/features/houses/house.pwn index a3d91f2..9481cef 100644 --- a/gamemodes/irresistible/cnr/features/houses/house.pwn +++ b/gamemodes/irresistible/cnr/features/houses/house.pwn @@ -630,10 +630,10 @@ thread OnHouseLoad( ) } printf( "[HOUSES]: %d houses have been loaded. (Tick: %dms)", rows, GetTickCount( ) - loadingTick ); - // Make Damen the owner of unowned VIP houses + // Make server operator the owner of unowned VIP houses foreach ( new houseid : houses ) if ( g_houseData[ houseid ] [ E_COST ] < 10000 ) { if ( strmatch( g_houseData[ houseid ] [ E_OWNER ], "No-one" ) ) { - SetHouseOwner( houseid, 1, "Damen" ); + SetHouseOwner( houseid, SERVER_OPERATOR_ACC_ID, SERVER_OPERATOR ); } } return 1; diff --git a/gamemodes/irresistible/cnr/features/perks.pwn b/gamemodes/irresistible/cnr/features/perks.pwn index 20df771..4d202a9 100644 --- a/gamemodes/irresistible/cnr/features/perks.pwn +++ b/gamemodes/irresistible/cnr/features/perks.pwn @@ -63,6 +63,12 @@ hook OnPlayerWeaponShot( playerid, weaponid, hittype, hitid, Float: fX, Float: f hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) { + #if defined __cloudy_event_system + if ( IsPlayerInEvent( playerid ) && ! EventSettingAllow( EVENT_SETTING_PERKS ) ) { + return 1; + } + #endif + if ( dialogid == DIALOG_PERKS && response ) { switch( listitem ) @@ -194,8 +200,15 @@ hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) /* ** Commands ** */ CMD:perks( playerid, params[ ] ) { - if ( IsPlayerInEvent( playerid ) || IsPlayerInBattleRoyale( playerid ) ) + #if defined __cloudy_event_system + if ( IsPlayerInEvent( playerid ) && ! EventSettingAllow( EVENT_SETTING_PERKS ) ) { return SendError( playerid, "You cannot use this command since you're in an event." ); + } + #else + if ( IsPlayerInEvent( playerid ) || IsPlayerInBattleRoyale( playerid ) ) { + return SendError( playerid, "You cannot use this command since you're in an event." ); + } + #endif if ( IsPlayerInArmyVehicle( playerid ) ) return SendError( playerid, "You cannot use this command while in an army vehicle." ); diff --git a/gamemodes/irresistible/cnr/features/player/irresistibleguard.pwn b/gamemodes/irresistible/cnr/features/player/irresistibleguard.pwn index 889f9b5..5be6eba 100644 --- a/gamemodes/irresistible/cnr/features/player/irresistibleguard.pwn +++ b/gamemodes/irresistible/cnr/features/player/irresistibleguard.pwn @@ -353,7 +353,7 @@ thread OnAccountGuardDelete( playerid ) ; if ( id != p_accountSecurityData[ playerid ] [ E_ID ] ) - return SendError( playerid, "Something is wrong with your email. Talk to Damen." ), 1; + return SendError( playerid, "Something is wrong with your email. Talk to " SERVER_OPERATOR "." ), 1; if ( g_iTime - last_changed < 300 ) { return SendError( playerid, "You can use this feature in %s.", secondstotime( 300 - ( g_iTime - last_changed ) ) ); diff --git a/gamemodes/irresistible/cnr/features/robbery/clerks.pwn b/gamemodes/irresistible/cnr/features/robbery/clerks.pwn index 0de4a0d..048e3f0 100644 --- a/gamemodes/irresistible/cnr/features/robbery/clerks.pwn +++ b/gamemodes/irresistible/cnr/features/robbery/clerks.pwn @@ -557,7 +557,7 @@ function OnPlayerHoldupStore( playerid, clerkid, step ) } if ( !( 0 <= amount < 10000 ) ) - return SendError( playerid, "A money exploit occurred. Contact Damen ASAP." ); + return SendError( playerid, "A money exploit occurred. Contact " SERVER_OPERATOR " ASAP." ); GivePlayerCash( playerid, amount ); GivePlayerExperience( playerid, E_ROBBERY, 0.2 ); // give 10% of what it normally does, since it does this for like 4-5 times diff --git a/gamemodes/irresistible/cnr/features/vip/coin_market.pwn b/gamemodes/irresistible/cnr/features/vip/coin_market.pwn index 197d8ff..2ba784b 100644 --- a/gamemodes/irresistible/cnr/features/vip/coin_market.pwn +++ b/gamemodes/irresistible/cnr/features/vip/coin_market.pwn @@ -210,11 +210,11 @@ hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) // Redirect player if ( selected_vip == VIP_DIAMOND ) { - ShowPlayerDialog( playerid, DIALOG_DONATED_DIAGOLD, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Diamond V.I.P, you have the option of gifting Gold VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM Damen on the forum when you make a decision!", "Gift it!", "I'll Think!" ); + ShowPlayerDialog( playerid, DIALOG_DONATED_DIAGOLD, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Diamond V.I.P, you have the option of gifting Gold VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM " SERVER_OPERATOR " on the forum when you make a decision!", "Gift it!", "I'll Think!" ); } else if ( selected_vip == VIP_PLATINUM ) { - ShowPlayerDialog( playerid, DIALOG_DONATED_PLATBRONZE, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Platinum V.I.P, you have the option of gifting Bronze VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM Damen on the forum when you make a decision!", "Gift it!", "I'll Think!" ); + ShowPlayerDialog( playerid, DIALOG_DONATED_PLATBRONZE, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Platinum V.I.P, you have the option of gifting Bronze VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM " SERVER_OPERATOR " on the forum when you make a decision!", "Gift it!", "I'll Think!" ); } else { @@ -416,12 +416,12 @@ hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) if ( sscanf( inputtext, "u", pID ) ) { SendError( playerid, "Please enter a player's ID or name." ); - ShowPlayerDialog( playerid, DIALOG_DONATED_PLATBRONZE, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Platinum V.I.P, you have the option of gifting Bronze VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM Damen on the forum when you make a decision!", "Gift it!", "I'll Think!" ); + ShowPlayerDialog( playerid, DIALOG_DONATED_PLATBRONZE, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Platinum V.I.P, you have the option of gifting Bronze VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM " SERVER_OPERATOR " on the forum when you make a decision!", "Gift it!", "I'll Think!" ); } else if ( !IsPlayerConnected( pID ) ) { SendError( playerid, "This player is not connected." ); - ShowPlayerDialog( playerid, DIALOG_DONATED_PLATBRONZE, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Platinum V.I.P, you have the option of gifting Bronze VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM Damen on the forum when you make a decision!", "Gift it!", "I'll Think!" ); + ShowPlayerDialog( playerid, DIALOG_DONATED_PLATBRONZE, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Platinum V.I.P, you have the option of gifting Bronze VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM " SERVER_OPERATOR " on the forum when you make a decision!", "Gift it!", "I'll Think!" ); } else { @@ -447,12 +447,12 @@ hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) if ( sscanf( inputtext, "u", pID ) ) { SendError( playerid, "Please enter a player's ID or name." ); - ShowPlayerDialog( playerid, DIALOG_DONATED_DIAGOLD, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Diamond V.I.P, you have the option of gifting Gold VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM Damen on the forum when you make a decision!", "Gift it!", "I'll Think!" ); + ShowPlayerDialog( playerid, DIALOG_DONATED_DIAGOLD, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Diamond V.I.P, you have the option of gifting Gold VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM " SERVER_OPERATOR " on the forum when you make a decision!", "Gift it!", "I'll Think!" ); } else if ( !IsPlayerConnected( pID ) ) { SendError( playerid, "This player is not connected." ); - ShowPlayerDialog( playerid, DIALOG_DONATED_DIAGOLD, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Diamond V.I.P, you have the option of gifting Gold VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM Damen on the forum when you make a decision!", "Gift it!", "I'll Think!" ); + ShowPlayerDialog( playerid, DIALOG_DONATED_DIAGOLD, DIALOG_STYLE_INPUT, ""COL_GOLD"SF-CNR Donation", ""COL_WHITE"As you've redeemed Diamond V.I.P, you have the option of gifting Gold VIP to someone.\n\nIf you would like to gift it to yourself, type your name/id or the person you're gifting it to.\n\n"COL_ORANGE"If you just don't know yet, cancel and PM " SERVER_OPERATOR " on the forum when you make a decision!", "Gift it!", "I'll Think!" ); } else { @@ -801,7 +801,7 @@ static stock ShowPlayerVipRedeemedDialog( playerid ) ""COL_GREY" * What are the commands?"COL_WHITE" Use /vipcmds to view a detailed list of VIP commands.\n"\ ""COL_GREY" * What did I receive?"COL_WHITE" Check through your V.I.P package contents via our site (forum -> announcements board).\n" ); strcat( szLargeString, ""COL_GREY" * How to redeem my houses/vehicles?"COL_WHITE" You will be announced to the admins and noted down for assistance, so please wait!\n"\ - ""COL_GREY" * I'm unsure, help?"COL_WHITE" If you have any questions, please /ask otherwise enquire Damen via the forums!\n\nThanks for choosing to spend your Irresistible Coins, enjoy what you've got! :P" ); + ""COL_GREY" * I'm unsure, help?"COL_WHITE" If you have any questions, please /ask otherwise enquire " SERVER_OPERATOR " via the forums!\n\nThanks for choosing to spend your Irresistible Coins, enjoy what you've got! :P" ); ShowPlayerDialog( playerid, DIALOG_NULL, DIALOG_STYLE_MSGBOX, ""COL_GOLD"SF-CNR Donation", szLargeString, "Got it!", "" ); } diff --git a/gamemodes/irresistible/cnr/features/vip/player_note.pwn b/gamemodes/irresistible/cnr/features/vip/player_note.pwn index 45de4a6..dfaf6e7 100644 --- a/gamemodes/irresistible/cnr/features/vip/player_note.pwn +++ b/gamemodes/irresistible/cnr/features/vip/player_note.pwn @@ -146,7 +146,7 @@ thread deleteplayernote( playerid, noteid ) if ( rows ) { SaveToAdminLog( playerid, noteid, "removed note" ); mysql_single_query( sprintf( "UPDATE `NOTES` SET `DELETED`=%d WHERE `ID`=%d", p_AccountID[ playerid ], noteid ) ); - SendServerMessage( playerid, "You have removed note id %d. If there are any problems, contact Damen/Council.", noteid ); + SendServerMessage( playerid, "You have removed note id %d. If there are any problems, contact " SERVER_OPERATOR "/Council.", noteid ); AddAdminLogLineFormatted( "%s(%d) has deleted note id %d", ReturnPlayerName( playerid ), playerid, noteid ); return 1; } diff --git a/gamemodes/irresistible/cnr/features/vip/redeem_code.pwn b/gamemodes/irresistible/cnr/features/vip/redeem_code.pwn index a8b1a96..4ee283b 100644 --- a/gamemodes/irresistible/cnr/features/vip/redeem_code.pwn +++ b/gamemodes/irresistible/cnr/features/vip/redeem_code.pwn @@ -44,7 +44,7 @@ hook OnScriptInit( ) SetDynamicObjectMaterialText( ( g_TopDonorWall = CreateDynamicObject( 3074, -1574.3559, 885.1296, 14.0153, 0.0000, 0.0000, -0.0156 ) ), 0, "Nobody donated :(", 130, "Arial", 48, 0, -65536, 0, 1 ); // Latest Donor TD - g_TopDonorTD = TextDrawCreate(320.000000, 2.000000, "Top Donor Damen - $0.00, ~w~~h~~h~Latest Donor Damen - $0.00"); + g_TopDonorTD = TextDrawCreate(320.000000, 2.000000, "Top Donor " SERVER_OPERATOR " - $0.00, ~w~~h~~h~Latest Donor " SERVER_OPERATOR " - $0.00"); TextDrawAlignment(g_TopDonorTD, 2); TextDrawBackgroundColor(g_TopDonorTD, 0); TextDrawFont(g_TopDonorTD, 1); @@ -87,7 +87,7 @@ hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) strcat( szLargeString, ""COL_WHITE"Thank you a lot for donating! :D In return for your dignity, you have received Irresistible Coins.\n\n"\ ""COL_GREY" * What do I do with Irresistible Coins?"COL_WHITE" You can claim the V.I.P of your choice via "COL_GREY"/irresistiblecoins market"COL_WHITE".\n" ); strcat( szLargeString, ""COL_GREY" * How many do I have?"COL_WHITE" You can see how many Irresistible Coins you have via "COL_GREY"/irresistiblecoins"COL_WHITE".\n" \ - ""COL_GREY" * I'm unsure, help?"COL_WHITE" If you have any questions, please /ask otherwise enquire Damen via the forums!\n\nThank you once again for your contribution to our community! :P" ); + ""COL_GREY" * I'm unsure, help?"COL_WHITE" If you have any questions, please /ask otherwise enquire " SERVER_OPERATOR " via the forums!\n\nThank you once again for your contribution to our community! :P" ); return ShowPlayerDialog( playerid, DIALOG_FINISHED_DONATING, DIALOG_STYLE_MSGBOX, ""COL_GOLD"SF-CNR Donation", szLargeString, "Got it!", "" ); } else if ( dialogid == DIALOG_FINISHED_DONATING ) @@ -97,7 +97,7 @@ hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) else if ( dialogid == DIALOG_LATEST_DONOR ) { if ( GetPVarType( playerid, "just_donated" ) != PLAYER_VARTYPE_FLOAT ) - return SendError( playerid, "Seems to be an issue where we couldn't find how much you donated. Report to Damen." ); + return SendError( playerid, "Seems to be an issue where we couldn't find how much you donated. Report to " SERVER_OPERATOR "." ); new Float: fAmount = GetPVarFloat( playerid, "just_donated" ); diff --git a/gamemodes/irresistible/cnr/features/visage/blackjack.pwn b/gamemodes/irresistible/cnr/features/visage/blackjack.pwn index 54c4fdf..d644acc 100644 --- a/gamemodes/irresistible/cnr/features/visage/blackjack.pwn +++ b/gamemodes/irresistible/cnr/features/visage/blackjack.pwn @@ -710,7 +710,7 @@ stock SendClientMessageToBlackjack( tableid, colour, format[ ], va_args<> ) stock InitializeBlackjackTextdraws( id ) { - g_blackjackTurnTD[ id ] = TextDrawCreate(330.000000, 204.000000, "Damen has 5 seconds"); + g_blackjackTurnTD[ id ] = TextDrawCreate(330.000000, 204.000000, "" SERVER_OPERATOR " has 5 seconds"); TextDrawAlignment(g_blackjackTurnTD[ id ], 2); TextDrawBackgroundColor(g_blackjackTurnTD[ id ], 255); TextDrawFont(g_blackjackTurnTD[ id ], 1); diff --git a/gamemodes/irresistible/cnr/features/weed.pwn b/gamemodes/irresistible/cnr/features/weed.pwn index 88b0459..aa134b2 100644 --- a/gamemodes/irresistible/cnr/features/weed.pwn +++ b/gamemodes/irresistible/cnr/features/weed.pwn @@ -120,6 +120,12 @@ CMD:weed( playerid, params[ ] ) if ( IsPlayerTied( playerid ) || IsPlayerTazed( playerid ) || IsPlayerCuffed( playerid ) || IsPlayerJailed( playerid ) || IsPlayerInMinigame( playerid ) ) return SendError( playerid, "You cannot use this command at the moment." ); + #if defined __cloudy_event_system + if ( IsPlayerInEvent( playerid ) && ! EventSettingAllow( EVENT_SETTING_WEED ) ) { + return SendError( playerid, "You cannot use this command since you're in an event." ); + } + #endif + if ( strmatch( params, "plant" ) ) { if ( ! IsPlayerJob( playerid, JOB_DRUG_DEALER ) ) return SendError( playerid, "You are not a drug dealer." ); @@ -230,7 +236,6 @@ CMD:weed( playerid, params[ ] ) if ( IsPlayerLoadingObjects( playerid ) ) return SendError( playerid, "You're in a object-loading state, please wait." ); if ( IsPlayerAttachedObjectSlotUsed( playerid, 0 ) ) return SendError( playerid, "You cannot use this command since you're robbing." ); // if ( IsPlayerJob( playerid, JOB_DRUG_DEALER ) ) return SendError( playerid, "You cannot use your own products, they are for resale only!" ); - if ( IsPlayerInEvent( playerid ) ) return SendError( playerid, "You cannot use this command since you're in an event." ); //if ( IsPlayerInAnyVehicle( playerid ) ) return SendError( playerid, "You cannot use this command in a vehicle." ); //if ( GetPlayerState( playerid ) == PLAYER_STATE_ENTER_VEHICLE_DRIVER || GetPlayerState( playerid ) == PLAYER_STATE_ENTER_VEHICLE_PASSENGER ) return SendError( playerid, "You cannot use this command if you're entering a vehicle." ); //if ( GetPlayerState( playerid ) == PLAYER_STATE_EXIT_VEHICLE ) return SendError( playerid, "You cannot use this command if you're exiting a vehicle." ); diff --git a/gamemodes/irresistible/config/server.pwn b/gamemodes/irresistible/config/server.pwn index 560e4e6..e07c5e1 100644 --- a/gamemodes/irresistible/config/server.pwn +++ b/gamemodes/irresistible/config/server.pwn @@ -17,6 +17,10 @@ #define SERVER_IP "54.36.127.43:7777" #define SERVER_TWITTER "IrresistibleDev" +/* ** Server Operator ** */ +#define SERVER_OPERATOR "Lorenc" +#define SERVER_OPERATOR_ACC_ID 1 + /* ** Comment line to disable feature ** */ //#define SERVER_RULES_URL "files.sfcnr.com/en_rules.txt" // used for /rules (cnr\features\server_rules.pwn) #define SERVER_TWITTER_FEED_URL "files.sfcnr.com/cnr_twitter.php" // used for /twitter (cnr\commands\cmd_twitter.pwn) @@ -55,7 +59,7 @@ hook OnScriptInit( ) /* ** Functions ** */ stock IsPlayerLeadMaintainer( playerid ) // Limits money, coin, xp spawning to this user id { - return GetPlayerAccountID( playerid ) == 1 || GetPlayerAccountID( playerid ) == 674688; + return GetPlayerAccountID( playerid ) == SERVER_OPERATOR_ACC_ID; } stock IsPlayerServerMaintainer( playerid ) // Same as lead maintainer, just cant spawn money/xp/coins diff --git a/gamemodes/sf-cnr.pwn b/gamemodes/sf-cnr.pwn index 19e81b5..cf09681 100644 --- a/gamemodes/sf-cnr.pwn +++ b/gamemodes/sf-cnr.pwn @@ -12,11 +12,11 @@ * plugins mysql crashdetect sscanf streamer socket Whirlpool regex gvar FileManager profiler FCNPC */ -#pragma compat 1 +#pragma compat 1 #pragma option -d3 #pragma dynamic 7200000 -//#define DEBUG_MODE +#define DEBUG_MODE #if defined DEBUG_MODE #pragma option -d3 @@ -197,7 +197,7 @@ public OnServerUpdateTimer( ) // better to store in a variable as we are getting the timestamp from hardware g_iTime = gettime( ); - + UpdatePlayerCounters(); // for hooks @@ -408,7 +408,7 @@ public OnPlayerRequestClass( playerid, classid ) TextDrawHideForPlayer( playerid, g_DoubleXPTD ); p_MoneyBag{ playerid } = false; CallLocalFunction( "OnPlayerUnloadTextdraws", "d", playerid ); - return 1; + return 1; } public OnNpcConnect( npcid ) @@ -1091,8 +1091,14 @@ public OnPlayerTakePlayerDamage( playerid, issuerid, &Float: amount, weaponid, b } // Headshots + #if defined __cloudy_event_system + if ( ( weaponid == WEAPON_SNIPER || weaponid == WEAPON_RIFLE ) && bodypart == 9 && ( ! IsPlayerInEvent( playerid ) || ( IsPlayerInEvent( playerid ) && EventSettingAllow( EVENT_SETTING_HEADSHOT ) ) ) ) + #else if ( ( weaponid == WEAPON_SNIPER || weaponid == WEAPON_RIFLE ) && bodypart == 9 ) + #endif + { amount *= 1.5; + } // Paintball Headshot if ( issuerid != INVALID_PLAYER_ID && p_inPaintBall{ playerid } == true ) @@ -3425,12 +3431,14 @@ CMD:stoprob( playerid, params[ ] ) return 1; } +#if !defined __cloudy_event_system CMD:exit( playerid, params[ ] ) return cmd_enter( playerid, params ); CMD:enter( playerid, params[ ] ) { GameTextForPlayer(playerid, "~n~~n~~r~~k~~VEHICLE_ENTER_EXIT~~n~~w~press this key in a enterable checkpoint.", 5000, 3); return 1; } +#endif CMD:kill( playerid, params[ ] ) { @@ -3519,6 +3527,17 @@ CMD:kidnap( playerid, params[ ] ) else if ( IsPlayerJailed( victimid ) ) return SendError( playerid, "This player is jailed. He may be paused." ); else if ( p_KidnapImmunity[ victimid ] > g_iTime ) return SendError( playerid, "This player cannot be kidnapped for another %s.", secondstotime( p_KidnapImmunity[ victimid ] - g_iTime ) ); else if ( PutPlayerInEmptyVehicleSeat( p_LastVehicle[ playerid ], victimid ) == -1 ) return SendError( playerid, "Failed to place the player inside a full of player vehicle." ); + + // event check + #if defined __cloudy_event_system + if ( IsPlayerInEvent( playerid ) && ! EventSettingAllow( EVENT_SETTING_KIDNAP ) ) + #else + if ( IsPlayerInEvent( playerid ) ) + #endif + { + return SendError( playerid, "You cannot use this command since you're in an event." ); + } + SendClientMessageFormatted( victimid, -1, ""COL_RED"[KIDNAPPED]{FFFFFF} You have been kidnapped by %s(%d)!", ReturnPlayerName( playerid ), playerid ); SendClientMessageFormatted( playerid, -1, ""COL_GREEN"[KIDNAPPED]{FFFFFF} You have kidnapped %s(%d), he has been thrown in your previous entered vehicle!", ReturnPlayerName( victimid ), victimid ); TogglePlayerControllable( victimid, 0 ); @@ -3585,11 +3604,20 @@ CMD:tie( playerid, params[ ] ) else if ( IsPlayerJailed( victimid ) ) return SendError( playerid, "This player is jailed. He may be paused." ); else if ( IsPlayerLoadingObjects( victimid ) ) return SendError( playerid, "This player is in a object-loading state." ); else if ( GetPlayerState( victimid ) == PLAYER_STATE_WASTED ) return SendError( playerid, "You cannot tie wasted players." ); - else if ( IsPlayerInEvent( playerid ) ) return SendError( playerid, "You cannot use this command since you're in an event." ); else if ( IsPlayerInPlayerGang( playerid, victimid ) ) return SendError( playerid, "You cannot use this command on your homies!" ); else if ( IsPlayerSpawnProtected( victimid ) ) return SendError( playerid, "You cannot use this command on spawn protected players." ); else if ( IsPlayerInCasino( victimid ) && ! p_WantedLevel[ victimid ] ) return SendError( playerid, "The innocent person you're trying to tie is in a casino." ); + // event check + #if defined __cloudy_event_system + if ( IsPlayerInEvent( playerid ) && ! EventSettingAllow( EVENT_SETTING_TIE ) ) + #else + if ( IsPlayerInEvent( playerid ) ) + #endif + { + return SendError( playerid, "You cannot use this command since you're in an event." ); + } + // remove rope after attempt if ( p_Ropes[ playerid ] -- > 0 ) { ShowPlayerHelpDialog( playerid, 4500, "You only have %d ropes left!", p_Ropes[ playerid ] ); @@ -3769,9 +3797,18 @@ CMD:rob( playerid, params[ ] ) else if ( IsPlayerJailed( victimid ) ) return SendError( playerid, "This player is jailed. He may be paused." ); else if ( IsPlayerInCasino( victimid ) && ! p_WantedLevel[ victimid ] ) return SendError( playerid, "The innocent person you're trying to rob is in a casino." ); else if ( p_ClassSelection{ victimid } ) return SendError( playerid, "This player is currently in class selection." ); - else if ( IsPlayerInEvent( playerid ) ) return SendError( playerid, "You cannot use this command since you're in an event." ); else if ( IsPlayerInPlayerGang( playerid, victimid ) ) return SendError( playerid, "You cannot use this command on your homies!" ); + // event check + #if defined __cloudy_event_system + if ( IsPlayerInEvent( playerid ) && ! EventSettingAllow( EVENT_SETTING_ROB ) ) + #else + if ( IsPlayerInEvent( playerid ) ) + #endif + { + return SendError( playerid, "You cannot use this command since you're in an event." ); + } + new iRandom = random( 101 ); @@ -3854,10 +3891,19 @@ CMD:rape( playerid, params[ ] ) else if ( IsPlayerLoadingObjects( victimid ) ) return SendError( playerid, "This player is in a object-loading state." ); else if ( IsPlayerSpawnProtected( victimid ) ) return SendError( playerid, "This player is in a anti-spawn-kill state." ); else if ( p_ClassSelection{ victimid } ) return SendError( playerid, "This player is currently in class selection." ); - else if ( IsPlayerInEvent( playerid ) ) return SendError( playerid, "You cannot use this command since you're in an event." ); else if ( IsPlayerAFK( victimid ) && GetPlayerState( playerid ) != PLAYER_STATE_WASTED ) return SendError( playerid, "This player is in an AFK state." ); else if ( IsPlayerInPlayerGang( playerid, victimid ) ) return SendError( playerid, "You cannot use this command on your homies!" ); + // event check + #if defined __cloudy_event_system + if ( IsPlayerInEvent( playerid ) && ! EventSettingAllow( EVENT_SETTING_RAPE ) ) + #else + if ( IsPlayerInEvent( playerid ) ) + #endif + { + return SendError( playerid, "You cannot use this command since you're in an event." ); + } + new iRandom = random( 101 ); if ( IsPlayerJob( playerid, JOB_MUGGER ) ) { iRandom += 10; } // Adds more success to muggers if ( iRandom < 75 || IsPlayerTied( victimid ) ) @@ -7006,7 +7052,9 @@ stock IsPlayerAFK( playerid ) return ( ( GetTickCount( ) - p_AFKTime[ playerid ] stock GetPlayerVIPDuration( playerid ) return p_VIPExpiretime[ playerid ] - g_iTime; +#if !defined __cloudy_event_system stock IsPlayerInEvent( playerid ) return ( GetPlayerVirtualWorld( playerid ) == 69 ); +#endif stock UpdatePlayerEntranceExitTick( playerid, seconds = 2 ) { p_EntranceTimestamp[ playerid ] = g_iTime + seconds; diff --git a/scriptfiles/changelogs/cnr/_changelogs.cfg b/scriptfiles/changelogs/cnr/_changelogs.cfg index d974ecb..9cabed4 100644 --- a/scriptfiles/changelogs/cnr/_changelogs.cfg +++ b/scriptfiles/changelogs/cnr/_changelogs.cfg @@ -1,3 +1,4 @@ +v11.60.190 v11.57.188 v11.56.186 v11.55.182 diff --git a/scriptfiles/changelogs/cnr/v11.60.190.txt b/scriptfiles/changelogs/cnr/v11.60.190.txt new file mode 100644 index 0000000..0459d51 --- /dev/null +++ b/scriptfiles/changelogs/cnr/v11.60.190.txt @@ -0,0 +1,2 @@ +(+) Cloudy's advanced event system has been added. +(/) Full reversion of the turf war system to how it was pre-hardpoint. \ No newline at end of file