Ir para conteúdo

dalvorsn

Conde
  • Total de itens

    750
  • Registro em

  • Última visita

  • Dias Ganhos

    8

Tudo que dalvorsn postou

  1. https://gist.github.com/dalvorsn/ddd2e23ab8c651fb91da ps.: tu não falou a respeito do level, então julguei que seria um valor dinamico de acordo com a cidade ...
  2. O tipo de combate não define o effect, ele é definido de outra maneira, posta a spell se não fica dificil te ajudar ps.: o distro que está usando também é de suma importancia
  3. Não é dificl, basta pegar um de exemplo, se usar nodes então facilita muito. Eu poderia fazer pra ti, mas não te traria conhecimento se tu não tentasse primeiro.
  4. Segundo as sources, os WeaponType_t sao: enum WeaponType_t { WEAPON_NONE = 0, WEAPON_SWORD, WEAPON_CLUB, WEAPON_AXE, WEAPON_DIST, WEAPON_SHIELD, WEAPON_FIST, WEAPON_WAND, WEAPON_AMMO }; Ou seja, começa em 0, sendo none, depois sword 1 ate chegar em ammo que é o 8. Agora é só ir nessa parte do script: function isHandItem(uid) -- NW based on Mock uid = uid or 0 if isInArray({1,2,3,4,5,6}, getItemWeaponType(uid)) then return true end return false end Especificamente na tabela, removendo os numeros referentes aos tipos de equipamento que não quer refinar. function isHandItem(uid) -- NW based on Mock uid = uid or 0 if isInArray({5,6}, getItemWeaponType(uid)) then return true end return false end Deixando assim somente serão refinados shield e fist.
  5. Tem bbcode de github ai?
  6. começa a fazer ele que eu te ajudo na parte da storage
  7. https://gist.github.com/dalvorsn/181968ae477debd90d2d
  8. De mais informações sobre o servidor, mostre mais dados para que possam te ajudar. Em si parece simples, "adicionar um novo pokemon", mas deve-se levar em conta que um unico pokemon está ligado a diversos sistemas(o que vai variar de acordo com o servidor open source a que se refere). Adicionar como monstro, sem sistemas nem magias e simples, basta criar o xml dele com os respectivos dados, health, looktype, name, name description e etc. Porém ele não vai ter magias, não vai ter os comandos "m1" etc, não vai ter a vida regulada por scripts, não terá captura, não terá nada, será apenas um monstro. Entendo isso, você deve se perguntar: - Quais sistemas eu tenho no meu servidor? - Quais dependem de configuração individual de pokemon? - Quais os arquivos responsaveis por isso e como faço para adicioná-las? - Tenho conhecimento em programação o suficiente para entendê-los? Dentre outras ... Bom, boa sorte, e tente ser menos genérico. A pergunta é simples, mas a resposta é demasiadamente extensa.
  9. dalvorsn

    Cooldown

    Claro que sim, é só controlar no goback/death e etc Voce terá que mudar o modo como é salvo, terás que salvar quantos segundos restam para a magia ser usada, e só iniciar a contagem quando der go Faça algo assim na string que salvar no attribute: local example = "LastGo: "..os.time() .."TimeRemain: 5" Toda vez que der go(summonar seu pokemon) tu seta o atributo lastGo, e toda vez que der back seta o TimeRemain dai na função de pegar o cooldown, voce vai somar o lastGo com o TimeRemain e comparar com o os.time()
  10. Ninguem vai adivinhar o erro por uma imagem, poste o modulo que talvez alguem te ajude. Podem ser inumeras coisas, mas a mais provavel e que no otui esteja sendo configurados uma quantidade fixa de moves, sendo que o certo seria criar os widgets de acordo com o numero de moves
  11. Procure por algum addEvent, e a unica forma de fazer esse delay, leia o script e veja qual o certo
  12. Acho que não dá não, tu tem é que editar no otb/dat mesmo
  13. Se tu quer usar a lib do jiddo system leia e aprenda como usá-la, os arquivos dela estão todos no pasta de npcs do seu servidor, va lendo aos poucos e testando, sem duvidas ela tem muita funcionalidades, mas sinceramente acho muito mais versátil e livre fazer diretamente com as callbacks, voce com uma tabela simples faz o talkstate, e as falas por ifs, não tem misterio nenhum nisso
  14. Usa somente as callbacks do npc, nao usa o jiddo system function onCreatureAppear(cid) --aqui e quando player chega perto end function onCreatureDisappear(cid) -- aqui e quando o player se afasta da visao do npc end function onCreatureSay(cid, type, msg) -- aqui e quando o player fala, e aqui que tem que fazer o msg container, do jeito que tu tava --fazendo no primeiro hi ele nao chamava sua funcao ele tava chamando a --callback do jiddo end function onThink() -- aqui e a callback que executa de tempos em tempos, nao sei dizer de quantos --emquantos segundos, mas deve ter configuracao pra isso no xml end
  15. acabei de falar, "é só tirar as mensagens de greeting do xml", dai na callback onSay do npc tu faz normal, como os npcs mais antigos aquele msgcontains e etc
  16. negativo, tem como tu configurar tudo em lua, é so tirar as mensagem de greeting do xml
  17. provavelmente quando ultrapassar o limite ou ele nao vai deixar add mais, ou vai apagar os debaixo, acho mais provavel apagar os de baixo if getPlayerLevel >= 100 then E tu quer saber de diretorio ou arquivos? são coisas diferentes Bem, de qualquer modo, nativamente e forma limpa não tem um meio, há sim varias gambiarras, vou citar uma delas aqui: function exists(name) if type(name)~="string" then return false end return os.rename(name,name) and true or false end function isFile(name) if type(name)~="string" then return false end if not exist(name) then return false end local f = io.open(name) if f then f:close() return true end return false end function isDir(name) return (exist(name) and not isFile(name)) end
  18. NetworkMessage Autor: DalvoDescrição: Lib direcionada a manipulação de bytes, feita com intuito de auxiliar nos opcodes para otclient, porém tem uma vasta gama de utilidades. NetworkMessage = {}function NetworkMessage.create(pdata) -- NetworkMessage.create([pdata]) -- @params -- 'pdata': string -- Instancia a classe NetworkMessage, se pdata é fornecido é definido o atributo data igual a pdata e size igual a #pdata return setmetatable({ data = pdata or "", size = pdata and #pdata or 0, pos = 1}, { __index = NetworkMessage })endfunction NetworkMessage:reset() -- NetworkMessage.reset(self) -- self:reset() -- @params -- 'self': table -- Reinicia os atributos do objeto self.data = "" self.size = 0 self.pos = 1endfunction NetworkMessage:setBuffer(buffer) -- NetworkMessage.setBuffer(self, buffer) -- self:setBuffer(buffer) -- @params -- 'self': table -- 'buffer': string -- Define 'buffer' como atributo data if not type(buffer) == "string" then return false end self.data = buffer self.size = #buffer self.pos = 1endfunction NetworkMessage:getBuffer() -- NetworkMessage.getBuffer(self) -- self:getBuffer() -- @params -- 'self': table -- Retorna o atributo 'data' return self.dataendfunction NetworkMessage:getSize() -- NetworkMessage.getSize(self) -- self:getSize() -- @params -- 'self': table -- Retorna o atributo 'size' return self.sizeendfunction NetworkMessage:getRanges(byteCount, signed) -- NetworkMessage.getRanges(self, byteCount, signed) -- self:getRanges(byteCount, signed) -- @params -- 'self': table -- 'byteCount': number -- 'signed': boolean -- Função interna usada para calcular o limite do valor de 'byteCount' bytes, se signed é true reajusta seu valor para signed local min, max = 0, ((256^byteCount) -1) if(signed)then max = math.floor(max/2) min = -max-1 end return -min, maxendfunction NetworkMessage:canRead(size) -- NetworkMessage.canRead(self, size) -- self:canRead(size) -- @params -- 'self': table -- 'size': number -- Verifica se pode ser lido o numero 'size' de bytes, retorna um booleano return (self.pos + size) > (self.size + 1)endfunction NetworkMessage:readBytes(byteCount, signed) -- NetworkMessage.readBytes(self, byteCount, signed) -- self:readBytes(byteCount, signed) -- @params -- 'self': table -- 'byteCount': number -- 'signed': boolean -- Tenta ler 'byteCount' numero de bytes, retorna o valor numerico dos bytes -- se possivel a leitura, e false se não. Se signed é true reajusta valor para signed if self:canRead(byteCount) then return false end local min, _ = self:getRanges(byteCount, signed) local value = 0 for byte = 1, byteCount do value = value + ( self.data:byte(self.pos) * (256^(byte-1)) ) self.pos = self.pos + 1 end return value + minendfunction NetworkMessage:addBytes(value, count, signed) -- NetworkMessage.addBytes(self, value, count, signed) -- self:addBytes(value, count, signed) -- @params -- 'self': table -- 'value': number -- 'count':number -- 'signed':boolean -- Tenta escrever 'value' em 'count' bytes, se 'value' for maior que o numero de bytes -- suporta retorna false. Se signed é true reajusta valor para signed if signed then value = value * 2 end if value >= (256^count) then return false end for byte = count, 1, -1 do local power = (256 ^ (byte-1)) self.data = self.data .. string.char( math.floor(value/power) ) value = value % power end self.size = self.size + count self.pos = self.pos + count return trueend-- Metodos para pegar valoresfunction NetworkMessage:getU8() return self:readBytes(1, false)endfunction NetworkMessage:getU16() return self:readBytes(2, false)endfunction NetworkMessage:getU32() return self:readBytes(4, false)endfunction NetworkMessage:getU64() return self:readBytes(8, false)endfunction NetworkMessage:getI8() return self:readBytes(1, true)endfunction NetworkMessage:getI16() return self:readBytes(2, true)endfunction NetworkMessage:getI32() return self:readBytes(4, true)endfunction NetworkMessage:getI64() return self:readBytes(8, true)end-- Metodos para adição de valoresfunction NetworkMessage:addU8(value) return self:addBytes(value, 1, false)endfunction NetworkMessage:addU16(value) return self:addBytes(value, 2, false)endfunction NetworkMessage:addU32(value) return self:addBytes(value, 4, false)endfunction NetworkMessage:addU64(value) return self:addBytes(value, 8, false)endfunction NetworkMessage:addI8(value) return self:addBytes(value, 1, true)endfunction NetworkMessage:addI16(value) return self:addBytes(value, 2, true)endfunction NetworkMessage:addI32(value) return self:addBytes(value, 4, true)endfunction NetworkMessage:addI64(value) return self:addBytes(value, 8, true)endfunction NetworkMessage:addString(str) -- NetworkMessage.addString(self, str) -- self:addString(str) -- @params -- 'self': table -- 'str': string -- Tenta adicionar 'str', se o tamanho supera dois bytes, retorna false if not self:addU16(#str) then return false end self.data = self.data .. str self.size = self.size + #str self.pos = self.pos + #str return trueendfunction NetworkMessage:getString() -- NetworkMessage.getString(self) -- self:getString() -- @params -- 'self': table -- Tenta ler a string e retorna-la em caso de sucesso, se falho retorna false local size = self:getU16() if not (size and self:canRead(size)) then return false end local str = "" for byte=0, size-1 do str = str .. string.char(self.data:byte(self.pos + byte)) end self.pos = self.pos + size return strend Link da lib
  19. Mostra o erro e completo cara, ai não ta dizendo exatamente o erro, nem se quer onde é, mas suponho que seja em algum mod porque usa o domolib com as informações que deu fica complicado, tenta copiar o erro completo ai
  20. function removeWall() return true end WTF!! que desgraça é essa vei? não deveria ter uma função ai para remover a parede não? >.<
  21. olha um script de box que tu consegue fazer, é a coisa mais banal do mundo, só dar um transform e setar os atributos
  22. msg->put<uint16_t>(type+1); Mas tem que trocar na source toda onde declara e onde usa ><
  23. Não, ele é feito para protocolos recentes, acima de 10.1, atualmente para 10.36 Convertê-lo para 8.6 seria bem complicado, e até onde sei os desenvolvedores nao tem nem se quer a intenção de fazer um para versoes antigas como 8.6
  24. Acho mais sensato atualizar para a versao mais recente, acredito que nao mude muita coisa nos modulos escritos anteriormente rs
  25. dalvorsn

    Diminuir Função

    Envia tudo do server, é melhor cara, dai tu monta a estrutura do pacote em bytes, não fica absurdamente grande não, tu vai pelo tamanho, por exemplo, o id do icone tu precisa de um uint16_t, o tempo de cooldown pode usar um uint8_t, e o nome é string, usa um uint8_t para o tamanho e o faz a leitura da string Porem com nem todos os pokes tem todos os cds, é desnecessario enviar cds vazios, então tu faz o primeiro byte de todos com o numero de moves, dai faz a leitura que nem disse ai pra cada move e caso não tenha lib do networkmessage, da uma lida em bitstream e endianess que é de boas de fazer, a parte de leitura eu fiz uma vez num script: 'spr extractor' no arquivo SpriteReader, a parte de leitura ta la, e a de escrita é o inverso, não muda quase nada
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...