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
 

Kameha - zdjęcie

Kameha

Rejestracja: 09.01.2013
Aktualnie: Nieaktywny
Poza forum Ostatnio: 20.01.2013 18:35
-----

Moje tematy

Prawdopodobny Overflow

17.01.2013 22:33

Witam,

Otóż napotkał mnie dzisiaj niemiły problem po kilku godzinach pisania. Zazwyczaj testując poprawność działania pluginów+ew. luki używałem hlds, lecz po pewnym czasie dostrzegłem nieco szybszą opcję jaką była "new game".

Niemiła niespodzianka mnie spotkała jak się okazało że coś działa normalnie na "lokalnej grze", a już na hostowanym serwerze przez hlds nie chce :(

Problem podejrzewam w przepełnieniu bufora, jednakże dziwi mnie fakt że na lokalnej grze ten problem nie występuje.

Może trochę opowiem o miejscu kiedy problem się pojawia i możliwe że będziecie w stanie mi pomóc, przynajmniej mam taką nadzieję :)

Mam zarejestrowane komendy konsolowe, które wywołuję za pomocą messagemode:
register_concmd("jakis_komunikat","moja_jakas_funkcja");

Wszystko działa sprawnie do tego momentu, podczas gdy zostanie wykonana "moja_funkcja", która ma za zadanie przechwycić podane argumenty i wykonać na niej pewne działania. W moim przypadku wygląda to tak:
public moja_jakas_funkcja(id)
{
new TmpArray[33]
read_args(TmpArray,32)
replace_all(TmpArray, 32, "^"", "")
// [...]
// Jakieś czynności z podanym argumentem, przejście do kolejnej funkcji która łączy się z MySql.

Używam replace_all ze względu bezpieczeństwa, ponieważ argument zawarty w zmiennej używam następnie przy zapytaniu do MySql (Co mogło by się skończyć nie miło :()
Dodam że to nie jest pierwsza taka funkcja z wykorzystaniem tego rozwiązania podawania danych (wcześniej działało bez zarzutu). Jednakże od tego momentu coś musiało się stać w kodzie czego kompilator nie jest w stanie wykazać (kod kompiluje się bez żadnych błędów bądź ostrzeżeń).

Drugą opcją jaką przypuszczam w moim problemie jest fakt że z jakiegoś powodu forward plugin_init(), omija moje zarejestrowane komendy które pobierają argumenty (kolejny powód przypuszczenia przepełnienia buffora), bądź też celowe omijanie tych wpisów (raczej mało prawdopodobne).

Żeby nie robić osobnego tematu od razu zapytam tutaj, jak już dotarliście do tego momentu poprzez tonę tekstu :)
Jaki może być powód, że forward na plugin_cfg() dla konkretnego pluginu nie jest wykonany przy aktywowaniu serwera HLDS i trzeba ładować go ręcznie z plugin_ini małym set_taskiem (Dodam że po zmianie mapy, plugin_cfg ładuje się już poprawnie w tym pluginie co powoduje wyświetlenie się dwóch wiadomości w konsoli, które zostawiłem w celu sprawdzania czy połączenie z DB się powiodło)

Liczę że znajdzie się kilku chętnych, którzy będą w stanie pomóc mi z tym zapewne banalnym problemem :)
W spoilerze załączam także aktywowane moduły.
Spoiler

Pozdrawiam,
Kameha

[ROZWIĄZANE] Odwołanie się do drugiego pluginu

16.01.2013 20:12

Witam,

Chciałbym zapytać się was Drodzy forumowicze, czy istnieje jakaś możliwość odwołania się w jakikolwiek sposób do drugiego pluginu?

Może wytłumaczę o co mi dokładnie chodzi.
Plugin A: Jest odpowiedzialny za połączenie z MySQL, oraz przechwytywanie łączącego się gracza z serwerem, który zostaje odpowiednio "przeprasowany" przez owy plugin i jego informacje o postaci wędrują do DB.
Plugin B: Wykonuje czynności na graczu, przydzielanie wyglądu i innych rzeczy. Ładuje je oczywiście za pomocą MySQL.
Problem powstał kiedy próbowałem wykonać czynność na graczu, który się jeszcze nie połączył i nie wykonał procedury startowej, która tkwi z Pluginie A.

A więc owa czynność z Pluginu B nie powiodła się, niestety muszę w jakiś elegancki sposób wykonać ją w jak najszybszym czasie odkąd gracz skończy procedurę z Pluginu A.

Jedyny pomysł jaki przychodzi mi do głowy na chwilę obecną jest ustawienie task'a w drugim pluginie, który wykona force na procedurą czytającą ustawienia gracza po czasie ustalonym z góry.
Ew. ustawić brzydką pętlę, która będzie rzucać pytaniami do bazy danych czy gracz się już połączył. Jednak wolałbym uniknąć tego rozwiązania z powodu małej efektywności jak i pierwszego, gdyż nie będzie on działał wystarczająco szybko.

Myślę że przekazałem wam już wystarczająco informacji nt. mojego pytania. Jeżeli jest jakiś sposób wykonania funkcji na graczu z drugiego pluginu byłbym wdzięczny.

Oczywiście mam kod źródłowy obydwu pluginów co pozwoli mi na dowolną edycję, lecz bardzo mi zależy na tym by nie sklejać je w jedność.

Pozdrawiam,
Kameha