· 10 years ago · May 05, 2016, 08:06 AM
1/* Plugin generated by AMXX-Studio */
2
3#include <amxmodx>
4#include <amxmisc>
5#include <sqlx>
6
7#define PLUGIN "New Plug-In"
8#define VERSION "1.0"
9#define AUTHOR "author"
10
11/*------------------------------------------------------------------------------------------------*/
12new const SQL_TABLE_NAME[ ] = "AvH_NAME";
13
14new Handle:SqlConnection;
15new Handle:g_SqlTuple;
16new g_Error[ 512 ];
17new g_pcvarHost;
18new g_pcvaruUser;
19new g_pcvarPass;
20new g_pcvarDB;
21new g_iCvar_SaveXP;
22new g_authed[ 33 ];
23new g_sql_ready = false;
24new bool:g_loaded[ 33 ];
25new g_iXP[ 33 ];
26new g_iArtifact[ 33 ];
27new g_iLevel[ 33 ];
28new g_iMaxPlayers;
29
30/*------------------------------------------------------------------------------------------------*/
31
32
33public plugin_init() {
34 register_plugin(PLUGIN, VERSION, AUTHOR)
35
36 g_iMaxPlayers = get_maxplayers();
37
38 // SQL
39 g_pcvarHost = register_cvar( "avh_sql_host", "db.tni.ro" );
40 g_pcvaruUser = register_cvar( "avh_sql_user", "vuser359" );
41 g_pcvarPass = register_cvar( "avh_sql_pass", "sjSE1239SLA3Sj138S" );
42 g_pcvarDB = register_cvar( "avh_sql_db", "vuser359" );
43
44 set_task( 0.1,"SQL_Init" );
45 // Add your code here...
46}
47
48public fw_ClientDisconnect( id ) {
49
50 DB_SaveData( id );
51 g_authed[ id ] = false;
52 g_loaded[ id ] = false;
53}
54
55
56public client_authorized( id ) {
57
58 g_authed[ id ] = true;
59
60 DB_LoadData( id );
61}
62
63
64public DB_SaveData(id) {
65
66 if( !g_loaded[ id ] )
67 return;
68
69 new szQuotedName[ 64 ], szName[ 32 ];
70 get_user_name( id, szName, sizeof( szName ) - 1 );
71 SQL_QuoteString( SqlConnection, szQuotedName, 63, szName );
72
73 new szTemp[ 512 ];
74
75 format( szTemp, charsmax( szTemp ), "UPDATE `%s` SET `XP` = '%d', `LEVEL` = '%d', `ARTIFACTS` = '%d' WHERE `%s`.`name` = '%s';", SQL_TABLE_NAME, g_iXP[ id ], g_iLevel[ id ], g_iArtifact[ id ], SQL_TABLE_NAME, szQuotedName );
76
77
78 SQL_ThreadQuery( g_SqlTuple, "IgnoreHandle", szTemp );
79}
80
81/*------------------------------------------------------------------------------------------------*/
82public IgnoreHandle( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize ) {
83
84 SQL_FreeHandle( Query )
85 return PLUGIN_HANDLED;
86}
87
88
89/*------------------------------------------------------------------------------------------------*/
90
91public DB_LoadData(id) {
92
93 if( !g_sql_ready )
94 return;
95
96 if( g_SqlTuple == Empty_Handle )
97 set_fail_state( g_Error );
98
99 new Data[ 1 ];
100 Data[ 0 ] = id;
101
102 new szName[ 32 ];
103 get_user_name(id, szName, sizeof( szName ) - 1 );
104
105 new szTemp[ 512 ];
106 formatex( szTemp, charsmax( szTemp ), "SELECT * FROM `%s` WHERE (`%s`.`name` = '%s')", SQL_TABLE_NAME, SQL_TABLE_NAME, szName );
107
108 SQL_ThreadQuery( g_SqlTuple, "RegisterClient", szTemp, Data, 1 );
109}
110
111public RegisterClient( FailState, Handle:Query, Error[ ], Errcode, Data[ ], DataSize ) {
112
113 if( FailState == TQUERY_CONNECT_FAILED )
114 {
115 log_amx( "[Error] Could not connect to SQL database: [%d] %s", Errcode, Error );
116 return PLUGIN_HANDLED;
117 }
118
119 else if( FailState == TQUERY_QUERY_FAILED )
120 {
121 log_amx( "[Error] Query failed: [%d] %s", Errcode, Error );
122 return PLUGIN_HANDLED;
123 }
124
125 static id; id = Data[ 0 ];
126
127
128 if( SQL_NumResults( Query ) < 1 )
129 {
130
131 new szName[ 32 ];
132 get_user_name(id, szName, sizeof( szName ) - 1 );
133
134 new szIp[ 40 ];
135 get_user_ip( id, szIp, sizeof ( szIp ) -1, 1 );
136
137 new authid[ 32 ];
138 get_user_authid(id, authid, sizeof( authid ) -1 );
139
140
141 new szTemp[ 512 ];
142
143 if( g_SqlTuple == Empty_Handle )
144 set_fail_state( g_Error );
145
146 format( szTemp, charsmax( szTemp ), "INSERT INTO `%s` (`name`, `XP`, `LEVEL`, `ARTIFACTS`) VALUES ('%s', '0', '0', '0');", SQL_TABLE_NAME, szName );
147
148 SQL_ThreadQuery( g_SqlTuple, "IgnoreHandle", szTemp );
149
150 }
151 else
152 {
153 g_iXP[ id ] = SQL_ReadResult( Query, 1 );
154 g_iLevel[ id ] = SQL_ReadResult( Query, 2 );
155 g_iArtifact[ id ] = SQL_ReadResult( Query, 3 );
156 }
157
158 g_loaded[ id ] = true;
159
160 return PLUGIN_HANDLED;
161}
162
163/*------------------------------------------------------------------------------------------------*/
164public SQL_Init( ) {
165
166 if( get_pcvar_num( g_iCvar_SaveXP ) != 0 ) {
167
168 new szHost[ 32 ];
169 new szUser[ 32 ];
170 new szPass[ 32 ];
171 new szDB[ 32 ];
172
173 get_pcvar_string( g_pcvarHost, szHost, charsmax( szHost ) );
174 get_pcvar_string( g_pcvaruUser, szUser, charsmax( szUser ) );
175 get_pcvar_string( g_pcvarPass, szPass, charsmax( szPass ) );
176 get_pcvar_string( g_pcvarDB, szDB, charsmax( szDB ) );
177
178 g_SqlTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
179
180 new ErrorCode;
181 SqlConnection = SQL_Connect( g_SqlTuple, ErrorCode, g_Error, charsmax( g_Error ) );
182
183 if( SqlConnection == Empty_Handle )
184 set_fail_state( g_Error );
185
186 new Handle:Queries;
187
188 Queries = SQL_PrepareQuery( SqlConnection, "CREATE TABLE IF NOT EXISTS %s (Name VARCHAR(64) NOT NULL,`XP` INT(10), `LEVEL` INT(20), `ARTIFACTS` INT(21) )", SQL_TABLE_NAME );
189
190 if( !SQL_Execute( Queries ) )
191 {
192 SQL_QueryError( Queries, g_Error, charsmax( g_Error ) );
193 set_fail_state( g_Error );
194 }
195
196 SQL_FreeHandle( Queries );
197
198 g_sql_ready = true;
199 for( new i = 1; i <= g_iMaxPlayers; i++ ) {
200
201 if( g_authed[ i ] ) {
202
203 DB_LoadData( i );
204 }
205 }
206 }
207}
208/*------------------------------------------------------------------------------------------------*/
209
210public plugin_end() {
211
212 if( SqlConnection != Empty_Handle ) {
213
214 SQL_FreeHandle( SqlConnection );
215 }
216}