Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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
- - - - -

Database ORMMySQL Data Wrapper (v1.0.1b)


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

#1 Misiaczek ;c

    /dev/null

  • Moderator

Reputacja: 1662
Godlike

  • Postów:2495
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Halemba
Offline

Napisano 30.06.2014 14:49

Database ORM
Wersja: 1.0.1b
Wydana: 27 Czerwiec 2014

Autor: Backstabnoob
 

Opis



 
Database ORM jest kompleksowym API przystosowany do obsługi rożnych pluginów w których chcemy zaimplementować zapis/odczyt danych z MySQL. API zostało stworzone z myślą o serwerach które są bardzo mocno obciążone przez zapytania do baz oraz o osobach które chciały by dodać zapis MySQL do pluginu lecz nie potrafią, dzięki API możemy w łatwi sposób ograniczyć ilość zapytań/połączeń oraz ogólnie zwiększyć wydajność MySQL. Do używania API zalecana jest średnia znajomość AMXX, ponieważ w przypadku złego zastosowania może to odnieś skutek odwrotny od zamierzonego
 
UWAGA: Należy pamiętać, że jest to wersja beta i prawdopodobnie zawiera kilka błędów. Przetestowałem to jak tylko mogłem sam, ale to jest trochę trudne bez symulacji w czasie rzeczywistym. Tak więc prosił bym osoby które tego używają na swoich serwera o zgłaszanie błędów itp.
 

Możliwości



 
System ten może być przydatny w wielu aspektach, ale są pewne rzeczy w których lepiej go nie wykorzystywać.
 
Możemy go wykorzystać do:

  • Zapis Exp
  • Statystyki Graczy
  • Banki
  • Statystyki Serwera
  • Itp.

Nie zalecam używać go do:

  • Proste rzeczy które mogą być zastąpione przez prosty config bądź też cvar.

Upraszczając: Używaj przy API zdrowego rozsądku, aby nie przesadzić tongue.png
 

Wymagania



 
AMXX 1.8.3 ( do testów została użyta wersja git3921 ), na wersji 1.8.2 i niższej występują błędy.

Serwer Steam :)
 

Instalacja oraz Konfiguracja



 
Instalacja
Pobierz plik database_orm.sma  po czym go skompiluj i wrzuć do folderu plugins.
Pobierz plik orm_config.ini po czym wrzuć go do folderu configs i uzupełnij poprawnie.
 
Konfiguracja


orm_hostname

Adres serwera bazy danych

orm_username

Użytkownik bazy danych

orm_password

Hasło użytkownika bazy danych

orm_database

Nazwa bazy danych

orm_saveperiod

Co ile ma być dokonywany zapis danych ( czas podajemy w sekundach ( domyślnie 1200.0 ( 20 minut ) )
Jeśli mamy serwer gdzie ciągle leci ta sama mapa 24/7/365 zostawiamy wartość tak jak jest bądź zwiększamy, jeśli mamy serwer normalny gdzie mapy zmieniają się co 20-30 min ustawiamy wartość na 0

orm_preparedquery

Opcje zapisu danych

  • a - Kazdy gracz osobno ( przy wyjściu z serwera )
  • b - Wszyscy na raz ( jest cvar orm_saveperiod jest różny od 0 )
  • c - Statyczny ( przy jakiekolwiek zmianie w trakcie gry, działa podobnie do b i ma te same wymagania )
  • d - W trakcie zmian ( zawsze kiedys cos usuniemy przez CSRP_Delete{ Player/Static }ClassItem( ) )
  • e - Koniec Mapy ( Kiedy mapa jest zmieniana wszystko zostaje zapisane )
  • f - Nuke ( gdy wystapi błąd w natywie CSRP_Nuke{ Player/Static }Class( ) )
orm_showsavemsg

Pokazuje wiadomośc o zapisanie danych, aktywne tylko gdy orm_saveperiod jest różny od 0

Podziękowania



 
Hawk552 - Pomysłodawca, pomoc z wieloma rzeczami, wspieranie
Black Rose - Dyskusja, pomysły, ogólna pomoc gdy była potrzebna, wsparcie
 

Lista Zmian


  • 1.0.0
    • Pierwsze Wydanie
    • Data: 25 Czerwiec 2014
  • 1.0.1b

Pobierz



 
Include
Załączony plik  database_orm.inc   11,02 KB  61 Ilość pobrań

SMA
Załączony plik  database_orm.sma   64,19 KB  95 Ilość pobrań
  database_orm.amxx
Konfiguracja
Załączony plik  orm_config.ini   350 bajtów  60 Ilość pobrań

 
 
Źródło: https://forums.allie...ad.php?t=242833


CheQ (01.07.2014 07:19):
nie uważasz że powinno to być w scriptingu gotowych funkcjach?

  • +
  • -
  • 1

#2 Misiaczek ;c

    /dev/null

  • Autor tematu
  • Moderator

Reputacja: 1662
Godlike

  • Postów:2495
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Halemba
Offline

Napisano 30.06.2014 14:52

Przykład użycia


 

Prosty System Bankowy

#include <amxmodx>
#include <database_orm>
#include <cstrike>

new Class: g_hBank

new bool: g_bReady[ 33 ]

enum _: DatabaseColumns {
	Bank_Money,
	Bank_CreationDate 
}

new g_DatabaseColumns[ DatabaseColumns ][ ClassColumnStruct ] = {
	{ "bank_money", Column_Int, 11 },
	{ "bank_created", Column_Int, 11 }
}

public plugin_init( ) {
	new Array: aColumns = ArrayCreate( ClassColumnStruct, DatabaseColumns )
	for( new i; i < DatabaseColumns; i ++ ) {
		ArrayPushArray( aColumns, g_DatabaseColumns[ i ] )
	}
	
	g_hBank = CSRP_CreatePlayerClass( "orm_examplebank", aColumns, -1, "_Callback" )
	
	register_clcmd( "withdraw", "_cWithdraw" )
	register_clcmd( "deposit", "_cDeposit" )
	register_clcmd( "accountinfo", "_cAccountInfo" )    
}

public _cWithdraw( id ) {
	if( !g_bReady[ id ] ) {
		client_print( id, print_console, "Please wait for load." )
		return PLUGIN_HANDLED
	}
	
	new szArgs[ 11 ]
	read_args( szArgs, charsmax( szArgs ) )
	
	remove_quotes( szArgs )
	trim( szArgs )
	
	new iArgs = str_to_num( szArgs )
	
	new Array: aBankAccount = CSRP_FindInPlayerClassUnique( g_hBank, id )
	
	new iBankMoney = ArrayGetCell( aBankAccount, Bank_Money )
	
	if( iArgs > iBankMoney ) {
		client_print( id, print_console, "You don't have that much money in your account!" )
		return PLUGIN_HANDLED
	}
	
	cs_set_user_money( id, cs_get_user_money( id ) + iArgs )
	
	ArraySetCell( aBankAccount, Bank_Money, iBankMoney - iArgs )
	
	client_print( id, print_console, "You have withdrawn $%d. You now have $%d in your account.", iArgs, iBankMoney - iArgs )
	return PLUGIN_HANDLED
}

public _cDeposit( id ) {
	if( !g_bReady[ id ] ){
		client_print( id, print_console, "Please wait for load." )
		return PLUGIN_HANDLED
	}
	
	new szArgs[ 11 ]
	read_args( szArgs, charsmax( szArgs ) )
	
	remove_quotes( szArgs )
	trim( szArgs )
	
	new iArgs = str_to_num( szArgs )
	new iMoney = cs_get_user_money( id )
	
	if( iMoney < iArgs ) {
		client_print( id, print_console, "You don't have that much money!" )
		return PLUGIN_HANDLED
	}
	
	new Array: aBankAccount = CSRP_FindInPlayerClassUnique( g_hBank, id )
	
	new iBankMoney = ArrayGetCell( aBankAccount, Bank_Money )
	
	ArraySetCell( aBankAccount, Bank_Money, iBankMoney + iArgs )
	cs_set_user_money( id, iMoney - iArgs )
	
	client_print( id, print_console, "You have deposited $%d. You now have $%d in your bank account.", iArgs, iBankMoney + iArgs )
	return PLUGIN_HANDLED
}

public _cAccountInfo( id ) {
	if( !g_bReady[ id ] ){
		client_print( id, print_console, "Please wait for load." )
		return PLUGIN_HANDLED
	}
	
	new Array: aBankAccount = CSRP_FindInPlayerClassUnique( g_hBank, id )
	
	client_print( id, print_console, "Your account was created on %d.^nYou have $%d in your account.", ArrayGetCell( aBankAccount, Bank_CreationDate ), ArrayGetCell( aBankAccount, Bank_Money ) )
	
	return PLUGIN_HANDLED
}

public CSRP_OnPlayerLoad( id ) {
	g_bReady[ id ] = true
	
	new Array: aBankAccount = CSRP_FindInPlayerClassUnique( g_hBank, id )
	
	if( aBankAccount == Invalid_Array ) {
		aBankAccount = ArrayCreate( 1, DatabaseColumns )
		
		ArrayPushCell( aBankAccount, 0 )
		
		ArrayPushCell( aBankAccount, get_systime( ) )
		
		CSRP_PushPlayerClassItem( g_hBank, id, aBankAccount )
	}
}

public client_disconnect( id ) {
	g_bReady[ id ] = false
}

public CSRP_OnSave( ) {
	if( g_hBank != Invalid_Class ) {
		CSRP_SavePlayerClass( g_hBank )
	}
}

public _Callback( ) { }  

Wynik

deposit 1300
You have deposited $1300. You now have $1300 in your bank account.
withdraw 1300
You have withdrawn $1300. You now have $0 in your account.
accountinfo
Your account was created on 1403828050.
You have $0 in your account.

Załączone pliki


  • +
  • -
  • 0

#3 ex0

    Wolny strzelec.

  • Power User

Reputacja: 377
Wszechpomocny

  • Postów:1124
  • GG:
  • Imię:Kacper
  • Lokalizacja:Żywiec
Offline

Napisano 01.07.2014 07:56

Wszystko fajnie tylko pytanie o ile w rzeczywistości ograniczamy zużycie serwera a ile w domyśle mielibyśmy to zrobić?
Ograniczamy zapytania z kilkunastu przykładowo małych na jedno ogromne czy to nie będzie aby jeszcze pogarszać?
  • +
  • -
  • 0

TWORZENIE FOR SPOŁECZNOŚCIOWYCH | ZARZĄDZANIE STRONAMI INTERNETOWYMI
WSPARCIE TECHNICZNE SERWERÓW HLDS | MODERNIZACJA, OPTYMALIZACJA, ZABEZPIECZENIA


Zapraszam do mojego profilu ;)


#4 sebul

    Godlike

  • Junior Admin

Reputacja: 2016
Godlike

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

Napisano 01.07.2014 10:33

Ograniczamy zapytania z kilkunastu przykładowo małych na jedno ogromne czy to nie będzie aby jeszcze pogarszać?

Kilka/naście małych zapytań < jedno większe zapytanie

A co do pluginu, to widzę tam fakemetę, ale wykorzystaną chyba tylko do rozłączania graczy, po co?
  • +
  • -
  • 1
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Generator tabeli expa - aż do 103600 poziomu

#5 Misiaczek ;c

    /dev/null

  • Autor tematu
  • Moderator

Reputacja: 1662
Godlike

  • Postów:2495
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Halemba
Offline

Napisano 02.07.2014 14:03

 

Ograniczamy zapytania z kilkunastu przykładowo małych na jedno ogromne czy to nie będzie aby jeszcze pogarszać?

Kilka/naście małych zapytań < jedno większe zapytanie

A co do pluginu, to widzę tam fakemetę, ale wykorzystaną chyba tylko do rozłączania graczy, po co?

 

 

z SMA

// FM_ClientDisconnect isn't called on mapchange, which is extremely helpful 
// as we don't want to save the data twice (once on client_disconnect and once on plugin_end)

sebul (02.07.2014 15:32):
Takie buty ^ ^

  • +
  • -
  • 0

#6 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 625
Wszechmogący

  • Postów:1510
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 03.07.2014 10:32

Mógłbyś wyjaśnić poszczególne funkcje i za co one odpowiadają, a także wytłumaczyć jak stworzyć swój zapis MySQL?


  • +
  • -
  • 0

#7 Misiaczek ;c

    /dev/null

  • Autor tematu
  • Moderator

Reputacja: 1662
Godlike

  • Postów:2495
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Halemba
Offline

Napisano 03.07.2014 11:59

Mógłbyś wyjaśnić poszczególne funkcje i za co one odpowiadają, a także wytłumaczyć jak stworzyć swój zapis MySQL?

Przykład zapisu masz w orm_bank, a opis poszczególnych funkcji masz w pliku inc.


  • +
  • -
  • 0

#8 Misiaczek ;c

    /dev/null

  • Autor tematu
  • Moderator

Reputacja: 1662
Godlike

  • Postów:2495
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Halemba
Offline

Napisano 03.07.2014 20:01

Jak ktoś może niech sprawdzi tą wersje

 

Powinien być zapis w niej na nick o ile dobrze edytowałem :P

 

Załączone pliki


  • +
  • -
  • 0

#9 sebul

    Godlike

  • Junior Admin

Reputacja: 2016
Godlike

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

Napisano 16.07.2014 12:18

Zauważyłem, że brak tu primary key oraz lepszej konfiguracji unique key. Unique key można ustawić tylko na id, albo na id + jakaś kolumna, nie da się ustawić samego unique na jakąś jedną kolumnę inną od id. Ciekawe czy autor tego pluginu będzie go jeszcze rozwijał.
  • +
  • -
  • 0
Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo
Generator tabeli expa - aż do 103600 poziomu

#10 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 146
Zaawansowany

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 26.03.2015 19:07

Dla mnie bezużyteczny, skoro tylko Steam :/


Hiroshima (27.03.2015 00:40):
Archeolog co ma mało do powiedzenia niech lepiej uważa żeby warnów nie zbierać bo na koncie czysto nie ma...

  • +
  • -
  • -1

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul





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

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