Natywy "Wywołania"
ELOS
24.04.2012
Witam potrzebuję zrobić natywów wywołania na moje oko przypominają one natywy z coda chodzi dokładniej o register_class
potrzebuje zrobić coś takiego aby zarejestrować 4 zmienne 2 consty i 2 zwykłe następnie pobrać id zarejestrowanego pluginu i go wywołać.
Zrobiłem sobie takie coś
include:
I teraz moje pytanie grzmi jak zrobić takie coś w stylu wywołania np:
potrzebuje zrobić coś takiego aby zarejestrować 4 zmienne 2 consty i 2 zwykłe następnie pobrać id zarejestrowanego pluginu i go wywołać.
Zrobiłem sobie takie coś
include:
native NU_register(const nazwa[], const opis[], mana, odpocznij);I tu w głównym pluginie takie coś zaczerpnięte z coda ale zapewne jest to źle zrobione:
public ZarejestrujNazwy(plugin, params)
{
if(params != 4)
return PLUGIN_CONTINUE;
get_string(1, nazwy_klas[ilosc_nazw], MAX_WIELKOSC_NAZWY);
get_string(2, opisy_klas[ilosc_nazw], MAX_WIELKOSC_OPISU);
czakra[ilosc_nazw] = get_param(3);
odpocznij[ilosc_nazw] = get_param(4);
return ilosc_nazw;
}
Do tego rejestruje mój plugin o to takim kodemNU_register(nazwa, opis, mana, odpocznij);
I teraz moje pytanie grzmi jak zrobić takie coś w stylu wywołania np:
NU_Wywołaj(id, "Nazwa")i jak zrobić aby przy takim wywołaniu czytało funkcje z danego publica.
DarkGL
24.04.2012
nie widzę tu rejestrowania natywu w plugin_natives

zarejestruj kolejny natyw który będzie zwracał dane z tablic które ustawiasz w pierwszym natywie
I teraz moje pytanie grzmi jak zrobić takie coś w stylu wywołania np:
NU_Wywołaj(id, "Nazwa")
i jak zrobić aby przy takim wywołaniu czytało funkcje z danego publica.
zarejestruj kolejny natyw który będzie zwracał dane z tablic które ustawiasz w pierwszym natywie
ELOS
24.04.2012
No dobra gdy już to zrobiłem no to co dalej mam robić skoro nadal nie wiem jak pobrać i wykonać działanie drugiego pluginu gdzie użyłem zarejestrowania natywu
Nie wiem czy mnie dobrze zrozumieliście chcę po prostu zarejestrować z innego pluginu daną rzecz, aby móc ją potem odtworzyć w mniej więcej takim wyglądzie
NU_register(nazwa, opis, mana, odpocznij);
Tak czytałem to 3 razy zanim napisałem na forum i nadal mi nie wychodzi.czytałeś http://amxx.pl/topic/20034-natywy/ ?
Nie wiem czy mnie dobrze zrozumieliście chcę po prostu zarejestrować z innego pluginu daną rzecz, aby móc ją potem odtworzyć w mniej więcej takim wyglądzie
NU_Wywołaj(id, "Nazwa")Nie chce tworzyć do każdego pluginu osobnego natywu.
Zapalka
24.04.2012
DarkGL podał ci linka, przeczytaj cały temat a się wszystkiego dowiesz, nie ma co pisać dwa razy to samo.
Dobra, więc musisz utworzyć kilka tablic, które będą trzymały dane podawane przy rejestracji dodatkowego pluginu.
W pluginie, w którym wywołujesz natyw piszesz: "new ilosc=NU_register(...);"
Wynik, który zwróci plugin "dowodzący" będziesz miał w zmiennej ilosc.
Natomiast w funkcji, którą wykonuje natyw dopisujesz do tablic wszystkie dane, które przekazał drugi plugin oraz pasowałoby zwiększyć utworzoną wcześniej zmienną globalną, która będzie trzymała ilość np. klas.
Użytkownik Zapalka edytował ten post 24.04.2012 16:13
Dobra, więc musisz utworzyć kilka tablic, które będą trzymały dane podawane przy rejestracji dodatkowego pluginu.
W pluginie, w którym wywołujesz natyw piszesz: "new ilosc=NU_register(...);"
Wynik, który zwróci plugin "dowodzący" będziesz miał w zmiennej ilosc.
Natomiast w funkcji, którą wykonuje natyw dopisujesz do tablic wszystkie dane, które przekazał drugi plugin oraz pasowałoby zwiększyć utworzoną wcześniej zmienną globalną, która będzie trzymała ilość np. klas.
Użytkownik Zapalka edytował ten post 24.04.2012 16:13
ELOS
24.04.2012
Kawałek mojego kodu
No tu coś takiego mam no to domyślam się że w tym pluginie mam dobrze i teraz w głównym pluginie jak mam zrobić aby tamte wartości były przekazywane w takim formacie aby szło je odczytać po przez jakieś id czy coś bo normalnie to jest jedna wielka mieszanka która się będzie nadpisywać w przypadku zwykłego natywu (bynajmniej mi się tak zdaje)
new const nazwa[] = "Nazwa";
new const opis[] = "Opis";
new mana = 40; /// Potrzebna mana
new odpocznij = 6; /// Odpoczynek liczony 0,5sekundy w tym przypadku trwa 3 sekundy.
/////////////////////////////////////////////////////////
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
NU_register(nazwa, opis, mana, odpocznij);
gMaxPlayers = get_maxplayers();
}
No tu coś takiego mam no to domyślam się że w tym pluginie mam dobrze i teraz w głównym pluginie jak mam zrobić aby tamte wartości były przekazywane w takim formacie aby szło je odczytać po przez jakieś id czy coś bo normalnie to jest jedna wielka mieszanka która się będzie nadpisywać w przypadku zwykłego natywu (bynajmniej mi się tak zdaje)
ELOS
24.04.2012
Rejestruje natyw.
Co do tego publica zarejestruj jestem pewny że jest zły.
public plugin_natives()
{
register_library("nu");
register_native("NU_registe", "Zarejestruj");
}
natywpublic Zarejestruj(plugin, params)
{
if(params != 4)
return PLUGIN_CONTINUE;
get_string(1, nazwy_klas[ilosc_nazw], MAX_WIELKOSC_NAZWY);
get_string(2, opisy_klas[ilosc_nazw], MAX_WIELKOSC_OPISU);
czakra[ilosc_nazw] = get_param(3);
odpocznij[ilosc_nazw] = get_param(4);
return ilosc_nazw;
}Co do tego publica zarejestruj jestem pewny że jest zły.
sebul
24.04.2012
"ilosc_nazw" oczywiście masz gdzieś w globalnych zmiennych?
Musi być tak
czyli wpisy w tabeli będą się zaczynać od 0, albo tak
czyli wpisy będą się zaczynać od 1.
Do tego musisz dać jakiś warunek, co by nie dało się przepełnić tabel.
Musi być tak
public Zarejestruj(plugin, params)
{
if(params != 4)
return PLUGIN_CONTINUE;
get_string(1, nazwy_klas[ilosc_nazw], MAX_WIELKOSC_NAZWY);
get_string(2, opisy_klas[ilosc_nazw], MAX_WIELKOSC_OPISU);
czakra[ilosc_nazw] = get_param(3);
odpocznij[ilosc_nazw] = get_param(4);
return ilosc_nazw++;
}
czyli wpisy w tabeli będą się zaczynać od 0, albo tak
public Zarejestruj(plugin, params)
{
if(params != 4)
return PLUGIN_CONTINUE;
get_string(1, nazwy_klas[++ilosc_nazw], MAX_WIELKOSC_NAZWY);
get_string(2, opisy_klas[ilosc_nazw], MAX_WIELKOSC_OPISU);
czakra[ilosc_nazw] = get_param(3);
odpocznij[ilosc_nazw] = get_param(4);
return ilosc_nazw;
}
czyli wpisy będą się zaczynać od 1.
Do tego musisz dać jakiś warunek, co by nie dało się przepełnić tabel.
Fili:P
24.04.2012
Robisz natyw do każdej danej, np. get_user_mana itd.
przykład z achieventów:
przykład z achieventów:
public _ach_get_target(plugin, params)
{
if(params != 1)
{
return 0;
}
new ach_id = get_param(1);
return ArrayGetCell(AchTarget, ach_id);
}
public _ach_get_name(plugin, params)
{
if(params != 3)
{
return 0;
}
new ach_id = get_param(1);
new iAchName[64];
ArrayGetString(AchName, ach_id, iAchName, 63);
set_string(2, iAchName, get_param(3));
return 1;
}
Zapalka
24.04.2012
Utwórz nowy natyw, w którym będziesz zwracał daną wartość, np. funkcja natywu: "public PobierzNazwe(id) return nazwy_klas[id];"
I w drugim pluginie tak: "new nazwa=PobierzNazwe(jakiesID);"
Jako id podstawiasz identyfikator klasy, który otrzymujesz przy rejestrowaniu danego pluginu.
#Edit
Fii mnie uprzedził
Użytkownik Zapalka edytował ten post 24.04.2012 16:58
I w drugim pluginie tak: "new nazwa=PobierzNazwe(jakiesID);"
Jako id podstawiasz identyfikator klasy, który otrzymujesz przy rejestrowaniu danego pluginu.
#Edit
Fii mnie uprzedził
Użytkownik Zapalka edytował ten post 24.04.2012 16:58
ELOS
24.04.2012
czyli przykładowo coś takiego zadziała ?
Jeżeli tak to użycie będzie
1 - to idenfikator
public Native_KosztMana(plugin, params) koszt_mana=params;
Jeżeli tak to użycie będzie
Native_KosztMana(1)?
1 - to idenfikator
Zapalka
24.04.2012
Nie.
Zrób to tak:
I użycie:
Tylko przy rejestrowaniu natywu musisz dodać trzeci argument(style) i nadać mu wartość 1.
Użytkownik Zapalka edytował ten post 24.04.2012 17:15
Zrób to tak:
public Native_KosztMana(id)
return koszt_mana[id];
I użycie:
new koszt=Native_KosztMana(1);
Tylko przy rejestrowaniu natywu musisz dodać trzeci argument(style) i nadać mu wartość 1.
register_native("Native_KosztMana", "Native_KosztMana", 1);
Użytkownik Zapalka edytował ten post 24.04.2012 17:15
ELOS
24.04.2012
A czy w jakiś sposób zamiast id idzie wpisać nazwę z consta nazwa?
aby
aby
Native_KosztMana(1);zamienić na np
Native_KosztMana("Test");
Zapalka
24.04.2012
Wtedy musisz znaleźć id wybranego elementu. np.
No i możesz wtedy zrobić tak:
public Native_PobierzID(nazwa[])
{
for(new i=0;i<ilosc_nazw;i++)
{
if(equal(nazwy_klas[i],nazwa))
return i;
}
return -1;
}
No i możesz wtedy zrobić tak:
Native_KosztMana(Native_PobierzID("Test"));
ELOS
24.04.2012
A czy nie da się od razu tego wbudować w funkcje zarejestruj albo kosztmana aby nie przedłużać kodu ?
I teraz jeszcze jedno pytanie jak użyć np publica
I teraz jeszcze jedno pytanie jak użyć np publica
public start(id)
{
//kod
}
W danym pluginie używając
Native_PobierzID("Test")




