Advertisement
Guest User

San Andreas Truck

a guest
Dec 7th, 2015
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.92 KB | None | 0 0
  1. /*
  2.                                      ___       ____        _________ ______               ______      /
  3.                                     /         /    \   /\      |     |     \   |      |  /        |  /
  4.                                               |    |   \/      |     |         |      | |         | /
  5.                                     \______   |    |           |     |_____/   |      | |         |/\
  6.                                            \  |----|           |     |    \    |      | |         |  \
  7.                                               |    |   /\      |     |    |    |      | |         |   \
  8.                                     _______/  |    |   \/      |     |    |    \______/  \______  |    |
  9.                                                             San Andreas Truck - 2015®
  10. */
  11.  
  12.  
  13.  
  14. /*
  15.  *
  16.  * Autor do gamemode: HaRdiiZin
  17.  *   Data de criação: 26/10/15
  18.  *   Nome do projeto: San Andreas Truck
  19.  *         Descrição: Este projeto foi iniciado somente para relembrar as funções do sqlite,
  20.  *                    e também porque eu iria iniciar um projeto de trucking mais acabei desistindo
  21.  *                    dele por falta de tempo, já que eu tenho outro projeto em andamento..
  22.  *
  23.  */
  24.  
  25.  
  26. /*
  27.  *
  28.  * O que há no gamemode?
  29.  * Como eu desisti nos primeiros dias de desenvolvimento, praticamente nem fiz nada no gamemode. Ele é uma base, uma base na qual
  30.  * novatos na linguagem possam aprender mais, e também conhecer o quão útil é o sqlite no sa-mp e como podemos utiliza-lo, atualmente o gamemode
  31.  * só tem o sistema de login e registro, ambos funcionando 100% e salvando, admin, skin, e última posição. Espero que gostem!
  32.  *
  33.  */
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42. //--------------------------------------------------------------
  43.  
  44.  
  45.  
  46.  
  47.  
  48. /* Includes necessárias para o bom funcionamento do servidor. */
  49. #include <a_samp>
  50. #include <foreach>
  51. #include <mSelection>
  52.  
  53.  
  54.  
  55.  
  56.  
  57. /* Configurações gerais do servidor. */
  58. #define serverNome          "hostname San Andreas Truck | HaRdiiZin®"
  59. #define serverPass          "password 0"
  60. #define serverLang          "language Portugues - Brasil"
  61. #define serverMod           "by HaRdiiZin® - v0.1 R1"
  62. #define serverMap           "mapname San Andreas"
  63. #define serverSite          "weburl www.forum.sa-mp.com"
  64.  
  65.  
  66. #define     Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
  67. #define     Ban(%0)  SetTimerEx("Bana", 100, false, "i", %0)
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74. /* Enums e outras váriaveis.. */
  75. enum
  76. {
  77.     Branco   = 0xFFFFFFFF,
  78.     Verde    = 0x29BF33FF,
  79.     Vermelho = 0xFF0000FF,
  80.     Azul     = 0x1DA7B9FF,
  81.     Rosa     = 0xB837C1FF,
  82.     Roxo     = 0xB11BCFFF,
  83.     Amarelo  = 0xFFF300FF,
  84.     Laranja  = 0xFFC000FF
  85. };
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92. enum
  93. {
  94.     Login,
  95.     Registro,
  96.     SelectSkin
  97. };
  98.  
  99.  
  100.  
  101.  
  102.  
  103. enum player_data
  104. {
  105.     Admin,
  106.     Skin,
  107.     Float:px,
  108.     Float:py,
  109.     Float:pz,
  110.     Float:pa
  111. };
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119. new DB:Connect;
  120. new pInfo[MAX_PLAYERS][player_data];
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128. /* Necessarias para o script */
  129. main() { print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n> HaRdiiZin®"); }
  130. public OnGameModeInit()
  131. {
  132.     LoadServerConfig();
  133.  
  134.     /* Carrega o banco de dados */
  135.     Connect = db_open("sql.db"); // Abre o banco de dados..
  136.  
  137.     db_free_result(db_query(Connect, "CREATE TABLE IF NOT EXISTS `contas` (`id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,`nome`  TEXT NOT NULL,`senha` TEXT NOT NULL,`admin` INTEGER NOT NULL,`skin`  INTEGER NOT NULL,`px`    INTEGER NOT NULL,`py`    INTEGER NOT NULL,`pz`    INTEGER NOT NULL,`pa`    INTEGER NOT NULL);"));
  138.         // Cria as tabelas caso elas não existam..
  139.  
  140.     /* Inserir uma conta na tabela, caso a AutoRegister esteja habilitada. */
  141.     #if defined AutoRegister
  142.         db_query(Connect, "INSERT INTO `contas` (`nome`, `senha`, `admin`, `skin`, `px`, `py`, `pz`, `pa`) VALUES ('HaRdiiZin', 'teste', '0', '4', '0.0', '0.0', '0.0', '0.0')");
  143.             //Somente para testes..
  144.     #endif
  145.     return 1;
  146. }
  147.  
  148. public OnGameModeExit()
  149. {
  150.     for(new i = 0; i < MAX_PLAYERS; i++) SavePlayer(i);
  151.     return 1;
  152. }
  153.  
  154. public OnPlayerConnect(playerid)
  155. {
  156.     SetTimerEx("OnPlayerConnected", 100, false, "i", playerid);
  157.     return 1;
  158. }
  159.  
  160. forward OnPlayerConnected(playerid);
  161. public OnPlayerConnected(playerid)
  162. {
  163.     /* Seta a camera do player e outras funções .*/
  164.     TogglePlayerSpectating(playerid, true);
  165.  
  166.     InterpolateCameraPos(playerid, 1462.9407, -867.8122, 105.3706, 1322.1545, -956.1140, 136.5105, 10000, CAMERA_MOVE);
  167.     InterpolateCameraLookAt(playerid, 1462.3888, -866.9811, 104.9506, 1322.5913, -955.2172, 136.1455, 10000, CAMERA_MOVE);
  168.  
  169.     /* Verifica se o player tem ou não uma conta, caso ele tenha ele será jogado para dialog de login, se não ele irá para de registro. */
  170.     new query[61], DBResult:Result;
  171.     format(query, sizeof(query), "SELECT * FROM `contas` WHERE `nome` = '%s'", DB_Escape(GetName(playerid)));
  172.     Result = db_query(Connect, query);
  173.  
  174.     if(db_num_rows(Result) == 0)
  175.     {
  176.         //Não tem uma conta..
  177.         ShowPlayerDialog(playerid, Registro, DIALOG_STYLE_PASSWORD, "{FF0000}# {FFFFFF}San Andreas: Truck", "{FFFFFF}Digite uma senha segura para que você se registre.", "Registrar", "");
  178.     }
  179.     else
  180.     {
  181.         //Tem uma conta..
  182.         ShowPlayerDialog(playerid, Login, DIALOG_STYLE_PASSWORD, "{FF0000}# {FFFFFF}San Andreas: Truck", "{FFFFFF}Digite a sua senha para logar-se", "Logar", "");
  183.     }
  184.     db_free_result(Result);
  185.     return 1;
  186. }
  187.  
  188. public OnPlayerDisconnect(playerid, reason)
  189. {
  190.     SavePlayer(playerid);
  191.     return 1;
  192. }
  193.  
  194. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  195. {
  196.     if(dialogid == Registro)
  197.     {
  198.         if(!response) Kick(playerid);
  199.         new query[300];
  200.         format(query, sizeof(query), "INSERT INTO `contas` (`nome`, `senha`, `admin`, `skin`, `px`, `py`, `pz`, `pa`) VALUES ('%s', '%s', '0', '0', '0.0', '0.0', '0.0', '0.0')", DB_Escape(GetName(playerid)), DB_Escape(inputtext));
  201.         db_free_result(db_query(Connect, query));    
  202.  
  203.         pInfo[playerid][Admin] = 0;
  204.         pInfo[playerid][Skin] = 0;
  205.         pInfo[playerid][px] = 0.0;
  206.         pInfo[playerid][py] = 0.0;
  207.         pInfo[playerid][pz] = 0.0;
  208.         pInfo[playerid][pa] = 0.0;
  209.  
  210.         new skins_array[] =
  211.         {
  212.             20,23,26,27,29,32,33,34,37,43,44,45,49,51,52,57,58,59,60,68,72,73,81,96,97,101
  213.         };
  214.         ShowModelSelectionMenuEx(playerid, skins_array, 26, "Selecione sua skin", SelectSkin, 0.0, 0.0, 0.0);  
  215.         return 1;
  216.     }
  217.     if(dialogid == Login)
  218.     {
  219.         if(!response) Kick(playerid);
  220.  
  221.         new query[118], DBResult:Result;
  222.         format(query, sizeof(query), "SELECT * FROM `contas` WHERE `nome` = '%s' AND `senha` = '%s'", DB_Escape(GetName(playerid)), DB_Escape(inputtext));
  223.         Result = db_query(Connect, query);    
  224.  
  225.         if(db_num_rows(Result) == 0)
  226.         {
  227.             SendClientMessage(playerid, Vermelho, "* Você errou sua senha!");
  228.             Kick(playerid);
  229.             return 0;
  230.         }
  231.         else
  232.         {
  233.             //Acertou a senha
  234.             new Field[20];
  235.             db_get_field_assoc(Result, "admin", Field, sizeof(Field));
  236.             pInfo[playerid][Admin] = strval(Field);
  237.  
  238.             db_get_field_assoc(Result, "skin", Field, sizeof(Field));
  239.             pInfo[playerid][Skin] = strval(Field);
  240.  
  241.             db_get_field_assoc(Result, "px", Field, sizeof(Field));
  242.             pInfo[playerid][px] = float(strval(Field));
  243.  
  244.             db_get_field_assoc(Result, "py", Field, sizeof(Field));
  245.             pInfo[playerid][py] = float(strval(Field));
  246.  
  247.             db_get_field_assoc(Result, "pz", Field, sizeof(Field));
  248.             pInfo[playerid][pz] = float(strval(Field));
  249.  
  250.             db_get_field_assoc(Result, "pa", Field, sizeof(Field));
  251.             pInfo[playerid][pa] = float(strval(Field));
  252.  
  253.             TogglePlayerSpectating(playerid, false);
  254.             LoadPlayer(playerid);
  255.         }
  256.         db_free_result(Result);        
  257.         return 1;
  258.     }
  259.     return 1;
  260. }
  261.  
  262. public OnPlayerModelSelectionEx(playerid, response, extraid, modelid)
  263. {
  264.     if(extraid == SelectSkin)
  265.     {
  266.         if(!response)
  267.         {
  268.             pInfo[playerid][Skin] = 4;
  269.             TogglePlayerSpectating(playerid, false);
  270.             LoadPlayer(playerid);
  271.         }
  272.         else
  273.         {
  274.             pInfo[playerid][Skin] = modelid;
  275.             TogglePlayerSpectating(playerid, false);
  276.             LoadPlayer(playerid);
  277.         }
  278.         return 1;
  279.     }
  280.     return 1;
  281. }
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292. /* Funções necessárias */
  293. LoadPlayer(playerid)
  294. {
  295.     SpawnPlayer(playerid);
  296.     SetPlayerPos(playerid, pInfo[playerid][px], pInfo[playerid][py], pInfo[playerid][pz]);
  297.     SetPlayerFacingAngle(playerid, pInfo[playerid][pa]);
  298.     SetPlayerSkin(playerid, pInfo[playerid][Skin]);
  299.     return 1;
  300. }
  301.  
  302. SavePlayer(playerid)
  303. {
  304.     new query[300], DBResult:Result;
  305.     GetPlayerPos(playerid, pInfo[playerid][px], pInfo[playerid][py], pInfo[playerid][pz]);
  306.     GetPlayerFacingAngle(playerid, pInfo[playerid][pa]);
  307.  
  308.     format(query, sizeof(query), "UPDATE `contas` SET `admin`='%d', `skin`='%d', `px`='%f', `py`='%f', `pz`='%f', `pa`='%f' WHERE `nome` = '%s'",
  309.         pInfo[playerid][Admin],
  310.         GetPlayerSkin(playerid),
  311.         pInfo[playerid][px],
  312.         pInfo[playerid][py],
  313.         pInfo[playerid][pz],
  314.         pInfo[playerid][pa],
  315.         DB_Escape(GetName(playerid)));
  316.     Result = db_query(Connect, query);  
  317.     db_free_result(Result);
  318.     return 1;
  319. }
  320.  
  321. LoadServerConfig()
  322. {
  323.     new input[40]; // Cria a variavel com 40 células necessárias..
  324.  
  325.     /* Setando as configurações de nome, etc */
  326.     format(input, sizeof(input), serverNome); // Seta o hostname do servidor.
  327.     SendRconCommand(input);
  328.  
  329.     format(input, sizeof(input), serverPass); // Seta a senha do servidor.
  330.     SendRconCommand(input);
  331.  
  332.     format(input, sizeof(input), serverLang); // Seta a linguagem que o servidor terá.
  333.     SendRconCommand(input);
  334.  
  335.     format(input, sizeof(input), serverMod); // Seta o mode do servidor.
  336.     SetGameModeText(input);
  337.  
  338.     format(input, sizeof(input), serverMap); // Seta o nome do mapa do servidor..
  339.     SendRconCommand(input);
  340.  
  341.     format(input, sizeof(input), serverSite); // Seta o nome do mapa do servidor..
  342.     SendRconCommand(input);
  343.  
  344.     #undef serverNome
  345.     #undef serverPass
  346.     #undef serverLang
  347.     #undef serverMod
  348.     #undef serverMap
  349.     #undef serverSite
  350.  
  351.     /* Seta as configurações para como o GTA deverá se portar em relação ao servidor. */
  352.     ShowPlayerMarkers(PLAYER_MARKERS_MODE_OFF);
  353.     ShowNameTags(1);
  354.     AllowAdminTeleport(1);
  355.     UsePlayerPedAnims();
  356.     DisableInteriorEnterExits();
  357.     EnableStuntBonusForAll(true);
  358.     LimitGlobalChatRadius(15.0);  
  359.     EnableTirePopping(1);
  360.     ManualVehicleEngineAndLights();
  361.     return 1;
  362. }
  363.  
  364. GetName(playerid)
  365. {
  366.     new
  367.     gName[MAX_PLAYER_NAME + 1];
  368.     GetPlayerName(playerid, gName, sizeof(gName));
  369.     return gName;
  370. }
  371.  
  372. forward Kicka(p); public Kicka(p)
  373. {
  374.     #undef Kick
  375.     Kick(p);
  376.     #define Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
  377.     return 1;
  378. }
  379.  
  380. forward Bana(p); public Bana(p)
  381. {
  382.     #undef Ban
  383.     Ban(p);
  384.     #define Ban(%0) SetTimerEx("Bana", 100, false, "i", %0)
  385.     return 1;
  386. }
  387.  
  388. DB_Escape(text[])
  389. {
  390.         new
  391.         ret[80 * 2],
  392.         ch,
  393.         i,
  394.         j;
  395.         while ((ch = text[i++]) && j < sizeof (ret))
  396.         {
  397.  
  398.                 if (ch == '\'')
  399.                 {
  400.  
  401.                         if (j < sizeof (ret) - 2)
  402.                         {
  403.  
  404.                                 ret[j++] = '\'';
  405.                                 ret[j++] = '\'';
  406.                         }
  407.                 }
  408.                 else if (j < sizeof (ret))
  409.                 {
  410.  
  411.                         ret[j++] = ch;
  412.                 }
  413.                 else
  414.                 {
  415.  
  416.                         j++;
  417.                 }
  418.         }
  419.         ret[sizeof (ret) - 1] = '\0';
  420.         return ret;
  421.         // '''
  422. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement