/* * Irresistible Gaming (c) 2018 * Developed by Lorenc Pekaj * Module: gangs.inc * Purpose: gang system */ /* ** Includes ** */ #include < YSI\y_hooks > /* ** Definitions ** */ #define MAX_GANGS ( MAX_PLAYERS ) // safest is MAX_PLAYERS #define INVALID_GANG_ID ( -1 ) #define MAX_COLEADERS ( 3 ) /* ** Macros ** */ #define IsGangPrivate(%0) ( g_gangData[ %0 ] [ E_INVITE_ONLY ] ) #define GetPlayerGang(%0) ( p_GangID[ %0 ] ) /* ** Variables ** */ enum e_gang_data { E_SQL_ID, E_NAME[ 30 ], E_LEADER, E_COLOR, E_SOFT_DELETE_TS, E_BANK, E_KILLS, E_DEATHS, E_SCORE, E_RESPECT, E_COLEADER[ MAX_COLEADERS ], bool: E_INVITE_ONLY, E_JOIN_MSG[ 96 ], bool: E_HAS_FACILITY }; enum E_GANG_LEAVE_REASON { GANG_LEAVE_QUIT, GANG_LEAVE_KICK, GANG_LEAVE_UNKNOWN }; new g_gangColors[ ] = { 0x99FF00FF, 0x00CC00FF, 0x009999FF, 0x0033CCFF, 0x330099FF, 0x660099FF, 0xCC0099FF }, g_gangData [ MAX_GANGS ] [ e_gang_data ], g_sortedGangData [ MAX_GANGS ] [ e_gang_data ], // used for sorting only p_GangID [ MAX_PLAYERS ], bool: p_gangInvited [ MAX_PLAYERS ] [ MAX_GANGS ], p_gangInviteTick [ MAX_PLAYERS ], Iterator:gangs ; /* ** Forwards ** */ forward OnPlayerLeaveGang( playerid, gangid, reason ); forward ZoneTimer( ); /* ** Hooks ** */ /*hook OnGameModeInit( ) { #if !defined DEBUG_MODE // Remove inactive gang members // mysql_single_query( "UPDATE `USERS` SET `GANG_ID`=-1 WHERE UNIX_TIMESTAMP()-`USERS`.`LASTLOGGED` > 1209600" ); // Remove gangs with a non existant gang leader / unmatched player gang id to gang leader id (***broken query***) // mysql_single_query( "DELETE g FROM GANGS g LEFT JOIN USERS u ON g.LEADER = u.ID WHERE (u.GANG_ID != g.ID OR u.ID IS NULL) AND g.LEADER >= 0" ); #endif return 1; }*/ /* ** Functions ** */ stock SetPlayerGang( playerid, joining_gang ) { if ( ! Iter_Contains( gangs, joining_gang ) ) return 0; // remove from existing gang if ( p_GangID[ playerid ] != INVALID_GANG_ID ) { RemovePlayerFromGang( playerid, GANG_LEAVE_QUIT ); } p_GangID[ playerid ] = joining_gang; if ( GetPlayerWantedLevel( playerid ) < 1 ) SetPlayerColor( playerid, g_gangData[ joining_gang ] [ E_COLOR ] ); mysql_single_query( sprintf( "UPDATE `USERS` SET `GANG_ID`=%d WHERE `ID`=%d", g_gangData[ joining_gang ] [ E_SQL_ID ], GetPlayerAccountID( playerid ) ) ); SendClientMessageToGang( joining_gang, g_gangData[ joining_gang ] [ E_COLOR ], "[GANG]{FFFFFF} %s(%d) has joined the gang.", ReturnPlayerName( playerid ), playerid ); return 1; }