Mensajes: 448
Temas: 38
Registro en: May 2020
Reputación:
19
Intento obtener valores que da get_user_team usando el cs_get_user_team
tiene lógica lo que hice abajo?
lo probé y si funciona pero no estoy seguro si me llegará a dar error
Código PHP: public ver(id){ new team[11]; team = fix_team(id); //ahora usar "team" como si lo hubiera obtenido de get_user_team }
public fix_team(id){ new team[11] switch (cs_get_user_team(id)) { case CS_TEAM_UNASSIGNED: team = "UNASSIGNED" case CS_TEAM_T: team = "T" case CS_TEAM_CT: team = "CT" case CS_TEAM_SPECTATOR: team = "SPECTATOR" } return team }
Mensajes: 56
Temas: 6
Registro en: Dec 2018
Reputación:
2
01/08/2020, 08:18 PM
(Última modificación: 01/08/2020, 08:23 PM por SVC. Edited 10 times in total.)
Solo quiero comentar 3 cosas:
- No, no tiene nada de malo, y no deberia generar error alguno *normalmente*
- Como recomendacion, no deberias devolver un string en una funcion
- Lo que me llamo la atencion y lo que mas me interesa: ¿Por qué no utilizas get_user_team() propiamente?, para algo esta la native (solo como critica constructiva).
Mensajes: 448
Temas: 38
Registro en: May 2020
Reputación:
19
(01/08/2020, 08:18 PM)SVC escribió:
Solo quiero comentar 3 cosas:
- No, no tiene nada de malo, y no deberia generar error alguno *normalmente*
- Como recomendacion, no deberias devolver un string en una funcion
- Lo que me llamo la atencion y lo que mas me interesa: ¿Por qué no utilizas get_user_team() propiamente?, para algo esta la native (solo como critica constructiva).
2) vale, eso no sabía, psdt: no entendí el enlace xd
3) Al cambiar el equipo de un jugador
Código PHP: //Creo es así, estoy en cel cs_set_user_team(id, CS_TEAM_SPECTATOR)
Si uso el get_user_team
Me devuelve el team anterior antes del cambio
Pero si uso cs_get_user_team, sí me da team correcto
Este problema me da con el plugin de *crea tu propio hooksay*
Y por eso es que estaba haciendo lo del fix_team
Mensajes: 56
Temas: 6
Registro en: Dec 2018
Reputación:
2
(01/08/2020, 09:03 PM)[N]drs escribió: 3) Al cambiar el equipo de un jugador
Código PHP: //Creo es así, estoy en cel cs_set_user_team(id, CS_TEAM_SPECTATOR)
Si uso el get_user_team
Me devuelve el team anterior antes del cambio
Pero si uso cs_get_user_team, sí me da team correcto
Este problema me da con el plugin de *crea tu propio hooksay*
Y por eso es que estaba haciendo lo del fix_team
Código PHP: #include amxmodx #include cstrike
public plugin_init() { register_clcmd("set_team", "team"); register_clcmd("get_team", "get_team"); }
public team(id) { log_amx("team before: %d", get_user_team(id)); log_amx("cs-team before: %d", cs_get_user_team(id)); cs_set_user_team(id, CS_TEAM_T); log_amx("team after: %d", get_user_team(id)); log_amx("cs-team after: %d", cs_get_user_team(id)); }
public get_team(id) { log_amx("team: %d", get_user_team(id)); log_amx("cs-team: %d", cs_get_user_team(id)); }
output:
Código: ] set_team
L 08/01/2020 - 20:55:31: [test.amxx] team before: 2 (CT)
L 08/01/2020 - 20:55:31: [test.amxx] cs-team before: 2 (CT)
L 08/01/2020 - 20:55:31: [test.amxx] team after: 1 (T)
L 08/01/2020 - 20:55:31: [test.amxx] cs-team after: 1 (T)
Comando desconocido: set_team
] disconnect
Seguramente ese plugin de *crea tu propio hooksay* este infertiriendo; o algun otro plugin y/o codigo que utilizes en alguna parte.
Mensajes: 448
Temas: 38
Registro en: May 2020
Reputación:
19
01/08/2020, 10:22 PM
(Última modificación: 01/08/2020, 10:23 PM por [N]drs. Edited 1 time in total.)
(01/08/2020, 09:54 PM)SVC escribió: Código PHP: #include amxmodx #include cstrike
public plugin_init() { register_clcmd("set_team", "team"); register_clcmd("get_team", "get_team"); }
public team(id) { log_amx("team before: %d", get_user_team(id)); log_amx("cs-team before: %d", cs_get_user_team(id)); cs_set_user_team(id, CS_TEAM_T); log_amx("team after: %d", get_user_team(id)); log_amx("cs-team after: %d", cs_get_user_team(id)); }
public get_team(id) { log_amx("team: %d", get_user_team(id)); log_amx("cs-team: %d", cs_get_user_team(id)); }
output:
Código: ] set_team
L 08/01/2020 - 20:55:31: [test.amxx] team before: 2 (CT)
L 08/01/2020 - 20:55:31: [test.amxx] cs-team before: 2 (CT)
L 08/01/2020 - 20:55:31: [test.amxx] team after: 1 (T)
L 08/01/2020 - 20:55:31: [test.amxx] cs-team after: 1 (T)
Comando desconocido: set_team
] disconnect
Seguramente ese plugin de *crea tu propio hooksay* este infertiriendo; o algun otro plugin y/o codigo que utilizes en alguna parte.
Al setear a ct o tt anda normal, el problema ocurre cuando seteo Espectador
Mensajes: 56
Temas: 6
Registro en: Dec 2018
Reputación:
2
01/08/2020, 11:02 PM
(Última modificación: 01/08/2020, 11:03 PM por SVC. Edited 2 times in total.)
Código PHP: //... cs_set_user_team(id, CS_TEAM_T); //...
>>>
Código PHP: //... cs_set_user_team(id, CS_TEAM_SPECTATOR); //...
output:
Código: ] set_team
L 08/01/2020 - 22:00:48: [test.amxx] team before: 1 (T)
L 08/01/2020 - 22:00:48: [test.amxx] cs-team before: 1 (T)
L 08/01/2020 - 22:00:48: [test.amxx] team after: 3 (SPECT)
L 08/01/2020 - 22:00:48: [test.amxx] cs-team after: 3 (SPECT)
Comando desconocido: set_team
Insisto en que algun plugin y/o codigo que utilizas esta generando ese issue.
Puedes probar desactivando todos tus plugins y usar el que postee arriba, cambiando el equipo a Spec.
Mensajes: 448
Temas: 38
Registro en: May 2020
Reputación:
19
(01/08/2020, 11:02 PM)SVC escribió: Código PHP: //... cs_set_user_team(id, CS_TEAM_T); //...
>>>
Código PHP: //... cs_set_user_team(id, CS_TEAM_SPECTATOR); //...
output:
Código: ] set_team
L 08/01/2020 - 22:00:48: [test.amxx] team before: 1 (T)
L 08/01/2020 - 22:00:48: [test.amxx] cs-team before: 1 (T)
L 08/01/2020 - 22:00:48: [test.amxx] team after: 3 (SPECT)
L 08/01/2020 - 22:00:48: [test.amxx] cs-team after: 3 (SPECT)
Comando desconocido: set_team
Insisto en que algun plugin y/o codigo que utilizas esta generando ese issue.
Puedes probar desactivando todos tus plugins y usar el que postee arriba, cambiando el equipo a Spec. El error me sucede con el plugin de rangos csgo,
Supongamos que soy ct, al usar cs_set_user_team(id, CS_TEAM_SPECTATOR);
Y escribo, el chat coge los valores del ct y con solo escribir me cambia automáticamente al anterior team
Y la única solución fue usar el cs_get_user_team que con eso sí detecta bien
Mensajes: 56
Temas: 6
Registro en: Dec 2018
Reputación:
2
01/08/2020, 11:22 PM
(Última modificación: 02/08/2020, 12:52 AM por SVC. Edited 1 time in total.)
Y vaya a saber yo el codigo
Si no adjuntas nada, no puedo ayudarte
Mensajes: 448
Temas: 38
Registro en: May 2020
Reputación:
19
(01/08/2020, 11:22 PM)SVC escribió:
Y vaya a saber yo el codigo
Si no adjuntas nada, no puedo ayudarte
Código PHP: /*
ChangeLog:
1.0 = Version inicial 2.0 = * Correccion de errores * Cambio deathmsg por ham killed * Reescritura parcial de codigo * Soporte AMX 1.8.2 hasta 1.9.0 * Cvar para activar/desactivar la modificacion del chat
*/
#include <amxmisc> #include <hamsandwich> #include <fakemeta> #include <nfvault>
#if AMXX_VERSION_NUM < 183 #define client_disconnected client_disconnect
#define print_team_default 0
stock client_print_color(index, fakevar, const input[], any:...) { #pragma unused fakevar static szMsg[191], g_iMsgSayText; if(!g_iMsgSayText) g_iMsgSayText = get_user_msgid("SayText");
vformat(szMsg, 190, input, 3);
message_begin(index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, g_iMsgSayText, .player = index); write_byte(index ? index : 33); write_string(szMsg); message_end(); } #endif
#define VERSION "2.0"
new const Web[] = "HTTPS://KIKIZON.XYZ/"; // Se Muestra en HUD new const Prefijo[] = "^4[CS:GO] ^1"; // Prefijo en say new const Sonido[] = "rango/up.wav"; // Sonido Rango UP new const DataBase[] = "csgoranks"; // Nombre de la base de datos new const DB_key[] = "data_rangos"; // Llave de acceso db new const CHAT_FLAG = ADMIN_KICK; // Acceso requerido para el chat de admins
enum _:DATA { NOMBRE[30], FRAGS }
new const Rangos[][DATA] = { { "Sin Rango", 100 }, { "Silver I", 200 }, { "Silver II", 300 }, { "Silver III", 500 }, { "Silver IV", 700 }, { "Silver Elite", 800 }, { "Silver Elite Master", 900 }, { "Gold Nova I", 1000 }, { "Gold Nova II", 1200 }, { "Gold Nova III", 1300 }, { "Gold Nova Master", 1400 }, { "Master Guardian I",1500 }, { "Master Guardian II", 1700 }, { "Master Guardian Elite", 1800 }, { "Distinguished Master Guardian", 1900 }, { "Legendary Eagle", 2000 }, { "Legendary Eagle Master", 2100 }, { "Supreme Master First Class", 2200 }, { "The Global Elite", 2500 } }
new g_rango[33], g_frags[33]; new SyncHUD, g_maxplayers, g_playername[33][32];
#define TASK_HUD 67521 #define ID_HUD (taskid - TASK_HUD) #define is_valid_player(%0) is_user_connected(%0) || !is_user_bot(%0) || !is_user_hltv(%0)
new VaultRango[128], szRangos[180]; new cvar_Hud, cvar_knifex2, cvar_hsx2, cvar_hooksay;
public plugin_init() { register_plugin("Rangos CS:GO", VERSION, "kikizon / HTTPS://KIKIZON.XYZ/"); RegisterHam(Ham_Killed, "player", "ham_PlayerKilledPost", true); register_logevent("logevent_round_end", 2, "1=Round_End"); register_clcmd("say", "message_saytext"); register_clcmd("say_team", "message_sayteam"); cvar_Hud = register_cvar("rangos_hud", "1"); // 1 - Mostrar HUD | 0 - No Mostrar cvar_knifex2 = register_cvar("rangos_knifex2", "1"); // 1 - x2 frags con knife | 0 - ÑO :v cvar_hsx2 = register_cvar("rangos_hsx2", "1"); // 1 - x2 frags de HeadShot | 0 - ÑO :v cvar_hooksay = register_cvar("rangos_hooksay", "1"); // 1 - Modifica el say | 0 ÑO :v SyncHUD = CreateHudSyncObj(); g_maxplayers = get_maxplayers(); nfv_file(DataBase, VaultRango, charsmax(VaultRango)); }
public plugin_precache() { precache_sound(Sonido); }
public HUD(taskid) { new id = ID_HUD; if (!is_user_alive(id)) id = pev(id, pev_iuser2); if(id != ID_HUD) { set_hudmessage(255, 255, 255, 0.60, 0.67, 1, 6.0, 1.0); ShowSyncHudMsg(ID_HUD, SyncHUD, "Frags: %d || Rango: %s", g_frags[id], Rangos[g_rango[id]][NOMBRE]) } else { set_hudmessage(0, 255, 0, 0.0, 0.20, 1, 6.0, 1.0);
if(g_rango[id] == charsmax(Rangos)) { ShowSyncHudMsg( ID_HUD, SyncHUD, "=======================^n\ Frags: %d^n\ Rango: %s^n\ =======================^n\ TIENES EL RANGO MAXIMO!!!^n\ =======================^n\ %s", g_frags[id], Rangos[g_rango[id]][NOMBRE], Web ); } else { ShowSyncHudMsg( ID_HUD, SyncHUD, "=======================^n\ Frags: %d^n\ Rango: %s^n\ =======================^n\ Sig. Rango: %s^n\ Frags Restantes: %d^n\ =======================^n\ %s", g_frags[id], Rangos[g_rango[id]][NOMBRE], Rangos[g_rango[id]+1][NOMBRE], Rangos[g_rango[id]][FRAGS] - g_frags[id], Web ); } } }
public client_putinserver(id) { get_user_name(id, g_playername[id], 31); g_rango[id] = g_frags[id] = 0; Cargar(id); if(get_pcvar_num(cvar_Hud)) set_task(1.0, "HUD", id+TASK_HUD, _, _, "b"); }
public client_disconnected(id) { if(is_valid_player(id)) Guardar(id); remove_task(id+TASK_HUD) }
public logevent_round_end() { static id; for(id = 1; id <= g_maxplayers; ++id) { if(is_valid_player(id)) Guardar(id); } }
public ham_PlayerKilledPost(victim, attacker, sg) { if(!is_user_connected(victim) || !is_user_connected(attacker) || !attacker || attacker == victim) return HAM_IGNORED;
SetFrags(attacker, 1);
if(get_pcvar_num(cvar_knifex2) == 1 && get_user_weapon(attacker) == CSW_KNIFE) SetFrags(attacker, 1);
if(get_pcvar_num(cvar_hsx2) == 1 && get_pdata_int(victim, 75, 5) == HIT_HEAD) SetFrags(attacker, 1);
return HAM_IGNORED; }
SetFrags(index, frags) { g_frags[index] += frags;
static iRank; iRank = g_rango[index]; while( g_frags[index] >= Rangos[g_rango[index]][FRAGS] && g_rango[index] < charsmax(Rangos)) ++g_rango[index];
if(iRank < g_rango[index]) { client_print_color(index, print_team_default, "%s Felicidades subiste al rango: ^4%s", Prefijo, Rangos[g_rango[index]][NOMBRE]); client_cmd(index, "spk ^"%s^"", Sonido); } }
public message_saytext(id) { if(!get_pcvar_num(cvar_hooksay)) return PLUGIN_CONTINUE;
static said[192]; read_args(said, charsmax(said)); remove_quotes(said); if (said[0] == '@' || said[0] == '%' || said[0] == '/' || said[0] == '.' || said[0] == '!' || equal (said, "")) return PLUGIN_HANDLED;
if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE; static color[11], i, team[11]; get_user_team(id,color,charsmax(color)); if(get_user_flags(id) & CHAT_FLAG) { format(said, charsmax(said), "^x01%s^x04%s ^x03%s ^x01: ^x04%s", is_user_alive(id) ? "" : "[MUERTO]", Rangos[g_rango[id]][NOMBRE], g_playername[id], said); } else { format(said, charsmax(said), "^x01%s^04%s ^x03%s ^x01: %s", is_user_alive(id) ? "" : "[MUERTO]", Rangos[g_rango[id]][NOMBRE], g_playername[id], said); } for (i = 1; i <= g_maxplayers; i++) { if (!is_user_connected(i)) continue; if(get_user_flags(i) & CHAT_FLAG || is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i)) { get_user_team(i, team, charsmax(team)); changeTeamInfo(i, color); writeMessage(i, said); changeTeamInfo(i, team); } }
return PLUGIN_HANDLED_MAIN; }
public message_sayteam(id) { if(!get_pcvar_num(cvar_hooksay)) return PLUGIN_CONTINUE;
static said[192]; read_args(said, charsmax(said)); remove_quotes(said); if (said[0] == '@' || said[0] == '%' || said[0] == '/' || said[0] == '.' || said[0] == '!' || equal (said, "")) return PLUGIN_HANDLED;
if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE; static playerTeam, playerTeamName[19]; playerTeam = get_user_team(id); switch (playerTeam) { case 1: copy (playerTeamName, 6, "TE") case 2: copy (playerTeamName, 8, "CT") default: copy (playerTeamName, 11, "SPEC") }
static color[11], i, team[11]; get_user_team(id,color,charsmax(color));
if (get_user_flags(id) & CHAT_FLAG) { format(said, charsmax(said), "^x01%s [ %s ] ^x04%s ^x03%s ^x01: ^x04%s", is_user_alive(id) ? "" : "[MUERTO]", playerTeam, Rangos[g_rango[id]], g_playername[id], said); } else { format(said, charsmax(said), "^x01%s [ %s ] ^04%s ^x03%s ^x01: %s", is_user_alive(id) ? "" : "[MUERTO]", playerTeam, Rangos[g_rango[id]], g_playername[id], said); }
for (i = 1; i <= g_maxplayers; i++) { if (!is_user_connected(i)) continue; if (get_user_team(i) == playerTeam || get_user_flags(i) & CHAT_FLAG) { if (is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i)) { get_user_team(i, team, charsmax(team)); changeTeamInfo(i, color); writeMessage(i, said); changeTeamInfo(i, team); } } }
return PLUGIN_HANDLED_MAIN; }
public changeTeamInfo(player, team[]) { static g_msgTeamInfo; if(!g_msgTeamInfo) g_msgTeamInfo = get_user_msgid("TeamInfo");
message_begin(MSG_ONE, g_msgTeamInfo, _, player); write_byte(player); write_string(team); message_end(); }
public writeMessage(player, message[]) { static g_msgSayText; if(!g_msgSayText) g_msgSayText = get_user_msgid("SayText"); message_begin(MSG_ONE, g_msgSayText, {0, 0, 0}, player); write_byte(player); write_string(message); message_end(); }
Guardar(id) { formatex(szRangos, charsmax(szRangos), "%d %d", g_frags[id], g_rango[id]); nfv_set_data(VaultRango, DB_key, g_playername[id], szRangos); }
Cargar(id) { new g_load_c1[25], g_load_c2[25]; if(!nfv_get_data(VaultRango, DB_key, g_playername[id], szRangos, charsmax(szRangos))) return;
parse(szRangos, g_load_c1, charsmax(g_load_c1), g_load_c2, charsmax(g_load_c2));
g_frags[id] = str_to_num(g_load_c1); g_rango[id] = str_to_num(g_load_c2); }
stock ValidMessage(text[], maxcount) { static len, i, count; len = strlen(text);count = 0; if (!len) return false; for (i = 0; i < len; i++) { if (text[i] != ' ') { count++; if (count >= maxcount) return true; } } return false; }
Código PHP: public message_saytext(id) { if(!get_pcvar_num(cvar_hooksay)) return PLUGIN_CONTINUE;
static said[192]; read_args(said, charsmax(said)); remove_quotes(said); if (said[0] == '@' || said[0] == '%' || said[0] == '/' || said[0] == '.' || said[0] == '!' || equal (said, "")) return PLUGIN_HANDLED;
if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE; static color[11], i, team[11]; get_user_team(id,color,charsmax(color)); if(get_user_flags(id) & CHAT_FLAG) { format(said, charsmax(said), "^x01%s^x04%s ^x03%s ^x01: ^x04%s", is_user_alive(id) ? "" : "[MUERTO]", Rangos[g_rango[id]][NOMBRE], g_playername[id], said); } else { format(said, charsmax(said), "^x01%s^04%s ^x03%s ^x01: %s", is_user_alive(id) ? "" : "[MUERTO]", Rangos[g_rango[id]][NOMBRE], g_playername[id], said); } for (i = 1; i <= g_maxplayers; i++) { if (!is_user_connected(i)) continue; if(get_user_flags(i) & CHAT_FLAG || is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i)) { get_user_team(i, team, charsmax(team)); changeTeamInfo(i, color); writeMessage(i, said); changeTeamInfo(i, team); } }
return PLUGIN_HANDLED_MAIN; }
Código PHP: get_user_team(i, team, charsmax(team)); changeTeamInfo(i, color); writeMessage(i, said); changeTeamInfo(i, team);
al usar el cs_set_user_team(id, CS_TEAM_SPECTATOR)
esta parte
get_user_team(i, team, charsmax(team));
al escribir en el cs, usa el team anterior y no el de spectador, ademas une al equipo anterior con solo escribir
pero funciona correctamente usando el cs_get_user_team
Mensajes: 56
Temas: 6
Registro en: Dec 2018
Reputación:
2
02/08/2020, 01:19 AM
(Última modificación: 02/08/2020, 01:32 AM por SVC. Edited 1 time in total.)
No entiendo que issue tienes con esa native; a mi me funciona sin problemas.
Tampoco he entendido al 100% lo que tratas de decir ("escribir en el cs", "usa el team anterior", "une al equipo anterior", "el chat coge los valores del ct y con solo escribir me cambia automáticamente al anterior team").
Recuerda que el color depende de quien envia el mensaje (id) y no de quien lo recibe (i), aunque en un momento dado los dos son lo mismo (yo envio el mensaje == yo recibo el mensaje == mi team-color == chat team-color)
Mensajes: 448
Temas: 38
Registro en: May 2020
Reputación:
19
(02/08/2020, 01:19 AM)SVC escribió:
No entiendo que issue tienes con esa native; a mi me funciona sin problemas.
Tampoco he entendido al 100% lo que tratas de decir ("escribir en el cs", "usa el team anterior", "une al equipo anterior", "el chat coge los valores del ct y con solo escribir me cambia automáticamente al anterior team").
Recuerda que el color depende de quien envia el mensaje (id) y no de quien lo recibe (i), aunque en un momento dado los dos son lo mismo (yo envio el mensaje == yo recibo el mensaje == mi team-color == chat team-color)
Estando en un equipo cualquiera, digamos ct, y a través de un menú ejecutar Código PHP: Silentkill(id)//no recuerdo cómo era en estos momentos cs_set_user_team(id, CS_TEAM_SPECTATOR)//después esto
al escribir en el chat debería detectar que el equipo es espectador, pero lo detecta como si aún fuera ct, aparte de que con solo escribir en el chat cambia el equipo a ct automáticamente
Mensajes: 144
Temas: 4
Registro en: Mar 2018
Reputación:
8
(02/08/2020, 01:38 AM)[N]drs escribió: al escribir en el chat debería detectar que el equipo es espectador, pero lo detecta como si aún fuera ct, aparte de que con solo escribir en el chat cambia el equipo a ct automáticamente
No sé a que te refieres, o cual es el error. Yo probé el código y me funca perfecto, detecta bien el team del jugador y no te cambia a ningún equipo.
Mensajes: 448
Temas: 38
Registro en: May 2020
Reputación:
19
Bueno a mi me da error, pero mientras el fix no tenga error creo que está bien xd
Mensajes: 3,466
Temas: 18
Registro en: Oct 2013
Reputación:
54
Sería bueno que ambos pusieran el output de su amxx version, así descartan
|