antiblock
https://i.imgur.com/aJ17bf7.gif

Mário.

Membro Elite
  • Content Count

    155
  • Joined

  • Last visited

  • Days Won

    11

Posts posted by Mário.


  1. 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.


  2. Em ‎18‎/‎07‎/‎2018 at 13:36, pnTm disse:

    Boas malta, 

     

    Estou com problemas em jogar, ao abrir aparece-me o seguinte erro " Metin2.CREATE_NO_APPROPRIATE_DEVICE" alguém sabe como resolver?

     

    Cumprimentos.

     

     

    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.

     

    8 horas atrás, Vanessa disse:

    Caro amigo, ainda funciona, mudar o vosso header não chega. 

     

     

    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.


  3. 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:

     

    wdNHmaL.png

     

    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.

     


     

     

    TFLBesZ.png

     

    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!

     

     


  4. 15 horas atrás, ManecasPT disse:

    Bom serviço mas quem hoje em dia no seu perfeito juízo compra serviços no metin2 ? Na altura que ainda a Source não estava leak não havia nada destas comunidades  a ajudar as pessoas hoje? Hoje em dia ah de tudo até bicos online!

     

     

    Tempo é dinheiro e dinheiro é tempo.


  5. Em ‎25‎/‎03‎/‎2018 at 13:49, Iioris disse:

    tenho o mesmo erro, alguem sabe a resoluçao?

     

     

    É 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.

     


  6. Citar

    não é mesma coisa mas hoje em dia não é método mais seguro acho que ele percebeu ideia, basta por no google md5 decrypter que consegue se sem muita dificuldade decriptar a pass. Com o md5+salt é capaz de ser mais seguro, usa uma espécie de SALT na tua password por exemplo: $password = md5($password . '=bia-ny1Ds2.dalj8id1') e aí vemos se alguém te descobre as passwords... kkkkkkkk  Se conseguem "hackear" a tua base de dados, também devem conseguir decriptar o md5 das passwords. Se não encriptares, estás só a poupar-lhes tempo.

     

    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:

    191Yeab.png

     

    Depois:

    4H6Veab.png

     

    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)?

     


  7. 11 minutos atrás, p0w3r0ff disse:

    Eu sei que eu tenho um jeito meio bruto dizer o que penso o que pode magoar e ofender. intenção não é essa mas cada um tem o seu jeito.

    Levar scam do pastor em 2018 é preciso ser muito estúpido, O gajo nunca soube programar nem tão pouco proteger um site e tu acreditas nas historias dele?

    mínimo que podias fazer era recolher feedback da pessoa em questão ou mais simples, basta pesquisar palavra pastor para ver os milhares de tópicos que temos por ai sobre o gajo. Nesta vida aprendemos com os erros, acho que aprendeste da pior maneira deves um pedido desculpas cada jogador. Podes ser uma pessoa muito humilde e por ai fora não te conheço não sou ninguém para julgar ou criticar mas acho que és uma pessoa incoerente só fizeste este tópico porque alguém partilhou as contas e não soubeste assumir responsabilidade pelos teus erros desde o inicio agora é só blablablablabla.

     

    Aviso aos jogadores de LSM2

     

    Foram expostas 1466  contas do servidor, com o e-mail, senha em texto plano e id das mesmas.

    Caso alguma conta seja a vossa, devem trocar a vossa senha o mais cedo possível, para evitar que sejam roubados.

    Caso usem a mesma senha noutros locais da internet, devem trocar as senhas nos mesmos. 

    Podes gerar uma senha aleatória e segura em: http://icyber.me/senha.html

     

    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.


  8. Em ‎27‎/‎11‎/‎2017 at 14:39, G00dMean disse:

    Olá.

    Antes de mais obrigado pelas files.
    Instalei as files sem problema. Fiz um Autopacher  para este cliente e funciona super bem!
    Fui ao config para mudar o level máximo a 150, e funcionou.
    Mas já perdi uns 4 dias a tentar descobri porque razão não consigo tirar o iniciar a level 70, e meter a level 1, e ajustar os stauts.
    Já procurei em vários foruns e não consegui encontrar a solução.

    Tu ou além me pode ajudar?
    Obrigado 

     

    Foi por quest que fiz isso, apenas retira-o e ficará a nível 1.


  9. 3 horas atrás, .тιαgσ disse:

    Boa sorte, pelo que já vi aqui pareces ser de confiança. 

    Podias ter mostrado alguns dos teus trabalhos nesses servidores (se os donos assim o permitirem é claro)

     

    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.


  10. 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.


  11. 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;
    }

     


  12. 33 minutos atrás, Syst3m disse:

    erro na quest ao introduzir no servidor!
    erro:
    "qc in malloc(): error: allocation failed     Abort (core dumped) ", alguma coisa assim!

     

    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

     


  13. É 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
    
    			

     


  14. 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

     


  15. 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.


  16. quest supremept begin -- Todas as quests começam obrigatóriamente desta forma: quest nomedaquest begin
    	state start begin -- Eu considero isto como uma sub iniciação para o corpo da quest. Podes inserir qualquer tipo de função que tu quiseres
    		function supreme()
    			syschat("SupremePT")
    		end -- Fecha o function
    
    		when login with pc.get_name() == "SupremePT" begin -- Inicialização da quest. Daqui para baixo, insere o que quiseres.
    			supremept.supreme() -- O corpo da quest.
    		end -- Fecha o when
    	end -- Fecha o state
    end -- Fecha a quest

     

    Não podes traduzir os códigos de lua para português, só o corpo dela e funções que tu possas criar (tal como eu fiz com o exemplo acima).

     

    Para introduzires uma quest, só precisas de dar ./qc nomedaquest.quest que será implementado no servidor, quer tenhas alterado algo ou não. 


  17. 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. 

     

     


     


  18. A culpa é totalmente da escola, deram uma falsa informação e agora não querem assumir as culpas.

    Recomendo-te a revoltares com a secretaria até que fizessem algo, nem que te dessem autorização para fazeres o exame da terceira fase.

    Tenta também falar com o diretor, visto que foi ele que deu a tal informação. Com o seu cargo, deve ter poder o suficiente para fazer algo, digo eu.