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
 

Ossal - zdjęcie

Ossal

Rejestracja: 20.11.2012
Aktualnie: Nieaktywny
Poza forum Ostatnio: 01.08.2017 01:56
-----

#740592 VTC (VoiceTransCoder) nie działa

Napisane przez vanillah w 28.06.2017 15:38

edit. dodalem temat z nowym vtc, trzeba czekać aż moderator zaakceptuje


  • +
  • -
  • 1


#740590 VTC (VoiceTransCoder) nie działa

Napisane przez _McHappy w 28.06.2017 14:47

Nie martw się. Valve wydało kilka dni temu nową aktualizację, która udostępnia nowy kodek używany do konwersji głosu w grze. Problem w tym, że vtc nie jest do tej zmiany przystosowane. Temat był częściowo drążony w wątku rehlds'a. Myślę, że należy znaleźć oficjalny temat vtc i zaktualizować plugin do najnowszej wersji (2017) według podanych instrukcji.
  • +
  • -
  • 1


#740593 VoiceTranscoder 2017 (aktualizacja Steam 22 czerwca)

Napisane przez vanillah w 28.06.2017 15:47

Zmiany:

 

    Autor (?): PRoSToTeM@

    Kompatybilność (AMX MOD X):
        - Amx Mod X 1.8.2
        - (Re) Amx Mod X 1.8.3-dev
    
    Kompatybilność (Silnik HLDS):
        - HLDS (>= 4382)
        - ReHLDS (>= 3.0)
        
    Aktualizacja zawiera:
        - Podstawowe wsparcie dla nowego kodeka głosu "Opus" (wydany w niedawnej aktualizacji od Valve)
        - Naprawione (prawdopodobne) problemy z czasem na Linux'ie
        - Naprawione niewłaściwe próbkowanie i zanikanie dźwięków odtwarzanych poprzez interfejs API

 

 

Instrukcja dla laików:

 

Zawartość wrzucamy do cstrike

Potem wystarczy dodać do cstrike/addons/metamod/plugins.ini

tą linijkę

linux addons/VoiceTranscoder/VoiceTranscoder.so

jeżeli mamy vtc/vtc.so to należy to usunąć

następnie resetujemy serwer i powinno działać 

Załączone pliki


  • +
  • -
  • 7


#736631 Register System - inna wersja rejestracji nicku

Napisane przez gtteamamxx w 19.02.2017 09:11

Sory , że odkopuje temat , ale nie jest zablokowany . Nie komplikuje mi się Twoj .sma . 

 

Autor tematu nieźle poleciał....
Przetłumaczył nawet zapytania SQL
 

formatex(query, charsmax(query), "STWORZ TABELE JESLI NIE MA registersystem (Name VARCHAR(35), Password VARCHAR(34), Status VARCHAR(10)) ; sTWORZ TABELE, JESLI NIE MA rs_commands (Command VARCHAR(64)) ; STWORZ TABELE, JESLI NIE MA rs_names (Names VARCHAR(64))")
	SQL_ThreadQuery(g_sqltuple, "QueryCreateTable", query)
}


  • +
  • -
  • 4


#716814 pev_effects enta nie widoczne dla wybranych entow?

Napisane przez d0naciak w 25.12.2015 22:41

Tak, jest to możliwe. Popatrz sobie na ten perk, który umożliwia widzenie niewidzialnych tylko przez graczy którzy ten go posiadają:

/* Plugin generated by AMXX-Studio */
 
#include <amxmodx>
#include <fakemeta>
#include <codmod>
 
new const perk_name[] = "Sokole Oko";
new const perk_desc[] = "Widzisz niewidzialnych";
 
new bool:ma_perk[33];
 
public plugin_init()
 {
register_plugin(perk_name, "1.0", "Zazdrosny");
 
cod_register_perk(perk_name, perk_desc);
register_forward(FM_AddToFullPack, "FwdAddToFullPack", 1)
}
 
public cod_perk_enabled(id)
ma_perk[id] = true;
 
public cod_perk_disabled(id)
ma_perk[id] = false;
 
 
public FwdAddToFullPack(es_handle, e, ent, host, hostflags, player, pSet)
{
if(!is_user_connected(host) || !is_user_connected(ent))
return;
 
if(!ma_perk[host])
return;
 
set_es(es_handle, ES_RenderAmt, 255.0);
}

  • +
  • -
  • 1


#85721 Deagles' Map Management 3.24 - NOWA WERSJA! [29-01-2012]

Napisane przez Szyfrant w 04.10.2009 19:40

Deagles' Map Management 3.24 - NEW


Opis

Aktualnie najlepszy menager zarządzania opcjami Votowania MAP.

Changelog w języku angielsku

Spoiler


Konfiguracja

Cvary
  • dmap_strict 0/1 - (Domyślnie 0) Jeżeli ustawimy na 1 jedynie mapy z mapcycle mogą być nominowane.
  • enforce_timelimit 0/1 - (Domyślnie 0) zmiana mapy tylko i wyłącznie po upływie czasu
  • timelimit czyli czasu mapy, kiedy jest ustawione na 1.
  • emptymap_allowed 0/1 - (Domyślnie 0) Aby włączyć / wyłączyć tę funkcję
  • amx_emptymap 0/1 - (Domyślnie "" albo 0 ) Chcesz aby serwer zmieniał na jakąkolwiek mape
  • amx_staytime <sec> - (Domyślnie 0) po ilu sekundach można nominować następną mape
  • amx_idletime <godz> - (Domyślnie 0) Ile godzin gracz nie możę zostać połączony z serwerm
  • nominations_allowed 1/0 - umożliwia godzenie się z nominacjami
  • weapon_delay - Na mapach fy_ itp umożliwia czekanie zanim wezmiesz broń
Nowy Plik Konfiguracjyjny
  • ----dmaptags.ini---------(Opcjonalny)
    Pozwala dodać TAG do danej mapy
Przykład:


;Przykładowe otagowanie
fy_iceworld2k GunGame
de_westwood WC3FT
fun_matrix_revolutions Brak pluginów

de_dust WC3FT
cs_assault_necro Ta mapa jest za***ista

Te tagi będą wyświetlanie przy głosowaniu na następną mapę

Przykładowy wygląd głosowania :
1. fy_iceworld2k (Custom) [GunGame]
2. de_westwood (Custom) [WC3FT]
3. fun_matrix_revolutions (Custom) [Brak pluginów]
4. de_dust [WC3FT]
5. cs_assault_necro (Custom) [Ta mapa jest za***ista]


Multilang
  • BP: Warden, reidark
  • BS: Superstar Games
  • CZ: RTG
  • DE: D o o m, [pc]Raba, Mordekay
  • ES: Spider-Cerdo, mademan, niqo
  • FR: vlad, die-demoneye, teol
  • HU: kiki33hun
  • HR: tomba2k
  • NL: Lorre69, Atmegaown
  • PL: Sylwester, MmikiM
  • RO: dorin2oo7, georgik57,
  • RU: mozart123, lexikon
  • SR: JinX
  • SV: Trut, modernwarfare

Attached Files Dołączona grafika Get Plugin or Get Source (deagsmapmanager.sma - 107.0 KB) Dołączona grafika deagsmapmanager3.24.zip (171.7 KB)

Wyświetl pełny artykuł (Ang)
  • +
  • -
  • 21


#714368 Jaki jest maksymalny bitrate pliku .wav w cs?

Napisane przez Linux' w 09.11.2015 15:13

Limit wynosi 16 bit (705 kb/s)

 

Co do komendy, takiego czegoś z pewnością nie ma.


  • +
  • -
  • 3


#714288 Przy dużym velocity ent nie zachowuje nadanego mu kierunku

Napisane przez Droso w 07.11.2015 03:00

sv_maxvelocity 10000 

  • +
  • -
  • 1


#620547 Canvas

Napisane przez R3X w 26.02.2014 21:56

Canvas

 

w ramach eksperymentu i `for the lolz` pracuję nad własnym rendererem wewnątrz serwera hlds. Canvas, czyli płótno. O co chodzi?

 

Plugin oddaje do dyspozycji API, dzięki któremu stworzymy płótno o dowolnych (niestety ograniczonych) rozmiarach. Na tym płótnie możemy rysować ustawiając odpowiednio kolor każdego z pikseli. Rysowaniem zajmuje się Program, rejestrując go podajemy nazwę publicznej funkcji, która będzie wołana co ramkę serwera i w ten sposób możemy aktualizować stan płótna.

 

Aktualnie płótna można dodawać i konfigurować jedyne z menu dostępnego pod komendą

amx_canvas

Można tam dodawać płótna, zmieniać wymiary, rozmiar i program.

 

Interakcja

Samo rysowanie to mało. Oczywiście, że chciałoby się mieć wpływ na to co jest rysowane będąc graczem. Podstawowa interakcja to pozostawanie w zasięgu. Główny plugin pozwala zarejestrować callbacki wołane gdy gracz wchodzi i wychodzi z zasięgu płótna. Pozwala to np. zmienić wyświetlany kolor, gdy ktoś patrzy.

 

Bardziej zaawansowany jest interfejs związany z klawiaturą. Jeśli zdecydujemy się zablokować kamerę gracza na płótnie, wysyłane będą forwardy (również dostępne jako rejestrowalne callbacki) gdy gracz naciska, puszcza lub przytrzymuje klawisz. Na razie nie ma żadnych blokad. Sterując mini-grą gracz będzie biegał i strzelał. Wkrótce się to zmieni :)

 

W planach jest także interfejs dotykowy, tzn gdyby jeden piksel był większy niż gracz to możliwe będzie precyzyjne określenie na którym z pikseli gracz stoi. Z tym wiąże się mnóstwo pomysłów do zrealizowania.

 

Innym typem interakcji może być strzał w piksel. Umożliwiłoby to np. grę w kółko i krzyżyk, gdzie gracze na przemian strzelają w pole gdzie chcą postawić swój znak.

 

Inicjalizacja

Głównie z powodów technicznych narodziła się idea inicjalizacji. Narysowanie dwustu pikseli na raz zawiesiło mi serwer na dobre kilka sekund, a chwilę potem dostawałem channel overflow. Jako obejście wybrałem liniowe rysowanie pikseli w pierwszych chwilach życia płótna. Podstawowy initializer rysuje po 4 piksele na ramkę, od pierwszego do ostatniego. Potem będzie więcej opcji.

 

Ograniczenia

Silnik hl pozwala klientowi rysować ~256 bytów. Każdy piksel płótna jest bytem, więc teoretycznie możemy osiągnąć kwadrat 16x16. Jednak kto pierwszy ten lepszy, więc od tej puli należy odjąć wszystko co jest narysowane na mapie + miejsce na nowe obiekty jak wypadające po śmierci bronie czy rzucone granaty. Będąc sam na serwerze bez zamiaru strzelania się z kimś używałem płótna 28x8. Gdyby ktoś chciał umieści płótno na żywym serwerze wątpię czy udałoby się to zrobić dla rozmiarów większych niż w sumie 100-150 (np. 15x10 ).

 

Demo

Podczas prac robiłem krótkie filmiki z postępów. Oto lista: http://www.youtube.c...hKwIexxiDB238rI

 

Źródło

https://github.com/e...iks/amxx-canvas

 

Na razie nie ma sensu robić paczki. Wersja jest dość wczesna. Da się już coś zrobić, ale raczej również jako ekperyment. 

 

 


  • +
  • -
  • 26


#706973 [ROZWIĄZANE] Jak sprawdzić czy dany origin jest w ścianie?

Napisane przez Rivit w 20.07.2015 08:05

http://amxx.pl/topic...nieinnym-encie/

 

 

Może to?


  • +
  • -
  • 1


#57715 Praca na plikach

Napisane przez Miczu w 17.04.2009 12:29

Zaczne od najprostrzej funkcji do logowania przebiegu pracy naszego pluga:

log_to_file( const file[], const message[], [ ... ] )

Funkcja sklada sie z 2 czesci:
- Nazwa pliku (opcjonalnie sciezka) - przy nie podaniu sciezki zostanie stworzony(zapisany do) plik o podanej nazwie w folderze amxmodx/logs

Jesli chcemy by kazdy dzien mial osobny plik oraz by mozna bylo latwo je rozroznic musimy odpowiednio sformatowac nazwe pliku:
new file[32],Time[7]
	get_time("%d%m%y",Time,8)
	format(file,31,"TEST_%s.log",Time)
	log_to_file(file,"Test log")
W efekcie zostanie kazdego dnia tworzony plik lub zapis do istniejacego pliku o podajen nazwie. W tym przypadku powstal by plik TEST_170409.log

Specyfikacjie funkcji get_time KLIK!


- Druga czesc sklada sie z informacji ktora chcemy wpisac do pliku.

Na poczatku kazdego nowego wpisu beda informacje typu data - godzina (nie musimy sami formatowac tej czesci):
L 04/17/2009 - 12:38:11:

Tekst ktory bedziemy wprowadzac do pliku mozna formatowac tak jak w funkcji Format np:
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)	
	register_clcmd("say /log","test")
}

public test(id)
{
	new name[32],ip[32],sid[64]
	get_user_name(id,name,31)
	get_user_ip(id,ip,31,1)
	get_user_authid(id,sid,63)
	log_to_file("file.txt","Gracz %s %s %s - napisal /log",name,ip,sid)
}


Teraz podam 3 czesto niezbedne funkcje do pracy na plikach, ale nie wystarczajace by cokolwiek wpisac/pobrac z pliku:

get_basedir( name[], len ) - sciezka do folderu .../amxmodx/
get_configsdir( name[], len ) -sciezka do folderu .../amxmodx/config/
get_datadir( name[], len ) - sciezka do folderu .../amxmodx/data/


Pierwszy parametr to nazwa tablicy, a drugu to ilosc elementow ktore mozna uzyc (o 1 mniej niz liczba przy deklarowaniu tablicy). dzięki tym funkcja jestesmy w stanie zawsze zapisac plik w tym samym miejscu na serwerze niezaleznie na jakim jest on robiony.

Kolejne przydatne funkcje:

file_exists ( const file[] ) - sprawdza czy istnieje plik o podanej nazwie i sciezce
dir_exists ( const dir[] ) - sprawdza czy podana sciezka istnieje. Jesli np. nie ma folderu w ktorym chcemy zapisac dane wystarczy go stworzyc:
mkdir ( const dirname[] ) - tworzy folder o podanej nazwie i sciezce

file_size ( const file[], [ flag ] ) - sprawdza rozmiar pliku:
- gdy flaga to liczba 0 to funkcja zwraca liczbe Bitow pliku
- gdy flaga to liczba 1 to funkcja zwraca liczbe lini w pliku



Teraz najpodstawowsze 2, moim zdaniem najbardzej przydatne funkcie do pracu na plikach:

read_file ( const file[], line, text[], len, &txtLen ) - funkcja do czytania danych z pliku

- pierwszy parametr to nazwa pluku i sciezka do niego (trzeba go sformatowac za pomoca w/w funkcji)
- drugi parametr to nr. lini ktora chcemy czytac - pierwsza linia w pliku jest linia o numerze 0. Sama funkcja zwraca kolejna dostepna linie jesli jest dostepna lub 0 gdy czytana linia jest ostatnia linia w pliku
- trzeci parametr to tablica w ktorej beda przechowywane dane z podanej wczesniej lini pliku
- czwarty parametr to maksymalna ilosc danych ktore mozemy przechowywac w tablicy (1 mniej niz liczba podana przy deklaracji)
- ostatni, piaty parametr zwraca ilosc znakow ktore zostaly pobrane do tablicy (jesli naprzyklad tablica ma rozmiar 512 a pobralismy tylko 17 znakow, to w tej zmiennej bedzie przechowywana informacia ile znakow tablicy jest dla nas wazne).

Przyklad petli ktora bedzie czytac kazda linie pliku a nastepnie wykonywac "TWOJ KOD"
new line=0, file, text[128],chars
	do{
		line = read_file(file,line,text,127,chars)
		/*
		TWOJ KOD
		*/
	}
	while(line!=0)
Petla do while bedzie wykonywana do momentu gdy funkcja read_file zwroci liczbe 0 czyli dojdzie do konca pliku. Jesli szukamy konkretnej informacji w pliku, ktora sie znajduje w tylko 1 linki kodu, to po jej znalezieniu mozemy przerwac funkcjie za pomoca "break" dzięki temu mozemy za petla zapisac informacjie w ktorej lini znajduje sie np. dana mapa. Zapisana linia moze byc pozniej przydatna do aktualizacji danych.


write_file ( const file[], const text[], [ line ] ) - funkcja zapisuje informacje do podanego pliku lub go tworzy

- Pierwszy parametr to nazwa pliku i sciezka do niego (trzeba go odpowiednio sformatowac).
- Drugi paramert to tablica znakowa ktora przechowuje dane ktore chcemy zapisac do pliku. Jesli nic nie wpiszemy to linia bedzie pusta - funkcja write_file nie dodaje wlasnego tekstu do zapisywanego pliku
- Trzeci parametr to nr. lini w ktorej ma byc zapisana informacja linie sie zaczynaja od nr.0 - podajac konkretna linie, informacje ktore sa w niej przechowywane zostana usuniete i w danej lini zostana wprowadzone nasze nowe dane. Jesli paramet line bedzie rowny -1 to tekst bedzie zapisany na koncu pliku, bez nadpisywnia zadnych danych.



Uwagi:
- moga wystapic problemu w pracy na plikach na serwerach na ktorych chmod nie pozwala amxx'owi na zapis/czytanie/tworzenie plikow
- moga wystapic problemy przy formatowaniu sciezki na rozych systemach operacyjnych ( linux i windows rozdzielaja foldery za pomoca / oraz - mozna sprawdzic typ serwera za pomoca funkcji is_linux_server())
- tutorial zostal napisany na bazie "AMX Mod X Function Reference" oraz mojego doswiadczenia w tej dziedzinie. Podany kod nie moze stanowic samodzielnego pluga, trzeba go dostosowac do wlasnych potrzeb.
- Jesli sa pytania/uwagi proszę pisac w tym temacie
- Napisane dla http://www.amxx.pl nie kopiowac bez mojej zgody (czyt. autora).
- Jesli jakis mod mysli, ze tut jest nie czytelnie napisany lub sa bledy natury nie merytorycznej, tp jest proszony o poprawienie a nie pisanie zbednego posta ;-)
  • +
  • -
  • 1


#674401 Tworzenie i modyfikacja entity

Napisane przez grankee w 09.12.2014 15:20

Witam. Postanowiłem trochę się rozpisać o entitach. Poradnik ten z założenia ma być długi i obszerny, a mój system pracy nie sprzyja więc czego nie skończę dziś, dopiszę jutro.
 
Entity to nic innego jak byty na mapie. Mapa (widzialna i namacalna bryła, wewnątrz której toczymy rozgrywkę wraz z jej wszystkimi elementami, które nie są odrębnymi bytami) sama w sobie też jest bytem o numerze 0.
Każde entity ma swój unikalny numer, raz nadany podczas tworzenia entity nigdy nie ulega zmianie. Oczywiście jeśli dany ent zostanie usunięty to jego numer zostaje "zwolniony" i może zostać on nadany kolejnemu entowi podczas jego tworzenia.
 
Entity posiada wiele właściwości, które z grubsza postaram się objaśnić. Podstawową sprawą jest, że ma kształt prostopadłościanu i jakiś model, czyli jakoś wygląda, ale model nie musi wcale się pokrywać z kształtem i wymiarami bytu. Do tworzenia lub modyfikacji tych właściwości możemy używać dwóch modułów - <engine> oraz <fakemeta>, jednak w tym tutorialu skupię się na tym pierwszym z prostego powodu - jest łatwiejszy i bardziej przejrzysty. Na koniec postaram się nie zapomnieć przedstawić przykładów użycia fakemety z tym samym skutkiem.
 
Do ustawiania właściwości entity używamy funkcji:
 
entity_set_byte(index,klucz,wartość)
entity_set_edict(index,klucz,wartość)
entity_set_float(index,klucz,Float:wartość)
entity_set_int(index,klucz,wartość)
entity_set_string(index,klucz,const wartość[])//tablica string
entity_set_vector(index,klucz,wartość)
 
 
ponadto:
 
entity_set_model(index,const sciezka_do_modelu[])
entity_set_origin(index,const Float:fNewOrigin[3])
entity_set_size(index,const Float:mins[3],const Float:maxs[3])
 
 
Te 3 ostatnie różnią się tym, że aktualizują zmienione dane w silniku gry. Koniecznie trzeba ich użyć, aby poprawnie stworzyć entity.
 
 
Pobierać te właściwości można funkcjami:
 
entity_get_byte(index,klucz)//zwraca returnem wartość typu int
entity_get_edict(index,klucz)//zwraca returnem wartość typu int
entity_get_float(index,klucz)//zwraca returnem wartość typu float
entity_get_int(index,klucz)//zwraca returnem wartość typu int
entity_get_string(index,klucz,tablica_znakow[],dlugosc_tablicy_znakow)//zwrot przez referencję do tablicy znaków podanej jako argument
entity_get_vector(index,klucz,tablica_float[3])//zwrot przez referencję do tablicy trójelementowej typu float
 
 
No dobra, ale co to jest ten klucz?
Jest to liczba całkowita określająca, którą właściwość chcemy sprawdzić/zmienić. Dla ułatwienia skorzystajmy z przygotowanych do tego elementów typu wyliczeniowego, dzięki czemu będziemy wiedzieli z grubsza co dany klucz nam zmieni. 
Każda funkcja ma przygotowany dla siebie typ wyliczeniowy, osobny dla byte,edict,float,int,string i vector(postaram się uzupełniać, może ktoś coś podpowie):
Spoiler
 
 
 
 
Podzielmy entity ze względu na klasę.
Pierwsza podstawowa klasa bez jakiej gra nie zainstnieje to
player
Więcej o graczu:
Spoiler
Dalej mamy najczęściej spotykane byty:
info_player_start - miejsce spawnu CT
info_player_deathmatch- miejsce spawnu Terro
func_buyzone - w jego wnętrzu można kupować
func_bomb_target - w jego wnętrzu można podkładać pakę
weapon_usp, weapon_glock i cała reszta broni - broń posiadana przez gracza
func_wall - ściana, ale nie tylko, paradoksalnie chyba żadna ściana nie jest bytem tej klasy tylko częścią mapy. Praktycznie każdy obiekt może być tej klasy(np. skrzynka, barierka...), są to obiekty nie pełniące żadnej roli specjalnej a jedynie mają być i istnieć.
func_breakable - obiekt, który da się zniszczyć np. szyba, kratka do wentylacji, skrzynki niszczone wybuchem bomby i wiele innych
func_illusionary - ma model, czyli jakoś wygląda, ale nie zatrzymuje pocisków, nie blokuje ruchu.
trigger_multiple - byt o solidzie 1 czyli SOLID_TRIGGER, jego dotknięcie alarmuje go, ale nie blokuje ruchu, zwykle alarmuje inny byt do wykonania thinku, czyli jakiejś czynności, np drzwi do otwarcia się na de_prodigy.
func_door - drzwi
func_door_rotating - drzwi obrotowe
func_ladder - drabina
trigger_hurt - rani po dotknięciu go
 
 
Postaram się coś jeszcze dopisać.
 
 
 
No to trochę teorii za nami, teraz pora stworzyć nasze entity:
Załóżmy, że potrzebna nam ściana, której ścieżka do modelu to "models/wall/wall.mdl"
new byt=create_entity("func_wall")//funkcja tworzy byt klasy func_wall, zwracając numer powstałego entity, który przypisujemy zmiennej 'byt'
entity_set_model(ent,"models/wall/wall.mdl")
new Float:mins[3],Float:maxs[3]//aby powstał prostopadłościan (takiego kształtu jest entity) musimy rozciągnąć go w przestrzeni za przeciwległe rogi i to właśnie odległości od originu do tych rogów
//odpowiednio do rogu najbardziej wysuniętego w kierunku ujemnym
mins[0]=-112.0//oś x
mins[1]=-113.0//oś y
mins[2]=-1.0//oś z (góra-dół)
//oraz najbardziej wysniętego w kierunku dodatnim
maxs[0]=115.0
maxs[1]=116.0
maxs[2]=117.0
entity_set_size(ent,mins,maxs)//ustawia w/w odległości-czyli po prostu rozmiar
new Float:origin[3]
entity_get_vector(id,EV_VEC_origin,origin)//tu pobieram położenie gracza, aby z grubsza wiedzieć gdzie to entity umieścić, jeśli mam własne dane co do położenia, 
//a nie interesuje nas położenie gracza, to przypisujemy dane do zmiennej origin[3]
origin[0]+=350.0//tu zmieniam położenie względem jednej z osi, żeby byt nie został stworzony na mnie (graczu) tylko w pobliżu
entity_set_origin(ent,origin)//ustawiam położenie bytu. Należy uważać, aby byt nie został stworzony w mapie, tzn jego część nie była schowana w podłodze, bo byt zacznie nam opadać powoli w dół aż zniknie całkowicie z pola widzenia. Dobrze ustawiony origin poskutkuje pojawieniem się nieruchomego bytu, ew pojawieniem się bytu i opadnięciem na ziemie.


entity_set_int(ent,EV_INT_solid,SOLID_BBOX)//ustawiamy dotykalność bytu (bez ustawionego movetype ( MOVETYPE_NONE ) nie przynosi efektu)
entity_set_int(ent,EV_INT_movetype,MOVETYPE_TOSS)//ustawiamy sposób poruszania się bytu, wybrany tutaj to po prostu kolidowanie z entitami, grawitacja
 
ważne, model musimy precachować:
public plugin_precache()
{
precache_model("models/wall/wall.mdl") 
}
Możliwe SOLIDy:
#define SOLID_NOT 0 /* Brak interakcji z obiektami */
#define SOLID_TRIGGER 1 /* Tworzy dotyk (alarmując funkcje), ale nie blokuje (można przez niego przejść) */
#define SOLID_BBOX 2 /* Tworzy dotyk (alarmując funkcje), blokuje */
#define SOLID_SLIDEBOX 3 /* Tworzy dotyk, ale nie na ziemi(nie czaje o co chodzi:P-nie testowałem) */
#define SOLID_BSP 4 /* Część mapy, tworzy dotyk (alarmując funkcje), blokuje */
Możliwe movetype'y:
#define MOVETYPE_NONE 0 /* nie porusza się */
#define MOVETYPE_ANGLENOCLIP 1 /* nie mam pojęcia - crashuje serwer jak ustawię */
#define MOVETYPE_ANGLECLIP 2 /* nie porusza się */
#define MOVETYPE_WALK 3 /* Tylko gracz tego używa - chodzenie po ziemi - ustawisz innemu entity=crash */
#define MOVETYPE_STEP 4 /* gravity, special edge handling -- monsters use this */
#define MOVETYPE_FLY 5 /* Koliduje z elementami mapy/entami, ale nie działa nań grawitacja */
#define MOVETYPE_TOSS 6 /* Koliduje z elementami mapy/entami, działa nań grawitacja */
#define MOVETYPE_PUSH 7 /* no clip to world, push and crush - nie testowałem, ale entity z solid_bsp mają ten movetype */
#define MOVETYPE_NOCLIP 8 /* Może posiadać prędkość tzn poruszać się, ale nie koliduje i nie działa nań grawitacja */
#define MOVETYPE_FLYMISSILE 9 /* extra size to monsters */
#define MOVETYPE_BOUNCE 10 /* Tak jak TOSS, ale odbija się od wszystkiego */
#define MOVETYPE_BOUNCEMISSILE 11 /* Odbija się, ale nie działa nań grawitacja */
#define MOVETYPE_FOLLOW 12 /* Śledzi ruchy celu (EV_ENT_aiment ?) */
#define MOVETYPE_PUSHSTEP 13 /* BSP model that needs physics/world collisions (uses nearest hull for world collision) */
 
Na koniec przełożenie na fakemete, np:
entity_set_int(id,EV_ENT_owner,1)
set_pev(id,pev_owner,1)
to jest to samo w działaniu, albo
entity_get_int(id,EV_ENT_owner)
pev(id,pev_owner)
albo
new classname[32]
entity_get_string(id,EV_SZ_classname,classname,31)
pev(id,pev_classname,classname,31)
 
 
 

 

Teraz już wiecie jak stworzyć swoje entity. Postaram się uzupełniać w wolnych chwilach, a także po waszych sugestiach i uwagach, na które bardzo liczę. Jak zbierzemy do kupy wiedzę paru osób to może powstać z tego na prawdę dobry poradnik.

  • +
  • -
  • 16


#700787 Funkcja wywoływana tylko przy strzale

Napisane przez Asiap w 17.05.2015 01:30

#include <amxmodx>
#include <hamsandwich>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "asiap"

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);

	new g_szName[24], i = 1;
	for(; i <= CSW_P90; i++)
	{
		if(!((1<<CSW_KNIFE|1<<CSW_HEGRENADE|1<<CSW_FLASHBANG|1<<CSW_SMOKEGRENADE|1<<CSW_C4) & 1<<i) && get_weaponname(i, g_szName, 23))
		{
			RegisterHam(Ham_Weapon_PrimaryAttack, g_szName, "PrimaryAttack", 1);
		}
	}
}

public PrimaryAttack(ent)
{
	new id = get_pdata_cbase(ent, 41, 4);
	JakasFunkcja(id);
}

public JakasFunkcja(id)
{
	new g_szName[32];
	get_user_name(id, g_szName, 31);

	client_print(0, print_chat, "Gracz ^"%s^" wlasnie strzelil z broni", g_szName);
}

  • +
  • -
  • 1


#700040 [ROZWIĄZANE] menu_create zawsze zwraca 0 (?) :O

Napisane przez sebul w 08.05.2015 18:04

Pokaż te swoje globalne menu (nie wiem jak w liczbie mnogiej ma być), bo chyba musisz robić coś nie tak, bo sam wielokrotnie takich menu robiłem bardzo wiele i nigdy z takim czymś się nie spotkałem.
  • +
  • -
  • 1


#700098 [ROZWIĄZANE] menu_create zawsze zwraca 0 (?) :O

Napisane przez GwynBleidD w 09.05.2015 09:06

Pierwsze menu ma ID równe 0, więc nie dziwi to, że możesz wywołać menu bez podawania ID. Każde następne menu jednak ma ID większe, dlatego wywołuje Ci się tylko 1 "globalne" menu.

Wywołaj sobie kilka menu_create pod rząd i zobacz jakie wartości zwracają (po prostu wypisz je sobie np w czacie).
  • +
  • -
  • 2