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.
|
BaQStiC
Rejestracja: 25.09.2010Aktualnie: Nieaktywny
Poza forum Ostatnio: 12.07.2019 18:38
Statystyki
- Grupa: Power User
- Całość postów: 628
- Odwiedzin: 10 015
- Tytuł: Supra Team
- Wiek: 36 lat
- Urodziny: Kwiecień 2, 1988
-
Imię
Daniel
-
Płeć
Mężczyzna
-
Lokalizacja
Ck / Wroc
-
Zainteresowania
dj'k/sEx/Cs
Kontakt
- GG 12611358
- Strona WWW http://www.killing-spree.eu
- Skype [url=http://amxx.pl/user/11690-baqstic/][img]http://amxx.pl/ms-11690.png[/img][/url]
- Steam 76561198040582387
Narzędzia użytkownika
Ostatnio byli
#307752 Generator klas COD Mod
Napisane przez R3X w 14.10.2011 18:40
Wypełnij formularz i pobierz własną klasę do nowego Cod moda. Oprócz wyboru broni i statystyk klasy możliwe jest też dołączanie różnych dodatków. Na razie jest ich kilka, niedługo będą kolejne.
Mam nadzieję, że się przyda
#303879 [ROZWIĄZANE] Automatyczne nagrywanie
Napisane przez MarWit w 07.10.2011 14:19
#include <amxmodx>
new g_szDemoName[64] = "cos_fajnego"
public plugin_init()
register_event("TeamInfo","team_assign","a")
public team_assign() {
client_cmd(read_data(1), "record %s", g_szDemoName)
set_task(120.0, "StopRecord", read_data(1))
}
public StopRecord(id)
client_cmd(id, "stop")
Tam gdzie: "cos_fajnego", zmień na własna nazwę demka. ( max. 64 znaki )
#303752 [ROZWIĄZANE] Automatyczne nagrywanie
Napisane przez speedkill w 06.10.2011 19:19
#302232 Team Fortress 2 Mod
Napisane przez DarkGL w 01.10.2011 22:41
#300710 Pasek postępu nad głową
Napisane przez R3X w 27.09.2011 10:03
Plugin pokazuje pasek postępu przy podkładaniu i rozbrajaniu paki (generalnie wszystkie łapane BarTime), ale widzą go tylko członkowie drużyny .
.sma trzeba przepuścić przez kompilator i .amxx zwyczajnie do plugins/ + wpis do plugins.ini
.spr do cstrike/sprites/
ukrywanie ikony przed przeciwnikiem wymaga sporych zasobów, spróbuję to jeszcze zoptymalizować
Załączone pliki
-
defuse_progress_bar.sma 3,77 KB 546 Ilość pobrań
defuse_progress_bar.amxx -
progress.spr 9,62 KB 577 Ilość pobrań
#161924 Jak poprawnie zainstalować diablo na bazie z proserwer.pl/xaa.pl
Napisane przez Emixx. w 20.08.2010 13:31
Jak wiadomo często widzimy, jak ludzie proszą o pomoc z ustawieniem bazy na xaa.pl i połączeniem jej z serwerem
Zaprezentuje wam jak to zrobić kroczek po kroczku.
1. Musimy posiadać serwer na proserwer.pl (Tak aby była dostępna baza danych)
2. Logujemy się do Proserwer.pl I wchodzimy w zakładkę Zarządzanie (cPanel)
Mamy tam podane dane do cPanelu więc logujemy się.
Po udanym zalogowaniu ujrzymy taki oto widok :
3. Zjeżdżamy na dół do sekcji Bazy Danych i klikamy na Menedżer zdalnego połączenia MySQL
4. W polu hosta dajemy znaczek % i klikamy Add Host.
Powinno to wyglądać tak:
5. Następnym krokiem jest powrót do strony głównej cPanelu. Możemy się tam dostać przez kliknięcie w znaczek domka, w lewej górnej stronie ekranu.
6. Przechodzimy do Kreatora baz MySQL (Też w zakładce Bazy Danych)
7. W polu nazwa bazy danych wpisujemy dm
W tej chwili u mnie baza danych nazywa się emixx_dm
8. Następnym krokiem jest utworzenie nazwy użytkownika
Na screenie zaprezentowałem jak to zrobić.
Po wypełnieniu i kliknięciu Create User mój uzytkownik ma nazwę emixx_dm
9. Następnym krokiem jest ustawienie praw użytkownika bazy danych.
W tym celu zaznaczamy opcję WSZYSTKIE PRZYWILEJE
Powinno to wyglądać tak :
10. Klikamy Next Step
W tej chwili wyskakuje nam taki komunikat :
Oznacza to, że wszystko zrobione pomyślnie. ;D
Jeśli takie coś nie wyskoczy przeczytaj 3x ten poradnik i pomyśl co źle zrobiłeś.
11. Teraz wystarczy wypełnić Cvary i dodać je do amxx.cfg
diablo_sql_host "twojastronawxaa" diablo_sql_user "nazwauzytkownika" diablo_sql_pass "haslo" diablo_sql_database "nazwabazydanych" diablo_sql_table "obojetniecowpiszemy
U mnie to wygląda tak:
diablo_sql_host "emixx.xaa.pl" diablo_sql_user "emixx_dm" diablo_sql_pass "*******" // oczywiście tekst zastąpiłem gwiazdkami. diablo_sql_database "emixx_dm" diablo_sql_table "dmod"
Aby zresetować tabelkę trzeba wejść do phpmyadmin która jest w cPanelu
Myślę że przyda się to wielu osobom.
Proszę o przyklejenie, komentarze i wszelkie wypowiedzi związane z oceną poradnika.
#297366 Flagi
Napisane przez DarkGL w 18.09.2011 11:34
ADMIN_ALL - wszystkie ADMIN_IMMUNITY - flaga "a" ADMIN_RESERVATION - flaga "b" ADMIN_KICK - flaga "c" ADMIN_BAN - flaga "d" ADMIN_SLAY - flaga "e" ADMIN_MAP - flaga "f" ADMIN_CVAR - flaga "g" ADMIN_CFG - flaga "h" ADMIN_CHAT - flaga "i" * ADMIN_VOTE - flaga "j" ADMIN_PASSWORD - flaga "k" ADMIN_RCON - flaga "l" ADMIN_LEVEL_A - flaga "m" ADMIN_LEVEL_B - flaga "n" ADMIN_LEVEL_C - flaga "o" ADMIN_LEVEL_D - flaga "p" ADMIN_LEVEL_E - flaga "q" ADMIN_LEVEL_F - flaga "r" ADMIN_LEVEL_G - flaga "s" ADMIN_LEVEL_H - flaga "t" ADMIN_MENU - flaga "u" ADMIN_ADMIN - flaga "y" ADMIN_USER - flaga "z"Flagi dodatkowe :
ADMIN_FLAG_V - flaga "v" ADMIN_FLAG_W - flaga "w" ADMIN_FLAG_X - flaga "x"
żeby ich używać trzeba dodać do pluginu
#define ADMIN_FLAG_V (1<<21) #define ADMIN_FLAG_W (1<<22) #define ADMIN_FLAG_X (1<<23)
sprawdzenie czy gracz ma flage
if(get_user_flags(id) & ADMIN_LEVEL_A){ //gracz ma flage m }
sprawdzanie czy gracz nie ma flagi
if( !(get_user_flags(id) & ADMIN_LEVEL_A) ){ //gracz nie ma flagi m }
sprawdzanie czy gracz ma kilka flag
public has_flags(id,string[]) { new ret=1 new byte new len = strlen(string) new p_flag = get_user_flags(id) for(new i=0;i<=len;i++) { if(string[i]>='a' && string[i]<='z') byte = (1<<(string[i]-'a')) else if(string[i]>='A' && string[i]<='Z') byte = (1<<(string[i]-'A')) else if(string[i]==',' && ret==1) return 1 else if(string[i]==',') ret=1 if(byte!=0 && !(p_flag & byte)) ret=0 byte=0 } return ret }
Przyklady:
Jak ma dzialac na - a lub b lub c - to dajemy
has_flag(id,"a,b,c")Jak ma dzialac tylko gdy user ma flage - a i b i c - to dajemy
has_flag(id,"abc")Jak ma dzialac w przypadkach - a i b lub a i c lub b i c - to dajemy
has_flag(id,"ab,ac,bc")
Gracz musi mieć wszystkie 3 flagi
new flaga = (ADMIN_LEVEL_A | ADMIN_LEVEL_B | ADMIN_LEVEL_C) if((get_user_flags(id) & flaga) == flaga) { // KOD }lub inaczej
new sprawdz = get_user_flags(id) if(sprawdz & ADMIN_LEVEL_A && sprawdz & ADMIN_LEVEL_B && sprawdz & ADMIN_LEVEL_C) { // KOD }
Inne przykłady:
if (get_user_flags(id) & DEFINICJA_FLAGI) { //osoba ma jakas tam flage } else { //osoba nie ma jakies tam flagi }
public client_authorized(id) { if( get_user_flags(id) & ADMIN_BAN) client_print(0,print_chat,"Admin wchodzi na server") }
#283574 Przygotowanie stanowiska pracy - Notepad++
Napisane przez DarkGL w 16.08.2011 11:03
Dlaczego notepad++ ?
Jest kilka powodów :
- Nie muli przy 8k linijek (tak jak np. amxx-studio)
- Pozwala używać polskich znaków bez żadnego include
- Wygodny
- Posiada wiele przydatnych funkcji
- Instalacja programu↵
- Ustawianie stylu↵
- Kolory składni na standardowym stylu↵
- Styl do programowania↵
- Styl jak AMXX Studio / Pawn Studio↵
- Powiązanie plików *.sma i *.inc↵
- TextFX Auto poprawianie tabulacji↵
- Kompilacja pluginów↵
- Auto podpowiadanie składni↵
- Używane polskich znaków↵
Instalacja programu: ⇑
- Na początek musimy oczywiście ściągnąć notepad++
Oficjalna strona programu
obecnie najnowsza wersja to v5.9.3
proponuje ściągnąć
Notepad++ v5.9.3 Installer
- Instalacja jest bardzo prosta jedynie należy uważać aby
podczas instalacji ta opcja była odznaczona
Styl: ⇑
Standardowy styl notepad++ dla mnie średnio nadaje się do programowania pokaże jak go zmienić
- W górnym menu programu wybieramy ustawienia a potem konfigurator stylów
- W nowym oknie możemy wybrać jeden z dostępnych styli
Kolory składni na standardowym stylu: ⇑
Jeśli chcemy pisać na standardowym stylu notepad++ możemy wgrać 1 plik dzięki któremu składnia będzie kolorowana wygląda to tak
- Ściągamy ten plik
userDefineLang.rar 5,94 KB 2629 Ilość pobrań
- W eksploratorze windows wpisujemy
%appdata%\Notepad++
- Kopiujemy 1 plik (userDefineLang.xml) z rozpakowanego archiwum które ściągnęliśmy przed chwilą do folderu który się nam otworzył
Styl do programowania: ⇑
- Ściągamy ten plik
pawnIntegrated.rar 20,71 KB 3635 Ilość pobrań
- W eksploratorze windows wpisujemy
%appdata%\Notepad++
- Kopiujemy 2 pliki z rozpakowanego archiwum które ściągnęliśmy przed chwilą do folderu który się nam otworzył ma to wyglądać tak
- Tak wygląda plik sma po otwarciu
według mnie dużo czytelniej
Styl jak AMXX Studio / Pawn Studio: ⇑
Dla osób które przyzwyczaiły się do AMXX Studio / Pawn Studio polecam ten styl kolory są te same jak w tych programach ;]
- Ściągamy ten plik
userDefineLang.zip 15,53 KB 1206 Ilość pobrań
- W eksploratorze windows wpisujemy
%appdata%\Notepad++
- Kopiujemy 1 plik (userDefineLang.xml) z rozpakowanego archiwum które ściągnęliśmy przed chwilą do folderu który się nam otworzył
Wygląda to tak
Powiązanie plików: ⇑
- Włączamy teraz notepad++ z górnego menu wybieramy Ustawienia->Preferencje potem wybieramy zakładkę Powiązanie plików wybieramy customize następnie dodajemy pliki sma i inc o tak
- Punkt dla osób które podczas robienia rzeczy w podpunkcie wyżej miały zainstalowane na komputerze AMXX Studio lub PAWN Studio
- Wchodzimy w panel sterowania
- Przełączamy do widoku klasycznego
- Klikamy dwa razy na "opcje folderów"
- W nowym oknie wybieramy zakładkę "Typy plików"
- Znajdujemy rozszerzenie .sma i klikamy zamień (jeśli nie znajdziemy to po prostu klikamy nowy i dodajemy )
- Znajdujemy na liście notepad++ i klikamy ok
- Powtarzamy dwa punkty powyżej dla rozszerzenia .inc (zamiast sma szukamy inc )
TextFX Auto poprawianie tabulacji: ⇑
W AMXX Studio i Pawn Studio mieliśmy bardzo przydatną funkcje poprawiania tabulacji kodu (tools->indenter) w notepad++ też możemy ją mieć i to nawet lepiej działającą.
- Wchodzimy tutaj
- W zakładce "Available" znajdujemy "TextFX Characters" i instalujemy
będzie potrzebny restart notepad++
- Po restarcie w górnym menu widzimy nową zakładkę "TextFX" ma ona bardzo wiele opcji (polecam się pobawić ) ale interesuje nas tylko jedna "Reindent C++ code" która jest w "TextFX Edit" jej użycie mając otwarty plik sma powoduje uporządkowanie kodu.
Przed:
Po:
Kompilacja pluginów: ⇑
Notepad++ pozwala też na ustawienie sobie kompilacji pluginu pod klawisz
- Wchodzimy tutaj
- W zakładce "Available" znajdujemy "NppExec" i instalujemy
będzie potrzebny restart notepad++
- Po restarcie wchodzimy w opcje Pluginy -> NppExec -> Execute
- W oknie które nam się pojawi wklejamy taki kod
cd $(CURRENT_DIRECTORY) "E:\Documents and Settings\DarkaGL\Pulpit\compiler\amxxpc.exe" "$(FILE_NAME)"
oczywiście zamiast "E:\Documents and Settings\DarkaGL\Pulpit\compiler\amxxpc.exe" podajemy własną ścieżkę do pliku amxxpc.exe
radzę poczytać o kompilacji lokalnej http://amxx.pl/topic...ilowac-pluginy/
Klikamy save i nadajemy nazwę "AMXX Compiler"
- Wchodzimy teraz w Pluginy -> NppExec -> Advanced Options
- Pokaże się nam nowe okno w Item Name wpisujemy "AMXX Compiler"
a w Associated Scripts wybieramy AMXX Compiler (chyba że ustawiliśmy inna nazwę w punkcie wyżej )
- Klikamy Add/Modify i OK
- Restartujemy Notepad++
- Po restarcie wchodzimy w Ustawienia -> Skróty Klawiszowe
- W zakładce Plugin commands znajdujemy AMXX Compiler i klikamy na niego 2 razy
- Otworzy się nam nowe okno w którym ustawiamy pod jakim klawiszem mamy kompilacje ja wybrałem F9
możemy oczywiście jaki chcemy
- Klikamy OK a potem Close i to wszystko kompilacja jest już pod wybranym klawiszem
Auto podpowiadanie składni: ⇑
- Ściągamy ten plik
autocomplete.rar 36,76 KB 1664 Ilość pobrań
- Wchodzimy do
Program Files\Notepad++\plugins\APIs
i kopiujemy do tego folderu rozpakowane pliki ze ściągniętego archiwum
- Otwieramy Notepad++. Ustawienia -> Preferencje -> Zakładka Kopia/Auto-uzupełnianie
- Zaznaczamy "Włącz auto-uzupełnianie" możemy też zaznaczyć podpowiadanie parametrów funkcji , w prawym górnym rogu widzimy od ... znaków podajemy tutaj liczbę znaków od kiedy notepad++ ma podpowiadać nazwę
U mnie wygląda to tak
- Po ustawieniu wszystkiego klikamy Zamknij gotowe !
A tak wygląda podpowiadanie nazwy funkcji
Używane polskich znaków: ⇑
Aby używać polskich znaków w pluginie należy
- Otworzyć plik sma
- W górnym menu wybrać zakładkę Format
- Wybrać "Koduj w UTF-8 (bez BOM)" lub "Konwertuj na format UTF-8 bez BOM"
- Zapisać plik i to tyle kompilujemy normalnie.
#238018 Grawitacja na nożu zamiast niewidzialnośći
Napisane przez Misiaczek ;c w 17.04.2011 11:48
1.0.5/1.0.6
Otwórz Plik: cons.inl
Zamień to:
new const gInvisAlphaValue[4] =
{
150, //Basic Shotgun Combat
100, //Veteran Shotgun Combat
70, //Expert Shotgun Combat
40
};
Na To:
/*new const gInvisAlphaValue[4] =
{
150, //Basic Shotgun Combat
100, //Veteran Shotgun Combat
70, //Expert Shotgun Combat
40
};*/
Otwórz Plik: badgepowers.inl
Zamień to:
Na To:
public set_invis(id)
{
if ( !get_pcvar_num(gPcvarBadgesActive) || !get_pcvar_num(gPcvarBadgePowers) ) return;
if ( !is_user_alive(id) ) return;
new shotgunlevel = g_PlayerBadges[id][BADGE_SHOTGUN];
if ( shotgunlevel && get_user_weapon(id) == CSW_KNIFE )
{
fm_set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransTexture, gInvisAlphaValue[shotgunlevel-1]);
g_invis[id] = true;
}
else
{
fm_set_rendering(id);
g_invis[id] = false;
}
}
public set_invis(id)
{
if ( !get_pcvar_num(gPcvarBadgesActive) || !get_pcvar_num(gPcvarBadgePowers) ) return;
if ( !is_user_alive(id) ) return;
new shotgunlevel = g_PlayerBadges[id][BADGE_SHOTGUN];
if ( shotgunlevel && get_user_weapon(id) == CSW_KNIFE )
{
new Float:grav
switch(shotgunlevel)
{
case 1: grav = 0.875 //700
case 2: grav = 0.75 //600
case 3: grav = 0.625 //500
case 4: grav = 0.5 //400
}
fm_set_user_gravity(id, grav)
g_invis[id] = true;
}
else
{
fm_set_user_gravity(id, 1.0)
g_invis[id] = false;
}
}
1.5.3/1.5.3a/1.5.5
Otwórz Plik: cons.inl
Zamień to:
new const gInvisAlphaValue[4] =
{
150, //Basic Shotgun Combat
100, //Veteran Shotgun Combat
70 //Expert Shotgun Combat
};
Na To:
/*new const gInvisAlphaValue[4] =
{
150, //Basic Shotgun Combat
100, //Veteran Shotgun Combat
70 //Expert Shotgun Combat
};*/
Otwórz Plik: badgepowers.inl
Zamień to:
Na To:
public set_invis(id)
{
if ( !get_pcvar_num(gPcvarBadgesActive) || !get_pcvar_num(gPcvarBadgePowers) ) return;
if ( !is_user_alive(id) ) return;
new shotgunlevel = g_PlayerBadges[id][BADGE_SHOTGUN];
if ( shotgunlevel && get_user_weapon(id) == CSW_KNIFE )
{
fm_set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransTexture, gInvisAlphaValue[shotgunlevel-1]);
g_invis[id] = true;
}
else
{
fm_set_rendering(id);
g_invis[id] = false;
}
}
public set_invis(id)
{
if ( !get_pcvar_num(gPcvarBadgesActive) || !get_pcvar_num(gPcvarBadgePowers) ) return;
if ( !is_user_alive(id) ) return;
new shotgunlevel = g_PlayerBadges[id][BADGE_SHOTGUN];
if ( shotgunlevel && get_user_weapon(id) == CSW_KNIFE )
{
new Float:grav
switch(shotgunlevel)
{
case 1: grav = 0.875 //700
case 2: grav = 0.75 //600
case 3: grav = 0.625 //500
}
fm_set_user_gravity(id, grav)
g_invis[id] = true;
}
else
{
fm_set_user_gravity(id, 1.0)
g_invis[id] = false;
}
}
Po ów zmianach Zapisujemy pliki i wykonujemy kompilacje lokalną
Jak coś jeszcze związane z BF2 potrzeba pisać na PW to może skrobnę "Tutorial"
#293791 Nowy Wygląd HUD
Napisane przez Misiaczek ;c w 08.09.2011 14:53
Jako iż mi się nudzi postanowiłem zmienić wygląd HUD w swoim bf2 ;](podpatrzone z coda) efekt jest fajny i miły dla oka
nowy HUD wygląda tak:
Instrukcja dla 1.0.7 / 1.1.0
bf2rank.sma
Szukamy
#if defined KOLOROWY_SAY
new gmsgStatusText;
new gmsgScreenFade;
new gmsgScreenShake;
#else
new gmsgStatusText;
new gmsgScreenFade;
new gmsgScreenShake;
new gmsgSayText;
#endif
dodajemy pod tym to
new gHUD;
//Task
#define TASK_HUD 9897
aby wyglądało to tak
#if defined KOLOROWY_SAY
new gmsgStatusText;
new gmsgScreenFade;
new gmsgScreenShake;
#else
new gmsgStatusText;
new gmsgScreenFade;
new gmsgScreenShake;
new gmsgSayText;
#endif
new gHUD;
//Task
#define TASK_HUD 9897
następnie szukamy
#if defined KOLOROWY_SAY
gmsgStatusText = get_user_msgid("StatusText");
gmsgScreenFade = get_user_msgid("ScreenFade");
gmsgScreenShake = get_user_msgid("ScreenShake");
#else
gmsgStatusText = get_user_msgid("StatusText");
gmsgScreenFade = get_user_msgid("ScreenFade");
gmsgScreenShake = get_user_msgid("ScreenShake");
gmsgSayText = get_user_msgid("SayText");
#endif.
dodajemy pod tym to
gHUD = CreateHudSyncObj();
aby to wyglądało tak
#if defined KOLOROWY_SAY
gmsgStatusText = get_user_msgid("StatusText");
gmsgScreenFade = get_user_msgid("ScreenFade");
gmsgScreenShake = get_user_msgid("ScreenShake");
#else
gmsgStatusText = get_user_msgid("StatusText");
gmsgScreenFade = get_user_msgid("ScreenFade");
gmsgScreenShake = get_user_msgid("ScreenShake");
gmsgSayText = get_user_msgid("SayText");
#endif
gHUD = CreateHudSyncObj();
Szukamy dalej
RegisterHam(Ham_Spawn, "player", "Ham_Spawn_Post", 1); // cz bots won't hook here must RegisterHamFromEntity
RegisterHam(Ham_TakeDamage, "player", "Ham_TakeDamage_Pre");
Zastepujemy to tym
RegisterHam(Ham_Spawn, "player", "Ham_Spawn_Post", 1); // cz bots won't hook here must RegisterHamFromEntity
RegisterHam(Ham_TakeDamage, "player", "Ham_TakeDamage_Pre");
RegisterHam(Ham_Killed, "player", "Ham_Death_Player", 1);
Zapisujemy Plik
ham.inl
Szukamy
set_task(0.1, "DisplayHUD", id);
Zastepujemy to tym
if(!task_exists(id+TASK_HUD))
{
set_task(0.1, "DisplayHUD", id+TASK_HUD, _, _, "b");
}
Szukamy
SetHamParamFloat(4, damage);
return HAM_HANDLED;
}
Zastepujemy to tym
SetHamParamFloat(4, damage);
return HAM_HANDLED;
}
public Ham_Death_Player(id)
{
if(!is_user_connected(id))
return HAM_IGNORED;
RemoveHUD(id)
return HAM_IGNORED;
}
Zapisujemy Plik
forwards.inl
Szukamy
public client_putinserver(id)
{
// Find a czero bot to register Ham_Spawn
if ( !gCZBotRegisterHam && gPcvarBotQuota && get_pcvar_num(gPcvarBotQuota) > 0 && is_user_bot(id) )
{
// Delay for private data to initialize
set_task(0.1, "RegisterHam_CZBot", id);
}
g_imobile[id] = false;
newplayer[id] = true;
gStatsLoaded[id] = 0;
get_save_key(id);
if (!get_pcvar_num(gPcvarWymus))
{
client_cmd(id,"hud_centerid 0");
client_cmd(id,"cl_shadows 0");
set_task(20.0, "Announcement", id);
}
else
{
set_task(20.0, "Announcement", id);
}
}
Zamieniamy na to
public client_putinserver(id)
{
// Find a czero bot to register Ham_Spawn
if ( !gCZBotRegisterHam && gPcvarBotQuota && get_pcvar_num(gPcvarBotQuota) > 0 && is_user_bot(id) )
{
// Delay for private data to initialize
set_task(0.1, "RegisterHam_CZBot", id);
}
g_imobile[id] = false;
newplayer[id] = true;
gStatsLoaded[id] = 0;
get_save_key(id);
if (!get_pcvar_num(gPcvarWymus))
{
client_cmd(id,"hud_centerid 0");
client_cmd(id,"cl_shadows 0");
set_task(20.0, "Announcement", id);
}
else
{
set_task(20.0, "Announcement", id);
}
RemoveHUD(id);
}
Szukamy
public client_disconnect(id)
{
save_badges(id);
if ( id == highestrankid )
{
set_task(2.0, "ranking_officer_disconnect");
}
clear_stat_globals(id);
gStatsLoaded[id] = 0;
}
Zamieniamy na to
public client_disconnect(id)
{
save_badges(id);
if ( id == highestrankid )
{
set_task(2.0, "ranking_officer_disconnect");
}
clear_stat_globals(id);
gStatsLoaded[id] = 0;
RemoveHUD(id);
}
Zapisujemy Plik
hud.inl
Szukamy
public DisplayHUD(id)
{
if ( !get_pcvar_num(gPcvarBF2Active) || !get_pcvar_num(gPcvarStatusText) ) return;
if ( !is_user_alive(id) || is_user_bot(id) ) return;
static HUD[64];
if ( !gStatsLoaded[id] )
{
formatex(HUD, charsmax(HUD), "[BF2] Wczytuje Dane...");
}
else
{
new rank = g_PlayerRank[id];
new nextrank;
switch(rank)
{
case 16, 19, 20, 21: nextrank = 15;
case 17: nextrank = 7;
case 18: nextrank = 8;
default: nextrank = rank;
}
++nextrank;
new nextrankxp = floatround(gRankXP[nextrank] * get_pcvar_float(gPcvarXpMultiplier));
if ( !get_pcvar_num(gPcvarBadgesActive) )
{
formatex(HUD, charsmax(HUD), "[BF2] Zabicia: %d/%d Ranga: %s", totalkills[id], nextrankxp, gRankName[rank]);
}
else
{
formatex(HUD, charsmax(HUD), "[BF2] Zabicia: %d/%d Odznaki: %d Ranga: %s", totalkills[id], nextrankxp, numofbadges[id], gRankName[rank]);
}
}
message_begin(MSG_ONE_UNRELIABLE, gmsgStatusText, _, id);
write_byte(0);
write_string(HUD);
message_end();
}
Zamieniamy na to
public DisplayHUD(id)
{
id -= TASK_HUD;
if ( !get_pcvar_num(gPcvarBF2Active) || !get_pcvar_num(gPcvarStatusText) )
return;
if ( !is_user_alive(id) || is_user_bot(id) )
return;
if(!is_user_connected(id))
{
remove_task(id+TASK_HUD);
return;
}
set_hudmessage(227, 96, 8, 0.05, 0.15, 0, 0.0, 0.3, 0.0, 0.0, 3)
if ( !gStatsLoaded[id] )
{
ShowSyncHudMsg(id, gHUD,"[%s] Wczytuje Dane...", gPluginName)
}
else
{
new rank = g_PlayerRank[id];
new nextrank;
switch(rank)
{
case 16, 19, 20, 21: nextrank = 15;
case 17: nextrank = 7;
case 18: nextrank = 8;
default: nextrank = rank;
}
++nextrank;
new nextrankxp = floatround(gRankXP[nextrank] * get_pcvar_float(gPcvarXpMultiplier));
if ( !get_pcvar_num(gPcvarBadgesActive) )
{
ShowSyncHudMsg(id, gHUD,"[%s]^nRanga: %s^nZabicia: %d/%d", gPluginName, gRankName[rank], totalkills[id], nextrankxp)
}
else
{
ShowSyncHudMsg(id, gHUD,"[%s]^nRanga: %s^nIlosc Odznak: %d^nZabicia: %d/%d", gPluginName, gRankName[rank], numofbadges[id], totalkills[id], nextrankxp)
}
}
}
public RemoveHUD(id)
{
remove_task(id+TASK_HUD);
}
Zapisujemy Plik
i kompilujemy teraz sma bf2
Instrukcja dla 1.5.3 / 1.5.5
bf2rank.sma
Szukamy
//Message sending variables
new gmsgStatusText;
new gmsgScreenFade;
new gmsgScreenShake;
new gmsgSayText;
dodajemy pod tym to
new gHUD;
//Task
#define TASK_HUD 9897
aby wyglądało to tak
//Message sending variables
new gmsgStatusText;
new gmsgScreenFade;
new gmsgScreenShake;
new gmsgSayText;
new gHUD;
//Task
#define TASK_HUD 9897
następnie szukamy
//Message sending.
gmsgStatusText = get_user_msgid("StatusText");
gmsgScreenFade = get_user_msgid("ScreenFade");
gmsgScreenShake = get_user_msgid("ScreenShake");
gmsgSayText = get_user_msgid("SayText");
dodajemy pod tym to
gHUD = CreateHudSyncObj();
aby to wyglądało tak
//Message sending.
gmsgStatusText = get_user_msgid("StatusText");
gmsgScreenFade = get_user_msgid("ScreenFade");
gmsgScreenShake = get_user_msgid("ScreenShake");
gmsgSayText = get_user_msgid("SayText");
gHUD = CreateHudSyncObj();
Szukamy dalej
RegisterHam(Ham_Spawn, "player", "Ham_Spawn_Post", 1); // cz bots won't hook here must RegisterHamFromEntity
RegisterHam(Ham_TakeDamage, "player", "Ham_TakeDamage_Pre");
Zastepujemy to tym
RegisterHam(Ham_Spawn, "player", "Ham_Spawn_Post", 1); // cz bots won't hook here must RegisterHamFromEntity
RegisterHam(Ham_TakeDamage, "player", "Ham_TakeDamage_Pre");
RegisterHam(Ham_Killed, "player", "Ham_Death_Player", 1);
Zapisujemy Plik
ham.inl
Szukamy
set_task(0.1, "DisplayHUD", id);
Zastepujemy to tym
if(!task_exists(id+TASK_HUD))
{
set_task(0.1, "DisplayHUD", id+TASK_HUD, _, _, "b");
}
Szukamy
SetHamParamFloat(4, damage);
return HAM_HANDLED;
}
Zastepujemy to tym
SetHamParamFloat(4, damage);
return HAM_HANDLED;
}
public Ham_Death_Player(id)
{
if(!is_user_connected(id))
return HAM_IGNORED;
RemoveHUD(id)
return HAM_IGNORED;
}
Zapisujemy Plik
forwards.inl
Szukamy
public client_putinserver(id)
{
// Find a czero bot to register Ham_Spawn
if ( !gCZBotRegisterHam && gPcvarBotQuota && get_pcvar_num(gPcvarBotQuota) > 0 && is_user_bot(id) )
{
// Delay for private data to initialize
set_task(0.1, "RegisterHam_CZBot", id);
}
g_imobile[id] = false;
newplayer[id] = true;
gStatsLoaded[id] = 0;
get_save_key(id);
set_task(20.0, "Announcement", id);
}
Zamieniamy na to
public client_putinserver(id)
{
// Find a czero bot to register Ham_Spawn
if ( !gCZBotRegisterHam && gPcvarBotQuota && get_pcvar_num(gPcvarBotQuota) > 0 && is_user_bot(id) )
{
// Delay for private data to initialize
set_task(0.1, "RegisterHam_CZBot", id);
}
g_imobile[id] = false;
newplayer[id] = true;
gStatsLoaded[id] = 0;
get_save_key(id);
set_task(20.0, "Announcement", id);
RemoveHUD(id);
}
Szukamy
public client_disconnect(id)
{
save_badges(id);
if ( id == highestrankid )
{
set_task(2.0, "ranking_officer_disconnect");
}
clear_stat_globals(id);
gStatsLoaded[id] = 0;
}
Zamieniamy na to
public client_disconnect(id)
{
save_badges(id);
if ( id == highestrankid )
{
set_task(2.0, "ranking_officer_disconnect");
}
clear_stat_globals(id);
gStatsLoaded[id] = 0;
RemoveHUD(id);
}
Zapisujemy Plik
hud.inl
Szukamy
public DisplayHUD(id)
{
if ( !get_pcvar_num(gPcvarBF2Active) || !get_pcvar_num(gPcvarStatusText) ) return;
if ( !is_user_alive(id) || is_user_bot(id) ) return;
static HUD[64];
if ( !gStatsLoaded[id] )
{
formatex(HUD, charsmax(HUD), "[BF2] Wczytuje Dane...");
}
else
{
new rank = g_PlayerRank[id];
new nextrank;
switch(rank)
{
case 16, 19, 20: nextrank = 15;
case 17: nextrank = 7;
case 18: nextrank = 8;
default: nextrank = rank;
}
++nextrank;
new nextrankxp = floatround(gRankXP[nextrank] * get_pcvar_float(gPcvarXpMultiplier));
if ( !get_pcvar_num(gPcvarBadgesActive) )
{
formatex(HUD, charsmax(HUD), "[BF2] Zabicia: %d/%d Ranga: %s", totalkills[id], nextrankxp, gRankName[rank]);
}
else
{
formatex(HUD, charsmax(HUD), "[BF2] Zabicia: %d/%d Odznaki: %d Ranga: %s", totalkills[id], nextrankxp, numofbadges[id], gRankName[rank]);
}
}
message_begin(MSG_ONE_UNRELIABLE, gmsgStatusText, _, id);
write_byte(0);
write_string(HUD);
message_end();
}
Zamieniamy na to
public DisplayHUD(id)
{
id -= TASK_HUD;
if ( !get_pcvar_num(gPcvarBF2Active) || !get_pcvar_num(gPcvarStatusText) )
return;
if ( !is_user_alive(id) || is_user_bot(id) )
return;
if(!is_user_connected(id))
{
remove_task(id+TASK_HUD);
return;
}
set_hudmessage(227, 96, 8, 0.05, 0.15, 0, 0.0, 0.3, 0.0, 0.0, 3)
if ( !gStatsLoaded[id] )
{
ShowSyncHudMsg(id, gHUD,"[%s] Wczytuje Dane...", gPluginName)
}
else
{
new rank = g_PlayerRank[id];
new nextrank;
switch(rank)
{
case 16, 19, 20, 21: nextrank = 15;
case 17: nextrank = 7;
case 18: nextrank = 8;
default: nextrank = rank;
}
++nextrank;
new nextrankxp = floatround(gRankXP[nextrank] * get_pcvar_float(gPcvarXpMultiplier));
if ( !get_pcvar_num(gPcvarBadgesActive) )
{
ShowSyncHudMsg(id, gHUD,"[%s]^nRanga: %s^nZabicia: %d/%d", gPluginName, gRankName[rank], totalkills[id], nextrankxp)
}
else
{
ShowSyncHudMsg(id, gHUD,"[%s]^nRanga: %s^nIlosc Odznak: %d^nZabicia: %d/%d", gPluginName, gRankName[rank], numofbadges[id], totalkills[id], nextrankxp)
}
}
}
public RemoveHUD(id)
{
remove_task(id+TASK_HUD);
}
Zapisujemy Plik
i kompilujemy teraz sma bf2
#287283 [AMXX] Diagnozowanie problemów z pluginami
Napisane przez R3X w 23.08.2011 22:54
Zdecydowana większość problemów z pluginami zostawia po sobie wyraźne ślady. Ich odnalezienie i interpretacja to połowa sukcesu w walce z niedziałającym dodatkiem.
1. Stan pluginu
Podstawową informacją o pluginie jest to czy się w ogóle załadował. Najłatwiej to sprawdzić wpisując w konsoli:
amx_showrcon amxx list
Efektem będzie listing podobny do tego:
Wszystkie pluginy mają status running, więc wszystkie zostały poprawnie załadowane. No i pozytywnie
Innym, równie dobrym statusem jest debug, to jest takie running, ale przygotowane na błędy
Mniej przyjemniej jest kiedy ilość przeczytanych pluginów nie zgadza się z ilością załadowanych. Częsty problemem jest status bad load
Oznacza to tyle, że w katalogu plugins/ nie ma wskazanego w plugins.ini pliku.
(W skrajnych przypadkach plik może istnieć, ale nie uprawniać serwera do odczytu. Ustawienie chmodu 644 załawiłoby sprawę.)
Inny kiepskim przypadkiem jest status error. Pojawia się wtedy, gdy przetwarzanie pluginu zostanie przerwane, np. za pomocą funkcji set_fail_state
jeśli komunikat jest niejasny, niezrozumiały jedynym wyjściem jest zajrzenie do źródła pluginu i sprawdzenie przyczyny
Rzut okiem i mam winowajcę
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) if(5 > 2) set_fail_state("nie chce mi sie"); }W tym przypadku to tylko głupi żart programisty, zwykle problemy są o wiele poważniejsze.
Jest jeszcze stan paused i stopped, są one związane z komendą amx_pausecfg w plikach konfiguracyjnych oraz funkcją (un)pause() w pluginach. W takim przypadku należy sprawdzić wszystkie wczytanie configi, zwykle są to: amxx.cfg z configs, server.cfg z cstrike/ i configs/maps/NAZWAMAPY_LUB_PREFIX.cfg oraz upewnić się, że żaden plugin nie zatrzymuje naszego niedziałającego dodatku.
2. Logi
Gdy mamy pewność, że plugin został załadowany przyszedł czas na szperanie w plikach. Logi, czyli zapisy czynności, są zapisywane w folderze addons/amxmodx/logs/.
Logi zwyczajne są nazywane w formacie L<RRRRMMDD>.log a logi błędów error_<RRRRMMDD>.log. Informacje o problemach mogą się pojawić i w jednych i w drugich. Zgłoszone błędy całkowicie wyjaśniają powód problemów tylko kiedy plugin ma status debug. Aby wymusić ten stan należy w plugins.ini dopisać debug po nazwie pluginu, np.
test.amxx debugW stanie running komunikaty są okrojone i nie lokalizują konkretnie źródła błędu, natomiast w debugu mamy informacje o ścieżce wywołania, czyli co i w której linijce po kolei się wykonywało zanim wystąpił problem. Ścieżka sięga ostatniej funkcji wywołanej przez moduł.
3. Komendy nie reagują
Problem występuje zwykle, kiedy 2 pluginy dostarczają takie same komendy. W tej sytuacji zwycięzca bierze wszystko: pierwszy plugin na liście plugins.ini przetworzy komendę i zablokuje ją, przez co żaden inny plugin nie zostanie nawet o niej poinformowany. Rozwiązaniem jest zmiana kolejności ładownia albo zmiana nazw komendy. Istnieją pluginy, które blokują więcej komend niż przetwarzają, np. blokują wszyskie komendy say z / na początku. Takie pluginy powinny znajdować się na samym końcu listy.
#247612 Dodatkowy EXP za tag
Napisane przez MieTeK_ w 08.05.2011 21:07
Krzywy plugin, który w każdej nowej rundzie daje ustalony przez cvar exp, dla graczy którzy mają tag w nicku(przedrostek np. [AMXX.pl]MieTeK) Ważna jest wielkość liter. Ten plugin to także taka mała reklama przenoszona przez graczy ;p
cod_tag "[AMXX.pl]" // tag jaki ma być cod_tag_bonus "50" // ile expa dostaje się co rundę
Plik cod_tag_bonus.amxx wklejamy plugins. cod_tag_bonus.amxx dopisujemy do plugins-codmod
Załączone pliki
-
cod_tag_bonus.amxx 3,93 KB 65 Ilość pobrań
-
cod_tag_bonus.sma 779 bajtów 353 Ilość pobrań
cod_tag_bonus.amxx
#284857 Dodanie Tutor'a do ERS
Napisane przez speedkill w 18.08.2011 21:23
Cvary
roundsound_tag AMXX.PL //tag widoczny przy komunikatach wysyłanych przez plugin roundsound_information_play abcd //w jaki sposob ma wysylac informacje o granym utworze a - center b - hud c - tutor d-status text mozna laczyc np ab - pokaże w hudzie i center jeśli podamy nic nie wyświetli sie nigdzie roundsound_information_show 120.0 //jak czesto ma sie pojawiac info o dostepnych komendach ustawienie na 0.0 wyłącza pokazywanie informacji roundsound_ct_path misc/CT //sciezka do folderu z muzyka dla CT podajemy bez sound/ roundsound_tt_path misc/TT //sciezka do folderu z muzyka dla TT podajemy bez sound/ roundsound_playlist_on 1 //czy mozna uzyc komendy /playlist pokazujacej liste granych utworow roundsound_roundsound_on 1 //czy mozna uzyc komendy /roundsound pozwalajace na graczowi na wylaczenie /wlaczenie dla siebie roundsounda roundsound_mode 0 //ma isc po kolei po playliscie czy odgrywać losowo 0 - po koleiFlaga c - Turtor
Załącznik ;]
Załączone pliki
-
rs.rar 8,99 KB 23 Ilość pobrań
#280381 Zwolnione tempo po strzale w glowe
Napisane przez DarkGL w 09.08.2011 19:29
#280368 Zwolnione tempo po strzale w glowe
Napisane przez Waq w 09.08.2011 19:15
- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Reputacja: BaQStiC
- Regulamin