İstediğin gibi yaptım, dene bakalım. Satır 6'dan yonetici menüye girebilmek için gereken yetkiyi ayarlayabilirsin. Menü "say /modmenu" olarak açılır. Buyur;
Kod: Tümünü seç
#pragma semicolon 1
#include <amxmodx>
#include <reapi>
#define ADMIN_CSDM ADMIN_RCON // Oylama ayarlarını kullanabilmesi için gerekli yetki.
new const szUpperTag[] = "\rforum.csd\d -";
new const szUnderTag[] = "\yforum.csd\d -\w";
new const szChatTag[] = "^4forum.csd :";
enum (+= 1337)
{
TASK_STARTCOUNTDOWN = 1337,
TASK_VOTECOUNTDOWN,
TASK_APPLYMODSETTINGS,
TASK_TRYDISPLAY
}
new g_blVoteing[MAX_PLAYERS+1],
g_iVotes[2],
g_pointer[2],
g_iCountDownTimer,
g_iCountDownNum;
new bool:g_blMode[2],
bool:g_blNextVote;
enum _:CvarsEnum
{
cvCountDownTimer,
cvCountDownNum
};
new g_cvars[CvarsEnum];
public plugin_init()
{
register_plugin("CSDM Mod Voting", "0.1", "` BesTCore;");
register_clcmd("say /modmenu", "clcmd_modmenu");
set_task(5.0, "StartModVoting"); // Map açıldığında oylamanın başlama zamanı.
set_task(40.0, "AdvartiseMod", .flags = "b"); // Mod reklami.
RegisterHookChain(RG_CBasePlayer_TakeDamage, "RG_CBasePlayer_TakeDamage_Pre", .post = false);
bind_pcvar_num(create_cvar("OylamaSuresi", "30", _, "Oylama Kac Saniye Surecek ?"), g_cvars[cvCountDownTimer]);
bind_pcvar_num(create_cvar("OylamaBaslamaSuresi", "6", _, "Oylama Kac Saniye Icerisinde Basliyacak(Geri Sayim) ?"), g_cvars[cvCountDownNum]);
g_pointer[0] = get_cvar_pointer("mp_freeforall");
g_pointer[1] = get_cvar_pointer("mp_autoteambalance");
}
public AdvartiseMod()
{
client_print_color(0, 0, "%s ^3Suanda^4 %s^3 modu aktif, vuruslar^4 %s.", szChatTag, g_blMode[0] ? "FFA":"DM", g_blMode[1] ? "Sadece Kafadan":"Normal");
client_print_color(0, 0, "%s ^3Suanda^4 %s^3 modu aktif, vuruslar^4 %s.", szChatTag, g_blMode[0] ? "FFA":"DM", g_blMode[1] ? "Sadece Kafadan":"Normal");
}
// Mod authorized menu.
public clcmd_modmenu(const id)
{
if(~get_user_flags(id) & ADMIN_CSDM)
{
client_print_color(id, id, "%s ^3Bu menuye girmeye yetkin yok.", szChatTag);
return;
}
new bestm = menu_create(fmt("%s Yonetici Mod Menu", szUpperTag), "clcmd_modmenu_handler");
menu_additem(bestm, fmt("%s Oylama Baslat^n", szUnderTag));
menu_additem(bestm, fmt("%s 1. Modu Degistir \d[\r%s\d]", szUnderTag, g_blMode[0] ? "FFA Mod":"DM Mod"));
menu_additem(bestm, fmt("%s 2. Modu Degistir \d[\r%s\d]", szUnderTag, g_blMode[1] ? "HS Mod":"Normal Mod"));
menu_setprop(bestm, MPROP_EXITNAME, "\rCikis");
menu_display(id, bestm);
}
public clcmd_modmenu_handler(const id, const iMenu, const iItem)
{
switch(iItem)
{
case 0:
{
if(task_exists(TASK_STARTCOUNTDOWN) || task_exists(TASK_VOTECOUNTDOWN))
{
client_print_color(id, id, "%s ^3Suanda oylama devam ediyor, oylama baslatamazsiniz.", szChatTag);
return PLUGIN_HANDLED;
}
set_task(1.0, "StartModVoting");
client_print_color(0, 0, "%s ^1%n ^3adli admin^4 Mod Oylamasi^3 baslatti.", szChatTag, id);
}
case 1:
{
if(g_blMode[0])
{
g_blMode[0] = false;
set_pcvar_num(g_pointer[0], 0);
set_pcvar_num(g_pointer[1], 1);
client_print_color(0, 0, "%s ^1%n ^3adli admin oyun modunu^4 DM Mod^3 olarak degistirdi.", szChatTag, id);
}
else
{
g_blMode[0] = true;
set_pcvar_num(g_pointer[0], 1);
client_print_color(0, 0, "%s ^1%n ^3adli admin oyun modunu^4 FFA Mod^3 olarak degistirdi.", szChatTag, id);
}
clcmd_modmenu(id);
}
case 2:
{
g_blMode[1] = g_blMode[1] ? false:true;
client_print_color(0, 0, "%s ^1%n ^3adli admin 2.oyun modunu degistirdi.", szChatTag, id);
clcmd_modmenu(id);
}
}
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
// Voting start meter.
public StartModVoting(Taskid)
{
if(!(task_exists(TASK_STARTCOUNTDOWN)))
{
g_iCountDownNum = g_cvars[cvCountDownNum];
}
g_iCountDownNum--;
if(g_iCountDownNum >= 0)
{
if(g_blNextVote)
{
client_print_color(0, 0, "%s^3 2. CSDM Mod oylamasinin baslamasina^4 %i Saniye^3 kaldi.", szChatTag, g_iCountDownNum);
}
else
{
client_print_color(0, 0, "%s ^3CSDM Mod oylamasinin baslamasina^4 %i Saniye^3 kaldi.", szChatTag, g_iCountDownNum);
}
set_task(1.0, "StartModVoting", TASK_STARTCOUNTDOWN, .flags = "b");
}
else
{
TaskControl(TASK_STARTCOUNTDOWN);
g_iVotes[0] = g_iVotes[1] = 0;
g_iCountDownTimer = g_cvars[cvCountDownTimer];
set_task(1.0, "VoteCountDown", TASK_VOTECOUNTDOWN, .flags = "b");
MenuDisplay();
}
}
// Mod vote menu.
public MenuDisplay()
{
new bestm = menu_create(fmt("%s CSDM Oylama Menusu^n\dOylama Bitmesine Kalan\r %i\d Saniye", szUpperTag, g_iCountDownTimer), "MenuDisplay_handler");
if(g_blNextVote)
{
menu_additem(bestm, fmt("%s Normal Mod \d[\r%i \yOY\d]", szUnderTag, g_iVotes[0]));
menu_additem(bestm, fmt("%s HS Mod \d[\r%i \yOY\d]^n^n\dGecerli Oy Sayisi:\r %i Oy", szUnderTag, g_iVotes[1], g_iVotes[0] + g_iVotes[1]));
}
else
{
menu_additem(bestm, fmt("%s DM Mod \d[\r%i \yOY\d]", szUnderTag, g_iVotes[0]));
menu_additem(bestm, fmt("%s FFA Mod \d[\r%i \yOY\d]^n^n\dGecerli Oy Sayisi:\r %i Oy", szUnderTag, g_iVotes[1], g_iVotes[0] + g_iVotes[1]));
}
menu_setprop(bestm, MPROP_EXIT, MEXIT_NEVER);
for(new i = 1; i <= MaxClients; i++)
{
if(!(is_user_connected(i)))
{
continue;
}
menu_display(i, bestm);
}
if(task_exists(TASK_VOTECOUNTDOWN))
{
set_task(0.5, "MenuDisplay", TASK_TRYDISPLAY); // Menuden cikarsa tekrar göstert.
}
}
public MenuDisplay_handler(const id, const iMenu, const iItem)
{
switch(iItem)
{
case 0:
{
if(g_blVoteing[id])
{
client_print_color(id, id, "%s ^3Sen zaten oy kullandin.", szChatTag);
return;
}
if(g_blNextVote)
{
client_print_color(0, 0, "%s ^1%n ^3adli oyuncu^4 Normal Mod^3'a oy verdi.", szChatTag, id);
}
else
{
client_print_color(0, 0, "%s ^1%n ^3adli oyuncu^4 DM Mod^3'a oy verdi.", szChatTag, id);
}
g_iVotes[0]++;
g_blVoteing[id] = true;
}
case 1:
{
if(g_blVoteing[id])
{
client_print_color(id, id, "%s ^3Sen zaten oy kullandin.", szChatTag);
return;
}
if(g_blNextVote)
{
client_print_color(0, 0, "%s ^1%n ^3adli oyuncu^4 HS Mod^3'a oy verdi.", szChatTag, id);
}
else
{
client_print_color(0, 0, "%s ^1%n ^3adli oyuncu^4 FFA Mod^3'a oy verdi.", szChatTag, id);
}
g_iVotes[1]++;
g_blVoteing[id] = true;
}
}
}
// Explain Decision.
public ExplainDecision()
{
if(g_blNextVote)
{
if(g_iVotes[0] > g_iVotes[1]) ExplainDecisionText("Normal Mod"), g_blMode[1] = false;
else if(g_iVotes[1] > g_iVotes[0]) ExplainDecisionText("HS Mod"), g_blMode[1] = true;
else ExplainDecisionText("Normal Mod"), g_blMode[1] = false;
client_print_color(0, 0, "%s ^3Oylama bitti, mod ayarlari uygulanip restart atiliyor.", szChatTag);
set_pcvar_num(get_cvar_pointer("sv_restart"), 5);
set_task(5.0, "ApplyModSettings", TASK_APPLYMODSETTINGS);
}
else
{
if(g_iVotes[0] > g_iVotes[1]) ExplainDecisionText("DM Mod"), g_blMode[0] = false;
else if(g_iVotes[1] > g_iVotes[0]) ExplainDecisionText("FFA Mod"), g_blMode[0] = true;
else ExplainDecisionText("DM Mod"), g_blMode[0] = false;
g_blNextVote = true;
set_task(3.0, "StartModVoting");
}
g_iVotes[0] = g_iVotes[1] = 0;
for(new i = 1; i <= MaxClients; i++)
{
if(!(is_user_connected(i)))
{
continue;
}
g_blVoteing[i] = false;
show_menu(i, 0, "");
}
}
ExplainDecisionText(const szText[])
{
client_print_color(0, 0, "%s ^3Oylamadan^4 %s^3 cikti.", szChatTag, szText);
client_print_color(0, 0, "%s ^3Oylamadan^4 %s^3 cikti.", szChatTag, szText);
}
// Mod activated.
public ApplyModSettings(Taskid)
{
if(g_blMode[0])
{
set_pcvar_num(g_pointer[0], 1);
}
else
{
set_pcvar_num(g_pointer[0], 0);
set_pcvar_num(g_pointer[1], 1);
}
TaskControl(TASK_APPLYMODSETTINGS);
g_blNextVote = false;
}
// Re hooks.
public RG_CBasePlayer_TakeDamage_Pre(const pevVictim, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{
if(g_blMode[1] == false || !(is_user_alive(pevAttacker) || rg_is_player_can_takedamage(pevVictim, pevAttacker)) || pevVictim == pevAttacker)
{
return;
}
if(get_member(pevVictim, m_LastHitGroup) != HIT_HEAD)
{
SetHookChainArg(4, ATYPE_FLOAT, 0.0); // Kafadan vurmazsa hasarı 0.0'a çek.
}
}
// Countdown time
public VoteCountDown(Taskid)
{
if(g_iCountDownTimer > 0)
{
g_iCountDownTimer--;
}
else
{
TaskControl(TASK_VOTECOUNTDOWN);
TaskControl(TASK_TRYDISPLAY);
ExplainDecision();
}
}
// Task control
TaskControl(const Taskid)
{
if(task_exists(Taskid))
{
remove_task(Taskid);
}
}
// Blocked
public client_putinserver(id)
{
g_blVoteing[id] = false; // Bağlandığında ayarı sıfırla.
}