· 8 years ago · Jul 12, 2018, 06:58 AM
1function onScriptLoad()
2{
3try{
4db <- ConnectSQL( "DataBase.db" );
5QuerySQL( db, "CREATE TABLE IF NOT EXISTS Accounts ( Name TEXT, Pass TEXT, Logged TEXT, Level NUMERIC, Cash NUMERIC, BankCash NUMERIC, IP TEXT, Registered TEXT )" );
6print( "Loaded Account System script" );
7}
8catch(e) print( "Error: " + e );
9}
10
11function onPlayerJoin( player )
12{
13 try{
14 if ( player.IP != GetPlayerIP( player ) ) SetLogged( player, "false" );
15 else if ( player.IP == GetPlayerIP( player ) ) SetLogged( player, "true" );
16 if ( GetLevel( player ) ) NewTimer( "AccInfo", 1000, 1, player );
17 else
18 {
19 PrivMessage( "You're not Registered. Register your Nick to protect it.", player );
20 PrivMessage( "Type /c register <password> to Register", player );
21 }
22 }
23 catch(e) print( "OnPLayerJoin Error: " + e );
24
25}
26
27function onPlayerSpawn( player )
28{
29 try{
30 if ( ( GetLevel( player ) ) && ( GetLogged( player ) == "true" ) )
31 {
32 Message( ">> " + player + " has Spawned." );
33 player.Cash = GetCash( player );
34 }
35 if ( ( GetLevel( player ) ) && ( GetLogged( player ) == "false" ) )
36 {
37 player.Health = 0;
38 PrivMessage( "You aren't logged in. Do /c login <password> first", player );
39 }
40 }
41 catch(e) print( "OnPLayerSpawn Error: " + e );
42}
43
44
45//------- Side Functions --------
46
47function SetLogged( player, status )
48{
49 QuerySQL( db, format( "UPDATE Accounts SET Logged='%s' WHERE Name='" + player.Name + "'", status ) );
50}
51
52function SetIPLogged( player, sameip )
53{
54 QuerySQL( db, format( "UPDATE Accounts SET IP='%s' WHERE Name='" + player.Name + "'", sameip ) );
55}
56
57function GetPlayerIP( player )
58{
59 local IP = GetSQLColumnData( QuerySQL( db, "SELECT IP FROM Accounts WHERE Name='" + player.Name + "'" ), 0 );
60 if ( IP ) return IP;
61 else return 0;
62}
63
64function GetLevel( player )
65{
66 local lvl = GetSQLColumnData( QuerySQL( db, "SELECT Level FROM Accounts WHERE Name='" + player.Name + "'" ), 0 );
67 if ( lvl ) return lvl;
68 else return 0;
69}
70
71function GetCash( player )
72{
73 local cash = GetSQLColumnData( QuerySQL( db, "SELECT Cash FROM Accounts WHERE Name='" + player.Name + "'" ), 0 );
74 if ( cash ) return cash;
75 else return 0;
76}
77
78function GetBankCash( player )
79{
80 local cash = GetSQLColumnData( QuerySQL( db, "SELECT BankCash FROM Accounts WHERE Name='" + player.Name + "'" ), 0 );
81 if ( cash ) return cash;
82 else return 0;
83}
84
85function GetPass( player )
86{
87 local pass = GetSQLColumnData( QuerySQL( db, "SELECT Pass FROM Accounts WHERE Name='" + player.Name + "'" ), 0 );
88 if ( pass ) return pass;
89 else return 0;
90}
91
92function GetLogged( player )
93{
94 local log = GetSQLColumnData( QuerySQL( db, "SELECT Logged FROM Accounts WHERE Name='" + player.Name + "'" ), 0 );
95 if ( log ) return log;
96 else return 0;
97}
98
99function AccInfo( player )
100{
101 try{
102 if ( GetLevel( player ) )
103 {
104 if ( GetLogged( player ) == "true" )
105 {
106 PrivMessage( "You've Auto-Logged in on the server!", player );
107 PrivMessage( "Name:[ " + player.Name + " ] Level:[ " + GetLevel( player ) + " ]", player );
108 Announce( "~h~Auto Logged in!", player, 0 );
109 }
110 else if ( GetLogged( player ) == "false" )
111 {
112 PrivMessage( "You're not Logged in. Please log in before spawning", player );
113 PrivMessage( "Use /c login <your password> to login in your account", player );
114 }
115 }
116 }
117 catch(e) print( "AccInfo Error: " + e );
118}
119
120function rotateRight(val, sbits)
121{
122 return (val >> sbits) | (val << (0x20 - sbits));
123}
124function e( string )
125{
126 local hp = [
127 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
128 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
129 ];
130
131 local k = [
132 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
133 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
134 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
135 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
136 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
137 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
138 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
139 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
140 ];
141
142 local
143 w = array( 64 ),
144 i = 0,
145 s = 0,
146 len = string.len( ),
147 word_array = array( 0 );
148
149 for( i = 0; i < len - 3; i += 4 )
150 {
151 word_array.push( string[i] << 0x18 | string[i + 1] << 0x10 | string[i + 2] << 0x08 | string[i + 3] );
152 }
153
154 switch( len % 4 )
155 {
156 case 0:
157 i = 0x80000000;
158 break;
159 case 1:
160 i = string[len - 1] << 0x18 | 0x80000000;
161 break;
162 case 2:
163 i = string[len - 2] << 0x18 | string[len - 1] << 0x10 | 0x08000;
164 break;
165 case 3:
166 i = string[len - 3] << 0x18 | string[len - 2] << 0x10 | string[len - 1] << 0x08 | 0x80;
167 break;
168 }
169 word_array.push( i );
170
171 while( ( word_array.len() % 0x10 ) != 0x0E )
172 word_array.push( 0 );
173
174 word_array.push( len >> 0x10 );
175 word_array.push( ( len << 0x03 ) & 0xFFFFFFFF );
176
177 local s0, s1;
178 for( s = 0; s < word_array.len(); s += 0x10 )
179 {
180 for( i = 0x00; i < 0x10; i++ )
181 w[i] = word_array[s + i];
182
183 for( i = 0x10; i < 0x40; i++ )
184 {
185 s0 = rotateRight( w[i - 15], 7 ) ^ rotateRight( w[i - 15], 18 ) ^ ( w[i - 15] >> 3 );
186 s1 = rotateRight( w[i - 2], 17 ) ^ rotateRight( w[i - 2], 19 ) ^ ( w[i - 2] >> 10 );
187 w[i] = w[i - 0x10] + s0 + w[i - 7] + s1;
188 }
189
190 local a = hp[0],
191 b = hp[1],
192 c = hp[2],
193 d = hp[3],
194 e = hp[4],
195 f = hp[5],
196 g = hp[6],
197 h = hp[7];
198
199 for( i = 0x00; i < 0x40; i++ )
200 {
201 s0 = ( rotateRight( a, 2 ) ^ rotateRight( a, 13 ) ^ rotateRight( a, 22 ) );
202 local maj = ( ( a & b ) ^ ( a & c ) ^ ( b & c ) );
203 local t2 = ( s0 + maj );
204 s1 = ( rotateRight( e, 6 ) ^ rotateRight( e, 11) ^ rotateRight( e, 25 ) );
205 local ch = ( ( e & f ) ^ ( ( ~e ) & g ) );
206 local t1 = ( h + s1 + ch + k[i] + w[i] );
207
208 h = g;
209 g = f;
210 f = e;
211 e = d + t1;
212 d = c;
213 c = b;
214 b = a;
215 a = t1 + t2;
216 }
217
218 hp[0] += a;
219 hp[1] += b;
220 hp[2] += c;
221 hp[3] += d;
222 hp[4] += e;
223 hp[5] += f;
224 hp[6] += g;
225 hp[7] += h;
226 }
227
228 local hash = format(
229 "%08x%08x%08x%08x%08x%08x%08x%08x",
230 hp[0],
231 hp[1],
232 hp[2],
233 hp[3],
234 hp[4],
235 hp[5],
236 hp[6],
237 hp[7]
238 );
239
240 return hash;
241}
242
243function Register( player, pass, pass2 )
244{
245 try{
246 QuerySQL( db, "REPLACE INTO Accounts ( Name, Pass, Logged, Level, Cash, BankCash, IP, Registered ) VALUES ( '" + player.Name + "', '" + pass + "', 'true', 1, 2000, 0, '" + player.IP + "', '" + GetFullTime() + "' )" );
247 player.Cash = 2000;
248
249 PrivMessage( "Registered! Password:[ " + pass2 + " ]", player );
250 PrivMessage( "Nick: " + player.Name + ", Level: " + GetLevel( player ) + "", player );
251 Announce( "~y~REGISTERED!", player, 0 );
252 ClientMessageToAll( ">> " + player.Name + " is a register Nick-Name now!", 984, 252, 777 );
253 }
254 catch(e) print( "Register Function Error: " + e );
255}
256
257function Login( player, pass )
258{
259 try{
260 SetLogged( player, "true" );
261 SetIPLogged( player, player.IP );
262 player.Cash = GetCash( player );
263 PrivMessage( "You've successfully logged in!", player );
264 PrivMessage( "Nick: " + player.Name + ", Level: " + GetLevel( player ) + "", player );
265 Announce( "~y~Logged! :)", player, 0 );
266 }
267 catch(e) print( "Login Function Error: " + e );
268}
269
270//-------- Commands -----------
271
272function onPlayerCommand( player, command, text )
273{
274
275 local cmd = command.tolower();
276
277 if ( cmd == "login" )
278 {
279 try{
280 if ( !GetLevel( player ) ) PrivMessage( "[Error] - You're not Registered", player );
281 else if ( GetLogged( player ) == "true" ) PrivMessage( "[Error] - You're already logged in", player );
282 else if ( !text ) PrivMessage( "[Syntax] - /c " + cmd + " <password> ", player );
283 else
284 {
285 if ( e( text ) != GetPass( player ) ) PrivMessage( "[Error] - Wrong Password", player );
286 else Login( player, e(text) );
287 }
288 }
289 catch(e) print( "Login cmd error: " + e );
290 }
291 else if ( cmd == "register" )
292 {
293 try{
294 if ( GetLevel( player ) ) PrivMessage( "[Error] - You're already register!", player );
295 else if ( !text ) PrivMessage( "[Error] - /c " + cmd + " <password>", player );
296 else Register( player, e( text ), text );
297 }
298 catch(e) print( "Register Cmd Error: " + e );
299 }
300
301}
302
303 else if ( cmd == "setlevel" )
304 {
305 if ( !GetPlayerLevel( player ) ) ::PrivMessage( "Register before using commands.", player );
306 else if ( !text ) PrivMessage( "/c " + cmd + " <nick/id> <level>", player);
307 else if ( NumTok( text, " " ) < 2 ) PrivMessage( "/c " + cmd + " <nick/id> <level>", player);
308 else {
309 local plr = FindPlayer( GetTok( text, " ", 1 ) );
310 if ( !plr ) ::PrivMessage( "Unknow player id.", player);
311 else if ( !IsNum( GetTok( text, " ", 2 ) ) ) PrivMessage( "Invalid level.", player);
312 else
313 {
314 Message( "** Admin " + player.Name + " set " + plr + "'s level to " + GetTok( text, " ", 2 ).tofloat() + "." );
315 SetPlayerLevel( plr, GetTok( text, " ", 2 ) );
316 }
317 }
318 }
319
320 else if ( cmd == "level" )
321 {
322 if ( !GetPlayerLevel( player ) ) ::PrivMessage( "Register before using commands.", player );
323 else
324 {
325 Message(player + "'s level:[ " + GetPlayerLevel( player ).tofloat() + " ]");
326
327 }
328 }
329}