←  Poradniki oraz Łatki

AMXX.pl: Support AMX Mod X i SourceMod

»

Fix
[5.9l] Optymalizacja połączeń z bazą

  • +
  • -
sebul - zdjęcie sebul 29.10.2011

Po dodaniu tego fixa do swojego moda, plugin będzie wysyłał o 1 zapytanie do bazy od gracza mniej, czyli przy 32 slotach, będzie to aż o 32 zapytań mniej, do tego nowym graczom nie będą się tworzyć od razu wszystkie klasy, no i ogólnie nowy kod jest czytelniejszy :D

FIX NIE WYMAGA RESETU LVLI I EXPA!

INSTRUKCJA
Spoiler


Polecam także wgranie tego fixa (już po wykonaniu fixa z tego tematu):
- http://amxx.pl/topic...wanie-sie-klas/
czyli szukamy
formatex(q_command, 511, "CREATE TABLE IF NOT EXISTS `%s` (`nick` VARCHAR(48), `ip` VARCHAR(32), `sid` VARCHAR(32), `klasa` INT(2), `lvl` INT(3) DEFAULT 1, `exp` INT(9) DEFAULT 0, `str` INT(3) DEFAULT 0, `int` INT(3) DEFAULT 0, `dex` INT(3) DEFAULT 0, `agi` INT(3) DEFAULT 0) DEFAULT CHARSET `utf8` COLLATE `utf8_general_ci`", g_sqlTable);

i zamieniamy na
new typ_primary[5];
switch(get_cvar_num("diablo_sql_save")) {
case 0: typ_primary = "nick";
case 1: typ_primary = "ip";
case 2: typ_primary = "sid";
default: typ_primary = "nick";
}
formatex(q_command, 511, "CREATE TABLE IF NOT EXISTS `%s` (`nick` VARCHAR(48), `ip` VARCHAR(32), `sid` VARCHAR(32), `klasa` INT(2), `lvl` INT(3) DEFAULT 1, `exp` INT(9) DEFAULT 0, `str` INT(3) DEFAULT 0, `int` INT(3) DEFAULT 0, `dex` INT(3) DEFAULT 0, `agi` INT(3) DEFAULT 0, PRIMARY KEY (`%s`, `klasa`)) DEFAULT CHARSET `utf8` COLLATE `utf8_general_ci`", g_sqlTable, typ_primary);


Jeśli chcesz pozbyć się niepotrzebnych wpisów z bazy, to wykonaj takie zapytanie (np. w phpMyAdmin)
DELETE FROM `nazwa_tabeli` WHERE `exp`='0'
Oczywiście zamiast nazwa_tabeli, wpisz swoją nazwę tabeli jaką masz w bazie.


Po dodaniu fixa nie dodawać:
- http://amxx.pl/topic...zie-nowy-gracz/
- http://amxx.pl/topic...resetu-exp-sql/ (także już nie potrzebne, po tym fixie wystarczy kolejno dodawać nowe klasy)
Jeśli ktoś się nie zna, nie powinien także dodawać:
- http://amxx.pl/topic...klas-nowe-menu/
- http://amxx.pl/topic...do-diablo-moda/

Proszę na razie nie wgrywać, kodu jest dużo, więc ciężko to tak za jednym razem ogarnąć, możliwe, że jeszcze o czymś zapomniałem, więc muszę to przetestować na czystym modzie. Oczywiście jeśli ktoś chce, może mi w tym pomóc ;]

Plik z instrukcją:
Załączony plik  instrukcja.txt   24,3 KB   327 Ilość pobrań
Użytkownik sebul edytował ten post 12.11.2011 11:02
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 29.10.2011

32 zapytania to bardzo sporo :)
Jeżeli IP.B na tak zawansowany skrypt wykonuje ~8 zapytań na stronie głównej
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 29.10.2011

Instrukcja poprawiona i przetestowana na czystym modzie, więc powinno być już wszystko ok ;]
Odpowiedz

M@nkovsky - zdjęcie M@nkovsky 29.10.2011

Czegoś takiego właśnie nam brakowało. Powiedz aby czy wymagany jest reset bazy do tego czy sie jakso pokryja
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 29.10.2011

U siebie mam co prawda jeszcze trochę inną wersję, ale jest to praktycznie to samo i jakoś wszystko normalnie śmiga bez errorów, itp. Tylko jak ktoś ma jeszcze staty www do moda, to wtedy trzeba w paru miejscach trochę pliki edytować.
Użytkownik sebul edytował ten post 29.10.2011 16:38
Odpowiedz

M@nkovsky - zdjęcie M@nkovsky 29.10.2011

ale jest to praktycznie to samo i

Rozumiem ,że resetu nie trzeba tak?
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 29.10.2011

Tak, nie trzeba robić resetu, żeby móc dodać tego fixa do swojego moda.
Odpowiedz

  • +
  • -
KariiO - zdjęcie KariiO 29.10.2011

Po wgraniu tego potrzeba przy dodaniu nowych klas robić reset sql ?
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 29.10.2011

Po dodaniu fixa nie dodawać:
- [Tutorial] Klasa gdy wejdzie nowy gracz - AMXX.pl: Support AMX Mod X
- [5.9l] Nowa klasa bez resetu exp (SQL) - AMXX.pl: Support AMX Mod X (także już nie potrzebne, po tym fixie wystarczy kolejno dodawać nowe klasy)

Czyli jak widać nie trzeba resetu, powinno wszystko normalnie działać.
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 29.10.2011

za poradnik + ale da się to zrobić jeszcze lepiej wymaga to jednak dużo głębszej edycji moda
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 29.10.2011

No wiem, że na pewno się da to zrobić lepiej, ale akurat ja już tak dobrze tego nie ogarniam. U siebie wykorzystałem jeszcze w wczytywaniu get_gametime() i warunek, żeby sprawdzał aby nie było zbyt wiele zapytań w tym samym czasie, może niezbyt odpowiedni sposób do tego, ale tylko to mi przyszło do głowy ^ ^
Odpowiedz

  • +
  • -
Stachuu :D ?? - zdjęcie Stachuu :D ?? 29.10.2011

a jak to zwiększa szybkość wczytywania sie klasy

np na xaa.pl

porównywalne choć po części z unixtrom ?
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 29.10.2011

Różnicę pewnie będzie widać gołym okiem, ale gwarancji nie daję.
Odpowiedz

  • +
  • -
::Gogiel:: - zdjęcie ::Gogiel:: 31.10.2011

WoW Sebul jak by to ując znacznie to przyspieszyło działanie ;)

Wielkie dzięki LECI +

A mimo, ze mam frakcje dałem radę :P

A i odpowiedź co do bazy na xaa.pl Fakt test odbył się tylko przy 3 graczach ale śmiga po 4 sekundach i ładuje poziomy bez probemów.
Odpowiedz

M@nkovsky - zdjęcie M@nkovsky 31.10.2011

Jak tu frakcje dodać?
tym sposobem co podałeś w temacie?
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 02.11.2011

Do pierwszego postu dodałem zapytanie do bazy, które usunie nie potrzebne wpisy z bazy.
Odpowiedz

  • +
  • -
::Gogiel:: - zdjęcie ::Gogiel:: 02.11.2011

Sebul, jesteś wielki :)
Użytkownik ::Gogiel:: edytował ten post 02.11.2011 18:30
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 02.11.2011

Jeśli chcesz pozbyć się niepotrzebnych wpisów z bazy, to wykonaj takie zapytanie (np. w phpMyAdmin)


Jeżeli np gram na klasie mag , a na klasie palladyn mam 0 expa to jeżeli wykonam to zapytanie to usunie mi rekord związany z klasą palladyn. Ale po jakimś czasie chce znów grać na klasie palladyn. i nie będzie tej klasy w bazie a co za tym idzie klasa na serwerze nie będzie działać, czy dobrze mówie.
Czy raczej po wybraniu klasy ta klasa utworzy się sama
sebul (02.11.2011 23:19):
Tak na przyszłość używaj znaku zapytania do zadawania pytań ^^
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 02.11.2011

Przy wyborze klasy jest sprawdzane czy dana klasa jest w bazie, jeśli jej nie będzie, to ją utworzy.
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 02.11.2011

Aha, czyli wszystko ok :)
Odpowiedz