Ir para conteúdo
  • Cadastre-se

edaegonis

Membro
  • Total de itens

    21
  • Registro em

  • Última visita

Posts postados por edaegonis

  1.  

    20 minutos atrás, Yinz disse:

    O que seria melhor que o Node hoje na atualidade? Dino? Eu citei Node e React, porque pra mim no momento é uma versão lts de ambos estáveis, com uma comunidade gigantesca e muito conteúdo, e bibliotecas para consumir. E o bom do Javascript como tu citou é que consegue alcançar todos os tipos, inclusive com o React Native. 

    Eu to bastante afim de iniciar esse projeto sim.

     

    O que quis dizer é que usar PHP é meio ultrapassado. React e Node não é mais “estar na moda” e sim se adaptar ao mercado. Estou apenas incentivando o uso xD

     

    Mas nada contra os AAC atuais. Inclusive servem muito bem o propósito.

     

     

    @Yinz inclusive, já tenho uma base em Node de uma API que consulta os dados MySQL de um OT.
    Só preciso fazer uns updates pois isso foi feito em 2018: https://github.com/edaegonis/forgottensite
     

    E também trocar de nome, pois usar "forgotten" é meio plágio.

    Vou iniciar um projeto novo e pegar algumas coisas que existem nesse repositório.

    Quando eu fizer isso eu coloco a URL aqui para quem quiser contribuir.

    Vamos se falando pra dar continuidade ?

  2. Cara, confesso que estou surpreso de ler esse tipo de sugestão, e fico feliz pois já estive pensando nessas possibilidades.

    NodeJS e React já não são tecnologias tão recentes,

    e hoje em dia a linguagem Javascript consegue alcançar todos tipos de soluções relacionadas a web e inclusive mobile.

    Acho que já passou da hora de trazer algo nesse sentido para OTServs. Só que, antes tarde do que nunca haha ?


    Estou me colocando a disponibilidade pra fazer parte desse projeto. Hoje eu trabalho como engenheiro e uso javascript em todas minhas aplicações.
    Vamos começar com um MVP com as funcionalidades mais essenciais de gerenciamento de conta(login, characters, etc.) e o básico de análise(highscores, etc.)
    O que acha?



     

  3. É simples, você pode usar o player storage para chegar nesse resultado.

     

    Na sua função verifique a vocação do player, e veja se o storage (que você criou) dele é menor do que o valor permitido para a vocação.

    Caso positivo, você adiciona vida/mana máxima ao player, e adiciona +1 ao valor da storage.

    Caso negativo, você pode enviar uma mensagem dizendo que já usou o limite

  4. Bom cara, eu posso tentar te ajudar, mas acho difícil pois o distro crashou no meio da conexão com o banco de dados, e ficamos sem nenhum erro para começar a debugar.

     

    Primeiramente, você tem o mysql server configurado na sua máquina? Se você tem o XAMPP para configurar o Apache do seu website, ele também pode configurar o ambiente do MySQL. 

     

    Tente acessar o seu MySQL pelo terminal/bash (através do painel de controle do Xampp). Se você conseguir, digite esse comando:

    show databases;

    E me mostre o resultado

  5. Esse erro está sendo causado pois a tabela player_spells não existe no seu banco de dados.

     

    Acesse o seu banco de dados e rode essa query:

    CREATE TABLE `player_spells` (
    	`player_id` INT(11) NOT NULL,
    	`name` VARCHAR(255) NOT NULL,
    	INDEX `player_id` (`player_id`),
    	FOREIGN KEY (`player_id`) REFERENCES `players` (`id`) ON DELETE CASCADE
    );

    e veja se funciona

  6. Você está utilizando o TFS 1.3 e aparentemente existe um script chamando a função getPlayerStorageValue, e essa função não existe no TFS 1.3

     

    Ela deve ser substituída por player:getStorageValue(key)

     

    Se você me passar o código eu posso te dar uma solução com mais precisão

  7. Esse erro está no arquivo newadvance.lua, na linha 10.

     

    No final dessa linha está chamando a função secondsToClock, mas essa função não é global e não está nesse arquivo.

     

    Solução:

    Acho essa linha deveria estar no início do arquivo newadvance.lua:

    STORAGE_FOR_TIMESTAMP = 15854

     

    Insira essa função no final do arquivo newadvance.lua:

    local function secondsToClock(seconds, worded) -- Returns inputted seconds as a formatted string
      local seconds = tonumber(seconds)
     
      if seconds <= 0 then
        if worded == true then return "0 seconds."; else return "00:00:00"; end
      else
        local hours = string.format("%02.f", math.floor(seconds/3600));
        local mins = string.format("%02.f", math.floor(seconds/60 - (hours*60)));
        local secs = string.format("%02.f", math.floor(seconds - hours*3600 - mins *60));
        if worded == true then
            return ((seconds<3600 and "") or ((math.floor(seconds/3600) == 1 and "1 hour, ") or (math.floor(seconds/3600)) .. " hours, ")) .. ((seconds < 60 and "") or ((math.floor(seconds/60 - (hours*60)) == 1 and "1 minute, and ") or (math.floor(seconds/60 - (hours*60)).. " minutes, and "))) .. ((math.floor(seconds - hours*3600 - mins *60) == 1 and "1 second") or (math.floor(seconds - hours*3600 - mins *60).. " seconds")) .. "."
        else
        return hours..":"..mins..":"..secs
        end
      end
    end

     

     

  8. Bom pessoal, esse é um script bem simples, mas eu gosto da ideia dele, e não consegui encontrar por aí.

     

    Citar

    Ao usar um item, a função irá criar monstros em determinadas posições e salvar seus cid's no global storage.

     

    Após isso, ao dar use, a função verifica e cria apenas os monstros que já morreram.

     

    É uma boa solução pra quando você quer summonar monstros numa quest, e se tiver vários players não ficará summonando monstros várias vezes.

     

    Esse script está sendo usado ao dar use num chest, mas está a seu critério onde utilizar.

    monstersToCreate = {
        [1] = {
            name = 'Lost Berserker',
            position = {x = 1034, y = 1425, z = 15}
        },
        [2] = {
            name = 'Lost Thrower',
            position = {x = 1028, y = 1424, z = 15}
        },
        [3] = {
            name = 'Lost Basher',
            position = {x = 1034, y = 1427, z = 15}
        },
        [4] = {
            name = 'Lost Thrower',
            position = {x = 1040, y = 1423, z = 15}
        },
        [5] = {
            name = 'Lost Husher',
            position = {x = 1030, y = 1430, z = 15}
        },
        [6] = {
            name = 'Lost Husher',
            position = {x = 1038, y = 1429, z = 15}
        }
    }
    
    function onUse (player, item, param)
        if item:getActionId() == 45016 then
            if player:getStorageValue(45016) == -1 then
                player:addItem(2517, 1) -- shield of honour
                player:addItem(2502, 1) -- dwarven helmet
    
                local currentMonsters = Game.getStorageValue(45016)
                
                if currentMonsters then
                    for v = 1, #currentMonsters do
                        local monsterId = currentMonsters[v]
                        
                        local isMonsterAlive = Monster(monsterId)
                        
                        if not isMonsterAlive then
                            local createdMonster = Game.createMonster(monstersToCreate[v].name, monstersToCreate[v].position)
                            currentMonsters[v] = createdMonster:getId()
                        end
                    end
    
                    Game.setStorageValue(45016, currentMonsters)
                else
                    local createdMonsters = {}
    
                    for i = 1, #monstersToCreate do
                        local createdMonster = Game.createMonster(monstersToCreate[i].name, monstersToCreate[i].position)
                        table.insert(createdMonsters, createdMonster:getId())
                    end
    
                    Game.setStorageValue(45016, createdMonsters)
                end
    
                player:setStorageValue(45016, 1)
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You've got a reward.")
            else
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "You've already got your reward.")
            end
        end
    
        return true
    end

     

    actions.xml:

    <action actionid="45016" script="seu_script.lua" />

     

    Se alguém quiser aprimorar o script, sinta-se à vontade ?

  9. Esse erro acontece pois não está sendo possível conectar ao MySQL utilizando o usuário 'forgottenserver'@'localhost'

     

    A configuração das credenciais ficam no config.lua. Procure lá e troque para as credenciais corretas do seu MySQL server.

    As vezes, trocando o forgottenserver por root já funciona ?

  10. @Emanueldk você pode hostear ele no seu próprio pc, se o seu roteador tiver as configurações corretas; mas essa forma é a mais complicada pois ainda existem provedores que bloqueiam esse acesso através do modem.

     

    Eu aconselho você colocar o seu site num host gratuito, existem vários por aí, por exemplo esse que já usei: https://infinityfree.net/

     

    Você vai precisar basicamente fazer upload da pasta do seu site e do seu banco de dados. Acredito que eles possuam um tutorial ou algo do tipo.

     

    Qualquer dúvida só chamar aí ?

  11. @peterson18 está quase, faltou remover o if desnecessário

     

    acredito que a versão correta do script seria assim:

     

    local keywordHandler = KeywordHandler:new()
    local npcHandler = NpcHandler:new(keywordHandler)
    NpcSystem.parseParameters(npcHandler)
    local talkState = {}
    function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
    function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
    function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
    function onThink() npcHandler:onThink() end
    
    
    
    function creatureSayCallback(cid, type, msg)
    	local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
    
    	local nome = getCreatureName(cid)
    
    	if msgcontains(msg, "blz") or msgcontains(msg, "blzz") and talkState[talkUser] == 1 then
    		selfSay("Olá, como está ".. nome ..", faz tempo que não aparece por aqui... Em que posso lhe ajudar?",cid)
    		return true
    	end
    end
    
    
    npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
    npcHandler:addModule(FocusModule:new())

    veja se deu certo ?

  12. E ai cara, tudo certo?

     

    Bom, primeiramente, vou te explicar uns conceitos sobre desenvolvimento web:

     

    CSS - esse é o cara que faz o estilo da sua página, ou seja, a maioria dos detalhes visuais. Por exemplo: a cor de um botão, o tamanho da fonte de um texto, a distância entre elementos, etc.

    Geralmente, dentro da pasta do seu site, ele é um arquivo com o nome styles.css. Se não existir esse nome, procure por arquivos que terminem com .css.

    Você vai precisar desse cara pra resolver alguns de seus problemas.

     

    HTML - esse aqui é responsável pela estrutura da sua página. Por exemplo: os textos, as tabelas, as imagens, os campos de digitar, os botões, etc.

    Geralmente os sites criados por gesior(de otserver em geral), o HTML fica em arquivos que terminam com .php.

     

    PHP - ele é responsável por gerar a parte dinâmica da sua página. Ele fica no lado do servidor, então, acredito que por agora o seu problema não seja com ele.

     

    Se você usa o navegador Google Chrome, vá para a sua página e aperte CTRL+SHIFT+C, vai abrir o inspecionador de elementos, tente brincar com esse cara. Com ele, você pode ver o estilo dos elementos e também qual arquivo .css que o elemento que você selecionou está utilizando:

    Untitled.png.5bfce4a22af9eaf85c73cbdc93cfc762.png

     

    Além disso não tem muito o que eu possa ajudar, sem acessar o seu site. :(

     

  13. E ai cara, tudo certo?

     

    Lendo o seu código, percebo que talvez você esteja cometendo um pequeno erro de lógica, e alguns erros de semântica.

    1- erros de semântica

    Citar
    
    local config = {
    	  nome = getCreatureName(cid),
    	}

    não há necessidade de colocar a sua variável em um objeto.

     

    como você está apenas declarando a variável nome, ela pode ser acessada diretamente, ou seja, essas linhas poderiam se resumir em:

    local nome = getCreatureName(cid)

     

    Citar
    
    if nome == getCreatureName(cid)  then

    nesse contexto, a variável nome não existe, pois você criou ela dentro do objeto config, então ficaria config.nome

     

    2- erro de lógica

    Citar
    
    if nome == getCreatureName(cid)  then

    por que você está comparando a variável nome com o nome da criatura? Você já declarou a variável nome com o nome da criatura nas linhas anteriores

    dessa forma, acredito que esse if é desnecessário, e você pode remover.

     

     

    Citar
    
    elseif msgcontains(msg, "blz") or msgcontains(msg, "blzz") and talkState[talkUser] == 1 then

    quando remover o if anterior, altere essa linha removendo o elseif e colocando um if no lugar, dessa forma:

    if msgcontains(msg, "blz") or msgcontains(msg, "blzz") and talkState[talkUser] == 1 then

     

    Citar
    
    selfSay("Olá, como está ".. config.nome ..", faz tempo que não aparece por aqui... Em que posso lhe ajudar?",cid)

    aqui você remove o config.nome e deixa apenas nome

     

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo