[INC] CZTutor v1.6
#1
[INC] CZTutor v1.6

Descripción:
- Este include te ayudará a mostrar fácilmente un TutorMessage a los jugadores al estilo del mod czero
- Requisitos: AmxModX 1.9.0

Contenido del Include:
Código PHP:
/*======================== Inc CZTutor v1.6 by [N]drs ========================*/

enum TutorTypeColor
{
    
TRED 1,
    
TBLUE,
    
TYELLOW,
    
TGREEN,
    
TDANGER 1,
    
TPRIMARY,
    
TWARNING,
    
TSUCCESS
}

/**
 * Inicializa el TutorMessage.
 *
 * @nota Solo debe ser usado dentro de la función plugin_precache()
 *
 * @noreturn
**/
stock Tutor_Init()

/**
 * Envia un TutorMessage al jugador.
 *
 * @param id             Client index
 * @param Color          Ver el enum TutorTypeColor
 * @param message       Mensaje a mostrar al jugador
 * @param ...           ...
 *
 * @noreturn
**/
stock Tutor_ShowMsg(idTutorTypeColor:Color, const szMessage[], any:...) 

Ejemplo de uso:
Código PHP:
#include <amxmodx>
#include <cztutor>

#define PLUGIN  "Ejemplo de uso del Include CZTutor"
#define VERSION "1.0"
#define AUTHOR  "[N]drs"

public plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)

    
register_clcmd("say /timeleft""ShowTimeleft")
}

public 
plugin_precache()
    
Tutor_Init()

public 
ShowTimeleft(id)
{
    new 
szTimeleft[8]
    
get_cvar_string("amx_timeleft"szTimeleftcharsmax(szTimeleft))

    
Tutor_ShowMsg(idTGREEN"Timeleft: %s"szTimeleft)


Resultado:
[Imagen: unknown.png]

Créditos:
Cita:Ya sé que hay varios ejemplos de uso de este tema, pero no había algo solido para masticar
Hypnotize - Por indirectamente darme la idea de armar ese include


Archivos adjuntos
.zip   cztutor_resources.zip (Tamaño: 8.66 KB / Descargas: 97)
.inc   cztutor.inc (Tamaño: 2.4 KB / Descargas: 104)
Responder
#2
esos indicadores de condition zero me encantaban, se ve genial
Responder
#3
Claro, el problema es que en CS 1.6, tendrían que instalarse cada uno los archivos de resource, por lo que sé, solo se puede de forma automática por slowhacking, lástima, porque sería buena forma de implementarlo
pero es muy bueno
[Imagen: 76561198074301943.png]
Responder
#4
solo los precacheas y ya Whatever
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#5
Estaria bueno que en Tutor_ShowMsg metas también para controlar el tiempo en este task "Tutor_DestroyMsg"
Que quede como:
Código PHP:
stock Tutor_ShowMsg(idTutorTypeColor:Color, const szMessage[], Float:TaskTimeany:...)
{
    if(!
g_iTutorText || !g_iTutorClose)
        
set_fail_state("[Inc CZTutor] > Error: Es obligatorio colocar ^"Tutor_Init()^" dentro de ^"public plugin_precache()^"")

    
#define TUTOR_TASKID id + TUTOR_TASK
    
new szMsg[192]
    
vformat(szMsgcharsmax(szMsg), szMessage5)

    if(
task_exists(TUTOR_TASKID))
    {
        
remove_task(TUTOR_TASKID)
        
Tutor_DestroyMsg(TUTOR_TASKID)
    }

    
message_begin(id MSG_ONE_UNRELIABLE MSG_BROADCASTg_iTutorText_id)
    
write_string(szMsg// Message
    
write_byte(0// NumberOfSubMsgs
    
write_short(0// TutorMessageEventId
    
write_short(0// IsDead
    
write_short(1<<_:Color// Type
    
message_end()

    
set_task(TaskTime"Tutor_DestroyMsg"TUTOR_TASKID)

Responder
#6
Esta chevere, lo único malo es que el mensaje no se ve bien cuando usas una resolución baja ejemplo 640
Responder
#7
(13/08/2022, 03:10 PM)Asta escribió: Esta chevere, lo único malo es que el mensaje no se ve bien cuando usas una resolución baja ejemplo 640

Puede que hayas instalado mal los archivos o el problema sea tu cs, pero en esa resolucion se ve perfecto
[Imagen: unknown.png]
Responder
#8
(13/08/2022, 03:45 PM)[N]drs escribió: Puede que hayas instalado mal los archivos o el problema sea tu cs, pero en esa resolucion se ve perfecto
[Imagen: unknown.png]

haz la prueba a resolucion 640x480 y veras lo que digo, sale el cuadro pero sale en gris y no se ve el mensaje.
Responder
#9
cuando entras por primera ves al sv se ve un cuadro gris, cierra y abre el game, si no es eso compra otro monitor Whatever
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#10
(13/08/2022, 04:02 PM)Asta escribió: haz la prueba a resolucion 640x480 y veras lo que digo, sale el cuadro pero sale en gris y no se ve el mensaje.
Esa captura es del 640x480
Responder
#11
Hola me sale esto al momento que tiene que salir el tutor mgs
Cita:[AMXX] Plugin says: [Inc CZTutor] > Error: Es obligatorio colocar "Tutor_Init()" dentro de "public plugin_precache()"
cabe recalcar que tengo precacheado el Tutor_Init() en public plugin_precache()

Código PHP:
#include <amxmodx>
#include <cztutor>

#define PLUGIN  "Ejemplo de uso del Include CZTutor"
#define VERSION "1.0"
#define AUTHOR  "[N]drs"


public plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)

    
register_clcmd("say a""ShowTimeleft")
}

public 
plugin_precache()
    
Tutor_Init()


public 
ShowTimeleft(id)
{
    new 
szTimeleft[8]
    
get_cvar_string("amx_timeleft"szTimeleftcharsmax(szTimeleft))

    
Tutor_ShowMsg(idTGREEN"Timeleft: %s"szTimeleft)


Me compila a la perfeccion
Cita:AMX Mod X Compiler 1.9.0.5294
Copyright © 1997-2006 ITB CompuPhase
Copyright © 2004-2013 AMX Mod X Team

Header size: 560 bytes
Code size: 1728 bytes
Data size: 2664 bytes
Stack/heap size: 16384 bytes
Total requirements: 21336 bytes
Done.

pero al momento de querer que funcione sale
Cita:[AMXX] Plugin says: [Inc CZTutor] > Error: Es obligatorio colocar "Tutor_Init()" dentro de "public plugin_precache()"
en CONSOLA
Pawn progress %15 Thinking
Responder
#12
(01/03/2023, 10:17 PM)andrexsitop escribió: Hola me sale esto al momento que tiene que salir el tutor mgs
cabe recalcar que tengo precacheado el Tutor_Init() en public plugin_precache()

Código PHP:
#include <amxmodx>
#include <cztutor>

#define PLUGIN  "Ejemplo de uso del Include CZTutor"
#define VERSION "1.0"
#define AUTHOR  "[N]drs"


public plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)

    
register_clcmd("say a""ShowTimeleft")
}

public 
plugin_precache()
    
Tutor_Init()


public 
ShowTimeleft(id)
{
    new 
szTimeleft[8]
    
get_cvar_string("amx_timeleft"szTimeleftcharsmax(szTimeleft))

    
Tutor_ShowMsg(idTGREEN"Timeleft: %s"szTimeleft)


Me compila a la perfeccion

pero al momento de querer que funcione sale
en CONSOLA

Lo acabo de probar y funciona correctamente, asegúrate de no haber modificado el inc y de lo contrario, toca reinstalar el amxx
Responder
#13
Me pasa lo mismo, se me ve el mensaje así xD

[Imagen: ruDlF60.jpg]
Responder
#14
(24/06/2023, 11:24 PM)MalitoMaloso escribió: Me pasa lo mismo, se me ve el mensaje así xD

[Imagen: ruDlF60.jpg]

Cierra el juego y lo vuelves a abrir y ya con eso se te soluciona
Responder
#15
(20/04/2021, 04:39 PM)[N]drs escribió:
[INC] CZTutor v1.6

Descripción:
- Este include te ayudará a mostrar fácilmente un TutorMessage a los jugadores al estilo del mod czero
- Requisitos: AmxModX 1.9.0

Contenido del Include:
Código PHP:
/*======================== Inc CZTutor v1.6 by [N]drs ========================*/

enum TutorTypeColor
{
    
TRED 1,
    
TBLUE,
    
TYELLOW,
    
TGREEN,
    
TDANGER 1,
    
TPRIMARY,
    
TWARNING,
    
TSUCCESS
}

/**
 * Inicializa el TutorMessage.
 *
 * @nota Solo debe ser usado dentro de la función plugin_precache()
 *
 * @noreturn
**/
stock Tutor_Init()

/**
 * Envia un TutorMessage al jugador.
 *
 * @param id             Client index
 * @param Color          Ver el enum TutorTypeColor
 * @param message       Mensaje a mostrar al jugador
 * @param ...           ...
 *
 * @noreturn
**/
stock Tutor_ShowMsg(idTutorTypeColor:Color, const szMessage[], any:...) 

Ejemplo de uso:
Código PHP:
#include <amxmodx>
#include <cztutor>

#define PLUGIN  "Ejemplo de uso del Include CZTutor"
#define VERSION "1.0"
#define AUTHOR  "[N]drs"

public plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)

    
register_clcmd("say /timeleft""ShowTimeleft")
}

public 
plugin_precache()
    
Tutor_Init()

public 
ShowTimeleft(id)
{
    new 
szTimeleft[8]
    
get_cvar_string("amx_timeleft"szTimeleftcharsmax(szTimeleft))

    
Tutor_ShowMsg(idTGREEN"Timeleft: %s"szTimeleft)


Resultado:
[Imagen: unknown.png]

Créditos:

por que me sale este error que puedo hacer
https://ibb.co/T0CCfQ4
Pawn progress %15 Thinking
Responder
#16
Está mal diseñado el uso de Tutor_Init, y la gente que ha tenido el error mencionado y tiene el código correcto se debe principalmente a que es el primer arranque del server. El problema yace en get_user_msgid, del cual sería bueno le eches un ojo:

https://github.com/alliedmodders/amxmodx...mxmodx.inc

Cita:/**
* Returns unique id of a client message.
*
* @note Example usage: get_user_msgid("TextMsg")
* @note The message id is unique as long as the server is running, but might
* change between updates. They should not be hardcoded into plugins.
* @note On first server start, this function will return 0 if used inside
* plugin_precache(). Consider hooking RegUserMsg in order to retrieve
* the correct message id.

*
* @param name Client message name
*
* @return Message id, 0 if message was not found
*/
native get_user_msgid(const name[]);

En el primer arranque del servidor, no hay ningun MsgId registrado, por lo que usar get_user_msgid dentro de plugin_precache devolvería 0 a cualquier parámetro. Esto solo aplica al primer arranque, los posteriores ya no tendrán problema porque basta con 1 llamado a LinkUserMessages (https://github.com/s1lentq/ReGameDLL_CS/....cpp#L3715) para que todos los MsgId estén cacheados

No es necesario guardar el valor en Tutor_Init, puedes perfectamente hacerlo en cada llamado y hacer caché ahí mismo. Aproveché de limpiar el include con algunas mejoras y unos fixes que te invito los documentes si estás de acuerdo:

Código PHP:
#if defined _cztutor
    #endinput
#endif
#define _cztutor

/*======================== Inc CZTutor v1.6 by [N]drs ========================*/

#define TUTOR_TASK 7896

enum TutorTypeColor
{
    
TRED 1,
    
TBLUE,
    
TYELLOW,
    
TGREEN,
    
TDANGER 1,
    
TPRIMARY,
    
TWARNING,
    
TSUCCESS
}

stock const __szTResources[][] = 
{  
    
"gfx/career/icon_!.tga"
    
"gfx/career/icon_!-bigger.tga"
    
"gfx/career/icon_i.tga",  
    
"gfx/career/icon_i-bigger.tga"
    
"gfx/career/icon_skulls.tga",
    
"gfx/career/round_corner_ne.tga"
    
"gfx/career/round_corner_nw.tga"
    
"gfx/career/round_corner_se.tga"
    
"gfx/career/round_corner_sw.tga"
    
"resource/TutorScheme.res"
    
"resource/UI/TutorTextWindow.res"
}

/**
 * Inicializa el TutorMessage.
 *
 * @note Solo debe ser usado dentro de la función plugin_precache()
 *
 * @noreturn
**/
stock Tutor_Init()
{
    for(new 
0sizeof(__szTResources); i++)
    {
        if(!
file_exists(__szTResources[i]))
            
set_fail_state("[CZTutor] Falta el archivo %s, descargalo de https://amxmodx-es.com/Thread-INC-CZTutor-v1-6"__szTResources[i])

        
precache_generic(__szTResources[i])
    }
}

/**
 * Envia un TutorMessage al jugador.
 *
 * @param id             Client index
 * @param Color          Ver el enum TutorTypeColor
 * @param Duration          Duracion en pantalla del Tutor
 * @param message       Mensaje a mostrar al jugador
 * @param ...           ...
 *
 * @noreturn
**/
stock Tutor_ShowMsg(idTutorTypeColor:ColorFloat:Duration, const szMessage[], any:...)
{
    static 
iTutorTextMsgId

    
if(!iTutorTextMsgId)
    {
        if( !(
iTutorTextMsgId get_user_msgid("TutorText")) )
            
set_fail_state("[CZTutor] TutorText no esta programado en el gamedll")
    }

    static 
iTaskId
    
if(!iTaskId)
        
iTaskId random_num(13377331)

    static 
szMsg[192]
    
vformat(szMsgcharsmax(szMsg), szMessage5)

    if(
task_exists(id iTaskId))
        
change_task(id iTaskIdDuration)

    
message_begin(id MSG_ONE MSG_ALLiTutorTextMsgId_id)
    
write_string(szMsg// Message
    
write_byte(0// NumberOfSubMsgs
    
write_short(0// TutorMessageEventId
    
write_short(0// IsDead
    
write_short(1<<_:Color// Type
    
message_end()

    new 
iArgs[1]
    
iArgs[0] = iTaskId
    set_task
(Duration"__Tutor_DestroyMsg"id iTaskIdiArgssizeof iArgs)
}

public 
__Tutor_DestroyMsg(const args[], id)
{
    
id -= args[0]

    if(!
is_user_connected(id))
        return;

    static 
iTutorCloseMsgId

    
if(!iTutorCloseMsgId)
    {
        if( !(
iTutorCloseMsgId get_user_msgid("TutorClose")) )
            
set_fail_state("[CZTutor] TutorClose no esta programado en el gamedll")
    }

    
message_begin(id MSG_ONE MSG_ALLiTutorCloseMsgId_id)
    
message_end()


- Ahora los índices de los MsgId provenientes de los client messages serán obtenidos y cacheados en cada ejecución respectiva para evitar cachearlos en una única llamada bajo la función Tutor_Init
- El task index ahora será distinto en cada mapa para evitar colisiones de task indexes.
- Todas las declaraciones de funciones/variables internas del stock fueron antepuestas con "__" como norma para evitar conflictos con nombres de otras funciones/variables del plugin.
- Fixeado bug que llamaba TutorClose cuando el jugador potencialmente podría estar desconectado.
- Cambiado los mensajes a un canal RELIABLE (MSG_ONE_UNRELIABLE -> MSG_ONE, MSG_BROADCAST -> MSG_ALL) al ser mensajes que requieren que el destinatario reciba sin excepciones el HUD
- Ahora en vez de remover el task y llamar TutorClose, simplemente se cambiará el timer del task actual ya que se sobrepone el TutorText actual con el que se está por enviar.
- Limpiados los mensajes de error para una lectura más simple
- Agregado parámetro "Duration" para definir la duración del TutorText en vez de un número fijo

(no lo compilé porque no estoy en mi PC pero al ojo la semántica está bien, de haber un problema al compilar me imagino será fácilmente arreglable)

Sonrisa
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)