antiblock
https://arwen2.global/

Mário.

Membro Elite
  • Content Count

    155
  • Joined

  • Last visited

  • Days Won

    11

Everything posted by Mário.

  1. Obrigado a todos pelas palavras de incentivo, fico muito feliz com isso e espero ver-vos amanhã no servidor e que tudo corra bem. Aqui fica um vídeo feito pelo Dani Santos, a explicar mais detalhadamente o servidor:
  2. Extremamente de confiança, adora trabalhar e é absolutamente um monstro naquilo que faz. Mais que recomendado!
  3. warp_empire = function(index, empire) -- 1º ideia if is_test_server() then -- Em caso do servidor estar em test_server if pc.get_map_index() ~= index then syschat(string.format("Não serás teleportado porque o index do teu mapa é %s e é da função é %s"), pc.get_map_index(), index)) return end end if pc.get_map_index() == index then if pc.get_empire() == empire then warp_to_village() end end end quest warp_empire begin state start begin when kill with npc.get_race() == 101 begin -- O que acontece ao matarem um cão --[[ 1: Reino Vermelho 2: Reino Amarelo 3: Reino Azul Isto faz só com que apenas os jogadores do reino azul sejam teleportados. 43 representa o index do mapa, onde é que eles devem de estar para a ação acontecer. ]] warp_empire(43, 3) end end end A segunda, podes fazer por source como o @Karbust™ # PT disse ou podes utilizar a função purge_area, que limita a área onde os mobs (npcs incluído) serão removidos. Não testado.
  4. O problema é que o teu PC não tem a resolução pedida pelo metin2: 800x600 Isto faz com que apareça o erro, por muitas vezes que possas carregar no "Resolver problemas de compatibilidade". A solução reside na source do executável, no GrpDevice.cpp: if (!ms_kD3DDetector.Find(800, 600, 32, TRUE, &ms_iD3DModeInfo, &ms_iD3DDevInfo, &ms_iD3DAdapterInfo)) return CREATE_DETECT; Basta remover isto que já irás conseguir jogar, agora só depende do dono deste servidor. Na realidade chega. O lalaker1 não assume qual o número do HEADER_GC_ATTACK na comunicação do game to client, por isso que utiliza sempre o default.
  5. Olá, Posso-vos comprovar (nada que já não saibam) que Lisboa é a cidade mais cara de Portugal. Trabalho numa agência imobiliária e tenho acesso a informações privilegiadas que o público geral não tem acesso. Todos os dados que irei publicar é verídico e reconfirmado por instituições que tratam da Análise Comparativa do Mercado. Os dados são do primeiro trimestre de 2017, por isso podemos dizer que é algo recente. Peguei no concelho de Sintra e Lisboa, respetivamente a freguesia de Cacém e de Benfica para estar na mesma linha de raciocínio que o @morfo2. Primeiro, é necessário saberem isto: Mínimo (Percentil 5): Normalmente são casas com mais de 30 anos, que não estão remodelados; Médio Baixo: É a média mais baixa de todas as ofertas no mercado; Médio: É a média de todas as casas no mercado; Médio Alto: É a média mais alta de todas as ofertas no mercado; Máximo: Normalmente são casas totalmente remodeladas. Tendo isto em conta, vamos lá analisar: No concelho de Sintra, em média um T0 ~ T1 custa 436 euros e o máximo consegue chegar até aos 615 euros. Na freguesia do Cacém está dentro do que é esperado pelos preços praticados no concelho, 434 euros por um T0 ~ T1 a chegar aos 600 euros. Aqui é que é inacreditável, em média no concelho de Lisboa um T0 ~ T1 chega a custar 937 euros e pode subir até aos 1600 euros! Na freguesia de Benfica é +/- 150 euros mais barato, sendo o médio 730 euros e o máximo 1200. É absolutamente surreal o quanto um arrendamento é no concelho de Lisboa, é impossível uma pessoa com o ordenado mínimo sobreviver em Lisboa, mesmo que seja em uma casa com mais de 30 anos!
  6. Tempo é dinheiro e dinheiro é tempo.
  7. Antes de começar com o tópico, se esperam algo complexo deste sistema, então poderão voltar para trás porque isto foi em apenas 1 hora de trabalho. Têm todo o direito de melhorar isto à vontade. Bem, eu ando a fazer alguns testes no que toca a performance entre quest-client e game-client e sendo sincero, quase ou pouco noto a diferença (já deu para entender que sou fanboy de lua certo?), apenas há 1 ~ 3 comandos extras a serem feitos. O que é este sistema? Isto dá-se como o nome de Admin Whisper (Mensagens de Equipa em português) e tem como objetivo enviar uma mensagem a todos os jogadores assim que entram pela primeira vez no jogo. Para que serve? Tal como disse acima, todos os jogadores (independentemente do canal - ou seja, poderão estar no CH1 como no CH2 -) irão receber sem qualquer tipo de problema ou latência. (Mensagem a ser enviada - No print não tem como ser visível mas ela pisca) (Conteúdo da mensagem) Requisitos: Python LUA Client Procurem (game.py) por: "PlayMusic" : self.__PlayMusic, Em baixo, adicionem: "admin_whisper" : self.AdminWhisper, Procurem por: def __PlayMusic(self, flag, filename): flag = int(flag) if flag: snd.FadeOutAllMusic() musicInfo.SaveLastPlayFieldMusic() snd.FadeInMusic("BGM/" + filename) else: snd.FadeOutAllMusic() musicInfo.LoadLastPlayFieldMusic() snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) Por baixo adicionem: def AdminWhisper(self, admin, text): # Nome a ser chamado txt = str(text) # A mensagem em si show = txt.replace("_", " ") # Os _ são substituidos por espaço name = "|cFFFF8C00|H|h[%s]|h|r" % (admin) # Cor semelhante a de um Game Master + o nome proveniente do servidor chat.AppendWhisper(chat.WHISPER_TYPE_GM, name, show) # É enviado a mensagem com carácter GM self.interface.RecvWhisper(name) # É anúnciado da mesma forma que uma mensagem normal SERVER Criem no diretório do locale um ficheiro chamado admin_whisper.lua com isto lá dentro: --[[ De forma a que as mensagens tenham espaço uma da outra, é necessário utilizarem o uso da _ de forma a que o client consiga substituir. O motivo deve-se ao facto do comando cmdchat - ou CHAT_TYPE_COMMAND - ignorar tudo o que venha depois de um espaço (corrigem-me se estiver mal), por isso decidi que isto poderia ser a melhor forma disponível para que os espaços sejam visto visualmente. OBS: Repito, se queres algo complexo, podes usar isto como base ou simplesmente não usar, não obrigo ninguém a utiliza-lo. PS: Também poderão mandar mensagem a cada um dos jogadores de acordo com a sua linguagem (se tiverem multilinguagens instalado). ]] whisper = {} -- Abre a clásula para a palavra whisper whisper.admin = "MÁRIO" -- Nome do sistema a aparecer -- Mensagem a ser exibida | Se quiserem enviar mais que uma, poderão faze-lo perfeitamente dando alguns retoques no código whisper.text = "Olá_a_todos,_só_queria_dizer_que_este_´tutorial´_foi_criado_pelo_Mário_por_isso_se_quiserem_meter_os_créditos_quando_forem_meter_em_um_outro_sítio,_metam_os_meus_e_não_os_vossos_^^ " Insiram isto dentro do questlib.lua: dofile(get_locale_base_path().."/admin_whisper.lua") Utilizem a seguinte quest como um teste: quest admin_whisper begin state start begin when login begin if game.get_event_flag("admin_whisper) == 0 then return else cmdchat(string.format("admin_whisper %s %s",whisper.admin,whisper.text)) end end end end /e admin_whisper 1 - O sistema estará ativo e todos irão receber as mensagens /e admin_whisper 0 - O sistema estará desativo e ninguém irá receber as mensagens
  8. É só ler o erro, o diretório que é utilizado no sh não está de acordo com o diretório real. Modifica-o de forma a ser chamado para o último. OBS: O nome 2E13R já não me pertence.
  9. Isto foi dito pelo @p0w3r0ff no tópico que fiz já a algum tempo e agradeço pela ideia que já foi posta em prática mas com um certo detalhe. Deram-me a ideia de não juntar o hash com salt e sim de criar duas tabelas que pudessem diferir uma da outra : Antes: Depois: Sendo impossível saber qual a palavra-passe (char) que foi originada. De momento não vejo qualquer falha desta forma mas também sugeriram que mudasse para cryptopp usando AES, o que vocês acham? Há outro tipo de segurança que possa ser melhor ou que forneça melhor desempenho com menos dados (reparei que ao usar este método consumia-se muito menos do que o tradicional)?
  10. Podem testar e provar-me o contrário: d077f326e128d02e99bdb29294e2bd8b 3eeea885cbcd6a81a8e2b47bd5b6e28a
  11. Olá, Antes de mais, quero-vos desejar um bom ano 2018, que seja verdadeiramente o ano em que consigam concluir os vossos objetivos e acima de tu, muita felicidade. Depois, este tópico não foi criado para fazer de vítima nem nada do género, o erro foi totalmente meu, apenas venho avisar (ou reafirmar, como bem preferirem) que o KB não é de confiança. Vou fazendo o tópico por fases de forma a entenderem o que realmente aconteceu. Conheço o Tiago (KB aka ραรтσя αlємãσ aka TMS Services) já a algum tempo por um amigo em comum. Sempre soube quem era o rapaz e o que tinha feito no passado, mas como eu tenho um carácter ingénuo, acredito que as pessoas mudam e com isso dei-lhe uma oportunidade enquanto pessoa, amigo. Antes de abrir um dos meus servidores, ajudava-o com tudo visto que tinha tempo para tal. Fizemos um acordo que consistia em lhe ajudar no que fosse preciso e em troca fazia as proteções para o site. Conhecimento Eu acredito na ideia de partilha de conhecimento, de ideias e de projetos. Ninguém nasce ensinado, porque aquilo que é fácil para mim pode ser difícil para outro. É com este pensamento na cabeça que não gozo nem respondo mal a dúvidas que sejam tão básicas para mim. Eu de PHP sou 0, é triste de se dizer mas é verdade. O meu objetivo para 2018 é aprender laravel, java e php (a ver se consigo aprender pelo menos o básico). Como o Tiago tinha esse conhecimento, decidi depositar um voto de confiança - pior coisa que alguma vez fiz em toda a minha vida. Ao dar-lhe os acessos (somente ao do site, ele nunca teve acesso a base de dados em si, tanto que se forem ver o leak, não está no formato original), ele decidiu meter 4/5 shells de forma a conseguir controlar as coisas sem que eu soubesse. Eu, sendo o mais ignorante e ingénuo possível, não suspeitei sequer dele, achava que ele tinha mudado (palavra-chave: achava). Ao abrir o servidor, não tive nenhum problema sério de resolver até receber uma mensagem a dizer se havia possibilidade de alguém ter posto 500 euros de IS visto que estavam a vender mais que 10 vouchers de 1000 moedas. Ora, ao ver isso, fui falar com o rapaz que estava com essa conta e ele diz-me que deu uma conta inteira de IS no GalaxyMT2 pela conta criada no LSM2. Essa mesma pessoa cria um grupo comigo e com o Tiago (era amigo dele, quem diria) e pede nele para dar SQL Injection de forma a desbanir, visto que bani (é errado deixar uma conta com tanto valor sem ter recebido do mesmo andar por aí, independentemente da troca). Consegui o skype da pessoa que tinha vendido a conta e era o Tiago! Ele agiu como se fosse uma nova segunda identidade e como tinha as shells postas, conseguia alterar o valor da tabela coins, onde se situa o valor em moedas de dragão. Na altura eu não sabia que era ele, e como na altura não desconfiava minimamente dele e também por ter feito as tais "proteções", fui-lhe pedir ajuda e pediu-me 25 euros para resolver isso, ou seja, paguei para ele proteger contra ele mesmo (sem que eu tivesse conhecimento visto que não sabia na altura) e aproveitou foi para meter mais shells do que resolver. Jurou por tudo que não era ele mas a mentira tem perna curta, acaba-se sempre por saber independentemente do tempo que possa demorar. Ele usou essa segunda identidade para vender vouchers dentro do meu próprio servidor, a ver a tamanha estupidez da criança (conseguiu ser mais retardado que eu por lhe ter confiado). Apesar de ser ingénuo, sou calculista, levo a expressão "mantém os teus inimigos o mais próximo possível" a peito, sendo que continuei a falar com o rapaz como se nada tivesse acontecido porque sabia que mais tarde ou mais cedo, iria acabar por ter o meu retorno. Infelizmente a criança ficou chateada por não lhe ter dado o que ele queria (a minha quest inicial e a dos professores) e decidiu mandar leak do dia 31/12/2017 com 1466 contas quando neste momento temos acima de 1800. LSM2 Penso que apesar de não andar muito por aqui, nota-se que sou uma pessoa bastante humilde e com carácter, ajudo sempre que for preciso e as pessoas próximas sabem que gosto de ter uma coisa bem trabalhada. O projeto não é algo caído do céu, não começamos há dois meses atrás nem temos falta de experiência. É verdade sim senhora que podemos não saber X ou Y mas a vontade de aprender é algo está sempre presente connosco. Não fiz isto com o objetivo de ter dinheiro, de ser reconhecido ou de viver à base disto. Felizmente, tenho conhecimentos o suficiente para ser convidado a vários projetos, e para os que têm uma ideia errada de mim, não sou nem nunca fui o tipo de pessoa de desistir. As pessoas erram e o meu erro foi ter confiado numa pessoa que vira as coisas ao seu favor, mas isso falarei daqui a pouco. Mais uma vez, peço imensa desculpa a comunidade por tamanha ignorância, são erros que farão crescer enquanto ser-humano. Pastor Alemão O Tiago está em vias de abrir um servidor chamado Symbolic2. Até aqui tudo bem, cada um tem o direito de abrir o que quiser, mas notem no seguinte detalhe: A enterpage dele é exatamente igual a do nosso projeto Não estou a dizer que fomos nós que criamos a nossa até porque isto está pública na internet, mas sendo ele que supostamente entende bem de php e de java, não poderia fazer um do 0 invés de usar o nosso? "Tu não podes jogar verdade ou consequência, o máximo que podes jogar é biter ou coicidência" Não sei se ele vai abrir com o mesmo nome ou com outro por ter dado a conhecer ao público o seu site, mas vocês saberão pela forma que ele é (exatamente igual ao metin2vw, que também o pertencia) e pela falta de esforço que lá foi/é/será depositado. Conclusão Mais uma vez, admito o erro que fiz, admito o erro que fiz, não tenho tido descanso desde que um dos nossos servidores abriu e isto só acabou por complicar ainda mais (não estou a falar no sentido crítico, adoro o que faço). Mais uma vez, o leak foi feito no dia 31/12/2017 sendo que somente 1466 contas foram postas em risco (na verdade, apenas 1/3 dessas contas estão em alarme visto que desde cedo dissemos à comunidade para mudar a palavra-passe pelo menos 2x por mês) quando na realidade temos 1823. Conclusão: Pastor Alemão não mudou nem nunca irá mudar. Avisem a quem vocês quiserem, se ele vos pedir a mínima coisa, não hesitem e digam que ou não sabem fazer ou não têm tempo. Se perguntarem o porquê, mostrem-lhes este tópico. Desculpa pela milésima vez e obrigado, Mário. Podem fechar o tópico.
  12. Sim, isso é totalmente verdade, foi preciso ser mesmo muito estúpido para isso, mas pronto, é a vida e aprendi do pior jeito possível. Não estou a ser incoerente, como é que iria assumir a responsabilidade de algo que não tinha conhecimento? Mal soube das shells, mudei todas as passwords do servidor e avisei constantemente, seja site, fórum, facebook e até no jogo para mudarem a palavra-passe. Já me desculpei e voltarei a desculpar as vezes que forem precisas, nem que tenha que dar uma desculpa pessoal a cada um dos jogadores. Este mesmo tópico foi criado no fórum, não foi só aqui. Os textos não estão em plano e sim encriptadas em md5, coisa estúpida da minha parte saltear as pws ainda com essa encriptação. São com os erros que se aprende, e acredita que aprendi fortemente a minha lição.
  13. Foi por quest que fiz isso, apenas retira-o e ficará a nível 1.
  14. Olá, o meu nome é Mário, tenho 18 anos e ando em programação referentes ao Metin2 desde 2012 ~ 2013. Serviço: Ao contrário de que andam a oferecer, o meu serviço irá oferecer um código simples e de fácil leitura, de forma a que o cliente possa aprender a programar quests fáceis sem a minha ajuda (poderão levar isto como uma espécie de aula por trabalho) sempre com cada linha comentado de forma a poderem compreender-lho. Exemplos de serviços: Dependendo do que o cliente poderá querer, poderei fazer desde o básico até ao complexo, mesmo com possibilidade de ligação com o cliente (lua - python)* Tempo do trabalho: Tal como irão ler no ponto ***, o meu trabalho poderá variar dependente da quantidade de trabalho e também do que possa acontecer na vida pessoal, mas por norma, nenhum trabalho demorará mais que 4 ~ 5 dias a ser concluído (de acordo com o grau da dificuldade). Preço: Os preços variam dependente do trabalho que for investido no serviço e também da complexidade da mesma, no entanto não serei ladrão nem vou querer que se sintam injustificados pelos valores, por isso o preço será sempre o mínimo de 5€ e o máximo de 50€.** Disponibilidade: Por cada serviço que compram, recebem um suporte 24/7.*** Recomendações: Já trabalhei com inúmeras pessoas e servidores de momento, mas as de mais renome fica pelo Tiago (GalaxyMT2/Insanity2), João (EzyMT2), Marco (RM2), sendo estes últimos ainda clientes atuais. Contacto: Skype - i0web.69 PM por aqui. Tipos de pagamentos: Transferência Bancária, Paysafecard, Skrill e Paypal * Apesar de também "dominar" a linguagem python, tenham em consideração que se o trabalho for feito mais para tal e não para a lua, terei o direito de aceitar ou recusar vender o serviço. ** Se eu vender um serviço que for exatamente como especificado no inicio do trabalho e depois quiserem altera-lo ao ponto de me dar mais algum trabalho, o valor poderá aumentar dependente do € inicial. *** Por favor, tenham em consciência que também sou um ser-humano que precisa de descansar.
  15. Acabei todos os trabalhos que me tinham para me dar, incluindo os futuros, por isso estou disponível para mais vendas.
  16. É um servidor ainda para abrir, o nome poderá ser outro mas no momento foi esse que me transmitiram.
  17. Obrigado! Penso que eles não se irão importar com isto, claro: GalaxyMT2/Insanity2: Banimentos (cuja a função é registrar cada valor de forma a ser mais organizado para a equipa), Player vs Player, FAQs, entre outros básicos EzyMT2: Evento de Aniversário e Dungeons RM2: Sistema PvP com monitorização de verificar cada morte Já fiz tantas quests para outras pessoas que não consigo lembrar.
  18. Abre o empire_text_converter.cpp (situa-se no game/src), procura por: void ConvertEmpireText(DWORD dwEmpireID, char* szText, size_t len, int iPct) Substitui toda a função por isto: void ConvertEmpireText(DWORD dwEmpireID, char* szText, size_t len, int iPct) { szText; }
  19. quest syst3m begin state start begin when kill with not npc.is_pc() begin local syst3m = math.random(1, 250) if syst3m <= 10 then -- Probabilidade for superior a 10% game.drop_item_with_ownership(id,1) elseif syst3m <= 20 then -- Probabilidade for superior a 20% game.drop_item_with_ownership(id2, 1) elseif syst3m <= 30 then -- Probabilidade for superior a 30% game.drop_item_with_ownership(id3, 1) end end end end
  20. Isto matou-me. CPythonPrivateShopSearch::CPythonPrivateShopSearch() { } CPythonPrivateShopSearch::CPythonPrivateShopSearch() { }
  21. Mário.

    Criar Quest

    É sempre bom ver membros a tentarem ajudar um companheiro, no entanto existem dois erros que eu gostaria de corrigir, se não se importassem. 1) Não existe nenhuma função chamada sys_chat, confundiram com syschat 2) Inserirem um pc.give_item2 dentro de um button ou info não é nada mas nada aconselhável (e acredito que possa originar erro, nunca testei nada desse gênero) O que realmente queres fazer é algo com isto: quest cyber_gamers begin -- Dá início state start begin -- Dá continuidade -- Ambos de cima são obrigatórios para qualquer quest, uma vez que ela precisa de nome (cybergamers) e também de ser iniciado (start) when letter begin -- Assim que entrares na tua personagem, a missão será visível no teu lado esquerdo send_letter("Cyber-Gamers") -- O nome da missão end -- Fecha a missão, ou seja, fecha tudo o que nós queriamos fazer dentro dela, que neste caso só foi para enviar o nome da missão ao servidor when button or info begin -- Tudo o que for posto aqui, será visível dentro da missão que fizemos anteriormente (when letter begin) say_title("Cyber-Gamers:") -- Título da nossa missão say() -- Vazio, ou seja, funciona como um ENTER say("Escolhe a tua opção:") -- O que irá mostrar local a = select("Teste","Adeus") if a == 1 then -- Condição em caso de terem clicado na primeira opção (Teste), é isto que irá ser mostrado say_title("Cyber-Gamers:") say() say("Parabéns pela tua quest!") elseif a == 2 then send_letter("Cyber-Gamers") return -- Retorna para o começo end -- Fecha a nossa condição de forma a não entrar em conflito com outros end -- Fecha o when button or info, uma vez que já terminamos o que tinhamos para fazer aqui end -- Fecha a continuidade da quest end -- Fecha a quest em si
  22. quest divorcio begin state start begin when 11000.chat."Divórcio " or 11002.chat."Divórcio " or 11004.chat."Divórcio " with pc.is_married() begin if not marriage_manage.check_divorce_time() then return end local u_vid = marriage.find_married_vid() if u_vid == 0 or not npc.is_near_vid(u_vid, 10) then say_title("Casamenteira:") say("") say("Tu não te podes divorciar sem um(a) parceiro(a).") say("") return end say_title("Casamenteira:") say("") say("Para legalizar a separação") say("500.000 Yang e o(a) aprovação do(a) teu(ua) parceiro(a)") say("Tu queres realmente queres te divorciar? ") say("") local MONEY_NEED_FOR_ONE = 500000 local s = select("Sim", "Não") if s == 1 then local m_enough_money = pc.gold > MONEY_NEED_FOR_ONE local m_have_ring = pc.countitem(70302) > 0 local old = pc.select(u_vid) local u_enough_money = pc.gold > MONEY_NEED_FOR_ONE local u_have_ring = pc.countitem(70302) > 0 pc.select(old) if not m_have_ring then say("Traga o teu anel de casamento.") return; end if not u_have_ring then say("O anel de casamento não está contigo.") return; end if not m_enough_money then say_title("Guarda da Cidade:") say("") say("Não tens dinheiro suficiente para o divorcio.") say("") say_reward(string.format("É preciso %de Yang .", MONEY_NEED_FOR_ONE/10000)) say("") return; end if not u_enough_money then say_title("Guarda da Cidade:") say("") say("Não tens dinheiro suficiente para o divorcio.") say("") say_reward("Precisas de 500.000 de yang para te divorciares.") say("") return; end say_title("Guarda da Cidade:") say("") say("Realmente queres divorciar-te?") say("Pode ser um erro.") say("") say("") local c=select("Sim", "Não") if 2 == c then say_pc_name() say("") say("Eu mudei a minha mente.") say("Eu não quero o divórcio.") say("") wait() say_title("Guarda da Cidade:") say("") say("Eu quero que tenhas um casamento feliz.") say("") say("") return end local ok_sign = confirm(u_vid, pc.name.."Tens a certeza que te queres divorciar?", 30) if ok_sign == CONFIRM_OK then local m_enough_money = pc.gold > MONEY_NEED_FOR_ONE local m_have_ring = pc.countitem(70302) > 0 local old = pc.select(u_vid) local u_enough_money = pc.gold > MONEY_NEED_FOR_ONE local u_have_ring = pc.countitem(70302) > 0 pc.select(old) if m_have_ring and m_enough_money and u_have_ring and u_enough_money then pc.removeitem(70302, 1) pc.change_money(-MONEY_NEED_FOR_ONE) local old = pc.select(u_vid) pc.removeitem(70302, 1) pc.change_money(-MONEY_NEED_FOR_ONE) pc.select(old) say_title("Guarda da Cidade:") say("") say("Não estão mais casados.") say("Provalvamente é o melhor para ambos") say("") say_reward("Divórcio efetuado.") say("") marriage.remove() else say_title("Guarda da Cidade:") say("") say("Os papeis não estão completos.") say("Volta em breve.") say("") say_reward("O divorcio foi cancelado.") say("") end else say_title("Guarda da Cidade:") say("") say("O(a) teu(a) parceiro(a) não se quer divorciar") say("Façam mutuo acordo.") say("") say_reward("O divorcio foi cancelado.") say("") end end end end end
  23. Até agora não vi nenhumas serverfiles ou mesmo um servidor português onde possas apostar nas guerras de guild. A quest das serverfiles do SG não funcionam, uma vez que buscava valores errados na source (lembrando que elas eram 34k, antes do leak da source). Tinha feito isto a pensar para o meu servidor (poderão reparar na quest) mas como sou fã de partilha, decidi publicar isto. A quest funciona da seguinte maneira: Só podes apostar se tiveres um bilhete (poderá ser editado o item a querer); Podes fazer quantas apostas tu quiseres dependendo do número de bilhetes tiveres; Não podes apostar nas guerras que a tua guild participa; Tens 4 opções de aposta (facilmente editado); Recebes o dobro do que apostaste. A única pessoa a quem dei esta quest foi ao Tiago, dono do GalaxyMT2. A partir de hoje, será de todos vós. Tutorial game/src/questlua_guild.cpp Pesquisar por: int guild_get_reserve_war_table(lua_State * L) Por baixo de todo o código dele, adicionar: int guild_sistema_apostas(lua_State* L) { FBuildLuaGuildWarList f(L); CGuildManager::instance().for_each_war(f); return 1; } int guild_dar_recompensa(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); CGuild* pGuild = ch->GetGuild(); lua_pushnumber(L, (pGuild!=NULL)?pGuild->GetGuildWarWinCount():0); return 1; } Pesquisem por: { "get_reserve_war_table", guild_get_reserve_war_table }, Por baixo, adicionem: { "sistema_apostas", guild_sistema_apostas }, { "dar_recompensa", guild_dar_recompensa }, Agora só precisam de compilar, sem esquecer de adicionarem isto no quest_functions: guild.dar_recompensa guild.sistema_apostas Em baixo forneço-vos a quest com comentários de forma a explicar o que cada código faz de forma a terem uma leitura mais compreensível: --[[ Esta quest foi feita pelo Mário, influenciado pela @SG / @skype: iw0web.69 Como é que isto funciona? Assim que houver uma guerra de guild, um jogador poderá apostar indo no Beleguim da Batalha. Lá, será disponibilizado todas as informações a saber antes de fazer alguma aposta e o que ganharão se a guild que apostou vença. Por norma, os jogadores que pertençam a uma guild que esteja em war, não poderão apostar, juntamente com os que não possuem o bilhete da aposta, de forma a evitar que criem outras contas/personagens para terem lucro com o sistema. ]] quest sistema_apostas begin state start begin --[[ function dar_recompensa() if guild.dar_recompensa < 1 then say_title("LSM2:") say("Parabéns, a guild que apostaste acabou de ganhar a war.") say("Vais receber 100.000.000.000 yang.") pc.changegold(100000000000) end end ]] -- Isto foi um teste ridículo que fiz when guild_war_observer1.chat."Apostar nas Guerras de Guild" or -- Serão os NPCs onde será posto o sistema // neste caso no Beleguim da Batalha. guild_war_observer2.chat."Apostar nas Guerras de Guild" or -- Porquê que são 3? guild_war_observer3.chat."Apostar nas Guerras de Guild" begin -- Porque existem 3 beleguins da batalha, 1 para cada reino. say_title("LSM2:") -- Daqui para baixo, é o que será exibido. say("Para apostares nas guerras de guild,[ENTER]", "precisas de ter conhecimento de certas coisas:") wait() say_title("LSM2:") say("") say("1. Só podes apostar em guerras que estejam a acontecer.") say("") say("2. Só é possível fazeres 1 aposta se tiveres o bilhete para tal.") say("") say("3. Recebes o triplo do que apostas.") say_reward("Ex: Apostar 1.000.000 yang para ganhar 3.000.000") say("") wait() local g = guild.sistema_apostas() local gname_table = {} table.foreachi(g, function(n, p) gname_table[n] = guild.get_name(p[1]).." vs "..guild.get_name(p[2]) end) if table.getn(g) == 0 then -- Caso não exista nenhuma guerra de guilds a acontecer, é isto que será exibido: say_title("LSM2:") say("") say("Não existe nenhuma guerra de guild a decorrer.") else -- Caso contrário, será isto: if pc.count_item(30300) >= 1 then -- Condição em caso de terem o igual ou superior a 1 item 30300 pc.remove_item(30300,1) -- É removido em caso de existir alguma guerra de guild gname_table[table.getn(g)+1] = "Cancelar" -- Cancela a escolha da aposta. local s = select_table(gname_table) -- Aparece as guilds que estejam em guerra, de forma a poderes escolher a aposta if s != table.getn(gname_table) then local primeira_guild = guild.get_name(g[s][1]) -- Primeira guild, que neste caso é o que desafiou a outra local segunda_guild = guild.get_name(g[s][2]) -- A guild que foi desafiada say_title("LSM2:") say("") say("Escolhe em qual das guilds desejas apostar:") local guild_s = select(primeira_guild, segunda_guild, "Cancelar") if guild_s != 3 then -- Apenas em caso do jogador não clicar na terceira opção, que neste caso é o Cancelar local verificar = guild.get_any_war() --[[ Verifica se a guild está em guerra. Perdão por não fazer outra função para isto, mas para além da preguiça, o get_any_war funciona perfeitamente para este caso // questlua_guild.cpp : if (ch->GetGuild()) lua_pushnumber(L, ch->GetGuild()->UnderAnyWar()); ]] if verificar > 1 then -- Os jogadores que pertençam a guild que está em guerra não poderá apostar. pc.give_item2(30300,1) --[[ Porquê isto? Porque o jogador que pertença a guild que ia apostar, ficaria sem o cofre uma vez já tirado na linha 44. Para compensar, é-lhe dado outro cofre. Sim, há formas mais fáceis de fazer isto, mas para a simplicidade da quest, será feita desta forma. ]] say_title("LSM2:") say("Não podes apostar em guerras que a tua guild participa.") return end say_title("LSM2:") say("") say("Quanto é yang queres apostar?") local tabela_aposta_de_yang = {} table.foreachi(guild_war_bet_price_table, -- Os valores para a aposta serão buscados através da função guild_war_bet_price_table que se encontra no questlib.lua function(n, p) tabela_aposta_de_yang[n] = p.." Yang" --[[ Por default, os valores estão: 10000, 30000, 50000, 100000 Mais uma vez repito, podem alterar o valor das apostas no questlib.lua, pesquisando pelo seguinte: guild_war_bet_price_table ]] end) tabela_aposta_de_yang[table.getn(tabela_aposta_de_yang)+1] = "Cancelar" local apostar_guerra = select_table(tabela_aposta_de_yang) if apostar_guerra != table.getn(tabela_aposta_de_yang) then if pc.gold < guild_war_bet_price_table[apostar_guerra] then say_title("LSM2:") say("") say("Não tens esse montante de yang.") say("") else say_title("LSM2:") say("") say("Aconselho a veres a guerra de guild que apostaste[ENTER]", "de forma a controlares a tua aposta.[ENTER]", "Boa sorte!") pc.changegold(-guild_war_bet_price_table[apostar_guerra]) guild.war_bet(g[s][1], g[s][guild_s+1], guild_war_bet_price_table[apostar_guerra]) guild.dar_recompensa() sistema_apostas.dar_recompensa() end -- if pc.gold < guild_war_bet_price_table[apostar_guerra] end -- if apostar_guerra != table.getn(tabela_aposta_de_yang) end -- if guild_s != end -- if s != table.getn(gname_table) else say_title("LSM2:") say("") say("Não tens o bilhete para apostar nas guerras de guild.") say("Volta quando o tiveres.") end -- if table.getn(g) end -- if pc.count_item(30300) end -- when end -- state end -- quest Qualquer dúvida, não hesitem em deixarem um comentário.
  24. Ver Arquivo gamecore & binário by Mário Boa noite, Quero apresentar a minha gamecore (incluindo a db) e o binário. Introdução Existem várias pessoas que até hoje não sabem ou não querem usar a source e de forma a poder ajuda-los, decidi criar este projeto que envolve toda a comunidade. O objetivo disto é dar-vos um código limpo, atualizado e (se possível) de acordo com o que o público geral quer, no entanto quero desde já realçar por enquanto, não estarei a dar prioridade ao projeto, por isso poderão esperar dias, semanas ou mesmo meses para uma nova versão. A gamecore contém partes que foram retiradas de outras sources de forma a estarem o mais atualizadas e completas possíveis. Estarei a disponibilizar a source, quer do binário quer do game & db como também já compilado, só precisarão de substituir. <- Farei isto sempre que inserir uma nova versão. Eis o que está na versão 1.0.0: --- Projeto / Project: gamecore 2017 Autor / Author: Mário Skype: i0web.69 --- Versão 1.0.0: [PT] Novas makefiles para o game e para a db // foram retiradas do meu projeto Retirado a conversão de texto entre as personagens de diferentes reinos Invés de aparecer "conta não existe", irá aparecer "a conta ou a password está incorreta" Removido o tempo de espera para criar uma guild e para remover alguém da mesma // invés de estarem sempre a usar /e guild_disband_delay 0 /e guild_withdraw_delay 0 Removido o limite de nível para usares a shout Imune desbugado GLOBAL CHAT com opção para desativar no CONFIG // adicionar no vosso config "GLOBAL CHAT: 1" (1 para ativar, 0 para desativar) Comando /ban para os GMs 4 inventários adicionado // thanks fliege 100% de probabilidade para adicionar pedras a armadura/arma Removido taxa de 3% quando vendes um item num NPC Corrigido o exploit do messenger Corrigido o exploit de guild Corrigido o HP negativo depois de teleportar Corrigido o exploit do cubo // thanks fliege [ENG] New makefiles for the game and db // they were removed from my personal project Removed the conversion of text between the characters from different kingdoms Instead of showing "account doesn't exit", it's going to show "the account or the password are wrong" Removed the time for wait to create or remove someone for a guild // instead of always using /e guild_disband_delay 0 /e guild_withdraw_delay 0 Removed the level's limit to use the shout Immune fixed GLOBAL CHAT with option to enable/disable in CONFIG // 1 for enable and 0 for disable Command /ban for the GMs 4 inventories // thanks fliege 100% sucess rate on attaching a stone to a item removed 3% tax when selling a item messenger exploit fixed guild exploit fixed Fixed the negative HP when you teleport Fixed the exploit from cube // thanks fliege Serverfiles recomendado: https://mega.nz/#!ZEFnBZzA!NreJvTgpQXnJQzSnNNedRAd1LjA0JJ9qxHYxDSAIi3w Cliente recomendado: https://mega.nz/#!hcd1XSDQ!DBFTC4k3Vq9UFzJv8ZFOc-Lp8J8OWUHUcSqhAes28gM OBS: Não irei dar prioridade a dúvidas ou erros sobre a compilação da source nem as/ao serverfiles/cliente e sim a qualquer bug que possam ter. Aproveito para dizer que posso dar uma solução que poderei não ter testado antes por falta de tempo. Darei suporte no tópico, mas tenham em consideração que sou um ser humano e como tal, poderei não ter tempo nem disposição. O que gostariam de ver na próxima versão? Digam-me nos comentários. Autor Mário. Enviado 28-08-2017 Categoria Server Files 'reloaded'