Днес го тествах и примерно като се смени мапа, пускам quest и първия който отговори печели, обаче пускам пак и не отчита отговора. Също така не работи с думи, само с цифри. Това е леко преработена версия да не работи само ако си Симон но, не мисля че има проблем този код.
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <regex>
#define CC_COLORS_TYPE CC_COLORS_SHORT
#include <cromchat>
#include <crxranks>
#define ADMIN_FLAG ADMIN_RCON
#define VERSION "1.1"
#define TASKID_QUEST 123
new const g_szRegexPattern[] = "\/quest (.+?\?)\s*(.+)";
new Regex:g_QuestRegexPattern;
new g_szUserQuestion[33][128], g_szUserAnswer[33][32];
new g_szQuestion[128], g_szAnswer[32];
new gp_QuestHoldTime;
new g_iUnused, g_szUnused[2], g_iRewardMin, g_iRewardMax;
public plugin_init()
{
register_plugin("[JB] Simon Question: CRXRanks", VERSION, "TheRedShoko @ AMXX-BG.info | Lethality");
register_cvar("simon_quest", VERSION, FCVAR_SPONLY | FCVAR_SERVER | FCVAR_UNLOGGED);
register_clcmd("say", "CommandSayTyped");
register_clcmd("amx_TYPE_QUESTION", "QuestionTyped");
register_clcmd("amx_TYPE_ANSWER", "AnswerTyped");
gp_QuestHoldTime = register_cvar("quest_holdtime", "20");
bind_pcvar_num(create_cvar("quiz_reward_min", "50"), g_iRewardMin);
bind_pcvar_num(create_cvar("quiz_reward_max", "300"), g_iRewardMax);
g_QuestRegexPattern = regex_compile(g_szRegexPattern, g_iUnused, g_szUnused, charsmax(g_szUnused));
CC_SetPrefix("!g[!tQuest!g] ");
}
public QuestionTyped(id, lvl, cmdId)
{
if (!has_access(id))
{
return PLUGIN_CONTINUE;
}
if (read_argc() < 2)
{
return PLUGIN_HANDLED;
}
read_args(g_szUserQuestion[id], charsmax(g_szUserQuestion[]));
remove_quotes(g_szUserQuestion[id]);
ShowQuestMenu(id);
return PLUGIN_HANDLED;
}
public AnswerTyped(id)
{
if (!has_access(id))
{
return PLUGIN_CONTINUE;
}
if (read_argc() < 2)
{
return PLUGIN_HANDLED;
}
read_args(g_szUserAnswer[id], charsmax(g_szUserAnswer[]));
remove_quotes(g_szUserAnswer[id]);
ShowQuestMenu(id);
return PLUGIN_HANDLED;
}
public CommandSayTyped(id)
{
new szSaid[156];
read_args(szSaid, charsmax(szSaid));
remove_quotes(szSaid);
if (equali(szSaid, "/quest", 6))
{
if (!has_access(id))
{
return PLUGIN_HANDLED;
}
if (regex_match_c(szSaid, g_QuestRegexPattern, g_iUnused) > 0)
{
new szQuestion[128], szAnswer[32];
regex_substr(g_QuestRegexPattern, 1, szQuestion, charsmax(szQuestion));
regex_substr(g_QuestRegexPattern, 2, szAnswer, charsmax(szAnswer));
trim(szQuestion);
trim(szAnswer);
StartQuest(id, szQuestion, szAnswer);
}
else
{
ShowQuestMenu(id);
}
return PLUGIN_HANDLED;
}
if (!task_exists(TASKID_QUEST))
{
return PLUGIN_CONTINUE;
}
if (equali(szSaid, g_szAnswer) && get_user_team(id) == 1 && is_user_alive(id))
{
EndQuest(TASKID_QUEST + id);
}
return PLUGIN_CONTINUE;
}
ShowQuestMenu(id)
{
new iMenu = menu_create("Quest Game", "QuestGameHandler");
new szQuestionItem[156], szAnswerItem[64];
formatex(szQuestionItem, charsmax(szQuestionItem), "Question \y%s", g_szUserQuestion[id]);
formatex(szAnswerItem, charsmax(szAnswerItem), "Answer \y%s", g_szUserAnswer[id]);
menu_additem(iMenu, szQuestionItem);
menu_additem(iMenu, szAnswerItem);
menu_addblank(iMenu, 0);
menu_additem(iMenu, "Start the quest");
menu_display(id, iMenu);
}
public QuestGameHandler(id, iMenu, Item)
{
if (Item == MENU_EXIT)
{
menu_destroy(iMenu);
return;
}
switch (Item)
{
case 0: client_cmd(id, "messagemode amx_TYPE_QUESTION");
case 1: client_cmd(id, "messagemode amx_TYPE_ANSWER");
case 2:
{
StartQuest(id, g_szUserQuestion[id], g_szUserAnswer[id]);
menu_destroy(iMenu);
return;
}
}
menu_destroy(iMenu);
ShowQuestMenu(id);
}
StartQuest(id, szQuestion[], szAnswer[])
{
if (strlen(szQuestion) == 0 || strlen(szAnswer) == 0)
{
CC_SendMatched(id, CC_COLOR_TEAM, "!tYou !nmust type !gvalid !nquestion and answer in order to start the game!");
return;
}
copy(g_szQuestion, charsmax(g_szQuestion), szQuestion);
copy(g_szAnswer, charsmax(g_szAnswer), szAnswer);
copy(g_szUserAnswer[id], charsmax(g_szUserAnswer[]), "");
copy(g_szUserQuestion[id], charsmax(g_szUserQuestion[]), "");
CC_SendMatched(0, CC_COLOR_TEAM, "!t%n !nstarted the quest game! !tYou !nhave !g%d !nseconds to answer the question!", id, get_pcvar_num(gp_QuestHoldTime));
CC_SendMatched(0, CC_COLOR_TEAM, "!nQuestion: !g%s", g_szQuestion);
set_task(get_pcvar_float(gp_QuestHoldTime), "EndQuest", TASKID_QUEST);
}
public EndQuest(taskid)
{
new id = taskid - TASKID_QUEST;
static iReward;
iReward = random_num(g_iRewardMin, g_iRewardMax)
if (!is_user_connected(id))
{
CC_SendMatched(0, CC_COLOR_TEAM, "!tNone !nhas won the game. !gThe answer !nwas !t%s !gPrize !nwas: !t%d!gXP", g_szAnswer, iReward);
}
else
{
new szName[32];
get_user_name(id, szName, charsmax(szName));
crxranks_give_user_xp(id, iReward, .source = CRXRANKS_XPS_ADMIN);
CC_SendMatched(0, CC_COLOR_TEAM, "!t%s !nhas !gWON !nthe game! !gThe answer !nis !t%s! !gPrize: !t%d!gXP", szName, g_szAnswer, iReward);
}
copy(g_szAnswer, charsmax(g_szAnswer), "");
copy(g_szQuestion, charsmax(g_szQuestion), "");
remove_task(TASKID_QUEST);
}
bool:has_access(id)
return bool:(get_user_flags(id) & ADMIN_FLAG);
Върнете се в началото