Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Vê se isso aí dá certo, fiz de cabeça e não tenho como testar no trabalho local arrow_storm = { [2544] = { [0] = COMBAT_PHYSICALDAMAGE, -- Tipo de dano [1] = CONST_ME_HITAREA, -- Efeito de área [2] = CONST_ANI_ARROW, -- Efeito do tiro da flecha [3] = 2, -- Área de alcance dos danos [4] = {-1.3, -1.5, -30, -45, 5, 5, 2, 3}, -- Fórmula }, } local storage = {78881, 78882} function onCastSpell(cid, var) local arrow = getPlayerSlotItem(cid, CONST_SLOT_AMMO) if not arrow then doPlayerSendCancel(cid, "You need to equip an arrow type in ammo slot.") return false end if not arrow_storm[arrow.itemid] then doPlayerSendCancel(cid, "Sorry, you can't use Arrow Storm with this arrow.") return false end local tmp = arrow_storm[arrow.itemid] local isShooting = true doCreatureSetStorage(cid, storage[1], os.time() + 2) while isShooting do local fromPosition = getCreaturePosition(cid) local toPosition = fromPosition toPosition.y = toPosition.y - 8 addEvent(doSendDistanceShoot, 55, fromPosition, toPosition, tmp[2]) if os.time() > getCreatureStorage(cid, storage[1]) then isShooting = false end end if isShooting == false then local fallingArrows = true doCreatureSetStorage(cid, storage[2], os.time() + 2) while fallingArrows do local playerPosition = getCreaturePosition(cid) local toPosition = {x = math.random(playerPosition.x - tmp[3], playerPosition.x + tmp[3]), y = math.random(playerPosition.y - tmp[3], playerPosition.y + tmp[3]), z = playerPosition.z} local fromPosition = toPosition fromPosition.y = fromPosition.y - 8 local level = getPlayerLevel(cid) local skill = getPlayerSkillLevel(cid, SKILL_DISTANCE) local min = (level / tmp[4][5] + skill * tmp[4][7]) * tmp[4][1] + tmp[4][3] local max = (level / tmp[4][6] + skill * tmp[4][8]) * tmp[4][2] + tmp[4][4] doSendDistanceShoot(fromPosition, toPosition, tmp[2] addEvent(doAreaCombatHealth, 55, cid, tmp[0], toPosition, 0, min, max, tmp[1]) if os.time() > getCreatureStorage(cid, storage[2]) then fallingArrows = false end end end return true end
  2. Não entendi o propósito da coisa, mas falar que concatenação gasta memória, a não ser você esteja rodando o código com uma memória de 16KB, acho meio estranho sua recusa por tal método. local str = "Isso é\ Uma string\ Com indentação." str = string.gsub(str, string.char(9), string.rep(string.char(32), 4)) print(str) Mas faz isso aí, vai substituir os TABs por 4 espaços, que são printados normalmente. Mas gasta mais "KBs" de memória.
  3. Tenho interesses em ensinar do básico ao avançado de programação Lua, e sua utilização no Open Tibia, então se precisarem de mais um professor, o coordenador Omega possui meu contato. Abraço.
  4. Oneshot

    Scripter Lua

    Tá e até agora você não ordenou os valores da tabela.
  5. Eita, belo mapa, meus parabaims.
  6. Beleza, BreisPodeu? Seguinte, cara, vou te explicar mais ou menos como funciona seu servidor, ele tem sources programadas em C++, uma linguagem orientada a objetos. Daí, o atributo wandDamage que você configura no seu arquivo vocations.xml é interpretado por funções do arquivo vocations.cpp (posteriormente compilado no seu servidor). Como a linguagem é orientada a objetos, cara, o atributo wandDamage é exclusivo da classe Vocations e não da classe Player e não tem funções em Lua para alterar esse atributo dinamicamente. Uma maneira perfeita de fazer isso, é criar um atributo wandDamage na classe Item, alterar a fórmula que retorna o dano de wands no weapons.cpp, incluindo esse atributo, aí se pá você vai poder alterar o atributo pelo doItemSetAttribute e se pá até no items.xml Boa sorte \Õ/
  7. Eita, filhote, andou mexendo nas sources do servidor?
  8. E sources são utilitários? Ok, não deixa de ser, mas utilitários subentende-se por programas executáveis para auxiliar no desenvolvimento Open Tibia, como sprite editor, item editor, map editor... por mim, bastaria criar um prefixo na seção Download de Servidores Derivados, chamado Sources.
  9. Ô criatura, você acha que existe só um sistema de reset no fórum e quem vai te ajudar tem bola de cristal? Posta o link do sistema de reset que você usa.
  10. Vamos lá, O sistema será executado toda vez que jogador entrar no jogo, então, se ele entrar, ficar online uma hora, o sistema não dará o prêmio, a menos que ele saia e entre no jogo. Quanto a sua dúvida sobre a query SQL: db.executeQuery("UPDATE total_time_on SET value = "..hora + value.." WHERE player_id = "..id.. "") Do jeito que você fez, dá errado mesmo, pois aí você está chamando duas variáveis hora e value, e como você quer, value não é uma variável. Atenção também para a variável id, que você não declarou também, e a coluna não se chama player_id, mas sim id, no banco de dados dos servidores atuais. db.executeQuery("UPDATE `players` SET `value` = `value` + ".. hora .." WHERE `id` = ".. getPlayerGUID(cid) ..";") Fica desse jeito. Não desanime no primeiro erro, estude um pouco mais e você vai longe. Abraço.
  11. Que lindo isso essa explicação, curti o esquema de armazenar números fracionários na memória.
  12. Oneshot

    Help Kit Inicial

    Novamente, torno a dizer, o problema é que o baú que você está utilizando tem propriedade Moveable, utiliza outro baú com id sem essa propriedade, ou faz por creaturescript. E, bom, isso é um script de pokétibia... aqui não é o lugar de pedir coisas relacionadas a servidores derivados.
  13. Oneshot

    Help Kit Inicial

    Caraca, esse problema aí eu não vejo desde a versão 8.1 do Tibia. Dá uma olhada no ID dos baús usados nas quests e usa o mesmo para o baú do "kit inicial", se não faz o sistema por creaturescript. Abraço.
  14. Imagina, cara, meu sistema é incompleto mesmo, uma bosta de sistema. Aconselho você procurar outro mesmo. Abraços.
  15. Você se enganou. Outfits são salvas em storages, e a range reservada de storages é de 1000 a 1500. Qual a sua dificuldade em usar a função hasPlayerOutfit(cid, lookType[, addon = 0])? Ele retorna um valor booleano, ou é verdadeiro ou é falso. if canPlayerWearOutfit(cid, 136, 3) then Exemplo acima, verifico se o jogador pode usar a outfit Citizen do sexo Male com full addons. 1 = Primeiro Addon 2 = Segundo Addon 3 = Primeiro e Segundo Addons
  16. O Xtibia está sensacional heheh
  17. Isso não existe. Só através de um creaturescript "statschange" function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHGAIN and combat == COMBAT_HEALING then return false end return true end Cria o arquivo .lua, registra ele no creaturescripts.xml e coloca isso no monstro. <script> <event name="NOME_DO_EVENTO"/> </script> Pronto.
  18. O erro tá no doPlayerSendCancel. Strings tem aspas.
  19. Oneshot

    Spell doMoveCreature

    Muitos posts, e várias teorias que não chegam a lugar nenhum. Só vou dizer uma coisa, não precisa mexer nas sources, antes de usar doMoveCreature, verifica se é possível adicionar o jogador no tile com a função doTileQueryAdd, por exemplo: if doTileQueryAdd(cid, position) == RETURNVALUE_NOERROR then doMoveCreature(cid, position) end
  20. Você estava discutindo isso comigo no Skype e eu nem dei atenção direito. Enfim, você falou que ele arredonda os resultados, então, tecnicamente não dá para converter o binário resultante para o número racional original, certo?
  21. Obrigado pelos serviços, boa sorte na vida, tchau.
  • Quem Está Navegando   0 membros estão online

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