Ir para conteúdo

Paulix

Membro
  • Registro em

  • Última visita

  1. Paulix alterou sua foto pessoal
  2. Paulix postou uma resposta no tópico em Suporte Tibia OTServer
    adiciona em a mensagem em cima do segundo return false local OPENED_HOLE = {294, 383, 469, 470, 482, 482, 485, 489, 430} local OPENED_TRAP = {462} local DOWN_LADDER = {369, 370, 408, 409, 427, 428, 3135, 3136, 5545, 5763} local ROPE_SPOT = {384, 418} local allowed_items_inway = {2016, 2017, 2018, 2019, 2020, 2021, 1903, 1904, 1905} function onUse(cid, item, frompos, item2, topos) newPos = {x = topos.x, y = topos.y, z = topos.z, stackpos = 0} groundItem = getThingfromPos(newPos) BlockItemPos = {x = topos.x, y = topos.y, z = topos.z, stackpos = 1} blockingItem = getThingfromPos(BlockItemPos) BlockItem1 = {x = topos.x, y = topos.y, z = topos.z, stackpos = 0} blockiItem1 = getThingfromPos(BlockItem1) if (isInArray(ROPE_SPOT, groundItem.itemid) == TRUE) then newPos.y = newPos.y + 1 newPos.z = newPos.z - 1 if blockingItem.itemid <= 0 or blockiItem1.itemid <= 0 or (isInArray(allowed_items_inway, blockingItem.itemid) == TRUE) then doTeleportThing(cid, newPos) end elseif (isInArray(OPENED_HOLE, groundItem.itemid) == TRUE or isInArray(OPENED_TRAP, groundItem.itemid) == TRUE or isInArray(DOWN_LADDER, groundItem.itemid) == TRUE) then newPos.y = newPos.y + 1 downPos = {x = topos.x, y = topos.y, z = topos.z + 1, stackpos = 255} downItem = getThingfromPos(downPos) if (downItem.itemid > 0) then doTeleportThing(downItem.uid, newPos) else doPlayerSendCancel(cid, "Sorry, not possible.") end else doPlayerSendCancel(cid, "<MENSAGEM DE LUGAR BLOQUEADO>") return false end return true end
  3. bpm91 reagiu a uma resposta no tópico: Alguns Bugs
  4. Paulix postou uma resposta no tópico em Suporte Tibia OTServer
    pra corda funcionar tem q mecher no stackpos, verifica se a stackpos 1 está vazia, se sim sobe, se não retorna false
  5. sim, vc pega o storage, e vai aumentando o valor, quanto maior maior a chance de dropar os items
  6. da pra usar o event onKill pra verificar o monstro que ta matando e adicionar o loot no corpo dele. ai vc usa um storage que vai aumentando e quanto maior esse storage mais items e maiores as chances de drop, porem teria que alterar o funcionamento de drop de todos os monstros do servidor. talvez tenha alguma maneira melhor de fazer, mais eu não consegui pensar agora
  7. acho que da pra usar o creature event onKill, verifica se o killer tem o storage, e se tiver randomiza uma chance e adiciona o item no corpse da unidade morta
  8. DeathRocks reagiu a uma resposta no tópico: (Resolvido)[Erro] Wand
  9. @DeathRocks testei no meu tfs 0.4 e funcionou perfeitamente, testa ai e me fala local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) --tipo de dano setCombatParam(combat, COMBAT_PARAM_EFFECT, 41) --efeito do hit setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 28) --efeito do projetil function onGetFormulaValues(cid, level, maglevel) local min = -290 --dano minimo local max = -340 --dano maximo return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onUseWeapon(cid, var) doCombat(cid, combat, var) return true end
  10. vá em talkactions, veja qual script ta executando quando vc digita !bless, e posta o script aqui pra gente poder analisar
  11. para "corrigir" seu script ficaria assim local levels = {100, 201} -- indice 1 = level 100 // indice 2 = level 200 e assim vai... local items = {1951, 1951} -- indice 1 = item = 1951 // indice 2 = item 1951 e assim vai function onUse(cid, item) if getPlayerStorageValue(cid, 1992) == 1 then -- verifica se o storage é 1, pois se for 1 ja recebeu doPlayerSendTextMessage(cid, 21, "já recebeu") elseif getPlayerStorageValue(cid, 1993) == 1 then doPlayerSendTextMessage(cid, 21, "já recebeu") elseif getPlayerStorageValue(cid, 1994) == 1 then doPlayerSendTextMessage(cid, 21, "já recebeu") end if getPlayerLevel(cid) >= levels[1] then -- checa o indice 1 da tabela levels que corresponde a 100 (se o nivel do jogador for maior ou igual a 100) doPlayerAddItem(cid, items[1]) -- checa o indice 1 da tabela items que corresponde a 1951 setPlayerStorageValue(cid, 1992, 1) -- define o valor do storage 1992 para 1 doPlayerSendTextMessage(cid, 21, "Voce recebeu um item parabens") elseif getPlayerLevel(cid) >= levels[2] then doPlayerAddItem(cid, items[2]) setPlayerStorageValue(cid, 1993, 1) doPlayerSendTextMessage(cid, 21, "Voce recebeu um item parabens") --[[elseif getPlayerLevel(cid) >= levels[3] then -->>>>>>>>>>>>>essa parte da comentada pois não existe o indice 3 na tabela e caso cair aqui vai da erro doPlayerAddItem(cid, items[3]) doPlayerSendTextMessage(cid, 21, "Voce recebeu um item parabens") setPlayerStorageValue(cid, 1994, 1)]] else -- se for colocar mais use acima desse else doPlayerSendTextMessage(cid, 21, "Nao tem level necessario") end return true -- retornando verdadeiro para dizer que o script foi executado com sucesso end porem isso ainda não resolveria seu problema, tendo em vista que o jogador pode receber a mensagem de que ja recebeu o item e receber o item na mesma execução do código outro problema é que nivel 200 ele vai receber a recompensa do 100, pois a primeira verificação sera verdadeira. a melhor maneira de corrigir isso seria local levels = {100, 200, 300} -- indice 1 = level 100 // indice 2 = level 200 e assim vai... local items = {1951, 1951, 0000} -- indice 1 = item = 1951 // indice 2 = item 1951 e assim vai local storage = 1992 --storage que vai armazenar "quantas" recompensas o jogador ja recebeu function onUse(cid, item) level = getPlayerLevel(cid) value = getPlayerStorageValue(cid, storage) if level >= levels[1] and value < 1 then -- se o nivel do jogador for maior que o da tabela e o storage for menor que 1 doPlayerAddItem(cid, items[1]) -- adiciona o item que corresponde ao indice 1 da tabela items setPlayerStorageValue(cid, storage, 1) -- define o valor do storage 1992 para 1 doPlayerSendTextMessage(cid, 21, "Voce recebeu um item parabens") elseif level >= levels[2] and value < 2 then doPlayerAddItem(cid, items[2]) setPlayerStorageValue(cid, storage, 2) --atribui o storage pra 2 para dizer que ele ja recebeu a sua segunda recompensa doPlayerSendTextMessage(cid, 21, "Voce recebeu um item parabens") elseif level >= levels[3] and value < 3 then doPlayerAddItem(cid, items[3]) doPlayerSendTextMessage(cid, 21, "Voce recebeu um item parabens") setPlayerStorageValue(cid, storage, 3) -- recebeu a terceira recompensa else -- se for colocar mais use acima desse else doPlayerSendTextMessage(cid, 21, "Voce nao tem nivel suficiente para receber a proxima recompensa") end return true -- retornando verdadeiro para dizer que o script foi executado com sucesso end --[[PARA ADICIONAR MAIS LEVEL elseif level >= levels[4] then doPlayerAddItem(cid, items[4]) setPlayerStorageValue(cid, storage, 4) doPlayerSendTextMessage(cid, 21, "Você recebeu " .. items[4] .. " parabens") ]] seu erro foi na verificação dos níveis, tava verificando igual ao invés de maior, e nos storages tava verificando menor ao invés de menor ou igual adicionei 1 única variável que o valor aumenta conforme as recompensas são obtidas pelo jogador, e comentei tudo certinho para ajudar vc a entender o que esta acontecendo no script existe uma maneira muito mais fácil de fazer usando for e fazendo um script dinâmico que se adequa ao tamanho da tabela, mas como vc esta aprendendo vamos ficar por aqui ? espero ter ajudado, qualquer dúvida pode perguntar por aqui mesmo que eu ajudo
  12. os parâmetros da formula são os seguintes setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, MinA, MinB, MaxA, MaxB) o dano baseado em magic level segue a seguinte formula MinDmg = (Level + ML * 4) * MinA + MinB MaxDmg = (Level + ML * 4) * MaxA + MaxB lembrando que os valores tem que ser todos negativos para dar dano setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.0, -900, -3.2, -1100) já a formula de dano baseada em skill fica assim setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1.0, -900, 3.2, -1100) dano minimo = MinB dano máximo sem arma equipada = MaxB dano máximo com arma equipada MaxDmg = ((2 * (WeaponAttack * (WeaponSkill + 5.8) / 25 + (level - 1) / 10)) / Stance) * MaxA + MaxB A instância de combate divide seu ataque por 1 se tiver em modo ofenssivo 1.2 se tiver em modo balanceado 2 se tiver em modo defensivo no caso de skills, o valor de MinA é irrelevante, porem o valor de MaxA DEVE ser positivo, caso contrario ao multiplicar o dano por um valor negativo ele inverteria o sinal
  13. tira essa linha target = getCreatureTarget(cid) e no lugar de target, usa var.number se puder me explicar exatamente o que vc quer eu posso arrumar o script pra vc seu script parece ter o mesmo efeito em monstro e em player, pq vc ta fazendo a divisão?
  14. estou tentando fazer uma weapon para contar quantos atks por segundo o player da usando ela, mais como o os.time() só retorna o valor em segundos, ta um pouco complicado, sera que alguem pode me ajudar? PS: não sei a versão do tfs, sei que é 8.6 a versão do tibia PS2: não sou novato em programação, só preciso de uma mãozinha :D function onUseWeapon(cid, var) local avg = 0.000 local attime = os.time() local oltime = getCreatureStorage(cid, 50033) local hits = getCreatureStorage(cid, 50032) if attime-oltime >= 3 then doCreatureSetStorage(cid, 50033, attime) doCreatureSetStorage(cid, 50032, 1) end if oltime == attime then doCreatureSetStorage(cid, 50032, hits+1) avg = hits/1 elseif oltime ~= attime then avg = hits/1 doCreatureSetStorage(cid, 50033, attime) doCreatureSetStorage(cid, 50032, 1) end doSendAnimatedText(getPlayerPosition(cid), ""..string.format("%.3f", avg), COLOR_RED) doCombat(cid, combat, var) return 1 end
  15. estou usando tfs 0.4 rev 3777, porem desde que mudei de mapa, o seguinte erro ocorre quando digito /t com o admin [Error - TalkAction Interface] data/talkactions/scripts/teleporttown.lua:onSay Description:[14/2/2016 18:12:52] data/talkactions/scripts/teleporttown.lua:38: attempt to concatenate field '?' (a nil value) stack traceback: data/talkactions/scripts/teleporttown.lua:38: in function <data/talkactions/scripts/teleporttown.lua:1> o script ta assim function onSay(cid, words, param, channel) local master = false if(words == '/t') then master = true elseif(param == '') then local str = "" for i, town in ipairs(getTownList()) do str = str .. town.name .. "\n" end doShowTextDialog(cid, 2160, str) return true end local tid, t = cid, string.explode(param, ",") if(t[(master and 1 or 2)]) then tid = getPlayerByNameWildcard(t[(master and 1 or 2)]) if(not tid or (isPlayerGhost(tid) and getPlayerAccess(tid) > getPlayerAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. t[(master and 1 or 2)] .. " not found.") return true end end local tmp = getPlayerTown(cid) if(not master) then tmp = t[1] if(not tonumber(tmp)) then tmp = getTownId(tmp) if(not tmp) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Town " .. t[1] .. " does not exists.") return true end end end local pos = getTownTemplePosition(tmp, false) if(type(pos) ~= 'table' or isInArray({pos.x, pos.y}, 0)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Town " .. t[1] .. " does not exists or has invalid temple position.") return true end pos = getClosestFreeTile(tid, pos) if(type(pos) ~= 'table' or isInArray({pos.x, pos.y}, 0)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Destination not reachable.") return true end tmp = getCreaturePosition(tid) if(doTeleportThing(tid, pos) and not isPlayerGhost(tid)) then doSendMagicEffect(tmp, CONST_ME_POFF) doSendMagicEffect(pos, CONST_ME_TELEPORT) end return true end quando eu digito /town, aparece a lista das cidades que eu editei no map editor, quando os players são criados/morrem também funciona normalmente, mais o /t retorna erro no console e não teleporta quando digito /town <nome da cidade> também da como cidade não encontrada a unica coisa que alterei no servidor foi o mapa

Informação Importante

Confirmação de Termo