· 8 years ago · Feb 28, 2018, 09:39 PM
1function onScriptLoad()
2{
3db <- ConnectSQL( "DataBase.db" );
4
5dofile( "scripts/Functions.nut" );
6dofile( "scripts/Cmds.nut" );
7dofile( "scripts/Echo.nut" );
8g_IRC <- IRC_Init();
9IRC_SetIP( g_IRC, IRC_SERVER );
10IRC_SetPort( g_IRC, 6667 );
11IRC_SetNick( g_IRC, IRC_NICKNAME );
12IRC_SetUser( g_IRC, IRC_NICKNAME );
13IRC_Connect( g_IRC, false );
14
15Map <- array( GetMaxPlayers(), null );
16i_1PortaoPos <- array( GetMaxPlayers(), null );
17i_1PortaoRot <- array( GetMaxPlayers(), null );
18i_2PortaoPos <- array( GetMaxPlayers(), null );
19i_2PortaoRot <- array( GetMaxPlayers(), null );
20BoxActive <- false;
21Box <- null;
22
23P <- BindKey( true, 0x50, 0, 0 );
24
25Portao <- [];
26
27QuerySQL( db, "CREATE TABLE IF NOT EXISTS Objects ( Model NUMERIC, World NUMERIC, PX FLOAT, PY FLOAT, PZ FLOAT, Alpha NUMERIC, RX FLOAT, RT FLOAT, RZ FLOAT, Creator TEXT )" );
28QuerySQL( db, "CREATE TABLE IF NOT EXISTS Portoes ( CasaID NUMERIC, Model NUMERIC, Pos1 TEXT, Rot1 TEXT, Pos2 TEXT, Rot2 TEXT )" );
29CarregarPortoes();
30CarregarObjetos();
31
32Casa <- array( 1001, null );
33QuerySQL( db, "CREATE TABLE IF NOT EXISTS Casas ( ID NUMERIC, Nome TEXT, Preco NUMERIC, Dono TEXT, Compart TEXT, PX FLOAT, PY FLOAT, PZ FLOAT )" );
34CarregarCasas();
35
36status <- array( GetMaxPlayers(), null );
37SpawnKill <- array( GetMaxPlayers(), 0 );
38Multa <- array( GetMaxPlayers(), 0 );
39
40NewTimer( "SalvarTudo", 300000, 0 );//Essa Função ficara salvando os dados dos players a cada 5 minutos.
41NewTimer( "Timer", 1000, 0 );
42
43ActivateEcho();
44Configuracao();
45CriarTabelas();
46CarregarCarros();
47}
48
49function onScriptUnload()
50{
51DisconnectSQL( db );
52DisconnectBots();
53}
54
55function onPlayerRequestSpawn( player )
56{
57if ( status[ player.ID ].Registrado == true && status[ player.ID ].Logado == false )
58{
59E_MSG( "Voce deve efetuar o login. Use /login <senha>", player );
60return 0;
61}
62return 1;
63}
64
65function onPlayerRequestClass( player, pclass, pteam, pskin )
66{
67Announce( "~t~" + GetNameClass( pteam ), player, 1 );
68return 1;
69}
70
71function onPlayerJoin( player )
72{
73JoinMessage( player );
74ChecarConta( player );
75if ( player.Name == "Ninguem" ) player.Kick();
76i_1PortaoPos[ player.ID ] = null;
77i_1PortaoRot[ player.ID ] = null;
78i_2PortaoPos[ player.ID ] = null;
79i_2PortaoRot[ player.ID ] = null;
80}
81
82function CarregarCasas()
83{
84local i = 0, id, nome, preco, dono, compart, x, y, z;
85local q = QuerySQL( db, "SELECT * FROM Casas" );
86while ( GetSQLColumnData( q, 0 ) != null )
87{
88nome = GetSQLColumnData( q, 1 );
89preco = GetSQLColumnData( q, 2 );
90dono = GetSQLColumnData( q, 3 );
91compart = GetSQLColumnData( q, 4 );
92x = GetSQLColumnData( q, 5 );
93y = GetSQLColumnData( q, 6 );
94z = GetSQLColumnData( q, 7 );
95id = CreatePickup( 407, 1, 1, x, y, z, 255, true ).ID;
96Casa[ id ] = PropStats();
97Casa[ id ].ID = GetSQLColumnData( q, 0 );
98Casa[ id ].Nome = nome;
99Casa[ id ].Preco = preco;
100Casa[ id ].Dono = dono;
101Casa[ id ].Compart = compart;
102GetSQLNextRow( q );
103i++;
104}
105FreeSQLQuery( q );
106print( "[Carregado] Casas do servidor - " + i );
107}
108
109function CountProps()
110{
111local c = 0;
112for( local i = 0, pickup; i < GetPickupCount(); i++ )
113{
114pickup = FindPickup( i );
115if ( pickup && pickup.Model == 407 ) c ++;
116}
117return c;
118}
119
120function PropNameExist( nome )
121{
122local result = false;
123for( local i = 0, pickup; i < GetPickupCount(); i++ )
124{
125pickup = FindPickup( i );
126if ( pickup && Casa[ pickup.ID ] != null )
127{
128if ( Casa[ pickup.ID ].Nome == nome ) result = true;
129}
130}
131return result;
132}
133
134function FindProp( id )
135{
136if ( id < 0 ) return false;
137else if ( id > 1000 ) return false;
138else if ( Casa[ id ] == null ) return false;
139else return true;
140}
141
142
143function onPlayerPart( player, reason )
144{
145QuitMessage( player, reason );
146SalvarDados( player );
147if ( SpawnKill[ player.ID ] >= 1 ) SpawnKill[ player.ID ] = 0;
148if ( Multa[ player.ID ] >= 1 ) Multa[ player.ID ] = 0;
149status[ player.ID ] = null;
150}
151
152function onPlayerSpawn( player )
153{
154Announce( " ", player, 1 );
155player.Team = player.Class;
156LoadSpawnLoc( player );
157LoadSpawnWep( player );
158SpawnKill[ player.ID ] = 5;
159}
160
161function onPlayerDeath( player, reason )
162{
163Message( "[#FF0000]>> " + player.Name + " morreu. (" + DeathReason( reason ) + ") <<" );
164EchoMessage( "4>> " + player.Name + " morreu. (" + DeathReason( reason ) + ") <<" );
165if ( status[ player.ID ].Level >= 1 )
166{
167status[ player.ID ].Morreu ++;
168if ( status[ player.ID ].Dinheiro >= 250 ) DecCash( player, 250 );
169}
170}
171
172function onPlayerKill( killer, player, reason, bodypart )
173{
174killer.Score ++;
175Message( "[#00FF00]>> [#FF0000]" + killer.Name + " [#00FF00]matou [#FF0000]" + player.Name + " [#00FF00]([#FF0000]" + GetWeaponName( reason ) + "[#00FF00]) ([#FF0000]" + GetBP( bodypart ) + "[#00FF00]) <<" );
176EchoMessage( "2>>4 " + killer.Name + " 2matou4 " + player.Name + " 2(4" + GetWeaponName( reason ) + "2) (4" + GetBP( bodypart ) + "2) <<" );
177if ( killer.Health <= 80 ) killer.Health += 20;
178if ( reason == 6 ) player.Health = 100;
179if ( status[ killer.ID ].Level >= 1 && status[ player.ID ].Level == 0 )
180{
181status[ killer.ID ].Matou ++;
182IncCash( killer, 500 );
183}
184if ( status[ killer.ID ].Level == 0 && status[ player.ID ].Level >= 1 )
185{
186status[ player.ID ].Morreu ++;
187if ( status[ player.ID ].Dinheiro >= 250 ) DecCash( player, 250 );
188}
189if ( status[ killer.ID ].Level >= 1 && status[ player.ID ].Level >= 1 )
190{
191status[ killer.ID ].Matou ++;
192status[ player.ID ].Morreu ++;
193IncCash( killer, 500 );
194if ( status[ player.ID ].Dinheiro >= 250 ) DecCash( player, 250 );
195}
196if ( SpawnKill[ player.ID ] >= 1 ) Drown( "Server", killer, "Spawn Kill" );
197}
198
199function onPlayerTeamKill( killer, player, reason, bodypart )
200{
201killer.Score --;
202Drown( "Server", killer, "Team Kill" );
203}
204
205function hRGB( r = 0, g = 0, b = 0 ) return format( "[#%02X%02X%02X]", r, g, b )
206
207function onPlayerChat( player, text )
208{
209local tag = "[#FF0000][Desenvolvedor]",
210tag2 = "4[Desenvolvedor]",
211tag3 = "[#FF00FF][Scripter]",
212tag4 = "13[Scripter]",
213tag5 = "[#0000FF][Manager]",
214tag6 = "7[Manager]",
215tag7 = "[#FFFF00][Admin]",
216tag8 = "8[Admin]",
217tag9 = "[#00FF00][Moderador]",
218tag10 = "3[Moderador]",
219tag11 = "[#FFD700][Helper]",
220tag12 = "11[Helper]",
221tag13 = "[#90EE90][Membro]",
222tag14 = "2[Membro]",
223
224c_name = hRGB( player.Color.r, player.Color.g, player.Color.b ) + player.Name,
225msg = "[#FFFFFF]: " + text,
226msg2 = "1: " + text,
227level = status[ player.ID ].Level;
228
229if ( level >= 7 ) Message( tag + c_name + msg ), EchoMessage( tag2 + player.Name + msg2 );
230else if ( level == 6 ) Message( tag3 + c_name + msg ), EchoMessage( tag4 + player.Name + msg2 );
231else if ( level == 5 ) Message( tag5 + c_name + msg ), EchoMessage( tag6 + player.Name + msg2 );
232else if ( level == 4 ) Message( tag7 + c_name + msg ), EchoMessage( tag8 + player.Name + msg2 );
233else if ( level == 3 ) Message( tag9 + c_name + msg ), EchoMessage( tag10 + player.Name + msg2 );
234else if ( level == 2 ) Message( tag11 + c_name + msg ), EchoMessage( tag12 + player.Name + msg2 );
235else if ( level == 1 ) Message( tag13 + c_name + msg ), EchoMessage( tag14 + player.Name + msg2 );
236else Message( c_name + msg ), EchoMessage( c_name + msg );
237}
238
239function onPlayerPM( player, playerTo, text )
240{
241if ( Multa[ player.ID ] >= 1 )
242{
243E_MSG( "Voce esta multado do chat.", player );
244return 0;
245}
246CheckSpam( player, "Spam" );
247return 1;
248}
249
250function onPlayerEnterVehicle( player, vehicle, door )
251{
252VeiculoInfo( player, vehicle, 0 );
253}
254
255function onPlayerExitVehicle( player, vehicle )
256{
257VeiculoInfo( player, vehicle, 1 );
258}
259
260
261function onPickupClaimPicked( player, pickup )
262{
263 return 1;
264}
265
266function onPickupPickedUp( player, pickup )
267{
268 if ( !player.Vehicle && pickup.Model == 407 )
269 {
270 if ( Casa[ pickup.ID ] != null )
271 {
272 pickup.Timer = 3000;
273 MessagePlayer( "[#EEC900]Nome da casa: [#00FFFF]" + Casa[ pickup.ID ].Nome + "[#EEC900] - ID: [#00FFFF]" + pickup.ID + "[#EEC900] - Dono: [#00FFFF]" + Casa[ pickup.ID ].Dono + "[#EEC900].", player );
274 MessagePlayer( "[#EEC900]Preco: [#00FFFF]R$ " + Casa[ pickup.ID ].Preco + "[#EEC900] - Compartilhada com: [#00FFFF]" + Casa[ pickup.ID ].Compart + "[#EEC900].", player );
275 }
276 }
277 if ( pickup.Model == 345 )
278 {
279 MSG( player.Name + " achou a caixa supresa! Premio: $1000000!" );
280 IncCash( player, 10000000 );
281 pickup.Remove();
282 BoxActive = false;
283 }
284}
285
286
287
288
289function onPickupRespawn( pickup )
290{
291}
292
293function onObjectShot( object, player, weapon )
294{
295}
296
297function onObjectBump( object, player )
298{
299}
300
301function onKeyDown( player, key )
302{
303if ( key == P ) MoverPortao( player );
304}
305
306function onKeyUp( player, key )
307{
308}
309
310function GetTok(string, separator, n, ...)
311{
312 local m = vargv.len() > 0 ? vargv[0] : n,
313 tokenized = split(string, separator),
314 text = "";
315
316 if (n > tokenized.len() || n < 1) return null;
317 for (; n <= m; n++)
318 {
319 text += text == "" ? tokenized[n-1] : separator + tokenized[n-1];
320 }
321 return text;
322}
323
324function NumTok(string, separator)
325{
326 local tokenized = split(string, separator);
327 return tokenized.len();
328}
329
330function GetPlayer( plr )
331{
332 if ( plr )
333 {
334 if ( IsNum( plr ) )
335 {
336 plr = FindPlayer( plr.tointeger() );
337 if ( plr ) return plr;
338 else return false;
339 }
340 else
341 {
342 plr = FindPlayer( plr );
343 if ( plr ) return plr;
344 else return false;
345 }
346 }
347 else return false;
348}
349
350function IsFloat( value )
351{
352if ( typeof value == "float" ) return true;
353try
354{
355if ( value.find( "." ) != null )
356{
357value = value.tofloat();
358return true;
359}
360else return false;
361}
362catch(e) return false;
363}
364
365function IsInRangeOfPoint( a, range, x, y, z )
366{
367local px = a.Pos.x, py = a.Pos.y, pz = a.Pos.z;
368px -= x, py -= y, pz -= z;
369return ( ( px * px ) + ( py * py ) + ( pz * pz ) ) < ( range * range );
370}
371
372
373function MoverPortao( player )
374{
375if ( player.IsSpawned )
376{
377for ( local i = 0; i < Portao.len(); i++ )
378{
379local portao = Portao[i].Objeto;
380if ( IsInRangeOfPoint( player, 10, Portao[i].Pos1.x, Portao[i].Pos1.y, Portao[i].Pos1.z ) )
381{
382if ( Casa[ Portao[i].ID ].Dono == player.Name || Casa[ Portao[i].ID ].Compart == player.Name )
383{
384if ( Portao[i].Trancado == true )
385{
386PlaySound( player.World, 145, player.Pos );
387portao.MoveTo( Portao[i].Pos2, 2800 );
388portao.RotateToEuler( Portao[i].Rot2, 2800 );
389Portao[i].Trancado = false;
390}
391else if ( Portao[i].Trancado == false )
392{
393PlaySound( player.World, 145, player.Pos );
394portao.MoveTo( Portao[i].Pos1, 2800 );
395portao.RotateToEuler( Portao[i].Rot1, 2800 );
396Portao[i].Trancado = true;
397}
398}
399}
400}
401}
402}
403
404
405function MoverPortao( player )
406{
407if ( player.IsSpawned )
408{
409for ( local i = 0; i < Portao.len(); i++ )
410{
411local portao = Portao[i].Objeto;
412if ( IsInRangeOfPoint( player, 10, Portao[i].Pos1.x, Portao[i].Pos1.y, Portao[i].Pos1.z ) )
413{
414if ( Casa[ Portao[i].ID ].Dono == player.Name || Casa[ Portao[i].ID ].Compart == player.Name )
415{
416if ( Portao[i].Trancado == true )
417{
418PlaySound( player.World, 145, player.Pos );
419portao.MoveTo( Portao[i].Pos2, 2800 );
420portao.RotateToEuler( Portao[i].Rot2, 2800 );
421Portao[i].Trancado = false;
422}
423else if ( Portao[i].Trancado == false )
424{
425PlaySound( player.World, 145, player.Pos );
426portao.MoveTo( Portao[i].Pos1, 2800 );
427portao.RotateToEuler( Portao[i].Rot1, 2800 );
428Portao[i].Trancado = true;
429}
430}
431}
432}
433}
434}
435
436function CarregarPortoes()
437{
438local i = 0, obj, id, modelo, pos1, rot1, pos2, rot2;
439local q = QuerySQL( db, "SELECT * FROM Portoes" );
440while ( GetSQLColumnData( q, 0 ) != null )
441{
442id = GetSQLColumnData( q, 0 );
443modelo = GetSQLColumnData( q, 1 );
444pos1 = split( GetSQLColumnData( q, 2 ), " " );
445rot1 = split( GetSQLColumnData( q, 3 ), " " );
446pos2 = split( GetSQLColumnData( q, 4 ), " " );
447rot2 = split( GetSQLColumnData( q, 5 ), " " );
448obj = CreateObject( modelo, 1, Vector( pos1[0].tofloat(), pos1[1].tofloat(), pos1[2].tofloat() ), 255 );
449obj.RotateToEuler( Vector( rot1[0].tofloat(), rot1[1].tofloat(), rot1[2].tofloat() ), 0 );
450Portao.push({
451Objeto = obj,
452ID = id,
453Pos1 = Vector( pos1[0].tofloat(), pos1[1].tofloat(), pos1[2].tofloat() ),
454Rot1 = Vector( rot1[0].tofloat(), rot1[1].tofloat(), rot1[2].tofloat() ),
455Pos2 = Vector( pos2[0].tofloat(), pos2[1].tofloat(), pos2[2].tofloat() ),
456Rot2 = Vector( rot2[0].tofloat(), rot2[1].tofloat(), rot2[2].tofloat() ),
457Trancado = true
458});
459GetSQLNextRow( q );
460i++;
461}
462FreeSQLQuery( q );
463print( "[Carregado] Portoes do servidor - " + i );
464}
465
466function CarregarObjetos()
467{
468local i = 0, obj, modelo, world, pos, alpha, rot;
469local q = QuerySQL( db, "SELECT * FROM Objects" );
470while ( GetSQLColumnData( q, 0 ) != null )
471{
472modelo = GetSQLColumnData( q, 0 );
473world = GetSQLColumnData( q, 1 );
474pos = Vector( GetSQLColumnData( q, 2 ), GetSQLColumnData( q, 3 ), GetSQLColumnData( q, 4 ) );
475alpha = GetSQLColumnData( q, 5 );
476rot = Vector( GetSQLColumnData( q, 6 ), GetSQLColumnData( q, 7 ), GetSQLColumnData( q, 8 ) );
477obj = CreateObject( modelo, world, pos, alpha );
478obj.RotateToEuler( rot, 0 );
479GetSQLNextRow( q );
480i++;
481}
482FreeSQLQuery( q );
483print( "[Carregado] Objetos do servidor - " + i );
484}
485
486
487
488
489
490function LoadProps()
491{
492 local q = QuerySQL( pdb, "SELECT * FROM Properties" ), i = 0;
493 while( GetSQLColumnData( q, 0 ) )
494 {
495 local
496 PX= GetSQLColumnData( q, 1 ),
497 PY = GetSQLColumnData( q, 2 ),
498 PZ = GetSQLColumnData( q, 3 );
499 CreatePickup( 407, Vector( PX.tofloat(), PY.tofloat(), PZ.tofloat() ) );
500 GetSQLNextRow( q );
501 i++;
502 }
503 print( "Properties loaded - " + i );
504}