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
 

Zapalka - zdjęcie

Zapalka

Rejestracja: 22.03.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 06.11.2021 21:16
-----

#320004 Vectory - tutorial.

Napisane przez ExBiT w 10.11.2011 16:55

Witam.
Na wstępie powiem, że jest to mój pierwszy poradnik na tym forum, więc " DO NOT BE TOO CRUDE".

Vectory - cóż to takiego? Otóż wektor reprezentuje zwykłą tablicę. Jest on jednak wyposażony w kilka dodatkowych funkcji ułatwiających nam jego mordernizację i dynamiczne zarządzanie.

1. Tworzenie.

Inicjacja wektorów w c++ jest dość prosta i działa według argumentacji:

vector <typ> nazwa;


Jako typ oznaczamy standardowe zmienne w c++. Może to być zmienna zmiennoprzecinkowa, całkowita, bądź też tekstowa.

W owym poradniku vectory podzielimy na 3 części (nazewnictwo własne):

a) puste,
B) optymalizujące,
c) optymalizująco-wartościowe.

Żaden z tych typów nie ma wielkiej rozbierzności w ogólnej deklaracji.
Wyżej przedstawione wektory tworzymy w następujący sposób(do opisu ich działania przejdziemy niżej):

a) vector <typ> nazwa;
B) vector <typ> nazwa(wielkość_tablicy);
c) vector <typ> nazwa(wielkosc_tablicy, wartosc_liczbowa_bądź_tekstowa_przyjmowana_przez_każdy_element);

- Wektor pusty nie ogranicza nas objętościowo. Możemy wrzucić do niego tyle elementów, ile nam jest do szczęścia potrzebne.
- Wektor optymalizujący podobnie jak ten opisany wyżej nie nakłada na nas jakichś zakazów działania na tablicach. Jego deklaracji jednakże używamy w szczególnych przypadkach, np. gdy chcemy od razu zarezerwować pewną ilość pamięci.
- Działanie tablicy optymalizująco-wartościowej jest również podobne do poprzedników. Jednakże deklarując wartość odwołujemy się do każdego elementu w tablicy. Jako przykład damy prosty vector, a niżej opiszemy jego działanie dokładniej:

vector <int> tab(99, 9);


Przy takej deklaracji, każdy z 99 elementów vectora będzie posiadał już z góry ustaloną wartość - 9.
Ciekawie jest, jeżeli za typ podamy zmienną tekstową. Wtedy element posiadał będzie ustaloną wartość w postaci tekstu. Przykład:

vector <string> tab(99, "Pozdrawiam amxx.pl"); 


2. Dynamiczne zarządzanie wektorem.

Jak już się możnabyło przekonać, wektory nie tylko są wygodne w użyciu, ale także możemy łatwo nimi "manipulować". Mówiąc "manipulować" mam na myśli łatwe zarządzanie danymi w nim umieszczonymi, lecz nie tylko. Każda funkcja wymaga od nas również odpowiedniej składni:

 nazwa_wektora.funkcja();


a) Dodawanie elementów.

Vector daje nam możliwość wyboru fukncji, z której chcemy korzystać. Mamy je 2, ale to już zawsze coś.
Pierwsza, czyli ta, od której zaczniemy to

push_back();


Daje nam on niestety możliwość dodawania elementów do wektora na sam koniec. Mimo tego jest on dość często używany, w szególnośći przy wypełnianiu tzw. pustych wektorów, o których już wcześniej była mowa. Bardzo dobrze komponuje się z pętlą for. Jeżeli komuś bardziej podoba się ta metoda, to odsyłam do dokumentacji - vector::push_back - C++ Reference

Drugą opcją przy dodawaniu elementów jest metoda insert - vector::insert - C++ Reference Ta jest zdecydowanie częściej stosowana, gdyż pozwala ona nam na swobodne operowanie umiejscowieniem i ilością dodanych elementów.

B) Usuwanie elementów.

Na wymazywanie(eng. erase) elementów położonych w wektorze pozwala nam funkcja:

erase();


Jest ona łatwa w obsłudze, gdyż może przyjmować 2 lub 1 argument. Zastosowanie jedno-argumentowe tej funkcji polega na przekazaniu erase lokacji/położenia elementu. Natomiast drugi sposób umożliwia usuwanie z przedziału od a do b.

Oczywiście wektory mają jeszcze więcej bardzo ciekawych zastosowań, lecz ja starałem się wymienić tylko te najważniejsze. Dla bardziej zainteresowanych umieszam dokumentację - vector - C++ Reference Stronka świetnie oddaje możliwośći wektorów wraz z przykładami.

Myślę już , że przy pojedynku tablica versus wektor, wybierzecie ten drugi ;]
Pozdrawiam, ExBiT
  • +
  • -
  • 5


#247618 Rodzaje funkcji w Pawnie

Napisane przez R3X w 08.05.2011 21:18

Rodzaje funkcji w Pawnie
pod AMXX

Funkcja może być:




1. Funkcja wewnętrzna

Funkcja dostępna tylko dla innych funkcji w pluginie

Przeznaczenie:
- podział kodu na podprogramy

Uwagi:
- powinna zostać wywołana, inaczej powoduje ostrzeżenie (ale nieszkodliwe) podczas kompilacji

Przykład

funkcja(parametry, danej, funkcji)
{

}


2. Funkcja stock`owa

Jest to generalnie funkcja wewnętrzna. Różni się od niej tym, że nieużyta nie powoduje ostrzeżeń.

Przeznaczenie:
- tworzenie zestawów funkcji do wielokrotnego użytku (np. w pliku .inc)

stock funkcja(parametry, danej, funkcji)
{

}


3. Funkcja publiczna

Funkcja szeroko dostępna, dla samego pluginu oraz na zewnątrz niego. Oznacza to, że może zostać wywołana przez AMXX lub któryś z jego modułów. Pośrednio także przez inny plugin: callfunc_begin .. callfunc_end albo jako forward.

Przeznaczenie:
- callbacki, czyli funkcje przypisywanie do zdarzeń, jak register_event("EVENT", "FUNKCJA")
- udostępnianie funkcji innym pluginom

Uwagi:
- jako jedyna nie może przyjmować wartości domyślnych dla parametrów
- nie musi zostać jawnie wywołana
- słowo kluczowe public może zostać zastąpione @

Przykład
public funkcja(parametry, danej, funkcji)
{

}
@funkcja(parametry, danej, funkcji)
{

}


4. Funkcja natywna

Jest to funkcja, której ciało nie jest znane w czasie kompilacji, dlatego określona jest wyłącznie jako nagłówek. To odniesienie do funkcji zapisanej gdzieś w module lub innym pluginie. Opisuje składnię dostępnych funkcji do wykonania.

Przeznaczenie:
- biblioteki (pliki .inc)

Uwagi:
- możemy udostępniać własne funkcje natywne: Natywy - AMXX.pl: Support AMX Mod X

Przykład
native register_event(const event[],const function[],const flags[],const cond[]="", ... );


5. Forward

Określona jest wyłącznie jako nagłówek. Jest to zapowiedź funkcji, informuje o jej parametrach. Często opisuje składnię dostępnych funkcji publicznych reagujących na zdarzenia.

Przeznaczenie:
- biblioteki (pliki .inc)

Uwagi:
- możemy udostępniać własne forwardy: Forwardy - AMXX.pl: Support AMX Mod X

Przykład
forward plugin_init();

  • +
  • -
  • 24


#241632 Funkcja get_user_flags(id)

Napisane przez R3X w 25.04.2011 19:19

#define WYMAGANE_FLAGI (ADMIN_BAN | ADMIN_CFG)
i potem sprawdzaj
get_user_flags(id) & WYMAGANE_FLAGI

  • +
  • -
  • 1


#241633 Funkcja get_user_flags(id)

Napisane przez Knopers w 25.04.2011 19:19

Albo if(get_user_flags(id) & read_flags("abc")) // Gracz ma flagi abc
  • +
  • -
  • 1


#239518 Tabelka Serwerów Online - Nowy Wygląd v.2

Napisane przez Milek w 21.04.2011 00:14

dzięki, przyda mi sie w 100% :) + gwarantowany Dołączona grafika
  • +
  • -
  • 1


#236169 Breakable Ent (Fakemeta)

Napisane przez diablix w 13.04.2011 00:56

Byt który da sie rozwalić. Przykładem jest naprzykład szyba na cs_militia czy radio na cs_italy

Opis zamieszczam w kodzie

#include <amxmodx>
#include <fakemeta>
#define VERSION "0.1"
#define fm_DispatchSpawn(%1) dllfunc(DLLFunc_Spawn, %1)

new const gszFuncBreakable[] = "func_breakable"; //KLASA DLA CREATE_ENTITY
new const gszClassname[] = "breakable_ent"; //NASZA KLASA DLA NOWEGO BYTU
new const gszModel[] = "models/breakable.mdl"; //NASZ MODEL BYTU

public plugin_init(){
register_plugin("Breakable ent", VERSION, "diablix");
register_clcmd("func_breakable", "createBreakable");
}

public plugin_precache(){
engfunc(EngFunc_PrecacheModel, gszModel); //MODEL DLA NASZEGO BYTU
engfunc(EngFunc_PrecacheModel, "models/ceilinggibs.mdl"); //MODEL DLA UZYTEGO MATERIALU (WIADOMOSCI TE_BREAKMODEL [message_const.inc])
engfunc(EngFunc_PrecacheSound, "debris/bustceiling1.wav"); //DZWIEK DLA UZYTEGO MATERIALU
engfunc(EngFunc_PrecacheSound, "debris/bustceiling2.wav");// --''--
}

public createBreakable(id){
new vOrigin[3], Float:fOrigin[3];//TWORZYMY ZMIENNE O JEDNOSTCE INT I FLOAT
get_user_origin(id, vOrigin, 3); //POBIERAMY ORIGIN NUMER 3 (WEAPON AIMING) W JEDNOSTCE INT
IVecFVec(vOrigin, fOrigin); //KONWETRUJEMY INT NA JEDNOSTKE FLOAT

new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, gszFuncBreakable)); //TWORZYMY ENT
fm_set_kvd(iEnt, "health", "400", gszFuncBreakable); //NADAJEMY HP DLA WIADOMOSCI TE_BREAKMODEL
fm_set_kvd(iEnt, "material", "4", gszFuncBreakable); //NADAJEMY TYP MATERIALU DLA WIADOMOSCI TE_BREAKMODEL
fm_DispatchSpawn(iEnt);

set_pev(iEnt, pev_classname, gszClassname); //NADAJEMY CLASSNAME
set_pev(iEnt, pev_solid, SOLID_BBOX); //NADAJEMY ZEBY BYT BYL SOLIDNY
set_pev(iEnt, pev_movetype, MOVETYPE_NONE); //USTAWIAMY TYP RUCHU

engfunc(EngFunc_SetModel, iEnt, gszModel); //USTALAMY MODEL
set_pev(iEnt, pev_size, {1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}); //USTALAMY ROZMIAR
set_pev(iEnt, pev_origin, fOrigin); //USTALAMY POZYCJE
}

//STOCK KVD (DLA SZYBSZEGO EFEKTU)
stock fm_set_kvd(entity, const key[], const value[], const classname[] = ""){
if (classname[0])
set_kvd(0, KV_ClassName, classname);

else{
new class[32];
pev(entity, pev_classname, class, sizeof class - 1);
set_kvd(0, KV_ClassName, class);
}

set_kvd(0, KV_KeyName, key);
set_kvd(0, KV_Value, value);
set_kvd(0, KV_fHandled, 0);

return dllfunc(DLLFunc_KeyValue, entity, 0);
}


Pełny spis materiałów :

material(choices) :"Material type" : "" =
[
//* <b>Gibs:</b> models/glassgibs.mdl
//* <b>Break noise:</b> debris/bustglassX.wav
//* <b>Bounce noise:</b> debris/glassX.wav
"": "Glass"
//* <b>Gibs:</b> models/woodgibs.mdl
//* <b>Break noise:</b> debris/bustcrateX.wav
//* <b>Bounce noise:</b> debris/woodX.wav
1: "Wood"
//* <b>Gibs:</b> models/metalplategibs.mdl
//* <b>Break noise:</b> debris/bustmetalX.wav
//* <b>Bounce noise:</b> debris/metalX.wav
2: "Metal"
//* <b>Gibs:</b> models/fleshgibs.mdl
//* <b>Break noise:</b> debris/bustfleshX.wav
//* <b>Bounce noise:</b> debris/fleshX.wav
3: "Flesh"
//* <b>Gibs:</b> models/cindergibs.mdl
//* <b>Break noise:</b> debris/bustconcreteX.wav
//* <b>Bounce noise:</b> debris/concreteX.wav
4: "Cinder Block"
//* <b>Gibs:</b> models/ceilinggibs.mdl
//* <b>Break noise:</b> debris/bustceilingX.wav
//* <b>Bounce noise:</b> none
5: "Ceiling Tile"
//* <b>Gibs:</b> models/computergibs.mdl
//* <b>Break noise:</b> debris/bustmetalX.wav
//* <b>Bounce noise:</b> debris/woodX.wav
//* <b>Note:</b> Generates sparks when damaged.
6: "Computer"
//* <b>Gibs:</b> models/glassgibs.mdl
//* <b>Break noise:</b> debris/bustglassX.wav
//* <b>Bounce noise:</b> debris/glassX.wav
//* <b>Note:</b> Makes ricochet noises when damaged.
7: "Unbreakable Glass"
//* <b>Gibs:</b> models/rockgibs.mdl
//* <b>Break noise:</b> debris/bustconcreteX.wav
//* <b>Bounce noise:</b> debris/concreteX.wav
8: "Rocks"
]


  • +
  • -
  • 7


#156938 Obrazki map

Napisane przez Kusek w 03.08.2010 14:28

Witam, tutaj pokażę wam jak zdobyć obrazki do AMXBANS 6.0 :)

Więc zacznijmy :)

1. Sposób
Wchodzimy na stronę Klik :)
i wchodzi nam na stronę gametrackera, na której jest obrazek mapy de_dust :)
Aby znaleźć mapę dla siebie wystarczy zmienić końcówkę czyli

http://image.www.gam...aps/160x120/cs/de_dust.jpg

na

http://image.www.gam...aps/160x120/cs/nazwa_naszej_mapy.jpg

Oczywiście gametracker nie ma wszystkich map

2. Sposób
Pobrać załącznik
Znajduję się tam takie mapki jak :) (lecz nie jestem pewien czy wszystkie ^^ )

cs_1337_assault
cs_alpin
cs_assault
cs_backalley
cs_bikini
cs_btops_s
cs_estate
cs_havana
cs_italy
cs_militia
cs_office
cs_siege
cs_1337city_assault
cs_arabstreets
cs_assault255
cs_dust_dumb
cs_estate_of_maffia
cs_italy2
cs_max
cs_office2_v2
cs_wiocha
de_airstrip
de_antishock
de_aztec
de_aztec_cs15
de_cbble
de_chateau
de_cod_stalingrad
de_cpl_mill
de_dust
de_dust_cs15
de_dust2
de_dust2_gumis_v08
de_dust2_r2
de_dust2bh
de_dust4
de_inferno
de_kabul
de_lidl
de_mario_air
de_museum
de_nuke
de_nuke_1337
de_perfect_inferno
de_prodigy
de_rats_queats
de_rats_skyleroom
de_train
de_vertigo
de_westwood
de_xenos_bianka
de_blue
de_dust2_long
de_dust2_middle
de_eldorado
de_inferno2010
de_irak
de_mice2
de_nuke2010
de_rats_bathroom_2008
de_rats_theatre
de_rats_theatre_v2
de_rats4_final
de_russka
de_snowmen
de_westwood_big
de_winternuke
de_mcdonalds_source
de_aztec_evening
de_dustwings
de_dustmust3
awp_training
awp_india


Hmmm a więc co dalej, mamy już obrazki pobrane itd.
Teraz wchodzimy na nasze FTP gdzie mamy AMXBANS wchodzimy do folderu
images/maps/cstrike i wgrywamy tam nasze obrazki :)

To by było na tyle :)


PoZdRo Frajer

Zakaz kopiowania na inne fora :)

Załączone pliki


  • +
  • -
  • 8


#174335 Obrazki map

Napisane przez camilost w 26.09.2010 00:32

Łapcie megapack (7,58 MB .rar):
http://www.przeklej....ar-00219m1qc03p
http://www.speedysha...zki_amxbans.rar
http://www.megaupload.com/?d=DT63MZO0

Miałem na kompie do AMXBans i PsychoStats łącznie 1419 thumbów do mapek pod CSa ^^
Są też jakieś do DODa i innych modów (mało).
  • +
  • -
  • 3


#196368 Jak sprawdzić czy gracz utknął?

Napisane przez Ortega w 14.12.2010 16:28

stock bool:is_player_stuck( id ) {
static Float:fOrigin[ 3 ];
pev( id, pev_origin, fOrigin );

engfunc( EngFunc_TraceHull, fOrigin, fOrigin, 0, ( pev( id, pev_flags ) & FL_DUCKING ) ? HULL_HEAD : HULL_HUMAN, id, 0 );

if( get_tr2( 0, TR_StartSolid )
|| get_tr2( 0, TR_AllSolid )
|| !get_tr2( 0, TR_InOpen ) )
return true;

return false;
}

stock bool:is_player_skyaim( id ) {
static Float:fOrigin[ 3 ];
pev( id, pev_origin, fOrigin );

if( engfunc( EngFunc_PointContents, fOrigin ) == CONTENTS_SKY )
return true;

return false;
}

  • +
  • -
  • 2


#175987 [QTM COD:MW Mod] Wskrzesznie u medyka

Napisane przez Cypis' w 01.10.2010 19:10

Oto tutorial jak dodać wskrzeszanie do medyka na E

1. Dodajesz pod
//#define BOTY 1
to:
native cod_add_wskrzes(id, ile)

2. Do case klasy dodajesz:
cod_add_wskrzes(id,1)

3. Dodajesz pod
nowa_klasa_gracza[id] = 0;
w public Odrodzenie(id) to:
cod_add_wskrzes(id, 0)

4.to dodajemy na koniec sma cod moda

public plugin_natives()
{
register_native("cod_set_user_xp", "UstawDoswiadczenie", 1);
register_native("cod_get_user_xp", "PobierzDoswiadczenie", 1);
register_native("cod_get_user_health", "PobierzZdrowieMax", 1);
}

public UstawDoswiadczenie(id, wartosc)
{
doswiadczenie_gracza[id] = wartosc;
SprawdzPoziom(id);
}

public PobierzDoswiadczenie(id)
return doswiadczenie_gracza[id];

public PobierzZdrowieMax(id)
return maksymalne_zdrowie_gracza[id];


Cvary:
cod_revkit_time - Jak długo ma wskrzeszać osobę. Standardowo: 3(sekundy)
cod_revkit_health - Ile ma dać graczowi hp po wskrzeszeniu. Standardowo: 75(hp)
cod_revkit_distance - Z jakiego maksymalnej odległość można wskrzeszać. Standardowo: 100(dystanse)
cod_revkit_xpdefiling - Ile expa ma dawać za 'zjedzenie' przeciwnika. Standardowo: 10(exp)
cod_revkit_xpraise - Ile expa ma dawać za wskrzeszenie osoby ze swojej drużyny. Standardowo: 20(exp)
cod_revkit_hpdefiling - Ile hp ma dawać za 'zjedzenie' przeciwnika. Standardowo: 30(hp)
cod_revkit_ile - Ile osób można wskrzesić na rundę. Standardowo: 10

sma wskrzeszania do medyka pod starego cod moda:
Załączony plik  medyk.sma   12,86 KB  622 Ilość pobrań
  medyk.amxx
  • +
  • -
  • 21


#175518 Pomoc z Napalmem

Napisane przez kyku w 29.09.2010 20:04

zmienna napalmy musi byc tablica

+

napalmy<=0 &&
zamien na
napalmy[id]<=0 ||
  • +
  • -
  • 1


#175742 Pomoc z Napalmem

Napisane przez kyku w 30.09.2010 18:32

nie zawsze identyfikator gracza (ID) to zmienna id ;-)
  • +
  • -
  • 1


#175763 Pomoc z Napalmem

Napisane przez kyku w 30.09.2010 19:31

bez kodu? nie

Dodano 30 wrzesień 2010 - 20:31:
a zmieniles.
zaraz oblukam ;P

Dodano 30 wrzesień 2010 - 20:37:
masz

Załączone pliki

  • Załączony plik  a.txt   6,51 KB  230 Ilość pobrań

  • +
  • -
  • 1


#120440 Prośba o napisanie pluginu.

Napisane przez G[o]Q w 23.03.2010 15:48

bo jak masz zaincludowany fun to tam juz jest taka funkcja wiec nie mozesz jej definiowac jako stock jeszcze raz :/

a tak w ogóle to czy set_user_frags nie uaktualnia wpisu w tabeli :?:
  • +
  • -
  • 1