Ir para conteúdo

dalvorsn

Conde
  • Total de itens

    750
  • Registro em

  • Última visita

  • Dias Ganhos

    7

Histórico de Reputação

  1. Upvote
    dalvorsn recebeu reputação de samlecter em tutorial de otc?   
    Cara, não tem um tutorial descente disso, mas também não tem nada muito absurdo de entender. Primeira coisa tu tem que entender a estrutura, o otclient é todo modularizado, otmod é o primeiro cara a ser lido, ele que diz todas as infos iniciais de load, então comece vendo os otmods e entendendo como ele funciona. entendido isso tu vai passar para o scripts lua dele. No arquivo de load dele tu vai encontrar duas funções primordiais, 'init' e 'terminate'(pode ser diferente os nomes se tu alterar no otmod, mas não aconselho a mudar pois já é convencionado assim).

    init é executado ao dar load no module, e terminate ao dar unload no module (lembrando que reload é unload + load)
    além disso o otclient usa o conceito de signals and slots, que é o mesmo adotado pelo qt e outras bibliotecas graficas, através deles tu consegue fazer connect em diversos eventos e etc, é essencial que entenda isso para não ter que fazer esforços desnecessários
     
    graficamente falando tu pode criar interface por duas maneiras, por lua através de funções que manipulam widgets e pelo otui, o otui é como se fosse um CSS, porém proprio do otclient, inclusive por isso ele tem seu proprio loader, que tu pode encontrar na source https://github.com/edubart/otclient/tree/master/src/framework/ui

    se você não entende de c++, tudo bem, você pode aprender vendo exemplos dentros os inumeros módulos que ja existem e na pasta de styles https://github.com/edubart/otclient/tree/master/data/styles
    a maioria das coisas que tu precisa pra fazer a maioria dos modulos ja tem em algum modulo feito no cliente, então seu melhor professor será o proprio cliente, basta tu entender e quebrar a cabeça tentando
    no geral e pra maioria dos casos você não irá precisar de alterar as sources pra praticamente nada, existe bind para quase todas as funções que tu precisa, tu pode encontra-los em:
    https://github.com/edubart/otclient/blob/master/src/framework/luafunctions.cpp  -- no que se refere a coisas do framework (widgets e etc)
    https://github.com/edubart/otclient/blob/master/src/client/luafunctions.cpp -- no que se refere a coisas do jogo 
     
    duvidas pontuais tu pergunta no forum que irão te responder, mas é preferível que tente sozinho antes, porque o aprendizado está justamente ai
     
  2. Upvote
    dalvorsn recebeu reputação de Killua em Lib NetworkMessage   
    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
  3. Upvote
    dalvorsn recebeu reputação de Lucas CP em Lib NetworkMessage   
    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
  4. Upvote
    dalvorsn recebeu reputação de samlecter em [Encerrado] O Que Deixa a VPS Mais Rapida?   
    Só um breve comentário, o numero de núcleos do processador a partir de 3 não faz diferença pra otserv, porque ele só usa 3 threads (dispatcher, scheduler, e asio), entao foca mais no clock individual do que o numero de cores, porque a nao ser que va rodar mais de um server esses nucleos extras ficarão ociosos. A máquina depende muito de quantos players tu espera suportar, e qual tamanho do mapa. Alem disso scripts mal feitos e codigos errados podem também causar lag, como por exemplo o uso demasiado de creature scripts onThing. Um projeto de grande porte usaria pelo menos duas máquinas, uma pra db e outra para os servers (ate uns 3 ainda e de boa), memoria tu expande a medida que necessite, é relativamente barato. E nao hospede site na mesma maquina do servidor, isso e um grande erro pois um ataque ao site travaria o server.
  5. Upvote
    dalvorsn recebeu reputação de PostadorHunter em tutorial de otc?   
    Cara, não tem um tutorial descente disso, mas também não tem nada muito absurdo de entender. Primeira coisa tu tem que entender a estrutura, o otclient é todo modularizado, otmod é o primeiro cara a ser lido, ele que diz todas as infos iniciais de load, então comece vendo os otmods e entendendo como ele funciona. entendido isso tu vai passar para o scripts lua dele. No arquivo de load dele tu vai encontrar duas funções primordiais, 'init' e 'terminate'(pode ser diferente os nomes se tu alterar no otmod, mas não aconselho a mudar pois já é convencionado assim).

    init é executado ao dar load no module, e terminate ao dar unload no module (lembrando que reload é unload + load)
    além disso o otclient usa o conceito de signals and slots, que é o mesmo adotado pelo qt e outras bibliotecas graficas, através deles tu consegue fazer connect em diversos eventos e etc, é essencial que entenda isso para não ter que fazer esforços desnecessários
     
    graficamente falando tu pode criar interface por duas maneiras, por lua através de funções que manipulam widgets e pelo otui, o otui é como se fosse um CSS, porém proprio do otclient, inclusive por isso ele tem seu proprio loader, que tu pode encontrar na source https://github.com/edubart/otclient/tree/master/src/framework/ui

    se você não entende de c++, tudo bem, você pode aprender vendo exemplos dentros os inumeros módulos que ja existem e na pasta de styles https://github.com/edubart/otclient/tree/master/data/styles
    a maioria das coisas que tu precisa pra fazer a maioria dos modulos ja tem em algum modulo feito no cliente, então seu melhor professor será o proprio cliente, basta tu entender e quebrar a cabeça tentando
    no geral e pra maioria dos casos você não irá precisar de alterar as sources pra praticamente nada, existe bind para quase todas as funções que tu precisa, tu pode encontra-los em:
    https://github.com/edubart/otclient/blob/master/src/framework/luafunctions.cpp  -- no que se refere a coisas do framework (widgets e etc)
    https://github.com/edubart/otclient/blob/master/src/client/luafunctions.cpp -- no que se refere a coisas do jogo 
     
    duvidas pontuais tu pergunta no forum que irão te responder, mas é preferível que tente sozinho antes, porque o aprendizado está justamente ai
     
  6. Upvote
    dalvorsn recebeu reputação de DarkWore em tutorial de otc?   
    Cara, não tem um tutorial descente disso, mas também não tem nada muito absurdo de entender. Primeira coisa tu tem que entender a estrutura, o otclient é todo modularizado, otmod é o primeiro cara a ser lido, ele que diz todas as infos iniciais de load, então comece vendo os otmods e entendendo como ele funciona. entendido isso tu vai passar para o scripts lua dele. No arquivo de load dele tu vai encontrar duas funções primordiais, 'init' e 'terminate'(pode ser diferente os nomes se tu alterar no otmod, mas não aconselho a mudar pois já é convencionado assim).

    init é executado ao dar load no module, e terminate ao dar unload no module (lembrando que reload é unload + load)
    além disso o otclient usa o conceito de signals and slots, que é o mesmo adotado pelo qt e outras bibliotecas graficas, através deles tu consegue fazer connect em diversos eventos e etc, é essencial que entenda isso para não ter que fazer esforços desnecessários
     
    graficamente falando tu pode criar interface por duas maneiras, por lua através de funções que manipulam widgets e pelo otui, o otui é como se fosse um CSS, porém proprio do otclient, inclusive por isso ele tem seu proprio loader, que tu pode encontrar na source https://github.com/edubart/otclient/tree/master/src/framework/ui

    se você não entende de c++, tudo bem, você pode aprender vendo exemplos dentros os inumeros módulos que ja existem e na pasta de styles https://github.com/edubart/otclient/tree/master/data/styles
    a maioria das coisas que tu precisa pra fazer a maioria dos modulos ja tem em algum modulo feito no cliente, então seu melhor professor será o proprio cliente, basta tu entender e quebrar a cabeça tentando
    no geral e pra maioria dos casos você não irá precisar de alterar as sources pra praticamente nada, existe bind para quase todas as funções que tu precisa, tu pode encontra-los em:
    https://github.com/edubart/otclient/blob/master/src/framework/luafunctions.cpp  -- no que se refere a coisas do framework (widgets e etc)
    https://github.com/edubart/otclient/blob/master/src/client/luafunctions.cpp -- no que se refere a coisas do jogo 
     
    duvidas pontuais tu pergunta no forum que irão te responder, mas é preferível que tente sozinho antes, porque o aprendizado está justamente ai
     
  7. Upvote
    dalvorsn recebeu reputação de Luga03 em tutorial de otc?   
    Cara, não tem um tutorial descente disso, mas também não tem nada muito absurdo de entender. Primeira coisa tu tem que entender a estrutura, o otclient é todo modularizado, otmod é o primeiro cara a ser lido, ele que diz todas as infos iniciais de load, então comece vendo os otmods e entendendo como ele funciona. entendido isso tu vai passar para o scripts lua dele. No arquivo de load dele tu vai encontrar duas funções primordiais, 'init' e 'terminate'(pode ser diferente os nomes se tu alterar no otmod, mas não aconselho a mudar pois já é convencionado assim).

    init é executado ao dar load no module, e terminate ao dar unload no module (lembrando que reload é unload + load)
    além disso o otclient usa o conceito de signals and slots, que é o mesmo adotado pelo qt e outras bibliotecas graficas, através deles tu consegue fazer connect em diversos eventos e etc, é essencial que entenda isso para não ter que fazer esforços desnecessários
     
    graficamente falando tu pode criar interface por duas maneiras, por lua através de funções que manipulam widgets e pelo otui, o otui é como se fosse um CSS, porém proprio do otclient, inclusive por isso ele tem seu proprio loader, que tu pode encontrar na source https://github.com/edubart/otclient/tree/master/src/framework/ui

    se você não entende de c++, tudo bem, você pode aprender vendo exemplos dentros os inumeros módulos que ja existem e na pasta de styles https://github.com/edubart/otclient/tree/master/data/styles
    a maioria das coisas que tu precisa pra fazer a maioria dos modulos ja tem em algum modulo feito no cliente, então seu melhor professor será o proprio cliente, basta tu entender e quebrar a cabeça tentando
    no geral e pra maioria dos casos você não irá precisar de alterar as sources pra praticamente nada, existe bind para quase todas as funções que tu precisa, tu pode encontra-los em:
    https://github.com/edubart/otclient/blob/master/src/framework/luafunctions.cpp  -- no que se refere a coisas do framework (widgets e etc)
    https://github.com/edubart/otclient/blob/master/src/client/luafunctions.cpp -- no que se refere a coisas do jogo 
     
    duvidas pontuais tu pergunta no forum que irão te responder, mas é preferível que tente sozinho antes, porque o aprendizado está justamente ai
     
  8. Upvote
    dalvorsn recebeu reputação de leofox97 em tutorial de otc?   
    Cara, não tem um tutorial descente disso, mas também não tem nada muito absurdo de entender. Primeira coisa tu tem que entender a estrutura, o otclient é todo modularizado, otmod é o primeiro cara a ser lido, ele que diz todas as infos iniciais de load, então comece vendo os otmods e entendendo como ele funciona. entendido isso tu vai passar para o scripts lua dele. No arquivo de load dele tu vai encontrar duas funções primordiais, 'init' e 'terminate'(pode ser diferente os nomes se tu alterar no otmod, mas não aconselho a mudar pois já é convencionado assim).

    init é executado ao dar load no module, e terminate ao dar unload no module (lembrando que reload é unload + load)
    além disso o otclient usa o conceito de signals and slots, que é o mesmo adotado pelo qt e outras bibliotecas graficas, através deles tu consegue fazer connect em diversos eventos e etc, é essencial que entenda isso para não ter que fazer esforços desnecessários
     
    graficamente falando tu pode criar interface por duas maneiras, por lua através de funções que manipulam widgets e pelo otui, o otui é como se fosse um CSS, porém proprio do otclient, inclusive por isso ele tem seu proprio loader, que tu pode encontrar na source https://github.com/edubart/otclient/tree/master/src/framework/ui

    se você não entende de c++, tudo bem, você pode aprender vendo exemplos dentros os inumeros módulos que ja existem e na pasta de styles https://github.com/edubart/otclient/tree/master/data/styles
    a maioria das coisas que tu precisa pra fazer a maioria dos modulos ja tem em algum modulo feito no cliente, então seu melhor professor será o proprio cliente, basta tu entender e quebrar a cabeça tentando
    no geral e pra maioria dos casos você não irá precisar de alterar as sources pra praticamente nada, existe bind para quase todas as funções que tu precisa, tu pode encontra-los em:
    https://github.com/edubart/otclient/blob/master/src/framework/luafunctions.cpp  -- no que se refere a coisas do framework (widgets e etc)
    https://github.com/edubart/otclient/blob/master/src/client/luafunctions.cpp -- no que se refere a coisas do jogo 
     
    duvidas pontuais tu pergunta no forum que irão te responder, mas é preferível que tente sozinho antes, porque o aprendizado está justamente ai
     
  9. Upvote
    dalvorsn recebeu reputação de Renan Morais em [Resolvido] Selecionar gênero de acordo com vocação ao criar personagens.   
    Remove o select de genero e altera o script de submissão.
     
    function createCharacter() { $('.loader').show(); var form = $('#createCharacter').serialize(); form.sex = 0; if($.inArray(parseInt(form.vocation), [1,2,3]) != -1 ) { form.sex = 1; } $.ajax({ url: '<?php echo WEBSITE; ?>/index.php/character/create_character/1', type: 'post', data: form, success: function(data) { $('.errors').html(data); $('.loader').hide(); } }); } Supondo que as vocações que são masculinas sejam 1, 2 e 3
  10. Upvote
    dalvorsn deu reputação a Kydrai em [Resolvido] Selecionar gênero de acordo com vocação ao criar personagens.   
    @dalvorsn Não recomendo dessa forma, assim os players poderiam burlar fácil editando o html, precisando de outras formas de verificação.
     
    Você precisa tirar o select, como já disseram, e editar a função create_character no arquivo system\application\controllers\character.php.
    La tem um comando assim (ou parecido): $this->form_validation->set_rules('sex', 'Sex', 'required|integer|callback__checkSex');, ele verifica o sexo do personagem.
    Antes desse comando você pode fazer algo assim (não testei):
    if (in_array($_POST['vocation'], array(1, 2, 3, 4))) { $_POST['sex'] = 0; } else if (in_array($_POST['vocation'], array(5, 6, 7, 8))) { $_POST['sex'] = 1; } else { $_POST['sex'] = -1; } Dessa forma, se a vocação escolhida for 1, 2, 3 ou 4 terá o sex 0 (feminino), se for 5, 6, 7, 8 terá o sex 1 (masculino). Caso não seja nenhum desses dará erro de sexo inválido e não criará o personagem.
  11. Upvote
    dalvorsn recebeu reputação de Renan Morais em [Resolvido] Bloquear Acentuações e Alguns Nomes na Criação/Alteração de Chars [Modern Aac]   
    Substitui esse if:
    if(in_array(strtolower($unit), $config['invalidNameTags'])) Por esse:
    if(in_array(strtolower($unit), $config['invalidNameTags']) || preg_match('/[\W+]/', $unit))  
    /[\W+]/ - regex para non-words
  12. Upvote
    dalvorsn recebeu reputação de VictorWEBMaster em [Resolvido] posicionamento do texto   
    Foi erro de tag, você não abriu a <ul> apos o noticias:
     
    <div id="naglowek">Noticias</div> <ul>  
  13. Upvote
    dalvorsn recebeu reputação de koete em Mensagem ao dropar loot   
    Exatamente como eu tinha dito:
    local config = { ids = {5926, 3940, 11119, 10518, 10521}, --ID do item. drop_effect = true --Efeito que aparecerá em cima da corpse (apenas para o dono da corpse). OPCIONAL! Se não quiser, coloque false.} function examine(cid, position, corpse_id, name) if not isPlayer(cid) then return true end local corpse = getTileItemById(position, corpse_id).uid if corpse <= 1 or not isContainer(corpse) then return true end for slot = 0, getContainerSize(corpse) - 1 do local item = getContainerItem(corpse, slot) if item.uid <= 1 then return true end if isInArray(config.ids, item.itemid) then doBroadcastMessage("[LOOT MENSAGEM]: O jogador ("..getCreatureName(cid)..") dropou um item exclusivo de um ("..name..").", 19) if config.drop_effect then doSendMagicEffect(position, config.drop_effect, cid) end end endend function onKill(cid, target) if not isMonster(target) then return true end local monster_name = getCreatureName(target) local corpse_id = getMonsterInfo(monster_name).lookCorpse addEvent(examine, 5, cid, getThingPos(target), corpse_id, monster_name) return trueend  
  14. Upvote
    dalvorsn recebeu reputação de River em Aulas de scripting lua   
    A ideia é boa, infelizmente já vi diversas vezes essas iniciantivas, e por melhores que fossem os professores se não tiver a dedicação dos alunos não funciona, então aos que deciderem fazer, procurem realmente aprender e se dediquem, programação não é fácil principalmente no começo. 
     
    @Poccnn Boa sorte brow, que saiam ótimos scripters
  15. Upvote
    dalvorsn recebeu reputação de jeanflamengo em Autoloot DxP   
    function onUse(cid, item, frompos, item2, topos) if isWatchingTv(cid) then return true end local function getContainers(pos) local things = getTileInfo(pos).things local ret = {} for stack = 0, things do pos.stackpos = stack local item = getTileThingByPos(pos) if item and isContainer(item.uid) then local quemMatou = getItemAttribute(item.uid, "corpseowner") if quemMatou then local player = getCreatureByName(quemMatou) if isPlayer(player) then local isInParyWithPlayer = false if isInParty(cid) and isInParty(player) then isInParyWithPlayer = isPartyEquals(player, cid) end if getCreatureName(cid) == quemMatou or isInParyWithPlayer then table.insert(ret, item) end end end end end return ret end local corpses = getContainers(getThingPosition(item.uid)) if #corpses == 0 then doPlayerSendCancel(cid, "Você não pode abrir um loot que não é seu.") return true end local autoLootList = getAllItensInMyList(cid) local bag = getPlayerSlotItem(cid, 3).uid local itemsToRemove = {} if isCollectAll(cid) then for _, corpse in pairs(corpses) do for a = 0, getContainerSize(corpse.uid) - 1 do local it = getContainerItem(corpse.uid, a) if it.uid > 0 then if addItemInFreeBag(bag, it.itemid, it.type) ~= false then table.insert(itemsToRemove, it.uid) end end end end end if #autoLootList > 0 and not isCollectAll(cid) then for a = 0, getContainerSize(item.uid) do local it = getContainerItem(item.uid, a) if it.uid > 0 then for i = 1, #autoLootList do if getItemInfo(it.itemid).name == autoLootList[i] then if addItemInFreeBag(bag, it.itemid, it.type) ~= false then table.insert(itemsToRemove, it.uid) end end end end end end if #itemsToRemove > 0 then for i = 1, #itemsToRemove do doChangeTypeItem(itemsToRemove[i], 0) end end end Não cheguei a testar, mas é mais ou menos isso ai
  16. Upvote
    dalvorsn deu reputação a Deadpool em Queimando arvores   
    Sistemazinho que eu achei em um servidor 860 antigo, eu ia fazer um RPG mas né ._.
    Enfim, esse sistema permite colocar fogo nas arvores, e as arvores ao redor vão queimando, até acabar a ultima mwhaha, testei e funciona mwha
     
    adicionar arvores:
    local burningTrees = { -- [TreeId] = BurningTreeId, -- [id da arvore] = idquevaiaparecerquandotiverqueimado, -- Examples [7024] = 2717, -- pine [2701] = 2719, -- sycamore [2704] = 2722 -- red maple } o item da actions.xml que você vai usar pra tocar fogo na floresta, precisa ter a opção "use with"
    qualquer coisa comentem, que eu ajudo quando tiver tempo
     
    créditos: @dalvorsn 
     
     
    demonstração:
     
    https://gifs.com/gif/queimando-floresta-tibia-g5zYR9
  17. Upvote
    dalvorsn recebeu reputação de Viinho Sdt em Autoloot DxP   
    function onUse(cid, item, frompos, item2, topos) if isWatchingTv(cid) then return true end local function getContainers(pos) local things = getTileInfo(pos).things local ret = {} for stack = 0, things do pos.stackpos = stack local item = getTileThingByPos(pos) if item and isContainer(item.uid) then local quemMatou = getItemAttribute(item.uid, "corpseowner") if quemMatou then local player = getCreatureByName(quemMatou) if isPlayer(player) then local isInParyWithPlayer = false if isInParty(cid) and isInParty(player) then isInParyWithPlayer = isPartyEquals(player, cid) end if getCreatureName(cid) == quemMatou or isInParyWithPlayer then table.insert(ret, item) end end end end end return ret end local corpses = getContainers(getThingPosition(item.uid)) if #corpses == 0 then doPlayerSendCancel(cid, "Você não pode abrir um loot que não é seu.") return true end local autoLootList = getAllItensInMyList(cid) local bag = getPlayerSlotItem(cid, 3).uid local itemsToRemove = {} if isCollectAll(cid) then for _, corpse in pairs(corpses) do for a = 0, getContainerSize(corpse.uid) - 1 do local it = getContainerItem(corpse.uid, a) if it.uid > 0 then if addItemInFreeBag(bag, it.itemid, it.type) ~= false then table.insert(itemsToRemove, it.uid) end end end end end if #autoLootList > 0 and not isCollectAll(cid) then for a = 0, getContainerSize(item.uid) do local it = getContainerItem(item.uid, a) if it.uid > 0 then for i = 1, #autoLootList do if getItemInfo(it.itemid).name == autoLootList[i] then if addItemInFreeBag(bag, it.itemid, it.type) ~= false then table.insert(itemsToRemove, it.uid) end end end end end end if #itemsToRemove > 0 then for i = 1, #itemsToRemove do doChangeTypeItem(itemsToRemove[i], 0) end end end Não cheguei a testar, mas é mais ou menos isso ai
  18. Upvote
    dalvorsn deu reputação a Poccnn em Aulas de scripting lua   
    Concordo dalvo. Se eles entenderem programação lua, para conseguirem programar ot servers  será  moleza. 
    Pretendeo posterior as aulas de lua fazer algumas com aplicações em ot servers. 
  19. Upvote
    dalvorsn recebeu reputação de Justiceiro751 em Aulas de scripting lua   
    A ideia é boa, infelizmente já vi diversas vezes essas iniciantivas, e por melhores que fossem os professores se não tiver a dedicação dos alunos não funciona, então aos que deciderem fazer, procurem realmente aprender e se dediquem, programação não é fácil principalmente no começo. 
     
    @Poccnn Boa sorte brow, que saiam ótimos scripters
  20. Upvote
    dalvorsn recebeu reputação de Justiceiro751 em [Encerrado] [OTcliente]Como mudar a cor do nome dos NPCs   
    Então desconheço c++, e o manual de referencia dele está errado
     
    http://www.cplusplus.com/reference/string/string/operators/
  21. Upvote
    dalvorsn deu reputação a Kevick em [Encerrado] [OTcliente]Como mudar a cor do nome dos NPCs   
    DEAL WITH
  22. Upvote
    dalvorsn recebeu reputação de Deadpool em Remover Staff do rank de top level   
    ele colocou pra indicar que o numero 3 é o group que seria o limitador da condicional, pro caso de voce querer mudar o group da listagem e etc
  23. Upvote
    dalvorsn recebeu reputação de Justiceiro751 em Remover Staff do rank de top level   
    é uma condicional como em qualquer outra linguagem, então se tu quer que só liste players que tem o group_id menor que 3, então tu deve fazer dessa forma ai que ta na query group_id < 3
  24. Upvote
    dalvorsn recebeu reputação de lessa em [Encerrado]Peça seu script!   
    kk claro que precisa uai, eu nao botei porque era obvio '-'
    nao botei nem o if, nem o then porque eles são parte da estrutura basica de controle
  25. Upvote
    dalvorsn recebeu reputação de subyth em [Arquivado]Plágio é crime?   
    Sim, plágio é crime, mas se vão te processar por isso ai já são outros quinhentos, dificilmente na verdade.
    Só se tu tiver muita visibilidade a ponto de acharem que vale a pena te processar pela indenização
  • Quem Está Navegando   0 membros estão online

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