Ir para conteúdo

Zazeros

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Zazeros recebeu reputação de Bruce Pereira em [Pedido] Modificar esse spell para não atacar monstro.   
    @Bruce Pereira Cara, tu quer que não possa ser usado em monstro, ou que só conserte o erro do console?
     
    Se for a segunda opção, testa isso:
     
    local function voltar(cid, pos, target) local storage = 666 setPlayerStorageValue(target, storage, getPlayerStorageValue(target, storage) == -1 ) doCreatureSetNoMove(target, getPlayerStorageValue(target, storage) == 1 and false) end function onCastSpell(cid, var) local stor = 099 local waittime = 10 if exhaustion.check(cid, stor) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Aguarde " .. exhaustion.get(cid, stor) .. " segundos para usar Ittouryuu: Daishinkan.") return false end local sayP = 'O Player foi Preso durante 4 segundos.' local sayT = 'Voce foi Preso durante 4 segundos.Aguarde e voce voltara a se mover.' local pos = getCreaturePosition(cid) local target = getCreatureTarget(cid) local postarget = getCreaturePosition(target) doPlayerSendTextMessage(cid, 27, sayP) if isMonster(target) == true then return true else doPlayerSendTextMessage(target, 27, sayT) end doCreatureSetNoMove(target, true) local postarget = {x=getThingPosition(getCreatureTarget(cid)).x+1, y=getThingPosition(getCreatureTarget(cid)).y+1, z=getThingPosition(getCreatureTarget(cid)).z} doSendMagicEffect(postarget, 273) addEvent(voltar, 4*1000, cid, pos, target) exhaustion.set(cid, stor, waittime) return true end  
  2. Obrigado
    Zazeros recebeu reputação de Lobodu em Tp para citizens   
    @Lobodu Cara, eu não sei mexer em 12.6, mas posso te dar uma ideia de como fazer isso.
    Pegue um script de tp qualquer que tu tenha ai (ou pega da net) e põe uma restrição de storage. Se o player ter tal storage, ele é teleportado, se não, aparece uma msg falando que não pode. Ai quando ele chegar na cidade, põe pra ele ganhar essa storage
     
    Desculpe não poder ajudar mais
    Boa sorte
  3. Curtir
    Zazeros deu reputação a Madarada em Madara está de volta!   
    Fala galera, beleza?
     
    Quem não lembra daqueles tutoriais que eu fiz anos atrás da série Sprite Seduction?
     
    Pois é, o paizão está de volta melhor e mais forte e gostaria de compartilhar com os senhores 2 tutorias recentes que fiz para nossa comunidade.
    Aproveitem, mais tutoriais estão à caminho...
     
     
     
    Participe da Academia de Pixel
    https://discord.gg/BjK7dBgc
  4. Obrigado
    Zazeros recebeu reputação de Orientalz em Quest Spell   
    @jeszao
     
    Põe no action:
     E la nas spells, põe
     
  5. Curtir
    Zazeros deu reputação a Naze em (Resolvido)Spellbook com descrição   
    so to com tfs 1.3 então não posso testa, mas tenta ai e me fala oq da
    local desc = { ["exori flam"] = "Dano do tipo 'fire' no alvo.", ["exori vis"] = "Dano do tipo 'energy' no alvo.", ["exori ice"] = "Dano do tipo 'ice' no alvo." } function onUse(cid, item, fromPosition, itemEx, toPosition) local t = {} for i = 0, getPlayerInstantSpellCount(cid) - 1 do local spell = getPlayerInstantSpellInfo(cid, i) if(spell.level ~= 0) then if(spell.manapercent > 0) then spell.mana = spell.manapercent .. "%" end table.insert(t, spell) end end table.sort(t, function(a, b) return a.level < b.level end) local text, prevLevel = "", -1 for i, spell in ipairs(t) do local line = "" if(prevLevel ~= spell.level) then if(i ~= 1) then line = "\n" end line = line .. "Spells for Level " .. spell.level .. "\n" prevLevel = spell.level end local description = desc[spell.name] or "Sem descrição." text = text .. line .. " " .. spell.words .. " - " .. spell.name .. " = "..description.." : " .. spell.mana .. "\n" end doShowTextDialog(cid, item.itemid, text) return true end  
  6. Curtir
    Zazeros deu reputação a Alienbear em (Resolvido)Script Action Boss   
    Olá meu lindo amigo tudo bem?
    Vamos resolver
     
    Use esse código:
    local config = { bossName = "Maxxenius", bossName2 = "Glooth-Generator", bossName3 = "Glooth-Generator", bossName4 = "Glooth-Generator", summonName = "Rift Invader", bossPos = Position{x = 31983, y = 31982, z = 15}, horror = Position{x = 31982, y = 31984, z = 15}, phobia = Position{x = 31989, y = 31984, z = 15}, fear = Position{x = 31984, y = 31987, z = 15}, centerRoom = Position{x = 31984, y = 31985, z = 15}, -- Center Room exitPosition = Position{x = 32001, y = 31984, z = 15}, -- Exit Position newPos = Position{x = 31984, y = 31990, z = 15}, -- Player Position on room playerPositions = { Position{x = 32003, y = 31980, z = 15}, Position{x = 32003, y = 31981, z = 15}, Position{x = 32003, y = 31982, z = 15}, Position{x = 32003, y = 31983, z = 15}, Position{x = 32003, y = 31984, z = 15} }, range = 30, time = 30, -- time in minutes to remove the player } local function clearFerumbrasRoom() local spectators = Game.getSpectators(config.bossPos, false, false, 10, 10, 10, 10) for i = 2, #spectators do local spectator = spectators[i] if spectator:isPlayer() then spectator:teleportTo(config.exitPosition) spectator:getPosition():sendMagicEffect(CONST_ME_TELEPORT) spectator:say('Time out! You were teleported out by strange forces.', TALKTYPE_MONSTER_SAY) elseif spectator:isMonster() then spectator:remove() end end end local ferumbrasAscendantLever = Action() function ferumbrasAscendantLever.onUse(player, item, fromPosition, target, toPosition, isHotkey) if item.itemid == 9825 then if player:getPosition() ~= Position{x = 32003, y = 31980, z = 15} then return true end for x = 32003, 32003 do for y = 31980, 31984 do local playerTile = Tile(Position(x, y, 15)):getTopCreature() if playerTile and playerTile:isPlayer() then if playerTile:getStorageValue(421516177) > os.time() then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You or a member in your team have to wait 20 hours to face Boss again!") item:transform(9826) return true end end end end local specs, spec = Game.getSpectators(config.centerRoom, false, false, 15, 15, 15, 15) for i = 1, #specs do spec = specs[i] if spec:isPlayer() then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "There's someone fighting with Boss.") return true end end local spectators = Game.getSpectators(config.bossPos, false, false, 15, 15, 15, 15) for i = 1, #spectators do local spectator = spectators[i] if spectator:isMonster() then spectator:remove() end end for x = 32003, 32003 do for y = 31980, 31984 do local playerTile = Tile(Position(x, y, 15)):getTopCreature() if playerTile and playerTile:isPlayer() then playerTile:getPosition():sendMagicEffect(CONST_ME_POFF) playerTile:teleportTo(config.newPos) playerTile:getPosition():sendMagicEffect(CONST_ME_TELEPORT) playerTile:setStorageValue(421516177, os.time() + 20 * 60 * 60) -- 14 days player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have 30 minutes to kill and loot this boss. Otherwise you will lose that chance and will be kicked out.") addEvent(clearFerumbrasRoom, 60 * config.time * 1000, player:getId(), config.centerRoom, config.range, config.range, config.exitPosition) item:transform(9826) end end end Game.createMonster(config.bossName, config.bossPos, true, true) Game.createMonster(config.bossName2, config.horror, true, true) Game.createMonster(config.bossName3, config.phobia, true, true) Game.createMonster(config.bossName4, config.fear, true, true) elseif item.itemid == 9826 then item:transform(9825) return true end end ferumbrasAscendantLever:aid(30014) ferumbrasAscendantLever:register()  
    Motivo do erro: Quando você usa um for neste caso deste script ele vai executar tudo que está dentro do for repetindo a quantidade de players,
    se for 1 player será 1 repetição, 2 players 2 repetições, 3 players 3 repetições e assim por diante.
    agora removi de dentro do for e os monstros nascerão apenas 1 de cada como está no arquivo.
  7. Obrigado
    Zazeros deu reputação a Mor3nao em [NPC] Daily Task com 4 opções diarias.   
    Introdução:
         Eu estava procurando um sistema de tasks diarias funcional, achei alguns, mas nenhum do jeito que eu queria, então eu fiz esse.
    Ele tá bem simples, porém funcional, aí vou postar uma "melhoria" dele e linkar AQUI  << tá linkado, dá uma olhada lá ?
     
    Como funciona?
            Bom, eu me baseei no sistema de tasks do PxG onde você pode escolher entre tasks de diferentes niveis/dificuldades, no caso, este é possivel que vc escolha entre 4 opções, sendo elas de nivel "easy", "medium", "hard" e "expert", e tem até o server save para entregar.
    Como prêmios, coloquei: Quantidade aleatoria de XP, Quantidade fixa de um Item fixo e quantidade aleatoria de um(ou mais) item aleatorio.
     
    Como "instalar" o script:
    1.1 Vá até /data/npc e crie o arquivo daily.xml, abra-o e coloque tudo isso lá dentro:
     
    1.2 Vá até /data/npc/scripts e adicione o arquivo dailyTask.lua, e dentro dele coloque:
     
     
    2.1 Em /data/lib/lib.lua, acrescente a linha:
    dofile('data/lib/task/dailytask.lua')  
    2.2 Crie o arquivo dailytask.lua em /data/lib/task/, e dentro coloque:
     
     
    3.1 Em /data/creaturescript/creaturescripts.xml adicione a tag:
    <event type="kill" name="dailyTasks" script="dailyTasks.lua"/>  
    3.2 Registre o "dailyTasks" no seu login.lua
     
    3.3 Crie o arquivo dailyTasks.lua em /data/creaturescript/scripts e coloque tudo isso dentro:
     
    Configurando o Script:
    Essas configurações estão no:  /data/lib/task/dailytasks.lua
     
     
    Imagens de amostra:
    Escolhendo as tasks(A da direita é antes de save, e a da esquerda depois).

     
    Server Log contando quantos monstros foram mortos.

     
    Na bp normal os premios da primeira vez que eu fiz, na azul os premios da segunda (só pra mostrar que é aleatorio, um player não pode repetir a task)

  8. Obrigado
    Zazeros recebeu reputação de Capitao wyz em [AJUDA] SPELL   
    @Capitao wyz Só dar um curtir que já ta pago
     
    Eu tive que improvisar um tiquin.
    Em baixo de:
    function onCastSpell(cid, var) Eu coloquei isso:
    if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) == 1 then Ou seja, ele pega a distancia do player e a distancia do alvo, se for == 1 ele solta a spell, se não for == 1, ou seja, estiver distante do alvo, ele vai mandar uma msg de erro e um efeito, que estão na linha 95 e 96:
    doPlayerSendCancel(cid, "Creature is not recheable.") doSendMagicEffect(getPlayerPosition(cid), 2) Se quiser mudar a msg que aparece quando estiver distante, o efeito ou a própria distancia, só alterar essas partes.
  9. Gostei
    Zazeros recebeu reputação de Capitao wyz em [AJUDA] SPELL   
    local quant_hit = 4 -- quantidade de hits que ira dar no target local timeHit = 0.5 -- segundos de diferença para cada hit local quant_sqm = 1 -- sqms que ira empurrar o target local sqmTime = 0.01 -- segundos para empurrar após hitar, exemplo de meio segundo. local playerEffect241 = 191 -- efeito no player. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) function onCastSpell(cid, var) local target = getCreatureTarget(cid) if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) == 1 then if target > 0 then local position_target = nil local cont = 0 for i=-1, 1 do for j=-1,1 do position_target = {x=getCreaturePosition(cid).x+i, y=getCreaturePosition(cid).y+j, z=getCreaturePosition(cid).z} if isWalkable(position_target) then cont = cont+1 break end end if cont > 0 then break end position_target = nil end local px = math.random(-1,1) local py = 0 if px == -1 or px == 1 then py = 0 elseif px == 0 then local n = {1,-1} py = n[math.random(1,#n)] end local poscentral = {x=getCreaturePosition(cid).x+px, y=getCreaturePosition(cid).y+py, z=getCreaturePosition(cid).z} if isWalkable(poscentral) then position_target = poscentral end if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) == 1 then position_target = getCreaturePosition(cid) end local pos = position_target posTile1 = {{x=pos.x,y=pos.y,z=pos.z,stackpos=1}, 7524} -- embaixo do player posTile2 = {{x=pos.x+1,y=pos.y+1,z=pos.z,stackpos=1}, 7520} posTile3 = {{x=pos.x+1,y=pos.y,z=pos.z,stackpos=1}, 7523} posTile4 = {{x=pos.x+1,y=pos.y-1,z=pos.z,stackpos=1}, 7526} posTile5 = {{x=pos.x,y=pos.y-1,z=pos.z,stackpos=1}, 7500} posTile6 = {{x=pos.x-1,y=pos.y-1,z=pos.z,stackpos=1}, 7501} posTile7 = {{x=pos.x-1,y=pos.y,z=pos.z,stackpos=1}, 7525} posTile8 = {{x=pos.x-1,y=pos.y+1,z=pos.z,stackpos=1}, 7522} posTile9 = {{x=pos.x,y=pos.y+1,z=pos.z,stackpos=1}, 7521} posAll = {posTile1,posTile2,posTile3,posTile4,posTile5,posTile6,posTile7,posTile8,posTile9} if position_target ~= nil then local tempo = 0 while (tempo ~= quant_hit*(timeHit*1000)) do addEvent(sendEffect241, tempo, cid, target) tempo = tempo + 500 end tempo = 0 while (tempo ~= quant_hit*(timeHit*1000)) do addEvent(hitTarget, tempo, cid, target) tempo = tempo + (timeHit*1000) end local temp = tempo while (tempo ~= temp+quant_sqm*(sqmTime*1000)) do addEvent(empurrarTarget, tempo, cid, target, tempo, posAll) tempo = tempo + (sqmTime*1000) end local mana_hit = (getPlayerLevel(cid)*2 + getPlayerMagLevel(cid)*2 + 300) doCreatureAddMana(target, -mana_hit) for o=1, #posAll do doCreateItem(posAll[o][2], 1, posAll[o][1]) end return true else doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end else doPlayerSendCancel(cid, "Você precisa de um target!") end else doPlayerSendCancel(cid, "Creature is not recheable.") doSendMagicEffect(getPlayerPosition(cid), 2) end end function isWalkable(pos, creature, pz, proj) if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end local creature = getTopCreature(pos) if creature.type > 0 then return false end if getTilePzInfo(pos) and not pz then return false end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function hitTarget(cid, target) if isCreature(target) and isPlayer(cid) then local effect241 = 9 -- efeito do hit na creatura. doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -getHit(cid), -getHit(cid), effect241) end end function getHit(cid) local hit = getPlayerLevel(cid)*2 + getPlayerMagLevel(cid)*2 + math.random(650,750) return hit end function empurrarTarget(cid, target, tempo, posAll) if not isCreature(target) then for k=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[k][1].x,y=posAll[k][1].y,z=posAll[k][1].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == posAll[k][2] then doRemoveItem(removeTile.uid) end end end end if isCreature(target) and isPlayer(cid) then local positions = nil if getPlayerLookDir(cid) == 0 then positions = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y-1, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 1 then positions = {x=getCreaturePosition(cid).x+1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 2 then positions = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y+1, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 3 then positions = {x=getCreaturePosition(cid).x-1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} end local tp = sqmTime*1000*(quant_sqm-1)+quant_hit*timeHit*1000 if tempo == tp then for k=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[k][1].x,y=posAll[k][1].y,z=posAll[k][1].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == posAll[k][2] then doRemoveItem(removeTile.uid) end end end end end end function sendEffect241(cid, target) local position1 = {x=getPlayerPosition(cid).x, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z} if isCreature(target) and isPlayer(cid) then doSendMagicEffect(position1, playerEffect241) end end local quant_hit = 4 -- quantidade de hit's que ira dar no target local timeHit = 0.5 -- segundos de diferença para cada hit local quant_sqm = 1 -- sqms que ira empurrar o target local sqmTime = 0.01 -- segundos para empurrar após hitar, exemplo de meio segundo. local playerEffect241 = 191 -- efeito no player. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) function onCastSpell(cid, var) local target = getCreatureTarget(cid) if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) == 1 then if target > 0 then local position_target = nil local cont = 0 for i=-1, 1 do for j=-1,1 do position_target = {x=getCreaturePosition(cid).x+i, y=getCreaturePosition(cid).y+j, z=getCreaturePosition(cid).z} if isWalkable(position_target) then cont = cont+1 break end end if cont > 0 then break end position_target = nil end local px = math.random(-1,1) local py = 0 if px == -1 or px == 1 then py = 0 elseif px == 0 then local n = {1,-1} py = n[math.random(1,#n)] end local poscentral = {x=getCreaturePosition(cid).x+px, y=getCreaturePosition(cid).y+py, z=getCreaturePosition(cid).z} if isWalkable(poscentral) then position_target = poscentral end if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) == 1 then position_target = getCreaturePosition(cid) end local pos = position_target posTile1 = {{x=pos.x,y=pos.y,z=pos.z,stackpos=1}, 7524} -- embaixo do player posTile2 = {{x=pos.x+1,y=pos.y+1,z=pos.z,stackpos=1}, 7520} posTile3 = {{x=pos.x+1,y=pos.y,z=pos.z,stackpos=1}, 7523} posTile4 = {{x=pos.x+1,y=pos.y-1,z=pos.z,stackpos=1}, 7526} posTile5 = {{x=pos.x,y=pos.y-1,z=pos.z,stackpos=1}, 7500} posTile6 = {{x=pos.x-1,y=pos.y-1,z=pos.z,stackpos=1}, 7501} posTile7 = {{x=pos.x-1,y=pos.y,z=pos.z,stackpos=1}, 7525} posTile8 = {{x=pos.x-1,y=pos.y+1,z=pos.z,stackpos=1}, 7522} posTile9 = {{x=pos.x,y=pos.y+1,z=pos.z,stackpos=1}, 7521} posAll = {posTile1,posTile2,posTile3,posTile4,posTile5,posTile6,posTile7,posTile8,posTile9} if position_target ~= nil then local tempo = 0 while (tempo ~= quant_hit*(timeHit*1000)) do addEvent(sendEffect241, tempo, cid, target) tempo = tempo + 500 end tempo = 0 while (tempo ~= quant_hit*(timeHit*1000)) do addEvent(hitTarget, tempo, cid, target) tempo = tempo + (timeHit*1000) end local temp = tempo while (tempo ~= temp+quant_sqm*(sqmTime*1000)) do addEvent(empurrarTarget, tempo, cid, target, tempo, posAll) tempo = tempo + (sqmTime*1000) end local mana_hit = (getPlayerLevel(cid)*2 + getPlayerMagLevel(cid)*2 + 300) doCreatureAddMana(target, -mana_hit) for o=1, #posAll do doCreateItem(posAll[o][2], 1, posAll[o][1]) end return true else doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end else doPlayerSendCancel(cid, "Você precisa de um target!") end else doPlayerSendCancel(cid, "Creature is not recheable.") doSendMagicEffect(getPlayerPosition(cid), 2) end end function isWalkable(pos, creature, pz, proj) if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end local creature = getTopCreature(pos) if creature.type > 0 then return false end if getTilePzInfo(pos) and not pz then return false end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function hitTarget(cid, target) if isCreature(target) and isPlayer(cid) then local effect241 = 9 -- efeito do hit na creatura. doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -getHit(cid), -getHit(cid), effect241) end end function getHit(cid) local hit = getPlayerLevel(cid)*2 + getPlayerMagLevel(cid)*2 + math.random(650,750) return hit end function empurrarTarget(cid, target, tempo, posAll) if not isCreature(target) then for k=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[k][1].x,y=posAll[k][1].y,z=posAll[k][1].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == posAll[k][2] then doRemoveItem(removeTile.uid) end end end end if isCreature(target) and isPlayer(cid) then local positions = nil if getPlayerLookDir(cid) == 0 then positions = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y-1, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 1 then positions = {x=getCreaturePosition(cid).x+1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 2 then positions = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y+1, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 3 then positions = {x=getCreaturePosition(cid).x-1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} end local tp = sqmTime*1000*(quant_sqm-1)+quant_hit*timeHit*1000 if tempo == tp then for k=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[k][1].x,y=posAll[k][1].y,z=posAll[k][1].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == posAll[k][2] then doRemoveItem(removeTile.uid) end end end end end end function sendEffect241(cid, target) local position1 = {x=getPlayerPosition(cid).x, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z} if isCreature(target) and isPlayer(cid) then doSendMagicEffect(position1, playerEffect241) end end EU pensava que a magia era asism, de atacar de longe, malz
  10. Obrigado
    Zazeros recebeu reputação de NeGoGaBe em Npc de task simples   
    Ah sim, eu conheço esse. Vlw mano, mas eu queria fazer daquele jeito mais simples mesmo. Esse se fizer mais de 1 acho que da erro tbm.
  11. Obrigado
    Zazeros recebeu reputação de NeGoGaBe em Npc de task simples   
    0.4
     
    Bom dia galera, eu preciso de ajuda em um npc de task.
    Ele é bem simples, você fala as palavras, ele te da a storage, no creaturescripts pega a storage e conta os monstros na tabela, ai ele te da a storage maior e quando voltar pro npc, ele te da a recompensa. Até ai funciona 100%, o problema é que eu queria colocar pra esse npc dar 2 tasks, quando o player terminar uma, ele pode pegar outra com o mesmo npc. (Lembrando que se eu fizer 2 npcs, funciona normal, mas eu queria fazer em um só)
     
    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local quest = 845710 function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(not npcHandler:isFocused(cid)) then return false elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then npcHandler:say("OK2", cid) talkState[talkUser] = 2 elseif msgcontains(msg, "yes") and talkState[talkUser] == 2 then npcHandler:say("OK3", cid) setPlayerStorageValue(cid, quest, 2) setPlayerStorageValue(cid, 12672, 1) talkState[talkUser] = 0 elseif msgcontains(msg, "quest1") then local str = getPlayerStorageValue(cid, quest) if(str < 2) then npcHandler:say("OK1", cid) talkState[talkUser] = 1 return true elseif(str == 2) then npcHandler:say("OK4", cid) elseif(str == 3) then npcHandler:say("Finish", cid) setPlayerStorageValue(cid, quest, 4) setPlayerStorageValue(cid, 555140, 4) elseif(str == 4) then npcHandler:say("Over", cid) end talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) local keywordHandler2 = keywordHandler:new() local npcHandler2 = npcHandler:new(keywordHandler2) NpcSystem.parseParameters(npcHandler2) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg2) npcHandler:onCreatureSay(cid, type, msg2) end function onThink() npcHandler:onThink() end local talkState2 = {} local quest2 = 685740 function creatureSayCallback2(cid, type, msg2) local talkUser2 = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if(not npcHandler:isFocused(cid)) then return false elseif msgcontains(msg2, "yes") and talkState2[talkUser2] == 1 then npcHandler:say("sim2", cid) talkState2[talkUser2] = 2 elseif msgcontains(msg2, "yes") and talkState2[talkUser2] == 2 then npcHandler:say("Sim3", cid) setPlayerStorageValue(cid, quest2, 2) talkState2[talkUser2] = 0 elseif msgcontains(msg2, "quest2") then local str2 = getPlayerStorageValue(cid, 555140) if(str2 == 1) then local stro = getPlayerStorageValue(cid, quest2) if(stro < 2) then npcHandler:say("Sim", cid) talkState2[talkUser2] = 1 return true elseif(stro == 2) then npcHandler:say("Sim4", cid) elseif(stro == 3) then npcHandler:say("Sim5!", cid) setPlayerStorageValue(cid, quest2, 4) elseif(stro == 4) then npcHandler:say("Over2", cid) end talkState2[talkUser2] = 0 else npcHandler:say("Nop", cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback2) npcHandler:addModule(FocusModule:new())  
    Eu tentei fazer isso, que foi colocar 2x o script dele da task e mudar algumas coisas, colocando um "2" na frente. O problema é que ele só reconhece a segunda task, ou seja, a "quest2". Se falar "quest1", ele não diz nada e não da nem um erro no console.
    Alguém sabe como colocar 2 tasks nesse npc?
    Obrigado.
     
  12. Gostei
    Zazeros deu reputação a Jeanfersonsp em Check de monstro em uma area   
    Amigo topico de checar monster em certas areas ja existe, basta procurar um pouco.
     
    Mas recetemente eu encontrei uma script no seguinte tópico https://tibiaking.com/forums/topic/89834-check-de-monster-em-um-determinado-lugar/
    no qual checa qualquer Monsters em determinada area então eu resolvi aprimorar a funçao, para checar all ou somente um ou mais monstros em especifico.
     
     
    Formas de uso :
     
     
     
    Agora respondendo o seu tópico,  coloque isso na script
     
     
  13. Curtir
    Zazeros deu reputação a Cat em Árvores do Tibia - Variações By Nolis   
    Fiz essas peças para deixar a natureza Tibiana mais variada, recomendado uso de pattern + peças individuais para melhor efeito.
    Créditos: Cipsoft
     
    Amostra:

     
    Download:
    arvores_tibia.rar
     

     
  14. Gostei
    Zazeros deu reputação a xWhiteWolf em New Library v. 1.2   
    Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
    Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:



     
    Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
    Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.



    Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
    Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
    Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)

     
    Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.

    Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
    Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS. 

    EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.

    EDIT 2: Duas novas funções adicionas, espero que gostem!

    EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
  15. Curtir
    Zazeros deu reputação a Tottin em (Resolvido)Spell de dano baseado no shield   
    Isso tudo vai variar da forma com que você quer fazer seu script, sua dúvida principal era sobre como trabalhar em cima da defesa do shield. E isso como mencionei acima pode ser feito da seguinte forma, utilizando a função:
    getItemAttribute(uid,'defense')
     
    Pra checar se o item é 1 shield, você pode utilizar uma função que o mock disponibilizou já faz um bom tempo:
    local function isShield(uid) -- Function by Mock the bear.
    uid = uid or 0
    if getItemWeaponType(uid) == 5 then
        return true
    end
    return false
    end
     
    Com isso você vai ter todas informações necessárias pra fazer seu script trabalhar em cima da defesa do shield que estiver equipado, e claro vai poder checar se o item que você está "pegando" a defesa, é de fato um shield ou não.
     
  16. Curtir
    Zazeros deu reputação a Cat em Modificando Extensions I - Grounds (Terrain Palette)   
    Extensions Customizadas II - Walls
    Extensions Customizadas I - Grounds
    Extensions Customizadas III - Doodads (objetos montados)
     


     
    Sumário
    A. Escolha do item e arquivos que serão alterados.
    B. Edição do arquivo grounds.xml e adição da base para um novo brush.
    C. Explicação sobre o que modificar nas linhas adicionadas.
    D. Edição do arquivo borders.xml e adição da base para as bordas do brush anterior.
    E. Configuração dos Ids das bordas e do brush.
    F. Cadastramento do brush na paleta terrain, editando o arquivo tilesets.xml
     
     
     
    COMEÇAR
    (Dica: Utilize Notepad++)
     
     

     

     

     

     
    A.
    Tudo que está em azul nas imagens acima é onde você vai clicar e/ou editar. Recomendo backup. Cuidado para não modificar qualquer linha por acidente ou sem saber o que está fazendo, uma letra errada já é o suficiente pra dar erro na hora de abrir o mapa. Escolha o piso que você quer adicionar. Vou escolher o dark spikes para usar como exemplo, ok? (na imagem, ele já está pronto e adicionado na paleta)  
      
     
    B.
    Abra grounds.xml. Repare que o documento começa com <materials> e termina com </materials> Desça até o final do código. Antes do </materials> há algum item cadastrado, um </brush> Alguma coisa ... </brush>. Após o último brush, e antes do </materials>, cole o seguinte código:  
    <brush name="ITEMNOME" type="ground" server_lookid="ITEMID - ID PRA APARECER NA PALETA" z-order="NUMERO"> <item id="ID" chance="100"/> <item id="ID" chance="100"/> <item id="ID" chance="100"/> <item id="ID" chance="100"/> <border align="outer" id="NUMEROBORDA"/> </brush>  
    C.
    Server_lookid é pra por o ID da sprite que vai aparecer na paleta, pra identificar o atalho. Coloque o ID do ground principal caso tenha mais versões do mesmo. Em Z-order, se o brush X tiver z-order maior que brush Y, a borda de brush X vai sobrepor a do Y. Item Id e chances, adicione os grounds e mude o valor da chance para definir qual deles vai predominar caso houver vários, como por exemplo o grass, que tem diversas sprites diferentes. Se for apenas uma sprite, pode deixar uma linha. Border align, tem outer e inner. São para as duas finalidades apresentadas nas imagens abaixo.  
     

    (No inner dessa imagem, fora utilizado  <border align="inner" to="none" id="1"/>, que é padrão para vários brushs)
     
    O codigo do Dark Spikes ficará assim:
    <brush name="dark spikes" type="ground" server_lookid="12234" z-order="3200"> <item id="12234" chance="2500"/> <item id="12235" chance="2500"/> <item id="12236" chance="2500"/> <item id="12237" chance="2500"/> <border align="outer" id="155"/> </brush>  
     
    D.
    Revise o que você modificou e salve. Abra borders.xml. O esquema é o mesmo, desça até o final e depois de  </border> e antes de </materials>, adicione o código abaixo:    
    <border id="NUMEROBORDA"> -- NOME -- <borderitem edge="n" item="ID"/> <borderitem edge="e" item="ID"/> <borderitem edge="s" item="ID"/> <borderitem edge="w" item="ID"/> <borderitem edge="cnw" item="ID"/> <borderitem edge="cne" item="ID"/> <borderitem edge="csw" item="ID"/> <borderitem edge="cse" item="ID"/> <borderitem edge="dnw" item="ID"/> <borderitem edge="dne" item="ID"/> <borderitem edge="dsw" item="ID"/> <borderitem edge="dse" item="ID"/> </border>  
    E.
    O número que estiver em border id vai servir para ligar essass bordas ao brush criado anteriormente. Identifique o nome do brush a qual essa borda pertence para ficar fácil encontrar mais tarde ( -- exemplo -- ) Siga a tabela abaixo para configurar as bordas, conforme a posição delas:  

     
     
    O código das bordas do dark spikes ficará assim:
    <border id="155"> -- dark spikes border -- <borderitem edge="n" item="12255"/> <borderitem edge="e" item="12256"/> <borderitem edge="s" item="12254"/> <borderitem edge="w" item="12257"/> <borderitem edge="cnw" item="12264"/> <borderitem edge="cne" item="12265"/> <borderitem edge="csw" item="12263"/> <borderitem edge="cse" item="12262"/> <borderitem edge="dnw" item="12260"/> <borderitem edge="dne" item="12261"/> <borderitem edge="dsw" item="12259"/> <borderitem edge="dse" item="12258"/> </border>  
    F.
    Agora que o ground foi criado e as bordas configuradas, é preciso adicionar o atalho na paleta, para poder usá-lo. Abra tilesets.xml. Dê um ctrl + f e procure por: <tileset name="Nature"> em terrain. Ou no local que você preferir. Também pode colocar na ordem que quiser, reinicie o editor e teste.  
    Dúvidas? Comente.
     
     
     
     
     
     
     
     
     
     
  17. Gostei
    Zazeros deu reputação a Mathias Kenfi em (Resolvido)Healando por segundo usando ML   
    Os valores fixos foram exemplos de como deve ser feito, afinal da maneira que você estava fazendo não ia funcionar
     
    Para não ser valor fixo, basta você fazer da mesma forma que está escrito na função abaixo:
    function onGetFormulaValues(cid, level, maglevel) local min = (((level/5)+(maglevel*1) +1)) local max = (((level/5)+(maglevel*2) +3)) return min, max end Neste caso é só você criar uma variável GLOBAL da mesma forma que está escrito acima
     
    EXEMPLO:
    local level = getPlayerLevel(cid) local maglevel = getPlayerMagLevel(cid) local min, max = (((level/5)+(maglevel*1) +1)), (((level/5)+(maglevel*2) +3)) Mas deve ser declarado com variável GLOBAL, neste caso você deve declarar ela fora de uma função
     
    Porém você vai se deparar com outro problema, que é a variável "cid", porque você precisa de uma função padrão para declarar esta variável.
    Então para TENTAR resolver este problema tente usar o script dessa forma
    local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) function onGetFormulaValues(cid, level, maglevel) local min = (((level/5)+(maglevel*1) +1)) local max = (((level/5)+(maglevel*2) +3)) -- Essas variáveis são validas apenas para esta função, pois você fechou o escopo return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") local condition = createConditionObject(CONDITION_REGENERATION) function onCastSpell(cid, var) -- Perceba que eu coloquei dentro desta função para definir a variável cid local level = getPlayerLevel(cid) local maglevel = getPlayerMagLevel(cid) local min, max = math.ceil((((level/5)+(maglevel*1) +1))), math.ceil((((level/5)+(maglevel*2) +3))) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_TICKS, 1 * 60 * 1000) setConditionParam(condition, CONDITION_PARAM_HEALTHGAIN, math.random(min, max)) -- Agora estão declaradas logo acima setConditionParam(condition, CONDITION_PARAM_HEALTHTICKS, 1000) setCombatCondition(combat, condition) return doCombat(cid, combat, var) end É uma das possibilidades de resolver o problema (existe script melhor pra tal coisa, porém é a mesma coisa)
  18. Gostei
    Zazeros deu reputação a KekezitoLHP em Cura de Potion Diferente   
    Nome Do Script: Cura de Potion Diferente
    Tipo: Action
    Autor: KekezitoLHP
    Testado em: Tfs 0.4 dev 

    Que ele faz ?: Bem é um sistema de potions que você define o tempo que é para curar e quantidade (pode ser em percentagens ou não.. como você queira.) e o intervalo entre as curas. "um exemplo, cura de 100 a 100 em 10 segundos ou de 10% 10% em 10 seg" acho que deu pra entende.. 
     
    Instalado:
     
    Vai em data/actions/actions.xml e adicione:
    <action itemid="2550" event="script" value="xxxx.lua"/> No id 2550 podem coloca o que deseja, xxxx.lua coloca nome que deseja se não deixa assim. 
     
    Agora vai em data/actions/scripts crie um arquivo chamado xxxx.lua e coloque isso
    function onUse(cid, item, frompos, item2, topos) if (getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE) then doPlayerSendCancel(cid,"Desculpe, nao pode estar em battle") return TRUE end if not isCreature(item2.uid) and not isPlayer(item2.uid) then return doPlayerSendCancel(cid,"Please use on you or in you summon.") end doRemoveItem(item.uid, 1) local i = 500 local v = (getCreatureMaxHealth(item2.uid)/100) * 10 local max = 5000 while i <= max do addEvent(doCreatureAddHealth,i,item2.uid,v) addEvent(doSendMagicEffect,i,getCreaturePosition(i tem2.uid), 12) i = i + 500 end return true end Configurado:
     
    em 500 coloque o intervalo entre as curas.
    em 5000 coloque o tempo maximo que ficará curando.
    em local v = (getCreatureMaxHealth(item2.uid)/100) * 10  coloque a formula do heal.. nesse caso irá curar 10% em 10% da vida maxima.. caso vc keira que cure em qtd e nao em percentagem coloque por exemplo 100.. 200.. que irá curar 100 em 100 ou 200 em 200.. 
     
     
    Qualquer duvida ou erro só posta 
     
  19. Curtir
    Zazeros deu reputação a luanluciano93 em (Resolvido)Check de Outfit em spell   
    local outfit = 267 local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) setCombatParam(combat, COMBAT_PARAM_EFFECT, 64) setCombatParam(combat, COMBAT_PARAM_USECHARGES, true) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack, level / 10 return -(skillTotal / 10 + levelTotal), -(skillTotal + levelTotal) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var) if getCreatureOutfit(cid).lookType == outfit then return doCombat(cid, combat, var) else doPlayerSendCancel(cid, "Você não tem o outfit x.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end end  
  20. Curtir
    Zazeros deu reputação a MatCollier em (Resolvido)Promotion com 2 opções   
    Posso passar o script, mas não sei como funciona a conversão infelizmente.
     
     
    No caso é só tu mudar o 5 pelo id da vocação que tu quer.
     
    Aí pode fazer um script de npc desses pra cada promoção diferente (que foi o que eu fiz) ou tentar juntar eles em um só, o que é possível, acho eu.
  21. Curtir
    Zazeros recebeu reputação de Vandrow em WAND CONJURA SPELL   
    @Vandrow Bom, oq tu pode fazer é copiar de alguma coisa parecida que ja existe, tipo a burst arrow. Ai voce altera as coisas que voce quer, o tipo de dano, o efeito e o tamanho da area que tu quer
  22. Curtir
    Zazeros recebeu reputação de Vandrow em WAND CONJURA SPELL   
    @Vandrow Cara, só lembre de alterar a wand no weapons.xml
     
    <wand id="2187" level="33" mana="13" min="55" max="75" type="fire" event="script" value="o nome do arquivo lua da wand"> <!-- Wand of Inferno -->
    <vocation id="1"/>
    </wand>
  23. Curtir
    Zazeros deu reputação a Vodkart em Players sao teleportados apos puxar a alavanca   
    só agora que vi, erro meu
     
    function HaveCreatureArena(area, remove, clean) for x = area[1].x - 1, area[2].x + 1 do for y = area[1].y - 1, area[2].y + 1 do local pos = {x=x, y=y, z=area[1].z} local m = getTopCreature(pos).uid if remove ~= false and m ~= 0 and isMonster(m) then doRemoveCreature(m) end if clean ~= false then doCleanTile(pos,false) end end end end local from, to = {x = 1105, y = 1113, z = 7}, {x = 1115, y = 1123, z = 7} local t = { lvl = 100, Time = 15, -- em minutos entrada = { {x = 1045, y = 1014, z = 6}, -- pos players {x = 1045, y = 1015, z = 6} }, saida = { {x = 1110, y = 1122, z = 7}, -- pos para onde eles irão {x = 1110, y = 1123, z = 7} }, monstros = { {{x = 1108, y = 1116, z = 7}, "Orc"}, -- defina pos dos montros e nomes {{x = 1108, y = 1117, z = 7}, "Orc"}, {{x = 1108, y = 1118, z = 7}, "Orc"}, {{x = 1108, y = 1119, z = 7}, "Orc"} } } function VarAnihiPlayer(cid) if not isCreature(cid) then return LUA_ERROR end if isInRange(getPlayerPosition(cid), from, to) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end end function getPlayersInArea(fromPos, toPos) local players = {} for _, pid in ipairs(getPlayersOnline()) do if isInRange(getPlayerPosition(pid), fromPos, toPos) then table.insert(players, pid) end end return players end function onUse(cid, item, fromPosition, itemEx, toPosition) local check = {} if #getPlayersInArea(from, to) > 0 then doPlayerSendCancel(cid, 'Aguarde, tem jogadores fazendo a quest.') return true end for _, k in ipairs(t.entrada) do local x = getTopCreature(k).uid if(x == 0 or not isPlayer(x) or getPlayerLevel(x) < t.lvl) then doPlayerSendCancel(cid, 'Está faltando player ou alguém não possui level '..t.lvl..' ou mais.') return true end table.insert(check, x) end HaveCreatureArena({from,to}, true, true) for _, summon in pairs(t.monstros) do doCreateMonster(summon[2], summon[1]) end for i, tid in ipairs(check) do doSendMagicEffect(t.entrada, CONST_ME_POFF) doTeleportThing(tid, t.saida, false) addEvent(VarAnihiPlayer, t.Time*1000, tid) doSendMagicEffect(t.saida, CONST_ME_ENERGYAREA) end doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) return true end  
     
  24. Curtir
    Zazeros recebeu reputação de JEAN JR em (Resolvido)RESPAW COM PLAYER NA TELA   
    @JEAN JR Cara, não é mais fácil um script que summona um monstro quando da um certo tempo? Como se fosse script de invasão, mas com 1 monstro só, ou quantos você quiser
  25. Gostei
    Zazeros deu reputação a lordzetros em (Resolvido)Spawn de monstro raro   
    local positions = { {x = 1135, y = 1253, z = 7} } local m = {"Wyvern Rare"} function onThink(interval, lastExecution, thinkInterval) if(math.random(1, 100) < 15) then if not (isCreature(n_monster)) then local pos = positions[math.random(1, #positions)] local monster = m[math.random(1,#m)] n_monster = doSummonCreature(monster, pos) end end return true end ?

Informação Importante

Confirmação de Termo