Ir para conteúdo

Night Wolf

Herói
  • Total de itens

    341
  • Registro em

  • Última visita

  • Dias Ganhos

    18

Tudo que Night Wolf postou

  1. o texto não condiz em nada com o gif e com seu segundo comentário. Se decide, vai ser aleatoriamente ou ele vai pegar o tipo de combat que ele é atacado e mudar de cor?
  2. vc tem que verificar se seu data/XML/vocations.xml as vocs promovidas estão como fromVoc das vocações que as precedem. Do contrário, toda vez que relogar vai voltar como knight ao invés de elite knight, por ex.
  3. Night Wolf

    Erro npc

    é com todo npc isso? se não for, não precisa mandar seu npc handler.. até pq nao tem ngm aqui no fórum q saiba ler isso. Se for só com 1 npc ou 1 grupo específico de npcs, talvez seja o formato q ele foi criado. O povo nao sabe trabalhar com npc e aí eles acabam esquecendo de colocar as funções pro handler lidar quando o player deslogar, morrer, sair andando. Meu palpite é que é um desses erros.
  4. cola isso entre function onUse e o primeiro if if isInArray({413, 414, 415, 416, 417, 418}, getPlayerVocation(cid)) then return doPlayerSendCancel(cid, "Sua vocação não pode usar este scroll.") end
  5. avaliar complexidade é uma coisa complicada, pessoas dizem que algoritmos com complexidade polinomial são melhores do que algoritmos exponenciais mas isso nem sempre é verdade. Para n baixo 2^n < n^1000000000000. Oque eu fiz pra avaliar os códigos quando fui jurado em um concurso aí foi rodar os.clock pra ver a diferença de tempo de processamento entre o server rodando solo e rodando com o script. Dá uma idéia bem melhor do quão bom ou quão ruim o script está feito. Sem falar que muitos aspectos vc percebe só de ler o código, mas claro que existem diversas formas de fazer uma mesma coisa então acho que oque mais vale é se funciona, se não tem bugs, e se tá bonito in game... afinal, player não vê código e os scripts no fundo são feitos pros membros do seu servidor.
  6. não tenta bolar uma fórmula grande como essa do nada... "tcharam! (skill * 1.5 + level/2) * 3" não é assim q funciona. Começa por partes e aí vc vai adicionando outros fatores. Nesse tópico aqui http://www.xtibia.com/forum/topic/237246-skill-fist-ter-influencia-no-dano-de-certa-magia/eu falei um pouco sobre como bolar boas fórmulas, dá uma lida e vê se te ajuda.
  7. eu tive esse problema quando criei a volatile spiderling. O tibia tem uma função chamada getClosestFreeTile que retorna a posição livre mais próxima pra sumonar o bixo. Infelizmente para monstros trapados, ainda irá retornar esse erro então a forma de resolver isso é fazer um for por todas as posições em volta do player no range que vc quiser (gosto de usar range 2) monstro é o 'o' e 'x' são as posições que irei contemplar. xxx xxxxx xxOxx xxxxx xxx e aí vc checa se tem uma posição livre, se tiver você cria o monstro lá.. se não tiver nenhuma vc não faz nada. Com essa simples checagem vc já arruma os erros da distro pois impede o script de tentar criar monstros em posições q não são elegíveis de se criar um monstro
  8. faz ferreiro alquimista e minerador serem valores em um determinado storage, todos os outros scripts de cada classe podem checar se o storage do cara é 1 (ferreiro), 2 (alquimista) ou 3 (minerador). Como o valor padrão de todo storage é -1 dá tranquilo. E aí na action de mineração/ferreiro vc coloca if not isInArray({1,3}, getPlayerStorageValue(cid, 14910)) then return true end e faz a mesma coisa na spell/talkaction mudando só o 1,3 e colocando 2 no lugar: if not isInArray({1,3}, getPlayerStorageValue(cid, 14910)) then return true end
  9. ah eu to de boas, o dinheiro é indiferente pra mim.. eu geralmente uso a grana dos poucos trabalhos que faço pra sair com uma menina que eu gosto kkk se o cara tivesse conversado comigo e falado que teve problemas, eu podia sei lá, considerar não cobrar ele.. mas tendo em vista q ele preferiu sumir do fórum acho que nada mais justo do que postar os trabalhos para que outros possam fazer um proveito melhor do que ele irá fazer no servidor particular dele..
  10. Olá caros, é com um poquinho de pesar que informo que fui contratado por um membro aqui do fórum e devido à ele ser patrocinado pelo xt acabei dando confiança demais e entregando os códigos pra ele testar antes de eu receber. Bom, foi uma má escolha mas serviu como aprendizado.. já que eu tive bastante trabalho pra fazer os códigos bonitinhos e não vou receber nada por eles eu decidi postar aqui para vocês :3 O link pra baixar pode ser encontrado aqui: http://www.4shared.com/get/Ycgs1-qvba/ShiroNG.html espero que seja útil ;]
  11. pela forma q vc fez eu não entendi se vc queria pegar o valor de 1 storage ou se queria checar entre vários storages. A diferença do primeiro pro segundo é que o primeiro se vc tiver todos os storages vc vai ganhar todas as vidas somadas
  12. ao criar vocações novas você tem que definí-las muito bem no vocations.xml, tudo tem que estar bonitinho do contrário ele vai voltar pra vocação 0 ao relogar
  13. tá, vamos lá: Primeiro lugar seu código não tá completo, ele possui erros gravíssimos e isso explicaria por si só grande parte do motivo de não funcionar.. 1- Pra todo if que você tem você precisa de um end pra fechar o bloco dele. a melhor forma de perceber isso é identando seu código, baixe o notepad++ aí q ele vai te dizer onde um bloco abre e onde ele fecha e use sempre o tab pra identar e não perder controle sobre seu código Agora vamos lá, arrumando o erro [1] seu código deverá ficar assim, note que é muito mais fácil entender o que cada coisa faz 2- Você só pode utilizar coisas como parâmetro que existam, sério, muita gente ainda acredita que cid significa sempre o player e isso não é verdade. No geral cid só existe dentro do callback (função principal do script) pois ele é o primeiro parâmetro da função, acompanha cmg: function onJoinChannel(cid, channelId, users, isTv) esse é o callback e olha só ali o nosso cid. Eu só posso usar coisas que utilizam o cid debaixo dessa linha aí pois antes disso ele não é definido, logo isso daqui daria erro: local pokes1 = getLivePokeballs(cid, getPlayerSlotItem(cid, 3).uid, true) local pokes2 = getLivePokeballs(sid, getPlayerSlotItem(sid, 3).uid, true) function onJoinChannel(cid, channelId, users, isTv) Sem falar que sid não existe, você vai ter que pensar em outra forma de coletar os pokemons do oponente e eu dou um bom palpite que você poderia usar aquele users ali no callback pra checar os players que já estão no channel. Nunca mexi com esse callback mas é um bom palpite, coloca pra printar o type daquilo e vai fazer testes pra ver como funciona aquilo (ou se vc manjar de source, olha na source como a função tá definida) Por fim, se vc só usa a variável uma vez, não tem porque definí-la. Corrigindo tudo ficamos com: Mas ainda não é certo de isso funcionar, só corrigi a parte estrutural do código.. to partindo do pressuposto que a semântica você acertou.
  14. rapaz, o erro que deu foi porque vc não passou parâmetro na função getPlayerStorageValue.. ela tinha que receber um creature id e o storage à ser checado. Mas eu acho que entendi oque vc tentou fazer, vc quer que ele cheque todos os storages da tabela e caso tenha valor >= 1 praquele determido storage aumente a vida, certo? Porque aqui você tá checando o valor de um storage inexistente local valor = config[getPlayerStorageValue(cid)] e além disso vc tá pegando o valor dele pra verificar na tabela, ou seja, esse 3001 e 3002 são os values que o storage não definido poderá assumir, era isso mesmo que você queria? Fiz duas versões, elas são ligeiramente diferentes. A primeira checa storages 3001 e 3002, a segunda checa se o valor de um storage é 3001 ou 3002:
  15. vc vai ter q fazer uma copia dessa parte de speed no login.lua... como vc tá setando storage e vocation, é facil fazer. Só recriar uma tabela e usar um for pra verificar OU a vocaçao, ou o storage; e aí setar a speed já ao logar.
  16. local LOL = nil local outfit = {lookType = LOL, lookHead = 0, lookBody = 0, lookLegs = 0, lookFeet = 0, lookTypeEx = 0, lookAddons = 0} amigo, vc tá setando o lookType pra nil (nulo), se vc quer pegar o looktype faz assim local geral = { speed = 300 } local config = { ["Charmander"] = {level = 1, health = 39, looktype = 369, storage = 857643, speed = 68, evo = "Charmeleon", vocid = 2}, ["Charmeleon"] = {level = 16, health = 58, looktype = 368, storage = 857644, speed = 80, evo = "Charizard", vocid = 3} } function setPokemonClass(cid, monster) doChangeSpeed(cid, -getCreatureSpeed(cid)) doChangeSpeed(cid, geral.speed+config[monster].speed) setCreatureMaxHealth(cid, config[monster].health *10) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) setPlayerStorageValue(cid, config[monster].storage, 1) doPlayerSetVocation(cid, config[monster].vocid) doCreatureChangeOutfit(cid, {lookType = config[monster].looktype}) end
  17. troca por esse daqui e altera os valores de correx e correy pra corrigir, teste valores entre -1 e 1 (-1, 0, 1) [to falando isso pela imagem] local effect = 169 --by brun123 --alterado v1.9 \/ local correx = 1 -- correcao de x local correy = 1 -- correcao de y local function func(cid, position, corpseid, effect) if not isCreature(cid) then return true end local corpse = getTileItemById(position, corpseid).uid if corpse <= 1 then return end if 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 end if isStone(item.itemid) then return doSendMagicEffect({x = position.x + correx, y = position.y + correy, z = position.z}, effect) end end end function onKill(cid, target, lastHit) if not ehMonstro(target) then return true end local corpse = getMonsterInfo(getCreatureName(target)).lookCorpse addEvent(func, 5, getCreatureSummons(cid)[1], getThingPos(target), corpse, effect) return true end
  18. poxa cara, é óbvio que eu não errei.. a definição de módulo ser diferente de zero é justamente pegar os números que não são divisíveis pelo determinado número -> portanto sua divisão possui resto. Só procurar no seu resultado final se possui algum número par :3. Mas eu entendi o seu ponto, o problema é que o intuito do desafio do mês é trazer scripts legais pro XT e não ser um desafio de lua puro, do contrário eu metia um pairsByKeys aqui e pedia pro pessoal explicar hahaha. Eu sou bem aberto à criticas e tals mas como foi dito, é apenas um esboço do código.. muito tem que ser trabalhado em cima dele e se eu ficar complicando muito o código as pessoas que não tem tanta prática em Lua podem acabar desistindo de tentar.
  19. roda 25 vezes num = num +1 e checa se ele não é divisivel por 2 pra inserí-lo numa tabela.. e isso é só um jeito q eu pensei de fazer esse código, se eu levei mais de 2 minutos escrevendo isso foi muito. Depois qnd eu for passar pra código mesmo eu optimizo
  20. @BananaFight e @Antharaz acertaram, vcs foram bem ligeirinhos.. pensei que o povo ia demorar alguns dias pra acertar esse :~ preciso começar a pensar em scripts mais dificeis haha.
  21. se vc fizer 1 desenho exemplificando como ele busca a área e me falar oque essa área representa eu digo que vc venceu, justo?
  22. @@Antharaz, acertou parcialmente.. ele não roda uma área haha ficaria muito custoso
  23. você tem razão, é que eu fiz o código correndo porque tinha esquecido disso daqui e acabei esquecendo de passar esse parâmetro. Vou editar, vlw
  24. Olá pessoal, seguindo a onda do desafio do mês eu bolei um novo desafio pra vocês no mesmo esquema do anterior (você pode verificar o desafio do mês passado clicando aqui) Eu vou mais uma vez apresentar um pseudocódigo, algumas partes dele estão mais explícitas na linguagem e outras estão mais teóricas mas isso não vai influenciar tanto. O desafio é o seguinte: vocês tem que tentar adivinhar do que se trata esse código. Isso vale tanto para explicar partes do código quanto para explicar a idéia por trás dele. A cada dia (o primeiro não conta) irei postar uma dica para ajudá-los nesse desafio, podendo ser uma dica explicando partes do código ou dicas sobre a funcionalidade dele. "Mas lobo, por que eu iria tentar descobrir do que se trata seu código estúpido?" Bem meu caro, será uma tarefa legal e esse script é uma idéia bem inovadora.. só o fato de você tentar ler irá ajudá-lo a treinar seu cérebro para a linguagem Lua. E também há uma recompensa!! aquele que acertar ou chegar mais perto verá e terá acesso ao código antes de todo mundo!!111 Espero que vocês aninem pra participar deste tanto quanto animaram para participar do outro Dicas = { } Lembrando que toda resposta próxima da correta irá ganhar 1 ponto de reputação.
  • Quem Está Navegando   0 membros estão online

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