Ir para conteúdo

brun123

Conde
  • Total de itens

    512
  • Registro em

  • Última visita

  • Dias Ganhos

    16

Tudo que brun123 postou

  1. brun123

    Script quest

    vê se funciona: function onUse(cid, item, frompos, item2, topos) doTransformItem(item.uid, item.itemid == 2058 and 2059 or 2058) local pos = topos pos.x = pos.x - 1 pos.y = pos.y + 1 local caixao, transformto = getTileItemById(pos, 1417), 7525 if caixao.uid <= 1 then caixao, transformto = getTileItemById(pos, 7525), 1417 end doTransformItem(caixao.uid, transformto) pos.y = pos.y + 1 caixao = getTileItemById(pos, transformto == 1417 and 7521 or 1418) doTransformItem(caixao.uid, transformto == 1417 and 1418 or 7521) return true end
  2. function onTargetTile(cid, position) position.stackpos = 255 local creature = doCreateMonster("azerus", position, false) doConvinceCreature(cid, creature) if isCreature(getCreatureTarget(cid)) then doTeleportThing(creature, getClosestFreeTile(creature, getThingPos(getCreatureTarget(cid))), false) end doSendMagicEffect(position, CONST_ME_MAGIC_BLUE) return true end local arr = { {1, 0, 1}, {0, 2, 0}, {1, 0, 1}, } local removeTime = 1.0 --time to remove the clones local function removeCreatures(cid, creature) if isCreature(creature) == TRUE then doRemoveCreature(creature) end end function onTargetTile(cid, pos) local creature = doSummonCreature("azerus", pos) doCreatureAddMana(cid, -1500) doCreatureSay(cid, "Utevo", TALKTYPE_ORANGE_1) doConvinceCreature(cid, creature) if isCreature(getCreatureTarget(cid)) then doTeleportThing(creature, getClosestFreeTile(creature, getThingPos(getCreatureTarget(cid))), false) end addEvent(removeCreatures, removeTime * 1000, cid, creature) return TRUE end local area, combat = createCombatArea(arr), createCombatObject() setCombatArea(combat, area) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) return doCombat(cid, combat, var) end
  3. brun123

    Magic Lvl

    no script da sua spell. adicione a linha: doPlayerAddSpentMana(cid, 45, true) o 45 é o equivalente ao que ele iria ganhar de magic com uma magia que gasta 45 de mana.
  4. é porque o monstro Azerus não tem a flag convinceable no seu xml, tente assim: function onCastSpell(cid, var) if not doSummonMonster(cid, "Azerus") then doPlayerSendCancel(cid, "Not enough space to summon.") return false end local summon = getCreatureSummons(cid) summon = summon[#summon] doCreatureSay(cid, "Utevo", TALKTYPE_ORANGE_1) doSendMagicEffect(getThingPos(summon), CONST_ME_TELEPORT) addEvent(function() if isCreature(summon) then doRemoveCreature(summon) end end, removeTime * 1000) return true end se não funcionar, você usa a sua script mesmo, só que abre o xml do seu monstro e procure por: <flag convinceable="0"/> e troca por 1 o valor
  5. Skymagnum, newText nunca vai ser um número, na verificação isNumber já ia dar false e ia sempre falar que só números são permitidos... você tem que passar ele pra número usando tonumber ou envolvendo em parênteses, mas é melhor usar tonumber, pois se não for possível transformar em número, retorna nil. também cometeu o mesmo erro que o tony, está mudando diretamente a skill de fist para o valor inserido na caixa, em vez de aumentar a skill. Tá aqui tony, veja se esse jeito te agrada: function doPlayerSetSkill(pid, skill, amount) local player = getPlayerByGUID(pid) if isCreature(player) then doRemoveCreature(player, true) end db.executeQuery("UPDATE `player_skills` SET `value` = ".. amount .." WHERE `player_id` = ".. pid .. " and `skillid` = ".. skill ..";") return true end function doPlayerSetMagic(pid, amount) local player = getPlayerByGUID(pid) if isCreature(player) then doRemoveCreature(player, true) end db.executeQuery("UPDATE `players` SET `maglevel` = " .. amount .. " WHERE `id` = "..pid) return true end function onTextEdit(cid, item, newText) local skillTable = { --[id do item] = id da skill, [1949] = SKILL_FIST, } local maxSkills = 100 local skillId = skillTable[item.itemid] if not skillId then return true end local value = tonumber(newText) if not value or value < 0 then doPlayerSendCancel(cid, "Por favor, insira um número válido.") return false end local guid = getPlayerGUID(cid) local points = getPlayerMagLevel(cid) local skill = getPlayerSkillLevel(cid, skillId) if points < value then doPlayerSendCancel(cid, "Você não tem points suficientes.") return false end if skill >= maxSkills then doPlayerSendCancel(cid, "Sua skill já está no máximo.") return false end local newValue = math.min(skill + value, maxSkills) doPlayerSetSkill(guid, skillId, newValue) doPlayerSetMag(guid, points - newValue + skill) return false end
  6. Eu tive que adaptar as funções do vodkart, pois iria dar um errozinho ao usar elas seguidas, já que as duas funções pegam informações do player e depois removem ele, assim que a primeira terminasse, a segunda não ia conseguir pegar informações do player (pois ele estaria off) e iria tentar remover ele novamente, sendo que ele já foi removido, então ia dar alguns erros no server, o fist iria aumentar e o magic level não iria diminuir... o parâmetro newText é uma string cara, um texto, você não pode comparar ela diretamente com um número e muito menos fazer operações aritméticas com textos. depois que você estava colocando a skill do fist diretamente igual ao texto entrado e o mesmo com magic, então depois de executar a script, um player com magic level 10 e club 10 que escrevesse 5 no texto, iria ficar com 5 de club e -5 de magic level (magic level negativo?) use assim: function doPlayerSetSkill(pid, skill, amount) local player = getPlayerByGUID(pid) if isCreature(player) then doRemoveCreature(player, true) end db.executeQuery("UPDATE `player_skills` SET `value` = ".. amount .." WHERE `player_id` = ".. pid .. " and `skillid` = ".. skill ..";") return true end function doPlayerSetMagic(pid, amount) local player = getPlayerByGUID(pid) if isCreature(player) then doRemoveCreature(player, true) end db.executeQuery("UPDATE `players` SET `maglevel` = " .. amount .. " WHERE `id` = "..pid) return true end function onTextEdit(cid, item, newText) if item.itemid ~= 1949 then return true end local value = tonumber(newText) if not value then doPlayerSendCancel(cid, "Por favor, insira um número válido.") return false end local guid = getPlayerGUID(cid) local magic = getPlayerMagLevel(cid) local fist = getPlayerSkillLevel(cid, 0) if magic >= value then doPlayerSetSkill(guid, 0, fist + value) doPlayerSetMag(guid, magic - value) end return false end perceba que ainda há algumas falhas nesse script já que eu não sei o que você pretende fazer, por exemplo, se o player escrever um número negativo na caixa de texto, em vez de perder magic level e ganhar fist, ele estaria perdendo fist e ganhando magic level... essa script não é lá muito inteligente, pois não há limitações... quero dizer que um cara pra upar o magic level do 0 para 1 leva muito pouco tempo, aí ele passa pra fist, depois upa mais 1 de magic level, e passa de novo... de 1 em 1 o cara consegue pegar 40k fist em 1 dia... mas vai ver o seu server é alternativo e nem usa as skills do tibia, por isso não coloquei nenhuma limitação, mas depois vê isso aí que tá fácil de abusar dessa script
  7. os.time() como o Oneshot disse, retorna o tempo desde aquela data que ele colocou até a data do caléndario do seu computador em segundos... pode perceber que se você mudar a data do seu computador, o os.time() vai retornar um valor diferente. a galera usa ele pra marcar tempo nas scripts, no exemplo que o caotic deu, ele armazena o valor do os.time() + 100 em uma storage. digamos na hora que essa função foi executada o os.time() retornou 5000 (só um exemplo, pois na verdade a função retorna um número grande), então a storage do player vai ficar marcado como 5100 (5000 + 100). Se o player for fazer a ação de novo, é feito uma verificação se a storage dele é maior do que o os.time(), se sim, significa que ainda não se passaram os 100 segundos. A cada segundo que se passa, o os.time() aumenta seu valor em 1, então depois dos 100 segundos terem se passado, o os.time() vai valer 5100, e na verificação se a storage dele vale mais que o os.time() nã ovai ser verdadeira, pois a storage dele está marcado 5100 e o os.time() passou a valer 5100 também, significando que já se passaram 100 segundos e o player está liberado pra executar a ação novamente... isso é só uma maneira de como é utilziada essa função, pois ela na verdade apenas retorna um número representando quantos segundos se passaram desde aquela data que o Oneshot postou até a data do seu computador.
  8. brun123

    Alavanca

    na verdade o 253/254/255 são apenas métodos pra determinar o que você quer pegar em um determinado tile. todos os "things" no tile, sjam itens ou criaturas, recebem um stackpos, sendo 0 o ground, 1 o que está mais acima, 2 o que está imediatamente embaixo do 1 e assim adiante. em c++, quando a função getThingFromPos ou getTileThingByPos é chamada, se o stackpos for 253, o retorno da função é obrigatoriamente uma criatura, isso não significa que a criatura está na stackpos 253. LordVinny, você deve modificar a script com o ID da escada que você quer que seja criada e em que posição isso vai acontecer.
  9. brun123

    Alavanca

    a script que você postou no tópico funciona ok, só substituir isso: local starId, starPosition = ?, {x = ?, y = ?, z = ?} pelo id e posição respectivamente, assim: local starId, starPosition = 3687, {x = 157, y = 88, z = 7} a propósito, a função getThingFromPos retorna uma tabela, então na hora de verificar se a função é diferente de 3687, sempre vai ser verdadeiro e vai criar infinitas escadas naquela posição, também não é bom usar ela, pois se tiver algum player, a getThingFromPos pode retornar as informações do player devido ao stackpos, não tenho certeza, mas acho que nem sempre vai ser 1 o stackpos da escada...
  10. pra aceitar as storages 1 2 3 era fazer a substituição que o slicer falou, como você deixou seu script? era pra ter funcionado
  11. código pro player parar de ganhar capacity após o level 500: function onAdvance(cid, skill, oldLevel, newLevel) if skill ~= 8 then return true end local maxLevel = 500 if newLevel <= maxLevel then return true end local playerCap = getPlayerFreeCap(cid) + (maxLevel - oldLevel) * getVocationInfo(getPlayerVocation(cid)).capacity for slot = 1, 10 do local item = getPlayerSlotItem(cid, slot).uid playerCap = playerCap + (item > 1 and getItemWeight(item) or 0) end addEvent(doPlayerSetMaxCapacity, 4, cid, playerCap) return true end precisa registrar no login.lua e no creaturescripts.xml
  12. isso funciona com itens simples, mas itens que tem action id, unique id ou qualquer atributo, vai perder suas características, já que ele está sendo removido e criando outro com mesmo id em outro lugar, parecendo que ele teletransportou... então na verdade o "certo" seria só: doTeleportThing(item.uid, newPos) isso pode mover um item de qualquer lugar pra uma determinada posição, pode estar dentro de um container, pode estar com algum player ou qualquer lugar, mas usando o teleport você se limita apenas a mover ele pra algum chão
  13. só que não ia funcionar, pois você executaria a doMoveItem com o parâmetro "pos" exatamente igual em todas as execuções, mas na verdade a posição do item vai variando teria que ir atualizando a variável pos também function doMoveItem(id, pos, dir) local item = getTileItemById(pos, id) if item.uid > 1 then local newPos = getPosByDir(pos, dir) if newPos then doTeleportThing(item.uid, newPos) return true end end return false end local dirs = {0, 1, 2, 5} local pos = {x = 100, y = 100, z = 7} --pos do item local id = 2155 --id do item for i = 1, #dirs do addEvent(doMoveItem, i * 100, id, pos, dirs[i]) pos = getPosByDir(pos, dirs[i]) end
  14. mas isso só esconde a barra de hp do player, e no client dele mesmo ainda aparece a barra como se ele estivesse com 0 de hp, e o nome também, e fica com aquela cor de um vermelho quase preto como se o player tivesse morrido pra esconder o nome do player precisei colocar o nick dele como " ", que na verdade, é só fazer dar hideName no player, o problema é que essa função não existe, ela só tem como flag pra monstros, basta fazer um pequeno ajuste no código fonte pra fazer com que os nomes dos players possam ser escondidos também, mas como o pessoal já disse aí, o cliente tem uma limitação, é preciso fazer outras modificações pra que o client do player receba packets que atualizem a criatura, ou seja, se ela já estiver na lista de criaturas vistas pelo client, o client recebe packets que removem ela e adicionam ela novamente, aí o nome é alterado
  15. a função doTeleportThing funciona com qualquer coisa que tenha uid, pode ser item ou criatura (npcs, monstros e players), qualquer coisa que tenha unique id, só não funciona com grounds se não me engano. a função getThingPosition faz a mesma coisa, retorna a posição de qualquer coisa que tenha uid
  16. provavelmente a sua função getPosByDir está com problemas... de toda forma, já que o objetivo é pegar todas as direções formando um quadrado, não precisa utilizar a função getPosByDir, use desse jeito: function checkItems(itemsId, centerPos, size) for x = -size, size do for y = -size, size do local checkpos = {x = centerPos.x + x, y = centerPos.y + y, z = centerPos.z} for _, itemid in pairs(itemsId) do doSendMagicEffect(checkpos, 15) if getTileItemById(checkpos, itemid).uid > 1 then return true end end end end return false end function onSay(cid, words, param) local items = {2707} checkItems(items, getThingPos(cid), 1) return true end Verifique aonde vai aparecer os effects agora
  17. Faz assim pra testar: function checkItems(itemsId, centerPos, range) for direction = 0, 7 do for _range = 1, range do for _, itemid in pairs(itemsId) do local checkpos = getPosByDir(centerPos, direction, _range) doSendMagicEffect(checkpos, 15) if getTileItemById(checkpos, itemid).uid > 1 then return true end end end end return false end function onSay(cid, words, param) local items = {2707} checkItems(items, getThingPos(cid), 1) return true end só precisa usar 1x, é melhor pra ver quais áreas os scripts está vasculhando
  18. Use assim: function checkItems(itemsId, centerPos, range) for direction = 0, 7 do for _range = 1, range do for _, itemid in pairs(itemsId) do local checkpos = getPosByDir(centerPos, direction, _range) doSendMagicEffect(checkpos, 15) if getTileItemById(checkpos, itemid).uid > 1 then return true end end end end return false end Coloquei apenas pra verificar das direções 0 a 7 e com uma linha a mais, pra mandar um efeito nas áreas que o script procurou... lembrando que a própria centerPos (parâmetro da função) não é vasculhada em si, apenas os tiles ao redor.
  19. cara, faz o seguinte então, vai naqueles 3 arquivos que eu pedi pra você postar, e substitui nas vezes em que aparece as palavras "TALKTYPE_ORANGE_1" por 1.
  20. você adicionou o "TALKTYPE_ORANGE_1 = 19"? se não der certo, tenta colocar "TALKTYPE_ORANGE_1 = 13"
  21. vai em data/lib e abre o arquivo 000-constant.lua e da ctrl+f por "TALKTYPE_ORANGE_1" se você encontrar, vê o valor que essa global está assumindo e poste aqui se não encontrar, basta adicionar essa linha em qualquer lugar do script: TALKTYPE_ORANGE_1 = 19
  22. function onKill(cid, target, lastHit) if not isMonster(target) then return true end local corpse = getMonsterInfo(getCreatureName(target)).lookCorpse local items = {2160, 2152} local effect = 15 local function func(position, corpseid, items, effect) local corpse = getTileItemById(position, corpseid).uid if corpse <= 1 then return end for slot = 0, getContainerCap(corpse) do local item = getContainerItem(corpse, slot) if item.uid <= 1 then return end if isInArray(items, item.itemid) then return doSendMagicEffect(position, effect) end end end addEvent(func, 5, getThingPos(target), corpse, items, effect) return true end Precisa colocar a tag no creaturescripts.xml, o tipo é "kill", e precisa registrar esse creature script no login.lua
  • Quem Está Navegando   0 membros estão online

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