Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Uma boa ideia, um passo a mais ao rpg.

Talvez você queira ver:

BestBaiak

[FAQ]Remere's Map Editor - Dúvidas e soluções de bugs 

 

Contato:

1.png.dadb3fc3ee6ffd08292705b6a71e3d88.png Discord:

Link para o post
Compartilhar em outros sites

Muito bom! ^ ^ 

                                                                             1535210279_tumblr_o9b6yoxM1Z1tco8kto1_500(3).gif.f527686e19da738322c39555244decac.gif

                                                             Meus tópicos         

                                                         Se ajudei você deixe seu Rep! para fortalecer a amizade ^^

                                                                              Vamos ajudar o fórum a crescer mais.

                                                                          1641206641_gif-escudo-fla-3d(1).gif.a5d3c0c24824d5272a181aa91c5eda0c.gif

                                                                                                Mengão porra! . .

                                                                     tumblr_oxm8eriUeU1sqwgnro2_400.gif.22e347b2fc58fdfd88dbf84f4bdaa1bc.gif

                                                                                ----- NPC que vende informação -----

                                                                           -----Baú Que dá Outfit se tiver Level -----

                                                                     ----- [Npc] Que vende Stones (itens) por diamonds -----

 

 

                                                                       

                       

Link para o post
Compartilhar em outros sites

Faço das palavras do @Werner, as minhas também.

 

Olha eu não sei como você programou esse lockpicking mas vamos falar em números inteiros e porcentagem ok? Também vamos definir que a cada tentativa, sempre terá uma solução diferente.

Segue o meu exemplo em Java:

public static boolean abrir(int dificuldade, int tentativaPlayer){
	Random random = new Random();
	for (int i = 0; i < dificuldade; i++){
		int numeroRandom = random.nextInt(100) +1;
		if (numeroRandom == tentativaPlayer){
			return true;
		}
	}
	return false;
}

Random, é apenas uma classe java que gera números.

int dificuldade, é a dificuldade do objeto em porcentagem.

int tentativaPlayer, numero de 1 a 100

 

O código é bem intuitivo, mas vou explicar:

1 - Estou gerando números positivos(entre 1 e 100) com a linha int numeroRandom = random.netInt(100) +1;. A quantidade de números gerados é definido pela variável int dificuldade.

2 - Estou verificando se a tentativa do player está correta. Se sim, return true;, e o player abre o bau. Senão return false; depois de tentar todos os números.

 

Este é meu exemplo. Se você quer que sempre seja a mesma solução para um mesmo objeto... ai a complexidade aumenta, você provavelmente precisará salvar os dados desse objeto em algum arquivo ou no banco de dados.

 

Sugestão? Que tal botar a durabilidade do lockpick que está em uso? Assim o player saberá se está próximo de quebrar ou não. ^^

 

Esperto te ajudado. Boa sorte e bom trabalho até agora.

Editado por faelzn69 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@faelzn69 a forma que eu pensei em escolher a dificuldade é o 'range' de erro para abrir por exemplo o lockpick tem que esta na posição entre X e Y para abrir em quanto menor o range mais difícil de achar o ponto por precisar ser um ponto mais preciso, e ao momento que é usado o em um bau ele já salva as informações no bau então todos que tentarem abrir o mesmo bau pegam o mesmo nível de dificuldade, o maior problema que estou tendo é o uso do skill de lockpick deveria ter alguma influenciar e não estou conseguindo pensar em uma formula para essa influencia.

 

Sobre a durabilidade seria tipo uma progress bar na UI?

Editado por vyctor17 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@vyctor17, se baseia no valor da skill de LockPicking para alterar o range. O range já vai ser definido pela dificuldade que você quizer certo? Logo após essa instrução, diminua esse "range de erro" de acordo com a skill do player.... e ai esse calculo de diminuição, imaginei algo assim: 
 

skill = 20;
rate_lockpicking = 2;
fatorDiminuicao = (skill / rate_lockpicking) - rate_lockpicking;
fatorDiminuicao = 8;

range = range - 8;

É só uma ideia kkkkk

Link para o post
Compartilhar em outros sites

@faelzn69 sim, eu pensei em algo assim mais tem o problema de salvar no bau por exemplo surge um bau super raro que ao abrir vai dar muita skill de lockpick alguém com skill alta usa o lockpick pra salvar o range "mais fácil" e depois alguém com skill baixa vem e abre para pegar o bau e ganhar a skill.

Link para o post
Compartilhar em outros sites

Calcule o range de erro usando apenas a dificuldade definida e salve o objeto. Depois disso, vem o calculo de diminuição e etc. É simples de resolver.

 

Alguma chance desse código se tornar publico?

Editado por faelzn69 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

bem legal o sistema, chegou a ver o sistema de lockpicking da pxg? é muito parecido como elder scrolls 

Meu Ultimo projeto em desenvolvimento!

 

http://www.tibiaking.com/forum/topic/47753-show-off-ultimo-projeto-para-download/

 

 

Grupo do facebook para OtServidores! (Divulgação + Criação de Equipe)

 

https://www.facebook.com/groups/otservidores/

 

Link para o post
Compartilhar em outros sites

@faelzn69 não é tão simples, mas eu vou resolver, sobre se tornar publico acho difícil pois tudo que eu postei só criou dor de cabeça para mim, e não tenho tempo para ficar prestando suporte pra quem quer tudo na mão e não quer aprender nada como a maior parte das pessoas que eu vejo no fórum logico que tem exceções.

 

@Gabrieltxu  eu vi sim, é bem mais parecido que o meu eu tentei fazer algo mais parecido com o deles mais não consegui quem sabe mais pra frente

Editado por vyctor17 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@faelzn69 sim, para as próximas vezes vou tentar especificar mais informados sobre o sistema como range de erro que eu falei teria ajudado a quem desenvolve entender melhor oque eu estou fazendo. mais também é bem difícil tentar explicar oque passa na cabeça sobre o desenvolvimento de um código as vezes você esta pensando em algo que separadamente não é nada mais no conjunto com outros sistemas faz alguma diferença.

 

 

Edit: não vou criar outro tópico só pra mostrar isso segue o vídeo aqui e no tópico principal: a ideia é manter a quadrado verde no peixe para pescar ele a velocidade do peixe e o tamanho do quadrado varia de acordo com a dificuldade do peixe.

 

Editado por vyctor17 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@vyctor17, cara... você é um baita de um desenvolvedor. Parabéns, continue com seu trabalho.

Tive algumas ideias para a dificuldade do peixe: velocidade de movimentação do peixe, coloca um delay antes dele mudar de posição.

Resumindo, um peixe mais difícil se movimenta mais rápido, e mais vezes durante a pesca.

 

Mais uma vez, Parabéns.

Link para o post
Compartilhar em outros sites

@faelzn69 não acho que sou um baita desenvolvedor, porque cada coisa que eu tento fazer nova é sempre um desafio, mas gosto de aprender e fazer esses sistemas então me ensinando muita coisa, e são coisas que vão me ajudar pra desenvolver coisas mais complexas no futuro.

Link para o post
Compartilhar em outros sites
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por OT Archive
      OTClient Redemption (mehah) para navegadores
      Em nome da OTServList Brasil e do OT Archive, adaptei o OTClient Redemption para rodar em navegadores web.
       
       
      Source: https://github.com/mehah/otclient/pull/894 Guia de compilação e uso: https://github.com/OTArchive/otclient/wiki/Guia-‐-OTClient-Redemption-Web Demo sem assets: https://demo.otarchive.com Versão modular: https://webclient.otarchive.com Vídeo demonstrando o client se conectando a um servidor:  


       
       
      Em caso de dúvidas sobre o client web ou sobre servidores com suporte a websockets, por favor poste aqui.
       
      Disponibilizou um client web para seu servidor? Me avise para que eu inclua seu OT na categoria Web na OTServList Brasil, com um botão "Jogar Agora".
    • Por matiasz123
      [OTCLIENT SHOWOFF] Questlog Actualizado
      Updated quest log, showing quest details:
      Npc name Npc level Npc outfit Mission status Description Amount of reward experience Number of reward points Enemies you must kill Items to collect  
       

       
      When you click on the follow button, an alternative map opens that shows you the next objective of the mission and at what coordinates:


       
      If you want the system write a comment with your discord
    • Por Underewar
      Tutorial: Criando um Sistema de Enviar efeito com OTClient.


       
      Neste tutorial, vamos criar um sistema simples de Enviar efeito no OTClient.
      Este sistema permitirá que os jogadores ativem um efeito especial e vejam uma janela ao clicar em um botão específico.
      Pré-requisitos:
      Ambiente de Desenvolvimento:
      Certifique-se de ter um ambiente de desenvolvimento configurado com OTClient Edubart. Conhecimento Básico em Lua:
      Familiaridade com a linguagem de script Lua.
       
      Passo 1: Estrutura do projeto
       
      Organize seu projeto conforme abaixo:

      OTC / MODS



      Passo 2: Criando a Interface Gráfica (OTUI)

      game_pass.otui
      Repare que em nossa interface nossos botões de ação entram no caminho do module e iniciam uma função que esta disponivel em nosso game_pass.lua (Client-Side)

       



      Passo 3: Criando funções Client-Side

      Agora com as funções criada podemos chamar elas de acordo com a necessidade em nosso arquivo de interface.
      Por exemplo a função effect() que foi chamada em nosso arquivo de interface.otui agora é criada aqui para mostrar o efeito ao jogador.

      game_pass.lua
       
       
      Passo 4: Registrando o novo Mod

      Agora podemos registrar e iniciar nosso modulo usando o arquivo de configuração

      game_pass.otmod
       

      Feito isso ja podemos ver nosso module no client e enviar opcodes através do gameprotocol e também receber o buffer para manipular os dados podemos utilizar :
      protocolGame:sendExtendedOpcode(14, "1")
      Basicamente oque estamos fazendo é armazenando o valor 1 na variaval 14 do ExtendedOpcode e futuramente podemos recuperar esse valor.

      Recuperamos esse valor em nosso server side data/creatuerscript/otc/game_pass.lua

      Verificando se o opcode é 14 se for 14 então fazemos x ação.

      Show, tendo isso em mente para que o nosso client-side consiga receber com sucesso o efeito enviado ao jogador então utilizamos 

      Passo 5: Criando o Server-side responsavel por enviar o efeito correto ao jogador dependendo do opcode selecionado no nosso cliente.

      data/creaturescripts/otc/game_pass.lua
       
      Passo 6: Registrando o evento para evitar erros futuros!
      Para que tudo funcione corretamente sem erros é  necessário registrar o evento no creaturescript.xml / login.lua

      creaturescript.xml
      <event type="extendedopcode" name="GamePass" script="otc/game_pass.lua" />
      login.lua
          player:registerEvent("GamePass")  


      Ótimo agora ao selecionar o menu recompensa o jogador recebera um efeito.

      Espero que tenha ficado claro como usar Opcodes/ExetendedOpcodes.

      Arquivos usados no tutorrial:
      OTC MODULE
      game_pass.rar
      Creaturescript
      game_pass.lua

      Vi muitos tutoriais desatualizado então resolvi trazer esse!
      Reparem que nesse caso passamos creature como parametro do buffer isso porque precisamos enviar um efeito no player.

      Melhorando a formatação com JSON Encoder

       
       
    • Por maikon1993
      Fala galerinha de boas ?
       
      Preciso de ajuda, preciso de um macro para otcV8, que faça um item dar use no outro.
      Exemplo: Tem um item no servidor "spellswand" e ela é usada para vender item, dando "use" nela e no item que quer vender, queria deixar isso automático, se alguém poder me ajudar agradeço.
    • Por Mutio
      PokeDash by Pota TFS 1.2
      OTCv8
      Dialogue module by Gengo (Reworked)
       
      Hello everyone, would anyone be able to help me improve this dialogue system?
      When I have a lot of text, it expands, and there's a write effect. I made this primarily for myself, but you can also benefit from it.
      The problem is that if there's a lot of text, the window doesn't layout as I intended, specifically regarding the buttons. They get cut off, and I'd like the window to adjust its size based on the amount of text and buttons. For example, if there are 3 buttons, the window should not cut them off but should expand, adding a few pixels at the bottom to display the buttons correctly.
      Additionally, I've implemented a feature in the code to display items in the center if they are required for quests or anything an NPC might ask from the player. I'd like to make sure this feature also adapts correctly to the window size.
      Perhaps there is an expert in the OTC module who could guide me or correct and remove unnecessary code that I've written and is not needed. I must admit that I'm not a very skilled developer in OTC, but I managed to accomplish something. If someone can help me, I can share this dialogue system. (Modified version of Gengo)



      LUA:
       
      local npcWindowDialog local buttonHolder local lblTitle local outfitBox local panelMsg local scrollPanel local lblMessage local LabelText local itemBox local buttondialog local fadeOutEvent = nil local initialHeight = 200 function init() connect(g_game, { onGameEnd = offline }) connect(LocalPlayer, { onPositionChange = onCreaturePositionChange }) ProtocolGame.registerExtendedOpcode(80, function(protocol, opcode, buffer) print("Received extended opcode data: " .. buffer) local data = json.decode(buffer) if (data.action == "close") then offline() elseif (data.action == "create") then NpcDialog(data.data) end end) npcWindowDialog = g_ui.displayUI('npcdialog') buttonHolder = npcWindowDialog:getChildById('buttonHolder') lblTitle = npcWindowDialog:getChildById('lblTitle') scrollPanel = npcWindowDialog:getChildById('scrollPanel') panelMsg = npcWindowDialog:getChildById('panelMsg') outfitBox = npcWindowDialog:getChildById('outfitBox') itemBox = npcWindowDialog:getChildById('itemBox') buttondialog = npcWindowDialog:getChildById('buttondialog') lblMessage = g_ui.createWidget('LabelText', panelMsg) end function terminate() disconnect(g_game, { onGameEnd = offline }) disconnect(Creature, { onPositionChange = onCreaturePositionChange }) ProtocolGame.unregisterExtendedOpcode(80) removeEvent(npcWindowDialog.fadeEvent) npcWindowDialog:destroy() end function clearItemBox() itemBox:destroyChildren() end function offline() clearItemBox() buttondialog:destroyChildren() npcWindowDialog:hide() npcWindowDialog:setHeight(initialHeight) if fadeOutEvent then removeEvent(fadeOutEvent) end end function onCreaturePositionChange(creature, newPos, oldPos) if creature:isLocalPlayer() then clearItemBox() npcWindowDialog:setHeight(initialHeight) npcWindowDialog:hide() end end function openDialog() npcWindowDialog:raise() npcWindowDialog:show() npcWindowDialog:setOpacity(0) npcWindowDialog:setHeight(initialHeight) g_effects.fadeIn(npcWindowDialog, 150) if fadeOutEvent then removeEvent(fadeOutEvent) end fadeOutEvent = scheduleEvent(function() g_effects.fadeOut(npcWindowDialog, 150) end, 30000) end function writeTextEffect(lblMessage, text, delay, callback) lblMessage:clearText() local textSize = #text local initialHeight = npcWindowDialog:getHeight() for i = 1, textSize do scheduleEvent(function() lblMessage:setText(lblMessage:getText() .. text:sub(i, i)) local newHeight = initialHeight + lblMessage:getTextSize().height npcWindowDialog:setHeight(newHeight) end, delay * i) end end function NpcDialog(value) clearItemBox() local Npc = g_map.getCreatureById(value.npcId) lblTitle:setText(Npc:getName()) outfitBox:setOutfit(Npc:getOutfit()) lblMessage:clearText() writeTextEffect(lblMessage, tr(value.message), 15) scrollPanel:setVisible(lblMessage:getTextSize().height > panelMsg.limitText) local textLength = string.len(value.message) local windowHeight = textLength * 10 if value.items ~= nil then local itemHeight = 10 windowHeight = windowHeight + (#value.items * itemHeight) end local maxHeight = 800 if windowHeight > maxHeight then windowHeight = maxHeight end npcWindowDialog:setHeight(windowHeight) if value.items ~= nil then for _, itemId in ipairs(value.items) do local item = g_ui.createWidget('Item', itemBox) item:setItemId(itemId) end end buttondialog:destroyChildren() if value.options ~= '' then local option = value.options:split('&') for i = 1, #option do local button = g_ui.createWidget('OptionButton', buttondialog) button:setText(tr(option[i])) button:setWidth(500) button:setHeight(150) button:setVisible(false) button.onClick = function() g_game.talkChannel(MessageModes.NpcTo, 0, option[i]) npcWindowDialog:setHeight(initialHeight) button:setVisible(false) end end buttondialog:setHeight(#option > 25 and 88 or 25) scheduleEvent(function() for i, child in ipairs(buttondialog:getChildren()) do child:setVisible(true) g_effects.fadeIn(child, 500) end end, (#value.message * 8) + 500) end openDialog() end

      OTUI:

       
      LabelText < Label padding-bottom: 5 font: sans-bold-16px color: #e8c05e text-wrap: true text-auto-resize: true OptionButton < UIButton image-source: /images/ui/buttondialog image-repeated: true text-offset: 0 1 change-cursor-image: true cursor: pointer $pressed: image-color: #dfdfdf44 $disabled: image-color: #dfdfdf55 change-cursor-image: false UIWindow id: npcWindowDialog size: 690 381 visible: false focusable: false image-source: window image-repeated: false anchors.centerIn: parent @onEscape: modules.game_npcdialog.offline() Label id: lblTitle font: sans-bold-16px anchors.top: parent.top anchors.left: parent.left !text: tr('Title') margin: 18 0 5 25 color: #e8c05e text-auto-resize: true UICreature id: outfitBox size: 58 58 anchors.top: prev.bottom anchors.left: parent.left margin: 20 0 5 34 VerticalScrollBar id: scrollPanel height: 65 anchors.top: panelMsg.top anchors.left: panelMsg.right anchors.bottom: panelMsg.bottom pixels-scroll: true step: 14 margin-left: 5 visible: false ScrollablePanel id: panelMsg size: 0 60 anchors.top: lblTitle.bottom anchors.left: outfitBox.right anchors.right: parent.right margin: 8 30 10 25 vertical-scrollbar: scrollPanel layout: verticalBox &limitText: 80 UIItem id: itemBox size: 50 50 anchors.horizontalCenter: parent.horizontalCenter anchors.top: panelMsg.bottom layout: type: horizontalBox cell-size: 50 50 cell-spacing: 12 num-columns: 10 fit-children: true UIScrollArea id: buttondialog anchors.top: itemBox.bottom anchors.left: parent.left anchors.right: parent.right margin: 15 10 25 10 layout: type: grid cell-size: 500 42 flow: true fit-children: true
       

       


×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo