143 lines
4.5 KiB
Plaintext
143 lines
4.5 KiB
Plaintext
/*
|
|
* Irresistible Gaming (c) 2018
|
|
* Developed by Lorenc Pekaj
|
|
* Module: cnr\features\player\streaks.pwn
|
|
* Purpose: streak counting system for players
|
|
*/
|
|
|
|
/* ** Includes ** */
|
|
#include < YSI\y_hooks >
|
|
|
|
/* ** Definitions ** */
|
|
#define MAX_STREAKS ( 3 ) // Changing order will require change in UCP seasonal page.
|
|
|
|
/* ** Variables ** */
|
|
enum
|
|
{
|
|
STREAK_ROBBERY,
|
|
STREAK_ARREST,
|
|
STREAK_KILL
|
|
};
|
|
|
|
enum E_STREAK_DATA
|
|
{
|
|
E_STREAK, E_BEST_STREAK
|
|
};
|
|
|
|
static stock
|
|
g_streaksTypes [ MAX_STREAKS ] [ 8 ] = { "robbery", "arrest", "kill" },
|
|
p_streakData [ MAX_PLAYERS ] [ MAX_STREAKS ] [ E_STREAK_DATA ]
|
|
;
|
|
|
|
/* ** Hooks ** */
|
|
hook OnPlayerDisconnect( playerid, reason )
|
|
{
|
|
for ( new i = 0; i < MAX_STREAKS; i ++ ) {
|
|
p_streakData[ playerid ] [ i ] [ E_BEST_STREAK ] = 0;
|
|
p_streakData[ playerid ] [ i ] [ E_STREAK ] = 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
#if defined AC_INCLUDED
|
|
hook OnPlayerDeathEx( playerid, killerid, reason, Float: damage, bodypart )
|
|
#else
|
|
hook OnPlayerDeath( playerid, killerid, reason )
|
|
#endif
|
|
{
|
|
for ( new i = 0; i < MAX_STREAKS; i ++ ) {
|
|
p_streakData[ playerid ] [ i ] [ E_STREAK ] = 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
hook OnPlayerLogin( playerid )
|
|
{
|
|
format( szNormalString, sizeof( szNormalString ), "SELECT * FROM `STREAKS` WHERE `USER_ID`=%d", GetPlayerAccountID( playerid ) );
|
|
mysql_function_query( dbHandle, szNormalString, true, "OnStreaksLoad", "d", playerid );
|
|
return 1;
|
|
}
|
|
|
|
/* ** Commands ** */
|
|
CMD:streaks( playerid, params[ ] ) {
|
|
return Streak_ShowPlayer( playerid );
|
|
}
|
|
|
|
/* ** SQL Threads ** */
|
|
thread OnStreaksLoad( playerid )
|
|
{
|
|
if ( ! IsPlayerConnected( playerid ) )
|
|
return 0;
|
|
|
|
new
|
|
rows, fields, i = -1,
|
|
streakid, streak
|
|
;
|
|
|
|
cache_get_data( rows, fields );
|
|
if ( rows ) {
|
|
while( ++i < rows ) {
|
|
// Assign streak
|
|
streakid = cache_get_field_content_int( i, "STREAK_ID", dbHandle );
|
|
streak = cache_get_field_content_int( i, "STREAK", dbHandle );
|
|
|
|
// Check if streak is valid and then insert
|
|
if ( streakid < MAX_STREAKS )
|
|
p_streakData[ playerid ] [ streakid ] [ E_BEST_STREAK ] = streak;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* ** Functions ** */
|
|
stock Streak_ShowPlayer( playerid, dialogid = DIALOG_NULL, szSecondButton[ ] = "", forid = INVALID_PLAYER_ID ) {
|
|
|
|
szLargeString = ""COL_WHITE"Streak\t"COL_WHITE"Best Streak\t"COL_WHITE"Current Streak\n";
|
|
|
|
for( new streakid = 0, szStreak[ 8 ]; streakid < MAX_STREAKS; streakid++ ) {
|
|
szStreak = g_streaksTypes[ streakid ];
|
|
szStreak[ 0 ] = toupper( szStreak[ 0 ] );
|
|
|
|
format( szLargeString, 512, "%s%s\t%d\t%d\n", szLargeString, szStreak, p_streakData[ playerid ] [ streakid ] [ E_BEST_STREAK ], p_streakData[ playerid ] [ streakid ] [ E_STREAK ] );
|
|
}
|
|
|
|
if ( !IsPlayerConnected( forid ) )
|
|
forid = playerid;
|
|
|
|
return ShowPlayerDialog( forid, dialogid, DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Best Streaks", szLargeString, "Okay", szSecondButton );
|
|
}
|
|
|
|
stock Streak_IncrementPlayerStreak( playerid, streakid ) {
|
|
|
|
if ( ++p_streakData[ playerid ] [ streakid ] [ E_STREAK ] > p_streakData[ playerid ] [ streakid ] [ E_BEST_STREAK ] ) {
|
|
p_streakData[ playerid ] [ streakid ] [ E_BEST_STREAK ] = p_streakData[ playerid ] [ streakid ] [ E_STREAK ];
|
|
|
|
format( szBigString, 196, "INSERT INTO `STREAKS` (`USER_ID`,`STREAK_ID`,`STREAK`) VALUES(%d,%d,%d) ON DUPLICATE KEY UPDATE `STREAK`=%d;", p_AccountID[ playerid ], streakid, p_streakData[ playerid ] [ streakid ] [ E_BEST_STREAK ], p_streakData[ playerid ] [ streakid ] [ E_BEST_STREAK ] );
|
|
mysql_single_query( szBigString );
|
|
|
|
// Notify oneself
|
|
SendServerMessage( playerid, "You are currently on your best "COL_GOLD"%s streak"COL_WHITE" of %d!", g_streaksTypes[ streakid ], p_streakData[ playerid ] [ streakid ] [ E_BEST_STREAK ] );
|
|
|
|
// Beep
|
|
Beep( playerid );
|
|
}
|
|
|
|
// Notify whole chat
|
|
new
|
|
iModulus = 10;
|
|
|
|
if ( p_streakData[ playerid ] [ streakid ] [ E_STREAK ] > 50 )
|
|
iModulus = 1;
|
|
|
|
else if ( p_streakData[ playerid ] [ streakid ] [ E_STREAK ] > 20 )
|
|
iModulus = 5;
|
|
|
|
if ( p_streakData[ playerid ] [ streakid ] [ E_STREAK ] % iModulus == 0 ) {
|
|
if ( p_streakData[ playerid ] [ streakid ] [ E_STREAK ] == p_streakData[ playerid ] [ streakid ] [ E_BEST_STREAK ] ) {
|
|
SendGlobalMessage( -1, ""COL_GOLD"[STREAK]{FFFFFF} %s(%d) is currently on their best "COL_GOLD"%s streak"COL_WHITE" of %d!", ReturnPlayerName( playerid ), playerid, g_streaksTypes[ streakid ], p_streakData[ playerid ] [ streakid ] [ E_BEST_STREAK ] );
|
|
} else {
|
|
SendGlobalMessage( -1, ""COL_GOLD"[STREAK]{FFFFFF} %s(%d) is currently on a "COL_GOLD"%s streak"COL_WHITE" of %d!", ReturnPlayerName( playerid ), playerid, g_streaksTypes[ streakid ], p_streakData[ playerid ] [ streakid ] [ E_STREAK ] );
|
|
}
|
|
}
|
|
}
|