Problem z pluginem menu kupywania.
Ziome3eg
21.11.2017
Witam, mam problem ze zrobieniem własnego pluginu tj. Proste Menu Kupywania.
Problem tkwi w tym,że po kliknięciu b nie otwiera się moje menu lecz oryginalne,ustawienie otwierania podmiana komendy na buy nie pomaga.
Sma:
#include <amxmodx>#include <amxmisc>#include <cstrike>#include <fun>#include <colorchat>#include <fakemeta>#define PLUGIN "Menu Kupywania"#define VERSION "1.0"#define AUTHOR "Ziome3eg"public plugin_init(){register_plugin(PLUGIN, VERSION, AUTHOR)register_clcmd("say /buy", "BuyMenu");register_clcmd("say_team /buy", "BuyMenu");register_clcmd("buy", "BuyMenu")}public plugin_precache(){precache_sound("weapons/c4_disarm.wav");precache_sound("weapons/c4_disarmed.wav");}public BuyMenu (id){if(is_user_alive(id)) {MenuKupywania(id);}else {ColorChat( id, TEAM_COLOR, "^x04[nazwamoda]^x03 Musisz byc zywy, aby korzystac ze sklepu!");}return PLUGIN_HANDLED;}public MenuKupywania(id){switch(get_user_team(id)){case 1: MenuKupywaniaTT(id);case 2: MenuKupywaniaCT(id);}return PLUGIN_HANDLED;}public MenuKupywaniaTT(id){new menu = menu_create("Menu Kupywania:", "Handel_Menu");menu_additem(menu, "\wKamizelka^t^t^t^t\y[\r650$\y]", "0");menu_additem(menu, "\wKamizelka+Helm^t^t^t^t\y[\r1000$\y]", "1");menu_additem(menu, "\wGranat Oslepiajacy^t^t^t^t\y[\r200$\y]", "2");menu_additem(menu, "\wGranat Wybuchowy^t^t^t^t\y[\r300$\y]", "3");menu_additem(menu, "\wGranat Dymny^t^t^t^t\y[\r300$\y]", "4");menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");menu_display(id, menu);}public MenuKupywaniaCT(id){new menu = menu_create("Menu Kupywania:", "Handel_Menu");menu_additem(menu, "\wKamizelka^t^t^t^t\y[\r650$\y]", "0");menu_additem(menu, "\wKamizelka+Helm^t^t^t^t\y[\r1000$\y]", "1");menu_additem(menu, "\wGranat Oslepiajacy^t^t^t^t\y[\r200$\y]", "2");menu_additem(menu, "\wGranat Wybuchowy^t^t^t^t\y[\r300$\y]", "3");menu_additem(menu, "\wGranat Dymny^t^t^t^t\y[\r300$\y]", "4");menu_additem(menu, "\wZestaw Do Rozbrajania^t^t^t^t\y[\r200$\y]", "5");menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");menu_display(id, menu);}public Menu_Callback(id, menu, item){static num[10], acces, callback;menu_item_getinfo(menu, item, acces, num, 9, _, _, callback);}public Handel_Menu(id, menu, item){if(item == MENU_EXIT)return;new kasa = cs_get_user_money(id)new num[10], acces, callback;menu_item_getinfo(menu, item, acces, num, 9, _, _, callback);if(!is_user_alive(id)){ColorChat(id, RED, "^x04[nazwamoda]^x03 Jestes martwy, jak chcesz cos kupic?");return;}switch(str_to_num(num)){case 0: {if(kasa>=650 && is_user_alive(id)){ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Kupiles Kamizelke!");cs_set_user_armor(id, 100, CS_ARMOR_KEVLAR);cs_set_user_money(id, kasa - 650);}else {ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Nie masz tyle pieniedzy!");}}case 1: {if(kasa>=1000 && is_user_alive(id)){ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Kupiles Kamizelke i helm!");cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM);cs_set_user_money(id, kasa - 1000);}else {ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Nie masz tyle pieniedzy!");}}case 2: {if(kasa>=200 && is_user_alive(id)){ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Kupiles Flesza!");give_item(id, "weapon_flashbang");cs_set_user_money(id, kasa - 200);}else {ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Nie masz tyle pieniedzy!");}}case 3: {if(kasa>=300 && is_user_alive(id)){ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Kupiles HE!");give_item(id, "weapon_hegrenade");cs_set_user_money(id, kasa - 300);}else {ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Nie masz tyle pieniedzy!");}}case 4: {if(kasa>=300 && is_user_alive(id)){ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Kupiles Smoke!");give_item(id, "weapon_smokegrenade");cs_set_user_money(id, kasa - 300);}else {ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Nie masz tyle pieniedzy!");}}case 5: {if(kasa>=200 && is_user_alive(id)){ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Kupiles Defa!");cs_set_user_defuse(id, 1);cs_set_user_money(id, kasa - 200);}else {ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Nie masz tyle pieniedzy!");}}}}
Za każdą chęć pomocy polecą +++!
Edit1:A i pomoże ktoś jeszcze dodać ten dźwięk z menu klas codmoda przy otwarciu menu i klinięciu opcji?
Edit2: I dodaniem ,że można kupywać tylko w buyzone i tylko po rozpoczęciu rundy 90 sekund to działa(jak normalny buyzone) po 90 sekundach pojawiałoby się : "{ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Kupywac mozna tylko przez 90 sekund rundy!");}}"
Użytkownik Ziome3eg edytował ten post 21.11.2017 00:18
Mixtaz
21.11.2017
Teraz tak:
Pare rzeczy sobie wypiszmy - zamiana motd z buyem na wlasne menu, doklej to do pluga:
public plugin_init() { register_clcmd("client_buy_open","BuyOpen") } public BuyOpen(id) { if(!is_user_alive(id)) return PLUGIN_CONTINUE static msg_buyclose if(!msg_buyclose) msg_buyclose = get_user_msgid("BuyClose") message_begin(MSG_ONE, msg_buyclose, _, id) message_end() CommandBuy(id) return PLUGIN_CONTINUE } public CommandBuy(id) { client_cmd(id, "say /buy); }
Ponieważ serwer nie wychwyci komendy buy z poziomu klienta ze względu na ograniczenie hl.
Teraz zakup wyłącznie w buyzone:
Do BuyMenu(id)
else if(!fm_get_user_buyzone(id)){ ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Kupiles poza buyzonem.); } //Na końcu kodu: stock fm_get_user_buyzone(id) { if (get_pdata_int(id, OFFSET_MAPZONE) & PLAYER_IN_BUYZONE) return 1; return 0; }
Co do dźwięków z CoD'a to Ci nie pomogę, bo się w tym nie orientuję.
I dodam, że funkcja plugin_precache jest zbędna ponieważ w kodzie nie ma nic co mogłoby wywołać te dźwięki.
Zapomniałbym, jest możliwość zbindowania każdemu graczowi przy połączeniu Twój sklep, zamiast normalnego buy'a, ale jest to pogwałcenie regulaminu forum.
Ziome3eg
21.11.2017
Teraz tak:
Pare rzeczy sobie wypiszmy - zamiana motd z buyem na wlasne menu, doklej to do pluga:
public plugin_init() { register_clcmd("client_buy_open","BuyOpen") } public BuyOpen(id) { if(!is_user_alive(id)) return PLUGIN_CONTINUE static msg_buyclose if(!msg_buyclose) msg_buyclose = get_user_msgid("BuyClose") message_begin(MSG_ONE, msg_buyclose, _, id) message_end() CommandBuy(id) return PLUGIN_CONTINUE } public CommandBuy(id) { client_cmd(id, "say /buy); }Ponieważ serwer nie wychwyci komendy buy z poziomu klienta ze względu na ograniczenie hl.
Teraz zakup wyłącznie w buyzone:
Do BuyMenu(id)
else if(!fm_get_user_buyzone(id)){ ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Kupiles poza buyzonem.); } //Na końcu kodu: stock fm_get_user_buyzone(id) { if (get_pdata_int(id, OFFSET_MAPZONE) & PLAYER_IN_BUYZONE) return 1; return 0; }Co do dźwięków z CoD'a to Ci nie pomogę, bo się w tym nie orientuję.
I dodam, że funkcja plugin_precache jest zbędna ponieważ w kodzie nie ma nic co mogłoby wywołać te dźwięki.
Zapomniałbym, jest możliwość zbindowania każdemu graczowi przy połączeniu Twój sklep, zamiast normalnego buy'a, ale jest to pogwałcenie regulaminu forum.
JESTEŚ BOGIEM!!!
Co do bindowania innym właśnie chodziło mi tylko żeby to podmieniało a nie zmieniało komendę.
Repka leci za pomoc i czekam bo może ktoś pomoże z dźwiękami
Ziome3eg
21.11.2017
A dałbyś rade zrobić to ?:
"Edit2: I dodaniem ,że można kupywać tylko w buyzone i tylko po rozpoczęciu rundy 90 sekund to działa(jak normalny buyzone) po 90 sekundach pojawiałoby się : "{ColorChat(id, TEAM_COLOR, "^x04[nazwamoda]^x03 Kupywac mozna tylko przez 90 sekund rundy!");}}""
Mixtaz
22.11.2017
Wypadaly minimalne błędy, wczoraj wieczorem to robiłem, więc mogły jakieś małe błędy wystąpić.
Nie będę się rozpisywać (bo dość szeroko pojęte zmiany zaszły) i wyślę Ci .sma w załączniku. Kompiluje się bez problemu.
Co do tego dźwięku w menu to mam pewien pomysł w głowie, ale z tym byłoby sporo pracy.
Enjoy.
Załączone pliki
Ziome3eg
22.11.2017
Wypadaly minimalne błędy, wczoraj wieczorem to robiłem, więc mogły jakieś małe błędy wystąpić.
Nie będę się rozpisywać (bo dość szeroko pojęte zmiany zaszły) i wyślę Ci .sma w załączniku. Kompiluje się bez problemu.
Co do tego dźwięku w menu to mam pewien pomysł w głowie, ale z tym byłoby sporo pracy.
Enjoy.
Dzięki pogrzebie w menu coda i jak do łapię to wstawię tu kod dla przyszłych pokoleń
Ziome3eg
22.11.2017
Wypadaly minimalne błędy, wczoraj wieczorem to robiłem, więc mogły jakieś małe błędy wystąpić.
Nie będę się rozpisywać (bo dość szeroko pojęte zmiany zaszły) i wyślę Ci .sma w załączniku. Kompiluje się bez problemu.
Co do tego dźwięku w menu to mam pewien pomysł w głowie, ale z tym byłoby sporo pracy.
Enjoy.
Nie pojawia się wiadomość poza buyzonem i to domyślne menu kupywania mruga, jakiś pomysł ?
Robiin
22.11.2017
Napisałem Ci to od zera, ale nie bawiłem się z blokowaniem komendy "buy".
Załączone pliki
Mixtaz
22.11.2017
Napisałem Ci to od zera, ale nie bawiłem się z blokowaniem komendy "buy".
Słusznie, że napisałeś od zera bo operowanie pierwotnym pluginem było ciężkie (niepotrzebne przejścia I ta "tabulacja"). Już się brałem za fixa, bo widziałem na czym opierał się mój błąd.
Dodam od siebie, że kodzik ładnie napisany (dużo inkrementacji), ale są no, powiedzmy rzeczy które mogłyby ujednolicić jedno czy drugie
1.
for(new i=0;i<get_maxplayers();i++){ if(is_user_connected(i)){
No dobrze, ale dla takiej pętli warto również dodać warunek czy gracz jest połączony z serwerem.
Kolejna sprawa która skróciła I "upiększyła" kod jest taki stock:
stock Reduce(id, amount) cs_set_user_money(id, cs_get_user_money(id) - amount)
Chociaż nie wiem czy gra warta świeczki bo widzę, że funkcja występuje tylko raz.
No, ale to są kwestie małostkowe, plusik za zdjęcie obowiązku pracy z moich barków.
Robiin
22.11.2017
Napisałem Ci to od zera, ale nie bawiłem się z blokowaniem komendy "buy".
Słusznie, że napisałeś od zera bo operowanie pierwotnym pluginem było ciężkie (niepotrzebne przejścia I ta "tabulacja"). Już się brałem za fixa, bo widziałem na czym opierał się mój błąd.
Dodam od siebie, że kodzik ładnie napisany (dużo inkrementacji), ale są no, powiedzmy rzeczy które mogłyby ujednolicić jedno czy drugie
1.
for(new i=0;i<get_maxplayers();i++){ if(is_user_connected(i)){No dobrze, ale dla takiej pętli warto również dodać warunek czy gracz jest połączony z serwerem.
Kolejna sprawa która skróciła I "upiększyła" kod jest taki stock:
stock Reduce(id, amount) cs_set_user_money(id, cs_get_user_money(id) - amount)Chociaż nie wiem czy gra warta świeczki bo widzę, że funkcja występuje tylko raz.
No, ale to są kwestie małostkowe, plusik za zdjęcie obowiązku pracy z moich barków.
Z pętlą masz rację, moja logika podczas pisania zakładała, że pętla wykona się tyle razy ile serwer ma max. slotów i jednocześnie tyle ile jest graczy - dopiero teraz widzę błąd
Starałem się zmieścić to w jak najmniejszej ilości funkcji, dlatego też consty, zamiast robienia wszystkiego dla konkretnego itemu. Oczywiście do menu można też dodać ceny przedmiotów - wystarczy zmienić public BuyMenu na
Ziome3eg
22.11.2017
dobra dla przyszłych pokoleń dołapałem się do kodu dźwieku wyboru z coda:
To:
client_cmd(id, "spk menu/select");
dodajemy w:
public nazwamenu(id)
pod
menu_display(id, menu);
i do
public nazwamenu_Handle(id)
dodajemy to jako pierwsze.
jeszcze do
public plugin_precache()/sma][sma]precache_sound("menu/select.wav");[
Załączone pliki
Użytkownik Ziome3eg edytował ten post 22.11.2017 21:26
Ziome3eg
22.11.2017
Napisałem Ci to od zera, ale nie bawiłem się z blokowaniem komendy "buy".
Słusznie, że napisałeś od zera bo operowanie pierwotnym pluginem było ciężkie (niepotrzebne przejścia I ta "tabulacja"). Już się brałem za fixa, bo widziałem na czym opierał się mój błąd.
Dodam od siebie, że kodzik ładnie napisany (dużo inkrementacji), ale są no, powiedzmy rzeczy które mogłyby ujednolicić jedno czy drugie
1.
for(new i=0;i<get_maxplayers();i++){ if(is_user_connected(i)){No dobrze, ale dla takiej pętli warto również dodać warunek czy gracz jest połączony z serwerem.
Kolejna sprawa która skróciła I "upiększyła" kod jest taki stock:
stock Reduce(id, amount) cs_set_user_money(id, cs_get_user_money(id) - amount)Chociaż nie wiem czy gra warta świeczki bo widzę, że funkcja występuje tylko raz.
No, ale to są kwestie małostkowe, plusik za zdjęcie obowiązku pracy z moich barków.
Z pętlą masz rację, moja logika podczas pisania zakładała, że pętla wykona się tyle razy ile serwer ma max. slotów i jednocześnie tyle ile jest graczy - dopiero teraz widzę błąd
Starałem się zmieścić to w jak najmniejszej ilości funkcji, dlatego też consty, zamiast robienia wszystkiego dla konkretnego itemu. Oczywiście do menu można też dodać ceny przedmiotów - wystarczy zmienić public BuyMenu na
Spoiler
niestety twój plugin mi nie działa
Ziome3eg
22.11.2017
Dobra już działa ale wciąż bawię się w blokadę buya
Użytkownik Ziome3eg edytował ten post 22.11.2017 23:02
Robiin
22.11.2017
Możesz zaryzykować mp_buytime 0.1 i ustawić własną wartość float w set_task'u.
Ziome3eg
22.11.2017
Możesz zaryzykować mp_buytime 0.1 i ustawić własną wartość float w set_task'u.
dokładniej można z tym floatem bo ja jestem zielony mimo wszystko
Ziome3eg
23.11.2017
dobra float zrobiony, ale dalej nie otwiera sie moje menu po kliknięciu b
Ziome3eg
23.11.2017
dodałem register_clcmd("client_buy_open","BuyHandler")
ale cały czas plugin podczas pobytu w buyzone wyświetla mi, że nie mogę już kupować