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
 

Andy19 - zdjęcie

Andy19

Rejestracja: 01.04.2011
Aktualnie: Nieaktywny
Poza forum Ostatnio: 12.11.2013 12:44
-----

#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  3720 Ilość pobrań
  newdiablo.amxx
  • +
  • -
  • 56


#144797 MySQL - z czym to się je.

Napisane przez Owner123 w 17.06.2010 14:31

Witam.
Na wstępnie chciałbym powiedzieć, że nie będę opisywał tu zapytań MySQL ponieważ to mija się z celem. Jeśli ktoś chce się pouczyć zapytań MySQL zapraszam na uw-team.org (nie wiem czy taka reklama jest dozwolona, jeśli tak to prosiłbym o nie wlepianie mi warna). Szczerze polecam Wideotutorial Unknow'a na temat MySQL.
Życzę miłej lekturki.

MySQL, cóż to takiego ?

Edit. Thx 4 R3X
SQL - Structured Query Language (pl. strukturalny język zapytań), jest to nowoczesny język, dzięki któremu można posługiwać się bazami danych. MySQL to popularna odmiana serwera, które potrafi przetwarzać zapytania w tym języku.

Przejdźmy do sedna.
Aby móc zacząć pracować, musimy dołączyć do swojego pluginu dyrektywą #include odpowiednią biblioteke:

#include <sqlx>


Dobra mamy już odpowiednie narzędzia aby zacząć

Są 2 metody, pracy na bazach danych. Ja opiszę tutaj sposób, który używam osobiście i który sprawdza się w wielu przypadkach (m.in. Diablo Mod).
Ta metoda opiera się tylko na utworzeniu "pojemnika" który przechowuje dane dostępowe do bazy danych i odpowiednim użyciu go.
Możemy go stworzyć funkcją SQL_MakeDbTuple:
native Handle:SQL_MakeDbTuple(const host[], const user[], const pass[], const db[], timeout=0);

Po kolei:
const host[] - adres Hosta. Np. db4free.net, 127.0.0.1
const user[] - login. np. root
const pass[] - hasło.
const db[] - nazwa bazy danych. np. nauka
timeout=0 - tego parametru nie będę opisywał. Najlepiej zostawić tak jak jest.

Przykładowe użycie:
new Handle:Tuple = SQL_MakeDbTuple("127.0.0.1", "root", "", "nauka")

Najlepiej aby zmienne, które są właśnie "pojemnikiem" były globalne.

W jaki sposób wykonać jakieś zapytanie ?

A więc tak, są 2 metody wykonywania zapytań do bazy danych:

- Bezpośrednia (NON-Threaded)
- Pośrednia (Threaded)

Poniżej postaram się opisać obie metody.

Pośrednia / Threaded

Ta metoda przy dużej ilości wpisów w bazie (30k++) zaczyna działać z dużym opóźnieniem, nie ważne na jak dobrym hostingu mamy ulokowaną bazę danych. Jednak jest o wieele bezpieczniejsza. Na czym polega jej bezpieczeństwo?
Otóż tą metodą otrzymujemy wynik później, jednak nie powoduje ona lagów - w przeciwieństwie do NON-Threaded (w niektórych przypadkach, które potem opiszę).

Aby posłuzyć się tą metodą jest funkcja SQL_ThreadQuery:
native SQL_ThreadQuery(Handle:db_tuple, const handler[], const query[], const data[]="", dataSize=0);


Handle:db_tuple - uchwyt do "pojemnika"(nie wiedziałem jak to inaczej określić). Niezbędny aby cokolwiek zrobić.
const handler - nazwa funkcji publicznej która zostanie wywołana PO wykonaniu zapytania.
const query[] - treść zapytania. Jeśli jest skomplikowane lub wymaga użycia %d lub %s to wtedy należy to odpowiednio przygotować komendą format().
Podziękowania dla G[o]Q.
const data[]="" oraz dataSize=0 - parametry opcjonalne.

data to jakby tablica parametrow a dataSize to ich ilosc tak jak parametry w set_task o czym jest osobny poradnik


Przykładowe użycie:

new Handle:gTuple, bool:gConnected
[...]
//Tworzymy "pojemnik" i ustawiamy zmienną gConnected na true jeśli wszystko obeszło się bez przeszkód.

SaveData(id)
{
if(!gConnected) return

new Data[1]
Data[0] = id
new qCommand[512], szName[32]
get_user_name(id, szName, charsmax(szName))
format(qCommand, sizeof qCommand-1, "INSERT INTO nauka VALUES(%s, %i, %i);", szName, iPlayerXP[id], iPlayerLvl[id])
SQL_ThreadQuery(gTuple, "SaveHandler", qCommand, Data, 1)
}

public SaveHandler(FailState, Handle:Query, Error[], Errorcode, Data[], DataSize)
{
new id = Data[0]
if(Errorcode)
log_amx("Blad w zapytaniu: %s [SaveData]", Error)

if(FailState == TQUERY_CONNECT_FAILED)
{
log_amx("Nie mozna podlaczyc sie do bazy danych.")
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED)
{
log_amx("Zapytanie anulowane [SaveData]")
return PLUGIN_CONTINUE
}

return PLUGIN_CONTINUE
}


Oczywiście zamiast funkcji log_amx, możemy posłużyć się funkcją log_to_file.
Przedstawiłem tu zapis Nicku, Xp i Levela graczy do bazy MySQL.

A co z odczytem ?
Powyższa instrukcja spowoduje, dodanie kolejnego wpisu do bazy danych. Nie ważne czy taki wpis już istnieje czy nie.
Aby sprawdzić czy dany wpis istnieje musimy posłużyć się kolejnym zapytaniem:
new Handle:gTuple, bool:gConnected
[...]
//Tworzymy "pojemnik" i ustawiamy zmienną gConnected na true jeśli wszystko obeszło się bez przeszkód.

CheckData(id)
{
if(!gConnected) return

new Data[1]
Data[0] = id
new qCommand[512], szName[32]
get_user_name(id, szName, charsmax(szName))
format(qCommand, sizeof qCommand-1, "SELECT * FROM `nauka` WHERE `nick` = '%s'", szName)
SQL_ThreadQuery(gTuple, "CheckHandler", qCommand, Data, 1)
}

public CheckHandler(FailState, Handle:Query, Error[], Errorcode, Data[], DataSize)
{
new id = Data[0]
if(Errorcode)
log_amx("Blad w zapytaniu: %s [CheckData]", Error)

if(FailState == TQUERY_CONNECT_FAILED)
{
log_amx("Nie mozna podlaczyc sie do bazy danych.")
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED)
{
log_amx("Zapytanie anulowane [CheckData]")
return PLUGIN_CONTINUE
}

if(!SQL_MoreResults(Query)) // Nie znaleziono wpisów w bazie danych. Możemy spokojnie utworzyć.
DodajWpis(id)
else // A jednak coś znalazł ! Żeby nie robić kolejnej funkcji od razu odczytujemy.
{
iPlayerXp[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "exp")) // Ponieważ funkcja SQL_ReadResult wymaga ID pola, a my go nie mamy musimy posłużyć się funkcją SQL_FieldNameToNum.
iPlayerLvl[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "lvl")) // j/w
}

return PLUGIN_CONTINUE
}


Tutaj za wiele chyba tłumaczyć nie muszę. Sprawdzamy czy rekordy w bazie danych istnieją. Jeśli nie, to dodajemy, ale jak istnieje od razu odczytujemy dane.

Przechodzenie z jednego wpisu do drugiego
Załóżmy, że zapytanie SELECT zwróci nam kilka rekordów. Powyższa metoda nie zadziała poprawnie albo zadziała inaczej niż przewidywaliśmy.
Wtedy przydatna jest komenda SQL_NextRow(Handle:Query).
Przykład (zaczerpnięty z DiabloModa):
while(SQL_MoreResults(Query))
{
new i = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "klasa"))
srv_avg[i] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "AVG"))
SQL_NextRow(Query)
}

Jak zapewne wiadomo - klas w Diablo Modzie jest 8. Zatem zapytanie powyższe zapytanie SELECT odczyta zawartość tylko dla Maga a dla reszty nic by to nie zmieniło. Tutaj zastosowano pętle while która sprawdza czy nadal są jakieś zapytania, jeśli już nie ma - przerwij. Jak już wspomniałem funkcja SQL_NextRow powoduje przeskoczenie z jednego zapytania na drugie, zmniejszając przy tym wartość zwracaną funkcji SQL_MoreResults().

Dla tych co nie rozumieją zbytnio mechanizmu działania
No dobrze. Zapytanie SELECT zwróciło nam 3 rekordy. Chcemy odczytać wszystkie 3, więc tutaj musimy użyć naszej funkcji - SQL_NextRow. Ponieważ, funkcja SQL_MoreResults zwraca ilość rekordów które zostały do odczytania jeśli nic nie zrobiliśmy ma obecnie wartość 3. Dla pomocy kod:
while(SQL_MoreResults(Query))
{
//kod
SQL_NextRow(Query)
}

Po pierwszym obrocie pętli przesuneliśmy się z rekordu pierwszego, na rekord drugi i już wartość zwracana przez funkcje SQL_MoreResults(Query) ma obecnie 2. Teraz możemy bez przeszkód odczytać zawartość kolejnego rekordu.

NOWE!!!
Bezpośrednia / NON-Threaded
Ta metoda daje natychmiastowy zwrot rezultatu ALE pod warunkiem że bazę danych mamy ulokowaną na tej samej maszynie co serwer. W przeciwnym wypadku na serwerze będą ściny serwera i masakryczne pingi.
Aby móc zacząć robić cokolwiek musimy się wpierw połączyć z bazą:

Handle:SQL_Connect(Handle:sqlTuple, &error, szError[], len);

I tutaj strzeżcie się! Pamiętajcie aby ZAWSZE użyc SQL_FreeHandle(Handle:db) jak skończycie majstrować z bazą ! Jak tego nie będziecie robić, serwer będzie crashować bez żadnych error logów. Przykładowe połączenie z bazą wygląda następująco:

public client_authorized(id)
{
new Handle:hConnection, iError, szError[256];

if((hConnection = SQL_Connect(g_hSqlTuple, iError, szError, 255)))
{
// operacje na bazie danych
}
else
{
log_error(AMX_ERR_GENERAL, "Brak polaczenia z baza danych !");
log_error(AMX_ERR_GENERAL, "Kod bledu: %i", iError);
log_error(AMX_ERR_GENERAL, "Tresc bledu: %s", szError);
}

SQL_FreeHandle(hConnection); // PAMIETAJ O TYM BO INACZEJ CZEKA CIE ZGUBA !!!
}


I co to daje ? W metodzie pośredniej takie coś było zbędne!
Otóż użycie tego daje nam możliwość bezpośredniego wprowadzania zapytań do bazy danych. Aby wprowadzić zapytanie musimy użyć 2 funkcji:

Handle:SQL_PrepareQuery(Handle:connection, fmt[], any:...);
bool:SQL_Execute(Handle:query);

Dla ścisłości: funkcja SQL_Execute naprawdę nie zwraca typu bool tylko typ int. Jednak napisałem bool aby uświadomić Tobie, Drogi czytelniku, aby ta funkcja zwraca tylko wartości 1 i 0 aby nas poinformować o tym czy wykonanie zapytania SQL przebiegło poprawnie.
Przejdźmy do małego opisu parametrów:
SQL_PrepareQuery:
Pierwszy parametr:
Uchwyt zwrócony przez funkcje SQL_Connect. Tak, właśnie dlatego było nam potrzebne ręczne połączenie się z bazą!
Drugi i reszta parametrów: Treść zapytania. Jest to w miarę elastyczne ponieważ możemy używać znacznikow %d, %s itd. Uwaga! Nie zalecam używanie tu zapytań typu UPDATE ! Zamiast tego polecam użycie zapytań REPLACE, jednak aby działały one poprawnie wymagane jest utworzenie klucza PRIMARY, UNIQUE lub INDEX. Dlaczego? Nawet jeśli kod jest w pełni zoptymalizowany i baza danych stoi na localhoscie, przy dużej ilości rekordów (100k+, czasem 50k+) powodowane są ścinki i lagi serwera.
Rezultat: Uchwyt do wykonania zapytania. Ta funkcja tylko przygotowuje zapytanie !!! Zapytanie jest wykonywane dopiero przy użyciu funkcji SQL_Execute()! I niech was ręka boska broni! Tutaj też uzywajcie funkcji SQL_FreeHandle()!!! Tak samo jak w przypadku SQL_Connect nie użycie tego powoduje crashe serwera bez żadnych logów!

SQL_Execute:
Jest tutaj tylko jeden parametr: Uchwyt zwrócony przez funkcje SQL_PrepareQuery. Wykonanie tej funkcji jest równoznaczne z wywołaniem zapytania, wcześniej przygotowanego przez funkcje SQL_PrepareQuery.

Dobra koniec teorii, czas na podanie przykładowego kodu:

public client_authorized(id)
{
new Handle:hConnection, iError, szError[256];

if((hConnection = SQL_Connect(g_hSqlTuple, iError, szError, 255)))
{
new szNick[32];
get_user_name(id, szNick, 31);

new Handle:hQuery = SQL_PrepareQuery(hConnection, "SELECT * FROM tabela WHERE `nick` = '%s'", szNick);

if(SQL_Execute(hQuery))
{
new num = 0;
while(SQL_MoreResults(hQuery))
{
num = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "klasa"));
g_iPlayerLvl[id][num] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "lvl"));
g_iPlayerExp[id][num] = SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "exp"));
SQL_NextRow(hQuery)
}
}
else
{
SQL_QueryError(hQuery, szError, 255);
log_error(AMX_ERR_GENERAL, "Blad w zapytaniu !");
log_error(AMX_ERR_GENERAL, "Kod bledu: %i", iError);
log_error(AMX_ERR_GENERAL, "Tresc bledu: %s", szError);
}

SQL_FreeHandle(hQuery); // Niech was reka boska broni, przed zapomnieniem o tym
}
else
{
log_error(AMX_ERR_GENERAL, "Brak polaczenia z baza danych !");
log_error(AMX_ERR_GENERAL, "Kod bledu: %i", iError);
log_error(AMX_ERR_GENERAL, "Tresc bledu: %s", szError);
}

SQL_FreeHandle(hConnection);
}


Dałem kod razem z SQL_Connect abyście dobrze widzieli w jaki sposób posługiwać się uchwytem do połączenia.

Jak zapewne widać zmian w korzystaniu z SQL_ReadResult i SQL_NextRow nie ma.

Na tym kończę ten tutorial!

Myślę że opisałem najważniejsze rzeczy. Jeśli ktoś chce poznać resztę funkcji które oferuję biblioteka sqlx wystarczy zajrzeć do pliku sqlx.inc który znajduję się w addons/amxmodx/scripting/include. Co prawda po angielsku, ale chyba z jakiejś przyczyny powstały tłumacze internetowe, prawda ? Dobrym punktem odniesienia jest Diablo Mod. Posiada on szereg funkcji dzięki którym możemy majstrować w bazie MySQL.

Wszelkie błędy, niedopowiedzenia oraz literówki lub inne badziewa, proszę zgłaszać w tym temacie.
Wszelka krytyka mile widziana smile.gif


  • +
  • -
  • 31


#403603 Advanced MOTD

Napisane przez MarWit w 29.04.2012 16:21

Advanced MOTD

opis

Jest to plugin udostępniający szereg tagów, których można użyć w motd dające możliwość jego lepszej personalizacji. ( coś jak SMARTY w PHP )
Są to:
{data} - Zamienia na date w formacie dd-mm-rrrr
{hostname} - Zamienia na nazwe serwera np. Mój serwer
{serverip} - Zamienia na adres ip i port serwera np. 127.0.0.1:27015
{mapcycle} - Zamienia na mapcykl z pliku mapcycle.txt
{[sciezka_do_pliku]} - W miejsce tagu zostaje wypisana treść pliku ( ./ = folder modyfikacji np. cstrike )

konfiguracja

Przykładowa templatka:

<html>
<head>
<title>Witaj na {hostname}</title>
</head>
<body bgcolor="black" text="white">
<center>
Witaj na {hostname}! Dzisiaj jest {data} .<br>

IP tego serwera to: <strong>{serverip}</strong><br><br>

Na serwerze gramy:

{mapcycle}

Życzymy miłej gry!
</center>
</body>
</html>


Będzie wyglądała tak:


<html>
<head>
<title>Witaj na Mój Serwer</title>
</head>
<body bgcolor="black" text="white">
<center>
Witaj na Mój Serwer! Dzisiaj jest 29-04-2012 .<br>

IP tego serwera to: <strong>127.0.0.1:27015</strong><br><br>

Na serwerze gramy:

<pre>
de_dust2
de_train
awp_india
cs_italy
</pre>

Życzymy miłej gry!
</center>
</body>
</html>


instalacja
Standardowa.

Templatke zapisujemy pod nazwą motd.txt i wrzucamy do katalogu amxmodx/configs

download

Załączone pliki


  • +
  • -
  • 10


#402283 [ROZWIĄZANE] błąd set_user_footsteps

Napisane przez speedkill w 26.04.2012 21:37

cały public respawn(id) zamień na :
public respawn(id)
{
	if(is_user_alive(id))
	{
		if(prezent[id])
		{
			cs_set_user_money(id,cs_get_user_money(id) + 1000)
			set_user_footsteps(id,1)
		}
		else
		{
			set_user_footsteps(id,0)
		}
	}
}

  • +
  • -
  • 1


#367448 V.i.P

Napisane przez Misiaczek ;c w 19.02.2012 16:25

V.i.P Plugin 1.0.3
by MisieQ
opis.png

Witam wink.gif

Przedstawiam wam mój V.i.P plugin :) oparty o VIP Maganger + API by Exolent[jNr]

Modele VIP

amxx_1329666591__tt.jpgamxx_1329666624__ct.jpg

inneinformacje.png

Co się zmieniło w porównaniu do wersji 0.5.5? Plugin został od nowa napisany, naprawiono błędy itp.

opis.png
  • Własny Model (CT & TT)
  • Podwójny Skok
  • Bullet Damage
  • Ciche Chodzenie
  • Status V.I.P w ScoreBoard
  • Powitanie gdy wchodzi/wychodzi na serwer
  • Co respawn dostaje 2fb,he,sg (cvary)
  • Dodatkowe hp za zabicie przeciwnika
  • Menu broni dla V.i.P
  • Listę V.i.P na serwerze
  • Motd z informacja o tym co daje V.i.P
  • Dodatkowa Kasa za Zabicie (damage,hs i zwykly kill - cvary)
  • Mniejsza grawitacje na nożu
  • Dodatkowa kasę za podłożenie/rozbrojenie paki
  • Darmowa Kamizelka
  • Regeneracje HP na nozu :)
wymaganemoduly.png
  • CStrike
  • Fun
  • FakeMeta
  • HamSandWich
  • SQL (jeśli chcemy zapis SQL)
  • Dodatkowo wymagany jest cs_player_models_api który jest zawarty w paczce ;)
komendy admina

vip_adduser <name, #userid, authid> <type> [flagi] [dni] - dodaje V.i.P userowi na okreslone flagi oraz dni
vip_reload - przeladowuje liste vip (cos ala amx_reloadadmins)

inne informacje

Dołączam także skrypt www do zarządzania vip autorstwa Exolenta, w celu konfiguracji otwieramy /_inc/config.php i wpisujemy dane oraz podane tam sa dane do konta admina i instrukcja dodawania nowych kont adminów

cvary


// Plik Konfiguracyjny API V.i.P
// ========================================

// Wlacz/Wylacz zapis SQL dla V.i.P
// 0 = Wylaczony, korzysta z pliku vip_users.ini
// 1 = Wlaczony i uzywa zapisu SQL (Jesli wystapia problemy z polaczeniem zostanie uzyty plik vip_users.ini jako kopia)
// Standardowo: 0
vip_sql 0

// Konfiguracja SQL
// Nie wymaga ustawiania jesli vip_sql ustawiono na 0
vip_sql_host ""
vip_sql_user ""
vip_sql_pass ""
vip_sql_db ""

// Tutaj wpisujemy flagi ktore musi posiadac admin aby byc vipem
// Standardowo: ""
vip_auth_flags ""

// Standardowe flagi dawane graczowi ktory jest vip
// Standardowo: ""
vip_default_flags ""

// Czyszczenie wygaslych vipow
// 0 = Zostawia stare wpisy
// 1 = usuwa stare vpisy
// Standardowo: 0
vip_delete_expired 0

// Pole z Hasłem gracz
// działa podonie do amx_password_field
// Standardowo: _vip_pw
vip_password_field "_vip_pw"
 
 
download.png
Poprzednia wersja była pobrana ponad tysiąc razy ;] myśle że ta też będzie miała takie zainteresowanie ;))

Załączony plik  V.i.P 1.0.3.rar   3,04 MB  1926 Ilość pobrań


Wszelkie błędy zgłaszajcie mi w temacie to je będę poprawiać i aktualizować plugin jezyk.gif

Ostrzeżenie

Zastrzegam sobie prawo do kopiowania plików/funkcji z vipa bez mojej zgody, będę za to surowo karał!


  • +
  • -
  • 51


#111562 Dproto [0.9.187] - Instalacja i konfiguracja (NonSteam + Steam)

Napisane przez mgr inż. Pavulon w 12.02.2010 22:51

[info="NOWA WERSJA"]Temat jest nieaktualny, nowsza wersja dproto tutaj: Dproto 0.9.491 [12.2014] [Fix Exploit & Bug Fix][/info]

dproto jest pluginem metamod umożliwiającym granie na jednym serwerze graczom posiadającym Steam oraz Non Steam (protokół 48 i 47).

[error=Uwaga!]Nowa wersja dproto NIE BĘDZIE działała na nowej wersji HLDS!
Autor zapowiedział, że wersję pod nowe HLDS wyda dopiero, gdy Valve zaprzestanie aktualizacji dla GoldSource.[/error]

Instalacja dproto:
Instalacja przebiega standardowo jak dla pluginów metamod czyli:
  • Pobieramy i rozpakowujemy paczkę z pluginem: Załączony plik  dproto_187.zip   168,59 KB  10779 Ilość pobrań


    [warn=Portek]Żeby DPROTO 0.8.65+ działało poprawnie należy zaktualizować plik dproto.cfg![/warn]
Starsze wersje:
Spoiler
  • W katalogu cstrike/addons/ tworzymy folder i nazywamy go dproto
  • kopiujemy do niego plik dproto.dll (w przypadku serwera windows) lub dproto_i386.so (w przypadku serwera linux). [pliki te w paczce znajdują się w katalogu bin/]
  • edytujemy plik plugins.ini metamod'a (zwykle cstrike/addons/metamod/plugins.ini) i dodajemy w nim na początku linijkę:
    win32 addons\dproto\dproto.dll
    (dla serwera windows)
    lub
    linux addons/dproto/dproto_i386.so
    (dla serwera linux)
  • kopiujemy plik dproto.cfg do głównego katalogu lub katalogu gry (cstrike/)
  • uruchamiany serwer dodając do linii strartowej -binary ./hlds_i686
    Jeżeli po wpisaniu w konsoli komendy meta list otrzymamy coś podobnego do:

    Currently loaded plugins:
    description stat pend file vers src load unlod
    [ 1] dproto RUN - dproto_i386.so v0.9.179 ini Start Never
    [ 2] AMX Mod X RUN - amxmodx_mm_i386. v1.8.1.3 ini Start ANY
    2 plugins, 2 running

    To znaczy że instalacja przebiegła pomyślnie.
xds_opt
Od wersji 0.4.5 dproto została zaimplementowana poprawka dzięki której xds_opt nie jest już potrzebne
Spoiler


Changelog:

0.9.187:
  • Dodano patch na exploit FVU
0.9.179:
  • naprawiono błąd "STEAM userid keysize is bogus" dla klientów SteamEmuclients
0.9.178:
  • naprawiono error "Invalid challenge format" wyślietkalny klientowi przy łączeniu się z serwerem
0.9.87-0.9.177:
  • Naprawiono kilka błędów
  • Usunięte opcje subserwera i "master-client" - opcje te nie są więcej potrzebne
  • "Added challenge checking code to "rules" and "players list" requests handlers" - tłumaczenie wydaje się bezsensowne, więc nie tłumaczę
Spoiler
Łatanie:
Spoiler


Konfiguracja dproto:
Spoiler


Oficjalny temat oraz zawsze aktualna wersja pod adresem: dproto.com lub cs.rin.ru/forum/viewtopic.php?f=29&t=55986
  • +
  • -
  • 65


#351998 Problem z kompilacja dbmod 5.9

Napisane przez Nakupenda. w 20.01.2012 23:09

On może nie ale ja tak:

Załączone pliki


  • +
  • -
  • 1


#352151 Problem z kompilacja dbmod 5.9

Napisane przez kavi76 w 21.01.2012 13:12

Kompiluj się ładnie, wydaje mi się że będzie działać.

Załączone pliki


  • +
  • -
  • 1


#347960 Vote Hs - Zmiana położenia napisu Hud

Napisane przez forma w 11.01.2012 17:42

Może być ?

Załączone pliki


  • +
  • -
  • 1


#351885 Problem z kompilacja dbmod 5.9

Napisane przez kavi76 w 20.01.2012 17:04

Masz tu w załączniku ładnie skompilowane. Errorów żadnych nie ma a warningi znaczą tyle że gdzieś zrobiłeś nierówne wcięcie itp.

Załączone pliki


  • +
  • -
  • 1


#303238 [ROZWIĄZANE] Zwiększona prędkość na nożu

Napisane przez R3X w 05.10.2011 13:07

amx_knife_speed 250
to normalna prędkość

szybkość graczy odgórnie ogranicza cvar sv_maxspeed

#include <amxmodx>
 
#include <amxmisc>
#include <fakemeta>
 
#define PLUGIN "Wieskza predkosc na nozu"
#define VERSION "1.0"
#define AUTHOR "R3X"
 
new gcvarKnifeSpeed;
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_event("CurWeapon", "fwKnifeDeploy", "be", "1=1", "2=29");
	
	gcvarKnifeSpeed = register_cvar("amx_knife_speed", "280");
}
 
public fwKnifeDeploy(id)
{	
	engfunc(EngFunc_SetClientMaxspeed, id, get_pcvar_float(gcvarKnifeSpeed));
}

  • +
  • -
  • 2


#301720 Problem z ukrywaniem slota

Napisane przez Pingwinek w 29.09.2011 22:55

sv_maxplayers 17
sv_visiblemaxplayers 17

i

amx_reservation 1
amx_hideslots 0

pokombinuj ;f

  • +
  • -
  • 1


#300395 Amx 1.8.2 Bug? Zapraszam.

Napisane przez DarkGL w 25.09.2011 20:52

a usuń z "abk" b ;)
jak to nie zadziała to sprawdzę kod 1.8.2
  • +
  • -
  • 1


#87236 [Poradnik] Instalacja Psychostats

Napisane przez MaTusz w 13.10.2009 04:28

Zamieszczam swój Poradnik,myśle że bardziej zrozumiały i opisany niż ten co jest w Tym temacie Dołączona grafika
Proszę o nie usuwanie,na pewno się przyda Dołączona grafika

Instalacja Psychostats 3.1


<p>Wymagania:

~ Hosting WWW ( W tym poradniku wykorzystałem hosting Hitme.pl ale na większości hostingów wygląda tak samo )
~ Psychostats ( Poradnik dla wersji 3.1 - przy innych wersjach prawdopodobnie będzie tak samo )
~ PHP w wersji 5 lub wyższej
~ Baza MySQL ( z możliwością zdalnych połączeń )
~ PERL ( w większości płatnych serwerów )
~ CRON TAB ( inaczej Harmonogram Zadań )


1. Tworzenie bazy danych pod Psychostats:

~ W tym celu logujemy się do naszego panelu administracyjnego (w tym przypadku Cpanel)
~ Przechodzimy do zakładki Kreator baz MySQL i tworzymy baze danych,nadając jej swoją nazwe i hasło (można wygenerować za pomocą przycisku Dołączona grafika lub wpisać swoje) i nadajemy prawa dostępu.

Dołączona grafika
Dołączona grafika
Dołączona grafika
Dołączona grafika

~ Klikamy Następny Krok i nasza baza została utworzona
~ Nie zapomnijcie o zapisaniu sobie nazwy bazy,użytkownika i hasła,w naszym przypadku będzie to wyglądało tak:

nazwa bazy = psychost_psychostats
użytkownik bazy = psychost_matusz
hasło bazy = |u|u/19Pz,zt

2. Przygotowanie do Instalacji:

~ Ściągamy najnowszą wersje Psychostats 3.1 pod Linuxa STĄD lub MIRROR Linux
~ Rozpakowujemy na Pulpit

3. Kopiowanie na FTP:

~ Do głownego Katalogu serwera (przed public_html) kopiujemy katalog lib oraz pliki stats.cfg i stats.pl

Dołączona grafika

~ Ustawiamy atrybuty 777 (CHMOD 777) na plik stats.pl

Dołączona grafika

~ Edytujemy plik stats.cfg i stats.pl dopisując dane

W stats.cfg
dbtype = mysql
dbhost = localhost
dbport =
dbname = psychost_psychostats
dbuser = psychost_matusz
dbpass = |u|u/19Pz,zt
dbtblprefix = ps_

W stats.pl (na samym dole)
dbtype = mysql
dbhost = localhost
dbport =
dbname = psychost_psychostats
dbuser = psychost_matusz
dbpass = |u|u/19Pz,zt
dbtblprefix = ps_

~ Następnie w katalogu public_html tworzymy folder o nazwie psychostats

Dołączona grafika

~ I kopiujemy do niego zawartość folderu upload (podkreślam zawartość nie folder)

Dołączona grafika

~ Następnie wchodzimy do katalogu psychostats , szukamy pliku config.php i nadajemy mu odpowiednie atrybuty (CHMOD) 777

Dołączona grafika

~ Zawartość pliku (po instalacji psychostats) config.php powinna wyglądać w ten sposób:

[code=auto:0]

Załączone pliki


  • +
  • -
  • 21


#288817 Plugin na CSDM - ożywia po przejściu ze spec

Napisane przez Lukasz5 w 29.08.2011 01:09

Może użyj coś z tego? W tym 2 gracz może być ożywiony kiedy chce, czyli pójdzie zrobi herbatę i się zrespi... ;)
http://amxx.pl/topic...wy-autorespawn/
http://amxx.pl/topic/8473-respawn/
  • +
  • -
  • 1