Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define PLUGINNAME "Automatic knife duel"
- #define VERSION "0.3"
- #define AUTHOR "JGHG"
- #include <amxmodx>
- #include <fakemeta>
- #include <fun>
- #define DEBUG
- #if defined DEBUG
- #include <amxmisc>
- #endif // defined DEBUG
- #define MENUSELECT1 0
- #define MENUSELECT2 1
- #define TASKID_CHALLENGING 2348923
- #define TASKID_BOTTHINK 3242321
- #define DECIDESECONDS 10
- #define ALLOWED_WEAPONS 2
- #define KNIFESLASHES 3 // the nr of slashes within a short amount of time until a challenge starts...
- // Globals below
- new g_allowedWeapons[ALLOWED_WEAPONS] = {CSW_KNIFE, CSW_C4}
- new g_MAXPLAYERS
- new bool:g_challenging = false
- new bool:g_knifeArena = false
- new bool:g_noChallengingForAWhile = false
- new g_challengemenu
- new g_challenger
- new g_challenged
- new g_challenges[33]
- // Globals above
- public plugin_modules()
- {
- require_module("fakemeta")
- require_module("fun")
- }
- public forward_emitsound(const PIRATE, const Onceuponatimetherewasaverysmall, noise[], const Float:turtlewhoateabiggerturtleand, const Float:afterthatthesmallturtlegot, const veryveryverybig, const theend) {
- if (g_noChallengingForAWhile || g_knifeArena || g_challenging || PIRATE < 1 || PIRATE > g_MAXPLAYERS || !is_user_alive(PIRATE) || !equal(noise, "weapons/knife_hitwall1.wav"))
- return FMRES_IGNORED
- new team = get_user_team(PIRATE), otherteam = 0, matchingOpponent = 0
- // Make sure exactly one person on each team is alive.
- for (new i = 1; i <= g_MAXPLAYERS; i++) {
- if (!is_user_connected(i) || !is_user_alive(i) || PIRATE == i)
- continue
- if (get_user_team(i) == team) {
- // No fun.
- return FMRES_IGNORED
- }
- else {
- if (++otherteam > 1) {
- // No fun.
- return FMRES_IGNORED
- }
- matchingOpponent = i
- }
- }
- if (matchingOpponent == 0)
- return FMRES_IGNORED
- if (++g_challenges[PIRATE] >= KNIFESLASHES) {
- Challenge(PIRATE, matchingOpponent)
- if (is_user_bot(matchingOpponent)) {
- new Float:val = float(DECIDESECONDS)
- if (val < 2.0)
- val = 2.0
- remove_task(TASKID_BOTTHINK)
- set_task(random_float(1.0, float(DECIDESECONDS) - 1.0), "BotDecides", TASKID_BOTTHINK)
- }
- g_challenges[PIRATE] = 0
- }
- else
- set_task(1.0, "decreaseChallenges", PIRATE)
- //client_print(PIRATE, print_chat, "Your challenges: %d", g_challenges[PIRATE])
- return FMRES_IGNORED
- }
- public decreaseChallenges(id) {
- if (--g_challenges[id] < 0)
- g_challenges[id] = 0
- }
- public BotDecides() {
- if (!g_challenging)
- return
- if (random_num(0,9) > 0)
- Accept()
- else {
- DeclineMsg()
- }
- g_challenging = false
- remove_task(TASKID_CHALLENGING)
- }
- Challenge(challenger, challenged) {
- g_challenger = challenger
- g_challenged = challenged
- g_challenging = true
- new challenger_name[32], challenged_name[32]
- get_user_name(challenger, challenger_name, 31)
- get_user_name(challenged, challenged_name, 31)
- client_print(challenger, print_chat, "L-ai provocat pe %s la un duel.! Asteapta raspunsul in %d secunde...", challenged_name, DECIDESECONDS)
- new menu[1024], keys = MENU_KEY_1 | MENU_KEY_2
- format(menu, 1023, "Ai fost provocat la duel de %s !^n^nCe vei face?Ai %d secunde ca sa rapunzi!^n^n\y1\w. Accept provocarea!^n\y2\w. Nu accept provocarea!", challenger_name, DECIDESECONDS)
- show_menu(challenged, keys, menu, DECIDESECONDS, "JGHG's automatic knife duel")
- set_task(float(DECIDESECONDS), "timed_toolate", TASKID_CHALLENGING)
- }
- public timed_toolate() {
- if (g_challenging) {
- new challenger_name[32], challenged_name[32]
- get_user_name(g_challenger, challenger_name, 31)
- get_user_name(g_challenged, challenged_name, 31)
- client_print(0, print_chat, "%s n-a raspuns lui %s's pentru duel prea repede...", challenged_name, challenger_name)
- CancelAll()
- }
- }
- public client_putinserver(id) {
- set_task(25.0, "Announcement", id)
- return PLUGIN_CONTINUE
- }
- public Announcement(id) {
- client_print(id, print_chat, "Cand tu si un inamic ati ramas singuri,il poti provoca la un duel de lame lovind cu lama de 3 ori in perete.")
- }
- public challenged_menu(id, key) {
- switch (key) {
- case MENUSELECT1: {
- // Accept
- Accept()
- }
- case MENUSELECT2: {
- // Decline
- DeclineMsg()
- }
- }
- g_challenging = false
- remove_task(TASKID_CHALLENGING)
- return PLUGIN_HANDLED
- }
- DeclineMsg() {
- new challenger_name[32], challenged_name[32]
- get_user_name(g_challenger, challenger_name, 31)
- get_user_name(g_challenged, challenged_name, 31)
- client_print(0, print_chat, "%s a refuzat %s's acest duel...", challenged_name, challenger_name)
- }
- Accept() {
- new challenger_name[32], challenged_name[32]
- get_user_name(g_challenger, challenger_name, 31)
- get_user_name(g_challenged, challenged_name, 31)
- client_print(0, print_chat, "%s a acceptat %s's provocarea la duel!", challenged_name, challenger_name)
- g_knifeArena = true
- give_item(g_challenger, "weapon_knife")
- give_item(g_challenged, "weapon_knife")
- engclient_cmd(g_challenger, "weapon_knife")
- engclient_cmd(g_challenged, "weapon_knife")
- }
- public event_holdwpn(id) {
- if (!g_knifeArena || !is_user_alive(id))
- return PLUGIN_CONTINUE
- new weaponType = read_data(2)
- for (new i = 0; i < ALLOWED_WEAPONS; i++) {
- if (weaponType == g_allowedWeapons[i])
- return PLUGIN_CONTINUE
- }
- engclient_cmd(id, "weapon_knife")
- return PLUGIN_CONTINUE
- }
- public event_roundend() {
- if (g_challenging || g_knifeArena)
- CancelAll()
- g_noChallengingForAWhile = true
- set_task(4.0, "NoChallengingForAWhileToFalse")
- return PLUGIN_CONTINUE
- }
- public NoChallengingForAWhileToFalse() {
- g_noChallengingForAWhile = false
- }
- CancelAll() {
- if (g_challenging) {
- g_challenging = false
- // Close menu of challenged
- if (is_user_connected(g_challenged)) {
- new usermenu, userkeys
- get_user_menu(g_challenged, usermenu, userkeys) // get user menu
- // Hmm this ain't working :-/
- if (usermenu == g_challengemenu) // Close it!
- show_menu(g_challenged, 0, "blabla") // show empty menu
- }
- }
- if (g_knifeArena) {
- g_knifeArena = false
- }
- remove_task(TASKID_BOTTHINK)
- remove_task(TASKID_CHALLENGING)
- }
- public event_death() {
- if (g_challenging || g_knifeArena)
- CancelAll()
- return PLUGIN_CONTINUE
- }
- #if defined DEBUG
- public challengefn(id, level, cid) {
- if (!cmd_access(id, level, cid, 3))
- return PLUGIN_HANDLED
- new challenger[64], challenged[64]
- read_argv(1, challenger, 63)
- read_argv(2, challenged, 63)
- console_print(id, "challenger: %s, challenged: %s", challenger, challenged)
- new r = str_to_num(challenger)
- new d = str_to_num(challenged)
- Challenge(r, d)
- if (is_user_bot(d))
- Accept()
- return PLUGIN_HANDLED
- }
- #endif // defined DEBUG
- public plugin_init() {
- register_plugin(PLUGINNAME, VERSION, AUTHOR)
- register_event("CurWeapon", "event_holdwpn", "be", "1=1")
- register_forward(FM_EmitSound, "forward_emitsound")
- g_MAXPLAYERS = get_maxplayers()
- g_challengemenu = register_menuid("JGHG's automatic knife duel"/*"Ai fost provocat!"*/)
- register_menucmd(g_challengemenu, MENU_KEY_1 | MENU_KEY_2, "challenged_menu")
- register_event("DeathMsg", "event_death", "a")
- register_event("SendAudio", "event_roundend", "a", "2&%!MRAD_terwin")
- register_event("SendAudio", "event_roundend", "a", "2&%!MRAD_ctwin")
- register_event("SendAudio", "event_roundend", "a", "2&%!MRAD_rounddraw")
- #if defined DEBUG
- register_clcmd("0challenge", "challengefn", ADMIN_CFG, "<challenger> <challenged> - start knife duel challenge")
- #endif // defined DEBUG
- new Float:maptime = get_cvar_float("mp_timelimit")
- if (maptime == 0.0)
- maptime = 15.0
- new Float:anntime = 60.0 * 5.0 // 5 minutes
- if (maptime < 5.0)
- anntime = maptime / 3.0
- set_task(anntime, "Announcement", 0, "", 0, "b")
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement