#include <amxmodx> #include <colorchat> #include <csgo> #define MIN_VALUE 50 // minimalna cena w loterii #define MAX_VALUE 250 // maksymalna cena w loterii new pula_gracza[33]; new maxplayers, nextlosowanie, maxpula; public plugin_init() { register_plugin("Losowanie", "1.0", "Linux`"); register_clcmd("cena_puli", "LosPula_Wystawienie"); register_clcmd("say /jackpot", "LosMenu"); register_clcmd("say_team /jackpot", "LosMenu"); register_clcmd("say /pula", "PulaInfo"); register_clcmd("say_team /pula", "PulaInfo"); maxplayers = get_maxplayers(); nextlosowanie = -1; maxpula = 0; } public client_authorized(id) { pula_gracza[id] = 0; } public client_disconnect(id) { if(pula_gracza[id]) { maxpula -= pula_gracza[id]; pula_gracza[id] = 0; } } public LosMenu(id) { new opis[65]; if(nextlosowanie >= 0) format(opis, charsmax(opis), "Pula Nagrod: %i Monet\r (Koniec puli za %i minut)", maxpula, nextlosowanie); else format(opis, charsmax(opis), "Pula Nagrod: %i Monet\r (Nikt nie gra, badz pierwszy!)", maxpula); new menu = menu_create(opis, "LosMenu_Handler"); menu_additem(menu, "Dolacz do puli"); menu_additem(menu, "Wyswietl graczy w puli"); menu_display(id, menu); return PLUGIN_CONTINUE; } public LosMenu_Handler(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_CONTINUE; } switch(item) { case 0: { client_print(id, print_center, "Podaj Cene"); client_cmd(id, "messagemode cena_puli"); } case 1: { if(nextlosowanie >= 0) { new pula; new name[32], opis[65]; new menu = menu_create("Lista graczy bioracych udzial w losowaniu:", "LosMenu_Handler2"); for(new i = 1; i <= maxplayers; i ++) { if(!is_user_connected(i)) continue; pula = pula_gracza[i]; if(!pula) continue; get_user_name(i, name, charsmax(name)); format(opis, charsmax(opis), "%s (%i Monet | Szansa na Win: %0.1f%%)", name, pula, float((pula*100)/maxpula)); menu_additem(menu, opis); } menu_display(id, menu); } else client_print(id, print_chat, "[jackpot] Aktualnie nikt nie bierze udzialu w losowaniu, badz pierwszy!"); } } return PLUGIN_CONTINUE; } public LosMenu_Handler2(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_CONTINUE; } LosMenu(id); return PLUGIN_CONTINUE; } public LosPula_Wystawienie(id) { if(pula_gracza[id]) { client_print(id, print_chat, "[jackpot] Aktualnie bierzesz juz udzial w losowaniu. Musisz zaczekac na jego koniec!"); return PLUGIN_CONTINUE; } new arg[8]; read_argv(1, arg, charsmax(arg)); new cena = str_to_num(arg); new kasa = csgo_get_user_coin(id); if(kasa < MIN_VALUE) { LosMenu(id); client_print(id, print_chat, "[jackpot] Niepoprawna wartosc (MIN: %i, MAX. %i)", MIN_VALUE, (kasa > MAX_VALUE)? MAX_VALUE: kasa); return PLUGIN_CONTINUE; } if(cena > kasa) { LosMenu(id); client_print(id, print_chat, "Masz za malo"); return PLUGIN_HANDLED; } if(cena < MIN_VALUE || cena > MAX_VALUE) { LosMenu(id); client_print(id, print_chat, "[jackpot] Niepoprawna wartosc (MIN: %i, MAX. %i)", MIN_VALUE, (kasa > MAX_VALUE)? MAX_VALUE: kasa); return PLUGIN_CONTINUE; } new time = get_timeleft()/60; if(time <= 6) { LosMenu(id); client_print(id, print_chat, "[jackpot] Mozliwosc dolaczenia do puli zostala zablokowana na 6 minut przed koncem mapy."); return PLUGIN_CONTINUE; } if(nextlosowanie == -1) { nextlosowanie = 5; set_task(60.0, "ZakonczLosowanie"); } maxpula += cena; pula_gracza[id] = cena; csgo_set_user_coin(id, kasa-cena); new name[32]; get_user_name(id, name, charsmax(name)); ColorChat(0, GREEN, "[jackpot]^x01 Gracz^x03 %s^x01 wzial udzial w puli nagrod, dodajac^x03 %i Monety^x01.", name, cena); return PLUGIN_CONTINUE; } public PulaInfo(id) { client_print(id, print_chat, "[jackpot] Aktualnie w puli nagrod znajduje sie: %i Monet", maxpula); } public ZakonczLosowanie() { if(nextlosowanie > 0) { nextlosowanie --; set_task(60.0, "ZakonczLosowanie"); } else if(maxpula) { new id_wygrywajacego = LosowanieGracza(); if(is_user_connected(id_wygrywajacego)) { new kasa = csgo_get_user_coin(id_wygrywajacego)+maxpula; if(kasa > 16000) kasa = 16000; new name[33]; get_user_name(id_wygrywajacego, name, charsmax(name)); csgo_set_user_coin(id_wygrywajacego, kasa); ColorChat(0, GREEN, "[jackpot]^x01 Gracz^x03 %s^x01 wygral ^x03 %i Monety^x01 w puli nagrod! Gratulujemy.", name, maxpula); } else ColorChat(0, GREEN, "[jackpot]^x01 Nikt nie wygral ^x03 %i Monet^x01 w puli nagrod! Moze nastepnym razem dopisze komus szczescie.", maxpula); maxpula = 0; nextlosowanie = -1; } } public LosowanieGracza() { new wylosowany[33][2]; new players, id_wylosowanego; for(new i = 1; i <= maxplayers; i ++) { if(!is_user_connected(i)) continue; new pula = pula_gracza[i]; if(!pula) continue; pula_gracza[i] = 0; wylosowany[players][0] = i; wylosowany[players][1] = pula/100; players ++; } if(players) { new ilosc_ponawianych_losowan = 64; for(new l = 1; l <= ilosc_ponawianych_losowan; l ++) { new id = random(players); if(random_num(1, 100) <= wylosowany[id][1]) { id_wylosowanego = id; break; } } } return wylosowany[id_wylosowanego][0]; }
Tak jak w temacie, losuje cały czas tę samą osobę jeśli weźmie udział w jackpocie tytusa? Gdzie błąd w pluginie?
Użytkownik ksaju edytował ten post 16.02.2020 20:10