Ir para conteúdo

zipter98

Herói
  • Total de itens

    2553
  • Registro em

  • Última visita

  • Dias Ganhos

    72

Tudo que zipter98 postou

  1. Desculpe, não jogo Tibia e, logo, não entendi as referências acima. Basicamente, você quer uma spell que só possa ser usada a 1 SQM de distância do alvo e que altere a sprite do jogador por uma fração de segundo, simulando um soco? Um vídeo ou gif poderiam também ajudar na compreensão.
  2. data/creaturescripts/scripts local config = { name = "monster_name", --Nome do monstro. minDamage = 7000, --Dano mínimo para receber as recompensas. items = { prize = {itemid, count}, --{ID do item, quantidade} medal = xxx, --ID da medalha. }, storage = 91828, } function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and isMonster(cid) and getCreatureName(cid) == config.name and type == STATSCHANGE_HEALTHLOSS then local damage = getPlayerStorageValue(attacker, config.storage) < 1 and 0 or getPlayerStorageValue(attacker, config.storage) setPlayerStorageValue(attacker, config.storage, damage + value) end return true end function onDeath(cid, corpse, deathList) for _, pid in pairs(deathList) do local damage = getPlayerStorageValue(pid, config.storage) if damage >= config.minDamage then doPlayerSendTextMessage(pid, 27, "For helping killing "..config.name..", you received a medal and "..config.items.prize[2].."x "..getItemNameById(config.items.prize[1])..".") doPlayerAddItem(pid, config.items.prize[1], config.items.prize[2]) doItemSetAttribute(doPlayerAddItem(pid, config.items.medal, 1), "description", "Medalha de honra ganha por "..getCreatureName(pid).." por ajudar a derrotar o "..config.name.." no dia "..os.date("%D")..".") setPlayerStorageValue(pid, config.storage, -1) end end db.executeQuery("UPDATE player_storage SET value = -1 WHERE key = "..config.storage) return true end Tags: <event type="statschange" name="mDamage" event="script" value="nome_do_arquivo.lua"/> <event type="death" name="mItems" event="script" value="nome_do_arquivo.lua"/> Em login.lua: registerCreatureEvent(cid, "mDamage") No arquivo .xml do monstro: <script> <event name="mItems"/> </script>
  3. Desculpe minha má interpretação, mas você quer que a poção cure 150k ou, caso o valor máximo de HP/mana ultrapasse esse limite, a quantia curada seja essa?
  4. Mesmo se a task fosse individual, assim que algum jogador a completasse, o teleporte seria aberto. Daria na mesma, praticamente.
  5. local tpId = 1387 local tp = { info = { pos = {x = 761, y = 57, z = 7}, toPos = {x = 767, y = 52, z = 7}, time = 30, }, kill = { ["Hell's Knight"] = {count = 2, str = 10629}, ["Lok"] = {count = 1, str = 10630}, }, } function checkTask() for name, info in pairs(tp.kill) do if getGlobalStorageValue(info.str) < info.count then return false end end return true end function removeTp(tp) local t = getTileItemById(tp.info.pos, tpId) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(tp.info.pos, CONST_ME_POFF) end end function onDeath(cid) local m = tp.kill[getCreatureName(cid)] if not tp then return true end setGlobalStorageValue(m.str, getGlobalStorageValue(m.str) < 0 and 1 or getGlobalStorageValue(m.str) + 1) if checkTask() then doCreateTeleport(tpId, tp.info.toPos, tp.info.pos) doCreatureSay(cid, "O teleport irá sumir em "..tp.info.time.." segundos.", TALKTYPE_ORANGE_1) addEvent(removeTp, tp.info.time * 1000, tp) for _, info in pairs(tp.kill) do setGlobalStorageValue(info.str, -1) end end return true end
  6. local config = { lottery_hora = "60 Minutos", reward_count = 1, website = 0 } function onThink(interval, lastExecution) local players = getPlayersOnline() local list = {} for i, tid in ipairs(players) do list = tid end local winner = list[math.random(1, #list)] if(config.website == 1) then db.executeQuery("INSERT INTO `lottery` (`name`) VALUES ('".. getCreatureName(winner) .."');") end doBroadcastMessage('[Loteria Mineira] Ganhador: '.. getCreatureName(winner) ..', Recompensa: '.. config.reward_count ..'moedas! - Parabens ! (Proxima em: '.. config.lottery_hora ..')') doPlayerAddItem(winner, 8303, config.reward_count) doAccountAddPoints(winner, 1) return true end Sobre o problema do comando não adicionar corretamente os pontos, troque (em AddPoints.lua): doAccountAddPoints(cid, count) por: doAccountAddPoints(pid, count)
  7. Use a base que eu disse ter usado para testar o sistema. As únicas diferenças que o meu tem da PxG é que, enquanto no que escrevi a mensagem é "Mega Evolve!", no deles é o nome da mega evolução, e também porque cada mega evolução deles tem um ícone diferente na CD Bar. Como já disseram, estou viajando, logo não darei suporte por um bom tempo.
  8. O cooldown diminuído será em % baseado no CD total da magia, ou será diferente para cada uma? Responde rápido se possível, logo vou sair e amanhã irei viajar e só voltarei mês que vem. Enfim, escrevi para que o cooldown seja diminuído em 30% (achei esta a melhor porcentagem de redução de tempo de recarga). Se este valor não lhe agradar, mude o 0.3 (que equivale a 30%). O código talvez possa ser escrito de maneira mais simples, porém, como já disse, estou com pressa para sair. pokemon moves.lua: Nas spells que apliquem condições negativas (como Silence, Sleep, Slow, etc), haverá esta linha: local ret = {} Abaixo dela, coloque: ret.Spell = {cid, spell} Depois, em newStatusSyst.lua, abaixo de: doSendAnimatedText(getThingPosWithDebug(ret.id), "BOOST", 215) --alterado v1.8 coloque: local user, spell = ret.Spell[1], ret.Spell[2] if user and spell and isSummon(user) then local pid = getCreatureMaster(user) if isPlayer(pid) then local ball, index, cooldown = getPlayerSlotItem(pid, 8).uid, 0, 0 for i = 1, 12 do local move = getNewMoveTable(movestable[getCreatureName(user)], i) if move and move.name == spell then index = i cooldown = move.cd break end end if index ~= 0 then local newCd = math.floor(cooldown - cooldown * 0.3) setCD(ball, "move"..index, newCd) end end end
  9. Cara, esse evento não se registra em login.lua, e sim no arquivo XML dos monstros. Você tem certeza que instalou corretamente o onSpawn nas sources?
  10. Ops, código corrigido. Falta de atenção minha. Usa esta tag: <event type="spawn" name="bossSpawn" event="script" value="nome_do_arquivo.lua"/>
  11. Já terminei faz tempo, só estou esperando você avisar que criou o item. Certamente não ficou igual a PxG, porque, caso tenham usado esse método, deve ter demorado um bom tempo para achar o tempo ideal para representar um pulo "perfeito" (como o da gif). E, sinceramente, não estava com paciência de ficar procurando tal tempo. Função de pulo: function jump(cid, rounds) doChangeSpeed(cid, -getCreatureSpeed(cid)) doCreatureSetNoMove(cid, true) for i = 1, rounds do addEvent(function() if isCreature(cid) then local pos = getThingPos(cid) local item = doCreateItem(ITEM_INVISIVEL, 1, pos) addEvent(function() local it = getTileItemById(pos, ITEM_INVISIVEL).uid if it > 0 then doRemoveItem(it) end if i == rounds then doRegainSpeed(cid) doCreatureSetNoMove(cid, false) end end, rounds == 1 and 200 or (i + 2) * 100) end end, i * (rounds == 1 and 200 or 100)) end end Use jump(cid, 1) para um pulo de altura "1" (como o causado pelo Earthquake), e jump(cid, 2) para pulos como do Heavy Slam. Código do Heavy Slam: local config = { areas = {area1, area2}, --Áreas, em ordem de execução. effect = 160, --Efeito. combat = NORMALDAMAGE, --Elemento. } local function doPushCreature(target, cid) if target > 0 then if not isNpc(target) then local position = getThingPosition(cid) local fromPosition = getThingPosition(target) local x = ((fromPosition.x - position.x) < 0 and -1 or ((fromPosition.x - position.x) == 0 and 0 or 1)) local y = ((fromPosition.y - position.y) < 0 and -1 or ((fromPosition.y - position.y) == 0 and 0 or 1)) local toPosition = {x = fromPosition.x + x, y = fromPosition.y + y, z = fromPosition.z} if doTileQueryAdd(target, toPosition) == 1 and getTileInfo(toPosition).house == false then doTeleportThing(target, toPosition, true) end end end end jump(cid, 2) addEvent(function() for i = 0, #config.areas - 1 do addEvent(function() local pos = getPosfromArea(cid, config.areas[i + 1]) doMoveInArea2(cid, config.effect, config.areas[i + 1], config.combat, min, max) for j = 1, #pos do local pid = getTopCreature(pos[j]).uid if ehMonstro(pid) then doPushCreature(pid, cid) elseif isSummon(pid) then local master = getCreatureMaster(pid) if isSummon(cid) then if getPlayerStorageValue(master, 52480) >= 1 and getPlayerStorageValue(master, 52481) >= 0 then local masterCid = getCreatureMaster(cid) if isDuelingAgainst(masterCid, master) then doPushCreature(pid, cid) end end else doPushCreature(pid, cid) end end end end, i * 230) end end, 650)
  12. Teoricamente sim, de 1 em 1 hora. Se não funcionar, teste o primeiro código.
  13. Não se esqueçam de registrar o evento no arquivo .XML dos monstros que poderão spawnar um boss. local config = { chance = 1, --Coloquem apenas números inteiros (1 - 0.0001%). bosses = { --["monster_name"] = "boss", ["Dragon Lord"] = "Demodras", }, } function onSpawn(cid) if isMonster(cid) then addEvent(function() if isCreature(cid) then local boss = config.bosses[getCreatureName(cid)] if boss and math.random(1, 1000000) <= config.chance then local pos = getThingPos(cid) doRemoveCreature(cid) doCreateMonster(boss, pos) end end end, 5) end return true end
  14. <globalevent name="monster1" type="start" event="script" value="nome_do_arquivo.lua"/> <globalevent name="monster2" interval="3600" event="script" value="nome_do_arquivo.lua"/>
  15. Tem a maneira mais prática, que envolve apenas o onSpawn. Entretanto, você precisaria registrar o evento no arquivo XML de todos os monstros do jogo. (creaturescript) function backToPos(cid, pos) if isCreature(cid) then doTeleportThing(cid, pos) addEvent(backToPos, 60 * 60 * 1000, cid, pos) end end function onSpawn(cid) backToPos(cid, getThingPos(cid)) return true end Se achar muito cansativo, há uma outra maneira, que apesar de gastar muita memória no processo, você só precisará registrar 2 tags. (globalevent) function onStartup() for _, m in pairs(getMonstersOnline()) do local value = ":"..getThingPos(m).x.."/"..getThingPos(m).y.."/"..getThingPos(m).z setPlayerStorageValue(m, 9182, value) end return true end function onThink() for _, m in pairs(getMonstersOnline()) do local t = getPlayerStorageValue(m, 9182):sub(2):explode("/") doTeleportThing(m, {x = tonumber(t[1]), y = tonumber(t[2]), z = tonumber(t[3])}) end return true end
  16. Se você instalar essas duas funções nas sources, eu faço o código em Lua.
  17. Isso é bem simples, porém é necessário ter as sources do servidor e instalar as funções onSpawn (tem aqui no fórum, só procurar) e getMonstersOnline (o código desta função tem tanto na OTLand quanto no Tibia King).
  18. Não se preocupem, fazer o que vocês querem é bem simples. Como estou ocupado no momento, mais tarde farei o código para vocês. Pelas sources, é necessário apenas instalar aquele creatureevent que citei (onSpawn).
  19. Provavelmente você esqueceu de configurar alguma coisa (ou configurou errado) na tabela config. Se possível, poste como ficou seu código configurado.
  20. data/creaturescripts/scripts, geralmente spawn.lua. Você deve registrar o evento no arquivo XML do(s) monstro(s). Entretanto, em servidores de pokémon, os pokémons shinies são gerados pelo script apenas adicionando o prefixo "Shiny " no nome. No seu caso, este método não seria possível.
  21. Claro, seria quase o mesmo processo. Porém, neste caso, você teria que configurar uma tabela indicando os monstros e seus respectivos "shinies". Já adianto a ambos: será necessário instalar nas sources o creatureevent onSpawn. Link para a versão 0.3.6 Link para a versão 0.4
  22. OK. Você saberia dizer se há alguma tabela no seu servidor (em algum arquivo da lib) em que os pokémons são configurados para alguma coisa (por exemplo, status e spells, como no PDA)? Se sim, peço que diga o nome desta tabela. Assim, não haverá margens de erros na criação do shiny. Caso contrário, eu posso criar uma função para verificar se o monstro existe (meio gambiarra, mas enfim).
  • Quem Está Navegando   0 membros estão online

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