
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.
|
heniu1111
Rejestracja: 04.11.2015Aktualnie: Nieaktywny
Poza forum Ostatnio: 28.08.2022 22:11





Statystyki
- Grupa: Power User
- Całość postów: 568
- Odwiedzin: 8 829
- Tytuł: Ja zjadłem ciastko ^^
- Wiek: Wiek nie został ustalony
- Urodziny: Data urodzin nie została podana
-
Imię
heniu
-
Płeć
Mężczyzna
-
Lokalizacja
zapomniałem
#757659 Specjal serwer - jak sobie radzicie z pozyskaniem pieniędzy na ten cel?
Napisane przez DarkGL
w 09.03.2019 21:44

#757647 Specjal serwer - jak sobie radzicie z pozyskaniem pieniędzy na ten cel?
Napisane przez Robiin
w 09.03.2019 01:47
#757208 Reason kcik problem
Napisane przez Automatyk
w 23.02.2019 15:01
#756956 [+18] Sexy bomba
Napisane przez White
w 18.02.2019 19:50

Zamiast standardowej bomby mamy dziewczynę, która przy rozbrajaniu zaczyna tańczyć na rurze.



Załączone pliki
-
models.zip 742,98 KB 783 Ilość pobrań
-
sound.zip 195,9 KB 695 Ilość pobrań
-
sexy_bomb.sma 2,72 KB 697 Ilość pobrań
sexy_bomb.amxx
#756336 Menu h@
Napisane przez Robiin
w 03.02.2019 21:17
HUNT123 My bad, missclick poszedł na -1 repki.
PROTOTYP@@
Lista błędów w tym temacie:
- Jego powstanie,
- Ortografia autora:
- "c" z małej w "czesc" -> "Cześć, ",
- "do serwera" -> "na serwer" (ewentualnie do amxxa),
- "ktory" -> ", który",
- "który posiada" -> "który dodaje",
- "ammopackow" -> "ammopacków",
- "chcę aby" -> "chcę, aby",
- "byla" -> "była"
- "Wlasciciela" -> "właściciela",
- "graczowi" -> "graczowi.",
- "Chce aby" -> "Chcę, aby",
- "bylo takie menu pod komenda" -> "to menu było dostępne pod komendą"
- "/menuwlasciciela taki" -> "/menuwlasciciela. Taki",
- "byc pod BB" -> "być pod BB.",
- "Jesli trzeb podesle taki plg." -> "Jeśli trzeba, podeślę taki plugin.",
- "Ten plugin z BB o ktprym monwie jest z basuilder" -> "Ten plugin na BB, o którym mówię jest na BaseBuilder",
- "czy jos tak" -> ", czy jakoś tak",
- "Podsylam sma na pw jesli trzeba" -> "Podsyłam .sma na PW, jeśli trzeba"
- Pisanie o AmmoPackach, następnie napomnienie o monetach oraz levelu (co się kompletnie ze sobą nie łączy, a jedno nie jest zależne od drugiego),
- Podsyłanie na PW,
- TO: "Wiem gupi nie jestem i czytac mordko nie umiesz ?? Przeczytaj uwaznie kazde slowo w moim pytaniu. "
Lista pozytywów w tym temacie:
Dziękuję, do widzenia.
#756332 Menu h@
Napisane przez
PROTOTYP@@
w 03.02.2019 20:36
nie wiem czy dobrze zrozumiałem ale chyba o to ci chodzi ...
https://amxx.pl/topi...dmin-menu-v-15/
a jesli chcesz zeby otwieralo sie pod komenda /menuwlasciciela wystarczy zmienic odpowiedzialna za to linijke i skompilować
Wiem gupi nie jestem i czytac mordko nie umiesz ?? Przeczytaj uwaznie kazde slowo w moim pytaniu.
#755436 Problem z tabelką serwerów
Napisane przez
Trol lorT
w 20.01.2019 21:24
#755469 [IPS4] Status "Ostatnio online" Staff Online
Napisane przez Paweł.
w 21.01.2019 18:44
ACP Wygląd
Style i szablony
Edytuj HTML CSS
Zakładka Szablony
Wyszukujemy: staffMembers
I dodajemy pod (u mnie linijka 16)
{expression="\IPS\Member\Group::load( $user->member()->member_group_id )->formattedName" raw="true"}
Dodajemy to:
{{if $user->member()->last_activity}} <div class="cWidgetContainer " data-controller="core.front.widgets.area" data-role="widgetReceiver" data-orientation="vertical" data-widgetarea="sidebar"> <ul class="ipsList_reset"> <li class="ipsPos_left"> {lang="members_last_visit"} {{if $user->member()->isOnline()}}<i class="fa fa-circle ipsOnlineStatus_online" data-ipsTooltip title="{lang="online_now" sprintf="$user->member()->name"}"></i>{{endif}} {{if $user->member()->last_activity}}{datetime="$user->member()->last_activity" short="TRUE"}{{endif}} </li> {{endif}}
Dodajemy pod (u mnie to linijka 51)
{expression="\IPS\Member\Group::load( $user->member()->member_group_id )->formattedName" raw="true"}
Dodajemy to:
{{if $user->member()->last_activity}} <div class="cWidgetContainer " data-controller="core.front.widgets.area" data-role="widgetReceiver" data-orientation="vertical" data-widgetarea="sidebar"> <ul class="ipsList_reset"> <li class="ipsPos_left"> {lang="members_last_visit"} {{if $user->member()->isOnline()}}<i class="fa fa-circle ipsOnlineStatus_online" data-ipsTooltip title="{lang="online_now" sprintf="$user->member()->name"}"></i>{{endif}} {{if $user->member()->last_activity}}{datetime="$user->member()->last_activity" short="TRUE"}{{endif}} </li> {{endif}}
Wygląd całego kodu:
{{if $orientation == 'vertical'}} {{foreach $users as $user}} {{if $user->member()->isOnline()}} <li class='ipsDataItem {{if $orientation == 'horizontal'}}ipsGrid_span3{{endif}}'> <div class='ipsDataItem_icon ipsPos_top'> {template="userPhoto" app="core" group="global" params="$user->member(), 'tiny'"} </div> <div class="ipsDataItem_main"> <h3 class='ipsType_sectionHead'>{{if \IPS\Member::loggedIn()->language()->checkKeyExists( "core_staff_directory_name_{$user->id}" )}}<a href='{$user->member()->url()}'>{lang="core_staff_directory_name_{$user->id}"}</a>{{else}}{$user->member()->link()|raw}{{endif}}</h3> <p class='ipsType_reset ipsType_normal ipsType_light'> {expression="\IPS\Member\Group::load( $user->member()->member_group_id )->formattedName" raw="true"} {{if $user->member()->last_activity}} <div class="cWidgetContainer " data-controller="core.front.widgets.area" data-role="widgetReceiver" data-orientation="vertical" data-widgetarea="sidebar"> <ul class="ipsList_reset"> <li class="ipsPos_left"> {lang="members_last_visit"} {{if $user->member()->isOnline()}}<i class="fa fa-circle ipsOnlineStatus_online" data-ipsTooltip title="{lang="online_now" sprintf="$user->member()->name"}"></i>{{endif}} {{if $user->member()->last_activity}}{datetime="$user->member()->last_activity" short="TRUE"}{{endif}} </li> {{endif}} <span class="ipsPos_right"> {{if !member.members_disable_pm AND !$user->member()->members_disable_pm}} <a href='{url="app=core&module=messaging&controller=messenger&do=compose&to={$user->member()->member_id}" seoTemplate="messenger_compose"}' data-ipsDialog data-ipsDialog-title='{lang="compose_new"}' data-ipsDialog-forceReload data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="message_sent"}"><i class='fa fa-envelope'></i> </a> {{endif}} </span> </p> </div> </li> {{endif}} {{endforeach}} {{else}} {{foreach $users as $user}} <div class='ipsGrid_span3'> {{if $user->member()->isOnline()}} <div class='ipsDataItem_icon ipsPos_top'> {template="userPhoto" app="core" group="global" params="$user->member(), 'tiny'"} </div> <div class="ipsDataItem_main"> <h3 class='ipsType_sectionHead'>{{if \IPS\Member::loggedIn()->language()->checkKeyExists( "core_staff_directory_name_{$user->id}" )}}<a href='{$user->member()->url()}'>{lang="core_staff_directory_name_{$user->id}"}</a>{{else}}{$user->member()->link()|raw}{{endif}}</h3> <p class='ipsType_reset ipsType_normal ipsType_light'> {expression="\IPS\Member\Group::load( $user->member()->member_group_id )->formattedName" raw="true"} {{if $user->member()->last_activity}} <div class="cWidgetContainer " data-controller="core.front.widgets.area" data-role="widgetReceiver" data-orientation="vertical" data-widgetarea="sidebar"> <ul class="ipsList_reset"> <li class="ipsPos_left"> {lang="members_last_visit"} {{if $user->member()->isOnline()}}<i class="fa fa-circle ipsOnlineStatus_online" data-ipsTooltip title="{lang="online_now" sprintf="$user->member()->name"}"></i>{{endif}} {{if $user->member()->last_activity}}{datetime="$user->member()->last_activity" short="TRUE"}{{endif}} </li> {{endif}} <span class="ipsPos_right"> {{if !member.members_disable_pm AND !$user->member()->members_disable_pm}} <a href='{url="app=core&module=messaging&controller=messenger&do=compose&to={$user->member()->member_id}" seoTemplate="messenger_compose"}' data-ipsDialog data-ipsDialog-title='{lang="compose_new"}' data-ipsDialog-forceReload data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="message_sent"}"><i class='fa fa-envelope'></i> </a> {{endif}} </span> </p> </div> {{endif}} </div> {{endforeach}} {{endif}}
Efekt:
Widget:
Staff Online.zip 4,03 KB 140 Ilość pobrań
#755038 Sklep 4Fun
Napisane przez Rivit
w 10.01.2019 19:51
Prosiłbym o naprawienie tego, czyli żeby po wpisaniu killa nie działały w nowej rundzie, tak samo w przypadku rozpoczęcia nowej rundy, żeby one nie działały i żeby działały dalej, aż do naszej śmieci
Albo ja jestem głupi albo nie potrafie zrozumieć co tam jest nie tak...
Opisz to po polskiemu bo "nie działa, a żeby działało"
#754965 Zapis po uzyskaniu odpowiedniej wartości
Napisane przez
Zbieracz Minusów
w 07.01.2019 23:38
#754568 Szukam pluginu blokada broni
Napisane przez Robiin
w 28.12.2018 07:25
#include <amxmodx> #include <hamsandwich> #define AUTHOR "aSior - amxx.pl/user/60210-asior/" #define ForArray(%1,%2) for(new %1 = 0; %1 < sizeof %2; %1++) new const forbiddenMapsPrefixes[][] = { "fy_", "de_", "css_" }; new const droppedWeaponsClassnames[][] = { "weaponbox", "armoury_entity", "weapon_shield" }; new mapName[8], bool:forbiddenMap; public plugin_init() { register_plugin("x", "v0.1", AUTHOR); get_mapname(mapName, charsmax(mapName)); ForArray(i, forbiddenMapsPrefixes) if(containi(mapName, forbiddenMapsPrefixes[i]) > -1) { forbiddenMap = true; break; } if(!forbiddenMap) ForArray(i, droppedWeaponsClassnames) RegisterHam(Ham_Touch, droppedWeaponsClassnames[i], "weaponTouch"); } public weaponTouch(entity, index) return HAM_SUPERCEDE;
Mapy w conscie forbiddenMapsPrefixes. Kod praktycznie taki sam, ale w moim przypadku zadziała poprawnie z pierwszym prefiksem, jest przyjemniejszy dla oka i uruchomienie zajmie mniej pamięci.
#754490 Skiny broni (V_, P_) z zapisem MySQL / JSON.
Napisane przez Robiin
w 26.12.2018 14:18
Ostatnio widuję sporo tematów związanych ze skinami, brakami w aktualnych pluginach etc, więc postanowiłem napisać plugin, w którym nie będzie kompromisów - oczywiście nie wyszło, więc dostajecie to co nawymyślałem .
Plugin będzie udoskonalany z biegiem czasu, a o zmianach będę informował w notatkach pod tym postem.
Plugin dodaje na serwer skiny do broni, z możliwością manualnego ich wyłączenia. Plugin testowany był w stosunkowo nieznacznym stopniu, także nie polecam wrzucać go od razu na serwer publiczny, a wcześniej przetestować i zdać relację tutaj.
Możliwość kupna skina in-game.
Możliwość dodania wielu flag.
Możliwość włączenia skina od fragów.
Plugin posiada plik konfiguracyjny, który należy uzupełnić według wzoru:
"v model path" "p model path" "skin name" "skin access (flag)" "weapon CSW" "frags" "price"
gdzie:
- v model path - ścieżka do modelu v_*.mdl, zaczynając od folderu cstrike/.
- p model path - ścieżka do modelu p_*.dml, zaczynając od folderu cstrike/.
- skin name - nazwa skina widniejąca w menu (max. 32 znaki, można to zmienić w kodzie).
- skin access - dostęp do skina, plugin aktualnie obsługuje tylko jedną flagę, ale niedługo zapewne dopiszę obsługę wielu. Skin dostępny dla wszystkich graczy = 0. Flaga w wersji stringa, nie bitowej.
- weapon CSW - index CSW_ broni, na jego bazie plugin rozpoznaje tablice dynamiczną i zapisuje do niej powyższe dane. Listę można znaleźć min. tutaj.
- frags - ilość fragów, od których dostępny będzie skin. 0 = brak limitu poprzez fragi.
- price - cena skina. Waluta możliwa do ustawienia w kodzie. 0 = brak limitu poprzez cenę.
Maksymalna ilość skinów jest domyślnie ustawiona na 32. Jeśli chcemy zwiększyć ten limit, konieczne będzie przerobienie pluginu w znacznym stopniu, natomiast idąc w dół nie ma żadnych przeszkód.
Brak limitów skinów.
Komendy do menu dostępne są w tablicy skinsMenuCommands. Do komend dodane będą say oraz say_team automatycznie:
// Skins menu commands. new const skinsMenuCommands[][] = { "/skiny", "/skins" };
Ścieżka pliku konfiguracyjnego w stałej configFilePath.
Większość, o ile nie wszystkie 'ustawienia' kodu są w constach/define'ach u góry.
Wielkie dzięki dla AwIlLa za wszelką wiedzę, jaką się ze mną podzielił co do mysqla .
Załączone pliki
-
skinsConfig.ini 556 bajtów 306 Ilość pobrań
-
skinSystem.sma 16,42 KB 297 Ilość pobrań
skinSystem.amxx
-
skinSystem_json.sma 13,86 KB 313 Ilość pobrań
skinSystem_json.amxx
-
2019-04-13_skinSystem_json.sma 16,97 KB 244 Ilość pobrań
2019-04-13_skinSystem_json.amxx
#754197 Propozycje zmian w generatorze vip
Napisane przez Robiin
w 14.12.2018 23:09
Na wstępie chciałbym prosić każdego czytelnika o dołożenie swojej wiedzy do tematu i podzielenie się doświadczeniem, żeby wspólnie udoskonalić generator.
Ode mnie takie info:
Usunąć makrodefinicję IsPlayer
Aktualny syntax definicji:
#define IsPlayer(%1) (1<=%1<=maxPlayers)
Is_user_connected:
static cell AMX_NATIVE_CALL is_user_connected(AMX *amx, cell *params) /* 1 param */ { int index = params[1]; if (index < 1 || index > gpGlobals->maxClients) return 0; CPlayer* pPlayer = GET_PLAYER_POINTER_I(index); return (pPlayer->ingame ? 1 : 0); }
Zależnie od tego, czy chcemy iść z tym wszystkim pod kod easy-to-read czy wydajny:
Zamiana bool'a g_Vip na bity
new bool:g_Vip[33]
na
new g_Vip; #define SetBit(%2,%1) (%1 |= (1 << (%2 & MAX_PLAYERS - 1))) #define RemoveBit(%2,%1) (%1 &= ~(1 <<(%2 & MAX_PLAYERS - 1))) #define GetBit(%2,%1) (%1 & (1 << (%2 & MAX_PLAYERS - 1))) #define GetBool(%2,%1) (%1 & (1 << (%2 & MAX_PLAYERS - 1)) == (1 << (%2 & MAX_PLAYERS - 1)))
gdzie
#define MAX_PLAYERS 32
będzie łatwą do zmiany wartością. Przy okazji, z tego co wiem to
maxPlayers=get_maxplayers();
nie działa dobrze (ale nie pamiętam od kogo to wiem i dlaczego, więc nie argumentuję się tym, po prostu mówię, że moim zdaniem nie wygląda to dobrze). Dodatkowo makrodefinicja MAX_PLAYERS pozwoli na określenie wielkości tablicy względem ilości graczy, dzięki czemu zaoszczędzimy na pamięci.
Zmiana syntaxu sprawdzania sumy bitowej flag gracza
if(get_user_flags(id) & 524288 == 524288){
na
if(get_user_flags(id) & ADMIN_LEVEL_H){
I tak, wiem, że sprawdzanie w ten sposób ma swój cel, jednakże ta zmiana nie wpłynie na działanie pluginu, a unikniemy tematów pt. "jak zmienić flagę vipa".
Zmiana momentu i częstotliwości przypisywania dostępu do vipa
W związku z tematami pt. "free vip nie działa", wychodzę temu na przeciw i rozwiewam wątpliwości osób, które mają z tym problem; plugin wam nie działa, bo vip z generatora ma przypisanie dostępu jednorazowo przy wejściu na serwer, co się kłóci z dodawaniem flagi np. od 1/2/3.. rundy.
Tym samym proponuję zmianę tego:
public client_authorized(id){ if(get_user_flags(id) & 524288 == 524288){ client_authorized_vip(id); } } public client_authorized_vip(id){ g_Vip[id]=true; }
na to
public client_authorized(index) if(get_user_flags(index) & ADMIN_LEVEL_H) SetBit(index, g_Vip);
jednocześnie unikając rozdzielania tego na dwie funkcje (które szczerze nie wiem dlaczego w ogóle się tam znalazły?).
Nie rozwiązuje to problemu darmowego vipa i kłócenia się ze sposobem przypisania dostępu, dlatego proponuję też sprawdzanie pętlą co rundę flag gracza. Piszę to osobno, aby zwrócić uwagę na możliwość dodania tego opcjonalnie. Nie każdy będzie chciał sprawdzanie flagi co rundę, dlatego myślę, że taka wersja będzie pasowała każdemu.
Gotowy kod z bitami;
public plugin_init() register_event("HLTV", "Nowa_Runda", "a", "1=0", "2=0"); public Nowa_Runda() for(new i = 1; i <= 32; i++) if(is_user_connected(i) && get_user_flags(i) & ADMIN_LEVEL_H && !GetBool(i, g_Vip) SetBit(i, g_Vip);
Jednorazowe pobranie nicku gracza, żeby uniknąć powtarzania się tego przy liście vipów, say'u etc.
new userName[MAX_PLAYERS][33]; public client_authorized(index) { if(is_user_hltv(index)) return; get_user_name(index, userName[index], charsmax(userName[])); }
Zmiana syntaxu w sayHandle na łatwy do odczytania przy prefixie
Zmiana z tego
public handleSayText(msgId,msgDest,msgEnt){ new id = get_msg_arg_int(1); if(is_user_connected(id) && g_Vip[id]){ new szTmp[256],szTmp2[256]; get_msg_arg_string(2,szTmp, charsmax(szTmp)) new szPrefix[64] = "^x04[VIP]"; if(!equal(szTmp,"#Cstrike_Chat_All")){ add(szTmp2,charsmax(szTmp2),szPrefix); add(szTmp2,charsmax(szTmp2)," "); add(szTmp2,charsmax(szTmp2),szTmp); } else{ add(szTmp2,charsmax(szTmp2),szPrefix); add(szTmp2,charsmax(szTmp2),"^x03 %s1^x01 : %s2"); } set_msg_arg_string(2,szTmp2); } return PLUGIN_CONTINUE; }
na to
public sayHandle(msgId, msgDest, msgEnt) { new index = get_msg_arg_int(1); if(!is_user_connected(index) || !GetBool(index, g_Vip)) return PLUGIN_CONTINUE; new chatString[2][192]; get_msg_arg_string(2, chatString[0], charsmax(chatString[])); new chatPrefix[64] = "^x04VIP"; if(equal(chatString[0], "#Cstrike_Chat_All")) { get_msg_arg_string(4, chatString[0], charsmax(chatString[])); set_msg_arg_string(4, ""); formatex(chatString[1], charsmax(chatString[]), "%s^x03 %s^x01 : %s", chatPrefix, userName[index], chatString[0]); } else formatex(chatString[1], charsmax(chatString[]), "%s^x01 %s", chatPrefix, chatString[0]); set_msg_arg_string(2, chatString[1]); return PLUGIN_CONTINUE; }
Przy okazji tego wszystkiego można by zmienić syntax kodu overall; usunąć zbędne spacje, ogarnąć powtarzający się kod, nazwy zmiennych z np. "g_Vip" na "hasVip" (tak, wiem, że są różne syntaxy pisania kodu i różne firmy wymagają różnych sposobów jego pisania, ale tutaj możemy śmiało powiedzieć, że sami będziemy na tym korzystać. Moim zdaniem łatwiej się czyta "hasVip" niż "g_Vip", ale to już preferencje personalne, ja tylko daję propozycję ), usunąć zbędne przechodzenie do osobnych funkcji, usunąć brackety przy jednoliniowych funkcjach (tak, tutaj też wiem, że to ma swój cel i różni programiści [...]).
#753730 Segmentation fault ustalenie miejsca problemu
Napisane przez DarkGL
w 30.11.2018 02:29
Dlaczego Segmentation fault występuje ?
Błędy typu Segmentation fault mogą wystąpić z kilku powodów
- Poprzez przeciążenie serwera hlds/rehlds pluginami i innego rodzaju dodatkami.
- Nieprzypisanie odpowiednich zasobów do poprawnego działania serwera.
- Pisania po pamięci przez wirtualną maszynę amxx'a niedostępną dla niej lub pluginu.
- Upewnij się że korzystasz z najnowszej wersji:
- HLDS/ReHLDS
- Metamoda i jego dodatków
- AMXX i jego modułów
- Upewnij się że pluginy na serwerze są skompilowane tą samą wersją kompilatora amxx którego używasz na serwerze.
- Wyłącz zbędne pluginy których nie używasz a mimo to są ładowane jako działające pluginy.
- Wyłączaj po kolei pluginy w celu ustalenia który powoduje problemy na serwerze. Polecam wyłączać pluginy sposobem 1/2 (wyłączasz połowę, włączasz serwer. Problem występuje -> zmniejszasz o kolejną połowę. Problem ustał -> zawęziłeś okres poszukiwań o 50% w jednym resecie). Zazwyczaj w modach takich jak Zombie, Jailbreak, CSGO czy pokrewnych winowajcą są główne silniki.
- Dopisz debug na liście pluginów który powoduje problem. Jeśli chcesz debugować wszystkie pluginy zamiast jednego ustaw cvar amx_debug 2.
// Plugin Debug mode // 0 - No debugging (garbage line numbers) // 1 - Plugins with "debug" option in plugins.ini are put into debug mode // 2 - All plugins are put in debug mode // Note - debug mode will affect JIT performance // // Default value: 1 amx_debug 2
- Sprawdź logi serwera i amxx ( znajdziesz je w cstrike/addons/amxmodx/logs ) w celu ustalenia miejsca występowania problemu w pluginie ( konkretne miejsce nigdy nie będzie podane ale możesz znaleźć tam inne błędy które też mogą wpływać na działanie serwera ).
- Sprawdź kod sma pluginu w celu ustalenia miejsca i naprawy problemu jeśli umiesz to zrobić sam.
- Jeśli nie umiesz programować załóż odpowiedni temat na forum podając:
- Używane wersje hlds , metamoda i amxx
- Logi serwera oraz logi amxx ( znajdziesz je w cstrike/addons/amxmodx/logs )
- Pełen kod pluginu jako załącznik
#753850 Sprzedam & Wykonam Paczki & Pluginy pod serwery AMXX (CS 1.6)
Napisane przez vanillah
w 03.12.2018 19:56
- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Reputacja: heniu1111
- Regulamin