Wykonujesz funkcję od czasu 0 do aktualnego czasu albo jakiegoś z przyszłości i plik jest pusty.
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.
|
Profil na webmasteruj: https://webmasteruj....906-gwynbleidd/
Napisane przez GwynBleidD w 15.07.2015 19:30
Wykonujesz funkcję od czasu 0 do aktualnego czasu albo jakiegoś z przyszłości i plik jest pusty.
Napisane przez GwynBleidD w 14.07.2015 09:34
Ten kod będzie przy każdym thinku aktualizował rendering gracza, jeśli ten kuca, a wystarczy zaktualizować gdy zaczyna kucać i gdy przestaje kucać. Sprawdzaj oldbutton i reaguj tylko wtedy, gdy nastąpiła zmiana. Wystarczy dodać na początku thinka (po sprawdzeniu czy gracz ma dany perk) to:
if(!((get_user_oldbutton(id) ^ get_user_button(id)) & IN_DUCK)) return;
Jak to działa? operator ^ to operator XOR, zwróci on jedynkę na danym bicie tylko wtedy, gdy bit w obu porównywanych wartościach jest różny, czyli:
0b00010100 0b00010010 XOR = 0b00000110
W ten sposób zaświecają nam się bity klawiszy, które zostały w danym thinku zmienione. Nas interesuje tylko duck, więc dodatkowo przepuszczamy to przez & i viola
Oczywiście przerzuć kod do cmd start, jak sugerują inni.
Napisane przez GwynBleidD w 08.07.2015 10:02
Napisane przez GwynBleidD w 06.07.2015 19:44
Napisane przez GwynBleidD w 06.07.2015 19:41
Napisane przez GwynBleidD w 06.07.2015 17:53
Napisane przez GwynBleidD w 06.07.2015 17:49
Musisz w jakiś sposób śledzić jaki plugin ustawił jaką wartość - stąd pomysł z trie, bo wtedy możesz sobie każdą zmianę "podpisać" Właściwie to rejestrowania tutaj nawet nie potrzebujesz, po prostu zmienić.A jakby w jakiejś tablicy trzymać wszystkie wartośći, które mu dodałem?
Będę mieć id gracza lub nazwe (Trie lub Array), do tego dochodzą jeszcze wartośći, które muszą być trzymane pod jednym kluczem (wyciągam wszystkie i wybieram największą
Array trzymający Array?
new Trie:invisibility[33]; new client_connect(id) { invisibility[id] = TrieCreate() }to Ci coś mówi?
Napisane przez GwynBleidD w 06.07.2015 14:49
Problem jest, ale nie aż tak poważny... Wcale nie musisz trzymać tego w 1 pluginie
1. Rejestrujesz natyw o nazwie dla przykładu przelicz_niewidzialnosc
2. Dla każdego pluginu, który choć raz użył tego natywu rejestrujesz forward
3. W forwardzie każdy plugin, który korzysta z niewidzialności przy każdym jego wykonaniu dla danego gracza, określa jaką powinien mieć niewidzialność - jeśli ma np perk, ustalamy mu 20%, jeśli nie ma nic, ustalamy mu 100% (czyli widoczny). Wynik po prostu zostaje zwrócony w forwardzie
4. Po wykonaniu wszystkich forwardów plugin główny wybiera najmniejszą wartość lub dokonuje jakichś "szacunków" żeby wyliczyć wartość na innej podstawie (np średnią)
Jeśli chcesz zmienić niewidzialność graczowi, dbasz o to by Twój plugin w forwardzie zwrócił odpowiednią wartość, a następnie wykonujesz przelicz_niewidzialnosc.
Podejście numer dwa - lista niewidzialności.
1. Rejestrujesz 2 natywy: zarejestruj_niewidzialnosc i ustaw_niewidzialnosc
2. zarejestruj_niewidzialnosc tworzy nowy wpis w trie w którym jako klucz podajesz swoją dowolną, unikalną nazwę (czyli np dla perku XX będzie to po prostu perk_XX), a jako wartość 100% (czy tam 255, czy 1, czy cokolwiek innego, zależy od tego jak niewidzialność jest ustawiana) oznaczającą brak niewidzialności
3. gdy plugin chce zmienić graczowi niewidzialność, wykonuje ustaw_niewidzialnosc z odpowiednią wartością, plugin główny zapisuje ją na odpowiednniej pozycji w trie i wybiera z trie najmniejszą wartość, ustawiając ją graczowi. Jeśli trie jest puste, ustawia brak niewidzialności.
przykład użycia:
zarejestruj_niewidzialnosc('perk_superasny')
ustaw_niewidzialnosc(id, 'perk_superasny', 30)
Podejście numer trzy - własny system (np punktowy)
Ustalasz jakiś system punktowy, od którego będzie zależeć ile niewidzialności ma gracz, każdy plugin będzie mógł dodać punkty lub je zabrać.
Podejście numer cztery - sprawdzanie wartości niewidzialności
Każdy plugin będzie posługiwał się wartościami od 0.0 do 1.0, jeśli będzie chciał ustawić graczowi niewidzialność:
1. pobierze jego aktualny poziom niewidzialności
2. przemnoży go przez swoją wartość
3. ustawi otrzymaną liczbę jako wartość niewidzialności
Jeśli będzie chciał zabrać, po prostu zamiast mnożenia użyje dzielenia.
W ten sposób jeśli 1 plugin ustawi graczowi niewidzialność na 0.5 i drugi również na 0.5, dostanie on w efekcie wartość 0.25.
Napisane przez GwynBleidD w 06.07.2015 11:09
Napisane przez GwynBleidD w 06.07.2015 11:00
Bo po 1. robisz to ŹLE!
Jaki sens jest w zapisywaniu daty bana jako string w bazie danych? Powodzenia później w próbie wybrania wszystkich banów z konkretnego dnia, dla przykładu.
Jaki jest sens rezygnowania z powodu bana i próby zapisania daty zamiast niego?
Po 2. sam sobie nadpisujesz poprzednio pobraną datę, powodem bana. Linia 17 w Twojej wklejce, wystarczy ją usunąć.
Zrób to po ludzku i dodaj nową kolumnę w bazie danych, w której będziesz zapisywał czas bana.
Napisane przez GwynBleidD w 30.06.2015 12:17
Napisane przez GwynBleidD w 30.06.2015 11:05
new VULCAN = 0b00000001 new REDLINE = 0b00000010 new ASSIMOV = 0b00000100 new FIRESERPENT = 0b00001000W ten sposób każdy skin ma swój bit. Żeby przydzielić graczowi skin robisz tak:
skiny[id][weapon] |= REDLINEAby odebrać:
skiny[id][weapon] &= ~REDLINEAby sprawdzić czy ma dany skin:
if (skiny[id][weapon] & REDLINE)Aby sprawdzić czy ma kilka skinów na raz:
if ((skiny[id][weapon] & (REDLINE|ASSIMOV|FIRESERPENT)) == (REDLINE|ASSIMOV|FIRESERPENT))Aby sprawdzić czy ma którykolwiek z tych 3 skinów:
if (skiny[id][weapon] & (REDLINE|ASSIMOV|FIRESERPENT))To, co jest w zmiennej skiny[id][weapon] zapisujesz do bazy (lub odczytujesz z bazy liczbę bezpośrednio do tej zmiennej). Proste?
INSERT INTO `CSGOMOD` (`name`, `weapon`, `skin`) VALUES ('gracz', 'ak47', 3), ('gracz', 'm4a1', 2) ON DUPLICATE....
Napisane przez GwynBleidD w 29.06.2015 21:43
INSERT INTO CSGOMOD (`nick`, `weapon`, `skin`) VALUES ('%s', '%s', %d) ON DUPLICATE KEY UPDATE `nick`=VALUES(`nick`), `weapon`=VALUES(`weapon`), `skin`=VALUES(`skin`);
W ten sposób dodajesz lub aktualizujesz jednego gracza, a tutaj:
INSERT INTO CSGOMOD (`nick`, `weapon`, `skin`) VALUES ('%s', '%s', %d), ('%s', '%s', %d), ('%s', '%s', %d) ON DUPLICATE KEY UPDATE `nick`=VALUES(`nick`), `weapon`=VALUES(`weapon`), `skin`=VALUES(`skin`);
trzech na raz
Jako skin używasz po prostu liczby.
Napisane przez GwynBleidD w 29.06.2015 18:59
SELECT * FROM `CSGOMOD` WHERE `nick` = '%s' AND `weapon` = 'AK47'
Tutaj nie musisz w warunku podawać weapon, pobierzesz wtedy wszystkie bronie dla danego gracza.
UPDATE CSGOMOD SET skin='%d' WHERE nick='%s' AND weapon='AK47'
Tego nie potrzebujesz, aktualizacją zajmie się:
INSERT INTO CSGOMOD (`nick`, `weapon`) VALUES ('%s', 'AK47') ON DUPLICATE KEY UPDATE `nick`='%s', `weapon`='AK47';
jeśli masz prawidłowo unikalne klucze ułożone. Oczywiście musisz dodać do tego zapytania skin. Zalety? Możesz zaktualizować wiele rekordów jednym zapytaniem (wszystkich na serwerze) i nie musisz w kodzie rozróżniać tworzenia od aktualizacji danych.
Napisane przez GwynBleidD w 29.06.2015 16:35