AlliedModders Donor
Join Date: Apr 2016
Location: Lithuania
|
03-10-2017
, 20:21
[HELP] Data saving
|
#1
|
Found an achievements plugin which fits my needs, however there's a problem, plugin should save data on MySQL but it doesn't.
Could you guys look through code and fix it?
Thanks.
PHP Code:
#include <amxmodx>
#include <cstrike>
#include <sqlx>
enum Color
{
NORMAL = 1, // clients scr_concolor cvar color
GREEN, // Green Color
TEAM_COLOR, // Red, grey, blue
GREY, // grey
RED, // Red
BLUE, // Blue
}
new TeamName[][] =
{
"",
"TERRORIST",
"CT",
"SPECTATOR"
}
new Host[] = ""
new User[] = ""
new Pass[] = ""
new Db[] = ""
new Handle:g_SqlTuple
new g_Error[512]
enum _:Achieves // Define the available Achievements, dont forget commas
{
MURDER, // Done
SURVIVOR, // Done
AIMKEY, // Done
EXECUTION, // Done
ONEHPHERO // Done
}
new const AchName[Achieves][] = // Define the Achievements Names, dont forget commas
{
"I like Murdering",
"Survivor",
"Aimkey",
"Round of Execution",
"1 HP Hero"
}
new const AchDescription[Achieves][] = // Define the Achievements Description, dont forget commas
{
"Kill 500 Enemies",
"Surieve 250 Rounds",
"Make 125 Headshots",
"Kill 5 Enemies in one Round",
"Kill 5 Enemies with 1 HP"
}
new const AchRequirement[Achieves] = // Define Requirements. For non progress achievements use 1 (Like Secret Phrase), dont forget commas
{
500,
250,
125,
5,
5
}
new const prefix[] = "^4[ClanTag] Achievements:^3"
new Achievement[33][Achieves]
new iAchTag[33]
new szTemp[555 char]
public plugin_init()
{
register_plugin("Achievements", "5.0", "fLaXXiE")
register_event("DeathMsg", "Event_DeathMsg", "a")
register_logevent("EventRoundStart", 2, "1=Round_Start")
register_clcmd("say /achievements", "CmdAch")
register_clcmd("say /ach", "CmdAch")
register_clcmd("say /a", "CmdAch")
register_clcmd("say", "CmdSay")
register_clcmd("say_team", "CmdSayTeam")
set_task(1.0, "MySql_Init")
}
public client_putinserver(iPlayer) {
Load_MySql(iPlayer)
}
public client_disconnect(iPlayer)
{
Save_MySql(iPlayer)
iAchTag[iPlayer] = 0
}
public plugin_end() {
SQL_FreeHandle(g_SqlTuple)
}
public CmdAch(iPlayer)
{
new g_AchMenu = menu_create("\wAchievements^n^n", "Achievements_Handler")
new Key[6]
for(new iAch = 0; iAch < Achieves; iAch++)
{
if(Achievement[iPlayer][iAch] == 0) formatex(szTemp, charsmax(szTemp), "\d%s - [%s] [%d/%d]", AchName[iAch], AchDescription[iAch], Achievement[iPlayer][iAch], AchRequirement[iAch])
else if(Achievement[iPlayer][iAch] >= AchRequirement[iAch]) formatex(szTemp, charsmax(szTemp), "\y%s \w- [\rCOMPLETED\w]", AchName[iAch])
else formatex(szTemp, charsmax(szTemp), "\y%s \w- [\r%s\w]\w [\r%d\w/\r%d\w]", AchName[iAch], AchDescription[iAch], Achievement[iPlayer][iAch], AchRequirement[iAch])
menu_additem(g_AchMenu, szTemp, Key)
}
menu_setprop(g_AchMenu, MPROP_EXIT, MEXIT_ALL)
menu_display(iPlayer, g_AchMenu, 0)
}
public Achievements_Handler(iPlayer, g_AchMenu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(g_AchMenu)
return PLUGIN_HANDLED
}
else
{
if(Achievement[iPlayer][item] >= AchRequirement[item])
{
iAchTag[iPlayer] = item+1
ColorChat (iPlayer, GREY, "%s You have chosen^4 %s^3 as your tag", prefix, AchName[item])
}
else
{
ColorChat(iPlayer, GREY, "%s You have not unlocked the achievement yet.", prefix)
}
}
return PLUGIN_CONTINUE
}
///////////////////////////////////////////////////
///////// START OF ACHIEVEMENT ACTIONS ////////////
///////////////////////////////////////////////////
public Event_DeathMsg()
{
new iKiller = read_data(1)
new iVictim = read_data(2)
new szName[33]; get_user_name(iKiller, szName, charsmax(szName))
if(is_user_alive(iKiller) && get_user_team(iKiller) != get_user_team(iVictim))
{
Achievement[iKiller][EXECUTION]++
if(Achievement[iKiller][EXECUTION] == AchRequirement[EXECUTION])
{
ColorChat(0, GREY, "%s %s successfully unlocked the achievement %s!", prefix, szName, AchName[EXECUTION])
}
if(is_user_alive(iKiller) && get_user_team(iKiller) != get_user_team(iVictim))
{
Achievement[iKiller][MURDER]++
if(Achievement[iKiller][MURDER] == AchRequirement[MURDER])
{
ColorChat(0, GREY, "%s %s successfully unlocked the achievement %s!", prefix, szName, AchName[MURDER])
}
}
if(get_user_health(iKiller) == 1)
{
Achievement[iKiller][ONEHPHERO]++
if(Achievement[iKiller][ONEHPHERO] == AchRequirement[ONEHPHERO])
{
ColorChat(0, GREY, "%s %s successfully unlocked the achievement %s!", prefix, szName, AchName[ONEHPHERO])
}
}
if(read_data(3))
{
Achievement[iKiller][AIMKEY]++
if(Achievement[iKiller][AIMKEY] == AchRequirement[AIMKEY])
{
ColorChat(0, GREY, "%s %s successfully unlocked the achievement %s!", prefix, szName, AchName[AIMKEY])
}
}
}
return PLUGIN_CONTINUE
}
public EventRoundStart()
{
new iPlayers[32], iNum, iPlayer, szName[33]
get_players(iPlayers, iNum, "a")
for(new i = 0; i < iNum; i++)
{
iPlayer = iPlayers[i]
get_user_name(iPlayer, szName, charsmax(szName))
if(Achievement[iPlayer][EXECUTION] < 5)
Achievement[iPlayer][EXECUTION] = 0
if(is_user_alive(iPlayer))
{
Achievement[iPlayer][SURVIVOR]++
if(Achievement[iPlayer][SURVIVOR] == AchRequirement[SURVIVOR])
{
ColorChat(0, GREY, "%s %s successfully unlocked the achievement %s!", prefix, szName, AchName[SURVIVOR])
}
}
}
return PLUGIN_CONTINUE
}
///////////////////////////////////////////////////
////////// END OF ACHIEVEMENT ACTIONS /////////////
///////////////////////////////////////////////////
///////////////////////////////////////////////////
///////// START OF ACHIEVEMENT SAVING /////////////
///////////////////////////////////////////////////
public MySql_Init()
{
g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db)
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
Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS achievements(steamid varchar(32), tag varchar(32), murder SMALLINT(1), survivor SMALLINT(1), aimkey SMALLINT(1), threesome SMALLINT(1), onehphero SMALLINT(1))")
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error)
}
SQL_FreeHandle(Queries)
SQL_FreeHandle(SqlConnection)
}
public Load_MySql(iPlayer)
{
new szSteamId[32], szTemp[512]
get_user_authid(iPlayer, szSteamId, charsmax(szSteamId))
new Data[1]
Data[0] = iPlayer
format(szTemp,charsmax(szTemp),"SELECT * FROM `achievements` WHERE (`achievements`.`steamid` = '%s')", szSteamId)
SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1)
}
public register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
if(FailState == TQUERY_CONNECT_FAILED)
{
log_amx("Load - Could not connect to SQL database. [%d] %s", Errcode, Error)
}
else if(FailState == TQUERY_QUERY_FAILED)
{
log_amx("Load Query failed. [%d] %s", Errcode, Error)
}
new iPlayer
iPlayer = Data[0]
if(SQL_NumResults(Query) < 1)
{
new szSteamId[32]
get_user_authid(iPlayer, szSteamId, charsmax(szSteamId))
if (equal(szSteamId,"ID_PENDING"))
return PLUGIN_HANDLED
new szTemp[512]
format(szTemp,charsmax(szTemp),"INSERT INTO `achievements` (`steamid` , `tag`, `murder`, `survivor`, `aimkey`, `execution`, `onehphero`)VALUES ('%s', '0', '0', '0', '0', '0', '0')", szSteamId)
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
}
else
{
iAchTag[iPlayer] = SQL_ReadResult(Query, 1)
Achievement[iPlayer][MURDER] = SQL_ReadResult(Query, 2)
Achievement[iPlayer][SURVIVOR] = SQL_ReadResult(Query, 3)
Achievement[iPlayer][AIMKEY] = SQL_ReadResult(Query, 4)
Achievement[iPlayer][EXECUTION] = SQL_ReadResult(Query, 5)
Achievement[iPlayer][ONEHPHERO] = SQL_ReadResult(Query, 6)
}
return PLUGIN_HANDLED
}
public Save_MySql(iPlayer)
{
new szSteamId[32], szTemp[512]
get_user_authid(iPlayer, szSteamId, charsmax(szSteamId))
format(szTemp,charsmax(szTemp),"UPDATE `achievements` SET `tag` = '%d', `murder` = '%d', `survivor` = '%d', `aimkey` = '%d', `execution` = '%d', `onehphero` = '%d' WHERE `achievements`.`steamid` = '%s';", iAchTag[iPlayer], Achievement[iPlayer][MURDER], Achievement[iPlayer][SURVIVOR], Achievement[iPlayer][AIMKEY], Achievement[iPlayer][EXECUTION], Achievement[iPlayer][ONEHPHERO], szSteamId)
SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp)
}
public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
SQL_FreeHandle(Query)
return PLUGIN_HANDLED
}
///////////////////////////////////////////////////
////////// END OF ACHIEVEMENT SAVING //////////////
///////////////////////////////////////////////////
///////////////////////////////////////////////////
///////// START OF ACHIEVEMENT COLORCHAT //////////
///////////////////////////////////////////////////
ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
{
static message[256];
switch(type)
{
case NORMAL: // clients scr_concolor cvar color
{
message[0] = 0x01;
}
case GREEN: // Green
{
message[0] = 0x04;
}
default: // White, Red, Blue
{
message[0] = 0x03;
}
}
vformat(message[1], 251, msg, 4);
// Make sure message is not longer than 192 character. Will crash the server.
message[192] = '^0';
static team, ColorChange, index, MSG_Type;
if(id)
{
MSG_Type = MSG_ONE;
index = id;
} else {
index = FindPlayer();
MSG_Type = MSG_ALL;
}
team = get_user_team(index);
ColorChange = ColorSelection(index, MSG_Type, type);
ShowColorMessage(index, MSG_Type, message);
if(ColorChange)
{
Team_Info(index, MSG_Type, TeamName[team]);
}
}
ShowColorMessage(id, type, message[])
{
message_begin(type, get_user_msgid("SayText"), _, id);
write_byte(id)
write_string(message);
message_end();
}
Team_Info(id, type, team[])
{
message_begin(type, get_user_msgid("TeamInfo"), _, id);
write_byte(id);
write_string(team);
message_end();
return 1;
}
ColorSelection(index, type, Color:Type)
{
switch(Type)
{
case RED:
{
return Team_Info(index, type, TeamName[1]);
}
case BLUE:
{
return Team_Info(index, type, TeamName[2]);
}
case GREY:
{
return Team_Info(index, type, TeamName[0]);
}
}
return 0;
}
FindPlayer()
{
static i;
i = -1;
while(i <= get_maxplayers())
{
if(is_user_connected(++i))
{
return i;
}
}
return -1;
}
///////////////////////////////////////////////////
///////// END OF ACHIEVEMENT COLORCHAT ////////////
///////////////////////////////////////////////////
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang1053{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/
__________________
Last edited by Airkish; 03-11-2017 at 07:45.
|
|