26/08/2021, 07:29 PM
(Última modificación: 26/08/2021, 07:31 PM por GabsHp. Edited 1 time in total.)
[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.
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_QUIZ, 60.0},
{MODE_CHAT, 60.0},
{MODE_SCRAMBLE, 60.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:isRoundStarted, bool:isGameEnabled, bool:isInProcess;
new g_BrawlMode, iTargetWord[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(PLUGIN, VERSION, AUTHOR)
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.0, 30.0), "SelectGameMode");
isInProcess = true;
}
public ForceStart()
{
if(isGameEnabled || !isRoundStarted || isInProcess)
{
return;
}
client_print_color(0, print_team_default, "^4[ChatBrawl]^1 Un modo se está preparando!");
PrepareGameMode();
}
public SelectGameMode()
{
if(!isRoundStarted || isGameEnabled)
return;
g_BrawlMode = g_ModesConfig[random_num(0, sizeof g_ModesConfig - 1)][MOVE_VAR];
set_dhudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.25, 0, 0.0, 5.0, 0.1, 0.1);
show_dhudmessage(0, "BRAWLMODE^n!%s¡", g_ModeInfo[g_BrawlMode][MODE_NAME]);
rg_send_audio(0, BrawlSound);
BrawlMode();
}
public BrawlMode()
{
client_print_color(0, print_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 i; i = random_num(0, sizeof QuizQuestions -1);
client_print_color(0, print_team_default, "^4[BrawlMode]^1 Quiz: ^3%s", QuizQuestions[i][Quiz_Question]);
copy(iTargetWord, charsmax(iTargetWord), QuizQuestions[i][Quiz_Answer]);
iReward = QuizQuestions[i][Quiz_Reward]
}
case MODE_CHAT:
{
new i; i = random_num(0, sizeof ChatWords -1);
client_print_color(0, print_team_default, "^4[BrawlMode]^1 Word: ^3%s", ChatWords[i][Chat_Word]);
copy(iTargetWord, charsmax(iTargetWord), ChatWords[i][Chat_Word]);
iReward = ChatWords[i][Chat_Reward];
}
case MODE_SCRAMBLE:
{
new iRandomWord = random_num(0, sizeof(ScrambleWords) - 1);
new szToSort[64]; copy(szToSort, charsmax(szToSort), ScrambleWords[iRandomWord][Scramble_Word]);
new szSorted[64];
twist_word(szToSort, szSorted);
client_print_color(0, print_team_default, "^4[BrawlMode]^1 Scramble: ^3%s", szSorted);
copy(iTargetWord, charsmax(iTargetWord), ScrambleWords[iRandomWord][Scramble_Word]);
iReward = ScrambleWords[iRandomWord][Scramble_Reward];
}
}
client_print_color(0, print_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(0, print_team_default, "^4[BrawlMode]^1 El desafío ha terminado!");
client_print_color(0, print_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(szMessage, charsmax(szMessage));
remove_quotes(szMessage);
trim(szMessage);
trim(iTargetWord);
if(strlen(szMessage) <= 0)
return PLUGIN_CONTINUE;
if(equal(szMessage, iTargetWord))
{
client_print_color(0, print_team_default, "^4[ChatBrawl] ^4%n^1 ha sido el más rápido!", id);
client_print_color(0, print_team_default, "^4[%s] ^1Respuesta:^4 %s ^1!", g_ModeInfo[g_BrawlMode][MODE_NAME], iTargetWord);
client_print_color(0, print_team_default, "^4[ChatBrawl]^3 %n ^1ha ganado^4 $%d", id, iReward);
rg_add_account(id, iReward, AS_ADD);
isGameEnabled = false;
rg_send_audio(0, BrawlWin);
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(szOut, iLen, szWord);
if (iLen <= 1) {
return false;
}
for (new i = 0; i < iLen; i++)
swap_chars(szOut, i, random(iLen));
return true;
}
stock swap_chars(szText[], iPos, iSwap) {
new iBuffer = szText[iPos];
szText[iPos] = szText[iSwap];
szText[iSwap] = iBuffer;
}