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.
|
Optymalny sposób - menu sklepu
#1
Napisano 15.12.2012 19:49
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
#2 Gość_21977_*
Napisano 16.12.2012 07:36
Popularny
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.
#3
Napisano 16.12.2012 13:43
Pozdrawiam.
#4
Napisano 16.12.2012 23:07
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
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ę.
#5
Napisano 17.12.2012 16:08
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.
#6
Napisano 17.12.2012 17:44
Pozdrawiam.
#7
Napisano 25.12.2012 22:52
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?
#8
Napisano 26.12.2012 00:22
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ę.
#9
Napisano 26.12.2012 00:48
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
#10
Napisano 26.12.2012 11:37
Oto jego kod:
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" );
}
#11
Napisano 26.12.2012 12:08
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
#12
Napisano 26.12.2012 12:32
#13
Napisano 26.12.2012 12:41
Użytkownik Krytykiewicz edytował ten post 26.12.2012 12:50
#14
Napisano 26.12.2012 14:42
Użytkownik Krytykiewicz edytował ten post 26.12.2012 14:42
#15
Napisano 26.12.2012 15:10
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
#16
Napisano 19.01.2013 18:23
Oto kod (tam gdzie jest "test" oczywiście pojawia się tekst):
Użytkownik Krytykiewicz edytował ten post 19.01.2013 18:25
#17
Napisano 20.01.2013 18:43
benio101 powinien zaradzić ;/
Użytkownik Krytykiewicz edytował ten post 20.01.2013 18:43
#18 Gość_21977_*
Napisano 20.01.2013 21:18
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