Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 09/12/19 in all areas

  1. I brought you bakaGaijin and Ash Now I bring Discord integration with MTA scripts. MTA already has this for IRC Shoutout to the people who made the Sockets module, you're awesome. Features: -Scripts can echo messages to any Discord text channel of their choosing. -Any Discord channel can be set up to echo all messages to an ingame script. (Including the name of the person who said it, and his role) -One MTA server can send/receive to multiple Discord guilds. Example use: To show how this is useful, I made a small program to echo all global chat to a "global" Discord channel, and all team chats to individual "team" Discord channels. These Discord channels ofc echo messages back when someone posts. As proof of concept for commands, if a Discord user types "!ban name" then his role is checked, and if it includes Founder, the chat outputs "name was banned!" This is the client side script I used for this example: local SECRET_KEY = "15-A-53CR3T-K3Y" --The script works even if your server IP changes. You are mapped to a unique key. local function onopen(self) self:send(SECRET_KEY) --Your MTA server logs in addEventHandler("onResourceStop", resourceRoot, function() self:close() --Break off from Discord end) addEventHandler("onPlayerChat", getRootElement(), function(message, type) --Example hook to capture player chats local name = getPlayerName(source) local channel = "global" --Send to global channel if global chat if type==2 then channel = getTeamName(getPlayerTeam(source)) end --Or team channel if teamchat --Format to send messages is ("discord", channelName, message) self:send("discord", channel, name..": "..message) end) end function onmessage(self, data) local channelName, name, role, message = data[3], data[4], data[5], data[6] local orginal_message = message --The message we got from discord message = "("..role..") "..name..": "..message --Make it pretty if channelName=="global" then --Output to global chat or team chat outputChatBox("(DISCORD) "..message) else local team = getTeamFromName(channelName) local members = getPlayersInTeam(team) or {} local r, g, b = getTeamColor(team) --Color the output for lulz for _, player in ipairs(members) do outputChatBox( "(DISCORD) (TEAM) "..message, player, r, g, b) end end local commandExample = string.match(orginal_message, "^!ban (.+)") --If message started with !ban... if role=="Founders" and commandExample then -- ...and the person who said it had the right Role outputChatBox(commandExample.." was banned!", getRootElement(), 255, 0, 0) end end local function onclose() outputChatBox("The Discord link was closed") end local discord = Discord.new(onopen, onmessage, onclose) That's 41 lines of code, now let's see it in effect. I would love to hear what you think about it.
    1 point
  2. O que é? Pra que serve? Um banco de dados é onde ficam salvos diversos tipos de dados que são usados entre as sessões dos jogadores e do servidor, isto significa que mesmo se o jogador relogar no servidor ou até mesmo o servidor reiniciar, os dados salvos no banco de dados não são perdidos. (se o script que salvou lá foi feito corretamente). O que posso salvar neles? O MTA já cria 2 bancos de dados padrão quando vc cria seu servidor, são eles: internal.db - Onde são salvos todos os dados das contas dos jogadores, login, senha, grana do bolso, posição do jogador quando deslogou, vida, colete, skin, armas, munição, etc. registry.db - Onde são salvos todos os dados que são utilizados pelos resources, como por exemplo melhores pontuações das corridas (race gamemode), proprietários das casas, dados bancários dos jogadores, saldo bancário dos jogadores, carros comprados pelos jogadores, roupas compradas pelos jogadores, empresas adquiridas pelos jogadores, etc. Onde eles estão? Estes dois bancos de dados estão na pasta deathmatch do seu servidor, estão na linguagem SQLite. Você ainda pode criar outros bancos de dados externos, para serem usados pelos resources, mas na minha opinião isso não é recomendável, uma vez que vc usaria MySQL, que é mais complexo e exige certos cuidados de acesso e domínio, mas alguns servidores profissionais precisam fazer assim pois fizeram os bancos de dados ficarem fora do servidor em outro IP por segurança, dai é necessário ter bancos de dados externos. Nesse tutorial vamos tratar somente dos bancos de dados nativos do MTA, por serem mais fáceis de entender. Como mexo neles? Para salvar alguma coisa na conta do jogador, isto é, no internal.db, você usa setAccountData, e para obter esses dados depois, use getAccountData. É extremamente simples, funciona da mesma forma que um setElementData, mas em vez de salvar uma data temporária em um elemento, salva uma data permanente numa conta. Porém, para salvar alguma coisa no registry.db, é um pouco mais complicado, uma vez que vc vai precisar criar uma tabela nova para cada resource. Por exemplo, vc acabou de criar um resource de ranking por kills/deaths e você deseja salvar esse ranking no banco de dados para que ao reiniciar o resource ou o servidor, o ranking não seja perdido. Para isso vc vai precisar primeiramente criar uma tabela no banco de dados registry.db, essa tabela será acessada pelo resource, que irá salvar os dados dele lá. Para fazer qualquer coisa neste banco de dados (criar tabelas, inserir, alterar, remover, deletar, inserir colunas em determinada tabela, etc) vc vai precisar usar isso: executeSQLQuery. Aqui, será necessário conhecimento em SQL para fazer isso, mas é mais fácil do que aprender uma linguagem de programação nova, pois suas opções e sintaxes são menores do que uma linguagem inteira de programação, você não vai inventar nenhum sistema novo aqui, apenas criar e gerenciar tabelas e dados. Criar tabela nova no banco de dados: (o Caps Lock não é uma regra, mas é melhor para entender o que é código e o que é nome) [Os seguintes códigos só funcionam server-side] executeSQLQuery ("CREATE TABLE IF NOT EXISTS nomedatabela (nomecoluna1 TEXT, nomecoluna2 REAL, nomecoluna3 INTEGER)") TEXT = Valores desta coluna serão textos. Podem ter símbolos, números e espaços. REAL = Valores desta coluna serão numéricos reais. (números decimais, positivos, negativos e 0.0) INTEGER = Valores desta coluna serão numéricos inteiros. (positivos, negativos e 0) (não existe tipo BOOLEAN, use TEXT e insira valor "false" ou "true") (existe valor NULL, é diferente de vazio e diferente de 0. NULL significa ausência de dados. O NULL aparece quando você cria uma linha ou coluna nova sem atribuir valores a elas.) Deletar tabela do banco de dados: executeSQLQuery ("DROP TABLE nomedatabela") Todas as linhas, colunas, células e valores desta tabela são deletados junto. Deletar linhas da tabela: (as células não ficarão NULL) executeSQLQuery ("DELETE FROM nomedatabela WHERE colunaespecífica=?", valorDaCelulaEspecifica) O ? indica que o valor está após a declaração do SQL. Você poderia colocar o valor direto no lugar do ?. Mas por alguma razão, as vezes isso gera erro. Além disso, se o valor da célula estiver em uma variável no seu script, você não pode declarar a variável no lugar do ?. Ali só pode ser o valor direto, pois a declaração SQL inteira se trata de uma string. Por isso o uso do ?, que está recebendo o valor da variável que está depois da vírgula. Obs: Para verificar se uma célula tem valor nulo, não se usa os operadores lógicos de ==, <= >=. Para isso, usa-se IS NULL ou IS NOT NULL. Ex: executeSQLQuery ("DELETE nomecoluna1,nomecoluna2 FROM nomedatabela WHERE nomecoluna3 IS NULL") Isso vai deletar todas as células da coluna 1 e coluna 2 onde a coluna 3 tem uma célula de valor NULL. Se a coluna 3 não tiver nenhuma célula de valor NULL, nada acontece. Inserir nova linha de valores: (ele vai criar automaticamente uma nova linha com novas células) executeSQLQuery ("INSERT INTO nomedatabela(nomecoluna1,nomecoluna2,nomecoluna3) VALUES(?,?,?)", valorCelulaColuna1, valorCelulaColuna2, valorCelulaColuna3) Neste caso, ele está inserindo 3 novos valores, cada valor em uma coluna. Se você não declarar os nomes das colunas, ele vai preencher na ordem das colunas automaticamente. Você pode deixar de declarar uma coluna se não quiser atribuir valor na célula daquela coluna. Se o tipo de valor da variável não for do tipo de dado daquela coluna, dará erro. Atualizar valores de células que já existem em uma tabela: (não é possível alterar os tipos de valores, é necessário editar o tipo da coluna se quiser fazer isso) executeSQLQuery ("UPDATE nomedatabela SET nomecoluna2=?,nomecoluna3=? WHERE nomecoluna1=?", valorCelulaColuna2, valorCelulaColuna3, valorCelulaColuna1) No caso acima, ele vai atualizar as células das colunas 2 e 3 onde o valor da célula da coluna 1 for igual ao valor de valorColunaCelula1. OBS: Nada impede que você coloque as primeiras variáveis junto à declaração SQL, mas para fazer isso você deve "cortar" a string, inserir as variáveis e depois continuar a string, Ex: executeSQLQuery ("UPDATE nomedatabela SET nomecoluna2= '".. valorCelulaColuna2 .."',nomecoluna3='".. valorCelulaColuna2 .."' WHERE nomecoluna1=?", valorCelulaColuna1) Lembrando que o valor destas variáveis também são strings na declaração, portanto use aspas simples antes e depois de cada corte para transformar os valores em string. Os dois pontos (..) significam que estes valores fazem parte do argumento SQL. Da mesma forma, se vc usar "1" .. "1", será igual a "11". (Por isso acho muito mais fácil deixar tudo ? na declaração SQL e colocar as variáveis todas após a string.) Selecionar determinadas células da tabela: (usado geralmente para obter os valores destas células para usar no script, você pode selecionar somente 1 célula ou várias) executeSQLQuery ("SELECT nomecoluna1,nomecoluna2 FROM nomedatabela WHERE nomecoluna3=?", valorCelulaColuna3) Neste exemplo, ele vai selecionar a célula da coluna 1 e a célula da coluna 2, na linha onde a célula da coluna 3 for igual a valorCelulaColuna3. Alterar a tabela (adicionar coluna nova) [SQLite não suporta deletar coluna nem editar tipo de coluna] executeSQLQuery ("ALTER TABLE nomedatabela ADD nomecoluna4 REAL") Devido a limitações do SQLite, ALTER TABLE não pode ser usado para deletar uma coluna nem para editar seu tipo. Para fazer isso é necessário recriar a tabela inteira com as novas alterações. No exemplo acima, ele vai adicionar uma nova coluna chamada "nomecoluna4". Tá, mas como ficaria tudo isso dentro de um script? Fiz um código com vários testes de banco de dados. Cada comando faz alguma coisa. É possível mexer em um banco de dados manualmente sem usar scripts? Sim, é possível. Eu mesmo costumo fazer isso para corrigir algumas coisas rápidas sem precisar programar mais nada. Para poder abrir os bancos de dados (internal.db e registry.db) você deve usar um programa chamado DB Browser for SQLite. Um programa gratuito, leve e bem fácil de entender. Nele você consegue acessar todas as tabelas do banco de dados e editar os valores como se fosse em uma planilha do Excel. Basta ir na aba Navegar dados, selecionar a tabela que deseja modificar, clicar em cima da célula cujo valor deseja atualizar, digitar o novo valor, clicar em Aplicar e depois clicar em Escrever modificações (salvar banco de dados). Pronto! E tem mais! Se você já tiver conhecimento avançado com a linguagem SQL, você também pode fazer alterações avançadas via código dentro do programa. Basta acessar a aba Executar SQL, escrever o comando SQL corretamente e depois clicar no botão de Play. Espero ter ajudado.
    1 point
  3. سلام عليكم ورحمة الله آخخبااركم ان شاء الله طيبين وعيد سعيد عليكم وينعاد عليكم بالصحه والفرح --------------‐----------------------- في هذا الموضوع عندي مود لوحة الانتقال الجديده ~~` افكارها قد تكون جديده الله اعلم ??? لمعرفة كل شي عن المود في هذا الرابط / الفيديو  وبالتـــوفييقء ~~  |~ الإهداءات ~| @!#DesTroyeR_,) @MrKAREEM @Mr.Falcon @DABL @KillerX @NX_CI @[AcM] - Major . @MR_Mahmoud @Ahmed Ly @MR.Mosa @N3xT @Abu-Solo @SuperX @#BrosS @iMr.WiFi..! @Mr.CnTroL @Abdul KariM @Hakan @!#NssoR_) و جميع أعضاء المنتدى 
    1 point
  4. Não. Eu falei pra usar o parâmetro attackerWeapon, mas vc inventou de usar getPlayerWeapon no cara que está levando dano. Além disso, o seu getElementData não faz sentido. function prender (attacker, attackerWeapon) local data = getElementData (attacker, "Polícia Militar") if (attackerWeapon == 3) then if (data) then outputChatBox ("Você prendeu o "..getPlayerName(source), attacker, 255, 255, 255) outputChatBox ("Você foi preso por "..getPlayerName(attacker), source, 255, 255, 255) end end end addEventHandler ("onPlayerDamage", root, prender)
    1 point
  5. Din punctul meu de vedere, MTA-ul oferă mult mai multe posibilități în materie de scripting ca SAMP-ul și de aceea l-am și ales. Nu vreau să ofensez pe nimeni, dar mulți români aleg servere străine de MTA sau joacă SAMP deoarece aceste posibilitati sunt folosite prost. Multă lume își încarcă serverele cu mod-uri și alte cele, iar jucătorii nu au răbdarea și componentele necesare să aștepte să descarce și să se joace cu acele mod-uri. Pe lângă asta, aici mulți au auzit că "dacă deschizi server rp faci bani", și prin urmare, comunitatea e infestata de servere de genul cu gamemode-uri vechi sau pline de bug-uri pe care nu joacă nimeni. Toți scripterii români buni de care știu ori s-au lăsat, ori au plecat pe servere străine. Totuși, eu zic că mai este speranță în comunitate. Jocul ăsta încă este apreciat și jucat de mulți pasionați de San Andreas. Dar ca să îi atragi, trebuie să spargi gheața cu un server făcut ca la carte și aici mă refer din toate punctele de vedere: resurse, staff etc... Părerea mea e că fiecare server își poate "modela" jucătorii spre a fi educați și cu bun simț dacă are un staff matur și dedicat sarcinii. Nimic nu e mai enervant decât un server în care staff-ul e construit pe baza "cine a dat mai mulți bani" și în care jucătorii nu respectă bunul simț și îți distrug cheful. Pe scurt, merită să ai speranță în comunitate în momentul în care cineva chiar se pune serios să facă ceva frumos. Aici am vorbit la general și nu am vrut să ofensez pe nimeni.
    1 point
  6. Salutări. Motivul principal pentru care cealaltă platformă de multiplayer este atât de cunoscută este datorat faptului că, față de Multi Theft Auto, are o denumire mult mai sugestivă și mai 'naturală' referitor la ceea ce este. Orice persoană, inclusiv eu și cu tine, atunci când am vrut pentru prima dată să ne jucăm San Andreas pe o platformă multiplayer am scris în motorul de căutare 'San Andreas Multiplayer', care e tocmai denumirea celelaltei platforme. Nu sunt singurul care este de părere că această parte de SEO a tras și trage destul de mult MTA în jos pentru că cei care au căutat și caută o platformă multiplayer pentru San Andreas mereu vor apela la cuvinte care inevitabil se regăsesc în denumirea SA-MP. Dacă nu cauți în mod special 'Multi Theft Auto' sau 'MTA', atunci cu siguranță vei găsi platforma undeva pe locul 6+ în listă, primele locuri fiind ocupate de către diverse părți/articole/videoclipuri aparținând sau având în prim plan SA-MP. Deoarece SA-MP se regăsește printre primele rezultate în cele mai populare și comune căutări pentru partea de multiplayer a San Andreas, inevitabil majoritatea se opresc la primul rezultat și nu se mai obosesc să caute alternative pe care să le compare. La început poate că nu a fost atât de evident, dar acum, după ani buni de la lansarea ambelor platforme, e destul de clar că la capitolul popularitate, SA-MP se află pe primul loc și motivele sunt evidente. Însă cam doar atât, la altceva decât popularitate, comparat cu ceea ce este MTA și ce oferă, SA-MP nu excelează și nu se remarcă cu absolut nimic. Din păcate pentru majoritatea jucătorilor tot ceea ce contează este popularitatea, exact capitolul în care MTA se află într-un dezavantaj, motiv pentru care ne regăsim în situația de acum. Problema denumirii nu este în totalitate vina celor care întrețin MTA. Pentru că, față de SA-MP, MTA a început de pe GTA 3 și a continuat pe Vice City ca într-un final să ajungă pe San Andreas, în timp ce SA-MP e doar o platformă bazată pe San Andreas. Cei de pe MTA nu cred că aveau de unde să știe cât de departe va ajunge proiectul și chiar și așa, e destul de dificil să găsești o denumire care să cuprindă toate cele trei jocuri și să aducă și în evidență partea de San Andreas în așa fel încât să atragă jucători. În afară de problema denumirii și a popularității, din discuțiile pe care le-am purtat cu diverse persoane și discuțiile pe care le-am urmărit, am observat că există multe concepții greșite și generalizări față de MTA. Multă lume se plânge că nu se menține atmosfera originală a jocului, ceea ce nu este în totalitate adevărat fiindcă asta ține de fiecare server în parte. La fel și legat de mărimea fișierelor custom și a timpului de așteptare la descărcare - SA-MP are în linii mari aceeași treabă de când cu 0.3DL, dar acolo nu e problemă, în schimb aici, da. Exemplele pot continua la nesfârșit dacă e să stăm și să aruncăm o privire detaliată asupra mentalității care s-a conturat în jurul MTA la nivel general. Iar dacă vii cu argumente și exemple bune către baza de jucători de pe SA-MP, persoane care fac astfel de afirmații despre MTA, te lovești de indiferență din partea lor. Pentru ei SA-MP e cel mai bun și gata, ceea ce e o absurditate imensă având în vedere că singurul lucru pozitiv, cum spuneam mai devreme, e popularitatea de care se bucură platforma. Faptul că oamenii în general, dar în speță jucătorii de pe SA-MP, sunt și reticienți la schimbare, la lucruri noi, adaugă un plus de dificultate la toată situația. Dacă se dorește redresarea situației, e oarecum destul de dificil, dar nu neapărat imposibil. Spun asta deoarece MTA ar trebui să depună eforturi și fonduri în așa fel încât să acapareze pozițiile principale din motoarele de căutare (astfel în timp persoanele noi vor afla mult mai ușor de platformă), ar trebui să-și crească prezența online (datorită popularității de care se bucură, SA-MP primește reclamă gratuită din partea celor care joacă pe platformă, ceea ce rezultă în atragerea de noi jucători, iar mai apoi întreg procesul se tot repetă, e ca un bulgăre de zăpadă care se rostogolește la vale, crește încontinuu), ar trebui să facă mai multe, acestea sunt doar două exemple destul de simple. Pe partea românească, dacă per general lucrurile stau prost pe MTA în prezent, inevitabil ne afectează și aici. Dar în acest caz sunt și alți factori care, din punctul meu de vedere, au dus la situația curentă, cum ar fi, de exemplu, comunitățile (în general, există și excepții și nu neapărat proiectul pe care eu și cu echipa mea am încercat să-l implementăm) din ultimii ani care s-au intitulat roleplay și care nu au făcut nimic altceva decât să fie RPG-uri cu o groază de moduri, bani în prostie și un nivel calitativ foarte prost. Persoanele care totuși au fost convinse și au acordat o șansă platformei MTA și care au venit aici să vadă cum stau lucrurile, evident că au găsit un haos și o dezordine care pe comunitățile de roleplay de acolo e mult mai scăzută. Nu au stat mult pe gânduri și s-au întors pe SA-MP considerând că nu există vreo speranță pe MTA și, mai rău, și-au relatat mai departe experiența prietenilor și cunoștințelor, scăzând astfel drastic imaginea și încrederea/abordarea/seriozitatea față de platformă. Am intrat în contact cu această platformă în 2011, deci mă pot considera suficient de vechi încât să spun că, eu cel puțin, încă mai am speranță pentru MTA, însă cu cât se scurge mai mult timp în care nu facem nimic, cu atât șansele de reușită scad treptat. În general popularitatea față de partea de multiplayer pe San Andreas, fie MTA sau SA-MP, începe să scadă drastic pe anumite segmente, însă sunt de părere că partea românească încă mai poate duce foarte mult timp din diferite considerente tehnice și contextuale. Nu spun că nu e ușor, dar nici imposibil, iar mai rău decât e acuma, nu știu dacă se poate ajunge, așa că singura direcție e înspre îmbunătățire. Acum, acestea sunt punctele mele de vedere și cu siguranță ar fi foarte benefic dacă și alții și-ar expune părerea pentru că ai avea mai multe perspective după care să te iei. Sper totuși că am reușit să îți răspund la întrebări, subiectele propuse de tine sunt cu spectru foarte larg și sunt mult mai complexe decât am acoperit eu aici, sunt lucruri pe care le-am simplificat și cu siguranță, involuntar, chiar omis, dar dacă ai întrebări sau sugestii, simte-te liber să le adresezi și atât eu, cât cu siguranță și ceilalți care mai frecventăm această secțiune, vom încerca să ți le răspundem așa cum și cât știm mai bine.
    1 point
  7. "There are 284 servers ahead of my server..." WOW Whoever invented this, it must have been the greatest marketing idea ever. I guess my server has to wait a few decades.
    1 point
  8. سلام عليكم ورحمة الله آخخبااركم ان شاء الله طيبين ------------------------------------- في هذا الموضوع عندي مود الميني مسج يعني تقدر ترسل رساله لشخص محدد بمبلغ من المال ض2 لمعرفة كل شي عن المود في هذا الرابط / الفيديو وبالتـــوفييقء ~~  |~ الإهداءات ~| @!#DesTroyeR_,) @Kareem Amer @MrKAREEM @Mr.Falcon @DABL @KillerX @NX_CI @[AcM] - Major . @MR_Mahmoud @Ahmed Ly @MR.Mosa @N3xT @Abu-Solo @SuperX @#BrosS @iMr.WiFi..! @Mr.CnTroL @Abdul KariM @Hakan @!#NssoR_) @Simple. @Abdo Nour @MR-HERO و جميع أعضاء المنتدى
    1 point
  9. سلام عليكم ورحمة الله آخخبااركم ان شاء الله طيبين ------------------------------------- في هذا الموضوع عندي مود التوجيه الاصدار الثاني ~~` لمعرفة كل شي عن المود في هذا الرابط / الفيديو وبالتـــوفييقء ~~  |~ الإهداءات ~| @!#DesTroyeR_,) @Kareem Amer @MrKAREEM @Mr.Falcon @DABL @KillerX @NX_CI @[AcM] - Major . @MR_Mahmoud @Ahmed Ly @MR.Mosa @N3xT @Abu-Solo @SuperX @#BrosS @iMr.WiFi..! @Mr.CnTroL @Abdul KariM @Hakan @!#NssoR_) @Simple. @Abdo Nour و جميع أعضاء المنتدى
    1 point
×
×
  • Create New...