duda cs_get_user_team y get_user_team
#1
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_UNASSIGNEDteam "UNASSIGNED"
 
case CS_TEAM_Tteam "T"
 
case CS_TEAM_CTteam "CT"
 
case CS_TEAM_SPECTATORteam "SPECTATOR"
 
}
 return 
team

Responder
#2

Solo quiero comentar 3 cosas:
  1. No, no tiene nada de malo, y no deberia generar error alguno *normalmente*
  2. Como recomendacion, no deberias devolver un string en una funcion
  3. 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).
Responder
#3
(01/08/2020, 08:18 PM)SVC escribió:
Solo quiero comentar 3 cosas:

  1. No, no tiene nada de malo, y no deberia generar error alguno *normalmente*
  2. Como recomendacion, no deberias devolver un string en una funcion
  3. 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(idCS_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
Responder
#4
(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(idCS_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(idCS_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.
Responder
#5
(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(idCS_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
Responder
#6
Código PHP:
//...
cs_set_user_team(idCS_TEAM_T);
//... 

>>>

Código PHP:
//...
cs_set_user_team(idCS_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.
Responder
#7
(01/08/2020, 11:02 PM)SVC escribió:
Código PHP:
//...
cs_set_user_team(idCS_TEAM_T);
//... 

>>>

Código PHP:
//...
cs_set_user_team(idCS_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
Responder
#8

Y vaya a saber yo el codigo  Roflmao

Si no adjuntas nada, no puedo ayudarte
Responder
#9
(01/08/2020, 11:22 PM)SVC escribió:
Y vaya a saber yo el codigo  Roflmao

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(indexfakevar, const input[], any:...)
 {
 
#pragma unused fakevar
 
static szMsg[191], g_iMsgSayText;
 if(!
g_iMsgSayTextg_iMsgSayText get_user_msgid("SayText");

 
vformat(szMsg190input3);

 
message_begin(index MSG_ONE_UNRELIABLE MSG_BROADCASTg_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 
SyncHUDg_maxplayersg_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_Hudcvar_knifex2cvar_hsx2cvar_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(DataBaseVaultRangocharsmax(VaultRango)); 
}

public 
plugin_precache() 
{
 
precache_sound(Sonido);
}

public 
HUD(taskid)
{
 new 
id ID_HUD;
    
 
if (!is_user_alive(id)) 
 
id pev(idpev_iuser2);
  
 
if(id != ID_HUD)
 {
 
set_hudmessage(2552552550.600.6716.01.0);
 
ShowSyncHudMsg(ID_HUDSyncHUD"Frags: %d  ||  Rango: %s"g_frags[id], Rangos[g_rango[id]][NOMBRE])
 }
 else
 {
 
set_hudmessage(025500.00.2016.01.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(idg_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 1id <= g_maxplayers; ++id)
 {
 if(
is_valid_player(id))
 
Guardar(id);
 }
}

public 
ham_PlayerKilledPost(victimattackersg)
{
 if(!
is_user_connected(victim) || !is_user_connected(attacker) || !attacker || attacker == victim)
 return 
HAM_IGNORED;

 
SetFrags(attacker1);

 if(
get_pcvar_num(cvar_knifex2) == && get_user_weapon(attacker) == CSW_KNIFE)
 
SetFrags(attacker1);

 if(
get_pcvar_num(cvar_hsx2) == && get_pdata_int(victim755) == HIT_HEAD)
 
SetFrags(attacker1);

 return 
HAM_IGNORED;
}

SetFrags(indexfrags)
{
 
g_frags[index] += frags;

 static 
iRankiRank 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(indexprint_team_default"%s Felicidades subiste al rango: ^4%s"PrefijoRangos[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(saidcharsmax(said)); remove_quotes(said);
    
 
if (said[0] == '@' || said[0] == '%' || said[0] == '/' || said[0] == '.' || said[0] == '!' || equal (said""))
 return 
PLUGIN_HANDLED;

 if (!
ValidMessage(said1)) return PLUGIN_CONTINUE;
    
 
static color[11], iteam[11];
 
get_user_team(id,color,charsmax(color));
 
 if(
get_user_flags(id) & CHAT_FLAG)
 {
 
format(saidcharsmax(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(saidcharsmax(said), "^x01%s^04%s ^x03%s ^x01: %s",
 
is_user_alive(id) ? "" "[MUERTO]",
 
Rangos[g_rango[id]][NOMBRE],
 
g_playername[id],
 
said);
 }
    
 
for (1<= g_maxplayersi++)
 {
 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(iteamcharsmax(team));
 
changeTeamInfo(icolor);
 
writeMessage(isaid);
 
changeTeamInfo(iteam);
 }
 }

 return 
PLUGIN_HANDLED_MAIN;
}

public 
message_sayteam(id)
{
 if(!
get_pcvar_num(cvar_hooksay)) 
 return 
PLUGIN_CONTINUE;

 static 
said[192]; read_args(saidcharsmax(said)); remove_quotes(said);
    
 
if (said[0] == '@' || said[0] == '%' || said[0] == '/' || said[0] == '.' || said[0] == '!' || equal (said""))
 return 
PLUGIN_HANDLED;

 if (!
ValidMessage(said1)) return PLUGIN_CONTINUE
    
 
static playerTeamplayerTeamName[19]; playerTeam get_user_team(id);
 switch (
playerTeam)
 {
 case 
1copy (playerTeamName6"TE")
 case 
2copy (playerTeamName8"CT"
 default: 
copy (playerTeamName11"SPEC"
 }

 static 
color[11], iteam[11];
 
get_user_team(id,color,charsmax(color));

 if (
get_user_flags(id) & CHAT_FLAG)
 {
 
format(saidcharsmax(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(saidcharsmax(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 (
1<= g_maxplayersi++)
 {
 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(iteamcharsmax(team));
 
changeTeamInfo(icolor);
 
writeMessage(isaid);
 
changeTeamInfo(iteam);
 }
 }
 }

 return 
PLUGIN_HANDLED_MAIN;
}

public 
changeTeamInfo(playerteam[])
{
 static 
g_msgTeamInfo;
 if(!
g_msgTeamInfog_msgTeamInfo get_user_msgid("TeamInfo");

 
message_begin(MSG_ONEg_msgTeamInfo_player);
 
write_byte(player);
 
write_string(team);
 
message_end();
}

public 
writeMessage(playermessage[])
{
 static 
g_msgSayText;
 if(!
g_msgSayTextg_msgSayText get_user_msgid("SayText");
 
 
message_begin(MSG_ONEg_msgSayText, {000}, player);
 
write_byte(player);
 
write_string(message);
 
message_end();
}

Guardar(id)

 
formatex(szRangoscharsmax(szRangos), "%d %d"g_frags[id], g_rango[id]);
 
nfv_set_data(VaultRangoDB_keyg_playername[id], szRangos);
}

Cargar(id)
{
 new 
g_load_c1[25], g_load_c2[25];
 if(!
nfv_get_data(VaultRangoDB_keyg_playername[id], szRangoscharsmax(szRangos))) return; 

 
parse(szRangosg_load_c1charsmax(g_load_c1), g_load_c2charsmax(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 
lenicountlen strlen(text);count 0;
 if (!
len) return false;
    
 
for (0leni++)
 {
 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(saidcharsmax(said)); remove_quotes(said);
    
 
if (said[0] == '@' || said[0] == '%' || said[0] == '/' || said[0] == '.' || said[0] == '!' || equal (said""))
 return 
PLUGIN_HANDLED;

 if (!
ValidMessage(said1)) return PLUGIN_CONTINUE;
    
 
static color[11], iteam[11];
 
get_user_team(id,color,charsmax(color));
 
 if(
get_user_flags(id) & CHAT_FLAG)
 {
 
format(saidcharsmax(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(saidcharsmax(said), "^x01%s^04%s ^x03%s ^x01: %s",
 
is_user_alive(id) ? "" "[MUERTO]",
 
Rangos[g_rango[id]][NOMBRE],
 
g_playername[id],
 
said);
 }
    
 
for (1<= g_maxplayersi++)
 {
 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(iteamcharsmax(team));
 
changeTeamInfo(icolor);
 
writeMessage(isaid);
 
changeTeamInfo(iteam);
 }
 }

 return 
PLUGIN_HANDLED_MAIN;


Código PHP:
get_user_team(iteamcharsmax(team));
 
changeTeamInfo(icolor);
 
writeMessage(isaid);
 
changeTeamInfo(iteam); 

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
Responder
#10

[Imagen: C4BWeKp.png]
[Imagen: 9GrsTj3.png]

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)
Responder
#11
(02/08/2020, 01:19 AM)SVC escribió:
[Imagen: C4BWeKp.png]
[Imagen: 9GrsTj3.png]

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(idCS_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
Responder
#12
(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.
   
Responder
#13
Bueno a mi me da error, pero mientras el fix no tenga error creo que está bien xd
Responder
#14
Sería bueno que ambos pusieran el output de su amxx version, así descartan
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)