Mensajes: 104
Temas: 37
Registro en: Jul 2021
Reputación:
2
Estoy tratando de hacer que si el nick ya este registrado en la base de datos y otro user quiera entrar con ese mismo nick lo kicke, lo tengo en el guardado ya que al entrar y spawnear tengo para que le guarte sus stats
Código: public handler_actualizar(FailState, Handle:Query, Error[], Errcode, data[], DataSize) {
new id = data[0];
if(FailState < TQUERY_SUCCESS) {
if(containi(Error, "name") != -1) {
server_cmd("kick #%d ^"Nick ya registrado, cambialo.^"", get_user_userid(id));
return;
}
else {
server_cmd("kick #%d ^"Al parecer ocurrio un error, reporta el error: 552148 en nuestro grupo: google.com^"", get_user_userid(id));
return;
}
}
if(fail_query(FailState, Error, Errcode)) {
console_print(id, "Error al registrar.");
return;
}
SQL_FreeHandle(Query);
if(!is_user_connected(id)) {
return;
}
console_print(id, "Datos Actualizados.");
}
El problema es que no me kickea y me deja entrar.
tabla
Código: public CheckTabla() {
new szTemp[1500], len = 0;
len += formatex(szTemp[len], charsmax(szTemp)-len,
"CREATE TABLE IF NOT EXISTS %s \
(id int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, \
steamid varchar(40) NOT NULL,\
name varchar(33) NOT NULL UNIQUE KEY, \
rangos int(5) NOT NULL DEFAULT '0',\
frags int(10) NOT NULL DEFAULT '0', ", SQLX_TABLA);
len += formatex(szTemp[len], charsmax(szTemp)-len,
"deaths int(10) NOT NULL DEFAULT '0', \
headshots int(10) NOT NULL DEFAULT '0', \
cuchillo int(10) NOT NULL DEFAULT '0', \
captured int(10) NOT NULL DEFAULT '0', \
returned int(10) NOT NULL DEFAULT '0',");
len += formatex(szTemp[len], charsmax(szTemp)-len,
"rankname varchar(64) NOT NULL, \
rankurl varchar(130) NOT NULL, \
ProfileImg varchar(170) NOT NULL, \
ProfileUrl varchar(128) NOT NULL);");
SQL_ThreadQuery(g_tuple, "handler_checktable", szTemp);
}
Mensajes: 104
Temas: 37
Registro en: Jul 2021
Reputación:
2
(16/08/2022, 06:21 PM)alexiways escribió: Pregunta cómo estás obteniendo ahí el name en tu base dedatos?
lo hago mediante php
Código PHP: $query = $db->query('SELECT rankurl, ProfileImg, ProfileUrl, name, frags, rankname, deaths, headshots, cuchillo, captured, returned FROM '.$dbTable.' ORDER BY frags DESC LIMIT '.$desde.', '.$por_pagina.'') or die ("Error en la consulta: ".mysqli_error($db)); while ($top = $query->fetch_array(MYSQLI_ASSOC)) { <td><?php echo substr($top['name'], 0, 15) ?></td> }
Mensajes: 196
Temas: 4
Registro en: Apr 2018
Reputación:
3
16/08/2022, 06:24 PM
(Última modificación: 16/08/2022, 06:25 PM por alexiways.)
Y otra cosa cómo haces la consulta sql? Xq sino como estás obteniendo el name de columa 'name'.?
Eso es php? No entendí o que estás haciendo exactamente.
Mensajes: 104
Temas: 37
Registro en: Jul 2021
Reputación:
2
16/08/2022, 06:26 PM
(Última modificación: 16/08/2022, 06:27 PM por Asta.)
(16/08/2022, 06:24 PM)alexiways escribió: Y otra cosa cómo haces la consulta sql? Xq sino como estás obteniendo el name de columa 'name'.?
Eso es php? No entendí o que estás haciendo exactamente.
Código PHP: public CheckTabla() { new szTemp[1500], len = 0; len += formatex(szTemp[len], charsmax(szTemp)-len, "CREATE TABLE IF NOT EXISTS %s \ (id int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, \ steamid varchar(40) NOT NULL,\ name varchar(33) NOT NULL UNIQUE KEY, \ rangos int(5) NOT NULL DEFAULT '0',\ frags int(10) NOT NULL DEFAULT '0', ", SQLX_TABLA); len += formatex(szTemp[len], charsmax(szTemp)-len, "deaths int(10) NOT NULL DEFAULT '0', \ headshots int(10) NOT NULL DEFAULT '0', \ cuchillo int(10) NOT NULL DEFAULT '0', \ captured int(10) NOT NULL DEFAULT '0', \ returned int(10) NOT NULL DEFAULT '0',");
len += formatex(szTemp[len], charsmax(szTemp)-len, "rankname varchar(64) NOT NULL, \ rankurl varchar(130) NOT NULL, \ ProfileImg varchar(170) NOT NULL, \ ProfileUrl varchar(128) NOT NULL);");
SQL_ThreadQuery(g_tuple, "handler_checktable", szTemp); }
public handler_checktable(FailState, Handle:Query, Error[], Errcode, Data[], DataSize) { if(fail_query(FailState, Error, Errcode)) { server_print("Error al crear la tabla."); return PLUGIN_HANDLED; } server_print("Tabla creada."); return PLUGIN_CONTINUE; }
PlayerLoad(index) { new szTemp[100], data[2], szAuthid[64];
if(is_user_steam(index)) { get_user_authid(index, szAuthid, charsmax(szAuthid)); } else { copy(szAuthid, charsmax(szAuthid), g_PlayerStats[index][Player_Nombre]); } formatex(szTemp, charsmax(szTemp), "SELECT * FROM %s WHERE steamid = ^"%s^"", SQLX_TABLA, szAuthid); data[0] = index; data[1] = get_user_userid(index); // Por si se desconecta y entra otro jugador con el mismo id SQL_ThreadQuery(g_tuple, "handler_cargar", szTemp, data, 2); }
public handler_cargar(FailState, Handle:Query, Error[], Errcode, Data[], DataSize) { new index = Data[0];
if(index != find_player("k", Data[1])) { SQL_FreeHandle(Query); return; } if(fail_query(FailState, Error, Errcode)) { console_print(index, "Error al registrar"); return; } if(SQL_NumResults(Query)) { g_PlayerStats[index][Player_ID] = SQL_ReadResult(Query, 0); g_PlayerStats[index][Player_Rangos] = SQL_ReadResult(Query, 3); g_PlayerStats[index][Player_Frags] = SQL_ReadResult(Query, 4); g_PlayerStats[index][Player_Deaths] = SQL_ReadResult(Query, 5); g_PlayerStats[index][Player_Headshots] = SQL_ReadResult(Query, 6); g_PlayerStats[index][Player_Cuchillo] = SQL_ReadResult(Query, 7); g_PlayerStats[index][Player_FlagCaptured] = SQL_ReadResult(Query, 8); g_PlayerStats[index][Player_FlagReturned] = SQL_ReadResult(Query, 9); g_iStatus[index] = LOGUEADO; } else { PlayerRegister(index); } SQL_FreeHandle(Query); }
public PlayerRegister(index) { new szTemp[4048], data[1]; static szAuthid[64];
if(is_user_steam(index)) { get_user_authid(index, szAuthid, charsmax(szAuthid)); } else { copy(szAuthid, charsmax(szAuthid), g_PlayerStats[index][Player_Nombre]); }
formatex(szTemp, charsmax(szTemp), "INSERT INTO %s (steamid,name,frags,rangos,deaths,headshots,cuchillo,captured,returned,rankname,rankurl,ProfileImg,ProfileUrl)\ VALUES (^"%s^",^"%s^",%d,%d,%d,%d,%d,%d,%d,^"%s^",^"%s^",^"%s^",^"%s^")", SQLX_TABLA, szAuthid, g_PlayerStats[index][Player_Nombre], g_PlayerStats[index][Player_Rangos], g_PlayerStats[index][Player_Frags], g_PlayerStats[index][Player_Deaths], g_PlayerStats[index][Player_Headshots], g_PlayerStats[index][Player_Cuchillo], g_PlayerStats[index][Player_FlagCaptured], g_PlayerStats[index][Player_FlagReturned], Rangos[g_PlayerStats[index][Player_Rangos]][RangoName], Rangos[g_PlayerStats[index][Player_Rangos]][Url_Rango], PlayerImg[index], PlayerUrl[index]);
data[0] = index; SQL_ThreadQuery(g_tuple, "handler_registrar", szTemp, data, 1); }
public handler_registrar(FailState, Handle:Query, Error[], Errcode, Data[], DataSize) { new id = Data[0];
if(fail_query(FailState, Error, Errcode)) { console_print(id, "Error al registrar"); return PLUGIN_HANDLED; } console_print(id, "Cuenta creada."); g_iStatus[id] = LOGUEADO; return PLUGIN_CONTINUE; }
public SaveGlobalPlayerData(index) { if(g_iStatus[index] != LOGUEADO || !is_user_connected(index) || is_user_bot(index) || is_user_hltv(index)) { return; }
static szTemp[4080], data[1], szAuthid[64];
if(is_user_steam(index)) { get_user_authid(index, szAuthid, charsmax(szAuthid)); } else { copy(szAuthid, charsmax(szAuthid), g_PlayerStats[index][Player_Nombre]); }
formatex(szTemp, charsmax(szTemp), "UPDATE %s SET `name`=^"%s^",`rangos`=^"%d^",`frags`=^"%d^",`deaths`=^"%d^",`headshots`=^"%d^",`cuchillo`=^"%d^",`captured`=^"%d^",`returned`=^"%d^",`rankname`=^"%s^",`rankurl`=^"%s^",`ProfileImg`=^"%s^",`ProfileUrl`=^"%s^" WHERE `steamid` = ^"%s^"", SQLX_TABLA, g_PlayerStats[index][Player_Nombre], g_PlayerStats[index][Player_Rangos], g_PlayerStats[index][Player_Frags], g_PlayerStats[index][Player_Deaths], g_PlayerStats[index][Player_Headshots], g_PlayerStats[index][Player_Cuchillo], g_PlayerStats[index][Player_FlagCaptured], g_PlayerStats[index][Player_FlagReturned], Rangos[g_PlayerStats[index][Player_Rangos]][RangoName], Rangos[g_PlayerStats[index][Player_Rangos]][Url_Rango], PlayerImg[index], PlayerUrl[index], szAuthid);
data[0] = index; SQL_ThreadQuery(g_tuple, "handler_actualizar", szTemp, data, 1); }
public handler_actualizar(FailState, Handle:Query, Error[], Errcode, data[], DataSize) { new id = data[0];
if(fail_query(FailState, Error, Errcode)) { console_print(id, "Error al registrar."); return; } SQL_FreeHandle(Query); if(!is_user_connected(id)) { return; } console_print(id, "Datos Actualizados."); }
(16/08/2022, 06:24 PM)alexiways escribió: Y otra cosa cómo haces la consulta sql? Xq sino como estás obteniendo el name de columa 'name'.?
Eso es php? No entendí o que estás haciendo exactamente.
Osea en el sma hago todo el guardado pero para obtener esos datos lo hago por medio de php ya que estoy mostrando stats en una pagina
Mensajes: 196
Temas: 4
Registro en: Apr 2018
Reputación:
3
16/08/2022, 06:32 PM
(Última modificación: 16/08/2022, 06:34 PM por alexiways.)
Perdón, pero no entendí bien tu codex. Pero a ver vos querés que cada vez que cada jugador entre se cheequee que si el name que usa otro jugador "ya registrado" no lo esté usando, en caso que lo usé kickear al jugador nuevo con ese Nick ya en uso. No?
Si es el caso, apenas cargas los datos del jugador, verifica que su name no esté registrado en tu dba. Y haces una consulta sql, con un WHERE, con el name y authid del jugador si te da resultado es xq está registrado sino, puede usarlo.
Mensajes: 104
Temas: 37
Registro en: Jul 2021
Reputación:
2
(16/08/2022, 06:32 PM)alexiways escribió: Perdón, pero no entendí bien tu codex. Pero a ver vos querés que cada vez que cada jugador entre se cheequee que si el name que usa otro jugador "ya registrado" no lo esté usando, en caso que lo usé kickear al jugador nuevo con ese Nick ya en uso. No?
Si es el caso, apenas cargas los datos del jugador, verifica que su name no esté registrado en tu dba. Y haces una consulta sql, con un WHERE, con el name y authid del jugador si te da resultado es xq está registrado sino, puede usarlo.
Osea lo que trato es que chekee que si ya el name esta registrado este kickee al jugador que intenta entrar con el name ya registrado
Mensajes: 196
Temas: 4
Registro en: Apr 2018
Reputación:
3
16/08/2022, 07:01 PM
(Última modificación: 16/08/2022, 07:07 PM por alexiways.)
Claro, una consulta sql, que haga WHERE al name. Si detecta que ya está registrado, en el habler comparas si el authid del jugador si es el mismo que el q tenés registras y sino son iguales kickeas al jugador.
SELECT * FROM %s WHERE name = ^"%s^"
Y en el handler, te fijas si te da resultado esa consulta sql, comparas si el authid está asociado al name registrado, sino lo está, kickealo.
if(SQL_NumResults(Query)) {
new authid[64], new t_authid[64]
get_user_authid( id, authid, charsmax(authid))
SQL_ReadResult(Query, 2, t_authid, charsmax(authid))
if!(equal(authid, t_authid)
server_cmd("kick #%d ^"Nick ya registrado, cambialo.^"", get_user_userid(id));
}
Mensajes: 104
Temas: 37
Registro en: Jul 2021
Reputación:
2
(16/08/2022, 07:01 PM)alexiways escribió: Claro, una consulta sql, que haga WHERE al name. Si detecta que ya está registrado, en el habler comparas si el authid del jugador si es el mismo que el q tenés registras y sino son iguales kickeas al jugador.
SELECT * FROM %s WHERE name = ^"%s^"
Y en el handler, te fijas si te da resultado esa consulta sql, comparas si el authid está asociado al name registrado, sino lo está, kickealo.
if(SQL_NumResults(Query)) {
new authid[64], new t_authid[64]
get_user_authid( id, authid, charsmax(authid))
SQL_ReadResult(Query, 2, t_authid, charsmax(authid))
if!(equal(authid, t_authid)
server_cmd("kick #%d ^"Nick ya registrado, cambialo.^"", get_user_userid(id));
}
En cual handler?
Mensajes: 196
Temas: 4
Registro en: Apr 2018
Reputación:
3
Crea uno, para chequear el name. Cuando el jugador ingresa a tu server.
Mensajes: 688
Temas: 31
Registro en: Nov 2015
Reputación:
7
no veo el "login" x ningun lado! segun queres kickear al jugador con un nick ya registrado sin antes verificar si es genuino? osea entra por primera vez y luego cuando quiera volver a entrar te autokickea porque ya esta registrado? WTF creo que para eso debes autentificar que sea el mismo player antes del kick! quizas este code te sirva de referencia
https://amxmodx-es.com/Thread-Sistema-de...SQL-SQLITE
Mensajes: 104
Temas: 37
Registro en: Jul 2021
Reputación:
2
(16/08/2022, 08:30 PM)mlibre escribió: no veo el "login" x ningun lado! segun queres kickear al jugador con un nick ya registrado sin antes verificar si es genuino? osea entra por primera vez y luego cuando quiera volver a entrar te autokickea porque ya esta registrado? WTF creo que para eso debes autentificar que sea el mismo player antes del kick! quizas este code te sirva de referencia
https://amxmodx-es.com/Thread-Sistema-de...SQL-SQLITE
Lo que pasa es que me salta este log cuando entro con un nick que ya esta guardado en la base de datos
Código: L 08/16/2022 - 21:38:52: Log file started (file "cstrike/addons/amxmodx/logs/sql_logs.log") (game "cstrike") (amx "1.9.0.5294")
L 08/16/2022 - 21:38:52: Error en la consulta [1062] [Duplicate entry 'Teq' for key 'name']
como puedo solucionar para que no salga ese logs, la idea que tenia es que si otro jugador entra este lle kicke y la otra que le salga un mensaje cuando entra al servidor que este nick ya esta registrado, como lo podria hacer
Mensajes: 196
Temas: 4
Registro en: Apr 2018
Reputación:
3
creo q te estas complicando mucho, deverias de ulizar ese plugin q paso mlibre e editarlo a tu gusto.
Mensajes: 104
Temas: 37
Registro en: Jul 2021
Reputación:
2
(16/08/2022, 10:48 PM)alexiways escribió: creo q te estas complicando mucho, deverias de ulizar ese plugin q paso mlibre e editarlo a tu gusto.
Lo intentare gracias
|