A probléma (mivel mást nem nagyon látni) több mint valószínű hogy azért van mert rosszkor próbáljátok betölteni a játékos adatait. Felcsatlakozás közben általában droppol egyet a kliens, tehát lehetséges hogy a dc is lefut közben, de az is lehet hogy kétszer fut le az authorized rossz időben. Nekem volt anno a szerveremen üdvözlő plugin, ami volt hogy 2x köszöntötte a felcsatlakozó játékost. Az eventre már nem emlékszem amit az meghívott, viszont szerintem itt is hasonló lehet a helyzet. Megoldás:
Kód: #include <amxmodx> #include <amxmisc> #include <cstrike> #include <sqlx> #include <fakemeta> #define MAXPLAYERS 33 // player id-k lesznek #define MAXLVL 50 // max szint #define MAXRANK 11 // maximum rang #pragma semicolon 1 // mindenhova ahova lehet tegyék ; jelet #define ChatColor print_team_default // -1 csak szürke a ^3 -2 csak piros, -3 csak kék, print_team_default az alap #define Tablename "Hlmodra_tabla" #define OWNER ADMIN_IMMUNITY // OWnerben taroljuk az immunitas jogot #define FOADMIN ADMIN_LEVEL_E // foadminban meg a o jogot #define ADMIN ADMIN_MAP // adminban a mapvaltas jogot #define VIP ADMIN_LEVEL_H //vipben meg egy h jogot //(valamelyik előtt mindenképpen legyen // jel!) #define RANK_ON // ha latni akarsz rangokat chatben (tulaj admin vip) //#define RANK_OFF // ha nem akarsz latni rangokat chatben (tulaj admin vip) //(valamelyik előtt mindenképpen legyen // jel!) enum _:ePlayer{eXp,eLvl,eRank,eRankCounter,}; new g_ePlayer[ePlayer][MAXPLAYERS], cvarPrefix, gSyncHud, Handle:g_SqlTuple; enum _:eRanks{eRankName[64], eRankLvl,}; new const cRanks[MAXRANK][eRanks] = { {"Kezdő", 0}, //rang neve, szint {"szőlőcukor", 5}, {"Csöves", 10}, {"Cukros Bácsi", 15}, {"Retardált", 20}, {"Hajléktalan", 25}, {"Fogyatékos", 30}, {"Drogos", 35}, {"Szittyós", 40}, {"Gyerekrabló", 45}, {"Rabszolgatartó", MAXLVL} //bővíteni ? MAXLVLt írd át a max szintre és mindenképpen legalulra kerüljön! | a szinteket ötösével adjad meg ha lehet! mert ha nem elfog csúszni a rang. }; public plugin_init() { register_plugin("Hlmodra", "valamiverziosiskell?", "szeretjükatejetazbiztos!"); register_clcmd("say /info", "info_p"); //register_clcmd("say /rs", "statreset_p"); register_event("DeathMsg", "ev_deathmsg", "a"); cvarPrefix = register_cvar("Prefix", "^4[.:*[DarK*_*Light]*:.]^3 »"); //////////////////////////////////////// register_clcmd("say", "sayhook"); //Maradjon alul! //////////////////////////////////////// gSyncHud = CreateHudSyncObj(); } get_cprefix(){ new sPrefix[32]; get_pcvar_string(cvarPrefix, sPrefix, charsmax(sPrefix)); return sPrefix; } public info_p(id) { new Xp, Xp2; Xp = 15+g_ePlayer[eLvl][id]; Xp2 = 15*30+g_ePlayer[eLvl][id]*Xp; client_print_color(id, ChatColor, "%s^1 Rangod: %s | Szinted/Xpd: %d/%d | Következő rang: %s", get_cprefix(), cRanks[g_ePlayer[eRank][id]][eRankName], g_ePlayer[eXp][id], Xp2, cRanks[g_ePlayer[eRank][id]+1][eRankName]); } public client_PreThink(id) LvlCheck(id); public LvlCheck(id) { if(g_ePlayer[eLvl][id] == MAXLVL || g_ePlayer[eRank][id] == MAXRANK) return PLUGIN_HANDLED; new Xp, Xp2, sName[64]; Xp = 15+g_ePlayer[eLvl][id]; Xp2 = 15*30+g_ePlayer[eLvl][id]*Xp; if(g_ePlayer[eXp][id] >= Xp2) { g_ePlayer[eLvl][id]++; g_ePlayer[eXp][id] = 0; g_ePlayer[eRankCounter][id]++; if(g_ePlayer[eRankCounter][id] == 5) { g_ePlayer[eRank][id]++; g_ePlayer[eRankCounter][id] = 0; } get_user_name(id, sName, charsmax(sName)); client_print_color(0, ChatColor, "^4%s^3 %s^1 szintet lépett, szintje: %d.", get_cprefix(), sName, g_ePlayer[eLvl][id]); } return PLUGIN_HANDLED; } public ev_deathmsg() { new iKiller = read_data(1); new iVictim = read_data(2); new iHs = read_data(3); new iRnd, sName[64]; if(!iKiller || !iVictim || iVictim == iKiller) return PLUGIN_HANDLED; get_user_name(iVictim, sName, charsmax(sName)); if(iHs) { iRnd = random_num(5, 10); g_ePlayer[eXp][iKiller] += iRnd; client_print_color(iKiller, ChatColor, "%s^1 Kaptál^3 %d^1 Xp-t^3 %s^1 fejbelövéséért!", get_cprefix(), iRnd, sName); } else { iRnd = random_num(1, 5); g_ePlayer[eXp][iKiller] += iRnd; client_print_color(iKiller, ChatColor, "%s^1 Kaptál^3 %d^1 Xp-t^3 %s^1 megöléséért!", get_cprefix(), iRnd, sName); } return PLUGIN_HANDLED_MAIN; } public sayhook(id) { new sMessage[512], sText[128], sDeath[16], iLen, sName[64]; read_args(sMessage, charsmax(sMessage)); remove_quotes(sMessage); if(strlen(sMessage) == 0 || sMessage[0] == '/' || sMessage[0] == '@') return PLUGIN_HANDLED_MAIN; new iTeam, iColor; iTeam = get_user_team(id); switch(iTeam) //itt lehet elvalasztani hogy ha ctk irnak a tk kéken lássák, és fordítva, ha specek akkor szürkén látják. { case CS_TEAM_CT: iColor = -3; //kék case CS_TEAM_T: iColor = -2;//piros case CS_TEAM_SPECTATOR: iColor = -1;//szürke } format(sDeath, charsmax(sDeath), is_user_alive(id) ? "":"*Halott*"); iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^1%s", sDeath); #if defined RANK_ON if(get_user_flags(id) & OWNER) iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^3[^4Tulajdonos^3]^1"); else if(get_user_flags(id) & ADMIN) iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^3[^4FőAdmin^3]^1"); else if(get_user_flags(id) & FOADMIN) iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^3[^4Admin^3]^1"); else if(get_user_flags(id) & VIP) iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^3[^4VIP^3]^1"); else iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^3[^4Játékos^3]^1"); iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^3[^4Szint: %d^3]", g_ePlayer[eLvl][id]); #endif #if defined RANK_OFF iLen += formatex(sText[iLen], charsmax(sText)-iLen, "^3[^4Szint: %d^3]", g_ePlayer[eLvl][id]); #endif get_user_name(id, sName, charsmax(sName)); format(sMessage, charsmax(sMessage), "%s ^1%s ^3»^3 %s", sText, sName, sMessage); for(new i; i < get_maxplayers(); i++) { if(!is_user_connected(i)) continue; client_print_color(i, iColor, sMessage); } return PLUGIN_HANDLED_MAIN; } public hudshow_p(id) { if(!is_user_connected(id)) return PLUGIN_HANDLED_MAIN; new sText[256], iLen, idT; new Target = pev(id, pev_iuser1) == 4 ? pev(id, pev_iuser2) : id; idT = is_user_alive(id) ? id:Target; new Xp, Xp2; Xp = 15+g_ePlayer[eLvl][idT]; Xp2 = 15*30+g_ePlayer[eLvl][idT]*Xp; iLen += formatex(sText[iLen], charsmax(sText)-iLen, "Szint: [ %d --> %d ]^n", g_ePlayer[eLvl][idT], MAXLVL); iLen += formatex(sText[iLen], charsmax(sText)-iLen, "Rang: -- %s --^n", cRanks[g_ePlayer[eRank][idT]][eRankName]); iLen += formatex(sText[iLen], charsmax(sText)-iLen, "XP: [ %d --> %d ]", g_ePlayer[eXp][idT], Xp2); set_hudmessage(0, 255, 0, -1.0, 0.85, 0, 6.0, 1.0, 0.1, 0.2, -1); ShowSyncHudMsg(id, gSyncHud, "%s", sText); set_task(1.0, "hudshow_p", id); return PLUGIN_HANDLED; } public client_putinserver(id) { if(is_user_bot(id)) return; set_task(5.0, "hudshow_p", id); g_ePlayer[eXp][id] = 0; g_ePlayer[eLvl][id] = 0; g_ePlayer[eRank][id] = 0; g_ePlayer[eRankCounter][id] = 0; SelectDataTable(id); } public client_disconnected(id) { if(is_user_bot(id)) return; TableUpdate(id); if(task_exists(id)) remove_task(id); } public plugin_cfg() { //Kiszolgáló | Felhasználó | Jelszó | Adatbázis g_SqlTuple = SQL_MakeDbTuple("maria.srkhost.eu", "", "", "s17878_newszerver"); CreateTable(); } public CreateTable(){ new iLen; static sQuery[2048]; iLen += formatex(sQuery[iLen], charsmax(sQuery), "CREATE TABLE IF NOT EXISTS `%s` ", Tablename); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "( "); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`Id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,"); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`SteamId` varchar(64) NOT NULL,"); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`qSzint` int(11) NOT NULL,"); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`qXp` int(11) NOT NULL,"); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`qRank` int(11) NOT NULL,"); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`qRankCounter` int(11) NOT NULL)"); SQL_ThreadQuery(g_SqlTuple, "TableCreateThread", sQuery); } public TableUpdate(id) { static sQuery[2048]; new iLen, sSteamID[64]; get_user_authid(id, sSteamID, charsmax(sSteamID)); iLen += formatex(sQuery[iLen], charsmax(sQuery), "UPDATE `%s` SET ", Tablename); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "qSzint = ^"%i^",", g_ePlayer[eLvl][id]); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "qXp = ^"%i^",", g_ePlayer[eXp][id]); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "qRank = ^"%i^",", g_ePlayer[eRank][id]); iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "qRankCounter = ^"%i^" WHERE `SteamId` = ^"%s^";", g_ePlayer[eRankCounter][id], sSteamID); SQL_ThreadQuery(g_SqlTuple, "QuerySetDataTable", sQuery); } public TableCreateThread(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize, Float:fQueuetime) { if(iFailState == TQUERY_CONNECT_FAILED) set_fail_state("[Create] Nem lehet csatlakozni az adatbazishoz!"); else if(iFailState == TQUERY_QUERY_FAILED) set_fail_state("[Create] Lekerdezesi hiba"); if(iErrcode) log_amx("[Create] Hiba:**!! %s !!**", sError); } public TableInsert(id) { static sQuery[2048], sSteamID[64]; get_user_authid(id, sSteamID, charsmax(sSteamID)); formatex(sQuery, charsmax(sQuery), "INSERT INTO `%s` (`SteamId`) VALUES (^"%s^");", Tablename, sSteamID); SQL_ThreadQuery(g_SqlTuple, "QuerySetDataTable", sQuery); } public SelectDataTable(id) { static sQuery[2048]; new sData[1], sSteamID[64]; sData[0] = id; get_user_authid(id, sSteamID, charsmax(sSteamID)); formatex(sQuery, charsmax(sQuery), "SELECT * FROM `%s` WHERE SteamId = ^"%s^";", Tablename, sSteamID); SQL_ThreadQuery(g_SqlTuple, "QuerySelectDataTable", sQuery, sData, 1); } public QuerySelectDataTable(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize, Float:fQueuetime) { if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_amx("[Insert] Hiba:**!! %s !!**", sError); return; } else { new id = sData[0]; if(SQL_NumRows(sQuery) > 0) { g_ePlayer[eLvl][id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "qSzint")); g_ePlayer[eXp][id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "qXp")); g_ePlayer[eRank][id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "qRank")); g_ePlayer[eRankCounter][id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "qRankCounter")); } else TableInsert(id); } } public QuerySetDataTable(iFailState, Handle:sQuery, sError[], iErrcode, sData[], iDataSize, Float:fQueuetime) { if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED) { log_amx("[SetData] Hiba:**!! %s !!**", sError); return; } }
|