Jump to content
×
×
  • Create New...

PoRaI

Administrador
  • Posts

    121
  • Joined

  • Last visited

  • Days Won

    18

Posts posted by PoRaI

  1. Em 11/08/2018 em 00:24, danielsort disse:

    cara ja tentei suporte deles é horrivel e demorado...

     

    E que tipo de suporte horrível eles dão? Sinto-lhe informar que se você n tem noção nenhuma do que ta fazendo, dificilmente você vai colocar um servidor online e dificilmente outra empresa de hospedagem vá ser melhor pra você, tendo em vista que (eu n conheço bem a área, mas...) provavelmente não vai encontrar nenhuma outra focada em otserv que dá suporte pra otserv.

  2. vc tentou aumentar a tela do seu cliente? Isso provavelmente pq o seu servidor ta com limite de pacotes. Dae ele não envia toda a info pro cliente descriptografar. Pra resolver o problema é só aumentar o número de pacotes que o servidor envia. Nesses tutoriais de aumentar a tela ensina a fazer isso.

  3. 4 minutos atrás, Pokeultion disse:

    Sim, tava fuçando aqui ontem e consegui dessa forma: taskWindow:recursiveGetChildById('labelPoke'):setText(param[1]). A unica coisa que não está acontecendo é que ele não ta executando o opcode quando abre a janela não sei pq kk, mas isso acho que fuçando eu vejo aqui, fiz uma gambiarrinha de executar uma talk pra executar o opcode pra atualizar quando abrir a janela kk. poderia só me explicar por favor, qual a importancia e função de declarar no começo taskWindow = nil ? E se tem alguma diferença em fazer função separada ou fazer a função direto no opcode como vc fez, ou se era algo errado na minha função ? Obrigado Porai, ajudou muito mano. Obrigado Pela ajuda também PostadorHunter e Bananafight, me ajudaram mt também, obrigado pela atenção de todos!

    Fuçando aqui também já consegui fazer a task trocar automaticamente a cada determinado tempo, toda vez que abrir a janela caso não tenha passado o tempo, o player não podera trocar XD. Agora falta fazer a parte de "rank" das tasks, como rank a,b,c etc... poderia me dizer teoricamente como devo proceder ? pra ver se consigo aplicar a teoria na pratica aqui... Obrigado pessoal ❤️

    Em Lua faço isso por padronização. Saber quais variáveis estou utilizando no módulo e caso eu queira iniciar com um valor diferente de nil, a declaração vai para todo o código. A única coisa que influenciaria mesmo era se você chamasse a variável como local.

    Sobre a função ser ou não separada, acredito que não tem problemas, rs. Deve ter sido problema a forma como você implementou. Uma das coisas erradas que notei foi inicializar o opcode TODAS as vezes que executasse o show, é super errado, afinal, você só taria inicializando os opcodes quando clicasse no SHOW e não receberia eles por isso nunca iria funcionar além de dar conflito de usar o mesmo opcode várias vezes. Você só inicializa o opcode uma vez, fora de outras chamadas.

    Ue, é relativo como o seu sistema de task funciona, kk. Eu fiz uma vez pra um servidor chamado World of Piece só que era uma gambiarra enorme, pq eu só reaproveitei um código de task que o servidor usava e já estava online e eu não tinha muita liberdade em melhorar. Lá o cliente envia uma mensagem pro servidor "pedindo" as informações da outra aba de task, fazendo as verificações se tá liberado ou não.

  4. 12 horas atrás, Pokeultion disse:

    Agora sim, está retornando esse erro:

    
    ERROR: protected lua call failed: LUA ERROR:
    /game_tasks/tasks.lua:7: attempt to index a nil value
    stack traceback:
        [C]: ?
        /game_tasks/tasks.lua:7: in function 'callback'
        /gamelib/protocolgame.lua:17: in function </gamelib/protocolgame.lua:14>

    OBS: Os prints estão retornando O nome do pokémon e a quantidade.

    #EDIT: Dei uma saida, agora que voltei estava fazendo uns testes. Coloquei o taskWindow:getChildById('labelPoke'):setText(param[1]) em outro lugar de outra forma. Coloquei o seguinte dentro da função show():   taskWindow:getChildById('labelPoke'):setText('eoq') só pra testar. E gerou o mesmo erro:

    
    
    ERROR: protected lua call failed: LUA ERROR:
    /game_tasks/tasks.lua:44: attempt to index a nil value
    stack traceback:
        [C]: ?
        /game_tasks/tasks.lua:44: in function 'show'
        /game_tasks/tasks.lua:56: in function 'callback'
        /client_topmenu/topmenu.lua:31: in function </client_topmenu/topmenu.lua:29>

     

    Provavelmente ele não está encontrando o labelPoke (retornando nil value) como filho da taskWindow, posta o arquivo .otui aí. Ou também você pode usar no lugar do getChildById a função: recursiveGetChildById. Só cuidado com conflito de ids, rs. 
    taskWindow:recursiveGetChildById('labelPoke'):setText('eoq')

  5. 7 horas atrás, Pokeultion disse:

    Notei isso, já arrumei mas da na mesmsa jaisjsaije. Na function show() se eu printar a ProtocolGame.registerExtendedOpcode(255, tasksInfo) aparece isso:

      Mostrar conteúdo oculto

    OBS: Aparece isso independente do numero que eu coloque no opcode.

     

    Nada Acontece.

     

    @TOPIC

    Tentei colocar isso dentro da function show() só pra testar, e nada acontece também:

    
    taskWindow:getChildById('labelPoke'):setText('texto')
    
      Label
        id: labelPoke
        !text: tr('Teste')

    estou usando o Label desse jeito, acho que essa parte n tem mt segredo o.O

    Tenta novamente, atualizei o código ali em cima. Se não der, provavelmente algo vc está fazendo algo de errado. 

  6. Em 22/06/2018 em 15:59, Pokeultion disse:

    Agora que você falou, tentei colocar na função show(), mas nada acontece. Caso faça alguma diferença, olha o script.lua inteiro:

      Ocultar conteúdo
    
    
    function init()
      connect(g_game, { onGameEnd = onGameEnd })  
    
      taskWindow = g_ui.displayUI('tasks')
      taskWindow:hide()
    
      shopTabBar = taskWindow:getChildById('shopTabBar')
      shopTabBar:setContentWidget(taskWindow:getChildById('shopTabContent'))
    
      marketPanel = g_ui.loadUI('market')
      shopTabBar:addTab('Market', marketPanel, '/images/game/shop/market')
    
      taskButton = modules.client_topmenu.addRightGameButton('taskButton', tr('Tasks'), '/images/topbuttons/emerald_shop', toggle)
      taskButton:setWidth(36)
    end
    
    function terminate()
      disconnect(g_game, { onGameEnd = onGameEnd })
      taskWindow:destroy()
      taskButton:destroy()
    end
    
    function onGameEnd()
      if taskWindow:isVisible() then
        taskWindow:hide()
      end
    end
    
    function show()
      taskWindow:show()
      taskWindow:raise()
      taskWindow:focus()
      addEvent(function() g_effects.fadeIn(taskWindow, 250) end)
      ProtocolGame.registerExtendedOpcode(85, tasksInfo)
    end
    
    function hide()
      addEvent(function() g_effects.fadeOut(taskWindow, 250) end)
      scheduleEvent(function() taskWindow:hide() end, 250)
    end
    
    function toggle()
      if taskWindow:isVisible() then
        hide()
      else
        show()
      end
    end
    
    function tasksInfo(protocol, opcode, buffer)
    local param = buffer:split('@')
    print(param[1])
    print(param[2])
    taskWindow:getChildById('labelPoke'):setText(param[1])
    taskWindow:getChildById('labelQuant'):setText(param[2])
    end

     

    Obrigado.

    É fora, não dentro de funções.
     

    taskWindow = nil
    
    ProtocolGame.registerExtendedOpcode(80, function(protocol, opcode, buffer)
       local param = buffer:split('@')
       print(param[1])
       print(param[2])
       taskWindow:getChildById('labelPoke'):setText(param[1])
       taskWindow:getChildById('labelQuant'):setText(param[2])
    end)
    
    function init()
      connect(g_game, { onGameEnd = onGameEnd })  
    
      taskWindow = g_ui.displayUI('tasks')
      taskWindow:hide()
    
      shopTabBar = taskWindow:getChildById('shopTabBar')
      shopTabBar:setContentWidget(taskWindow:getChildById('shopTabContent'))
    
      marketPanel = g_ui.loadUI('market')
      shopTabBar:addTab('Market', marketPanel, '/images/game/shop/market')
    
      taskButton = modules.client_topmenu.addRightGameButton('taskButton', tr('Tasks'), '/images/topbuttons/emerald_shop', toggle)
      taskButton:setWidth(36)
    end
    
    function terminate()
      disconnect(g_game, { onGameEnd = onGameEnd })
      taskWindow:destroy()
      taskButton:destroy()
    end
    
    function onGameEnd()
      if taskWindow:isVisible() then
        taskWindow:hide()
      end
    end
    
    function show()
      taskWindow:show()
      taskWindow:raise()
      taskWindow:focus()
      addEvent(function() g_effects.fadeIn(taskWindow, 250) end)
    end
    
    function hide()
      addEvent(function() g_effects.fadeOut(taskWindow, 250) end)
      scheduleEvent(function() taskWindow:hide() end, 250)
    end
    
    function toggle()
      if taskWindow:isVisible() then
        hide()
      else
        show()
      end
    end

     

  7. 2 minutos atrás, XZero disse:

    @PoRaI Parece que o problema está apenas nesta parte :v

    Capturar.PNG

    Pelo q pesquisei foi algum unicode na hr q tu deu ctrl c / ctrl + v. Revê se oq vc copiou são realmente espaços, rs.

  8. 13 horas atrás, XZero disse:

    @PoRaI Compila normalmente , so ta dando problema com o Name Displacement mesmo , além disso a troca de target que o Ceetros postou foi sem falhas.

    Posta todos os erros aí, ali na sua print ta dizendo que deu 12 erros, mas você não mostrou nenhum. Manda o log.

  9. 46 minutos atrás, XZero disse:

    @PoRaI Mesmo erro , ja testei nas versões 0.6.5 , 0.6.6 e 0.6.7 , não sei o que estou fazendo de errado , queria saber se podia me passar os arquivos já configurados se possivel , mas  se não der tudo bem.

    vc já conseguiu compilar o otclient antes de fazer isso? vc tá com problemas em compilar o otclient, não o código, awiehawe.

  10. 4 minutos atrás, luis700 disse:

    Acho que nem todos precisa ficar separando,  pelo menos alguns até vai, como Width e Height para representando o Size.

    A separação poderia deixar mais para frente é só uma sugestão que ficaria boa, é que ali no meu ele já pega as propriedades do objeto selecionado e nem precisei ficar separando na mão, agora no seu caso eu não sei como fica se da trampo de fazer estas separação.

    A separação é mais fácil, do que fazer junto, awiehauwieh. O problema é que talvez ficaria um spam de coisas pra configurar, ou não, sei lá... vou vendo aqui.

  11. 6 horas atrás, luis700 disse:

    O exemplo seria +- esse aqui 

    exemplo.png.4249f45a51ce8daf7b81159a6cfd5783.png

    Estava fazendo um uns tempinho atras, porem fiquei na duvida de ficar gerando os 3 arquivos otui, lua e otmod.

    Hmm no caso seria tudo separado? Size em width height, image border em image border top, image border left, image border right, image border bottom?

  12. 9 horas atrás, nociam disse:

    Tenho uma duvida nao ta erro mais o porque disso?

     

    Screenshot_1.thumb.png.1f56e867f407a07c9434792039a4819e.png

     

    Abaixo fiz desse jeito e nao tem mais erro mais e correto?

     

    Screenshot_1.thumb.png.84213fe51e21b52ad4089908d8cbcedb.png

     

     

    Não faça isso, tá errado, aksdljadj. Não tem sentido você por o std::map dentro da struct. E outra, tenta deixar só:
    effectiveness[COMBAT_FIREDAMAGE] = {COMBAT_FIRE, ...} sem o Effectiveness(

    O erro pode ser da IDE, não sei... ou algo que você fez, sei lá, kkk. Pq a struct ta certa. :X

  13. 58 minutos atrás, CoehManeh disse:

     

    Acho válido qualquer pré-configuração de um programa que venha otimizar o processo. Como eu ainda não vi toda a estrutura não da pra dizer exatamente. Porém, está de parabéns pela iniciativa/continuidade de uma ideia/projeto. O que eu mais entendo disso ai é HTML/HTML5 e um básico de Javascript. Sobre o Electron, conheço pelo fato de ter utilizado muito o ATOM. Estou acompanhando seu projeto, amigo!

    Esse é o espirito, haha. Pensei em desenvolver usando Python ou C++, que eu também programo, mas pela curiosidade de usar o Electron eu acabei usando o Javascript. HTML5/Javascript eu usei para fazer o image-border:

    uZS3hVj.png

    (foi meio chatinho alinhar isso)

    36 minutos atrás, luis700 disse:

    Em questão das configurações, poderia fazer tipo um object inspector um pouco mais estruturado igual ao que vemos nas IDE's, bom é uma sugestão.

    Manda uma print ai pra gente, asdkjlsadklj. Eu preciso de referências, sad. Não consigo pensar em nada que ajude na hora de configurar.
    Você talvez me deu uma boa ideia... o object inspector do chrome... vou dar uma olhada se ficaria bom.
    E não se preocupem com o visual do programa, por enquanto, rs... estou focando mais em funcionalidade, layout vem depois.

  14. A um tempo atrás me perguntaram isso no discord do xtibia (por isso n posso responder por la, rsss), é basicamente assim:

    struct EffectAttributes {
       uint32_t efeito;
       uint32_t cor;
    };
    
    std::map<std::string, EffectAttributes> pokeattributessuamae;
    
    pokeattributessuamae["Fire"] = {10, 30};
    
    std::cout << pokeattributessuamae["Fire"].efeito << std::endl;
    std::cout << pokeattributessuamae["Fire"].cor << std::endl;

    No seu caso, é só adaptar. Trocar std::string por combattype_t e as informações que você quer da tabela.

  15. Em 16/06/2018 em 10:24, luis700 disse:

    Boa mano, tomara que este projeto siga em frente e venha ajudar muitos, lembro que o Tony Araujo fez um desses +- porém não sei se teve sucesso ou se levou o projeto adiante.

    Será Open Source?

    Qual linguagem você utilizou para fazer?

    Esse projeto na real, foi uma curiosidade minha em testar a framework Electron, só que acabei investindo mais tempo nele do que imaginei pq acaba que Javascript é uma linguagem bem simples. Basicamente: Javascript, HTML/HTML5 e o framework Electron. Inclusive, Electron foi usado para criar o Discord, o novo Skype, o Atom, o Slack, entre outros...

    //////

    O que vocês acham? Qual seria a melhor forma de configuração?
    aUMQbUE.png
    Por enquanto, fiz assim. Aceito recomendações/sugestões de formas de configurações vindo de outros programas.

  16. Em 13/06/2018 em 19:04, epaminombas disse:

    Verdade kkk não tinha pensado nisso, valeu pela contribuição vai ajudar muito no meu projeto! 

     

    Você me respondeu a um topico sobre o docastspell e deu um erro la na compilação help u.u

    luascript.cpp(9967): error C2664: 'bool InstantSpell::playerCastInstant(Player *,std::string &)': não é possível converter um argumento 2 de 'const char [1]' em 'std::string &'

     

    Sobre o offset no dat editor ele não poe valores de X,Y negativos ai não é possivel centralizar o efeito encima do personagem apenas via script da spell

    O fato do offset não possuir valor negativo é que mesmo se tivesse, teríamos problemas com a renderização do otclient. Se tivesse offset negativo, a sprite iria ficar embaixo das sprites dos sqms ao lado (no seu caso, o efeito). Veja um vídeo para entender um pouco melhor sobre a renderização do otclient.

     

  17. 29 minutos atrás, batuax disse:

    funfou não porque esse item é uma parede eu tentei alterar mais n foi kkk , tem como botar pra ser o id 216 n no caso o cash ?

    local playerA= {
    	{x=292, y=1042, z=9}, -- Lugar onde o primeiro player vai estar
    	{x=291, y=1042, z=9}, -- Lugar onde o segundo player vai estar
    	{x=290, y=1042, z=9}, -- Lugar onde o terceiro player vai estar
    	{x=289, y=1042, z=9}, -- Lugar onde o quarto player vai estar
    }
    
    local playerB={
    	{x=344, y=1026, z=9}, -- Lugar onde o primeiro player vai aparecer
    	{x=305, y=1069, z=9}, -- Lugar onde o segundo player vai aparecer
    	{x=245, y=1107, z=9}, -- Lugar onde o terceiro player vai aparecer
    	{x=309, y=1125, z=9}, -- Lugar onde o quarto player vai aparecer
    }
    
    function onUse(cid, item, fromPosition, itemEx, toPosition)
    	local players = {}
    	for _, pos in pairs(playerA) do
    		local player = getTopCreature(pos).uid
    		if not isPlayer(player) then
    			return doPlayerSendCancel(cid, 'You need 4 players for this quest.')
    		elseif getPlayerLevel(player) < 300 then -- Level
    			return doPlayerSendCancel(cid, 'All players need to have level 300 or higher.')
    		end
    		table.insert(players, player)
    	end
    	for id, pos in pairs(playerB) do
    		doTeleportThing(players[id], pos, false)
    		doSendMagicEffect(pos, CONST_ME_POFF)
    		doSendMagicEffect(pos, CONST_ME_ENERGYAREA)
    	end
    	return true
    end

     

  18. 12 minutos atrás, Marshmello disse:

    tipo vai ficar 3 player uma uma x pos cada e os 3 vai ter que ter 2 itens x e 1 pokemon sumonado (os 3)

     

    exp: 

    Player 1, item Black stone, ancient amulet + ditto

    Player 2, item Black stone, ancient amulet + ditto

    Player 3, item Black stone, ancient amulet + ditto

    Alterando um pouquinho o código do nosso amiguinho a gente consegue:

    local playerA = {
    	{x=292, y=1042, z=9}, -- Lugar onde o primeiro player vai estar
    	{x=291, y=1042, z=9}, -- Lugar onde o segundo player vai estar
    	{x=290, y=1042, z=9}, -- Lugar onde o terceiro player vai estar
    	{x=289, y=1042, z=9}, -- Lugar onde o quarto player vai estar
    }
    
    local playerB={
    	{x=344, y=1026, z=9}, -- Lugar onde o primeiro player vai aparecer
    	{x=305, y=1069, z=9}, -- Lugar onde o segundo player vai aparecer
    	{x=245, y=1107, z=9}, -- Lugar onde o terceiro player vai aparecer
    	{x=309, y=1125, z=9}, -- Lugar onde o quarto player vai aparecer
    }
    
    local playerNeed = {	
    	items = {
    		{1000, 2}, -- items 1, {itemid, quantidade}
    		{1000, 2}, -- items 2, se for precisar. {itemid, quantidade}
    		{1000, 2}, -- items 3, se for precisar. {itemid, quantidade}
            -- items infinitos, se for precisar.
    	},
    	pokemon = "Ditto",
    }
    
    function onUse(cid, item, fromPosition, itemEx, toPosition)
    	local players = {}
    	for _, pos in pairs(playerA) do
    		local player = getTopCreature(pos).uid
    		if not isPlayer(player) then
    			return doPlayerSendCancel(cid, "You need 4 players for this quest.")
    		elseif #getCreatureSummons(player) ~= 1 or getCreatureSummons(player)[1] ~= playerNeed.pokemon then
    			return doPlayerSendCancel(cid, "All players need a pokémon "..playerNeed.pokemon..".")
    		end
    		for _, item in pairs(playerNeed.items) do
    			if getPlayerItemCount(player, item[1]) < item[2] then
    				return doPlayerSendCancel(cid, "All players need a item "..(getItemInfo(item[1]).name)..".")
    			end
    		end
    		table.insert(players, player)
    	end
    	for id, pos in pairs(playerB) do
    		for _, item in pairs(playerNeed.items) do
    			doPlayerRemoveItem(players[id], item[1], item[2])
    		end
    		doTeleportThing(players[id], pos, false)
    		doSendMagicEffect(pos, CONST_ME_POFF)
    		doSendMagicEffect(pos, CONST_ME_ENERGYAREA)
    	end
    	return true
    end

     

  • Recently Browsing   0 members

    • No registered users viewing this page.