· 8 years ago · Apr 22, 2018, 01:06 AM
1enum Server
2{
3IP = "127.0.0.1:5192"
4Forum = "http://www.serverforum.com"
5Nome = "[0.4] Servidor Brasileiro"
6Versao = 0.2
7Desenvolvedor = "Leandrinho"
8Creditos = "Kratos"
9}
10
11class PlayerStats
12{
13Registrado = false;
14Logado = false;
15Nogoto = false;
16SpawnLoc = false;
17Count_Msg = 0;
18Msg_Player = 0;
19Loc = null;
20Level = 0;
21Emprego = 0;
22Dinheiro = 0;
23Banco = 0;
24Matou = 0;
25Morreu = 0;
26Roubou = 0;
27Warn_Login = 0;
28}
29
30LotteryWon <- false;
31TicketsPurchased <- {};
32usedTickets <- [];
33LotteryCount <- 0;
34LotteryPrize <- 0;
35
36class PropStats
37{
38ID = 0;
39Nome = null;
40Preco = 0;
41Dono = null;
42Compart = null;
43}
44
45onFall <- {};
46
47function onScriptLoad()
48{
49db <- ConnectSQL( "DataBase.db" );
50
51dofile( "scripts/FallSystem.nut" );
52dofile( "scripts/Functions.nut" );
53dofile( "scripts/Cmds.nut" );
54dofile( "scripts/Echo.nut" );
55dofile( "scripts/Timer.nut" );
56
57Lottery <- array( GetMaxPlayers(), false );
58Tickets <- array( 60, false );
59
60db <- ConnectSQL( "DataBase.db" );
61QuerySQL( db, "CREATE TABLE IF NOT EXISTS Skins ( Nome TEXT, Skin NUMERIC )" );
62
63NewTimer( "MSG1" , 300000, 0 );//Info: 1000 = 1 segundo.
64NewTimer( "MSG2" , 200000, 0 );//Info: 1000 = 1 segundo.
65NewTimer( "MSG3" , 100000, 0 );//Info: 1000 = 1 segundo.
66NewTimer( "MSG4" , 400000, 0 );//Info: 1000 = 1 segundo.
67NewTimer( "MSG5" , 90000, 0 );//Info: 1000 = 1 segundo.
68NewTimer( "topkiller", 120000, 0 );
69NewTimer("Velocimetro" , 500, 0 );
70NewTimer( "Temporizador", 1000, 0 );
71
72// Entregador Drogas
73CreateSphere( null, 1, Vector( -688.188, -1556.63, 12.4997 ), RGB( 000 000 139 ), 1.5 );//pegar entrega De drogas
74CreateSphere( null, 1, Vector( 79.8685, 1080.55, 16.2623 ), RGB( 000 000 139 ), 1.5 );//Entregar drogas
75CreateSphere( null, 1, Vector( -695.395, -1582.89, 12.5309 ), RGB( 000,255,000 ), 1.5 );//Pegar emprego
76//Seguranca
77CreateSphere( null, 1, Vector( -906.975, -330.937, 13.3802 ), RGB( 000,255,00 ), 1.5);//seguranca de banco
78// Lixeiro
79CreateSphere( null, 1, Vector( -1300.48, 174.036, 11.4534 ), RGB( 000,255,00 ), 1.5);// Emprego de lixeiro
80CreateSphere( null, 1, Vector( -1276.23, 77.2545, 11.4534 ), RGB( 000, 000, 139 ), 2 );//pegar entrega De lixeiro
81CreateSphere( null, 1, Vector( -289.777, -491.324, 11.2086 ), RGB( 000, 000, 139 ), 1.5 );//recolher o lixo
82//Caminhoneiro
83CreateSphere( null, 1, Vector( 294.613, -297.674, 11.9591 ), RGB( 000,255,00 ), 1.5);// Emprego de caminhoneiro
84CreateSphere( null, 1, Vector( 309.361, -302.185, 11.9591 ), RGB( 000, 000, 139 ), 2 );//pegar entrega De caminhoneiro
85CreateSphere( null, 1, Vector( -703.747, -1292.45, 11.0715 ), RGB( 000, 000, 139 ), 1.5 );//Entregar
86//Distribuidor de dinheiro
87CreateSphere( null, 1, Vector( -1062.53, -272.656, 12.0878 ), RGB( 000,255,00 ), 1.5);//Emprego de distribuidor
88CreateSphere( null, 1, Vector( -1053.15, -262, 11.4464 ), RGB( 000, 000, 139 ), 2 );//pegar entrega De distribuidor de dinheiro
89CreateSphere( null, 1, Vector( -1072.96, -1448.72, 11.7056 ), RGB( 000, 000, 139 ), 1.5 );// Distribuir
90
91Map <- array( GetMaxPlayers(), null );
92i_1PortaoPos <- array( GetMaxPlayers(), null );
93i_1PortaoRot <- array( GetMaxPlayers(), null );
94i_2PortaoPos <- array( GetMaxPlayers(), null );
95i_2PortaoRot <- array( GetMaxPlayers(), null );
96BoxActive <- false;
97Box <- null;
98
99P <- BindKey( true, 0x50, 0, 0 );
100N <- BindKey( true, 0x4E, 0, 0 );
101Y <- BindKey( true, 0x59, 0, 0 );
102
103Portao <- [];
104
105QuerySQL( 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 )" );
106QuerySQL( db, "CREATE TABLE IF NOT EXISTS Portoes ( CasaID NUMERIC, Model NUMERIC, Pos1 TEXT, Rot1 TEXT, Pos2 TEXT, Rot2 TEXT )" );
107CarregarPortoes();
108CarregarObjetos();
109
110Casa <- array( 1001, null );
111QuerySQL( db, "CREATE TABLE IF NOT EXISTS Casas ( ID NUMERIC, Nome TEXT, Preco NUMERIC, Dono TEXT, Compart TEXT, PX FLOAT, PY FLOAT, PZ FLOAT )" );
112CarregarCasas();
113
114status <- array( GetMaxPlayers(), null );
115SpawnKill <- array( GetMaxPlayers(), 0 );
116Multa <- array( GetMaxPlayers(), 0 );
117
118NewTimer( "SalvarTudo", 300000, 0 );//Essa Fun��o ficara salvando os dados dos players a cada 5 minutos.
119NewTimer( "Timer", 1000, 0 );
120
121Configuracao();
122CriarTabelas();
123ActivateEcho();
124CarregarCarros();
125
126Carregado <- array( GetMaxPlayers(), false );
127AntiBugSphere <- array( GetMaxPlayers(), 0 );
128LoadPickups();
129RobieCopie();
130Loade();
131stats <- array(GetMaxPlayers(), null);
132randomrob <- [ 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000 ];
133}
134
135function onScriptUnload()
136{
137DisconnectSQL( db );
138DisconnectBots();
139}
140
141function onPlayerRequestSpawn( player )
142{
143if ( status[ player.ID ].Registrado == true && status[ player.ID ].Logado == false )
144{
145E_MSG( "Voce deve efetuar o login. Use /login <senha>", player );
146return 0;
147}
148return 1;
149}
150
151function onPlayerRequestClass( player, pclass, pteam, pskin )
152{
153Announce( "~t~" + GetNameClass( pteam ), player, 1 );
154return 1;
155}
156
157function onPlayerJoin( player )
158{
159JoinMessage( player );
160ChecarConta( player );
161Lottery[ player.ID ] = false;
162TicketsPurchased.rawset( player.ID, 0 );
163if ( player.Name == "Ninguem" ) player.Kick();
164i_1PortaoPos[ player.ID ] = null;
165i_1PortaoRot[ player.ID ] = null;
166i_2PortaoPos[ player.ID ] = null;
167i_2PortaoRot[ player.ID ] = null;
168}
169
170function CarregarCasas()
171{
172local i = 0, id, nome, preco, dono, compart, x, y, z;
173local q = QuerySQL( db, "SELECT * FROM Casas" );
174while ( GetSQLColumnData( q, 0 ) != null )
175{
176nome = GetSQLColumnData( q, 1 );
177preco = GetSQLColumnData( q, 2 );
178dono = GetSQLColumnData( q, 3 );
179compart = GetSQLColumnData( q, 4 );
180x = GetSQLColumnData( q, 5 );
181y = GetSQLColumnData( q, 6 );
182z = GetSQLColumnData( q, 7 );
183id = CreatePickup( 407, 1, 1, x, y, z, 255, true ).ID;
184Casa[ id ] = PropStats();
185Casa[ id ].ID = GetSQLColumnData( q, 0 );
186Casa[ id ].Nome = nome;
187Casa[ id ].Preco = preco;
188Casa[ id ].Dono = dono;
189Casa[ id ].Compart = compart;
190GetSQLNextRow( q );
191i++;
192}
193FreeSQLQuery( q );
194print( "[Carregado] Casas do servidor - " + i );
195}
196
197function CountProps()
198{
199local c = 0;
200for( local i = 0, pickup; i < GetPickupCount(); i++ )
201{
202pickup = FindPickup( i );
203if ( pickup && pickup.Model == 407 ) c ++;
204}
205return c;
206}
207
208function PropNameExist( nome )
209{
210local result = false;
211for( local i = 0, pickup; i < GetPickupCount(); i++ )
212{
213pickup = FindPickup( i );
214if ( pickup && Casa[ pickup.ID ] != null )
215{
216if ( Casa[ pickup.ID ].Nome == nome ) result = true;
217}
218}
219return result;
220}
221
222function FindProp( id )
223{
224if ( id < 0 ) return false;
225else if ( id > 1000 ) return false;
226else if ( Casa[ id ] == null ) return false;
227else return true;
228}
229
230
231function onPlayerPart( player, reason )
232{
233QuitMessage( player, reason );
234VoteList.rawdelete( player.ID );
235SalvarDados( player );
236if ( SpawnKill[ player.ID ] >= 1 ) SpawnKill[ player.ID ] = 0;
237if ( Multa[ player.ID ] >= 1 ) Multa[ player.ID ] = 0;
238 if ( onFall.rawin( player.ID ) )
239 {
240 onFall.rawdelete( player.ID );
241 FallEvent[ "PlayerCount" ] --;
242 Message( "*** " + player.Name + " saiu do Fall Event." );
243
244 if ( FallEvent[ "PlayerCount" ] == 1 )
245 {
246 if ( !FallEvent[ "Started" ] && FallEvent[ "Playable" ] )
247 {
248 Message( "*** Fall Event cancelado." );
249 if ( _Timer.Exists( _CheckPosition ) ) _Timer.Destroy( _CheckPosition );
250 if ( _Timer.Exists( _CheckFallCount ) ) _Timer.Destroy( _CheckFallCount );
251 FallEvent[ "LastCall" ] = time();
252 onStopFallEvent();
253 }
254 else if ( FallEvent[ "Started" ] && !FallEvent[ "Playable" ] )
255 {
256 if ( FallEvent[ "ObjectList" ] ) _Timer.Destroy( _SelectObject );
257 foreach ( idx, val in onFall ) FallWon( FindPlayer( idx ) );
258 }
259 }
260 }
261 status[ player.ID ] = null;
262
263 if ( Lottery[ player.ID ] == true ) // If the player bought ticket...
264 {
265 local a = TicketsPurchased.rawget( player.ID );
266 Tickets[a] = false;
267 TicketsPurchased.rawdelete( player.ID ); // Delete player ticket...
268 LotteryCount >= 1 ? LotteryCount -- : ( LotteryCount --, _Lottery.Delete(), EndLottery() ); // decrease participants...
269 }
270}
271
272function onPlayerEnteringVehicle( player, vehicle, door )
273{
274if (( vehicle.Model == 228 ) && status[ player.ID ].Emprego != 7 && door == 0 )
275{
276E_MSG( "So Distribuidores de drogas podem entrar aqui.", player );
277return 0;
278}
279{
280if (( vehicle.Model == 138 ) && status[ player.ID ].Emprego != 11 && door == 0 )
281return 0;
282}
283return 1;
284}
285
286function onPlayerSpawn( player )
287{
288
289if ( status[player.ID].Emprego == 12 )
290{
291player.Skin = 151;
292}
293
294if ( status[player.ID].Emprego == 1 )
295{
296player.Skin = 231;
297}
298if ( status[player.ID].Emprego == 7 )
299{
300player.Skin = 113;
301}
302if ( status[player.ID].Emprego == 4 )
303{
304player.skin = 91;
305}
306if ( status[player.ID].Emprego == 11 )
307{
308player.skin = 150;
309}
310if ( status[player.ID].Emprego == 8 )
311{
312player.skin = 163;
313LoadSkin(player);
314}
315
316Announce( " ", player, 1 );
317player.Team = player.Class;
318SpawnKill[ player.ID ] = 5;
319Safe <- NewTimer( "CheckSafe", 3000, 0, player.ID );
320}
321
322function onSphereEntered(player, sphere)
323{
324if ( sphere.ID == 0 )
325{
326if ( player.Vehicle && player.Vehicle.Model == 228 )
327{
328if ( Carregado[ player.ID ] == true ) return E_MSG( "Voce esta carregando o caminhao.", player );//status[player.ID].Mapper = true
329player.SetCameraPos( Vector( 70.714, 1044.87, 30.5054 ), Vector( 73.6166, 1068.65, 26.4887 ) );
330Announce("Entregue a droga com seguranca na casa Amarela!!", player, 1);
331player.Frozen = true;
332AntiBugSphere[ player.ID ] = 5;
333NewTimer( "Entrega", 5000, 1 , player.ID );
334}
335}
336
337
338else if ( sphere.ID == 1 )
339{
340if ( player.Vehicle && player.Vehicle.Model == 228 )
341{
342if ( Carregado[ player.ID ] == false ) return E_MSG( "Seu caminhao nao esta carregado.", player );
343//Entrega2();
344Announce("Descarregando Caminhao...", player, 0);
345//player.Frozen = true;
346AntiBugSphere[ player.ID ] = 5;
347
348NewTimer( "Entrega2", 1000, 1 , player.ID );
349}
350}
351else if ( sphere.ID == 2 )
352{if ( status[ player.ID ].Emprego == 7 ) return E_MSG("Voce ja e um distribuidor de drogas.",player)
353status[ player.ID ].Emprego = 7;
354player.Skin = 155;
355MSG("O Jogador " + player.Name + " agora esta trabalhando como entregador de drogas.");
356}
357//Seguranca
358else if ( sphere.ID == 3 )
359{if ( status[ player.ID ].Emprego == 4 ) return E_MSG("Voce ja esta trabalhando de seguranca de banco.",player)
360status[ player.ID ].Emprego = 4;
361player.Skin = 91;
362MSG("O Jogador " + player.Name + " agora esta trabalhando como Seguranca de Banco.");
363}
364//Lixeiro
365else if ( sphere.ID == 4 )
366{
367 if ( status[ player.ID ].Emprego == 11 ) return E_MSG("Voce ja esta trabalhando de lixeiro.",player)
368 status[ player.ID ].Emprego = 11;
369 player.Skin = 150;
370 MSG("O Jogador " + player.Name + " agora esta trabalhando de lixeiro.");
371}
372
373
374else if ( sphere.ID == 5 )
375{
376if ( player.Vehicle && player.Vehicle.Model == 138 )
377{
378if ( Carregado[ player.ID ] == true ) return E_MSG( "Voce esta carregando o caminhao.", player );//status[player.ID].Mapper = true
379player.SetCameraPos( Vector( -301.411, -491.788, 12.1582 ), Vector( -302.049, -485.4, 12.1582 ) );
380Announce("Recolha o lixo na Mansao!!", player, 1);
381player.Frozen = true;
382AntiBugSphere[ player.ID ] = 5;
383NewTimer( "Lixeiro", 5000, 1 , player.ID );
384}
385}
386
387else if ( sphere.ID == 6 )
388{
389if ( player.Vehicle && player.Vehicle.Model == 138 )
390{
391if ( Carregado[ player.ID ] == false ) return E_MSG( "Seu caminhao nao esta carregado.", player );
392//Lixeiro2();
393Announce("Descarregando Caminhao...", player, 0);
394//player.Frozen = true;
395AntiBugSphere[ player.ID ] = 5;
396
397NewTimer( "Lixeiro2", 1000, 1 , player.ID );
398}
399}
400//Caminhoneiro
401else if ( sphere.ID == 7 )
402{
403 if ( status[ player.ID ].Emprego == 8 ) return E_MSG("Voce ja esta trabalhando de Caminhoneiro.",player)
404 status[ player.ID ].Emprego = 8;
405 player.Skin = 163;
406 MSG("O Jogador " + player.Name + " agora esta trabalhando de Caminhoneiro.");
407}
408
409
410else if ( sphere.ID == 8 )
411{
412if ( player.Vehicle && player.Vehicle.Model == 213 )
413{
414if ( Carregado[ player.ID ] == true ) return E_MSG( "Voce esta carregando o caminhao.", player );//status[player.ID].Mapper = true
415player.SetCameraPos( Vector( -728.987, -1300.46, 21.6002), Vector( -732.468, -1291.02, 21.6002 ) );
416Announce("!", player, 1);
417player.Frozen = true;
418AntiBugSphere[ player.ID ] = 5;
419NewTimer( "Caminhoneiro", 5000, 1 , player.ID );
420}
421}
422
423else if ( sphere.ID == 9 )
424{
425if ( player.Vehicle && player.Vehicle.Model == 213 )
426{
427if ( Carregado[ player.ID ] == false ) return E_MSG( "Seu caminhao nao esta carregado.", player );
428//Caminhoneiro2();
429Announce("Descarregando Caminhao...", player, 0);
430//player.Frozen = true;
431AntiBugSphere[ player.ID ] = 5;
432
433NewTimer( "Caminhoneiro2", 1000, 1 , player.ID );
434}
435}
436}
437
438function onPlayerDeath( player, reason )
439{
440Safe.Delete();
441Message( "[#FF0000]>> " + player.Name + " morreu. (" + DeathReason( reason ) + ") <<" );
442EchoMessage( "4>> " + player.Name + " morreu. (" + DeathReason( reason ) + ") <<" );
443if ( status[ player.ID ].Level >= 1 )
444{
445status[ player.ID ].Morreu ++;
446if ( status[ player.ID ].Dinheiro >= 250 ) DecCash( player, 250 );
447}
448
449 if ( onFall.rawin( player.ID ) )
450 {
451 player.World = 1;
452 onFall.rawdelete( player.ID );
453 FallEvent[ "PlayerCount" ] --;
454 Message( "*** " + player.Name + " saiu do Fall Event." );
455 if ( FallEvent[ "PlayerCount" ] == 1 )
456 {
457 if ( FallEvent[ "ObjectList" ] ) _Timer.Destroy( _SelectObject );
458 foreach ( idx, val in onFall ) FallWon( FindPlayer( idx ) );
459 };
460 }
461
462}
463
464
465function onPlayerWeaponChange( player, oldWep, newWep )
466{
467 if ( player.IsSpawned ) if ( onFall.rawin( player.ID ) ) player.Disarm();
468 return 1;
469}
470
471function onPlayerKill( killer, player, reason, bodypart )
472{
473killer.Score ++;
474Message( "[#00FF00]>> [#FF0000]" + killer.Name + " [#00FF00]matou [#FF0000]" + player.Name + " [#00FF00]([#FF0000]" + GetWeaponName( reason ) + "[#00FF00]) ([#FF0000]" + GetBP( bodypart ) + "[#00FF00]) <<" );
475EchoMessage( "2>>4 " + killer.Name + " 2matou4 " + player.Name + " 2(4" + GetWeaponName( reason ) + "2) (4" + GetBP( bodypart ) + "2) <<" );
476if ( killer.Health <= 80 ) killer.Health += 20;
477if ( reason == 6 ) player.Health = 100;
478if ( status[ killer.ID ].Level >= 1 && status[ player.ID ].Level == 0 )
479{
480status[ killer.ID ].Matou ++;
481IncCash( killer, 500 );
482}
483if ( status[ killer.ID ].Level == 0 && status[ player.ID ].Level >= 1 )
484{
485status[ player.ID ].Morreu ++;
486if ( status[ player.ID ].Dinheiro >= 250 ) DecCash( player, 250 );
487}
488if ( status[ killer.ID ].Level >= 1 && status[ player.ID ].Level >= 1 )
489{
490status[ killer.ID ].Matou ++;
491status[ player.ID ].Morreu ++;
492IncCash( killer, 500 );
493if ( status[ player.ID ].Dinheiro >= 250 ) DecCash( player, 250 );
494}
495if ( SpawnKill[ player.ID ] >= 1 ) Drown( "Server", killer, "Spawn Kill" );
496}
497
498function onPlayerTeamKill( killer, player, reason, bodypart )
499{
500killer.Score --;
501Drown( "Server", killer, "Team Kill" );
502Safe.Delete();
503}
504
505function hRGB( r = 0, g = 0, b = 0 ) return format( "[#%02X%02X%02X]", r, g, b )
506
507function onPlayerChat( player, text )
508{
509{
510ClientMessageToAll( player.Name + "[#FFFFFF]: " + text, player.Color.r, player.Color.g, player.Color.b );
511EchoMessage( "7[" + player.ID + "]" + player.Name + ":1 " + text );
512if ( text.slice( 0, 1 ) == "!" && text.find("! ") == null )
513{
514local i = NumTok( text, " " ), xp = null;
515if ( i == 1 ) onPlayerCommand2( player, GetTok( text.slice( 1 ), " ", 1 ), xp );
516else onPlayerCommand2( player, GetTok( text.slice( 1 ), " ", 1 ), GetTok( text.slice( 1 ), " ", 2, i ) );
517}
518}
519}
520
521function onPlayerPM( player, playerTo, text )
522{
523if ( Multa[ player.ID ] >= 1 )
524{
525E_MSG( "Voce esta multado do chat.", player );
526return 0;
527}
528CheckSpam( player, "Spam" );
529return 1;
530}
531
532function onPlayerEnterVehicle( player, vehicle, door )
533{
534VeiculoInfo( player, vehicle, 0 );
535}
536
537function onPlayerExitVehicle( player, vehicle )
538{
539VeiculoInfo( player, vehicle, 1 );
540}
541
542
543function onPickupClaimPicked( player, pickup )
544{
545 return 1;
546}
547
548function onPickupPickedUp( player, pickup )
549{
550 if ( !player.Vehicle && pickup.Model == 407 )
551 {
552 if ( Casa[ pickup.ID ] != null )
553 {
554 pickup.Timer = 3000;
555 I_MSG( "[#EEC900]Nome da casa: [#00FFFF]" + Casa[ pickup.ID ].Nome + "[#EEC900] - ID: [#00FFFF]" + pickup.ID + "[#EEC900] - Dono: [#00FFFF]" + Casa[ pickup.ID ].Dono + "[#EEC900].", player );
556 I_MSG( "[#EEC900]Preco: [#00FFFF]R$ " + Casa[ pickup.ID ].Preco + "[#EEC900] - Compartilhada com: [#00FFFF]" + Casa[ pickup.ID ].Compart + "[#EEC900].", player );
557 }
558 }
559 if ( pickup.Model == 345 )
560 {
561 MSG( player.Name + " achou a caixa supresa! Premio: $1000000!" );
562 IncCash( player, 10000000 );
563 pickup.Remove();
564 BoxActive = false;
565
566 }
567
568 if ( pickup.Model == 405 )
569 {
570 Message("[#FF0000]"+ player.Name +" Roubou a loja de "+ GetDistrictName( player.Pos.x, player.Pos.y ) +"");
571 EchoMessage("10"+ player.Name +" Roubou a loja de "+ GetDistrictName( player.Pos.x, player.Pos.y ) +"");
572 SetRob(player,GetRob(player)+1);
573 local a = randomrob[rand()% randomrob.len()]
574 IncCash( player, 5000 );
575 Announce( "~y~ Voce roubou :"+ a +"", player )
576
577 pickup.RespawnTime = 30000;
578 }
579
580}
581
582
583
584
585function onPickupRespawn( pickup )
586{
587}
588
589function onObjectShot( object, player, weapon )
590{
591}
592
593function onObjectBump( object, player )
594{
595}
596
597function onKeyDown( player, key )
598{
599if ( key == P ) MoverPortao( player );
600else if ( key == U ) // Parte do FallSystem
601 {
602 if ( !player.IsSpawned ) EMsg( "Voce deve fazer spawn primeiro.", "You must first spawn.", player );
603 else
604 {
605 if ( FallEvent[ "Playable" ] )
606 {
607
608 if ( onFall.rawin( player.ID ) ) PrivMessage( player, "Voce ja esta no evento." );
609 else FallInsert( player, 0 );
610 }
611 }
612 }
613}
614
615function onKeyUp( player, key )
616{
617}
618
619function GetTok(string, separator, n, ...)
620{
621 local m = vargv.len() > 0 ? vargv[0] : n,
622 tokenized = split(string, separator),
623 text = "";
624
625 if (n > tokenized.len() || n < 1) return null;
626 for (; n <= m; n++)
627 {
628 text += text == "" ? tokenized[n-1] : separator + tokenized[n-1];
629 }
630 return text;
631}
632
633function NumTok(string, separator)
634{
635 local tokenized = split(string, separator);
636 return tokenized.len();
637}
638
639function GetPlayer( plr )
640{
641 if ( plr )
642 {
643 if ( IsNum( plr ) )
644 {
645 plr = FindPlayer( plr.tointeger() );
646 if ( plr ) return plr;
647 else return false;
648 }
649 else
650 {
651 plr = FindPlayer( plr );
652 if ( plr ) return plr;
653 else return false;
654 }
655 }
656 else return false;
657}
658
659function IsFloat( value )
660{
661if ( typeof value == "float" ) return true;
662try
663{
664if ( value.find( "." ) != null )
665{
666value = value.tofloat();
667return true;
668}
669else return false;
670}
671catch(e) return false;
672}
673
674function IsInRangeOfPoint( a, range, x, y, z )
675{
676local px = a.Pos.x, py = a.Pos.y, pz = a.Pos.z;
677px -= x, py -= y, pz -= z;
678return ( ( px * px ) + ( py * py ) + ( pz * pz ) ) < ( range * range );
679}
680
681
682function MoverPortao( player )
683{
684if ( player.IsSpawned )
685{
686for ( local i = 0; i < Portao.len(); i++ )
687{
688local portao = Portao[i].Objeto;
689if ( IsInRangeOfPoint( player, 10, Portao[i].Pos1.x, Portao[i].Pos1.y, Portao[i].Pos1.z ) )
690{
691if ( Casa[ Portao[i].ID ].Dono == player.Name || Casa[ Portao[i].ID ].Compart == player.Name )
692{
693if ( Portao[i].Trancado == true )
694{
695PlaySound( player.World, 145, player.Pos );
696portao.MoveTo( Portao[i].Pos2, 2800 );
697portao.RotateToEuler( Portao[i].Rot2, 2800 );
698Portao[i].Trancado = false;
699}
700else if ( Portao[i].Trancado == false )
701{
702PlaySound( player.World, 145, player.Pos );
703portao.MoveTo( Portao[i].Pos1, 2800 );
704portao.RotateToEuler( Portao[i].Rot1, 2800 );
705Portao[i].Trancado = true;
706}
707}
708}
709}
710}
711}
712
713
714function MoverPortao( player )
715{
716if ( player.IsSpawned )
717{
718for ( local i = 0; i < Portao.len(); i++ )
719{
720local portao = Portao[i].Objeto;
721if ( IsInRangeOfPoint( player, 10, Portao[i].Pos1.x, Portao[i].Pos1.y, Portao[i].Pos1.z ) )
722{
723if ( Casa[ Portao[i].ID ].Dono == player.Name || Casa[ Portao[i].ID ].Compart == player.Name )
724{
725if ( Portao[i].Trancado == true )
726{
727PlaySound( player.World, 145, player.Pos );
728portao.MoveTo( Portao[i].Pos2, 2800 );
729portao.RotateToEuler( Portao[i].Rot2, 2800 );
730Portao[i].Trancado = false;
731}
732else if ( Portao[i].Trancado == false )
733{
734PlaySound( player.World, 145, player.Pos );
735portao.MoveTo( Portao[i].Pos1, 2800 );
736portao.RotateToEuler( Portao[i].Rot1, 2800 );
737Portao[i].Trancado = true;
738}
739}
740}
741}
742}
743}
744
745function CarregarPortoes()
746{
747local i = 0, obj, id, modelo, pos1, rot1, pos2, rot2;
748local q = QuerySQL( db, "SELECT * FROM Portoes" );
749while ( GetSQLColumnData( q, 0 ) != null )
750{
751id = GetSQLColumnData( q, 0 );
752modelo = GetSQLColumnData( q, 1 );
753pos1 = split( GetSQLColumnData( q, 2 ), " " );
754rot1 = split( GetSQLColumnData( q, 3 ), " " );
755pos2 = split( GetSQLColumnData( q, 4 ), " " );
756rot2 = split( GetSQLColumnData( q, 5 ), " " );
757obj = CreateObject( modelo, 1, Vector( pos1[0].tofloat(), pos1[1].tofloat(), pos1[2].tofloat() ), 255 );
758obj.RotateToEuler( Vector( rot1[0].tofloat(), rot1[1].tofloat(), rot1[2].tofloat() ), 0 );
759Portao.push({
760Objeto = obj,
761ID = id,
762Pos1 = Vector( pos1[0].tofloat(), pos1[1].tofloat(), pos1[2].tofloat() ),
763Rot1 = Vector( rot1[0].tofloat(), rot1[1].tofloat(), rot1[2].tofloat() ),
764Pos2 = Vector( pos2[0].tofloat(), pos2[1].tofloat(), pos2[2].tofloat() ),
765Rot2 = Vector( rot2[0].tofloat(), rot2[1].tofloat(), rot2[2].tofloat() ),
766Trancado = true
767});
768GetSQLNextRow( q );
769i++;
770}
771FreeSQLQuery( q );
772print( "[Carregado] Portoes do servidor - " + i );
773}
774
775function CarregarObjetos()
776{
777local i = 0, obj, modelo, world, pos, alpha, rot;
778local q = QuerySQL( db, "SELECT * FROM Objects" );
779while ( GetSQLColumnData( q, 0 ) != null )
780{
781modelo = GetSQLColumnData( q, 0 );
782world = GetSQLColumnData( q, 1 );
783pos = Vector( GetSQLColumnData( q, 2 ), GetSQLColumnData( q, 3 ), GetSQLColumnData( q, 4 ) );
784alpha = GetSQLColumnData( q, 5 );
785rot = Vector( GetSQLColumnData( q, 6 ), GetSQLColumnData( q, 7 ), GetSQLColumnData( q, 8 ) );
786obj = CreateObject( modelo, world, pos, alpha );
787obj.RotateToEuler( rot, 0 );
788GetSQLNextRow( q );
789i++;
790}
791FreeSQLQuery( q );
792print( "[Carregado] Objetos do servidor - " + i );
793}
794
795
796
797
798
799function LoadProps()
800{
801 local q = QuerySQL( pdb, "SELECT * FROM Properties" ), i = 0;
802 while( GetSQLColumnData( q, 0 ) )
803 {
804 local
805 PX= GetSQLColumnData( q, 1 ),
806 PY = GetSQLColumnData( q, 2 ),
807 PZ = GetSQLColumnData( q, 3 );
808 CreatePickup( 407, Vector( PX.tofloat(), PY.tofloat(), PZ.tofloat() ) );
809 GetSQLNextRow( q );
810 i++;
811 }
812 print( "Properties loaded - " + i );
813}
814
815
816function round(value, precision) {
817 local factor = pow(10.0, precision);
818 return floor(value * factor + 0.5) / factor;
819}
820
821
822function Velocimetro()
823{
824if ( GetPlayers() >= 1 )
825{
826 for ( local i = 0; i < GetMaxPlayers(); i++ )
827 {
828 local player = FindPlayer( i );
829 if ( player )
830 {
831 if ( player.IsSpawned && player.Vehicle )
832 {
833 local vehicle = player.Vehicle;
834 local Speed = sqrt(vehicle.Speed.x*vehicle.Speed.x + vehicle.Speed.y * vehicle.Speed.y + vehicle.Speed.z * vehicle.Speed.z) * 50 * 3.6;
835 local output = round(Speed, 0);
836 Announce("\x10 \x10 \x10 \x20 \x20 \x20 \x20 \x20 \x20 \x20 \x20 ~w~Kph: ~o~" + output, player, 1 );
837}
838}
839}
840}
841}
842
843function Rand( min, max ) { min = min.tointeger(), max = max.tointeger() + 1; local a = rand() % ( max - min ) + min; return a; }