To nie zadziała
Bo?
To równanie zostało stworzone przy pomocy kodu LaTeX:
Edytor LaTeX online: CodeCogs.com/latex/eqneditor.php
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.
|
Napisane przez Robiin w 28.08.2023 17:05
Napisane przez oeN. w 08.08.2023 20:48
Paczka ma pewnie z 6-8 lat.
Raczej 99% pluginów ma swoje .sma. Pewnie syf w plikach, jest tam kilka serwerów mimo wszystko.
CS:GO Mod - oryginalny oraz wersja Jackpot
JailBreak - unikalny, pisałem całość od 0
Star Warsy - unikalne, pisane od 0
Paintball 4Fun
Paintball z klasami
CoD: Black Ops 3
DD2 Only
I pojedyncze pluginy których nie pamiętam.
https://drive.google...iew?usp=sharing
Napisane przez Robiin w 07.02.2023 13:00
Reklamujcie się dalej w taki sposób, zbierajcie co raz to więcej wrogów przez pajacowanie w tematach i czyste podpierdzielanie pluginów, a w końcu się ktoś wk***i i wam skończy działność
Jeśli ktoś kupił jakikolwiek z ich pluginów i chciałby się podzielić pliczkiem .amxx lub .sma (które oczywiście usunę po sprawie), to chętnie sprawdzę jak dużo kodu jest podrąbane z pluginów moich, Pawła itd.
Autor misji, Smiguel, to wciąż zbanowany SSTeam.
Ponadto dwa z pluginów, które ktoś mi podesłał:
Plugin skinów broni jest edytowaną kopią pluginu Kamilovvskiego: https://amxx.pl/topi...ru-broni-skiny/, ale autor zmieniony na "mpN`"
Różnice w niektórych linijkach to skutek dekompilacji - jestem pewny, że sma wygląda 1:1.
Lewo - kod mpN
Prawo - kod oryginalny
Plugin mLogs jest kolejną kopią pluginu: https://forums.allie...p/t-157135.html, autor znów zmieniony na "mpN`":
Napisane przez Robiin w 11.01.2023 01:17
Nvault i sql jest zbędny.
Nie, bo napisał, że ma się resetować po zmianie mapy. Brak snu robi swoje
Nie potrzebujesz ani sql ani nvaulta. Jeśli ma się wszystko resetować po zmianie mapy to wystarczy przechowywać nazwę gracza i ilość użyć. Zmiana mapy sama wyzeruje kolekcję. Polecam użyć hashmapy (Trie), gdzie kluczem będzie nick gracza a wartością aktualna ilość użyć komendy.
A jak już chcesz iść w tym kierunku @Boski, to polecam poczytać o Array (dynamiczne tablice).
Poprawna wersja w załączniku - ale nie testowałem.
Napisane przez Robiin w 07.08.2022 16:58
Napis jest tablicą. Więc masz tablicę, która przechowuję tablicę tablic - czyli trójwymiarową. A zadeklarowałeś 2 wymiary ([][]).
Dlatego deklarację "models" zmień na:
new const models[][][] = { {"guerilla", "Zwykly Model"}, {"gign", "Zwykly Model"}, {"vendetta", "Vendetta"}, {"MechaGerman", "Mecha German"} }
Dla testu możesz sobie wypisać pewne dane:
log_amx("Model pierwszy, Nazwa: %s, Plik: %s", models[0][0], models[0][1]);
Dla ułatwienia możesz użyć enuma:
enum _: (+= 1) { MODEL_FILE, MODEL_NAME };
Wtedy użycie "models":
log_amx("Model pierwszy, Nazwa: %s, Plik: %s", models[0][MODEL_NAME], models[0][MODEL_FILE]);
Napisane przez Robiin w 20.05.2022 17:39
Sortowanie struktury:
#include <amxmodx> #define AUTHOR "Robin - amxx.pl/user/60210-wicked/" #define MAX_STR_LEN 25 // Nasza struktura danych. // Nie musi być w enumie, ale tak wygląda ładniej i wygodniej się z tym pracuje. enum _:MyStruct (+= 1) { INT_VALUE, STR_VALUE[MAX_STR_LEN + 1] }; new Array:array; public plugin_init() { register_plugin("", "v1.0", AUTHOR); // Tworzymy tablicę z naszą strukturą. array = ArrayCreate(MyStruct, 1); // Dodajemy przykładowe dane. (z posta, który napisałeś) add_dummy_record(array, 23, "Nazwa"); add_dummy_record(array, 5, "Inna nazwa"); add_dummy_record(array, 1, "costam"); add_dummy_record(array, 7, "test"); add_dummy_record(array, 11, "testcos"); add_dummy_record(array, 12, "cosiktam"); // Wypisujemy przed. print_array(array, "PRE"); // Sortujemy. ArraySort(array, "sort_function"); // Wypisujemy po. print_array(array, "POST"); } public add_dummy_record(Array:a, int, const str[]) { new data[MyStruct]; data[INT_VALUE] = int; copy(data[STR_VALUE], MAX_STR_LEN, str); ArrayPushArray(a, data); } public sort_function(Array:array, a, b) { new data[2][MyStruct]; ArrayGetArray(array, a, data[0]); ArrayGetArray(array, b, data[1]); // Sortujemy względem 'INT_VALUE'. if(data[0][INT_VALUE] > data[1][INT_VALUE]) return -1; if(data[0][INT_VALUE] < data[1][INT_VALUE]) return 1; return 0; } public print_array(Array:array, const prefix[]) { new data[MyStruct]; for(new i = 0; i < ArraySize(array); i++) { ArrayGetArray(array, i, data); log_amx("%s: ^"%s^" - %i", prefix, data[STR_VALUE], data[INT_VALUE]); } }
L 05/20/2022 - 18:37:11: [arrays.amxx] PRE: "Nazwa" - 23 L 05/20/2022 - 18:37:11: [arrays.amxx] PRE: "Inna nazwa" - 5 L 05/20/2022 - 18:37:11: [arrays.amxx] PRE: "costam" - 1 L 05/20/2022 - 18:37:11: [arrays.amxx] PRE: "test" - 7 L 05/20/2022 - 18:37:11: [arrays.amxx] PRE: "testcos" - 11 L 05/20/2022 - 18:37:11: [arrays.amxx] PRE: "cosiktam" - 12 L 05/20/2022 - 18:37:11: [arrays.amxx] POST: "Nazwa" - 23 L 05/20/2022 - 18:37:11: [arrays.amxx] POST: "cosiktam" - 12 L 05/20/2022 - 18:37:11: [arrays.amxx] POST: "testcos" - 11 L 05/20/2022 - 18:37:11: [arrays.amxx] POST: "test" - 7 L 05/20/2022 - 18:37:11: [arrays.amxx] POST: "Inna nazwa" - 5 L 05/20/2022 - 18:37:11: [arrays.amxx] POST: "costam" - 1
Napisane przez Rivit w 17.05.2022 20:07
Napisane przez Rivit w 19.04.2022 20:29
Trochę późno, ale też tak uważam jak DarkGL.
Ogólnie to natywy są wywoływane w bardzo ciekawy sposób, poprzez instrukcję asemblera `sysreq.c` (https://raw.githubus...oc/pawn-imp.pdf), która przyjmuje numer funkcji (system service się to bodajże nazywało w docu) do wywołania i to dopiero wywołuje tą funckję i potem wraca.
A takie bezpośrednie odwoływanie się do tablicy jest dużo lepsze, bo nie generuje nam instrukcji `sysreq.c`.
Porównaj sobie asembler (załącznik) z twojego kodu:
Ale nie przejmowałbym się takimi optymalizacjami, David Anderson zrobił świetną robotę dawno temu dokładając JIT'a do AMXX'a przez co maszyna wirtualna AMXX nie musi wykonywać instrukcji pawnowych, a natywny asembler (x86 czy x64 zależy na czym odpalasz to). Polecam poczytać kod źródłowy AMXX'a, bardzo pomaga w zrozumieniu jak ta machineria działa pod spodem
Napisane przez Abes Mapper w 17.01.2010 16:13
Reset Score
by SILENTTT
Napisane przez Robiin w 02.12.2021 18:37
Napisane przez O'Zone w 08.11.2021 22:17
Napisane przez dasiek w 12.10.2021 07:23
Lecimy gumową kaczuszką!
Twój warunek wygląda tak -
Jeśli użytkownik NIE JEST - hltv ORAZ - Użytkownikiem steam ORAZ - Botem ORAZ - Nie ma flagi ADMIN_LEVEL_G
Użytkownik musi spełnić te wszystkie warunki i na nim negujesz.
Szybki test ze sprawdzania (js ale logiczne operatory są te same)
let isHltv = false; let isSteam = false; let isBot = false; let hasFlag = false; if(!isHltv && !isSteam && !isBot && !hasFlag) { console.log('dupa'); } // 'dupa'
Wszystkie flagi są ustawione na false (czyli użytkownik nie jest botem, nie jest steamem, nie jest hltv i nie ma flagi). Teraz jest, jak użytkownik spełnia wszystkie te warunki
let isHltv = true; let isSteam = true; let isBot = true; let hasFlag = true; if(!(isHltv && isSteam && isBot && hasFlag)) { console.log('dupa'); } // undefined - nic nie wypisało
zakładając, że zamieniamy console.log z dupą na uruchomienie taska, task się nie uruchomi. Ale jeśli przynajmniej jeden z tych warunków będzie true, task się uruchomi
let isHltv = true; let isSteam = false; let isBot = false; let hasFlag = false; if(!(isHltv && isSteam && isBot && hasFlag)) { console.log('dupa'); } // 'dupa'
W tej sytuacji, proponuję każdą flagę sprawdzać oddzielnie, nie grupować w nawiasach.
Przykładowo - Twój task ma się uruchomić dla użytkowników którzy
- Nie są botami
- nie są steam
- Nie są botem
- Nie mają fagi
Korzystając z tego samego kodu, tylko dodając sprawdzenie na każdym warunku
let isHltv = true; let isSteam = false; let isBot = false; let hasFlag = false; if(!isHltv && !isSteam && !isBot && !hasFlag) { console.log('dupa'); } // undefined - nie wyświetla się
let isHltv = false; let isSteam = false; let isBot = false; let hasFlag = true; if(!isHltv && !isSteam && !isBot && !hasFlag) { console.log('dupa'); } // undefined - nie wyświetla się
Więc, jeśli chcesz, aby task nie wykonywał się, dla osób, które są botem albo hltv albo steamem albo nie maja flagi (słowo klucz, w Twoim przypadku było i na głos Sobie przeczytaj to zdanie raz ze słowem albo a raz ze słowem "i") nie mają tej flagi warunek powinien wyglądać tak :
if(!is_user_hltv(id) && !is_steam(id) && !is_user_bot(id) && !(get_user_flags(id) & ADMIN_LEVEL_G))
PS - kod który podałem śmiało możesz wrzucić np w konsole js w przeglądarce i pobawić się tym sam.
Napisane przez Robiin w 13.09.2021 17:22
#include <amxmodx> #define AUTHOR "Wicked - amxx.pl/user/60210-wicked/" #define MAX_TEAM_NAME 64 #define MAX_WEAPON_MODEL 128 enum _:WEAPON_MODEL_DATA { WMD_V[MAX_WEAPON_MODEL], WMD_P[MAX_WEAPON_MODEL], WMD_W[MAX_WEAPON_MODEL] }; enum _:BOXING_TEAM_DATA { BTD_NAME[MAX_TEAM_NAME], BTD_GLOVES[WEAPON_MODEL_DATA] }; new Array:boxing_teams; public plugin_init() { register_plugin("", "v1.0", AUTHOR); boxing_teams = initialize_teams(); add_team("Team one", "v_model.mdl", "p_model.mdl", "w_model.mdl"); add_team("Team two", "v_model2.mdl", "p_model2.mdl", "w_model2.mdl"); } Array:initialize_teams() { return ArrayCreate(BOXING_TEAM_DATA, 1); } add_team(const name[], const v[], const p[], const w[]) { new team[BOXING_TEAM_DATA]; copy(team[BTD_NAME], BTD_NAME - 1, name); copy(team[BTD_GLOVES][WMD_V], WMD_V - 1, v); copy(team[BTD_GLOVES][WMD_P], WMD_P - 1, p); copy(team[BTD_GLOVES][WMD_W], WMD_W - 1, w); log_amx("Adding: Team=^"%s^" V=^"%s^" P=^"%s^" W=^"%s^"", team[BTD_NAME], team[BTD_GLOVES][WMD_V], team[BTD_GLOVES][WMD_P], team[BTD_GLOVES][WMD_W]); ArrayPushArray(boxing_teams, team); }
L 09/13/2021 - 18:21:46: [test_enum.amxx] Adding: Team="Team one" V="v_model.mdl" P="p_model.mdl" W="w_model.mdl" L 09/13/2021 - 18:21:46: [test_enum.amxx] Adding: Team="Team two" V="v_model2.mdl" P="p_model2.mdl" W="w_model2.mdl"
Napisane przez O'Zone w 03.04.2021 14:43
Wersja 2.5.9 została wydana: