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

Prośba o przerobienie pluginuPrzerobienie pluginu - dodatnie jeszcze jednej tabelki

dodanie tabeli dodanie w sql przerobienie pluginu

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

#1 EbuBebu

    Początkujący

  • Użytkownik

Reputacja: -1
Nowy

  • Postów:14
  • Imię:Sebastian
  • Lokalizacja:Opole
Offline

Napisano 21.03.2020 17:06

Witam, posiadam taki o to plugin: 

#include < amxmodx >
#include < sqlx >

new sqlConfig[ ][ ] = {
	"127.0.0.1",
	"root",
	"password",
	"database"
}

enum playerData {
	SteamID[ 33 ],
	IP[ 16 ],
	Nick[ 64 ],
	Time
};

new Handle: gSqlTuple;

new gPlayer[ 33 ][ playerData ];

public SqlInit( ) {
	gSqlTuple = SQL_MakeDbTuple( sqlConfig[ 0 ], sqlConfig[ 1 ], sqlConfig[ 2 ], sqlConfig[ 3 ] );
	
	if( gSqlTuple == Empty_Handle )
		set_fail_state( "Nie mozna utworzyc uchwytu do polaczenia" );
	
	new iErr, szError[ 32 ];
	new Handle:link = SQL_Connect( gSqlTuple, iErr, szError, 31 );
	
	if( link == Empty_Handle ) {
		log_amx( "Error (%d): %s", iErr, szError );
		set_fail_state( "Brak polaczenia z baza danych" );
	}
	
	new Handle: query;
	query = SQL_PrepareQuery( link, "CREATE TABLE IF NOT EXISTS `players_time` (\
		`id` int(11) NOT NULL AUTO_INCREMENT,\
		`steamid` varchar(33) NOT NULL,\
		`nick` varchar(64) NOT NULL,\
		`ip` varchar(16) NOT NULL,\
		`first` int(16) NOT NULL,\
		`last` int(16) NOT NULL,\
		`time` int(16) NOT NULL,\
		`type` int(1) NOT NULL,\
		PRIMARY KEY (`id`),\
		UNIQUE KEY `authid` (`nick`)\
	)" );
	
	SQL_Execute( query );
	SQL_FreeHandle( query );
	SQL_FreeHandle( link );
}

public Query( failstate, Handle:query, error[ ] ) {
	if( failstate != TQUERY_SUCCESS ) {
		log_amx( "SQL query error: %s", error );
		return;
	}
}

public plugin_init() {
	register_plugin( "Czas Online", "2.1.0", "byCZEK" );
	
	set_task( 0.1, "SqlInit" );
}

public client_connect( id ) {
	gPlayer[ id ][ Time ] = 0;
	
	get_user_authid( id, gPlayer[ id ][ SteamID ], 32 );
	get_user_ip( id, gPlayer[ id ][ IP ], 15, 1 );
	get_user_name( id, gPlayer[ id ][ Nick ], 63 );
	
	SQL_PrepareString( gPlayer[ id ][ Nick ], gPlayer[ id ][ Nick ], 63 );
}

public client_disconnect( id ) {
	if(is_user_hltv(id) || is_user_bot(id))
		return PLUGIN_HANDLED;
		
	gPlayer[ id ][ Time ] = get_user_time( id, 1 );
	
	saveTime( id );
	
	gPlayer[ id ][ Time ] = 0;
	
	return PLUGIN_CONTINUE;
}

stock SQL_PrepareString( const szQuery[], szOutPut[], size ) {
	copy( szOutPut, size, szQuery );
	replace_all( szOutPut, size, "'", "\'" );
	replace_all( szOutPut, size, "`", "\`" );    
	replace_all( szOutPut, size, "\\", "\\\\" );
	replace_all( szOutPut, size, "^0", "\0");
	replace_all( szOutPut, size, "^n", "\n");
	replace_all( szOutPut, size, "^r", "\r");
	replace_all( szOutPut, size, "^x1a", "\Z");	
}

stock saveTime( id ) {
	new     query[ 1024 ],
	flags = get_user_flags( id );
	
	formatex( query, charsmax( query ), "INSERT IGNORE INTO `players_time` ( `steamid`, `nick`, `ip`, `first`, `last`, `time`, `type` ) VALUES ( '%s', '%s', '%s', UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP(NOW()), %d, %d ) ON DUPLICATE KEY UPDATE `time` = `time` + %d, `last` = UNIX_TIMESTAMP(NOW())",
	gPlayer[ id ][ SteamID ], gPlayer[ id ][ Nick ], gPlayer[ id ][ IP ], gPlayer[ id ][ Time ], ( ( flags > 0 && !( flags & ADMIN_USER ) ) ? 1 : 0 ), gPlayer[ id ][ Time ]);
	
	if( gSqlTuple )
		SQL_ThreadQuery (gSqlTuple, "Query", query );
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/

Czy jest możliwość dodania do niego jeszcze jednej kolumny? Mianowicie " Tygodniowy czas online " ? Chciałbym aby ta nowa kolumna resetowała się co tydzień o np. północy. Czy takie coś jest w ogóle możliwe do zrobienia? 

 

Pozdrawiam serdecznie i z góry dziękuję wszystkim za pomoc! :D  


  • +
  • -
  • 0

#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 21.03.2020 21:49

Dałoby sie i nie jest to takie trudne.

Wymagałoby tylko dodania eventu do bazy danych lub zamieszczenia w pluginie resetowania tego.

Moge Ci to zrobić, ale aktualnie nie mam zbyt wiele czasu. Pingnij mnie jutro wieczorem


  • +
  • -
  • 1

#3 EbuBebu

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: -1
Nowy

  • Postów:14
  • Imię:Sebastian
  • Lokalizacja:Opole
Offline

Napisano 22.03.2020 11:34

Dałoby sie i nie jest to takie trudne.

Wymagałoby tylko dodania eventu do bazy danych lub zamieszczenia w pluginie resetowania tego.

Moge Ci to zrobić, ale aktualnie nie mam zbyt wiele czasu. Pingnij mnie jutro wieczorem

Nie do konca rozumiem co to znaczy "pingnij mnie" ale dziękuję bardzo za chęć pomocy. Jesteś mega :D 


  • +
  • -
  • 0

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 23.03.2020 10:17

Łap i testuj. nie daje głowy ze to zadziala, ale powinno.

Wymagany jest reset bazy - trzeba usunac tabele players_time - plugin stworzy nową strukture.

Zobacz czy plugin będzie resetował dobrze. 

new const RESET_TIME = 60 * 60 * 24 * 7;

tu ustawiasz co ile resetowac (w sekundach)

jest ustawione na tydzien, ale mozesz sb zmienic na 20minut na przyklad zeby przetestowac.

Jak co to daj znac i sie poprawi

Załączone pliki


Użytkownik TibacK edytował ten post 23.03.2020 10:17

  • +
  • -
  • 1

#5 EbuBebu

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: -1
Nowy

  • Postów:14
  • Imię:Sebastian
  • Lokalizacja:Opole
Offline

Napisano 23.03.2020 19:49

Łap i testuj. nie daje głowy ze to zadziala, ale powinno.

Wymagany jest reset bazy - trzeba usunac tabele players_time - plugin stworzy nową strukture.

Zobacz czy plugin będzie resetował dobrze. 

new const RESET_TIME = 60 * 60 * 24 * 7;

tu ustawiasz co ile resetowac (w sekundach)

jest ustawione na tydzien, ale mozesz sb zmienic na 20minut na przyklad zeby przetestowac.

Jak co to daj znac i sie poprawi

 

Na wstępie dzięki za pomoc mordo!   :ok:

 

Niestety coś jest chyba nie tak, ustawiłem time na: new const RESET_TIME = 60 * 5 * 1 * 1;

Myślałem, że będzie resetować co 5 minut jednak resetuje tylko podczas zmiany mapy. Kiedy mapę zmienię np. po minucie od poprzedniej również resetuje czas. 


  • +
  • -
  • 0

#6 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 23.03.2020 21:31

Jasne, że nie działa...

Wszystko zrobiłem poza aktualizowaniem czasu ostatniego resetu, ale dobrze wiedzieć, że to co jest to działa.

Wrzucam poprawke. Przed odpaleniem serwa usuń sobie plik resetTime.txt z folderu data i wtedy odpal serwer i powinien sie stworzyc

Reszta bez zmian.


Rivit (23.03.2020 21:59):
Ale to jest tak zrobione, że jak juz będzie usuwać to przy zmianie mapy. tak prościej ;)

Załączone pliki


  • +
  • -
  • 2

#7 EbuBebu

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: -1
Nowy

  • Postów:14
  • Imię:Sebastian
  • Lokalizacja:Opole
Offline

Napisano 23.03.2020 22:14

Jasne, że nie działa...

Wszystko zrobiłem poza aktualizowaniem czasu ostatniego resetu, ale dobrze wiedzieć, że to co jest to działa.

Wrzucam poprawke. Przed odpaleniem serwa usuń sobie plik resetTime.txt z folderu data i wtedy odpal serwer i powinien sie stworzyc

Reszta bez zmian.

Działa :o

Ale sztos, dzięki wielkie! Możesz mi tylko wyjaśnić jeszcze w jaki sposób dokładniej to działa?

 

Jak ustawię na 5 minut to resetuje za każdym razem kiedy jest np. 22:06 , 22:11, 22:16 itd. więc żeby resetowało mi co tydzień muszę plugin uruchomić właśnie o północy dnia którego chce żeby były resety.  Dobrze rozumiem? :D


  • +
  • -
  • 0

#8 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 23.03.2020 22:34


więc żeby resetowało mi co tydzień muszę plugin uruchomić właśnie o północy dnia którego chce żeby były resety

 

Wiesz co wydaje mi sie po prostu ze wystarczy edytowac pliczek resetTime.txt i w nim ustawić czas startowy (w przód), a potem z automatu się co tydzien bedzie resetowac.

Plugin nie bedzie resetował, aż do momentu gdy czas z resetTime.txt + 'czas tygodnia' < obecny czas (jak sie zastanowisz nad tym to to ma sens ;) )

W jakim formacie jest zapisany czas w resetTime.txt poczytasz tu:

https://pl.wikipedia...i/Czas_uniksowy

https://www.unixtime...p.com/index.php

 

Ale uwaga - twój serwer może miec ustawioną inną strefę czasową lub może być godzine w przód lub tył. Dlatego pasowałoby napisać prosty plugin, któremu podasz date w formacie czytelnym dla człowieka, a on to zamieni na unix time i będzie cacy


  • +
  • -
  • 1

#9 EbuBebu

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: -1
Nowy

  • Postów:14
  • Imię:Sebastian
  • Lokalizacja:Opole
Offline

Napisano 26.03.2020 14:11

 

Ale uwaga - twój serwer może miec ustawioną inną strefę czasową lub może być godzine w przód lub tył. Dlatego pasowałoby napisać prosty plugin, któremu podasz date w formacie czytelnym dla człowieka, a on to zamieni na unix time i będzie cacy

 

 

A byłbyś w stanie mi coś takiego szybko na kolanie naskrobać? :D 


  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: dodanie tabeli, dodanie w sql, przerobienie pluginu

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

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