Optymalny sposób - menu sklepu
Krytykiewicz
15.12.2012
Witam,
Posiadam menu do modu, mianowicie sklep. Jest on niestety napisany w 1 pluginie + kilka pluginów osobno, przez co do menu muszę wpisywać coś takiego: client_cmd(id, "komenda"); komenda = jakiś tam item, który jest w osobnym pluginie. Jak uważacie. Czy rozkład tego, aby menu sklepu było tak, iż każdy item będzie jako osobny plugin za pomocą forwardów i natyw będzie optymalny? Coś takiego jak cod mod lub diablo mod core by darkgl, gdzie itemy lub klasy tworzymy za pomocą nowego pluginu. Można podać przykład jak zrobić, aby dodać pewien item i pojawił się on w menu? Z resztą sobie poradzę sam. Czyli reasumując, główny plugin sklepu z forwardami i natywami, a itemy do tego jako osobny plugin. Nie chcę też, aby wszystko za mnie zostało napisane. Chodzi mi o podanie przykładu jak dodać item do menu pod komendą, np. /itemy.
Pozdrawiam
Posiadam menu do modu, mianowicie sklep. Jest on niestety napisany w 1 pluginie + kilka pluginów osobno, przez co do menu muszę wpisywać coś takiego: client_cmd(id, "komenda"); komenda = jakiś tam item, który jest w osobnym pluginie. Jak uważacie. Czy rozkład tego, aby menu sklepu było tak, iż każdy item będzie jako osobny plugin za pomocą forwardów i natyw będzie optymalny? Coś takiego jak cod mod lub diablo mod core by darkgl, gdzie itemy lub klasy tworzymy za pomocą nowego pluginu. Można podać przykład jak zrobić, aby dodać pewien item i pojawił się on w menu? Z resztą sobie poradzę sam. Czyli reasumując, główny plugin sklepu z forwardami i natywami, a itemy do tego jako osobny plugin. Nie chcę też, aby wszystko za mnie zostało napisane. Chodzi mi o podanie przykładu jak dodać item do menu pod komendą, np. /itemy.
Pozdrawiam
Gość_21977_* 16.12.2012
Zdecydowanie lepiej jest używać forwardów / natywów, niż wysyłania komend do gracza, wymaga to bowiem komunikacji z silnikiem gry poprzez Metamoda:P i to kilkukrotnie, co nie jest zbyt dobrym rozwiązaniem.
W pluginie sklepu, natyw register_przedmiot(opis, cena) będzie rejestrował nowy przedmiot w sklepie
W momencie zakupienia danego przedmiotu, wywolamy
Gdzie ID_FORWARDU to wlasnie numer identyfikacyjny zwracany przez CreateOneForward z register_przedmiot
INC, dołączany do przedmiotów sklepu
I w SMA przedmiotow, dodamy do plugin_init
Oraz dodamy funkcję publiczną
Użytkownik benio101 edytował ten post 16.12.2012 09:15
-dbl.
W pluginie sklepu, natyw register_przedmiot(opis, cena) będzie rejestrował nowy przedmiot w sklepie
register_native("register_przedmiot", "register_przedmiot");
public register_przedmiot(id, args){
new opis[200], koszt=get_param(2);
get_string(1, opis, 199);
// rejestrujesz nowy forward i zapisujesz sobie jego numer identyfikacyjny
// w momencie chęci wywołania forwardu z wybraniem tego przedmiotu,
// posłużysz się tym numerem identyfikacyjnym zwracanym przez funkcję CreateOneForward
CreateOneForward(id, "execute_przedmiot", FP_CELL);
}
W momencie zakupienia danego przedmiotu, wywolamy
ExecuteForward(ID_FORWARDU, id_kupujacego);
Gdzie ID_FORWARDU to wlasnie numer identyfikacyjny zwracany przez CreateOneForward z register_przedmiot
INC, dołączany do przedmiotów sklepu
native register_przedmiot(opis[200], cena);
/*
Rejestruje nowy przedmiot, natyw nalezy umiescic w funkcji plugin_init
opis - krótki opis przedmiotu do menu zakupow, limit 200 znaków
cena - cena przedmiotu w sklepie
*/
forward execute_przedmiot(id);
/*
Informuje o zakupie przedmiotu przez okreslonego gracza
id - numer identyfikacyjne gracza, ktory zakupil przedmiot
*/
I w SMA przedmiotow, dodamy do plugin_init
register_przedmiot("Opis przedmiotu", cena);
Oraz dodamy funkcję publiczną
public execute_przedmiot(id)Która będzie wywoływana w momencie zakupu przedmiotu przez danego gracza.
Mam nadzieję, że mi się udało. Podoba mi się ta postawaNie chcę też, aby wszystko za mnie zostało napisane. Chodzi mi o podanie przykładu jak dodać item do menu pod komendą, np. /itemy.

Użytkownik benio101 edytował ten post 16.12.2012 09:15
-dbl.
Krytykiewicz
16.12.2012
Dzięki wielkie serdeczne. To jest bardzo duża pomoc, bo generalnie miałem już plan jak mniej-więcej zrobić coś takiego tylko szczerze powiedziawszy kompletnie nie wiedziałem jak zrobić, aby w menu wyświetlił się item. Jeśli będę potrzebował jeszcze pomocy, ponieważ szczerze mówiąc pierwszy raz zacznę robić sklep takim rozwiązaniem to proszę nie zamykać tematu, napiszę tutaj. To jest nauka, dążę do celu i mam nadzieję, że mi się to uda.
Pozdrawiam.
Pozdrawiam.
GwynBleidD
16.12.2012
Przy CreateOneForward jest pewne ograniczenie... musisz w pluginie menu zapisywać ID forwardu dla każdego z itemów, przez co masz ograniczoną ilość tych itemów, albo przymus użycia dynamicznych tablic. Poza tym zrobienie wielu wpisów w menu dla jednego pluginu byłoby mocno problematyczne.
Jest rozwiązanie prostsze, zrobić MultiForward, a w natywie ustawić, aby zwracał id z menu (menu tworzyć można raz, statycznie przecież). Do forwardu przekazywać parametr z id aktualnie wybranego przedmiotu i każdy plugin porównywałby sobie, czy to nie jest przypadkiem ten nasz numerek. Wygodniej w oprogramowaniu, trochę dynamiczniej i możliwość wprowadzenia przez jeden plugin do menu kilku pozycji bezproblemowo. No i możliwość dodatkowa się pojawia, aby na jeden item reagowało kilka pluginów
Jest rozwiązanie prostsze, zrobić MultiForward, a w natywie ustawić, aby zwracał id z menu (menu tworzyć można raz, statycznie przecież). Do forwardu przekazywać parametr z id aktualnie wybranego przedmiotu i każdy plugin porównywałby sobie, czy to nie jest przypadkiem ten nasz numerek. Wygodniej w oprogramowaniu, trochę dynamiczniej i możliwość wprowadzenia przez jeden plugin do menu kilku pozycji bezproblemowo. No i możliwość dodatkowa się pojawia, aby na jeden item reagowało kilka pluginów

Fili:P
17.12.2012
Ogólnie myślę że nie pomogę tak bardzo jak benio101 czy GwynBleidD, bo oni dali coś z siebie. Ja postaram się pomóc w inny sposób. Otóż pamiętałem jak kiedyś MisieQ opublikował Shop Api. Na początku nie mogłem, lecz w końcu je znalazłem, aby je zobaczyć kliknij w ten link.
Jeżeli jednak chciałbyś zobaczyć oryginalną wersję postu wejdź tu: Shop System + API - AlliedModders
Myślę że może ci to API pomóc w twoich celach. Mam nadzieję że pomogłem chodź w małym stopniu.
Pozdrawiam.
Jeżeli jednak chciałbyś zobaczyć oryginalną wersję postu wejdź tu: Shop System + API - AlliedModders
Myślę że może ci to API pomóc w twoich celach. Mam nadzieję że pomogłem chodź w małym stopniu.
Pozdrawiam.
Krytykiewicz
25.12.2012
Witajcie,
Mam kolejne pytanie. Jeśli chciałbym zrobić, aby dla CT i TT były inne itemy, więc zrobić to w jednej natywie czy osobno natywa dla CT i TT?
Mam kolejne pytanie. Jeśli chciałbym zrobić, aby dla CT i TT były inne itemy, więc zrobić to w jednej natywie czy osobno natywa dla CT i TT?
GwynBleidD
26.12.2012
Jak Ci wygodniej
Robiąc w jednym natywie możesz szybko rozszerzyć do kilku dodatkowych rzeczy. Dodatkowo możesz np przekazać do funkcji TEAM_TT|TEAM_CT żeby dodać do obu drużyn do menu coś za jednym zamachem
Oczywiście musisz to odpowiednio obsłużyć



Krytykiewicz
26.12.2012
Chciałem zrobić to w jednej natywie, gdzie np.
item_info(opis, cos, cos, TEAM ? CT : TT, ...)
Tzn. w tym momencie napisałbym TEAM_CT bądź TEAM_TT. Tak myślę, że będzie dobrze oraz wygodnie
Dodatkowo, mam jeszcze malutki problem. Ponieważ nikt mi jeszcze nie napisał przykładu, jak zrobić, aby dodać do menu item. Ten shop_api mi kompletnie nie podchodzi. benio napisał mi pobieranie informacji, natomiast jak zrobić aby dodać item do menu już nie, a o to mi tylko chodziło. Całą resztę sobie ogarnąłem jeszcze przed napisaniem tego wątku. Jestem wdzięczny za każdą pomoc, lecz z dodawaniem itemu do menu mam poważny problem, bo kompletnie nie potrafię tego zinterpretować. Proszę o wyrozumiałość, gdyż pierwszy raz robię takie coś
Użytkownik Krytykiewicz edytował ten post 26.12.2012 00:51
item_info(opis, cos, cos, TEAM ? CT : TT, ...)
Tzn. w tym momencie napisałbym TEAM_CT bądź TEAM_TT. Tak myślę, że będzie dobrze oraz wygodnie


Użytkownik Krytykiewicz edytował ten post 26.12.2012 00:51
Fili:P
26.12.2012
Stworzyłem specjalnie dla ciebie shop api 
Oto jego kod:
Jeżeli chcesz zmienić komendę otwierającą sklep zamień ją w lini:
Tworzenie itemów
W plugin_init rejestrujemy przedmiot:
W 3 argumencie możemy użyć sumy bitowej
Wartości to TEAM_TT i TEAM_CT.
Wykrycie kupna itemu
Nie miałem pojęcia, czy chcesz aby item był na runde czy na ile, więc po prostu wywołuje się forward podczas kupna przedmiotu a zabierasz go gdy chcesz.
Przykładowy item - Smoke

Oto jego kod:
Spoiler
Jeżeli chcesz zmienić komendę otwierającą sklep zamień ją w lini:
#define KOMENDA "say /sklep"
Tworzenie itemów
W plugin_init rejestrujemy przedmiot:
item_register( "Gold M4", 10000 /* to oznacza że zapłacimy 10000$ */, TEAM_CT );
W 3 argumencie możemy użyć sumy bitowej

Wartości to TEAM_TT i TEAM_CT.
Wykrycie kupna itemu
Nie miałem pojęcia, czy chcesz aby item był na runde czy na ile, więc po prostu wywołuje się forward podczas kupna przedmiotu a zabierasz go gdy chcesz.
public item_buy( id, item )
{
// gracz kupil item
}
Przykładowy item - Smoke
#include <amxmodx>
#include <fun>
native item_register( nazwa[ 32 ], koszt, team );
new item_id;
public plugin_init() {
register_plugin("", "", "")
item_id = item_register( "Smoke grenade", 100, TEAM_CT|TEAM_TT );
}
public item_buy( id, item )
{
if( item != item_id )
return 0;
give_item( id, "weapon_smokegrenade" );
}
Krytykiewicz
26.12.2012
Niepotrzebnie, ale wielkie wielkie dzięki! Jesteś super, skorzystam na pewno!
Tylko wywala błędy tag mismatch
Na pewno będę się starał teraz czytać i nauczyć o "Array", bo coraz więcej widzę osób używa tego ( http://amxx.pl/topic...miczne-tablice/ ).
Użytkownik Krytykiewicz edytował ten post 26.12.2012 12:21
Tylko wywala błędy tag mismatch
if( !( (1<<ArrayGetCell( team_item, i )) & (1<<get_user_team( id ) ) ) )
if( !( (1<<ArrayGetCell( team_item, i )) & (1<<get_user_team( id ) ) ) )oraz
cs_set_user_money( id, cs_get_user_money( id ) - ArrayGetCell( koszt_item, i ) );
Na pewno będę się starał teraz czytać i nauczyć o "Array", bo coraz więcej widzę osób używa tego ( http://amxx.pl/topic...miczne-tablice/ ).
Użytkownik Krytykiewicz edytował ten post 26.12.2012 12:21
Krytykiewicz
26.12.2012
Tag mismatch wywala błąd podczas kompilacji lokalnej w tych funkcjach co podałem wyżej (natomiast jeśli skompiluje na amxx.pl to to działa). Przed chwilą zamieniłem pliki inc na inne z 1.8.1 amxmodx i nadal wywala błąd. Więc coś musi być od mojego kompilatora lokalnego. Cóż, wychodzę na idiotę, bo taka prosta sprawa i robię zamieszanie ośmieszając się. Niemniej jednak pierwszy raz zdarzyła mi się taka sytuacja.
Użytkownik Krytykiewicz edytował ten post 26.12.2012 12:50
Użytkownik Krytykiewicz edytował ten post 26.12.2012 12:50
Krytykiewicz
26.12.2012
Poradziłem sobie, należało zrobić zmienną new cost = ArrayGetCell(koszt_item, id). Proszę nie zamykać jeszcze tematu
Użytkownik Krytykiewicz edytował ten post 26.12.2012 14:42

Użytkownik Krytykiewicz edytował ten post 26.12.2012 14:42
Fili:P
26.12.2012
Nie zadziała id, ma być tam i, ponieważ to się dzieje w pętliPoradziłem sobie, należało zrobić zmienną new cost = ArrayGetCell(koszt_item, id). Proszę nie zamykać jeszcze tematu

Krytykiewicz
19.01.2013
Cóż od pewnego czasu mam problem z tym że nie pojawiają się itemy w menu, to samo w oryginalnym kodzie podanym wyżej przez Fiii.
Oto kod (tam gdzie jest "test" oczywiście pojawia się tekst):
Użytkownik Krytykiewicz edytował ten post 19.01.2013 18:25
Oto kod (tam gdzie jest "test" oczywiście pojawia się tekst):
Spoiler
Użytkownik Krytykiewicz edytował ten post 19.01.2013 18:25
Krytykiewicz
20.01.2013
Bardzo proszę o pomoc w tej sprawie!
benio101 powinien zaradzić ;/
Użytkownik Krytykiewicz edytował ten post 20.01.2013 18:43
benio101 powinien zaradzić ;/
Użytkownik Krytykiewicz edytował ten post 20.01.2013 18:43
Gość_21977_* 20.01.2013
Wiadomość wygenerowana automatycznie
Ten temat został zamknięty przez moderatora.
Powód: Temat zamknięty na prośbę użytkownika.
Z pozdrowieniami,
Zespół AMXX.PL
Ten temat został zamknięty przez moderatora.
Powód: Temat zamknięty na prośbę użytkownika.
Z pozdrowieniami,
Zespół AMXX.PL