Siema
Może ktoś przerobić ten plugin tak, aby była możliwość korzystania z quiz'u co 5 minut, a za poprawną odpowiedź dodawałby tylko level, exp, fragi i kasę?
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta_util>
#include <ColorChat>
//#define CODMOD
#if defined CODMOD
#include <codmod>
#endif
new Array:g_aQuizQuest,
Array:g_aQuizGoodAns,
Array:g_aQuizBadAns1,
Array:g_aQuizBadAns2,
Array:g_aQuizBadAns3,
Array:g_aQuizAnsNum
;
new g_iUserQuizMode[33],
g_iUserQuizID[33]
;
new Float:g_fUserNextQuiz[33] = 0.0;
new szWeaponName[][] =
{
"weapon_glock18", "weapon_usp", "weapon_p228", "weapon_deagle", "weapon_fiveseven",
"weapon_elite", "weapon_m3", "weapon_xm1014", "weapon_mp5navy", "weapon_tmp",
"weapon_mac10", "weapon_p90", "weapon_ump45", "weapon_ak47", "weapon_awp",
"weapon_m4a1", "weapon_famas", "weapon_galil", "weapon_g3sg1", "weapon_m249",
"weapon_sg552", "weapon_sg550", "weapon_aug", "weapon_scout", "weapon_hegrenade",
"weapon_smokegrenade", "weapon_flashbang"
};
new g_cvarMoneyForHint, g_cvarTimeToNextQuiz;
public plugin_init() {
register_plugin("Quiz", "0.2", "MarWit")
register_clcmd("say /quiz", "cmdQuiz")
register_concmd("quiz_debug", "QuizsDump");
register_clcmd("WpiszOdpowiedz", "ManualAnsewer")
g_cvarMoneyForHint = register_cvar("quiz_moneyforhint", "3600")
g_cvarTimeToNextQuiz = register_cvar("quiz_timetonextquiz", "8")
g_aQuizQuest = ArrayCreate(128, 1)
g_aQuizGoodAns = ArrayCreate(64, 1)
g_aQuizBadAns1 = ArrayCreate(64, 1)
g_aQuizBadAns2 = ArrayCreate(64, 1)
g_aQuizBadAns3 = ArrayCreate(64, 1)
g_aQuizAnsNum = ArrayCreate(1, 1)
LoadConfigFile()
}
public LoadConfigFile()
{
new szFile[128]
get_configsdir(szFile, charsmax(szFile))
format(szFile, charsmax(szFile), "%s/quiz.ini", szFile)
new iFile = fopen(szFile, "r")
if(!iFile)
{
set_fail_state("[Quiz] Nie ma pliku quiz.ini!")
return;
}
new szBuffer[384], szQuizQuest[128], szQuizGoodAns[64], szQuizBadAns1[64], szQuizBadAns2[64], szQuizBadAns3[64];
new iAnsNum = 1;
while(!feof(iFile))
{
fgets(iFile, szBuffer, charsmax(szBuffer))
trim(szBuffer)
parse(szBuffer, szQuizQuest, charsmax(szQuizQuest), szQuizGoodAns, charsmax(szQuizGoodAns), szQuizBadAns1, charsmax(szQuizBadAns1), szQuizBadAns2, charsmax(szQuizBadAns2), szQuizBadAns3, charsmax(szQuizBadAns3))
ArrayPushString(g_aQuizQuest, szQuizQuest)
ArrayPushString(g_aQuizGoodAns, szQuizGoodAns)
if(strlen(szQuizBadAns1))
{
ArrayPushString(g_aQuizBadAns1, szQuizBadAns1)
iAnsNum++;
} else {
ArrayPushString(g_aQuizBadAns1, "")
}
if(strlen(szQuizBadAns2))
{
ArrayPushString(g_aQuizBadAns2, szQuizBadAns2)
iAnsNum++;
} else {
ArrayPushString(g_aQuizBadAns2, "")
}
if(strlen(szQuizBadAns3))
{
ArrayPushString(g_aQuizBadAns3, szQuizBadAns3)
iAnsNum++;
} else {
ArrayPushString(g_aQuizBadAns3, "")
}
ArrayPushCell(g_aQuizAnsNum, iAnsNum)
iAnsNum = 1;
szQuizBadAns1 = ""
szQuizBadAns2 = ""
szQuizBadAns3 = ""
}
}
public cmdQuiz(id)
{
if(get_gametime() <= g_fUserNextQuiz[id]){
ColorChat(id, RED, "[Quiz]^x01 Nie mozesz teraz uruchomic quiz'u. Sproboj pozniej :)")
return PLUGIN_HANDLED
}
if(!is_user_alive(id))
return PLUGIN_HANDLED
ViewQuiz(id, 0)
return PLUGIN_HANDLED
}
public ViewQuiz(id, iMode)
{
new szBuffer[128]
new iRandomQuiz = (g_iUserQuizID[id] == -1) ? random_num(0, ArraySize(g_aQuizQuest) - 1) : g_iUserQuizID[id]
ArrayGetString(g_aQuizQuest, iRandomQuiz, szBuffer, charsmax(szBuffer))
new iMenu = menu_create(szBuffer, "ViewQuiz_Handle")
new iMenuCallBack = menu_makecallback("ViewQuiz_CallBack")
if(!iMode)
{
menu_additem(iMenu, "Wpisz Odpowiedz")
menu_additem(iMenu, "Podpowiedz", "", 0, iMenuCallBack)
menu_additem(iMenu, "Odpowiedz")
g_fUserNextQuiz[id] = get_gametime() + float(get_pcvar_num(g_cvarTimeToNextQuiz) * 60)
} else {
if(cs_get_user_money(id) < get_pcvar_num(g_cvarMoneyForHint) || ArrayGetCell(g_aQuizAnsNum, iRandomQuiz) == 1)
return PLUGIN_CONTINUE
cs_set_user_money(id, cs_get_user_money(id)-get_pcvar_num(g_cvarMoneyForHint))
new iAnsNum, iRandAns, iAns[4];
new szMenuInfo[5];
new bool:bReload = false;
while(iAnsNum < ArrayGetCell(g_aQuizAnsNum, iRandomQuiz))
{
iRandAns = random_num(1, ArrayGetCell(g_aQuizAnsNum, iRandomQuiz))
for(new i=0; i<3; i++)
{
if(iAns[i] == iRandAns) {
bReload = true
break;
}
}
if(bReload) {
bReload = false;
continue;
}
switch(iRandAns)
{
case 1: { ArrayGetString(g_aQuizGoodAns, iRandomQuiz, szBuffer, charsmax(szBuffer)); format(szMenuInfo, 4, "good"); }
case 2: { ArrayGetString(g_aQuizBadAns1, iRandomQuiz, szBuffer, charsmax(szBuffer)); format(szMenuInfo, 4, "bad"); }
case 3: { ArrayGetString(g_aQuizBadAns2, iRandomQuiz, szBuffer, charsmax(szBuffer)); format(szMenuInfo, 4, "bad"); }
case 4: { ArrayGetString(g_aQuizBadAns3, iRandomQuiz, szBuffer, charsmax(szBuffer)); format(szMenuInfo, 4, "bad"); }
}
iAns[iAnsNum] = iRandAns;
iAnsNum++;
menu_additem(iMenu, szBuffer, szMenuInfo)
}
}
g_iUserQuizID[id] = iRandomQuiz;
g_iUserQuizMode[id] = iMode
menu_display(id, iMenu)
return PLUGIN_CONTINUE
}
public ViewQuiz_Handle(id, iMenu, iItem)
{
if(!g_iUserQuizMode[id])
{
new szBuffer[64];
switch(iItem)
{
case 0: { client_cmd(id, "messagemode WpiszOdpowiedz"); }
case 1: { ViewQuiz(id, 1); }
case 2: { ArrayGetString(g_aQuizGoodAns, g_iUserQuizID[id], szBuffer, charsmax(szBuffer)); ColorChat(id, RED, "[Quiz]^x01 Prawidlowa odpowiedz to:^x04 %s", szBuffer), g_iUserQuizMode[id] = -1, g_iUserQuizID[id] = -1; }
}
menu_destroy(iMenu)
} else {
new szName[64], szInfo[5], iAccess, iCallback;
menu_item_getinfo(iMenu, iItem, iAccess, szInfo, charsmax(szInfo), szName, charsmax(szName), iCallback)
if(equal(szInfo, "good"))
{
GiveAward(id)
} else {
ColorChat(id, RED, "[Quiz]^x01 Niestety, twoja odpowiedz jest bledna:(")
}
g_iUserQuizMode[id] = -1
g_iUserQuizID[id] = -1
menu_destroy(iMenu)
}
}
public ViewQuiz_CallBack(id, iMenu, iItem)
{
if(ArrayGetCell(g_aQuizAnsNum, g_iUserQuizID[id]) < 2 || cs_get_user_money(id) < get_pcvar_num(g_cvarMoneyForHint))
return ITEM_DISABLED
return ITEM_ENABLED
}
public ManualAnsewer(id)
{
new szText[64], szGoodAns[64];
read_argv(1, szText, charsmax(szText))
remove_quotes(szText)
ArrayGetString(g_aQuizGoodAns, g_iUserQuizID[id], szGoodAns, charsmax(szGoodAns))
if(equali(szText, szGoodAns))
{
GiveAward(id)
} else {
ColorChat(id, RED, "[Quiz]^x01 Niestety, twoja odpowiedz jest bledna:(")
}
g_iUserQuizMode[id] = -1
g_iUserQuizID[id] = -1;
return PLUGIN_HANDLED
}
public GiveAward(id)
{
#if defined CODMOD
new iRandAward = random_num(0, 4)
#else
new iRandAward = random_num(2, 4)
#endif
switch(iRandAward)
{
#if defined CODMOD
case 0: {
iRandAward = random_num(100, 2500)
cod_set_user_xp(id, cod_get_user_xp(id)+iRandAward)
ColorChat(id, RED, "[Quiz]^x01 Za poprawna odpowiedz wygrales^x04 +%d^x01 expa!", iRandAward)
}
case 1: {
iRandAward = random_num(1, 5)
cod_set_user_xp(id, cod_get_level_xp(cod_get_user_level(id)+iRandAward))
ColorChat(id, RED, "[Quiz]^x01 Za poprawna odpowiedz wygrales^x04 +%d^x01 lvl!", iRandAward)
}
#endif
case 2: {
iRandAward = random_num(100, 16000)
if(cs_get_user_money(id)+iRandAward > 16000)
{
cs_set_user_money(id, 16000)
ColorChat(id, RED, "[Quiz]^x01 Za poprawna odpowiedz wygrales^x04 16000^x01 $!")
} else {
cs_set_user_money(id, cs_get_user_money(id)+iRandAward)
ColorChat(id, RED, "[Quiz]^x01 Za poprawna odpowiedz wygrales^x04 +%d^x01 $!", iRandAward)
}
}
case 3: {
iRandAward = random_num(1, 8)
set_pev(id, pev_frags, float(pev(id, pev_frags)+iRandAward))
message_begin(MSG_ALL, get_user_msgid("ScoreInfo"));
write_byte(id);
write_short(pev(id, pev_frags));
write_short(get_user_deaths(id));
write_short(0);
write_short(pev(id, pev_team));
message_end();
ColorChat(id, RED, "[Quiz]^x01 Za poprawna odpowiedz wygrales^x04 +%d^x01 fragow!", iRandAward)
}
case 4: {
iRandAward = random_num(0, sizeof(szWeaponName)-1)
#if defined CODMOD
cod_give_weapon(id, get_weaponid(szWeaponName[iRandAward]))
#else
fm_give_item(id, szWeaponName[iRandAward])
#endif
ColorChat(id, RED, "[Quiz]^x01 Za poprawna odpowiedz wygrales^x04 dodatkowa bron^x01!")
}
}
return PLUGIN_HANDLED
}
public QuizsDump(id)
{
new szBuffer[128]
for(new i=0; i < ArraySize(g_aQuizQuest); i++)
{
log_amx("------------%d------------", i)
ArrayGetString(g_aQuizQuest, i, szBuffer, 127)
log_amx(szBuffer)
ArrayGetString(g_aQuizGoodAns, i, szBuffer, 127)
log_amx(szBuffer)
ArrayGetString(g_aQuizBadAns1, i, szBuffer, 127)
log_amx(szBuffer)
ArrayGetString(g_aQuizBadAns2, i, szBuffer, 127)
log_amx(szBuffer)
ArrayGetString(g_aQuizBadAns3, i, szBuffer, 127)
log_amx(szBuffer)
log_amx("%d", ArrayGetCell(g_aQuizAnsNum, i))
log_amx("--------------------------")
}
}


Dodatki SourceMod



Temat jest zamknięty









