Mensajes: 162
Temas: 45
Registro en: Dec 2014
Reputación:
0
01/07/2016, 07:45 PM
(Última modificación: 01/07/2016, 07:45 PM por timidop.)
hola buenas
primero que nada he vuelto y en forma de fichas
2do: Catolica
y tercero me gustaría saber como obtener el ultimo usuario que entro al equipo y si me dejan un ejemplo mejor aun espero su pronta ayuda porfavor
Pd: estoy realizando un chequeo alfinal de la ronda y necesito obtenerlo
graciasss
Mensajes: 2,497
Temas: 20
Registro en: Oct 2014
Reputación:
26
(03/07/2016, 11:24 PM)meTaLiCroSS escribió: Como lo hizo sasske es como lo estipule de un principio
Mensajes: 252
Temas: 50
Registro en: Mar 2016
Reputación:
2
02/07/2016, 02:49 PM
(Última modificación: 02/07/2016, 02:50 PM por Asd123Asd.)
2do Catolica jajajajaja
Cita:Estaba bueno el morande
Mensajes: 162
Temas: 45
Registro en: Dec 2014
Reputación:
0
(01/07/2016, 08:21 PM)sasske escribió: Supongo que con esto ya tenes todo:
https://forums.alliedmods.net/showpost.p...ostcount=2
no se me ocurre como tomar al ultimo que entro solo puedo ver a que equipo entro
Mensajes: 2,497
Temas: 20
Registro en: Oct 2014
Reputación:
26
(03/07/2016, 06:09 PM)timidop escribió: (01/07/2016, 08:21 PM)sasske escribió: Supongo que con esto ya tenes todo:
https://forums.alliedmods.net/showpost.p...ostcount=2
no se me ocurre como tomar al ultimo que entro solo puedo ver a que equipo entro
Cuando entra, guardas en una variable el ID del chabon, ya sabes que ese es el ultimo.
El único problema que le veo es que cuando se vaya el que entro ultimo, va a quedar un ID que no existe, para guardar todo en un orden no se me ocurre una manera sencilla de hacerlo.
(03/07/2016, 11:24 PM)meTaLiCroSS escribió: Como lo hizo sasske es como lo estipule de un principio
Mensajes: 843
Temas: 13
Registro en: Nov 2013
Reputación:
11
03/07/2016, 09:06 PM
(Última modificación: 03/07/2016, 09:08 PM por UnrealT.)
Es lo que se me ocurrió, debe haber mejores formas.
Código PHP: new Wea[33] new UltimoPlayer
// Cuando se conecta alguien Wea[id] = 0 for (i = 1; i <= gMaxPlayers; i++) { if (i == id) continue; Wea[i]++; }
// Cuando se va alguien for (i = 1; i <= gMaxPlayers; i++) Wea[i]--;
fun EncuentraUltimo for (i = 1; i <= gMaxPlayers; i++) if (Wea[i] == 0) return i;
// Cuando finaliza la ronda UltimoPlayer = EncuentraUltimo
PD: Hace mil que no toco esto xD... Otra cosa hace los chequeos necesarios
Mensajes: 3,466
Temas: 18
Registro en: Oct 2013
Reputación:
54
Sean inteligentes, guarden en una array el tiempo en el cual el usuario ingreso al equipo CT. get_gametime(), un array, listo
Mensajes: 779
Temas: 5
Registro en: Sep 2015
Reputación:
16
03/07/2016, 10:34 PM
(Última modificación: 03/07/2016, 10:35 PM por Matians.)
Siguiendo lo que dijo Metal, este a mí, me funciona bien.
Código PHP: #include <amxmodx>
#define PLUGIN "Team join info" #define VERSION "1.0" #define AUTHOR "AMXX Community"
new Float:flLastEnter = 0.0; new LastCT = -1;
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_event( "TeamInfo", "join_team", "a");
register_clcmd( "say /last", "last"); }
public join_team() { new id = read_data(1); static user_team[32]; read_data(2, user_team, 31) ; if(!is_user_connected(id)) return PLUGIN_CONTINUE; switch(user_team[0]) { case 'C': { // player join to ct's if ( get_gametime() >= flLastEnter ) { LastCT = id; flLastEnter = get_gametime(); } } case 'T': { // player join to terrorist } case 'S': { // player join to spectators } } return PLUGIN_CONTINUE; }
public last(id) { if ( !( LastCT > 0 ) ) return PLUGIN_HANDLED;
static szPlayerName[33];
get_user_name( LastCT, szPlayerName, charsmax( szPlayerName ) );
client_print( id, print_chat, "Last player CT was %s", szPlayerName )
return PLUGIN_CONTINUE; }
TFD ------ 10% (proyecto parado)
Mensajes: 3,466
Temas: 18
Registro en: Oct 2013
Reputación:
54
Mensajes: 2,497
Temas: 20
Registro en: Oct 2014
Reputación:
26
(03/07/2016, 10:34 PM)Matians escribió: Siguiendo lo que dijo Metal, este a mí, me funciona bien.
Código PHP: #include <amxmodx>
#define PLUGIN "Team join info" #define VERSION "1.0" #define AUTHOR "AMXX Community"
new Float:flLastEnter = 0.0; new LastCT = -1;
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_event( "TeamInfo", "join_team", "a");
register_clcmd( "say /last", "last"); }
public join_team() { new id = read_data(1); static user_team[32]; read_data(2, user_team, 31) ; if(!is_user_connected(id)) return PLUGIN_CONTINUE; switch(user_team[0]) { case 'C': { // player join to ct's if ( get_gametime() >= flLastEnter ) { LastCT = id; flLastEnter = get_gametime(); } } case 'T': { // player join to terrorist } case 'S': { // player join to spectators } } return PLUGIN_CONTINUE; }
public last(id) { if ( !( LastCT > 0 ) ) return PLUGIN_HANDLED;
static szPlayerName[33];
get_user_name( LastCT, szPlayerName, charsmax( szPlayerName ) );
client_print( id, print_chat, "Last player CT was %s", szPlayerName )
return PLUGIN_CONTINUE; }
Si el player que es last CT se va del sv, algo ahí no andará
De hecho ni hace falta el tiempo ahí, no cambia nada
Seria asi con lo que dijo metal, que me iluminó:
Código PHP: /* First, save the file ! - Sublime AMXX Editor v1.7 */
#include <amxmodx> // #include <amxmisc> // #include <cstrike> // #include <engine> // #include <fakemeta> // #include <hamsandwich> // #include <fun> // #include <xs> // #include <sqlx>
#define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "Author"
new Float:g_TimeLastCT[33]
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event( "TeamInfo", "join_team", "a")
register_clcmd("say /test", "TestFunc") }
public join_team() { new id = read_data(1) static team[32] read_data(2, team, 31)
if(equal(team, "CT")) g_TimeLastCT[id] = get_gametime() }
public TestFunc(id) { new LastCtID=-1, Float:TempTime=0.0; for(new i=1; i <= get_maxplayers(); i++) { if(g_TimeLastCT[i] > TempTime) { TempTime = g_TimeLastCT[i] LastCtID = i } }
if(LastCtID == -1) client_print(id, print_chat, "No hay ultimo CT") else client_print(id, print_chat, "El ID del ultimo CT es %d", LastCtID) return PLUGIN_HANDLED }
(03/07/2016, 11:24 PM)meTaLiCroSS escribió: Como lo hizo sasske es como lo estipule de un principio
Mensajes: 3,466
Temas: 18
Registro en: Oct 2013
Reputación:
54
Como lo hizo sasske es como lo estipule de un principio
Mensajes: 162
Temas: 45
Registro en: Dec 2014
Reputación:
0
04/07/2016, 02:20 AM
(Última modificación: 04/07/2016, 02:32 AM por timidop.)
(03/07/2016, 10:43 PM)sasske escribió: (03/07/2016, 10:34 PM)Matians escribió: Siguiendo lo que dijo Metal, este a mí, me funciona bien.
Código PHP: #include <amxmodx>
#define PLUGIN "Team join info" #define VERSION "1.0" #define AUTHOR "AMXX Community"
new Float:flLastEnter = 0.0; new LastCT = -1;
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_event( "TeamInfo", "join_team", "a");
register_clcmd( "say /last", "last"); }
public join_team() { new id = read_data(1); static user_team[32]; read_data(2, user_team, 31) ; if(!is_user_connected(id)) return PLUGIN_CONTINUE; switch(user_team[0]) { case 'C': { // player join to ct's if ( get_gametime() >= flLastEnter ) { LastCT = id; flLastEnter = get_gametime(); } } case 'T': { // player join to terrorist } case 'S': { // player join to spectators } } return PLUGIN_CONTINUE; }
public last(id) { if ( !( LastCT > 0 ) ) return PLUGIN_HANDLED;
static szPlayerName[33];
get_user_name( LastCT, szPlayerName, charsmax( szPlayerName ) );
client_print( id, print_chat, "Last player CT was %s", szPlayerName )
return PLUGIN_CONTINUE; }
Si el player que es last CT se va del sv, algo ahí no andará
De hecho ni hace falta el tiempo ahí, no cambia nada
Seria asi con lo que dijo metal, que me iluminó:
Código PHP: /* First, save the file ! - Sublime AMXX Editor v1.7 */
#include <amxmodx> // #include <amxmisc> // #include <cstrike> // #include <engine> // #include <fakemeta> // #include <hamsandwich> // #include <fun> // #include <xs> // #include <sqlx>
#define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "Author"
new Float:g_TimeLastCT[33]
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event( "TeamInfo", "join_team", "a")
register_clcmd("say /test", "TestFunc") }
public join_team() { new id = read_data(1) static team[32] read_data(2, team, 31)
if(equal(team, "CT")) g_TimeLastCT[id] = get_gametime() }
public TestFunc(id) { new LastCtID=-1, Float:TempTime=0.0; for(new i=1; i <= get_maxplayers(); i++) { if(g_TimeLastCT[i] > TempTime) { TempTime = g_TimeLastCT[i] LastCtID = i } }
if(LastCtID == -1) client_print(id, print_chat, "No hay ultimo CT") else client_print(id, print_chat, "El ID del ultimo CT es %d", LastCtID) return PLUGIN_HANDLED }
gracias por el aporte!, pero estoy yo de ultimo ct, mi id es 1, entra mi amigo con id 2, y me dice que el ultimo CT es el BRAVO!
pero cuando empieza una nueva ronda se buguea :/ y dice que el ultimo ct es el primero
(03/07/2016, 10:34 PM)Matians escribió: Siguiendo lo que dijo Metal, este a mí, me funciona bien.
Código PHP: #include <amxmodx>
#define PLUGIN "Team join info" #define VERSION "1.0" #define AUTHOR "AMXX Community"
new Float:flLastEnter = 0.0; new LastCT = -1;
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_event( "TeamInfo", "join_team", "a");
register_clcmd( "say /last", "last"); }
public join_team() { new id = read_data(1); static user_team[32]; read_data(2, user_team, 31) ; if(!is_user_connected(id)) return PLUGIN_CONTINUE; switch(user_team[0]) { case 'C': { // player join to ct's if ( get_gametime() >= flLastEnter ) { LastCT = id; flLastEnter = get_gametime(); } } case 'T': { // player join to terrorist } case 'S': { // player join to spectators } } return PLUGIN_CONTINUE; }
public last(id) { if ( !( LastCT > 0 ) ) return PLUGIN_HANDLED;
static szPlayerName[33];
get_user_name( LastCT, szPlayerName, charsmax( szPlayerName ) );
client_print( id, print_chat, "Last player CT was %s", szPlayerName )
return PLUGIN_CONTINUE; }
funcionaa, pero se actualiza al ultimo ct, al inicio del siguiente round, necesito que lo chequee al final de la ronda
Mensajes: 3,284
Temas: 41
Registro en: Jan 2014
Reputación:
28
Prueba este:
Código PHP: /* First, save the file ! - Sublime AMXX Editor v1.8 */
#include <amxmodx> // #include <amxmisc> // #include <cstrike> // #include <engine> // #include <fakemeta> // #include <hamsandwich> // #include <fun> // #include <xs> // #include <sqlx>
#define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "Author"
new g_iJoinTeam[33]; new g_sJoinTeam[33];
new g_iMaxUsers = 0;
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR);
register_logevent("logevent__RoundEnd", 2, "1=Round_End"); register_message(get_user_msgid("TeamInfo"), "message__TeamInfo");
register_clcmd("say /test", "ClientCommand__Test");
g_iMaxUsers = get_maxplayers(); }
public logevent__RoundEnd() { static Float:fLastEndTime; static Float:fCurrentTime; fCurrentTime = get_gametime(); if((fCurrentTime - fLastEndTime) < 0.5) { return; } fLastEndTime = fCurrentTime;
ClientCommand__Test(0); }
public message__TeamInfo(const msg_id, const msg_dest){ if(msg_dest != MSG_ALL && msg_dest != MSG_BROADCAST) { return; }
static id; id = get_msg_arg_int(1);
static sTeam[2]; get_msg_arg_string(2, sTeam, 1);
g_iJoinTeam[id] = 0; g_sJoinTeam[id] = EOS;
if(sTeam[0] == 'C') { g_iJoinTeam[id] = get_systime(); g_sJoinTeam[id] = 'C'; } }
public ClientCommand__Test(const id) { new i; new iLast = 0; new iUserId = 0;
for(i = 1; i <= g_iMaxUsers; ++i) { if(is_user_connected(i)) { if(g_sJoinTeam[i] == 'C') { if(!iUserId) { iUserId = i; iLast = g_iJoinTeam[i]; }
if(g_iJoinTeam[i] > iLast) { iUserId = i; iLast = g_iJoinTeam[i]; } } } }
if(!iUserId) { client_print(id, print_chat, "No hay ningun ultimo CT"); } else { new sName[32]; get_user_name(iUserId, sName, charsmax(sName));
client_print(id, print_chat, "El ID del ultimo CT es: %d (%s)", iUserId, sName); } }
Mensajes: 162
Temas: 45
Registro en: Dec 2014
Reputación:
0
(04/07/2016, 03:18 AM)Federicomb escribió: Prueba este:
Código PHP: /* First, save the file ! - Sublime AMXX Editor v1.8 */
#include <amxmodx> // #include <amxmisc> // #include <cstrike> // #include <engine> // #include <fakemeta> // #include <hamsandwich> // #include <fun> // #include <xs> // #include <sqlx>
#define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "Author"
new g_iJoinTeam[33]; new g_sJoinTeam[33];
new g_iMaxUsers = 0;
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR);
register_logevent("logevent__RoundEnd", 2, "1=Round_End"); register_message(get_user_msgid("TeamInfo"), "message__TeamInfo");
register_clcmd("say /test", "ClientCommand__Test");
g_iMaxUsers = get_maxplayers(); }
public logevent__RoundEnd() { static Float:fLastEndTime; static Float:fCurrentTime; fCurrentTime = get_gametime(); if((fCurrentTime - fLastEndTime) < 0.5) { return; } fLastEndTime = fCurrentTime;
ClientCommand__Test(0); }
public message__TeamInfo(const msg_id, const msg_dest){ if(msg_dest != MSG_ALL && msg_dest != MSG_BROADCAST) { return; }
static id; id = get_msg_arg_int(1);
static sTeam[2]; get_msg_arg_string(2, sTeam, 1);
g_iJoinTeam[id] = 0; g_sJoinTeam[id] = EOS;
if(sTeam[0] == 'C') { g_iJoinTeam[id] = get_systime(); g_sJoinTeam[id] = 'C'; } }
public ClientCommand__Test(const id) { new i; new iLast = 0; new iUserId = 0;
for(i = 1; i <= g_iMaxUsers; ++i) { if(is_user_connected(i)) { if(g_sJoinTeam[i] == 'C') { if(!iUserId) { iUserId = i; iLast = g_iJoinTeam[i]; }
if(g_iJoinTeam[i] > iLast) { iUserId = i; iLast = g_iJoinTeam[i]; } } } }
if(!iUserId) { client_print(id, print_chat, "No hay ningun ultimo CT"); } else { new sName[32]; get_user_name(iUserId, sName, charsmax(sName));
client_print(id, print_chat, "El ID del ultimo CT es: %d (%s)", iUserId, sName); } }
FUNCIONA!,
ahora solo el ultimo problema no agarra a los qe son transferidos por set_user_team o cs_set_user_team
de verdad estoy muy agradecido por su ayuda seria estoy el tema estaria solucionado
Mensajes: 3,466
Temas: 18
Registro en: Oct 2013
Reputación:
54
Los dramas que estas comentando son cosas que puedes solucionar a mano, el boceto esta listo, moldealo tu.
Si tienes dramas con la actualizacion mediante cs_set_user_team vas a tener que hacer una adaptacion a tu codigo ya que no es directamente hookeable.
Mensajes: 162
Temas: 45
Registro en: Dec 2014
Reputación:
0
(04/07/2016, 01:13 PM)meTaLiCroSS escribió: Los dramas que estas comentando son cosas que puedes solucionar a mano, el boceto esta listo, moldealo tu.
Si tienes dramas con la actualizacion mediante cs_set_user_team vas a tener que hacer una adaptacion a tu codigo ya que no es directamente hookeable.
va mas alla a "la adaptacion de mi codigo" ya que lo digo por el plmenu que viene default en el amxx en el team menu ocupa la funcion cs_set_user_team, y no tengo idea como obtener al jugador si fue pasado por cs_set_user_team por algo lo estoy preguntando no? , y yo creo que muchos igual pueden tener la duda
aqui el code del plmenu.
Código PHP: if (is_user_alive(player)) { new deaths = cs_get_user_deaths(player) user_kill(player, 1) cs_set_user_deaths(player, deaths) } // This modulo math just aligns the option to the CsTeams-corresponding number cs_set_user_team(player, (g_menuOption[id] % 3) + 1) cs_reset_user_model(player)
Mensajes: 3,466
Temas: 18
Registro en: Oct 2013
Reputación:
54
Cita:Si tienes dramas con la actualizacion mediante cs_set_user_team vas a tener que hacer una adaptacion a tu codigo ya que no es directamente hookeable.
Código PHP: cs_set_user_team(player, (g_menuOption[id] % 3) + 1)
El jugador = player
El team = (g_menuOption[id] % 3) + 1
Costoso no es, es cosa de pensarlo.
Y te lo repetire con otras palabras con las que quizas entiendas, no llegare a dibujos tampoco.
El uso de cs_set_user_team no es hookeable por ningun metodo, tampoco por TeamInfo (debido que usa los engfunc que no generan callback)
O alguien edita el modulo CStrike, o tendras que cerdamente hookear frame por frame a ver si el team se cambio, lo que es altamente "no" recomendable
Por eso, recalco, reitero, renombro
Cita:vas a tener que hacer una adaptacion a tu codigo
Puedes usar natives, callbacks, como quieras. En la experiencia personal de esto, todo el codigo de mis modificaciones las dejo en 1 solo plugin ya que todo esta conectado de una u otra manera. En caso de tenerlo separado (como ya me fijé), recurra a los 2 mencionados arriba.
Y ahi esta la respuesta a los ""muchos"" que tienen la duda (no he visto ningún hasta el momento, que se pronuncien)
|