Mam ten plugin:
Spoiler
#define PLUGINNAME "Automatic knife duel"#define VERSION "0.3"#define AUTHOR "JGHG"/*Copyleft 2005Plugin topic: http://www.amxmodx.org/forums/viewtopic.php?p=91239AUTOMATIC KNIFE DUEL====================Where I come from, if you cut the wall repeteadly with your knife it means you're challenging your last opponent to a knife duel. ;-)I decided to automate this process.If only you and another person on the opposite team remain in the round, you can hit a wall (or another object) with your knife, THREE TIMES in fast succession.By this action you challenge your opponent to a knife duel. The person you challenge gets a menu where he can accept/decline yourchallenge. The challenged person has 10 seconds to decide his mind, else the challenge is automatically declined, and the menu should be closed automatically.Should a knife duel start, it works out pretty much like a round of Knife Arena: you can only use the knife (and the C4!).As soon as the round ends the Knife Arena mode is turned off./JGHG//pobrano z cs-puchatek.plVERSIONS========050421 0.3 You must now slash with your knife three times in fast succession to challenge someone.050208 0.2 Fixed seconds display.Bots should now respond correctly and a little human like. They will mostly accept challenges. ;-)Small fixes here and there. :-)050208 0.1 First version - largely untested*/#include <amxmodx>#include <fakemeta>#include <fun>#include <ColorChat>new const prefix[] = "^04[^03 4 FuN ^x04]^01"#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 belownew g_allowedWeapons[ALLOWED_WEAPONS] = {CSW_KNIFE, CSW_C4}new g_MAXPLAYERSnew bool:g_challenging = falsenew bool:g_knifeArena = falsenew bool:g_noChallengingForAWhile = falsenew g_challengemenunew g_challengernew g_challengednew g_challenges[33]// Globals abovepublic 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_IGNOREDnew 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)continueif (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_IGNOREDif (++g_challenges[PIRATE] >= KNIFESLASHES) {Challenge(PIRATE, matchingOpponent)if (is_user_bot(matchingOpponent)) {new Float:val = float(DECIDESECONDS)if (val < 2.0)val = 2.0remove_task(TASKID_BOTTHINK)set_task(random_float(1.0, float(DECIDESECONDS) - 1.0), "BotDecides", TASKID_BOTTHINK)}g_challenges[PIRATE] = 0}elseset_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)returnif (random_num(0,9) > 0)Accept()else {DeclineMsg()}g_challenging = falseremove_task(TASKID_CHALLENGING)}Challenge(challenger, challenged) {g_challenger = challengerg_challenged = challengedg_challenging = truenew challenger_name[32], challenged_name[32]get_user_name(challenger, challenger_name, 31)get_user_name(challenged, challenged_name, 31)ColorChat(challenger, GREEN, "%s Wyzwales^x03 %s^x01 na pojedynek nozowy! Oczekiwanie na odpowiedz^x04 %d sekund...", prefix, challenged_name, DECIDESECONDS)new menu[1024], keys = MENU_KEY_1 | MENU_KEY_2format(menu, 1023, "\r%s\y wyzwal Cie na pojedynek nozowy!^n^nZgadzasz sie? Masz\r %d\y sekund na odpowiedz!^n^n\y1\w. Dawac go tutaj!^n\y2\w. Nie, boje sie :(", 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)ColorChat(0, GREEN, "%s^x03 %s^x01 nie odpowiedzial^x03 %s^x01 na jego wyzwanie...", prefix, challenged_name, challenger_name)CancelAll()}}public client_putinserver(id) {set_task(25.0, "Announcement", id)return PLUGIN_CONTINUE}public Announcement(id) {ColorChat(id, GREEN, "%s Kiedy jestes tylko Ty i Twoj przeciwnik, mozesz go wyzwac na pojedynek nozowy pocierajac nozem o sciane.", prefix)}public challenged_menu(id, key) {switch (key) {case MENUSELECT1: {// AcceptAccept()}case MENUSELECT2: {// DeclineDeclineMsg()}}g_challenging = falseremove_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)ColorChat(0, GREEN, "%s^x03 %s^x01 nie zgodzil sie na wyzwanie^x03 %s^x01 ...", prefix, 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)ColorChat(0, GREEN, "%s^x03 %s^x01 zgodzil sie na wyzwanie^x03 %s^x01!", prefix, challenged_name, challenger_name)g_knifeArena = truegive_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_CONTINUEnew 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 = trueset_task(4.0, "NoChallengingForAWhileToFalse")return PLUGIN_CONTINUE}public NoChallengingForAWhileToFalse() {g_noChallengingForAWhile = false}CancelAll() {if (g_challenging) {g_challenging = false// Close menu of challengedif (is_user_connected(g_challenged)) {new usermenu, userkeysget_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 DEBUGpublic challengefn(id, level, cid) {if (!cmd_access(id, level, cid, 3))return PLUGIN_HANDLEDnew 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 DEBUGpublic 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"/*"You are challenged"*/)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 DEBUGregister_clcmd("0challenge", "challengefn", ADMIN_CFG, "<challenger> <challenged> - start knife duel challenge")#endif // defined DEBUGnew Float:maptime = get_cvar_float("mp_timelimit")if (maptime == 0.0)maptime = 15.0new Float:anntime = 60.0 * 5.0 // 5 minutesif (maptime < 5.0)anntime = maptime / 3.0set_task(anntime, "Announcement", 0, "", 0, "b")}
na serwerze pb, kiedy nacisnę na klawiaturze: 1 czyli zmianę broni, to z noza lecą kulki a pod 3 normalnie, mam Paintball mod Realism. Proszę o pomoc