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
 

Zdjęcie
Inny

XPMOD Core [nVault/SQLx]Zwyczajny xpmod!

inny

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
28 odpowiedzi w tym temacie

#1 TheDarkDez

    Zaawansowany

  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:112
  • GG:
  • Imię:Paweł
  • Lokalizacja:Nisko
Offline

Napisano 20.02.2015 17:40

Opis:

Co tu dużo mówić, zwyczajny xpmod(nabijamy poziomy :D).
A tak na serio, to liczenie poziomu jest zaczerpnięte z Call of Duty Mod - QTM_Peyote.
Cały mod ma własną walutę (Monety), status w HUD (aktualny poziom, procent doświadczenia, stan posiadanych monet).
Doświadczenie/monety możemy zdobywać za: kill'a, kill'a z HS, kill'a z noza, zemstę, asystę, podłożenie/rozbrojenie bomby, uratowanie zakładnika/zakładników, wygranie rundy.

Natywy:

xpmod_add_xp - dodaje graczowi określona liczbę doświadczenia
xpmod_get_xp - zwraca zdobyta przez gracza ilość doświadczenia
xpmod_take_xp - zabiera graczowi określoną liczbę doświadczenia, jeśli operacja się powiedzie zwróci true a jeśli nie to zwróci false
xpmod_add_coins - dodaje graczowi określona liczbę monet
xpmod_get_coins - zwraca zdobyta przez gracza ilość monet
xpmod_take_coins - zabiera graczowi określoną liczbę monet, jeśli operacja się powiedzie zwróci true a jeśli nie to zwróci false
xpmod_get_lvl_xp - zwraca potrzebna ilość doświadczenia do awansu z podanego poziomu (parametr) na następny
xpmod_check_lvl - sprawdza czy gracz ma wymagana ilość doświadczenia do awansu
xpmod_load_data - ląduje dane gracza, w wersji nVault z pliku, a w wersji SQLx z bazy danych
xpmod_save_data - zapisuje dane gracza, w wersji nVault do pliku, a w wersji SQLx do bazy danych

Cvary:

// zdobywanie doswiadczenia
xpmod_kill_xp "10" // ilosc doswidczenia zdobywana podczas morderstwa innego gracza, jesli ustawimy 0 wylaczymy zdowywanie doswiadczenia
xpmod_kill_hs_xp "15" // ilosc doswidczenia zdobywana podczas morderstwa innego gracza strzalem w glowe, jesli ustawimy 0 wylaczymy zdowywanie doswiadczenia
xpmod_kill_knife_xp "20" // ilosc doswidczenia zdobywana podczas morderstwa innego gracza nozem, jesli ustawimy 0 wylaczymy zdowywanie doswiadczenia
xpmod_vengeance_xp "5" // ilosc doswidczenia zdobywana gdy zemscimy sie na graczu, jesli ustawimy 0 wylaczymy zdowywanie doswiadczenia
xpmod_assist_xp "5" // ilosc doswidczenia zdobywana gdy asystujemy przy morderstwie, jesli ustawimy 0 wylaczymy zdowywanie doswiadczenia
xpmod_bomb_xp "40" // ilosc doswidczenia zdobywana gdy podlozymy bombe, jesli ustawimy 0 wylaczymy zdowywanie doswiadczenia
xpmod_host_xp "10" // ilosc doswidczenia zdobywana gdy uratujemy zakladnika, jesli ustawimy 0 wylaczymy zdowywanie doswiadczenia
xpmod_team_win_xp "5" // ilosc doswidczenia zdobywana przez team wygrywajacy runde, jesli ustawimy 0 wylaczymy zdowywanie doswiadczenia

// zdobywanie monet
xpmod_kill_coins "0" // ilosc monet zdobywana podczas morderstwa innego gracza, jesli ustawimy 0 wylaczymy zdowywanie monet
xpmod_kill_hs_coins "1" // ilosc monet zdobywana podczas morderstwa innego gracza strzalem w glowe, jesli ustawimy 0 wylaczymy zdowywanie monet
xpmod_kill_knife_coins "2" // ilosc monet zdobywana podczas morderstwa innego gracza nozem, jesli ustawimy 0 wylaczymy zdowywanie monet
xpmod_vengeance_coins "0" // ilosc monet zdobywana gdy zemscimy sie na graczu, jesli ustawimy 0 wylaczymy zdowywanie monet
xpmod_assist_coins "0" // ilosc monet zdobywana gdy asystujemy przy morderstwie, jesli ustawimy 0 wylaczymy zdowywanie monet
xpmod_bomb_coins "4" // ilosc monet zdobywana gdy podlozymy bombe, jesli ustawimy 0 wylaczymy zdowywanie monet
xpmod_host_coins "1" // ilosc monet zdobywana gdy uratujemy zakladnika, jesli ustawimy 0 wylaczymy zdowywanie monet
xpmod_team_win_coins "0" // ilosc monet zdobywana przez team wygrywajacy runde, jesli ustawimy 0 wylaczymy zdowywanie monet

// ustawienia moda
xpmod_min_players "4" // minimalna ilosc graczy na serwerze, aby moc zdobywac doswiadczenie i monety za podkladanie/rozbrajanie bomb, uratowanie zakladnika i wygrana runde
xpmod_max_lvl "100" // maksymalny poziom jaki mozemy zdobyc w grze
xpmod_ratio_xp "25" // mnoznik poziomu, im wiekszy tym ciezej sie zdobywa poziomy
xpmod_save_type "1" // rodzaj zapisu danych graczy, 0 - zapis wylaczony, 1 - nick gracza, 2 - steam gracza, 3 - ip gracza, 4 - nick gracza + ip
xpmod_assist_dmg "25" // minimalna ilosc jaka musimy zadac graczu, aby byc liczonym do asysty

xpmod_prefix "XPMOD" // prefix wiadomosci wyswietlanych przez moda

// dane bazy danych, jesli uzyjemy wersji z zapisem do bazy danych
xpmod_sql_host "localhost" // definuje serwer na ktorym znajduje sie baza danych, cvar dostepny tylko na wersji z zapisem danych do bazy
xpmod_sql_user "root" // definuje urzytkownika przypisanego do bazy danych, cvar dostepny tylko na wersji z zapisem danych do bazy
xpmod_sql_pass "" // definuje haslo urzytkownika, cvar dostepny tylko na wersji z zapisem danych do bazy
xpmod_sql_name "xpmod" // definuje nazwe bazy danych, cvar dostepny tylko na wersji z zapisem danych do bazy

Changelog:

v0.9.0(nieudostępniona): pierwsza działająca wersja moda
v0.9.1 - v0.9.5(nieudostępnione): naprawa błędów, ogólne poprawki, optymalizacja
v0.9.6: podział na dwie wersje z różny zapisem danych graczy [nVault/SQLx]

Uwagi:

Jeśli wybierzecie wersję z zapisem do bazy, trzeba pamiętać aby podać adres serwera gry lub wstawić znak % w ?(nie pamiętam jak się to nazywało, ale chodziło o to żeby serwer miał
pozwolenie na połączenie się z bazą danych).
Po każdej zmianie jakiegokolwiek cvara trzeba zatrzymać serwer, a następnie uruchomić ponownie(nie wystarczy restart mapy).
Jeśli mod nie będzie wczytywał/zapisywał danych gracza(SQLx), wtedy w konsoli serwera pojawią się odpowiednie komunikaty.

Pliki:

Biblioteka Mod'a: Załączony plik  xpmod.inc   2,1 KB  154 Ilość pobrań

Silnik Mod'a (zapis nVault, do pliku na serwerze): Załączony plik  xpmod_core_nvault.sma   21,93 KB  174 Ilość pobrań
  xpmod_core_nvault.amxx

Silnik Mod'a (zapis SQLx, do bazy danychy): Załączony plik  xpmod_core_sqlx.sma   25,98 KB  166 Ilość pobrań
  xpmod_core_sqlx.amxx

 

Propozycję:

Jeśli ktoś będzie miał, jakieś fajne i przemyślane propozycję, które mogły by ulepszyć tą modyfikację proszę żeby pisały posty w tym temacie.

  • +
  • -
  • 1

#2 ParadisO

    Wszechmogący

  • Power User

Reputacja: 128
Zaawansowany

  • Postów:689
  • Lokalizacja:Częstochowa
Offline

Napisano 26.04.2015 08:53

3 sprawy, dlaczego dałeś zapis sqlx/nvault w osobnych plikach ? Myślę, ze lepiej by było zrobić wybór cvarem sposób zapisu.

 

Druga sprawa: Przy używaniu zapytań do sql, szczególnie INSERT/UPDATE/DELETE zawsze używaj WHERE. W tym momencie Twój mod przy zapisie sql robie wpisy jednego gracza, tzn

Jeżeli mamy na serwerze np 6 graczy to zrobi 6 wpisów z player_authorization i player_data = danym pierwszego gracza.

 

Trzecia sprawa w bazie danych po to są kolumny, żeby ich używać :) Rozbij poziom, doświadczenie i monety na 3 kolumny.

 

P.S.

Zawsze warto jest nadawać w tabeli jakieś ID AI :)


  • +
  • -
  • 1

#3 TheDarkDez

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:112
  • GG:
  • Imię:Paweł
  • Lokalizacja:Nisko
Offline

Napisano 26.04.2015 10:27

3 sprawy, dlaczego dałeś zapis sqlx/nvault w osobnych plikach ? Myślę, ze lepiej by było zrobić wybór cvarem sposób zapisu.

 

Druga sprawa: Przy używaniu zapytań do sql, szczególnie INSERT/UPDATE/DELETE zawsze używaj WHERE. W tym momencie Twój mod przy zapisie sql robie wpisy jednego gracza, tzn

Jeżeli mamy na serwerze np 6 graczy to zrobi 6 wpisów z player_authorization i player_data = danym pierwszego gracza.

 

Trzecia sprawa w bazie danych po to są kolumny, żeby ich używać :) Rozbij poziom, doświadczenie i monety na 3 kolumny.

 

P.S.

Zawsze warto jest nadawać w tabeli jakieś ID AI :)

 

 

Co do 1. to było dla mnie lepiej oddzielić te dwa zapisy, niż pisać je razem.

Po 2. to chyba nie rozumiesz kodu dla zapisu do bazy danych, ten public zawierający zapytanie INSERT/UPDATE/DELETE nie potrzebuje tego ponieważ public wyżej jest użyte WHERE.

A co do 3. to jest to specjalnie tak zrobione, nie musiałem zbytnio zmieniać kodu i w przyszłości miał być dostępny konwerter pomiędzy nVault a SQLx.


  • +
  • -
  • 0

#4 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 26.04.2015 10:58

Przy insert where? Raczej nie, ale tak jak wyżej, ch*owy kod sql, popraw bo na to patrzeć się nie da.
I jeszcze:
1. A niby czemu lepiej? I co w tym trudnego, żeby dwa typy zapisów były w jednym pliku?
2. To co napisałem wyżej, taki sposób jak to jest zrobione, jest po prostu nie dopuszczalny.
3. Nawet jeśli ma być jakiś konwerter, to tutaj większa ilość kolumn na pewno w tym nie przeszkodzi.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#5 TheDarkDez

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:112
  • GG:
  • Imię:Paweł
  • Lokalizacja:Nisko
Offline

Napisano 26.04.2015 11:08

sebul co jest w moim kodzie takiego ch****ego?


  • +
  • -
  • 0

#6 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 26.04.2015 11:23

Po co ci cvar skoro trzeba restartowaćrestartować server?

Baza aż prosi się o to:
http://pl.m.wikipedi...a_(bazy_danych)

Pisane z fona
  • +
  • -
  • 0

#7 ParadisO

    Wszechmogący

  • Power User

Reputacja: 128
Zaawansowany

  • Postów:689
  • Lokalizacja:Częstochowa
Offline

Napisano 26.04.2015 12:39

Przy insert where? Raczej nie

 

Yyy... mała pomyłka ^^

 

 

Po 2. to chyba nie rozumiesz kodu dla zapisu do bazy danych, ten public zawierający zapytanie INSERT/UPDATE/DELETE nie potrzebuje tego ponieważ public wyżej jest użyte WHERE.

 

 

W takim razie wyjaśnij mi proszę tego screena

Załączone miniatury

  • Bez

  • +
  • -
  • 0

#8 TheDarkDez

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:112
  • GG:
  • Imię:Paweł
  • Lokalizacja:Nisko
Offline

Napisano 26.04.2015 12:52

Po co ci cvar skoro trzeba restartowaćrestartować server?

Baza aż prosi się o to:
http://pl.m.wikipedi...a_(bazy_danych)

 
Powiem tyle, testowałem cały mod na dwóch tabelach, w jednej był przypadkowo wygenerowany ciąg znaków(klucz/identyfikator), a w drugiej dane gracza przypisane do tego klucza/identyfikatora z pierwszej tabeli.
W drugiej tabeli były trzy kolumny, w pierwszej był klucz gracza, w drugiej informacja co zawiera trzecia kolumna(czy to ilość monet, exp'a, itd), a w ostatniej była sama liczba.
Takie rozwiązanie było poprawne ale mało efektywne,(do testów w bazie wygenerowałem 30000 wpisów, to tak jakby było zapisanych 10000 graczy) ponieważ przy 6+ graczach zaczęły się lagi serwera, a przy 11-12+ serwer zaczął się wieszać.
Dlaczego tak się działo? Bo hostingi na jednej maszynie fizycznej, tworzą kilka lub kilkanaście maszyn wirtualnych, a na dodatek baza danych dla takiego serwera będzie na jeszcze innym serwerze niż serwer gry.
Sprawa ta ma się inaczej, gdy jesteśmy w posiadaniu serwera VPS, gdzie na jednej maszynie fizycznej stoi jeden serwer gry + baza danych, tutaj nie ma prawa zauważyć jakiegokolwiek laga, ale i tutaj trzeba byłoby zmienić rodzaj zapytań już w samym modzie.
 
Więc w tym przypadku nie widzę sensu stosować się do tego co podałeś w linku.
 

P.S.
Zawsze warto jest nadawać w tabeli jakieś ID AI

 

Sprawdź czy da się w tabeli "auto_increment".

 

ParadisO, jaki typ zapisu ustawiłeś?


Użytkownik TheDarkDez edytował ten post 26.04.2015 12:54

  • +
  • -
  • 0

#9 ParadisO

    Wszechmogący

  • Power User

Reputacja: 128
Zaawansowany

  • Postów:689
  • Lokalizacja:Częstochowa
Offline

Napisano 26.04.2015 13:10


ParadisO, dnia 26 Kwie 2015 - 09:53, napisał:
P.S.
Zawsze warto jest nadawać w tabeli jakieś ID AI
 
Sprawdź czy da się w tabeli "auto_increment".
 
ParadisO, jaki typ zapisu ustawiłeś?

 

A czemu miało by się nie dać ustawić AI na nową kolumnę ?

 

Wszystkie ustawienia zostawiłem standardowe.


  • +
  • -
  • 0

#10 TheDarkDez

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:112
  • GG:
  • Imię:Paweł
  • Lokalizacja:Nisko
Offline

Napisano 26.04.2015 13:16

A czemu miało by się nie dać ustawić AI na nową kolumnę ?
 
Wszystkie ustawienia zostawiłem standardowe.

 

Jakby się dało to bym wstawił, ale wywalało błędy.


  • +
  • -
  • 0

#11 ParadisO

    Wszechmogący

  • Power User

Reputacja: 128
Zaawansowany

  • Postów:689
  • Lokalizacja:Częstochowa
Offline

Napisano 26.04.2015 13:39

Proszę

CREATE TABLE IF NOT EXISTS `xpmod_players_data` (`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `player_authorization` VARCHAR(128), `player_data` VARCHAR(128))

  • +
  • -
  • 0

#12 TheDarkDez

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:112
  • GG:
  • Imię:Paweł
  • Lokalizacja:Nisko
Offline

Napisano 26.04.2015 13:46

Ja wiem jak to zadeklarować tylko że to nie działa.


  • +
  • -
  • 0

#13 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 26.04.2015 13:51

zrób tak jak pardise +

INSERT INTO xpmod_players_data VALUES(DEFAULT, '{authorizate}', '{player_data}')

gdzie {} - to zmienne dajesz 


  • +
  • -
  • 0

#14 TheDarkDez

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:112
  • GG:
  • Imię:Paweł
  • Lokalizacja:Nisko
Offline

Napisano 26.04.2015 14:00

zrób tak jak pardise +

INSERT INTO xpmod_players_data VALUES(DEFAULT, '{authorizate}', '{player_data}')

gdzie {} - to zmienne dajesz 

 

WTF? Do czego ty to dałeś?


  • +
  • -
  • 0

#15 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 26.04.2015 14:06

to co paradise +

formatex(sqlQuery, sizeof(sqlQuery), "INSERT INTO `xpmod_players_data` (`player_authorization`, `player_data`) VALUES ('%s', '%i-%i-%i')", sqlPlayerAuthorization, corePlayerData[id][playerLevel], corePlayerData[id][playerXP], corePlayerData[id][playerCoins]);
na
formatex(sqlQuery, sizeof(sqlQuery), "INSERT INTO `xpmod_players_data` VALUES (DEFAULT, '%s', '%i-%i-%i')", sqlPlayerAuthorization, corePlayerData[id][playerLevel], corePlayerData[id][playerXP], corePlayerData[id][playerCoins]);
teraz lepiej?
  • +
  • -
  • 0

#16 TheDarkDez

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:112
  • GG:
  • Imię:Paweł
  • Lokalizacja:Nisko
Offline

Napisano 26.04.2015 14:11

ahhhhh, ja kumam o co ci biega, tylko dziwi mnie to że ja post wyżej pisze że się AI nie da użyć, a ty piszesz mi coś takiego!

 

P.S.

Umiem modyfikować zapytania do bazy, o to się nie martw. :)


  • +
  • -
  • 0

#17 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 26.04.2015 14:18

czemu niby nie da się użyć?

 


  • +
  • -
  • 0

#18 TheDarkDez

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:112
  • GG:
  • Imię:Paweł
  • Lokalizacja:Nisko
Offline

Napisano 26.04.2015 14:18

Normalnie, nie da się, wywala błąd i koniec!


  • +
  • -
  • 0

#19 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 26.04.2015 14:24

To może innym sposobem (bez auto_increment):

Daj przy tworzeniu tabeli UNIQUE + ON CONFLICT REPLACE dla authorize

https://dev.mysql.co...-duplicate.html


Użytkownik plx211 edytował ten post 26.04.2015 14:26

  • +
  • -
  • 0

#20 TheDarkDez

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:112
  • GG:
  • Imię:Paweł
  • Lokalizacja:Nisko
Offline

Napisano 26.04.2015 17:28

To może innym sposobem (bez auto_increment):

Daj przy tworzeniu tabeli UNIQUE + ON CONFLICT REPLACE dla authorize

https://dev.mysql.co...-duplicate.html

 

Dzięki, ale to rozwiązanie jest mi nie przydatne ponieważ musiałbym zrobić nową tabelę, dodatkowe zapytanie i gdzieś musiałbym zapisać ID.


  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: inny

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych