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
 

Play4Fun - zdjęcie

Play4Fun

Rejestracja: 11.09.2011
Aktualnie: Nieaktywny
Poza forum Ostatnio: 14.09.2015 16:09
-----

#581101 Podwójny HUD

Napisane przez volshebnik w 28.10.2013 21:04

Albo ja ślepy jestem albo nie wiem, nie widzę parametrów jakie powinien posiadać set_hudmessage, lub kanał jest taki sam lub go brakuje.


  • +
  • -
  • 1


#581104 Podwójny HUD

Napisane przez GT Team w 28.10.2013 21:09

wogóle co ty zrobiłeś? :D
public write_hud2( id )
{
new Float:holdtime = 3.0
set_hudmessage(150, 0, 0,  0.03, 0.20, _, _, holdtime)
show_hudmessage(id,"PRZYKŁAD")
}
teraz wywołaj gdzieś w pluginie funkcję write_hud2(id) Oraz taka ciekawostka, jeśli nie wiesz. Jeśli korzystasz z AMXX STUDIO na górze masz zakładkę GENERATORS. Wybierz opcje Hudmessage Generator. Dalej to już z górki xD


#69839 Tworzenie menu

Napisane przez R3X w 27.06.2009 17:39

Tworzenie menu

Stary temat składa się tylko z jednej części i autor chyba nie zamierza kontynuować, więc opiszę tworzenie menu od podstaw.

Kilka słów wstępu.
Najpierw zajrzyj do komend i operacji bitowych. Pisząc tutorial zakładam, że czytelnik wie jak budować komendy i co to jest suma bitowa.
W przykładowych źródłach celowo pomijam stałe nagłówki (#include, #define) w celu zmniejszenia objętości tekstu. Kod bez nich się nie skompiluje!


Po pierwsze trzeba wiedzieć, że mamy do dyspozycji 2 metody tworzenia menu:
  • tzw. stara↵ - ręczna, wymaga więcej przygotowania, ale jest elastyczniejsza
  • tzw. nowa↵ - korzystamy z przygotowanych zasobów, za organizację menu odpowiadają natywne funkcje AMXX

Formatowanie

Niezależnie od metody, treść menu formatujemy tymi samymi znakami, a oto one:

^n - nowa linia
^t - tabulator
\w - dalszy tekst będzie miał kolor biały
\y - dalszy tekst będzie miał kolor zółty
\r - dalszy tekst będzie miał kolor czerwony
\d - dalszy tekst będzie miał kolor szary
\R - dalszy tekst będzie wyrównany do prawej

Przykładowe (stare) menu

\yWidzisz to menu?^n^n\w1. Tak^t2. Nie

na początku y, więc tekst do następnego znaku zmiany koloru będzie żółty
jako kolejne rozpoznajemy ^n, czyli po nagłówku "Widzisz to menu?" przechodzimy do nowej linii
następny ^n tworzy linijkę odstępu
teraz mamy w, czyli dalszy tekst będzie biały
ostatni jest ^t, który oddzieli opcję 'tak' od 'nie'

Efekt:

menu1.JPG






Metoda 1

Nasze menu jest pokazywane przy użyciu funkcji
show_menu ( index, keys, const menu[], time = -1, title[] = "" )
index - id gracza
keys - suma odpowiadająca używanym klawiszom, tylko te, które się w niej zawierają będą rozpoznawane przez menu
const menu[] - treść menu, czyli to co zostanie pokazane graczowi
time - czas utrzymania menu na ekranie w sekundach, -1 oznacza, aż do naciśnięcia klawisza z menu
title[] - tytuł, potrzebny do rozpoznania menu

Korzystając z wcześniejszego przykładu menu:
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");
}
public mymenu(id){
	show_menu(id, MENU_KEY_1| MENU_KEY_2, "yWidzisz to menu?^n^nw1. Tak^t2. Nie");
	return PLUGIN_HANDLED;
}
Z nowości mamy:

MENU_KEY_1| MENU_KEY_2

jest to suma bitowa stałych MENU_KEY_1 i MENU_KEY_2. Pierwsza odpowiada klawiszowi 1 (slot1), druga klawiszowi 2 (slot2). Razem stanowią zbiór klawiszy przechwytywanych przez menu.

Ogólnie mamy do dyspozycji 10 klawiszy:
#define MENU_KEY_1		(1<<0)
#define MENU_KEY_2		(1<<1)
#define MENU_KEY_3		(1<<2)
#define MENU_KEY_4		(1<<3)
#define MENU_KEY_5		(1<<4)
#define MENU_KEY_6		(1<<5)
#define MENU_KEY_7		(1<<6)
#define MENU_KEY_8		(1<<7)
#define MENU_KEY_9		(1<<8)
#define MENU_KEY_0		(1<<9)

Ok, pokazaliśmy graczowi menu, zdefiniowaliśmy klawisze, na które menu reaguje. Pora na przechwycenie zdarzeń menu.

Najpierw musimy przypisać naszemu menu jakąś publiczną funkcję. Służy do tego funkcja z
register_menu ( title[], keys, function[], outside=0 )
title - tytuł, potrzebny do rozpoznania menu, musi być dokładnie taki sam jak w show_menu
keys - suma klawiszy, powinna zawierać wszystkie możliwe do użycia w naszym menu klawiszy (np. gdy jedna z opcji jest dostępna tylko dla żywych graczy, jej klawisz również powinien być zsumowany)
function - nazwa publicznej funkcji, do której zostanie przekazane id i klawisz
outside - zmienimy na 1, gdy menu będzie z zewnętrznego źródła (inny plugin, silnik gry)

Kod powinien wyglądać tak:
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");
	
	register_menu("MyMenu",MENU_KEY_1|MENU_KEY_2,"cbMyMenu");
}
public mymenu(id){
	show_menu(id,MENU_KEY_1|MENU_KEY_2, "yWidzisz to menu?^n^nw1. Tak^t2. Nie",-1,"MyMenu");
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, key){
}

Suma klawiszy powtarza się, więc użyjmy stałej. Argumenty funkcji cbMyMenu to id gracza i użyty klawisz. Przyciski numerowane są od zera, więc naciśnięcie 1 prześle key=0, naciśnięcie 2 prześle key=1 itd. Dość mylące rozwiązanie, zwłaszcza patrząc na klawisz 0, dla którego key=9 Dołączona grafika
#define MYMENU_KEYS MENU_KEY_1|MENU_KEY_2
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");
	
	register_menu("MyMenu",MYMENU_KEYS,"cbMyMenu");
}
public mymenu(id){
	show_menu(id, MYMENU_KEYS, "yWidzisz to menu?^n^nw1. Tak^t2. Nie", -1, "MyMenu");
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, key){
	client_print(id, print_chat, "Wybrales opcje: %d", key+1);
}
Aby przypisać operacje danemu klawiszowi wygodnie jest zastosować switch().
#define MYMENU_KEYS MENU_KEY_1|MENU_KEY_2
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");
	
	register_menu("MyMenu",MYMENU_KEYS,"cbMyMenu");
}
public mymenu(id){
	show_menu(id,MYMENU_KEYS, "yWidzisz to menu?^n^nw1. Tak^t2. Nie",-1,"MyMenu");
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, key){
	switch(key){
		case 0:{
			client_print(id, print_chat, "Wybrales opcje Tak");
		}
		case 1:{
			client_print(id, print_chat, "Wybrales opcje Nie");
		}
	}
}

Oczywiście można dodać opcję Anuluj, dodając do sumy klawisz 0 i zmienić nieco treść menu. Nie trzeba dodawać case 9:, gdyż menu automatycznie zamknie się po złapaniu klawisza i nie ma potrzeby wykonywania innych czynności. Gdy chcesz zachować menu na wierzchu nawet po naciśnięciu klawisza za strukturą switch wywołaj funkcję mymenu(id), która ponownie je wyświetli.

------------------------------------------------------------------------------------------------------------------------------------------------


Metoda 2

Nowy styl stworzenia menu pozwala na dynamiczne nim zarządzanie. Tworzeniem treści menu zajmują się przygotowane funkcję, nasza praca polega na dostarczeniu informacji.

Pierwszą operacją jest stworzenie uchwytu. Pozostałe operacje wymagają do niego odwołania. Jeśli pokazujemy wszystkim to samo menu uchwyt może mieć zasięg globalny, a menu utworzone w plugin_init(). W innym razie menu tworzymy tuż przed wyświetleniem. Główna funkcja to:
menu_create ( title[], handler[], ml=0 )
title[] - tytuł, tutaj służy również za nagłówek menu (jeśli nie podamy własnego)
handler[] - nazwa publicznej funkcji, do której przekazywane będą informacje z menu
ml=0 - przestało być używane, nie podajemy

Podawanie klawiszy, na które reaguje menu jest niepotrzebne. Funkcja wyświetlająca potrafi rozpoznać niezbędne klawisze, zależnie od dostępnych opcji.

new gMyMenu
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	gMyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");	
}
public cbMyMenu(id, menu, item){
 
}

Tym razem funkcja cbMyMenu ma aż 3 argumenty: id - index gracza, menu - uchwyt menu, oraz item. Ten ostatni argument zawiera numer wybranej opcji (numerowane od zera). Pozwala np. za pomocą switch() przyporządkować operacje danej opcji. Jest to szczególnie wygodne przy menu wielostronnym. Trzeba pamiętać, że wartość item może być mniejsza od zera - opcja wyjścia z menu to item=-3.

Do dodawania opcji służy funkcja:
menu_additem(menu, const name[], const info[]="", paccess=0, callback=-1);
menu - uchwyt menu
const name[] - tekst opcji
const info[] - informacja wewnętrzna, w większości menu wartość nieistotna
paccess - poziom dostępu do menu, tak samo jak w przypadku komend, np. ADMIN_BAN
callback - w tym miejscu możemy przypisać funkcję kontrolną, o której później

new gMyMenu;
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	gMyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
	menu_additem(gMyMenu,"Witam");//item=0
	menu_additem(gMyMenu,"Czesc");//item=1
	menu_additem(gMyMenu,"Przyszedl Admin :D","",ADMIN_CHAT);//item=2
}
public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Witam");
		}
		case 1:{
			client_cmd(id, "say Czesc");
		}
		case 2:{
			client_cmd(id, "say Przyszedl Admin :D");
		}
	}
}

Mamy menu pokażmy je graczowi.
menu_display(id, menu, page=0);
id - index gracza
menu - uchwyt menu
page - podstrona menu

new gMyMenu;
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");
	
	gMyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
	menu_additem(gMyMenu,"Witam");//item=0
	menu_additem(gMyMenu,"Czesc");//item=1
	menu_additem(gMyMenu,"Przyszedl Admin :D","",ADMIN_CHAT);//item=2
		
}
public mymenu(id){
	menu_display(id, gMyMenu,0);
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Witam");
		}
		case 1:{
			client_cmd(id, "say Czesc");
		}
		case 2:{
			client_cmd(id, "say Przyszedl Admin :D");
		}
	}
}

menu2.JPG





Żeby pokazać więcej o nowym stylu menu przeniosę uchwyt i tworzenie do mymenu(id). Podstawą różnicą jest potrzeba zniszczenia menu po zakończeniu pracy.
menu_destroy ( menu )
menu - uchwyt menu

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");	
}
public mymenu(id){
	new MyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
	
	menu_additem(MyMenu,"Witam");//item=0
	menu_additem(MyMenu,"Czesc");//item=1
	menu_additem(MyMenu,"Przyszedl Admin :D","",ADMIN_CHAT);//item=2
	
	menu_display(id, MyMenu,0);
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Witam");
		}
		case 1:{
			client_cmd(id, "say Czesc");
		}
		case 2:{
			client_cmd(id, "say Przyszedl Admin :D");
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

menu_destroy() sprawia, że nasz uchwyt staje się bezużyteczny, czyści pamięć zajmowaną dotychczas przez menu. Oczywiście zamiast go niszczyć, możemy zostawić menu na ekranie. Wystraczy w cbMyMenu ponownie wywołać menu_display(). Wtedy nie powinniśmy dopuścić do wywołania menu_destroy a zwrócić nie PLUGIN_HANDLE tylko PLUGIN_CONTINUE, np. tak:

public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Witam");
			menu_display(id, menu);
			return PLUGIN_CONTINUE;
		}
		case 1:{
			client_cmd(id, "say Czesc");
		}
		case 2:{
			client_cmd(id, "say Przyszedl Admin :D");
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
Efekt: Gdy wybierzemy "Witam" menu pozostanie na ekranie.


Funkcja kontrolna

Do każdej z opcji możemy przypisać taką funkcję. Będzie ona decydować czy dana opcja jest aktywna (biała) czy nieaktywna (szara, bez reakcji na swój przycisk).

Najpierw utwórzmy uchwyt, tym razem dla publicznej funkcji.
menu_makecallback(const function[])
zwróconą wartość przekażemy do menu_additem:

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("mymenu","mymenu");	
}
public mymenu(id){
	new MyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
	new MyMenuFun=menu_makecallback("mcbMyMenu");
	
	menu_additem(MyMenu,"Witam","",0,MyMenuFun);//item=0
	menu_additem(MyMenu,"Czesc","",0,MyMenuFun);//item=1
	menu_additem(MyMenu,"Przyszedl Admin :D","",ADMIN_CHAT,MyMenuFun);//item=2
	
	menu_display(id, MyMenu,0);
	return PLUGIN_HANDLED;
}
public cbMyMenu(id, menu, item){
	switch(item){
		case 0:{
			client_cmd(id, "say Witam");
		}
		case 1:{
			client_cmd(id, "say Czesc");
		}
		case 2:{
			client_cmd(id, "say Przyszedl Admin :D");
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
public mcbMyMenu(id, menu, item){
	return ITEM_ENABLED;
}
Przypisana funkcja ma taką postać. Zwracana wartość decyduje o aktywności opcji. Ta funkcja sprawi, że wszystkie opcje będą aktywne. Zwrócenie ITEM_DISABLED spowoduje brak aktywności wszystkich/danej opcji zależnie od zastosowania.
public mcbMyMenu(id, menu, item){
	return ITEM_ENABLED;
}

Np. przez taką funkcję
public mcbMyMenu(id, menu, item){
	if(item==1)
		return ITEM_DISABLED;
	return ITEM_ENABLED;
}
Opcja "Czesc" będzie nieaktywna:

menu3.JPG






Dostosowanie

W starym stylu wygląd menu znacznie bardziej zależy od nas, jednak projektowanie menu o kilku stronach może być kłopotliwe. Nowa metoda tworzenia mimo schematycznej budowy ma kilka opcji, które pozwalają dostosować treść menu, ale oczywiście w mniejszym stopniu.

Potrzebuje nowej funkcji:
menu_setprop(menu, prop, ...);
menu - uchwyt menu
prop - wartość z listy:
#define MPROP_PERPAGE	1		/* Liczba opcji na stronę (param1 = liczba, 0=bez stronnicowania, 7=domyślnie) */
#define MPROP_BACKNAME	2		/* Nazwa opcji Back/Wstecz (param1 = tekst) */
#define MPROP_NEXTNAME	3		/* Nazwa opcji Next/Dalej (param1 = tekst) */
#define MPROP_EXITNAME	4		/* Nazwa opcji Exit/Wyjście (param1 = tekst) */
#define MPROP_TITLE	5		/* Nagł&#243;wek menu (param1 = tekst) */
#define MPROP_EXIT	6		/* Opcja wyjścia? (param1 = liczba, MEXIT_ALL - zawsze, MEXIT_NEVER- nidgy) */
#define MPROP_NOCOLORS	8		/* Czy usunąć automatyczne kolory(param1 = liczba, 0=domyślnie) */
#define MPROP_NUMBER_COLOR	10	/* Kolor opis&#243;w przycisk&#243;w (param1 = tekst, "r"=domyślny) */

Przykład użycia:
public mymenu(id){
	new MyMenu=menu_create("Jak sie przywitasz?","cbMyMenu");
	new MyMenuFun=menu_makecallback("mcbMyMenu");
	
	menu_additem(MyMenu,"Witam","",0,MyMenuFun);//item=0
	menu_additem(MyMenu,"Czesc","",0,MyMenuFun);//item=1
	menu_additem(MyMenu,"Przyszedl Admin :D","",ADMIN_CHAT,MyMenuFun);//item=2
	
	//opcja wyjścia "Wyjście" zamiast "Exit"
	menu_setprop(MyMenu,MPROP_EXITNAME,"Wyjscie");
 
	//zawsze pokaż opcję wyjścia
	menu_setprop(MyMenu,MPROP_EXIT,MEXIT_ALL);
 
	//kolor cyfry przycisku zmień na ż&#243;łty
	menu_setprop(MyMenu,MPROP_NUMBER_COLOR,"y");
	
	
	menu_display(id, MyMenu,0);
	return PLUGIN_HANDLED;
}

Rezultat:

menu4.JPG






Podsumowanie

Stare menu jest znacznie elastyczniejsze, pozwala nam wpłynąć bezpośrednio na całą treść menu, jednak wymaga więcej pracy. Nowy styl menu, zwłaszcza połączony z globalnymi tablicami standardowymi/dynamicznymi, pozwala nam znacznie zautomatyzować menu. Musimy wybrać między metodami zależnie od zapotrzebowania. Obie są składnikiem biblioteki , więc ma problemu wyboru modułów.

Początkującym programistom Pawna pod AMXX polecam nowy styl - unikniecie wielu błędów.

PS. Do zamknięcia obu menu możemy użyć funkcji:
#define hide_menu(%1) show_menu(%1,0,"^n")
/*
To samo co
public hide_menu(id)
	show_menu(id,0,"^n");
*/



Dodatek

W przykładach menu otwierało się na komendę. Aby pokazać je zaraz po wejściu na serwer należy użyć kodu:
#define TASK_SHOWMENU 12000
 
public client_putinserver(id)
	set_task(1.0, "show_menu_", id+TASK_SHOWMENU);
	
public show_menu_(tid){
	new id=tid-TASK_SHOWMENU;
	new iTeam=get_user_team(id);
 
	new menu_id, keys;
	new menuUp = player_menu_info( id, menu_id, keys );
 
	if ( iTeam && (menuUp <= 0 || menu_id < 0) )
		//Tu pokazujemy menu
		mymenu(id);
	else
		set_task(1.0, "show_menu_", tid);
}
który nie pozwoli nadpisać menu wyboru drużyny i modelu.
  • +
  • -
  • 64


#487930 Diablo Mod Core 1.1.0 PL

Napisane przez DarkGL w 07.12.2012 20:22

Diablo Mod Core 1.1.0 PL by DarkGL

Diablo Mod Core jest całkowicie nowym silnikiem Diablo Mod'a napisanym przezemnie jakiś czas temu ( dawno ^^ )

Dzięki zastosowaniu Forwardów i Natywów uzyskujemy łatwą możliwość rozbudowy moda bez zmian w głównym silnikiem
co przekłada się na możliwość łatwiejszej rozbudowy naszego serwera ( klas , itemów itp. )

Posiada on w sobie funkcje które nie są zaimplementowane w oryginalnej wersji diablomoda a które po prostu muszą być na serwerze DiabloMod

Co możemy znaleźć w silniku
  • Klasy i itemy to odzielne pluginy
  • System zarządzania renderem gracza
  • Nowy system zapisu sql
  • Dynamiczny zapis sql ( klasy mogą być dowolnie dodawane i usuwane )
  • Wbudowane anty kopiowanie leveli
  • Możliwość zapisu na steamid , nick , mieszane ( steamid dla steam i nick dla ns )
  • Prefixy w say
  • Większe możliwości konfiguracji
  • Poprawiony kod kuszy , granatów na ziemi i rzucanych nozy
  • Zestaw natywów i forwardów do rozbudowy moda
  • Wbudowany anty 0 HP Bug
  • Lista itemów
  • Kod jest znacznie lepszy od wersji diablo Micza
  • Dodatkowe opcje w menu rozdawania punktów
  • Informacje o awansie gracza w say
  • Poprawiony wygląd motd
  • Nowy system itemów
  • Wbudowana nowa wymiana itemami
  • Komendy na dawanie itemów i expa
  • Menu moda
  • Szybkie rozdawanie statystyk
  • Obsługa botów
  • Komenda /exp
  • Dwie nowe statystyki Pancerz i Szczescie
  • Event Diablo
  • System frakcji
  • Komendy /daj i /oddaj
  • Ustawianie nazwy gry
  • Zabezpieczenie przeciwko nabijaniu expa ( wymagana ilość graczy na serwerze ustawiane cvarem )
  • Krótkie komendy
  • Damage jest teraz modyfikowane w lepszy sposób niż poprzez event Damage
  • Wytrzymałość itemu
  • Event Diablo jest to tryb w którym wybierany jest jeden gracz i staje się on "Diablo" reszta graczy musi go zabić jeśli to się uda otrzymają oni dodatkowy exp. Oczywiście Diablo ma ułatwienia tzn. dużą ilość hp , fireballe , ma on też inny model
  • I jeszcze kilka innych rzeczy :)
Lista komend
Takie komendy jak
  • /czary
  • /skille
  • /exp
  • /menu
  • /wymiana
  • /wymien
  • /item
  • /przedmiot
  • /klasy
  • /klasa
  • /reset
  • /drop
  • /rune
  • /daj
  • /komendy
  • /event
Krótkie komendy
  • /k
  • /r
  • /d
  • /p
  • /i
  • /g
  • /ru
  • /w
  • /p
  • /h
  • /ko
  • /m
10_screenshots_2012-01-25_00005.jpg

Opisy klas
http://amxx.pl/topic...549-opisy-klas/

Jak napisałem wcześniej siłą tego moda jest możliwość konfiguracji więc teraz zajmiemy się tym

Najpierw konfiguracja w sma

#define HUD_TEXT ""
#define SQL_TABLE "diablo_nowe_klasy"
#define MAX_LEN_NAME 128
#define MAX_LEN_DESC 256
#define MAX_LEN_NAME_PLAYER 64
#define MAX_LEN_FRACTION 128
#define MAX 32
#define MAX_LEVEL 200
#define MAX_SKILL 100
#define BASE_SPEED 250.0
#define TASK_DEATH 100
#define TASK_RENDER 200
#define THROW_KNIFE_MODEL "models/diablomod/w_throwingknife.mdl"
#define THROW_KNIFE_CLASS "throwing_knife"
#define CLASS_NAME_CORSPE "fakeCorpse"
#define XBOW_ARROW "xbow_arrow"
#define TIME_HUD 1.0
#define GAME_DESCRIPTION "Diablo Mod"
#define ADMIN_FLAG_GIVE ADMIN_IMMUNITY
#define HELP_TASK_ID 91321
#define DIABLO_EVENT_SOUND "sound/diablo_taunt.mp3"
jest tego trochę ale najważniejsze dla nas to

HUD_TEXT
w którym ustawiamy czy jakiś tekst ma się wyświetlić nad hudem z informacjami gracza ( klasa etc. )
możemy tu dodać np. "Forum Serwera www.xyz.pl"

SQL_TABLE
Nazwa tabeli w sql

MAX
Ilość slotów dzięki tej opcji oszczędzimy pamięć serwerowi a i mod będzie działał lepiej

MAX_LEVEL
Maksymalny level

MAX_SKILL
Maksymalny poziom skilli ( umiejętności zręczność etc. )

ADMIN_FLAG_GIVE
Flaga którą musi mieć admin aby używać komend na dawanie Expa i Itemów

#define BOTY
//#define DEBUG
#define DEBUG_LOG "addons/amxmodx/logs/debug.log"
#define BOTY
zakomentuwujemy jeśli nie mamy botów na serwerze
usuwamy komentarz jeśli mamy ( komentarz czyli // )

#define DEBUG
Tryb debug dostajemy więcej informacji co aktualnie robi mod używane raczej tylko jeśli coś nie działa
jeśli wszystko jest ok lepiej to zakomentować

Możemy znaleźć jeszcze coś takiego

#define PREFIX_SAY "^x04[ DiabloMOD ]^x01"
jest to prefix jaki mają wiadomości wysyłane przez mod

Cvary
//sql
diablo_host host
diablo_user user
diablo_pass pass
diablo_db db
//typ zapisu 1 - nick 2 - steam id 3 - steamid lub nick zalezy czy gracz ma steam czy nie
diablo_save_type 3
//sredni level dla nowego gracza
diablo_avg 1
//ustawienia maga
flashlight_custom 1
flashlight_drain 1.0
flashlight_charge 0.5
flashlight_radius 8
flashlight_decay 90
//minimalna ilosc graczy aby dostawac exp
diablo_player_num 2
//ilosc dmg aby dostac 1 exp'a
diablo_dmg_exp 20
//xpbonus
diablo_xpbonus 5
/xpbonus2
diablo_xpbonus2 100
//ustawienia nekromanty czas odradzania
diablo_revival_time 3
//hp po ozywieniu ( + inteligencja wskrzeszajacego )
diablo_revival_health 25
//minimalny dystans od zwlok
diablo_revival_distance 70.0
//szybkosc rzuconego noza
diablo_knife_speed 1000
//dmg zadawane przez rzucony noz
diablo_knife 80.0
//dmg strzaly z kuszy
diablo_arrow 120.0
//mnoznik dla inteligencji przy obliczaniu dmg
diablo_arrow_multi 2.0
//szybkosc strzaly z kuszy
diablo_arrow_speed 1500
//ilosc wytrzymalosci itemu zabieranej przy zginieciu
diablo_durability 10
//koszt expa w rune
diablo_exp_price 14500
//koszt losowego przedmiotu w rune
diablo_random_price 9000
//koszt ulepszenia w rune
diablo_upgrade_price 5000
//koszt w /daj
diablo_price_daj 5000
//event on/off
diablo_event 1
//ilosc wymaganych dropow
diablo_drop_need 100
//hp diablo ( mnozone przez ilosc graczy )
diablo_diablo_hp 1000
//ilosc xp rozdzielane na tych ktozy zabija diablo
diablo_event_exp 10000
//kamera przy diablo 1 - widok zza plecow
diablo_camera 1
//ilosc punktow do rozdania za lvl
diablo_points 2
//ile hp za jeden punkt sily
diablo_strength_power 2
//ile reduckji za jeden punkt zrecznosci
diablo_reduce_power 0.03
//Miejsce wyświetlania informacji o klasie itemie etc. 0 - standardowy lewy dolny róg 1 - informacja hud ( podobnie jak w cod mod )
diablo_hud_mode 1
Cvary ustawiamy w pliku diablomod.cfg

Komendy admina
  • amx_giveexp - daje exp graczowi Użycie amx_giveexp <nick> <ile>
  • amx_giveitem - daje item graczowi Użycie amx_giveitem <nick> <iditemu>
Komendy techniczne
  • diablomod_version - zwraca używana wersję diablomoda
Opis komend
  • /klasy - otwiera listę klas
  • /klasa - otwiera menu klas do wyboru
  • /reset - resetuje rozdane punkty umiejętności
  • /drop - wyrzuca aktualnie posiadany przedmiot
  • /item - opis aktualnie posiadanego przedmiotu
  • /przedmiot - takie samo działanie jak /item
  • /gracze - lista graczy wraz z ich levelami i klasami
  • /czary - twoje statystyki
  • /skille - tak jak /czary
  • /rune - menu gdzie można kupić różne rzeczy
  • /wymiana - wymiana itemami
  • /wymien - tak jak /wymiana
  • /daj - oddaj item za kasę
  • /pomoc - krotka notatka o modzie
  • /komendy - ta lista
  • /exp - informacje o stanie twojego expa
  • /menu - menu moda
  • diablomod_version - wersja diablomoda używana na serwerze
Najważniejsza zmiana to umieszczenie item i klas w odzielnnych pluginach nowe pluginy dopisujemy do plugins-diablomod.ini w folderze configs
Jeżeli ktoś jest zainteresowany tworzeniem nowych itemów , klas lub dodatków radzę zapoznać się z dostepnymi sma i plikiem diablo_nowe.inc gdzie znajdziecie opis natywów i forwardów.

Natywy
  • rejestruje klase
    diablo_register_class(const szNazwa[],const iHealth,const szOpis[] = "" , iFlags = FLAG_ALL , const szFraction[] = "");
  • zwraca klase gracza
    diablo_get_user_class(id);
  • nazwe klasy pobiera
    diablo_get_class_name(classID , Return[] , len);
  • zwraca level
    diablo_get_user_level(id);
  • zwraca exp
    diablo_get_user_exp(id);
  • zwraca points
    diablo_get_user_points(id);
  • zwraca punkty agi
    diablo_get_user_agi(id);
  • zwraca punkty str
    diablo_get_user_str(id);
  • zwraca punkty dex
    diablo_get_user_dex(id);
  • zwraca punkty int
    diablo_get_user_int(id);
  • czy klasa gracza to klasa z tego pluginu
    diablo_is_class_from(id);
  • ustawia rendering graczowi
    diablo_set_user_render(id, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16 , Float:fTime = 0.0 )
  • diablo_add_extra_str( id , iIle );
  • diablo_add_extra_int( id , iIle );
  • diablo_add_extra_agi( id , iIle );
  • diablo_add_extra_dex( id , iIle );
  • czy ma taka klase
    diablo_is_this_class(id,szClass[]);
  • dodawanie speed graczowi
    diablo_set_speed(id,Float:fAmount);
  • ustawianie speed
    diablo_add_speed(id,Float:fAmount);
  • pobranie speed
    Float:diablo_get_speed(id)
  • pobranie dodatkowe speed
    Float:diablo_get_speed_extra(id);
  • diablo_reset_speed( id );
  • zadanie dmg
    diablo_damage(iVictim,iKiller,Float:fDamage,DiabloDamageBits:damageBits);
  • zabij
    diablo_kill(iVictim,iKiller,DiabloDamageBits:damageBits);
  • zadanie dmg w zasiegu
    diablo_create_explode(iKiller,Float:fOrigin[3],Float:fDamage,Float:fDist,bool:bExplode);
  • dodaje hp
    diablo_add_hp(id,iHp);
  • czy jest freezetime
    diablo_is_freezetime();
  • uruchom write hud
    diablo_write_hud_(id);
  • diablo_get_xpbonus();
  • diablo_get_xpbonus2();
  • daje xp
    diablo_add_xp(id,ile);
  • zabiera xp
    diablo_take_xp(id,ile);
  • dodaje noze
    diablo_add_knife(id,iIle);
  • diablo_set_user_grav(id,Float:fGrav);
  • diablo_add_user_grav(id,Float:fGrav);
  • Float:diablo_get_user_grav(id)
  • diablo_reset_grav( id );
  • diablo_give_user_trap(id,bool:give = true);
  • diablo_give_user_bow(id,bool:give = true);
  • diablo_show_hudmsg( id , Float:fTime , const szMessage[] , any:... );
  • diablo_render_cancel( id );
  • diablo_display_icon( id , enable , szNameIcon[] , red , green , blue );
  • diablo_display_fade( id,duration,holdtime,fadetype,red,green,blue,alpha );
  • diablo_give_xp( id , ile );
  • diablo_add_max_hp( id , ile );
  • diablo_register_item( Name[] , durability = 250 );
  • diablo_screen_shake( id , amplitude , duration , frequency );
  • diablo_set_max_hp( id , ile );
  • diablo_get_max_hp( id );
Forwardy
  • gdy klasa zostanie wybrana
    diablo_class_enabled(id);
  • gdy klasa zostanie zmieniona
    diablo_class_disabled(id);
  • przy zmianie broni
    diablo_weapon_deploy(id,wpnID,weaponEnt);
  • czyszczenie wewnetrznych zmiennych klasy
    diablo_clean_data(id);
  • ustawianie wewnetrznych zmiennych klasy
    diablo_set_data(id);
  • prethink gracza
    diablo_preThink(id);
  • diablo_preThinkItem(id);
  • posthink gracza
    diablo_postThink(id);
  • podczas zmiany renderu wysylany do wszystkich pluginów
    diablo_render_change(id);
  • zwracasz czas call cast 0.0 powoduje zatrzymanie
    Float:diablo_cast_time(id,Float:standardTime );
  • call cast wykonany niech plugin dziala
    diablo_call_cast(id);
  • ustawiania speed
    diablo_speed_change(id);
  • przy spaawnie klasy
    diablo_class_spawned(id);
  • przy zabiciu klasy
    diablo_class_killed(id);
  • przy exp killu zwracaj 0 jak nic nie robisz
    diablo_kill_xp(id,iIle);
  • przy exp damage 0 jak nic nie robisz
    diablo_exp_damage(id,iIle);
  • przy uzyciu skillu klasy
    diablo_class_skill_used(id);
  • when cast stop can return diablo_stop
    diablo_cast_stop(id);
  • can move when cast
    diablo_cast_move(id);
  • write hud
    diablo_hud_write(id,szMessage[],iLen);
  • damage
    diablo_damage_taken_post(iKiller,iVictim,iDamage);
  • diablo_damage_taken_pre(iKiller , iVictim , &Float:fDamage );
  • zmiana damage klasy dostaje
    diablo_damage_class_taken(iVictim,iAttacker,&Float:fDamage,damageBits);
  • zmiana damage klasy zadaje
    diablo_damage_class_do(iVictim,iAttacker,&Float:fDamage,damageBits);
  • gracz zespawnowany
    diablo_player_spawned(id);
  • diablo_user_change_class( id , class )
  • diablo_death(iKiller , killerClass , iVictim , victimClass );
  • diablo_item_give( id , szRet[] , iLen );
  • diablo_item_reset( id );
  • diablo_item_drop( id );
  • diablo_item_info( id , szMessage[] , iLen , bool:bList );
  • diablo_upgrade_item( id );
  • diablo_item_set_data( id );
  • diablo_damage_item_taken(iVictim,iAttacker,&Float:fDamage,damageBits);
  • diablo_damage_item_do(iVictim,iAttacker,&Float:fDamage,damageBits);
  • diablo_item_skill_used( id );
  • diablo_item_player_spawned( id );
  • gravity zmieniona
    diablo_grav_change(id);
  • diablo_new_round();
  • wymiana itemami
    diablo_copy_item( iFrom , iTo );
W paczce znajdziemy też dwa dodatkowe pluginy ( znajdują się one w folderze dodatki )
  • Diablo Questy
  • Exp od godzinny
Działają one tak samo jak te opublikowane już na forum więc nie będę się rozpisywał o konfiguracji

Instalacja odbywa się poprzez wrzucenie plików z paczki na serwer

Jeżeli doceniasz ilość pracy włożoną w ten mod nie usuwaj drobnej informacji o autorze wyświetlanej graczowi , dla osób które chcą to ukryć podpowiadam linijka 4719
Zapraszam też na DarkGL Blog | Programowanie Python , Pawn , C++ i Webdeveloping oraz Kanał użytkownika GitzZz14 - YouTube ewentualnie DarkGL3 - YouTube ;)

TutorialeZałączony plik  Diablo Mod Core.rar   6,91 MB  4213 Ilość pobrań

  • +
  • -
  • 87


#244398 Zabezpieczanie phpBB by Przemo

Napisane przez Ojciec Dyrektor w 02.05.2011 04:12

Witajcie, zapewne wielu z was zastanawia się jak można zabezpieczyć forum. W tym poradniku postaram się wam to przybliżyć.

1. Pamiętaj o aktualizowaniu skryptu. Co jakiś czas na forum Przema, można znaleźć drobne łatki bezpieczeństwa.

2. config.php - Przesuń config.php do roota (katalog wyżej niż public_html). Umiejscowienie tam pliku config uniemożliwia odczytanie go. Jeżeli ustawienia serwera WWW będzie odpowiednie, to nasz plik w zasadzie nie jest zdolny do wykradnięcia. (jeżeli to zrobisz wykonaj poniższą instrukcję
Otwórz plik common.php
Znajdź:
include($phpbb_root_path . 'config.'.$phpEx);

Zamień na:
include($phpbb_root_path . '../config.'.$phpEx);

3. Niepotrzebne pliki
Usunięcie poniższych plików uniemożliwi wgranie shell'a oraz zwiększy bezpieczeństwo twojego forum
admin/admin_file.php
admin/admin_attach_cp.php
admin/admin_attachments.php
admin/admin_extensions.php
/docs
/dbloader
dload.php
/docs
install.php


4. Odpowiednie chmody
Ważne jest to, aby ważnym katalogom/plikom nadać odpowiednie chmody
/files/ - polecam 000
/files/tmp/ - polecam 000
/files/thumbs/ - polecam 000
/pafiledb/uploads/ - polecam 000

5. Zabezpieczanie katalogu 'admin' / Panel Administracyjny
Warto również, aby poprzez cPanel / directAdmin ustawić dodatkowe hasło na panel administracyjny. (Nazwa użytkownika i hasło powinno być inne niż do logowania na forum. [Przykład: Zaloguj ]

6. Blokada wgrywania plików
Stwórz plik .htaccess (lub dodaj do istniejącego)
<Files "*.php"> 
Deny from all 
</Files>
I wgraj plik (bądź dodaj powyższy kod do istniejącego już) do:
files/
album_mod/upload/
patfiledb/uploads/
images/avatars/upload/
images/signatures/


7. Hasła
- Pamiętaj aby hasła, nie były proste do odgadnięcia (np. 123qwe - Co to za hasło? JEST TO NAJPROSTSZE DO ODGADNIĘCIA HASŁO!!)
- Nie ustawiaj takich samych haseł do wszystkich swoich kont. Do FTP ustaw inne hasło niż do cPanelu/DirectAdmin
- Pamiętaj o zasadzie tworzenia bezpiecznych haseł.
• stosuj DUŻE jak i małe litery
• używaj cyfr
• używaj znaków specjalnych !@#$%^&*()_+{}":?><=-[]

Pamiętaj! Im dłuższe i im bardziej twoje hasło jest skomplikowane, tym trudniejsze jest do odgadnięcia przez potencjalnego hakera

A jak zastosować powyższe rady przy tworzeniu hasła? Przykłady podam poniżej.
Mamy np hasło ferdynand
Znaki specjalne oraz tzw. 'fala' : F3r^dyn^4Nd

Warto również robić co jakiś czas backup całkowity naszego konta hostingowego (opcja ta jest w każdym cPanelu oraz DirectAdmin)

Po zastosowaniu powyższych rad, utrudnimy bądź nawet uniemożliwimy włamanie się na nasze forum.

To by było na tyle.
Mój poradnik został napisany przezemnie korzystałem z wyszukiwarki google oraz z materiałów dostępnych na przemo.org

Zabrania się kopiowania poradnika na inne strony/fora bez mojej zgody

UWAGA!!!

Polecam skorzystanie z AntyShella
  • +
  • -
  • 15


#132878 Troche o nVault

Napisane przez G[o]Q w 07.05.2010 20:34

Chcialbym opisac tutaj jeden ze sposobow zapisu danych jaki mozemy uzyc tworzac nasze pluginy.

1. Opis uzywanych funkcji - opisze funkcje ktore beda nam nie zbedne
Spoiler



2. Przykladowe uzycie:

powiedzmy ze do zapisu i odczytu mamy liczbe fragow gracza ktora musi zostac zapisana przy rozlaczeniu i wczytana przy polaczeniu dodatkowo zapisujemy liczbe dead'ow. Przy okazji jest też pokazany sposób zapisania ciągu znaków, w tym przypadku nick gracza.
(wazniejsze linie maja komentarze)

Spoiler

  • +
  • -
  • 35


#432630 Diablo (Gildie)

Napisane przez Stachuu :D ?? w 15.07.2012 21:53

wszystkie pliki vault ci resetuje czy tylko glowny od gildi ? chodzi mi np o plik od zapisywania wplat
  • +
  • -
  • 1


#429991 Crash serwera (Diablo error logi)

Napisane przez Gh0st w 08.07.2012 21:20

na początku tego publicka w którym znajduje się błąd dopisz:

if(!pev_valid(ent))
return FMRES_IGNORED;

I obejrzyj: http://amxx.pl/dokum.../f696/pev-valid
żeby wiedzieć co cię poprawia :)

powinien wyglądać tak:

public fwd_touch(ent,id)
{


if(!pev_valid(ent))
return FMRES_IGNORED;
if(!is_user_alive(id)) return FMRES_IGNORED;

static classname[32];
pev(ent,pev_classname,classname,31);

if(!equali(classname,"przedmiot")) return FMRES_IGNORED; // jesli nie dotykamy przedmiotu to nie idziemy dalej
if(!player_item_id[id]){ // jesli dotykamy kucamy i nie mamy itemu to go dostajemy (podnoszenie itemu - dotkniecie i duck)
award_item(id,item_info[ent])
engfunc(EngFunc_RemoveEntity,ent);
}
return FMRES_IGNORED;
}

P.S.
tutaj masz z poprawną tabulacją: http://wklej.org/id/786756/
  • +
  • -
  • 1


#429496 Crash serwera (Diablo error logi)

Napisane przez speedkill w 07.07.2012 11:55

Pętle zaczynaj od 1 + przed sprawdzeniem czy gracz ma flagę sprawdź czy jest podłączony z serwerem.
  • +
  • -
  • 1


#429582 Crash serwera (Diablo error logi)

Napisane przez Gh0st w 07.07.2012 14:19

a najlepiej przerób to pod
RegisterHam(Ham_Spawn, "player", "RoundStart", 1)

i bez żadnych pętli możesz używać id.
  • +
  • -
  • 1


#418568 Diablo Mod by Stachu

Napisane przez Stachuu :D ?? w 07.06.2012 14:11

Witam was bardzo serdecznie postanowilem zamiescic dzis moje Diablo.
Na wstepie powiem ze jest to odkopany plik sma (ostatnio edytowany okolo 4 miechy temu)
wiec nie mam do niego modeli plikow .txt .
mysle ze bedzie on sluzyl jako pomoc przy robieniu wlasnych Dm

Moze troche o tym co jest w tym calym pliku sma

1.Gildie (by me)
2.Artefakty
3.Wlasny system questow
4.27 klas
5.Przynajmniej 5 calkiem nowych mocy (licze tylko te ktorych odpowiednikow nie spotkalem na innych serwerach/lub wyszlyodemnie)

Nie mam glowy aby rozpisywac all wiec zamieszczam plik i zycze powodzenia w przeszukiwaniu moda :P

W razie pytan piszcie w tym temacie.


Załączony plik  newdiablo.sma   348,53 KB  3740 Ilość pobrań
  newdiablo.amxx
  • +
  • -
  • 56


#418933 Diablo Mod by Stachu

Napisane przez DarkGL w 08.06.2012 15:16

Nie ma nic nowego na forum źle ktoś wrzuci coś nowego fajnego też źle co za ludzie..
  • +
  • -
  • 9


#249244 Dodanie opcji reset dla questow

Napisane przez DarkGL w 14.05.2011 16:07

Zostałem poproszony na gg o dodanie opcji resetowania w moim systemie questow wiec proszę
(tak w ogóle to staja się one coraz bardziej popularne : > )

1.Dodajemy
register_clcmd("say /resetquesty","resetquesty")
do plugin_init

2.Podmieniamy funkcje
public zapisz_questa
na
public zapisz_questa(id,quest,value[])
{
	new name[64];
	get_user_name(id,name,63)
	strtolower(name)
	new key[64];
	format(key,63,"questy-%i-%s-%i",player_class[id],name,quest);
	nvault_set(vault_questy,key,value);
}

3.Podmieniamy
zapisz_questa(kid,quest_gracza[kid])
na
zapisz_questa(kid,quest_gracza[kid],"1")

4.Dodajemy gdziekolwiek w kodzie
public resetquesty(id){
	for(new i=0;i<sizeof questy;i++)
	{
		zapisz_questa(id,i,"0")
	}
	quest_gracza[id] = -1;
	zapisz_aktualny_quest(id)
}

i to wszystko resetowanie jest pod komenda /resetquesty w say
  • +
  • -
  • 4


#402492 Modele noży, mieczy

Napisane przez White w 27.04.2012 13:33

Modele mieczy, noży. Może komuś się przyda.

Dołączona grafika

Download:
http://www65.zippyshare.com/v/21550171/file.html
http://speedy.sh/zuCbp/mieczyki.rar
http://sendfile.pl/160142/mieczyki.rar

  • +
  • -
  • 14


#405004 Modele noży, mieczy 2

Napisane przez White w 02.05.2012 11:33

Poprzednia paczka cieszyła się jakąś popularnością, więc dodaje kolejną :)

Dołączona grafika


Download:
Zippyshare.com - mieczyki2.rar
mieczyki2.rar pobierz za darmo - Hosting plików
mieczyki2.rar - Speedy Share - upload your files here
  • +
  • -
  • 9