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
 

Zdjęcie

Optymalny sposób - menu sklepu


  • Zamknięty Temat jest zamknięty
17 odpowiedzi w tym temacie

#1 Krytykiewicz

    Zaawansowany

  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 15.12.2012 19:49

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
  • +
  • -
  • 0

#2 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 16.12.2012 07:36

*
Popularny

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
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.

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.

Mam nadzieję, że mi się udało. Podoba mi się ta postawa :)

Użytkownik benio101 edytował ten post 16.12.2012 09:15
-dbl.


#3 Krytykiewicz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 16.12.2012 13:43

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.
  • +
  • -
  • 0

#4 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 16.12.2012 23:07

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 :)
  • +
  • -
  • 3

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#5 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 17.12.2012 16:08

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.

  • +
  • -
  • 1

#6 Krytykiewicz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 17.12.2012 17:44

Oczywiście, każda informacja się liczy.

Pozdrawiam.
  • +
  • -
  • 0

#7 Krytykiewicz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 25.12.2012 22:52

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?
  • +
  • -
  • 0

#8 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 26.12.2012 00:22

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ć ;)
  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#9 Krytykiewicz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 26.12.2012 00:48

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

  • +
  • -
  • 0

#10 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 26.12.2012 11:37

Stworzyłem specjalnie dla ciebie shop api :)
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" );
}

  • +
  • -
  • 1

#11 Krytykiewicz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 26.12.2012 12:08

Niepotrzebnie, ale wielkie wielkie dzięki! Jesteś super, skorzystam na pewno!
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

  • +
  • -
  • 0

#12 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 26.12.2012 12:32

Pokaż logi kompilacji, bo u mnie wszystko ok i zero warningów.
  • +
  • -
  • 0

#13 Krytykiewicz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 26.12.2012 12:41

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

  • +
  • -
  • 0

#14 Krytykiewicz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 26.12.2012 14:42

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

  • +
  • -
  • 0

#15 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 26.12.2012 15:10

Poradziłem sobie, należało zrobić zmienną new cost = ArrayGetCell(koszt_item, id). Proszę nie zamykać jeszcze tematu :)

Nie zadziała id, ma być tam i, ponieważ to się dzieje w pętli :)
  • +
  • -
  • 0

#16 Krytykiewicz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 19.01.2013 18:23

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):

Spoiler

Użytkownik Krytykiewicz edytował ten post 19.01.2013 18:25

  • +
  • -
  • 0

#17 Krytykiewicz

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 18
Początkujący

  • Postów:114
  • Lokalizacja:Stąd
Offline

Napisano 20.01.2013 18:43

Bardzo proszę o pomoc w tej sprawie!
benio101 powinien zaradzić ;/

Użytkownik Krytykiewicz edytował ten post 20.01.2013 18:43

  • +
  • -
  • 0

#18 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 20.01.2013 21:18

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




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych