Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Gargamel - zdjęcie

Gargamel

Rejestracja: 17.01.2011
Aktualnie: Nieaktywny
Poza forum Ostatnio: 14.06.2014 20:53
-----

Moje tematy

Problem z timerem

13.06.2014 19:11

Witam.
Dzisiaj zacząłem pisać swój pierwszy plugin do CS'a.
Wraz z poradnikami, i z dawniejszymi doświadczeniami z Pawn (pisałem skrypty do gry SAMP), napisałem coś takiego:
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "KickBots"
#define VERSION "0.1"
#define AUTHOR "Pan_Gargamel"

new g_kickmenu; // tworzymy zmienną globalną, uchwyt dla menu
new g_kickmenu_tak;
new g_kickmenu_nie;

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_clcmd("say /kickbots", "kickmenu");
}

public plugin_cfg() { // tworzymy menu, np. w tej funkcji, bo wykonuje się ona tylko raz na mapę
    g_kickmenu = menu_create("Jestes za wyrzuceniem botow?", "kickmenuhandle");
    menu_additem(g_kickmenu, "Tak"); // item = 0
    menu_additem(g_kickmenu, "Nie"); // item = 1

    menu_setprop(g_kickmenu, MPROP_EXITNAME, "Wyjscie");
    
}

public kickmenu(id) {
    for(new i=0; i<32; i++)
    {
        if(!is_user_alive(i)) continue;
    
        menu_display(i, g_kickmenu)
        client_print(i, print_chat, "Gracz %id% rozpoczal glosowanie o wyrzucenie botow z serwera.");
        CreateTimer(30.0, kickmenu_wyniki);
    }
    
    return PLUGIN_HANDLED;
}

public kickmenuhandle(id, menu, item) { // funkcja posiada trzy parametry, id gracza, uchwyt menu oraz klawisz/item/opcję, która została wybrana
    if(item == MENU_EXIT) {
        return PLUGIN_HANDLED; // zamykamy menu, generalnie nie trzeba dodawać tutaj tego warunku, ale z przyzwyczajenia ja go tutaj dodaję, zresztą czasami nawet lepiej to robić na samej górze funkcji
    }

    switch(item) { // używamy switcha, pamiętamy, że wartość klawisza/itemu/opcji zaczyna się od 0
        case 0: {
            client_print(id, print_chat, "Zaglosowales za wyrzuceniem botow.");
            g_kickmenu_tak = g_kickmenu_tak + 1
        }
        case 1: {
            client_print(id, print_chat, "Zaglosowales przeciwko wyrzuceniu botow.");
            g_kickmenu_nie = g_kickmenu_nie + 1
        }
    }
public Action:kickmenu_wyniki(Handle:timer)
    {
        if(g_kickmenu_tak > g_kickmenu_nie || g_kickmenu_nie == g_kickmenu_tak)
        {
            amx_exec @SERVER "epb_removebots"
            for(new i=0; i<32; i++)
            {
                if(!is_user_alive(i)) continue;
                client_print(i, print_chat, "[Glosowanie] Boty zostaly wyrzucone z serwera!");
            }
        }
    }
    return PLUGIN_HANDLED;
}
Skrypt ma na celu robienie głosowania dla wszystkich graczy po wpisaniu /kickbots. Każdemu graczowi powinno się wyświetlić pytanie czy boty mają być wyrzucone, a jeśli po trzydziestu sekundach od startu głosowania suma głosów na tak będzie większa niż suma głosów na nie, boty zostaną wyrzucone.
 
Niektóre błędy udało mi się naprawić, ale kilku nie udało mi się rozwiązać:
bco7o8.jpg