296 lines
10 KiB
SourcePawn
296 lines
10 KiB
SourcePawn
#pragma semicolon 1
|
|
#define DEBUG
|
|
#define PLUGIN_AUTHOR "jenz"
|
|
#define PLUGIN_VERSION "1.00"
|
|
#define g_dIndex 65
|
|
#define g_dLength 256
|
|
#include <sourcemod>
|
|
#include <sdktools>
|
|
#include <system2>
|
|
#pragma newdecls required
|
|
//64 maps in one event cuz ofc
|
|
char g_cEventMaps[g_dIndex][g_dLength];
|
|
char g_cEventContent[g_dLength][g_dLength];
|
|
int g_iIndexCounter;
|
|
Database g_dDatabase;
|
|
public Plugin myinfo =
|
|
{
|
|
name = "schedule announcer",
|
|
author = PLUGIN_AUTHOR,
|
|
description = "informs players when next event takes place",
|
|
version = PLUGIN_VERSION,
|
|
url = "www.unloze.com"
|
|
};
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void OnPluginStart()
|
|
{
|
|
RegConsoleCmd("sm_event", Cmd_EventNotifier);
|
|
RegConsoleCmd("sm_events", Cmd_EventNotifier);
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public Action Cmd_EventNotifier(int client, any args)
|
|
{
|
|
EventNotifierMenu(client);
|
|
return Plugin_Handled;
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void OnMapStart()
|
|
{
|
|
SQL_StartConnection();
|
|
SQL_CreateDBIFNotExist();
|
|
EventInfo();
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
static void EventNotifierMenu(int client)
|
|
{
|
|
Menu EventMenu = new Menu(MenuHandler1);
|
|
char l_cEventTimeleft[g_dLength][1];
|
|
EventMenu.SetTitle("UNLOZE Event Information");
|
|
CalculateTimeToNextEvent(g_cEventContent[3], g_cEventContent[4], l_cEventTimeleft[0], sizeof(l_cEventTimeleft));
|
|
// 0 event title
|
|
EventMenu.AddItem("", g_cEventContent[0], ITEMDRAW_DISABLED);
|
|
for (int i = 0; i < g_iIndexCounter; i++)
|
|
{
|
|
if (StrContains(g_cEventMaps[i], "Map:", false) == -1)
|
|
{
|
|
Format(g_cEventMaps[i], sizeof(g_cEventMaps), "Map: %s", g_cEventMaps[i]);
|
|
}
|
|
EventMenu.AddItem("", g_cEventMaps[i], ITEMDRAW_DISABLED);
|
|
}
|
|
// 1 rewards
|
|
if (StrContains(g_cEventContent[1], "Rewards:", false) == -1)
|
|
{
|
|
TrimString(g_cEventContent[1]);
|
|
Format(g_cEventContent[1], sizeof(g_cEventContent), "Rewards: %s", g_cEventContent[1]);
|
|
}
|
|
EventMenu.AddItem("", g_cEventContent[1], ITEMDRAW_DISABLED);
|
|
// 2 leaders
|
|
if (StrContains(g_cEventContent[2], "Leaders:", false) == -1)
|
|
{
|
|
Format(g_cEventContent[2], sizeof(g_cEventContent), "Leaders: %s", g_cEventContent[2]);
|
|
}
|
|
EventMenu.AddItem("", g_cEventContent[2], ITEMDRAW_DISABLED);
|
|
// 3 timeleft
|
|
if (StrContains(l_cEventTimeleft[0], "Timeleft:", false) == -1)
|
|
{
|
|
Format(l_cEventTimeleft[0], sizeof(l_cEventTimeleft), "Timeleft: %s", l_cEventTimeleft[0]);
|
|
}
|
|
EventMenu.AddItem("", l_cEventTimeleft[0], ITEMDRAW_DISABLED);
|
|
EventMenu.ExitButton = true;
|
|
EventMenu.ExitBackButton = true;
|
|
EventMenu.Display(client, 0);
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public int MenuHandler1(Menu menu, MenuAction action, int param1, int param2)
|
|
{
|
|
if (action == MenuAction_End)
|
|
{
|
|
delete menu;
|
|
}
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void CalculateTimeToNextEvent(char[] content, char[] content1, char[]str, int maxsize)
|
|
{
|
|
//content = 24/11/2018
|
|
//content1 = : 6
|
|
char sPart[2][526];
|
|
char sYear[24];
|
|
char sMonth[24];
|
|
char sDay[24];
|
|
char sHour[24];
|
|
char sMinute[24];
|
|
int i_Year;
|
|
int i_Month;
|
|
int i_Day;
|
|
int i_Hour;
|
|
int i_Minute;
|
|
int year;
|
|
int months;
|
|
int days;
|
|
int l_hours;
|
|
int minutes;
|
|
FormatTime(sYear, sizeof(sYear), "%Y");
|
|
FormatTime(sMonth, sizeof(sMonth), "%m");
|
|
FormatTime(sDay, sizeof(sDay), "%d");
|
|
FormatTime(sHour, sizeof(sHour), "%H");
|
|
FormatTime(sMinute, sizeof(sMinute), "%M");
|
|
TrimString(content);
|
|
TrimString(content1);
|
|
ExplodeString(content, "/", sPart, 2, maxsize);
|
|
i_Day = StringToInt(sDay);
|
|
days = StringToInt(sPart[0]);
|
|
i_Month = StringToInt(sMonth);
|
|
ExplodeString(sPart[1], "/", sPart, 2, maxsize);
|
|
months = StringToInt(sPart[0]);
|
|
i_Hour = StringToInt(sHour);
|
|
l_hours = StringToInt(content1);
|
|
char sPart1[3][526];
|
|
ExplodeString(content, "/", sPart1, 3, maxsize);
|
|
year = StringToInt(sPart1[2]);
|
|
i_Year = StringToInt(sYear);
|
|
i_Minute = StringToInt(sMinute);
|
|
if (days >= i_Day || months > i_Month || year > i_Year)
|
|
{
|
|
if (i_Year <= year)
|
|
{
|
|
if (year > i_Year)
|
|
{
|
|
i_Month = 1;
|
|
}
|
|
if (days >= i_Day)
|
|
{
|
|
days -= i_Day;
|
|
}
|
|
else if (i_Month == 1 || i_Month == 3 || i_Month == 5 || i_Month == 7 || i_Month == 8 || i_Month == 10 || i_Month == 12)
|
|
{
|
|
days += (31 - i_Day);
|
|
}
|
|
else if (i_Month == 2)
|
|
{
|
|
days += (28 - i_Day);
|
|
}
|
|
else
|
|
{
|
|
days += (30 - i_Day);
|
|
}
|
|
//from 12 to 24 or from 7 to 19 etc etc
|
|
l_hours += 12;
|
|
if (i_Hour > l_hours)
|
|
{
|
|
days -= 1;
|
|
l_hours = 24 - (i_Hour - l_hours);
|
|
//PrintToChatAll("if statement l_hours: %i", l_hours);
|
|
}
|
|
else
|
|
{
|
|
l_hours -= i_Hour;
|
|
//PrintToChatAll("else statement: l_hours: %i", l_hours);
|
|
}
|
|
if (l_hours != 0)
|
|
{
|
|
l_hours -= 1;
|
|
}
|
|
minutes = 60 - i_Minute;
|
|
Format(str, maxsize, "Taking Place in: %i Days, %i hours, %i Minutes", days, l_hours, minutes);
|
|
}
|
|
else
|
|
{
|
|
Format(str, maxsize, "EVENT OVER");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Format(str, maxsize, "EVENT OVER");
|
|
}
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void EventInfo()
|
|
{
|
|
MYSQLGetEventContent();
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void MYSQLGetEventContent()
|
|
{
|
|
MYSQLGetContent();
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void MYSQLGetContent()
|
|
{
|
|
char sQuery[g_dLength];
|
|
Format(sQuery, sizeof(sQuery), "SELECT * FROM `EventContent`");
|
|
SQL_TQuery(g_dDatabase, TqueryThreadCallback, sQuery);
|
|
Format(sQuery, sizeof(sQuery), "SELECT * FROM `Maps`");
|
|
SQL_TQuery(g_dDatabase, TqueryThreadCallbackmaps, sQuery);
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void TqueryThreadCallback(Handle db, Handle rs, const char[] error, any data)
|
|
{
|
|
if (SQL_GetRowCount(rs) > 0 && SQL_FetchRow(rs))
|
|
{
|
|
// 0 event title
|
|
SQL_FetchString(rs, 0, g_cEventContent[0], sizeof(g_cEventContent));
|
|
// 1 rewards
|
|
SQL_FetchString(rs, 1, g_cEventContent[1], sizeof(g_cEventContent));
|
|
// 2 leaders
|
|
SQL_FetchString(rs, 2, g_cEventContent[2], sizeof(g_cEventContent));
|
|
// 3 timeleft (24/11/2018)
|
|
SQL_FetchString(rs, 3, g_cEventContent[3], sizeof(g_cEventContent));
|
|
//4 timeleft = : 5 pm GMT+0 // 6 pm GMT+1 // 7 pm GMT+2
|
|
SQL_FetchString(rs, 4, g_cEventContent[4], sizeof(g_cEventContent));
|
|
}
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void TqueryThreadCallbackmaps(Handle owner, Handle rs, const char[] error, any data)
|
|
{
|
|
g_iIndexCounter = 0;
|
|
if (SQL_GetRowCount(rs) > 0 && SQL_FetchRow(rs))
|
|
{
|
|
g_iIndexCounter++;
|
|
int index;
|
|
SQL_FetchString(rs, 0, g_cEventMaps[index], sizeof(g_cEventMaps));
|
|
index++;
|
|
while (SQL_FetchRow(rs))
|
|
{
|
|
SQL_FetchString(rs, 0, g_cEventMaps[index], sizeof(g_cEventMaps));
|
|
index++;
|
|
g_iIndexCounter++;
|
|
}
|
|
}
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void SQL_StartConnection()
|
|
{
|
|
char error[g_dLength];
|
|
if (SQL_CheckConfig("eventscss"))
|
|
g_dDatabase = SQL_Connect("eventscss", true, error, sizeof(error));
|
|
if (g_dDatabase == null)
|
|
{
|
|
PrintToChatAll("{green}[UNLOZE] {white}Error! Could not connect to MYSQL-DB!");
|
|
}
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
public void SQL_CreateDBIFNotExist()
|
|
{
|
|
char sQuery[g_dLength];
|
|
Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `eventscss`.`EventContent` (`title` VARCHAR(256) NOT NULL, `Rewards` VARCHAR(256) NULL, `Leaders` VARCHAR(256) NULL, `datum` VARCHAR(128) NULL, `hours` VARCHAR(128) NULL, PRIMARY KEY (`title`)) ENGINE = InnoDB;");
|
|
SQL_FastQuery(g_dDatabase, sQuery);
|
|
Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS `eventscss`.`Maps` (`MapNames` VARCHAR(45) NOT NULL, PRIMARY KEY (`MapNames`)) ENGINE = InnoDB;");
|
|
SQL_FastQuery(g_dDatabase, sQuery);
|
|
}
|
|
//----------------------------------------------------------------------------------------------------
|
|
// Purpose:
|
|
//----------------------------------------------------------------------------------------------------
|
|
stock bool IsValidClient(int client)
|
|
{
|
|
if (client > 0 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client))
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
} |