[ROZWIĄZANE] Problem z pluginem - SQL error
Vakos
15.07.2018
Otóż wyskakuje mi taki error:
[deathrun_stats.amxx] SQL error: Incorrect datetime value: '' for column 'recorddate' at row 1
Ktoś wie o co chodzi i jak go zlikwidować?
Vakos
15.07.2018
a podaj mu NULL zamiast ''
Gdzie mam to dokładnie dać?
Chodzi o to?:
getFormatedTime(iTime, szTime[], size){ formatex(szTime, size, "%d:%02d.%03ds", iTime/60000, (iTime/1000)%60, iTime%1000); }
Rivit
15.07.2018
Generalnie ten error jest gdzies w zaptaniu do bazy.
pokaz jak tworzona jest baza + jak są dodawane dane do niej.
Najlepiej by było jakbys załączył .sma
Vakos
15.07.2018
SMA:
#include){
#include
#include
#include
#include
#include
#include
#include
#include
#define PLUGIN "Deathrun Stats"
#define VERSION "0.6"
#define AUTHOR "R3X"
new gszChatPrefix[32];
new gszTop15Redirect[128];
new gszMotd[1024];
new gszMapname[64];
new gMid
#pragma unused giGames
new giGames; //Poki co nie uzywana zmienna
new gszQuery[512];
new Handle:gTuple;
new gbAuthorized[33];
new giPid[33];
new giPlayedTime[33];
new giBestTime[33];
new giPlayedGames[33];
new giDeaths[33];
new gszRecordTime[33][32];
new giBestTimeofMap;
new Float:gfLastInfo[33];
new Float:gfStartRun[33];
new giLastTime[33];
new bool:gbFinished[33];
new gEntFinish = 0;
new bool:gbEntityMoved = false;
new gcvarSave, gcvarTimer, gcvarTimerType, gcvarDrawFinish;
new gcvarPrintResult;
new gcvarRoundTime;
new Float:gfEndRoundTime;
new giMaxPlayers;
new gsprite;
getFormatedTime(iTime, szTime[], size){
formatex(szTime, size, "%d:%02d.%03ds", iTime/60000, (iTime/1000)%60, iTime%1000);
}
#include "drstats/db.inl"
#include "drstats/sqlite.inl"
#include "drstats/mysql.inl"
#include "drstats/finish.inl"
#include "drstats/stats.inl"
public plugin_init() {
state mysql;
register_plugin(PLUGIN, VERSION, AUTHOR);
register_dictionary("deathrun_stats.txt");
register_cvar("amx_drstats_host", "");
register_cvar("amx_drstats_user", "");
register_cvar("amx_drstats_pass", "");
register_cvar("amx_drstats_db", "");
gcvarSave = register_cvar("amx_drstats_save", "1");
gcvarTimer = register_cvar("amx_drstats_timer", "1");
gcvarTimerType = register_cvar("amx_drstats_timer_type", "0");
gcvarDrawFinish = register_cvar("amx_drstats_draw_finish", "1");
gcvarPrintResult = register_cvar("amx_drstats_print_result", "1");
//0-wcale
//1-HUD+konsola
//2-chat
gcvarRoundTime = get_cvar_pointer("mp_roundtime");
register_cvar("amx_drstats_chat_prefix", "[Speedrun]");
register_cvar("amx_drstats_top15_page", "");
register_logevent( "eventRoundEnd",2, "1=Round_End");
register_logevent( "eventRoundStart",2, "1=Round_Start");
register_forward(FM_PlayerPreThink, "fwPreThink", 1);
RegisterHam(Ham_Spawn, "player", "fwSpawn", 1);
register_touch(gszFinish, "player", "fwTouch");
register_touch("player", gszFinish, "fwTouch2");
register_think(gszFinish, "fwThink");
register_clcmd("dr_finish", "cmdFinish", ADMIN_CFG, ": spawn finish round");
register_fullclcmd("rank", "showRank");
register_fullclcmd("top15", "showTop15");
register_fullclcmd("last", "cmdLast");
register_fullclcmd("best", "cmdBest");
gfwCreateFinish = CreateMultiForward("fwFinishCreate", ET_STOP, FP_CELL, FP_ARRAY, FP_CELL);
gfwFinished = CreateMultiForward("fwPlayerFinished", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL);
gfwStarted = CreateMultiForward("fwPlayerStarted", ET_IGNORE, FP_CELL);
giMaxPlayers = get_maxplayers();
}
public plugin_precache(){
gsprite = precache_model("sprites/white.spr");
}
public plugin_cfg(){
DB_Init();
get_cvar_string("amx_drstats_chat_prefix", gszChatPrefix, charsmax(gszChatPrefix));
get_cvar_string("amx_drstats_top15_page", gszTop15Redirect, charsmax(gszTop15Redirect));
}
public plugin_natives(){
register_library("DeathrunStats");
register_native("playerFinished", "_playerFinished", 1);
}
public _playerFinished(id){
fwFinished(id);
}
public plugin_end(){
if(gbEntityMoved)
saveFinishOrigin();
SQL_FreeHandle(gTuple);
}
public client_putinserver(id){
if(is_user_bot(id) || is_user_hltv(id))
return;
loadPlayerId(id);
}
public client_authorized_db(id, pid){
giPid[id] = pid;
gbAuthorized[id] = true;
giPlayedTime[id] = 0;
giBestTime[id] = 0;
giPlayedGames[id] = 0;
giDeaths[id] = 0;
loadRunnerData(id);
}
public client_connect(id){
gbAuthorized[id] = false;
giPid[id] = 0;
giLastTime[id] = 0;
}
public client_disconnect(id){
saveRunnerData(id);
}
getPlayerDeaths(id){
return giDeaths[id]+get_user_deaths(id);
}
getPlayedTime(id){
return giPlayedTime[id] + get_user_time(id, 1);
}
getRunningTime(id){
return floatround( (get_gametime()-gfStartRun[id])*1000, floatround_ceil);
}
public eventRoundStart(){
new Float:fRoundTime = get_pcvar_float(gcvarRoundTime)*60;
gfEndRoundTime = get_gametime()+fRoundTime;
}
public eventRoundEnd(){
for(new i=1;i<33;i++)
if(is_user_connected(i))
saveRunnerData(i);
}
public fwSpawn(id){
if(!is_user_alive(id) || !gbAuthorized[id])
return HAM_IGNORED;
if(!gEntFinish){
client_print(id, print_chat, "%L", id, "FINISH_NOT_EXISTS");
if(get_user_flags(id)&ADMIN_CFG)
client_print(id, print_chat, "%L", id, "BUT_YOU_CAN_SPAWN_IT");
}
gbFinished[id] = false;
gfStartRun[id] = -1.0;
if(cs_get_user_team(id) == CS_TEAM_CT){
gfStartRun[id] = get_gametime();
new iRet;
ExecuteForward(gfwStarted, iRet, id);
}
return HAM_IGNORED;
}
show_status(id, const szMsg[], any:...){
new szStatus[128];
vformat(szStatus, 127, szMsg, 3);
static msgStatusText=0;
if(!msgStatusText)
msgStatusText = get_user_msgid("StatusText");
message_begin(MSG_ONE_UNRELIABLE, msgStatusText, _, id);
write_byte(0);
write_string(szStatus);
message_end();
}
Send_RoundTime(id, iTime){
static msgRoundTime=0;
if(!msgRoundTime)
msgRoundTime = get_user_msgid("RoundTime");
message_begin(MSG_ONE_UNRELIABLE, msgRoundTime, _, id);
write_short(iTime);
message_end();
}
hideTime(id){
if(get_pcvar_num(gcvarTimerType)){
Send_RoundTime(id, floatround(gfEndRoundTime - get_gametime()));
}else{
show_status(id, "");
}
}
displayTime(id, iTime){
if(get_pcvar_num(gcvarTimerType)){
Send_RoundTime(id, iTime);
}else{
show_status(id, "%L: %d:%02ds", id, "WORD_TIME", iTime/60, iTime%60);
}
}
public fwPreThink(id){
if(!is_user_alive(id) || gfStartRun[id] <= 0.0)
return FMRES_IGNORED;
new iTimer = get_pcvar_num(gcvarTimer);
if(!iTimer)
return FMRES_IGNORED;
if(iTimer == 2 && !(pev(id, pev_button) & IN_SCORE)){
if(pev(id, pev_oldbuttons) & IN_SCORE)
hideTime(id);
return FMRES_IGNORED;
}
static Float:fNow;
if(!gbFinished[id]){
fNow = get_gametime();
if((fNow-gfLastInfo[id]) <= 0.5) return FMRES_IGNORED;
displayTime(id, getRunningTime(id) / 1000);
}
return FMRES_IGNORED;
}
public cmdBest(id){
if(!gbAuthorized[id]){
ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NOT_AVAILABLE_NOW");
return PLUGIN_CONTINUE;
}
if(giBestTime[id] == 0)
ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NEVER_REACH_FINISH");
else{
new szTime[32];
getFormatedTime(giBestTime[id], szTime, charsmax(szTime));
ColorChat(id, GREEN, "%s^x01 %L: ^x04 %s", gszChatPrefix, id, "YOUR_BEST_TIME", szTime);
}
return PLUGIN_CONTINUE;
}
public cmdLast(id){
if(!gbAuthorized[id]){
ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NOT_AVAILABLE_NOW");
return PLUGIN_CONTINUE;
}
if(giLastTime[id] == 0)
ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NEVER_REACH_FINISH");
else{
new szTime[32];
getFormatedTime(giLastTime[id], szTime, charsmax(szTime));
ColorChat(id, GREEN, "%s^x01 %L: ^x04 %s", gszChatPrefix, szTime, id, "YOUR_LAST_TIME", szTime);
}
return PLUGIN_CONTINUE;
}
printInfo(id, const szInfo[], ...){
new printResult = get_pcvar_num(gcvarPrintResult);
if(printResult == 0) return;
new szMsg[64];
vformat(szMsg, charsmax(szMsg), szInfo, 3);
if(printResult == 1){
show_dhudmessage(id, "%s", szMsg);
client_print(id, print_console, "%s", szMsg);
}
else if(printResult == 2){
ColorChat(id, GREEN, "%s^x01 %s", gszChatPrefix, szMsg);
}
}
public fwFinished(id){
if(!is_user_alive(id))
return;
new bool:record=false;
new iTime = getRunningTime(id);
giLastTime[id] = iTime;
gbFinished[id] = true;
new szTime[32];
getFormatedTime(iTime, szTime, charsmax(szTime));
set_dhudmessage(42, 43, 255, -1.0, 0.6, 1, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L: %s", id, "RUNNING_TIME", szTime);
if(giBestTime[id] == 0){
set_dhudmessage(255, 42, 255, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L", id, "RUNNING_FIRST_FINISH");
saveRunnerData(id, iTime);
}
else if(giBestTime[id] > iTime){
getFormatedTime(giBestTime[id]-iTime, szTime, charsmax(szTime));
set_dhudmessage(255, 42, 42, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L: -%s!", id, "RUNNING_OWN_RECORD", szTime);
saveRunnerData(id, iTime);
}else if(giBestTime[id] < iTime){
getFormatedTime(iTime-giBestTime[id], szTime, charsmax(szTime));
set_dhudmessage(120, 120, 120, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L: +%s", id, "RUNNING_OWN_RECORD", szTime);
}else{
set_dhudmessage(42, 255, 42, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L", id, "RUNNING_OWN_RECORD_EQUAL");
}
if(giBestTimeofMap == 0 || giBestTimeofMap>iTime){
giBestTimeofMap = iTime;
new szName[32];
get_user_name(id, szName, 31);
set_dhudmessage(42, 255, 42, -1.0, 0.8, 2, 6.0, 5.0, 0.0, 0.0);
for(new i=1;i<=giMaxPlayers;i++)
if(is_user_connected(i))
printInfo(i, "%L", i, "RUNNING_MAP_RECORD_BREAK", szName);
record = true;
}
if(giBestTimeofMap != 0 && giBestTimeofMap new szTime[32];
getFormatedTime(iTime-giBestTimeofMap, szTime, 31);
set_dhudmessage(120, 120, 120, -1.0, 0.8, 2, 6.0, 5.0, 0.0, 0.0);
printInfo(id, "%L: +%s", id, "RUNNING_MAP_RECORD", szTime);
}
hideTime(id)
new iRet;
ExecuteForward(gfwFinished, iRet, id, iTime, record);
}
Użytkownik Vakos edytował ten post 15.07.2018 20:46
Rivit
17.07.2018
Potrafisz powiedzieć w którym momencie ten error wyskakuje?
Chodzi mi o konkretny moment typu: gracz wychodzi z servera, grasz ustanawia nowy rekord?
Vakos
17.07.2018
Potrafisz powiedzieć w którym momencie ten error wyskakuje?
Chodzi mi o konkretny moment typu: gracz wychodzi z servera, grasz ustanawia nowy rekord?
Szczerze? To trudno powiedzieć - error wyskakuje co kilka minut zazwyczaj.
Z tego co zaobserwowałem to zobaczyłem tak, że: jak admin wywalił gracza to pokazał się error, potem jak gracz opuścił serwer (ale to nie zawsze)
Vakos
18.07.2018
Argghhhh łap
Jak na razie nie widzę aby error wyskakiwał, więc raczej jest okej. Na dniach będę kontrolował i w razie w dam znać.
Na razie dziękuję za pomoc
DarkGL
18.07.2018
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL