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
 

Bad HypnotiC - zdjęcie

Bad HypnotiC

Rejestracja: 14.02.2016
Aktualnie: Nieaktywny
Poza forum Ostatnio: 29.07.2016 21:14
-----

#700916 Fiat126p do cs 1.6!

Napisane przez Epal w 18.05.2015 09:57

Przedstawiam wam malucha  którego przekonwektorowałem z gta sa i porawiłem w nim niektóre rzeczy. To jest piersza wersja jeszcze zrobie wersje hard tunning z bogatym wnętrzem itd.

23n6bch13p2o.jpg

 

Załączone pliki


  • +
  • -
  • 9


#189630 Call of Duty: MW Mod [UPDATE]

Napisane przez QTM. Peyote w 18.11.2010 18:56

Załączony plik  testyq.png   36,93 KB  13 Ilość pobrań


Nowa wersja modyfikacji Call of Duty: MW.
Główną zmianą jest budowa moda.
Teraz wszystkie perki(przedmioty) i klasy są oddzielnymi pluginami.

Podziękowania dla:
MieTeK - za grafa.
Szyfrant - za testa.
Załączony plik  testbs.png   36,15 KB  9 Ilość pobrań


say /klasa - Otwiera menu wyboru klasy.
say /klasy - Otwiera menu opisów klas.
say /perk - Pokazuje informacje o posiadanym perku.
say /perki - Otwiera menu opisów perków.
say /wyrzuc - Wyrzuca aktualny perk.
say /reset - Resetuje statystyki.
say /statystyki - Pokazuje aktualne statystyki.
say /pomoc - Tajne.
Załączony plik  testue.png   34,95 KB  15 Ilość pobrań


cod_killxp 10 - Doswiadczenie za zabojstwo.
cod_winxp 50 - Doswiadczenie za wygrana.
cod_damagexp 1 - Doswiadczenie za 20 obrazen.
cod_savetype 1 - Typ zapisu 1- Nick 2-SteamID 3-IP.
cod_maxlevel 200 - Maksymalny poziom.
cod_levelratio 35 - Ustawia ile doswiadczenia potrzebne do zdobycia 1 poziomu.
cod_weaponsblocking 1 - blokowanie podnoszenia broni
Załączony plik  testhm.png   36,83 KB  16 Ilość pobrań


Kopiujemy zawartość folderu cstrike z CodMod.rar do folderu cstrike na serwerze.
Nic nie trzeba dopisywać do plugins.ini!

Załączony plik  testdi.png   36,58 KB  12 Ilość pobrań

(Tylko dla skrypterów)

forward cod_perk_changed(id, perk);
/*------------------------------
Forward wysylany do wszystkich pluginów w momencie zmiany perku
------------------------------*/


forward cod_class_changed(id, klasa);
/*------------------------------
Forward wysylany do wszystkich pluginów w momencie zmiany klasy
------------------------------*/


forward cod_perk_enabled(id, wartosc);
/*------------------------------
Forward wysylany do pluginu z ktorego zarejestrowany jest perk w momencie aktywacji
------------------------------*/


forward cod_perk_disabled(id);
/*------------------------------
Forward wysylany do pluginu z ktorego zarejestrowany jest perk w momencie dezaktywacji
------------------------------*/


forward cod_perk_used(id);
/*------------------------------
Forward wysylany do pluginu z ktorego zarejestrowany jest perk w momencie uzycia perku
------------------------------*/


forward cod_class_enabled(id);
/*------------------------------
Forward wysylany do pluginu z ktorego zarejestrowana jest kasa w momencie aktywacji
------------------------------*/


forward cod_class_disabled(id);
/*------------------------------
Forward wysylany do pluginu z ktorego zarejestrowana jest kasa w momencie dezaktywacji
------------------------------*/
Załączony plik  testkdr.png   34,98 KB  18 Ilość pobrań

(Tylko dla skrypterów)

native cod_get_user_xp(id);
/*------------------------------
Zwraca doswiadczenie gracza
------------------------------*/


native cod_get_user_level(id);
/*------------------------------
Zwraca poziom gracza
------------------------------*/


native cod_get_user_points(id)
/*------------------------------
Zwraca punkty gracza
------------------------------*/


native cod_set_user_xp(id, wartosc);
/*------------------------------
Ustawia doswiadczenie gracza
------------------------------*/


native cod_get_user_class(id);
/*------------------------------
Zwraca klase gracza
------------------------------*/


native cod_set_user_class(id, klasa, zmien=0);
/*------------------------------
Ustawia klase gracza,
jezeli zmien=1 zmienia ja natychmiast
------------------------------*/


native cod_get_user_perk(id, &wartosc=0);
/*------------------------------
Zwraca perk gracza,
oraz przypisuje zmiennej wartosc wartosc perku
------------------------------*/


native cod_set_user_perk(id, perk, wartosc=-1, pokaz_info=1);
/*------------------------------
Ustawia perk gracza.
Jezeli wartosc = -1,
wartosc perku bedzie losowa.
Jezeli perk = -1 perk
bedzie losowy
------------------------------*/


native cod_get_user_health(id, zdrowie_zdobyte=1, zdrowie_klasy=1, zdrowie_bonusowe=1);
/*------------------------------
Zwraca punkty statystyki zdrowie
------------------------------*/


native cod_set_user_bonus_health(id, wartosc);
/*------------------------------
Ustawia dodatkowe punkty statystyki zdrowie
------------------------------*/


native cod_get_user_intelligence(id, inteligencja_zdobyta=1, inteligencja_klasy=1, inteligencja_bonusowa=1);
/*------------------------------
Zwraca punkty statystyki inteligencja
------------------------------*/


native cod_set_user_bonus_intelligence(id, wartosc);
/*------------------------------
Ustawia dodatkowe punkty statystyki inteligencja
------------------------------*/


native cod_get_user_trim(id, kondycja_zdobyta=1, kondycja_klasy=1, kondycja_bonusowa=1);
/*------------------------------
Zwraca punkty statystyki kondycja
------------------------------*/


native cod_set_user_bonus_trim(id, wartosc);
/*------------------------------
Ustawia dodatkowe punkty statystyki kondycja
------------------------------*/


native cod_get_user_stamina(id, wytrzymalosc_zdobyta=1, wytrzymalosc_klasy=1, wytrzymalosc_bonusowa=1);
/*------------------------------
Zwraca punkty statystyki wytrzymalosc
------------------------------*/


native cod_set_user_bonus_stamina(id, wartosc);
/*------------------------------
Ustawia dodatkowe punkty statystyki wytrzymalosc
------------------------------*/


native cod_points_to_health(id, ilosc);
/*------------------------------
Przydziela punkty do statystyki zdrowie
------------------------------*/


native cod_points_to_intelligence(id, ilosc);
/*------------------------------
Przydziela punkty do statystyki inteligencja
------------------------------*/


native cod_points_to_trim(id, ilosc);
/*------------------------------
Przydziela punkty do statystyki kondycja
------------------------------*/


native cod_points_to_stamina(id, ilosc);
/*------------------------------
Przydziela punkty do statystyki wytrzymalosc
------------------------------*/


native cod_inflict_damage(atakujacy, ofiara, Float:obrazenia, Float:czynnik_inteligencji=1.0, byt_uszkadzajacy=0, dodatkowe_flagi=0);
/*------------------------------
Zadaje obrazenia z uwzglednieniem inteligencji
------------------------------*/


native cod_get_perkid(const nazwa_perku[]);
/*------------------------------
Zwaca numer perku o podanej nazwie
------------------------------*/


native cod_get_perks_num();
/*------------------------------
Zwaca ilosc perkow
------------------------------*/


native cod_get_perk_name(perk, Return[], len);
/*------------------------------
Kopiuje nazwe perku do Return
------------------------------*/


native cod_get_perk_desc(perk, Return[], len);
/*------------------------------
Kopiuje opis perku do Return
------------------------------*/


native cod_get_classid(const nazwa_klasy[]);
/*------------------------------
Zwaca numer klasy o podanej nazwie
------------------------------*/


native cod_get_classes_num();
/*------------------------------
Zwaca ilosc klas
------------------------------*/

native cod_get_class_name(perk, Return[], len);
/*------------------------------
Kopiuje nazwe klasy do Return
------------------------------*/


native cod_get_class_desc(perk, Return[], len);
/*------------------------------
Kopiuje opis klasy do Return
------------------------------*/


native cod_give_weapon(id, bron);
/*------------------------------
Daje okreslona bron oraz pozwala na jej posiadanie
------------------------------*/


native cod_take_weapon(id, bron);
/*------------------------------
Zabiera okreslona bron oraz zabrania jej posiadania
------------------------------*/


native cod_set_user_shield(id, wartosc);
/*------------------------------
Ustawia tarcze gracza.
------------------------------*/


native cod_set_user_nightvision(id, wartosc);
/*------------------------------
Ustawia noktowizor gracza.
------------------------------*/


native cod_register_perk(const nazwa[], const opis[], min_wartosc=0, max_wartosc=0);
/*------------------------------
Rejestruje nowy perk oraz zwraca jego numer
------------------------------*/


native cod_register_class(const nazwa[], const opis[], bronie, punkty_zdrowia, punkty_kondycji, punkty_inteligencji, punkty_wytrzymalosci);
/*------------------------------
Rejestruje nowa klase oraz zwraca jej numer
------------------------------*/    


native cod_get_level_xp(poziom);
/*------------------------------
Zwraca ilosc potrzebnego doswiadczenia do przejscia danego poziomu
------------------------------*/
Załączony plik  testpx.png   36,79 KB  16 Ilość pobrań
Załączony plik  testyi.png   36,64 KB  16 Ilość pobrań

----------------> Link
Załączony plik  CodMod.rar   965,15 KB  39676 Ilość pobrań

Poprawiona wersja zapisu do pliku vault -> [cod nowy] Call of Duty: MW Mod %5BUPDATE%5D - post #328

Ostatnie zmiany:
  • Naprawione natywy cod_get_class_name i cod_get_class_desc i błąd z pojawiającą się informacją o zdobyciu poziomu.05.01.11-17:03
  • Usunięte bugi crashujące serwer, dodane 5 nowych natywów, blokowanie podnoszenia broni w stylu starego CodModa12.12.10-17:00
  • Dodane param_convert do get_perk_name/desc i get_class_name/desc oraz dodane poprzednie zmiany do *.amxx24.11.10-20:03
  • Naprawiony błąd z brakiem fraga za zabicie z rakiety, miny i dynamitu21.11.10-19:07
  • Usunięty client_cmd z pętli i dodany natyw cod_get_user_level21.11.10-12:07
  • Naprawiony perk notatki sapera i poprawiona funkcja UstawPerk19.11.10-12:35
  • Naprawiony natyw cod_get_perkid19.11.10-21:44
  • Usunięty bug z niewłaściwą losową wartością perku. Od teraz cod_perk_enabled wysyła numer perku, a cod_class_enabled numer klasy19.11.10-18:51
  • Dodana klasa Admirał(dawny Rambo) i naprawiony perk Tajemnica Generała.[sup]19.11.10-16:06
  • Poprawiony plik "codmod.inc" i małe zmiany. [sup]19.11.10-15:00
Zgłaszajcie bugi i zaglądajcie co jakiś czas czy nie ma łatek.
  • +
  • -
  • 323


#641369 Jak dodać klasy/perki w grze na botach ? Cs 1.6

Napisane przez Ventri w 01.06.2014 15:13

Zainstaluj w cstrike amxmod'a. (http://www.amxmodx.o...aller-1.8.2.exe)

Pobierz/zrób paczkę Call Of Duty Mod (http://amxx.pl/paczki/)

Dodaj PodBoty (http://darkgl.amxx.p...lacja-podbotow/)

Wgraj ją do folderu cstrike.

Ciesz się grą.


  • +
  • -
  • 2


#718372 Jak pisać pluginy - przykład Exp Mod

Napisane przez wonsz żeczny w 17.01.2016 15:12

Witam.

W tym poradniku zaprezentuję Ci jak pisać pluginy i jeżeli nigdy nie napisałeś żadnego pluginu to będzie to twój pierwszy dobry plugin.

A teraz rozluźnij się, włącz cichą muzykę oraz zadbaj aby w twoim otoczeniu nikt Ci nie przeszkadzał.

Jeżeli chcesz naprawdę się czegoś nauczyć to przeczytaj cały post dokładnie i staraj się wszystko zrozumieć.

Gotowy? Do dzieła!

 

Stwórz sobie plik .sma

Aby to zrobić stwórz zwykły plik tekstowy i otwórz go po czym w lewym górnym rogu wybierz Zapisz jako.

W pole Nazwa pliku wpisz ExpMod.sma a niżej w typ zaznacz Wszystkie pliki.

 

Okej. Otwórz go i dodaj podstawową biblioteke

#include <amxmodx>

dalej zadefiniuj nazwę pluginu, wersję oraz autora.

#define PLUGIN "ExpMod"
#define VERSION "1.0"
#define AUTHOR "Nick"

Jako Nick wpisz swoją nazwę, tak ty będziesz autorem tego pluginu.

 

Teraz trzeba zapublikować podstawową funkcję czyli

public plugin_init()
{

tutaj najpierw rejestrujemy to co zadefiniowaliśmy.

	register_plugin( PLUGIN, VERSION, AUTHOR )

Okej. Jako, że to jest Exp Mod musimy też zarejestrować Zabicie gracza aby dostawać exp za zabicie.

Robimy to za pomocą tego:

	register_event( "DeathMsg", "DeathMsg", "a" )

Drugie DeathMsg odnosi nas do zapublikowania tej rejestracji, więc robimy to.

public DeathMsg()
{

Dobrze Ci idzie! :D

Teraz tworzymy zmienne przechowujące informacje o osobie która Zabija oraz Ginie.

	new Zabojca = read_data( 1 )
	new Ofiara = read_data( 2 )

Teraz bardzo ważna rzecz. Trzeba stworzyć warunek.

	if( Zabojca == Ofiara )
	return PLUGIN_HANDLED

Pytanie. Kiedy Zabójca jest Ofiarą? Jest wtedy gdy popełnia samobójstwo np. spadając z dużej wysokości lub ginie poprzez elementy na mapie jak lawa czy jakieś kolce.

A co robi return PLUGIN_HANDLED ? Linijka ta "zatrzymuje" działanie pluginu jeżeli Zabójca jest Ofiarą.

Wszystko jasne? Lecim dalej.

Teraz trzeba stworzyć warunek czy osoba zabijająca jest "Graczem". Wygląda to tak.

	if( Gracz( Zabojca ) )
	{

Zaraz zaraz. Skąd silnik ma to wiedzieć? Dowiesz się w dalszej części poradnika. Gracz() odpowiednio zapublikujemy!

Teraz jeżeli te warunki są spełnione możemy dodać graczowi Exp.

	DodajExp( Zabojca )

To też zapublikujemy.

Ale też po dodaniu Expa trzeba sprawdzić czy czasem nie trzeba dodać poziomu. Więc dodajemy linjke

	SprawdzPoziom( Zabojca )

oraz

	return PLUGIN_CONTINUE
}

Sprawę zabijania mamy za sobą!

Teraz publikujemy dodawanie expa.

public DodajExp( id )
{

Pokażę ci jak również dodać exp dla vipa!

	if(get_user_flags(id) & ADMIN_LEVEL_H)
	{
	Exp[ id ] = Exp[ id ] + 20
	} else {
	Exp[ id ] = Exp[ id ] + 10
	}
}

Jak widzisz dodaliśmy warunek, jeżeli gracz posiada flage ADMIN_LEVEL_H dostanie 20 expa.

po czym dałem "else" znaczy ono dokładnie "jeśli nie" czyli jeśli gracz nie ma tej flagi dostanie 10 expa.

Pokazała się nowa rzecz czyli Exp[ id ]

Na samej górze pod definiami dodajemy więc 

new Exp[33]

Zmienna która będzie przechowywała informacje o naszym expie.

Teraz publikujemy sprawdzanie naszego expa.

public SprawdzPoziom( id )
{

pod czym dodajemy też warunek ale troszeczkę inny ale nie będę Ci nim mieszał w głowie i mówił dlaczego on tutaj się znajduje.

	while( Exp[ id ] >= POZIOMY[ Poziom[ id ] ] && Poziom[ id ] < MAXPOZIOM )
		Poziom[ id ] ++

Co tu się dzieje?

Oznacza to, jeśli Exp gracza jest "większy lub równy" od wymaganego poziomu to doda nam poziom w góre.

Jest też drugi warunek po && oznacza on, że doda nam poziom tylko wtedy gdy poziom ma być mniejszy niż maxymalny poziom.

Pokazały się nowe rzeczy jak m.in. Poziom[ id ]

Przechowuje on informacje o naszym poziomie więc musimy dodać zmienną. Wiesz gdzie ją dodać z przykładu zmiennej expa.

new Poziom[33]

Pokazało się nawet MAXPOZIOM

To już rzeba zadefiniować

#define MAXPOZIOM 100

Oraz coś jak POZIOMY[ Poziom[ id ] ]

Do tego też trzeba stworzyć zmienną do przechowywania tych informacji.

//Wygenerowane na amxx.pl
new const POZIOMY[ MAXPOZIOM ] = {
	0,
	81, 102, 251, 475, 766, 1120, 1577, 2093, 2644, 3263, 
	4040, 4888, 5785, 6745, 7829, 8926, 10119, 11340, 12809, 14402, 
	16042, 17686, 19365, 21050, 22818, 24625, 26584, 28702, 30985, 33332, 
	35762, 38212, 40758, 43443, 46212, 49003, 51956, 54933, 58010, 61135, 
	64261, 67489, 70734, 74087, 77444, 80864, 84447, 88269, 92166, 96063, 
	100095, 104191, 108329, 112555, 116927, 121347, 125838, 130332, 134840, 139401, 
	144071, 148823, 153579, 158594, 163792, 169027, 174347, 179702, 185179, 190663, 
	196194, 201775, 207372, 213145, 218925, 224925, 230931, 237143, 243361, 249714, 
	256163, 262627, 269118, 275795, 282515, 289287, 296152, 303085, 310096, 317283, 
	324512, 331833, 339156, 346534, 354000, 361544, 369225, 376999, 384826
}

Zaraz zaraz.. tutaj mamy POZIOMY[ MAXPOZIOM ] a tam POZIOMY[ Poziom[ id ] ]

To określa jaki mamy poziom czyli np. mamy poziom expa 102 czyli poziom 2 bodajże :D

 

Teraz jescze zamykamy naszą publikacje SprawdzPoziom( id ) za pomocą tego

	return PLUGIN_CONTINUE
}

Okej. Mieliśmy jeszcze zapublikować Gracza.

public Gracz( id )
{

i dodajemy waruneczek :)

	if( is_user_connected( id ) && is_user_alive( id ) )
		return true
	
	return false 
}

Oznacza on, że jeżeli gracz jest połączony oraz gracz jest żywy to wtedy zwraca "true" czyli prawdziwość.

Po czym jeżeli to się stało zwracamy fałszywość.

 

Szkielet expa mamy za sobą, zmienne przechowują informacje ale chwilowo czyli na 1 mape.

Trzeba je zapisać na kolejne mapy, użyjemy do tego zapis nvault na nick.

Jest to już w innej bibliotece niż <amxmodx> więc dodajemy ją na górze.

#include <nvault> 

Potem dodajemy 2 publikacje.

public client_connect( id )
{
	WczytajExp( id )
}

Czyli przy połączeniu się gracza z serwerem wczyta exp, oczywiście musimy to potem zapublikować.

Ale teraz dodajmy jeszcze 

public client_disconnect( id )
{
	ZapiszExp( id )
}

Zapisujemy exp przy rozłączeniu gracza z serwerem.

Teraz nasze kochane publikacje:

public WczytajExp( id )
{

Pod czym dodajemy nasz zapis na nick

	new name[ 35 ]
	new vaultdata[ 256 ]
	new vaultkey[ 64 ]
	get_user_name( id, name, 34 )
			
	format( vaultkey, 63, "%s-NAME", name )	
	format( vaultdata,255, "%i#%i#", Poziom[ id ], Exp[ id ] ) 	
	nvault_get( vault, vaultkey, vaultdata, 255 ) 
	replace_all( vaultdata , 255, "#", " " )

	new poziom[ 32 ], exp[ 32 ]

	parse( vaultdata, poziom, 31, exp, 31 ) 
	Poziom[ id ] = str_to_num( poziom )
	Exp[ id ] = str_to_num( exp ) 

	return PLUGIN_CONTINUE
}

O co tutaj chodzi.. :D

Na początku mamy zmienne które przechowają informacje o nazwie gracza oraz dane nvault po czym te informacje zostaną zapisane w pliku na serwerze.

Dalej tworzymy tzw. format czyli co ma się znajdować w tym pliku. Znajdować się będzie np. takie coś:

Wonsz żeczny-name

oraz

10#1346

czyli mamy 10 poziom i 1347 expa. (przykład)

Te informacje będą wczytywane.

Publikujemy 

public ZapiszExp( id )
{

pod czym znów zmienne oraz dane do zapisywania

	new name[ 35 ]
	get_user_name( id, name, 34 )
	new vaultdata[ 256 ]
	new vaultkey[ 64 ]
			
	format( vaultkey, 63, "%s-NAME", name )
	format( vaultdata, 255, "%i#%i#", Poziom[ id ], Exp[ id ] )
	nvault_set( vault , vaultkey, vaultdata ) 
}

Mamy też rzecz nową czyli vault

Chwilowa informacja, musimy oczywiście stworzyć z tym zmienną na samej górze czyli

new vault

Teraz zajmiemy się utworzeniem pliku na serwerze w którym zapisywać się będą dane.

Robimy to w publikacji plugin_init

	vault = nvault_open( "ZapisExpMod" ) 

Gdzie "ZapisExpMod" to będzie nazwa pliku.

 

 

Okej mamy piękny zapis a teraz stworzymy sobie napis na ekranie gdzie będzie pokazywany nasz poziom oraz exp.

Do tego tworzymy od razu zmienną do przechowania informacji o tym

new HUD

oraz użwamy tego

	HUD = CreateHudSyncObj()

Dodajemy to do publikacji plugin_init

 

Publikujemy naszego huda np. tak:

public PokazHUD( id )
{

oraz dodajemy warunek aby wszystko pięknie grało:

	if( !Gracz( id ) )
	return PLUGIN_HANDLED

A po co tam ten wykrzyknik? Wykrzyknik przed daną rzeczą oznacza jego przeciwność. Czyli jeżeli osoba nie jest graczem to 

zatrzymujemy plugin za pomocą return PLUGIN_HANDLED

 

Teraz tworzymy informacje o położeniu naszych napisów:

	set_hudmessage(255, 0, 0, 0.03, 0.30, 0, 0.0, 0.3, 0.0, 0.0)

Informacje o tym znajdziecie tutaj: http://amxx.pl/topic...domości-na-hud/

A dalej lecimy z napisami jakie mają być na tym ekranie 

	ShowSyncHudMsg(id, HUD , "Poziom: %d ^nExp: %d / %d", Poziom[ id ], Exp[ id ], POZIOMY[ Poziom[ id ] ] )

%d przenosi nas poza napisy i bierze informacje z danej zmiennej.

A dlaczego nie %s ? Z literką s bierzemy "słowa" a literka %d lub %i  liczby.

 

Zamykamy teraz naszą publikację 

	return PLUGIN_HANDLED
}

Zatrzymujemy działanie huda, ponieważ został on wyświetlony wiec aby się nie wyświetlał on nam cały czas.

Teraz musimy pokazać ten hud w danym momencie.

My pokażemy ten hud przy odrodzeniu gracza czyli w publikacji plugin_init rejestrujemy to odrodzenie

	RegisterHam( Ham_Spawn, "player", "Odrodzenie", 1 )

Pokazała się rejestracja z nowej biblioteki więc na samej górze dodajemy 

#include <hamsandwich>

A teraz nasze Odrodzenie zapublikujemy:

public Odrodzenie( id )
{
	set_task( 0.1, "PokazHUD", id, _, _, "b" )
}

W środku znajduje się set_task czyli po 0.1 sekundzie przejdzie do publikacji PokazHUD która nam ten hud wyświetli.

 
Jeżeli wam się podoba, mogę zrobić kolejny poradnik na przykładnie tworzenia np. sklepu oraz waluty do niego.
 

  • +
  • -
  • 10