Albo ja ślepy jestem albo nie wiem, nie widzę parametrów jakie powinien posiadać set_hudmessage, lub kanał jest taki sam lub go brakuje.
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.
|
Play4Fun
Rejestracja: 11.09.2011Aktualnie: Nieaktywny
Poza forum Ostatnio: 14.09.2015 16:09




Statystyki
- Grupa: Użytkownik
- Całość postów: 86
- Odwiedzin: 3 889
- Tytuł: Zaawansowany
- Wiek: 29 lat
- Urodziny: Czerwiec 11, 1996
-
Imię
Dawid
-
Płeć
Mężczyzna
-
Lokalizacja
Lublin
-
Zainteresowania
AMXX, Języki: pawno, c++, html, css, php
Narzędzia użytkownika
Znajomi
Play4Fun nie posiada znajomych
Ostatnio byli
#581101 Podwójny HUD
Napisane przez volshebnik
w 28.10.2013 21:04
#581104 Podwójny HUD
Napisane przez
GT Team
w 28.10.2013 21:09
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 #69839 Tworzenie menu
Napisane przez R3X
w 27.06.2009 17:39
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
na początku y, więc tekst do następnego znaku zmiany koloru będzie żółty\yWidzisz to menu?^n^n\w1. Tak^t2. Nie
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:
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: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.MENU_KEY_1| MENU_KEY_2
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
#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");
}
}
} Ż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: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łó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ów przyciskó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 żółty
menu_setprop(MyMenu,MPROP_NUMBER_COLOR,"y");
menu_display(id, MyMenu,0);
return PLUGIN_HANDLED;
} Rezultat:
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.
#487930 Diablo Mod Core 1.1.0 PL
Napisane przez DarkGL
w 07.12.2012 20:22
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

Takie komendy jak
- /czary
- /skille
- /exp
- /menu
- /wymiana
- /wymien
- /item
- /przedmiot
- /klasy
- /klasa
- /reset
- /drop
- /rune
- /daj
- /komendy
- /event
- /k
- /r
- /d
- /p
- /i
- /g
- /ru
- /w
- /p
- /h
- /ko
- /m
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 1Cvary 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>
- diablomod_version - zwraca używana wersję diablomoda
- /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
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 );
- 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 );
- Diablo Questy
- Exp od godzinny
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
Tutoriale
- http://amxx.pl/topic...core-by-darkgl/
- http://amxx.pl/topic...-core-by-darkgl
- http://amxx.pl/topic...core-by-darkgl/
Diablo Mod Core.rar 6,91 MB 4213 Ilość pobrań#244398 Zabezpieczanie phpBB by Przemo
Napisane przez Ojciec Dyrektor
w 02.05.2011 04:12
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#132878 Troche o nVault
Napisane przez G[o]Q
w 07.05.2010 20:34
1. Opis uzywanych funkcji - opisze funkcje ktore beda nam nie zbedne
a) nvault_open - otwiera ona plik Vault do zapisu danych.
skladnia:
nvault_open ( const nazwa[] )
zwraca ona index pliku vault dlatego dobrze jest przypisac wywolanie funkcji do zmiennej globalnej i uzywac funkcji w plugin_init/plugin_cfg/plugin_precache
moze tez zwrocic -1( INVALID_HANDLE) wtedy gdy nie mozna otworzyc/stworzyc pliku Vault
skladnia:
nvault_close ('wskaznik')wskaznik to wartosc zwracana przez nvault_open (zmienna do ktorej to przypisalismy)
c) nvault_set - pozwala nam zapisac dane do pliku identyfikatorem danych jest klucz ktory podajemy dlatego musimy zadbac aby dla kazdego wpisu byl inny
skladnia:
nvault_set ( wskaznik, const klucz[], const wartosci[] )
d) nvault_get - pozwala nam odczytac z pliku dane wlasciwe dla podanego klucza mozna uzyc przypisujac do zmiennej lub podac jako 3 parametr tablice a jako 4 jej dlugosc wtedy dane zapisane bd w tablicy
skladnia:
nvault_get ( wskaznik, const klucz[], ... )
e) nvault_remove - usuwa dany klucz z pliku
skladnia:
nvault_remove ( wskaznik, const klucz[] )
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)
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <fun>
#include <cstrike>
#define PLUGIN "Plugin"
#define VERSION "0.1"
#define AUTHOR "G[o]Q"
new fragi[33] // fragi
new deads[33] // deady
new g_name[33][48]
new plik_vault
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say poka", "pokaz")
plik_vault = nvault_open("fragi") //tutaj podajemy "nazwe" pliku z danymi
if(plik_vault == INVALID_HANDLE)
set_fail_state("Nie moge otworzyc pliku :/");
}
public client_authorized(id)
load_frags(id);
public client_disconnect(id) {
save_frags(id)
fragi[id]=0 // zeby ktos kto wejdzie po nas nie mial naszych fragow zapisanych w tablicy
deads[id]=0
copy(g_name[id], 47, "");
// mozna by wyswietlic komunikat ale tylko gdy uzywamy komendy bo inaczej nie dosc ze nic sie nie wyswietli
// to w logach zobaczymy "index out of bound"
}
public plugin_end()
nvault_close(plik_vault)
public pokaz(id) // funkcje nie ustawiaja liczby frags/deads a plugin mial tylko pokazywac dzialanie stad komenda
client_print(id, print_chat, "fragi: %d deady: %d nick: %s", fragi[id], deads[id], g_name[id]);
public load_frags(id)
{
new name[48]
get_user_name(id,name,47)
new vaultkey[64],vaultdata[128]
formatex(vaultkey,63,"%s-fragi",name)
if(nvault_get(plik_vault,vaultkey,vaultdata,127)) { // pobieramy dane
new fragitemp[16], deadstemp[16], nametemp[48];
parse(vaultdata, fragitemp, 15, deadstemp, 15, nametemp, 47) // wydobywamy z ciagu vaultdata nasze dane
fragi[id]=str_to_num(fragitemp) // przypisujemy danym ich wartosci wczytane
deads[id]=str_to_num(deadstemp)
set_user_frags(id,fragi[id])
cs_set_user_deaths ( id, deads[id] )
copy(g_name[id], 47, nametemp);
}
return PLUGIN_CONTINUE
}
public save_frags(id) {
fragi[id]+=get_user_frags(id) // zwiekszamy liczbe fragow i deadow o stan bierzacy
deads[id]+=get_user_deaths(id)
new name[48]
get_user_name(id,name,47)
new vaultkey[64],vaultdata[128] // 2 zmienne na klucz i dane ktore bedziemy zapisywac
formatex(vaultkey,63,"%s-fragi",name) //formatujemy klucz czyli nasz identyfikator dostepu najlepiej zeby roznil sie on 1 czlonem od pozostalych
formatex(vaultdata,127,"%d %d ^"%s^"", fragi[id], deads[id], name) // formatujemy dane
nvault_set(plik_vault,vaultkey,vaultdata) // zapisujemy dane "pod" danym kluczem w pliku
return PLUGIN_CONTINUE
}
#432630 Diablo (Gildie)
Napisane przez Stachuu :D ??
w 15.07.2012 21:53
#429991 Crash serwera (Diablo error logi)
Napisane przez Gh0st
w 08.07.2012 21:20
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/
#429496 Crash serwera (Diablo error logi)
Napisane przez speedkill
w 07.07.2012 11:55
#429582 Crash serwera (Diablo error logi)
Napisane przez Gh0st
w 07.07.2012 14:19
#418568 Diablo Mod by Stachu
Napisane przez Stachuu :D ??
w 07.06.2012 14:11
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
W razie pytan piszcie w tym temacie.
newdiablo.sma 348,53 KB 3740 Ilość pobrań
newdiablo.amxx
#418933 Diablo Mod by Stachu
Napisane przez DarkGL
w 08.06.2012 15:16
#249244 Dodanie opcji reset dla questow
Napisane przez DarkGL
w 14.05.2011 16:07
(tak w ogóle to staja się one coraz bardziej popularne : > )
1.Dodajemy
register_clcmd("say /resetquesty","resetquesty")do plugin_init2.Podmieniamy funkcje
public zapisz_questana
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
#402492 Modele noży, mieczy
Napisane przez White
w 27.04.2012 13:33
#405004 Modele noży, mieczy 2
Napisane przez White
w 02.05.2012 11:33

Download:
Zippyshare.com - mieczyki2.rar
mieczyki2.rar pobierz za darmo - Hosting plików
mieczyki2.rar - Speedy Share - upload your files here
- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Reputacja: Play4Fun
- Regulamin


Dodatki SourceMod



Moja zawartość


