ChatBrawl
#1
[ChatBrawl]

Este es un pequeño aporte inspirado en el plugin "ChatBrawl" de Spigot para Minecraft.

¿Qué es ChatBrawl?
Es un pequeño plugin, que mediante 3 diferentes modos (Chat, Quiz y Scramble) pone a prueba la velocidad con el teclado de los jugadores.

- ChatMode: Consiste en repetir la palabra que el servidor te muestra aleatoriamente.
[Imagen: idBNML0.png] [Imagen: pZZiRQN.png]
- QuizMode: Lanza una pregunta aleatoria la cuál tendra que ser respondida por alguno de los jugadores.
[Imagen: ihMiore.png] [Imagen: jq5aFB4.png]
- ScrambleMode: Lanza una palabra cuyas letras están en orden aleatorio, por lo que tendrás que adivinar y reacomodar dichas letras.
[Imagen: CtcAP7H.png] [Imagen: H04Go2q.png]

Es un plugin muy básico y sencillo, pero creo que puede añadir un toque de diversión a los diferentes servidores.
Todas las palabras y preguntas son customizables, así como también la cantidad de recompensa por cada una de las palabras.
Sé que hay cosas que se pueden mejorar en el código, pero por el momento no tengo tiempo para dedicarle.

Creditos: - Mia: Stock para sortear aleatoriamente el contenido de una String.


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

#define PLUGIN  "ChatBrawl"
#define VERSION "1.0"
#define AUTHOR  "GabsHp"

//Creditos Mia: Stock para sortear string

#define TASK_MODE 919191

enum g_Modes
{
    
MODE_QUIZ,
    
MODE_CHAT,
    
MODE_SCRAMBLE
}

enum _:ModesInfo
{
    
MODE_VAR,
    
MODE_NAME[32],
    
MODE_INFO[64]
}

new const 
g_ModeInfo[][ModesInfo] =
{
    {
MODE_QUIZ"QUIZ-BRAWL""¡Responde la siguiente pregunta!"},
    {
MODE_CHAT"CHAT-BRAWL""¡Escribe la siguiente palabra!"},
    {
MODE_SCRAMBLE"SCRAMBLE-BRAWL""¡Acomoda las letras para formar una palabra!"}
}
enum _:ModesConfig
{
    
MOVE_VAR,
    
Float:MODE_TIME
}

//Tiempo definido para resolver el brawl
new const g_ModesConfig[][ModesConfig] =
{
    {
MODE_QUIZ60.0},
    {
MODE_CHAT60.0},
    {
MODE_SCRAMBLE60.0}
}

enum _:QuizInfo
{
    
Quiz_Question[128],
    
Quiz_Answer[64],
    
Quiz_Reward
}

new const 
QuizQuestions[][QuizInfo] =
{
    {
"Cuál fue el primer presidente de México?""Guadalupe Victoria"1000},
    {
"En qué año se dió la caida de Tenochtitlan?""1521"1200},
    {
"Nombre de la 1ra Ley de Newton""Ley de Inercia"900},
    {
"Rama de la medicina encargada de las patologías del oído""Otorrinolaringología"3000},
    {
"Cuántos centimetros de nepe caben en Hinami?""23"5000},
    {
"Ciencia que estudia las patologías de las plantas""Fitopatología"2500}
}

enum _:ChatInfo
{
    
Chat_Word[64],
    
Chat_Reward
}

new const 
ChatWords[][ChatInfo] =
{
    {
"Parangaricutirimícuaro"800},
    {
"GoldSrc"1200},
    {
"Otorrinolaringología"2000},
    {
"amxmodx-es"2000},
    {
"Esternocleidomastoideo"2000}
}

enum _:ScrambleInfo
{
    
Scramble_Word[64],
    
Scramble_Reward
}

//Palabras sin espacio
new const ScrambleWords[][ScrambleInfo] =
{
    {
"Counter"800},
    {
"Medicina"1200},
    {
"Ciencia"2000},
    {
"Juegos"1900},
    {
"amxmodx"2500},
    {
"Hinamichupapija"5000}
}

new 
bool:isRoundStartedbool:isGameEnabledbool:isInProcess;
new 
g_BrawlModeiTargetWord[64], iReward;

new const 
BrawlSound[] = "events/enemy_died.wav";
new const 
BrawlEnd[] = "events/friend_died.wav";
new const 
BrawlWin[] = "events/task_complete.wav";

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
RegisterHookChain(RG_CSGameRules_RestartRound"@RestartRound_Post"true);
    
RegisterHookChain(RG_RoundEnd"@RoundEnd_Post"true);
    
register_clcmd("say""cmdSay");
    
register_clcmd("say start""ForceStart");
    
}

public 
plugin_precache()
{
    
precache_sound(BrawlSound);
    
precache_sound(BrawlEnd);
    
precache_sound(BrawlWin);
}

public 
PrepareGameMode()
{
    if(!
isRoundStarted || isInProcess) return;
    
set_task(random_float(5.030.0), "SelectGameMode");
    
isInProcess true;
}

public 
ForceStart()
{
    if(
isGameEnabled || !isRoundStarted || isInProcess)
    {
        return;
    }
    
client_print_color(0print_team_default"^4[ChatBrawl]^1 Un modo se está preparando!");
    
PrepareGameMode();
}

public 
SelectGameMode()
{
    if(!
isRoundStarted || isGameEnabled)
        return;
    
g_BrawlMode g_ModesConfig[random_num(0sizeof g_ModesConfig 1)][MOVE_VAR];
    
set_dhudmessage(random_num(0255), random_num(0255), random_num(0255), -1.00.2500.05.00.10.1);
    
show_dhudmessage(0"BRAWLMODE^n!%s¡"g_ModeInfo[g_BrawlMode][MODE_NAME]);
    
rg_send_audio(0BrawlSound);
    
BrawlMode();
}

public 
BrawlMode()
{
    
client_print_color(0print_team_default"^4[%s]^1 Info: ^3%s"g_ModeInfo[g_BrawlMode][MODE_NAME], g_ModeInfo[g_BrawlMode][MODE_INFO]);
    switch(
g_BrawlMode)
    {
        case 
MODE_QUIZ:
        {
            new 
irandom_num(0sizeof QuizQuestions -1);
            
client_print_color(0print_team_default"^4[BrawlMode]^1 Quiz: ^3%s"QuizQuestions[i][Quiz_Question]);
            
copy(iTargetWordcharsmax(iTargetWord), QuizQuestions[i][Quiz_Answer]);
            
iReward QuizQuestions[i][Quiz_Reward]
        }
        case 
MODE_CHAT:
        {
            new 
irandom_num(0sizeof ChatWords -1);
            
client_print_color(0print_team_default"^4[BrawlMode]^1 Word: ^3%s"ChatWords[i][Chat_Word]);
            
copy(iTargetWordcharsmax(iTargetWord), ChatWords[i][Chat_Word]);
            
iReward ChatWords[i][Chat_Reward];
        }
        case 
MODE_SCRAMBLE:
        {
            new 
iRandomWord random_num(0sizeof(ScrambleWords) - 1);
            new 
szToSort[64]; copy(szToSortcharsmax(szToSort), ScrambleWords[iRandomWord][Scramble_Word]);
            new 
szSorted[64];
            
twist_word(szToSortszSorted);
            
client_print_color(0print_team_default"^4[BrawlMode]^1 Scramble: ^3%s"szSorted);
            
copy(iTargetWordcharsmax(iTargetWord), ScrambleWords[iRandomWord][Scramble_Word]);
            
iReward ScrambleWords[iRandomWord][Scramble_Reward];
        }
    }
    
client_print_color(0print_team_default"^4[BrawlMode]^1 Tiempo Restante: ^3%.f"g_ModesConfig[g_BrawlMode][MODE_TIME]);
    
set_task(g_ModesConfig[g_BrawlMode][MODE_TIME], "EndBrawl"TASK_MODE);
    
isGameEnabled true;
}

public 
EndBrawl()
{
    if(!
isGameEnabled) return;
    
remove_task(TASK_MODE);
    
client_print_color(0print_team_default"^4[BrawlMode]^1 El desafío ha terminado!");
    
client_print_color(0print_team_default"^4[BrawlMode]^1 Respuesta: ^4%s"iTargetWord);
    
isGameEnabled false;
    
isInProcess false;
    
ForceStart();
}

public @
RestartRound_Post()
{
    
EndBrawl();
    
isRoundStarted true;
    
set_task(0.5"PrepareGameMode");
}

public @
RoundEnd_Post()
{
    
isRoundStarted false;
    
isGameEnabled false;
}

public 
cmdSay(id)
{
    if(!
isGameEnabled)
        return 
PLUGIN_CONTINUE;
    new 
szMessage[32];
    
read_args(szMessagecharsmax(szMessage));
    
remove_quotes(szMessage);
    
trim(szMessage);
    
trim(iTargetWord);
    if(
strlen(szMessage) <= 0)
        return 
PLUGIN_CONTINUE;
    if(
equal(szMessageiTargetWord))
    {
        
client_print_color(0print_team_default"^4[ChatBrawl] ^4%n^1 ha sido el más rápido!"id);
        
client_print_color(0print_team_default"^4[%s] ^1Respuesta:^4 %s ^1!"g_ModeInfo[g_BrawlMode][MODE_NAME], iTargetWord);
        
client_print_color(0print_team_default"^4[ChatBrawl]^3 %n ^1ha ganado^4 $%d"idiReward);
        
rg_add_account(idiRewardAS_ADD);
        
isGameEnabled false;
        
rg_send_audio(0BrawlWin);
        
remove_task(TASK_MODE);
        
set_task(20.0"ForceStart");
        
isInProcess false;
    }
    return 
PLUGIN_CONTINUE;
}


stock twist_word(const szWord[], szOut[]) {
    new 
iLen strlen(szWord);
    
copy(szOutiLenszWord);

    if (
iLen <= 1) {
        return 
false;
    }

    for (new 
0iLeni++)
        
swap_chars(szOutirandom(iLen));

    return 
true;
}

stock swap_chars(szText[], iPosiSwap) {
    new 
iBuffer szText[iPos];
    
szText[iPos] = szText[iSwap];
    
szText[iSwap] = iBuffer;

Responder
#2
Buen aporte!
Responder
#3
gran ejemplo

tuputamadre gabs
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#4
Muy bueno! voy a implementarlo en mi sv para hacerlo divertido! Buenas preguntas y respuestas sobre Hinami XD

Gracias por el aporte!

PD: probandolo aparecio armar la palabra correcta, tire amx_cvar sv_restart 1 y no volvio a tirar ni preguntas ni nada, habra manera de generar algun comando como para que reinicie el plugin o que arranque de vuelta?
_____________________________________________________________________________
(05/08/2020, 06:47 PM)acetatomil escribió: Vos también sos trolazo por responder, y también me incluyo y el que lo lea también. Bue.

_____________________________________________________________________________
Responder
#5
(26/08/2021, 08:50 PM)Hinami escribió: gran ejemplo

tuputamadre gabs

Responder
#6
Buen aporte, me gusto bastante.
“Quien te quiere en su vida, volverá a buscarte”
Qué frase más estúpida
Porque quien te quiere en su vida, jamás se iría.
Responder
#7
Buen aporte, como sugerencia se pueden usar archivos de texto para añadir nuevas preguntas sin necesidad de volver a compilar Approved
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck


Mis aportes

PLUGINS
MAPAS
Menú LANG [SF] Sistema de Frags
Say System (Admin Prefix)
Responder
#8
(28/08/2021, 03:26 PM)totopizza escribió: Buen aporte, como sugerencia se pueden usar archivos de texto para añadir nuevas preguntas sin necesidad de volver a compilar Approved

Si pensé, era la idea original pero no sé muy bien como manejar archivos de texto Xd
Igual y en unos días busco algo de info y lo actualizo
Responder
#9
https://forums.alliedmods.net/showthread.php?t=46218

Con la versión de amxx 1.9 puedes hacer uso de JSON también
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck


Mis aportes

PLUGINS
MAPAS
Menú LANG [SF] Sistema de Frags
Say System (Admin Prefix)
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)