←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Pytanie odnoścnie SQL Vault


Najlepsza odpowiedź GT Team 17.04.2013 13:42

Trudno. Temat zamykam i uwazam za rozwiązany. Odp na temat: Lepiej używać SQL ( MySQL ) mając pod kontrolą wszystko niż "gotowe" SQLVault Przejdź do postu
Zablokowany

GT Team - zdjęcie GT Team 14.04.2013

Mam pytanie, czy jednocześnie do jednej bazy mogą być połączone 3 pluginy ? Czy te 3 pluginy mogą być połączone tylko z innymi tabelami ? Chodzi o to, że expmod.amxx laczy sie pierwszy i to pomyslnie natomiast expmod_mission i expmod_achievements nie mogą się połączyć choć są takie same dane oprócz tabeli
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 15.04.2013

Jeśli to jest baza MySQL, to może się do niej podłączyć na raz nawet i 200 pluginów * 200 serwerów, byleby serwer na którym ta baza stoi to wytrzymał :) Jakby MySQL nie miał takiej funkcjonalności to nie byłoby sensu tworzyć go jako serwera.

 

Jednak co możesz popełniać źle: otóż AMX może limitować ilość maksymalnych połączeń na raz, ale przecież nie potrzebujesz w pluginie non stop połączenia mieć otwartego. Nie potrzebujesz nawet go otwierać, gdy używasz ThreadQuery (sam sobie otworzy i zamknie, gdy potrzebuje). I proszę, nie myl tu "Tuple" z połączeniem. Tuple to tylko kontener przechowujący dane do połączenia!

 

Pokaż najlepiej kod, którym łączysz się z bazą.

 

Co do Twoich pluginów: jeśli korzystasz w nich z tej samej bazy, może rozważ przekazywanie tegoż tuple poprzez natyw lub forward z jednego pluginu do reszty. Wtedy zmiana danych będzie następowała tylko w jednym miejscu (lub ich odczyt, jeśli odczytujesz je z pliku konfiguracyjnego czy coś...).

Odpowiedz

GT Team - zdjęcie GT Team 15.04.2013

Po kolei:

Pierw odczytuje expmod.amxx : http://wklej.to/iYtKT

I Tutaj nie ma żadnych problemów...

Potem expmod_achievements.amxx : http://wklej.to/gNNxb

Tutaj wywala błąd, że nie można się połączyć.. ( to set_fail_state w plugin_init )

Następnie expmod_mission.amxx : http://wklej.to/ebqI6

Tutaj to samo, set_fail_state.

expmod.cfg
;Żeby komentować, wystarczy dać na POCZĄTKU LINII  ';' albo "//"
;===============================================;
			 DANE MYSQL
;===============================================
;ogólne
;Nazwa Hosta (np. db4free.net)
exp_sql_host "db4free.net"

;Nazwa uzytkownika (np. striker)
exp_sql_user "striker"

;Haslo (np. haslo123#$)
exp_sql_pass "Bla Blaadada"
;===============================================
; do silnika moda
;Baza Danych (np. expmodbystriker)
exp_sql_db "expmodbystriker"

;Tabela (np. expmod)
exp_sql_tabel "expmod"

;===============================================
; do misji
;Baza Danych (np. expmodbystriker)
exp_mission_sql_db "expmodbystriker"

;Tabela (np. expmod_mission)
exp_mission_sql_tabel "expmod_mission"

;===============================================
; do osiągnięć

;Baza Danych (np. expmodbystriker)
exp_ach_sql_db "expmodbystriker"

;Tabela (np. expmod_achievements)
exp_ach_sql_tabel "expmod_achievements"

Używam SQLVault
Użytkownik PaTrIcKx edytował ten post 15.04.2013 15:21
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 16.04.2013

Aaaa widzisz, sqlvault... to wiele wyjaśnia. Widać sama biblioteka sqlvaulta ma jakieś limity w tej kwestii. Zrób tak: w 1 pluginie utwórz sqlfile, a w następnych zamiast tworzenia i łączenia się, przekazuj poprzez natyw bądź forward ten sqlfile. W ten sposób będziesz mógł użyć go w kilku pluginach :) Najprościej będzie to zrobić przez forward (wywoływany zaraz po połączeniu).

Odpowiedz

GT Team - zdjęcie GT Team 16.04.2013

A jeszcze jedno pytanie. Bo do każdego plugina expmod misje i osiagniecia potrzebna jest inna tabela. Jak to zrobić ?

Edit:

Mogę też w kluczu w misji dać -mission po nicku ( klucz to nick gracza )
Lecz wolałbym tego uniknąć
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 17.04.2013

Problem chyba nawet nie leży w samym SQLVaulcie, ale w Twoim kodzie :) W 1szym pluginie wykonujesz load_sql_data, w 2 i 3cim już brakuje wykonania tej funkcji przed otwarciem SQLVaulta.

 

Nie myślałeś nad zastosowaniem zwykłego SQLa? SQLVault jest owszem przydatny, ale jeśli się zna podstawy SQL, można to lepiej dużo zrobić na SQLu.

Odpowiedz

GT Team - zdjęcie GT Team 17.04.2013

Właśnie w tym problem, że nie znam. Dla mnie to czarna magiaa ;P achievementy
public load_sql_data()
{
	new data[128], a[33], b[33], len
	for(new i; i < read_file(SCIEZKA_PLIKU, i, data, 127, len); i++)
	{
		parse(data, a, 32, b,32)
		if(equali(a, "exp_sql_host"))
		{
			remove_quotes(b)
			copy(szHost, 32, b)
		}
		if(equali(a, "exp_sql_user"))
		{
			remove_quotes(b)
			copy(szUser, 32, b)
		}
		if(equali(a, "exp_sql_pass"))
		{
			remove_quotes(b)
			copy(szPass, 32, b)
		}
		if(equali(a, "exp_ach_sql_db"))
		{
			remove_quotes(b)
			copy(szDb, 32, b)
		}
		if(equali(a, "exp_ach_ach_sql_tabel"))
		{
			remove_quotes(b)
			copy(szVaultName, 32, b)
		}
	}
}
misje
public load_sql_data()
{
	new data[128], a[33], b[33], len
	for(new i; i < read_file(SCIEZKA_PLIKU, i, data, 127, len); i++)
	{
		parse(data, a, 32, b,32)
		if(equali(a, "exp_sql_host"))
		{
			remove_quotes(b)
			copy(szHost, 32, b)
		}
		if(equali(a, "exp_sql_user"))
		{
			remove_quotes(b)
			copy(szUser, 32, b)
		}
		if(equali(a, "exp_sql_pass"))
		{
			remove_quotes(b)
			copy(szPass, 32, b)
		}
		if(equali(a, "exp_missions_sql_db"))
		{
			remove_quotes(b)
			copy(szDb, 32, b)
		}
		if(equali(a, "exp_missions_sql_tabel"))
		{
			remove_quotes(b)
			copy(szVaultName, 32, b)
		}
	}
}
Odpowiedz

  • +
  • -
Misiaczek ;c - zdjęcie Misiaczek ;c 17.04.2013

;===============================================
; do silnika moda
;Baza Danych (np. expmodbystriker)
exp_sql_db "expmodbystriker"

Mamy to więc po co nam to:
 

;===============================================
; do misji
;Baza Danych (np. expmodbystriker)
exp_mission_sql_db "expmodbystriker"


;===============================================
; do osiągnięć

;Baza Danych (np. expmodbystriker)
exp_ach_sql_db "expmodbystriker"


skoro uzywasz tej samej tabeli w wszystkich plikach

 

dodatkowo polecam ci zamiast używać SQLVault przejśc na zwykły sql, jest o wiele prostrszy ;] dodatkowo zrób sobie w głownym silniku uchwyt do sql,  i potem uchwytu uzywaj, zobacz sobie jak to w amxbansie jest zrobione :)

Odpowiedz

GT Team - zdjęcie GT Team 17.04.2013

Eh.. Dla mnie sql jest trudny. Nie ma ani żadnego tutka ( jest tylko mysql, to chyba nie to ? ) więc nie mam jak go ogarnąć. patrzałem amxbans lecz wszystko jest w plikach .inl porozrzucane i pożal się Boże. Idzie się pogubić. Jednak po przejrzeniu tego i tak nic nie zrozumiałem.
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 17.04.2013

Eh.. Dla mnie sql jest trudny. Nie ma ani żadnego tutka ( jest tylko mysql, to chyba nie to ? ) więc nie mam jak go ogarnąć. patrzałem amxbans lecz wszystko jest w plikach .inl porozrzucane i pożal się Boże. Idzie się pogubić. Jednak po przejrzeniu tego i tak nic nie zrozumiałem.

Akurat tutaj nie ma różnicy czy to mysql, czy sql, czyli możesz już czytać ten tutek o mysql i wykorzystać to do swoich pluginów.
Odpowiedz

Najlepsza odpowiedź GT Team - zdjęcie GT Team 17.04.2013

Trudno. Temat zamykam i uwazam za rozwiązany. Odp na temat: Lepiej używać SQL ( MySQL ) mając pod kontrolą wszystko niż "gotowe" SQLVault
Odpowiedz
Zablokowany