Ok, actually sometimes plugin insert player in table without name or steamid:
Before server restart, plugin worked ok but after i restarted the server there are some anormal issues.
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#if !defined MAX_NAME_LENGTH
#define MAX_NAME_LENGTH 32
#endif
#define VERSION "1.0"
#define MAX_CLAN_NAME_LENGTH 10
#define MAX_CLAN_TAG_LENGTH 5
#pragma semicolon 1
new Handle:g_SqlTuple;
new g_Error[512];
new g_SayText;
new const g_szTag[] = "^4[CLAN SYSTEM]^1";
new const g_SqlCvar[][] =
{
};
enum _:USER_INFO
{
szName[MAX_NAME_LENGTH],
szAuthid[MAX_AUTHID_LENGTH],
iIsUserClanLeader,
iIsUserClanSecondLeader,
iIsUserClanMember,
ClanName[36],
ClanTag[10]
}
new const g_szTablesInfo[][] =
{
"( `id` INT(11) NOT NULL AUTO_INCREMENT ,\
`clan_name` VARCHAR(10) NOT NULL ,\
`clan_tag` VARCHAR(36) NOT NULL ,\
`clan_leader` VARCHAR(36) NOT NULL ,\
`leader_steamid` VARCHAR(36) NOT NULL ,\
`clan_second_leader` VARCHAR(36) NOT NULL ,\
`second_leader_steamid` VARCHAR(36) NOT NULL ,\
PRIMARY KEY (`id`))",
"( `id` INT(11) NOT NULL AUTO_INCREMENT ,\
`name` VARCHAR(10) NOT NULL ,\
`steamid` VARCHAR(36) NOT NULL ,\
`last_steamid` VARCHAR(36) NOT NULL ,\
`clan` VARCHAR(36) NOT NULL ,\
PRIMARY KEY (`id`))"
};
new const g_szTables[][] =
{
"Clans",
"User_Info_Clans"
};
new g_UserData[MAX_PLAYERS + 1][USER_INFO];
public plugin_init()
{
register_plugin("Clan System", VERSION, "lexzor");
register_clcmd("say /clans", "clan_menu", -1, "Open clan system menu", -1);
register_clcmd("say", "hookSay");
register_clcmd("say_team", "hookSay");
register_concmd("ClanName", "get_clan_name", -1, "", -1);
register_concmd("ClanTag", "get_clan_tag", -1, "", -1);
register_dictionary("clan_system.txt");
g_SayText = get_user_msgid("SayText");
MySql_Init();
}
public plugin_end()
{
SQL_FreeHandle(g_SqlTuple);
}
public MySql_Init()
{
g_SqlTuple = SQL_MakeDbTuple(g_SqlCvar[0], g_SqlCvar[1], g_SqlCvar[2], g_SqlCvar[3]);
new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error));
if(SqlConnection == Empty_Handle)
{
set_fail_state(g_Error);
}
new Handle:Queries;
new szCache[1024];
for(new i = 0; i < sizeof(g_szTables); i++)
{
formatex(szCache, charsmax(szCache), "CREATE TABLE IF NOT EXISTS %s %s", g_szTables[i], g_szTablesInfo[i]);
Queries = SQL_PrepareQuery(SqlConnection, szCache);
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error));
set_fail_state(g_Error);
}
}
SQL_FreeHandle(Queries);
SQL_FreeHandle(SqlConnection);
}
public hookSay(id)
{
new szTyped[192];
new szSayType[10];
new szTeam[20];
new szMessage[192];
new bool:isTeam;
new iTeam = get_user_team(id);
read_args(szTyped, charsmax(szTyped));
remove_quotes(szTyped);
trim(szTyped);
if(szTyped[0] == EOS || equal(szTyped[0], "") || equal(szTyped[0], " "))
return PLUGIN_HANDLED_MAIN;
read_argv(0, szSayType, charsmax(szSayType));
remove_quotes(szSayType);
trim(szSayType);
if(equali(szSayType, "say_team"))
{
switch(iTeam)
{
case 0,3: formatex(szTeam, charsmax(szTeam), "(Spectators)");
case 1: formatex(szTeam, charsmax(szTeam), "(Terrorists)");
case 2: formatex(szTeam, charsmax(szTeam), "(Counter-Terrorists)");
}
isTeam = true;
}
if(containi(g_UserData[id][ClanName], "NONE") != -1)
{
formatex(szMessage, charsmax(szMessage), "^3%s^3 %s:^1 %s", isTeam ? szTeam : "", g_UserData[id][szName], szTyped);
}
else
{
formatex(szMessage, charsmax(szMessage), "^3%s^4 [%s]^3 %s:^1 %s", isTeam ? szTeam : "", g_UserData[id][ClanTag], g_UserData[id][szName], szTyped);
}
for(new i = 0; i < get_maxplayers(); i++)
{
if(!is_user_connected(i))
continue;
if(isTeam && iTeam != get_user_team(i))
continue;
send_message(szMessage, id, i);
}
return PLUGIN_HANDLED_MAIN;
}
public client_authorized(id)
{
if(is_user_bot(id) || is_user_hltv(id))
return PLUGIN_HANDLED;
get_user_authid(id, g_UserData[id][szAuthid], charsmax(g_UserData[][szAuthid]));
get_user_name(id, g_UserData[id][szName], charsmax(g_UserData[][szName]));
mysql_escape_string(g_UserData[id][szName], charsmax(g_UserData[][szName]));
g_UserData[id][iIsUserClanLeader] = 0;
g_UserData[id][iIsUserClanMember] = 0;
g_UserData[id][iIsUserClanSecondLeader] = 0;
return PLUGIN_CONTINUE;
}
public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id))
return PLUGIN_HANDLED;
insert_player_into_user_table(id);
return PLUGIN_CONTINUE;
}
public insert_player_into_user_table(id)
{
new szQuery[1024], szData[1];
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `steamid` = '%s'", g_szTables[1], g_UserData[id][szAuthid]);
szData[0] = id;
SQL_ThreadQuery(g_SqlTuple, "InsertPlayerIntoClanTable", szQuery, szData, charsmax(szData));
}
public InsertPlayerIntoClanTable(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
if(FailState || ErrorCode)
log_amx("^nSQL ERROR: %s^n", szError);
new id = szData[0];
if(SQL_NumResults(Query) > 0)
{
SQL_ReadResult(Query, 4, g_UserData[id][ClanName], charsmax(g_UserData[][ClanName]));
if(!equal(g_UserData[id][ClanName], "NONE"))
g_UserData[id][iIsUserClanMember] = 1;
get_user_clan_tag(id);
}
else
{
new szQuery[1024];
formatex(szQuery, charsmax(szQuery), "INSERT INTO `%s` (`name`,`steamid`,`last_steamid`,`clan`) \
VALUES \
('%s','%s','%s','NONE')",
g_szTables[1], g_UserData[id][szName], g_UserData[id][szAuthid], g_UserData[id][szAuthid]);
formatex(g_UserData[id][ClanName], charsmax(g_UserData[][ClanName]), "NONE");
SQL_ThreadQuery(g_SqlTuple, "FreeHandle", szQuery);
}
SQL_FreeHandle(Query);
}
public check_player_rank(id)
{
new szQuery[512], szData[1];
szData[0] = id;
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `steamid` = '%s'", g_UserData[id][ClanName], g_UserData[id][szAuthid]);
SQL_ThreadQuery(g_SqlTuple, "CheckPlayerRank", szQuery, szData, charsmax(szData));
}
public GetUserClanTag(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
if(FailState || ErrorCode)
log_amx("^nSQL ERROR: %s^n", szError);
new id = szData[0];
if(SQL_NumResults(Query) > 0)
{
SQL_ReadResult(Query, 2, g_UserData[id][ClanTag], charsmax(g_UserData[][ClanTag]));
check_player_rank(id);
}
else
{
new szQuery[1024];
formatex(szQuery, charsmax(szQuery), "UPDATE `%s` SET `clan` = 'NONE' WHERE `steamid` = '%s'", g_szTables[1], g_UserData[id][szAuthid]);
SQL_ThreadQuery(g_SqlTuple, "FreeHandle", szQuery);
}
SQL_FreeHandle(Query);
}
public CheckPlayerRank(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
if(FailState || ErrorCode)
log_amx("^nSQL ERROR: %s^n", szError);
new id = szData[0];
if(SQL_NumResults(Query) > 0)
{
g_UserData[id][iIsUserClanLeader] = SQL_ReadResult(Query, 3);
g_UserData[id][iIsUserClanSecondLeader] = SQL_ReadResult(Query, 4);
}
SQL_FreeHandle(Query);
}
public get_user_clan_tag(id)
{
new szQuery[1024], szData[1];
szData[0] = id;
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `clan_name` = '%s'", g_szTables[0], g_UserData[id][ClanName]);
SQL_ThreadQuery(g_SqlTuple, "GetUserClanTag", szQuery, szData, charsmax(szData));
}
public clan_menu(id)
{
new szTitle[64];
new szItem[2][64];
formatex(szTitle, charsmax(szTitle), "%L", id, "MAIN_MENU_TITLE");
new iMenu = menu_create(szTitle, "clan_menu_handler");
formatex(szItem[0], charsmax(szItem[]), "%s%L", g_UserData[id][iIsUserClanMember] ? "\d" : "\w", id, "MENU_CREATE_CLAN");
menu_additem(iMenu, szItem[0]);
formatex(szItem[1], charsmax(szItem[]), "%s%L", g_UserData[id][iIsUserClanMember] ? "\w" : "\d", id, "MENU_ABOUT_CLAN");
menu_additem(iMenu, szItem[1]);
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, iMenu, 0, -1);
}
public clan_menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
switch(item)
{
case 0:
{
switch(g_UserData[id][iIsUserClanMember])
{
case 1:
{
client_print_color(id, print_team_default, "%s %L", g_szTag, id, "ALREADY_CLAN_MEMBER");
}
case 0:
{
create_clan_menu(id);
}
}
}
case 1:
{
switch(g_UserData[id][iIsUserClanMember])
{
case 0:
{
client_print_color(id, print_team_default, "%s %L", g_szTag, id, "NOT_A_CLAN_MEMBER");
}
case 1:
{
about_clan_menu(id);
}
}
}
}
return PLUGIN_CONTINUE;
}
public create_clan_menu(id)
{
new szTitle[64];
new szItem[2][64];
formatex(szTitle, charsmax(szTitle), "%L", id, "CREATE_CLAN_MENU_TITLE");
new iMenu = menu_create(szTitle, "create_clan_menu_handler");
formatex(szItem[0], charsmax(szItem[]), "\r%L \y%s", id, "CREATE_CLAN_NAME_FIELD", g_UserData[id][ClanName]);
menu_additem(iMenu, szItem[0]);
formatex(szItem[1], charsmax(szItem[]), "\r%L \y%s", id, "CREATE_CLAN_TAG_FIELD", g_UserData[id][ClanTag]);
menu_additem(iMenu, szItem[1]);
menu_addblank(iMenu, 0);
menu_additem(iMenu, "Confirm");
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, iMenu, 0, -1);
}
public create_clan_menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
switch(item)
{
case 0:
{
client_cmd(id, "messagemode ClanName");
create_clan_menu(id);
}
case 1:
{
client_cmd(id, "messagemode ClanTag");
create_clan_menu(id);
}
case 2:
{
if(g_UserData[id][ClanName][0] == EOS || g_UserData[id][ClanTag][0] == EOS)
{
client_print_color(id, print_team_default, "%s %L", g_szTag, id, "NO_CHARACTERS");
create_clan_menu(id);
return PLUGIN_HANDLED;
}
check_clan_name(id);
}
}
return PLUGIN_CONTINUE;
}
public about_clan_menu(id)
{
new szTitle[64], szItem[5][64];
formatex(szTitle, charsmax(szTitle), "%L", id, "ABOUT_CLAN_MENU_TITLE");
new iMenu = menu_create(szTitle, "about_clan_menu_handler");
formatex(szItem[0], charsmax(szItem), "%L", id, "ALL_MEMBERS_FIELD");
server_print("%s", szItem[0]);
menu_additem(iMenu, szItem[0]);
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, iMenu, 0);
}
public about_clan_menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(id);
return PLUGIN_HANDLED;
}
switch(item)
{
case 0:
{
all_members_menu(id);
}
}
return PLUGIN_CONTINUE;
}
public all_members_menu(id)
{
new szQuery[512];
new szData[1];
szData[0] = id;
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` ORDER BY (id)", g_UserData[id][ClanName]);
SQL_ThreadQuery(g_SqlTuple, "AllMembersMenu", szQuery, szData, 1);
}
public AllMembersMenu(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
if(FailState || ErrorCode)
log_amx("^nSQL ERROR: %s^n", szError);
new id = szData[0];
new szTitle[64], szItem[64], szMemberName[64];
new iResults = SQL_NumResults(Query);
formatex(szTitle, charsmax(szTitle), "%L", id, "ALL_MEMBERS_MENU", g_UserData[id][ClanName]);
new iMenu = menu_create(szTitle, "all_members_menu_handler");
if(iResults > 0)
{
for(new i = 0; i < iResults; i++)
{
SQL_ReadResult(Query, 1, szMemberName, charsmax(szMemberName));
formatex(szItem, charsmax(szItem), "%s", szMemberName);
menu_additem(iMenu, szMemberName);
}
}
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, iMenu, 0);
SQL_FreeHandle(Query);
}
public all_members_menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
all_members_menu(id);
}
public check_clan_name(id)
{
new szQuery[512], szData[1];
szData[0] = id;
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `clan_name` = '%s'", g_szTables[0], g_UserData[id][ClanName]);
SQL_ThreadQuery(g_SqlTuple, "CheckClanName", szQuery, szData, charsmax(szData));
}
public CheckClanName(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
if(FailState || ErrorCode)
log_amx("^nSQL ERROR: %s^n", szError);
new id = szData[0];
if(SQL_NumResults(Query) > 0)
{
client_print_color(id, print_team_default, "%s %L", g_szTag, id, "CLAN_NAME_ERROR", g_UserData[id][ClanName]);
create_clan_menu(id);
}
else
{
add_clan_in_sql(id);
}
SQL_FreeHandle(Query);
}
public add_clan_in_sql(id)
{
// ADD CLAN IN CLANS TABLE
new szQuery[1024];
formatex(szQuery, charsmax(szQuery), "INSERT INTO `%s` \
(`clan_name`, `clan_tag`, `clan_leader`, `leader_steamid`, `clan_second_leader`, `second_leader_steamid`)\
VALUES\
('%s','%s','%s','%s','NOSECONDLEADER','NOSECONDLEADER')",
g_szTables[0], g_UserData[id][ClanName], g_UserData[id][ClanTag], g_UserData[id][szName], g_UserData[id][szAuthid]);
SQL_ThreadQuery(g_SqlTuple, "FreeHandle", szQuery);
// UPDATE USER CLAN IN SECOND TABLE
new szQuery2[1024];
formatex(szQuery2, charsmax(szQuery), "UPDATE `%s` SET `clan` = '%s' WHERE `steamid` = '%s'", g_szTables[1], g_UserData[id][ClanName], g_UserData[id][szAuthid]);
SQL_ThreadQuery(g_SqlTuple, "FreeHandle", szQuery2);
create_clan_sql_table(id);
}
public create_clan_sql_table(id)
{
new szQuery[512];
formatex(szQuery, charsmax(szQuery), "CREATE TABLE IF NOT EXISTS `%s` \
( `id` INT(11) NOT NULL AUTO_INCREMENT ,\
`member_name` VARCHAR(10) NOT NULL ,\
`steamid` VARCHAR(36) NOT NULL ,\
`is_clan_leader` INT(2) NOT NULL ,\
`is_second_leader` INT(2) NOT NULL ,\
PRIMARY KEY (`id`))", g_UserData[id][ClanName]);
SQL_ThreadQuery(g_SqlTuple, "FreeHandle", szQuery);
add_clan_leader_in_clan_table(id);
}
public add_clan_leader_in_clan_table(id)
{
new szQuery[512];
formatex(szQuery, charsmax(szQuery), "INSERT INTO `%s` (`member_name`,`steamid`,`is_clan_leader`,`is_second_leader`) VALUES \
('%s','%s','1','0')", g_UserData[id][ClanName], g_UserData[id][szName], g_UserData[id][szAuthid]);
SQL_ThreadQuery(g_SqlTuple, "FreeHandle", szQuery);
client_print_color(id, print_team_default, "%s %L", g_szTag, id, "CLAN_CREATED_SUCCESFULLY", g_UserData[id][ClanName]);
}
public get_clan_name(id)
{
new szArg[36];
read_args(szArg, charsmax(szArg));
remove_quotes(szArg);
if(strlen(szArg) > MAX_CLAN_NAME_LENGTH)
{
client_print_color(id, print_team_default, "%s %L", g_szTag, id, "MAX_CHARACTERS", MAX_CLAN_NAME_LENGTH);
}
if(containi(szArg, " ") != -1)
{
client_print_color(id, print_team_default, "%s %L", g_szTag, id, "NO_SPACE");
}
else
{
copy(g_UserData[id][ClanName], charsmax(g_UserData[][ClanName]), szArg);
}
create_clan_menu(id);
}
public get_clan_tag(id)
{
new szArg[36];
read_args(szArg, charsmax(szArg));
remove_quotes(szArg);
if(strlen(szArg) > MAX_CLAN_TAG_LENGTH)
{
client_print_color(id, print_team_default, "%s %L", g_szTag, id, "MAX_CHARACTERS", MAX_CLAN_TAG_LENGTH);
}
if(containi(szArg, " ") != -1)
{
client_print_color(id, print_team_default, "%s %L", g_szTag, id, "NO_SPACE");
}
else
{
copy(g_UserData[id][ClanTag], charsmax(g_UserData[][ClanTag]), szArg);
}
create_clan_menu(id);
}
public FreeHandle(FailState, Handle:Query, szError[], ErrorCode, szData[], iSize)
{
if(FailState || ErrorCode)
log_amx("^nSQL ERROR: %s^n", szError);
SQL_FreeHandle(Query);
}
mysql_escape_string(dest[],len)
{
replace_all(dest,len,"\\","\\\\");
replace_all(dest,len,"\0","\\0");
replace_all(dest,len,"\n","\\n");
replace_all(dest,len,"\r","\\r");
replace_all(dest,len,"\x1a","\Z");
replace_all(dest,len,"'","\'");
replace_all(dest,len,"^"","\^"");
}
send_message(const message[], const id, const i)
{
message_begin(MSG_ONE, g_SayText, {0, 0, 0}, i);
write_byte(id);
write_string(message);
message_end();
}