Ir para conteúdo

jhon992

Conde
  • Total de itens

    631
  • Registro em

  • Última visita

  • Dias Ganhos

    13

Tudo que jhon992 postou

  1. Mimic Spell: function onCastSpell(cid, var) local tempo = 30 -- tempo em segundos que vai durar o controle. local target = getCreatureTarget(cid) local position = getPlayerPosition(cid) doCreatureSetNoMove(target, true) setPlayerStorageValue(cid, 5421, os.time()+tempo) movePlayer(position, target, cid) return true end function movePlayer(position, target, cid) if isCreature(target) and isPlayer(cid) then local pos = getCreaturePosition(target) if getPlayerPosition(cid).x ~= position.x then pos = {x = getCreaturePosition(target).x+(getPlayerPosition(cid).x +(- 1 * position.x)), y = getCreaturePosition(target).y, z = getCreaturePosition(target).z} elseif getPlayerPosition(cid).y ~= position.y then pos = {x = getCreaturePosition(target).x, y = getCreaturePosition(target).y+(getPlayerPosition(cid).y +(- 1 * position.y)), z = getCreaturePosition(target).z} end if isWalkable(pos) then doTeleportThing(target, pos) end if (getPlayerStorageValue(cid, 5421) - os.time()) > 0 then addEvent(movePlayer, 100, getPlayerPosition(cid), target, cid) else doPlayerSendTextMessage(cid, 22, "Você perdeu o controle.") doCreatureSetNoMove(target, false) end end end function isWalkable(pos, creature, pz, proj) -- nord 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
  2. faltou uns "then" e uma ageitadinha na estrutura de "ifs". agora acho que vai funcionar: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid -- Conversa Jogador/NPC if msgcontains(msg, 'Jester Hat') then selfSay('Ok, para adquirir o Jaster Hat precisarei de 100 {Nails}, voce pode obter nos War Golem.', cid) talkState[talkUser] = 1 elseif msgcontains(msg, 'Jester Staff') then selfSay('Ok, para adquirir o Jaster Staff precisarei de 111 {Soul orb}.', cid) talkState[talkUser] = 2 end if (msgcontains(msg, 'nails')) and talkState[talkUser] == 1) then if (doPlayerRemoveItem(cid, 8309, 100) then doPlayerAddItem(cid, 7957, 1 ) selfSay('Obrigado pela troca amigo. Tenha um bom dia!', cid) else selfSay('Voce nao possui o item', cid) end elseif (msgcontains(msg, 'soul orb')) and talkState[talkUser] == 2) then if (doPlayerRemoveItem(cid, 5944, 111) then doPlayerAddItem(cid, 7958, 1 ) selfSay('Obrigado pela troca amigo. Tenha um bom dia!', cid) else selfSay('Voce nao possui o item', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  3. local petNames = {"RAT","DRAGON","DEMON"} local petStorage = { ["RAT"] = 203105, -- storage do pet 1 ["DRAGON"] = 203106, -- storage do pet 2 ["DEMON"] = 203107 -- storage do pet 3 } local textSay = {"Sim", "Nao", "Talves", "Nao intendi vc poderia repetir?"} function onSay(cid, words, param, channel) local summons = getCreatureSummons(cid) if param == "" then local text = "Você não possui pets!" local o = 0 for i=1, #petNames do if getPlayerStorageValue(cid, petStorage[petNames[i]]) > 0 then o = o + 1 if o == 1 then text = o.." - ".. string.lower(petNames[i]) .."\n" else text = text.. o .." - ".. string.lower(petNames[i]) .."\n" end end end doShowTextDialog(cid,8977,text) return true end if param == "back" then for k = 1, #summons do pet = getCreatureName(summons[k]) doCreatureSay(cid, string.lower(pet) ..", back!", 1) doRemoveCreature(summons[k]) end return true end local t = string.explode(param, ",") if t[1] == "say" then if #summons > 0 then doCreatureSay(summons[1], t[2], 1) else doPlayerSendCancel(cid,"Você possui Pet sumonado.") end return true end if t[1] == "conversa" then if #summons > 0 then doCreatureSay(summons[1], textSay[math.random(1,#textSay)], 1) else doPlayerSendCancel(cid,"Você possui Pet sumonado.") return true end end param = string.upper(param) if isInArray(petNames, param) then if getPlayerStorageValue(cid, petStorage[param]) == -1 then doPlayerSendCancel(cid,"Você não possui esse Pet.") return true elseif getPlayerStorageValue(cid, petStorage[param]) == 1 and #summons < 2 then if getTilePzInfo(getCreaturePosition(cid)) == false then x = doSummonCreature(param, getCreaturePosition(cid)) doConvinceCreature(cid, x) doCreatureSay(cid, string.lower(param) ..", go!", 1) doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 2) else doPlayerSendTextMessage(cid, 22, "Você não pode sumonar seu Pet em Pz.") return true end else doPlayerSendTextMessage(cid, 22, "Seu Pet esta sumonado, fale !pet back.") return true end else doPlayerSendCancel(cid,"Esse Pet não existe.") end return true end
  4. fica show de bola esse "info".
  5. como assim pet não morrer? ele ia ter hp infinito... ele é um summon, claro que esta atacando. caso algum não ataque verifica se o monstro tem essa frag: <flag convinceable="1"/> no seu script em monsters/scripts/
  6. algo desse tipo no login.lua, quem sabe funcione. if getPlayerGroupId(cid) == 2 then local outfit = {lookType = 266, lookHead = 87, lookBody = 87, lookLegs = 87, lookFeet = 87} doSetCreatureOutfit(cid, outfit, -1) end
  7. em todo tfs tem, ta em data/actions/scripts/tools/machete.lua ta aew o script, caso você não tenha msm: local JUNGLE_GRASS = {2782, 3985} local SPIDER_WEB = {7538, 7539} function onUse(cid, item, fromPosition, itemEx, toPosition) if(isInArray(JUNGLE_GRASS, itemEx.itemid)) then doTransformItem(itemEx.uid, itemEx.itemid - 1) doDecayItem(itemEx.uid) return true end if(isInArray(SPIDER_WEB, itemEx.itemid)) then doTransformItem(itemEx.uid, (itemEx.itemid + 6)) doDecayItem(itemEx.uid) return true end if(itemEx.itemid == 1499) then doSendMagicEffect(toPosition, CONST_ME_POFF) doRemoveItem(itemEx.uid) return true end return destroyItem(cid, itemEx, toPosition) end
  8. jhon992

    Perder Loot

    http://www.xtibia.com/forum/topic/177979-level-protection/
  9. era melhor se tu passase o script todo pra saber como vai funcionar isso.
  10. põe isso no teu login.lua antes do último return true que deve resolver: if not isPremium(cid) then if getPlayerPromotionLevel(cid) > 1 then setPlayerPromotionLevel(cid, 1) end end
  11. Tava na hra de alguem postar um deathlist que funcione. Rep+
  12. jhon992

    Addevent Item

    #Reportado para moverem para Dúvidas Sanadas.
  13. o do Smart nem vai pegar. saduha
  14. vai na pasta data/movements/script, duplica um arquivo e nomeia para "resettile" nele cole: function onStepIn(cid, item, position, fromPosition) local reset_storage = 123 -- coloque o storage do seu sistema de reset local quant_reset = 3 -- quantidade de resets para poder passar if (getPlayerStorageValue(cid, reset_storage) < quant_reset) then doTeleportThing(cid, fromPosition, false) doSendMagicEffect(position, CONST_ME_MAGIC_BLUE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Somente players com ".. (quant_reset) .." ou mais podem passar.") end return TRUE end em movements.xml <movevent type="StepIn" actionid="4563" event="script" value="resettile.lua"/> ali fica o actionid que vc deve colocar no tile. se n funcionar me passe seu sistema de reset que eu arrumo.
  15. usa a versão 1.0 desse script do vodkart, que é bem configuravel. http://www.xtibia.co...vel-protection/ vc devera apenas mudar essa linha do código: if isPlayer(cid) and getPlayerLevel(cid) <= config.level then por isso: if isPlayer(cid) and getPlayerLevel(cid) >= config.level then dae a partir do lvl que você configurar no script, não perdera mais lvl.
  16. jhon992

    Addevent Item

    tenta assim, nem testei =/ function onUse(cid, item, fromPosition, itemEx, toPosition) if(item.itemid == 7585) and getPlayerStorageValue(cid, 123468) < 6 then doSummonCreature('Giant Spider', {x=33181, y=31867, z=12}) setPlayerStorageValue(cid, 123468,getPlayerStorageValue(cid, 123468)+1) doTransformItem(item.uid, 7586) addEvent(TransformItem, 3000, toPosition, itemEx.itemid) end return TRUE end function TransformItem(position, itemid) doRemoveItem(getThingfromPos(position).uid, 1) local uid = doCreateItem(itemid, 1, position) doSetItemActionId(uid, 10000) end qualquer erro avisa!
  17. tem o script !petrevive, que esta no link que te passei.
  18. Parabens, ta ficando muito bom @PsyMcKenzie. Gostei mais do Crowssbow e do Bow.
  19. local config = { timeToRemove = 180, -- segundos message = "Go into the teleport in 180 seconds, else it will disappear.", teleportId = 9773, bosses = { -- Nome do monstro, Posicao do teleporte ["Ushuriel"] = { pos={x=1294, y=705, z=15, stackpos=1}, aid=11001 }, ["Zugurosh"] = { pos={x=1328, y=704, z=15, stackpos=1}, aid=11002}, ["Madareth"] = { pos={x=1291, y=731, z=15, stackpos=1}, aid=11003}, ["Annihilon"] = { pos={x=1366, y=689, z=15, stackpos=1}, aid=11005}, ["Hellgorak"] = { pos={x=1371, y=731, z=15 , stackpos=1}, aid=11006}, ["Latrivan"] = {pos={x=1326, y=735, z=15, stackpos=1},aid=11004} } } local function change(position) doItemSetAttribute(getTileItemById(position, config.teleportId).uid, "aid", 3000) return TRUE end function onKill(cid, target, lastHit) local t = config.bosses[getCreatureName(target)] local position = t.pos if(config.bosses[getCreatureName(target)]) then doItemSetAttribute(getTileItemById(position, config.teleportId).uid, "aid", t.aid) doCreatureSay(cid, config.message, TALKTYPE_ORANGE_1) addEvent(change, config.timeToRemove * 1000, position) return TRUE else doItemSetAttribute(getTileItemById(position, config.teleportId).uid, "aid", t.aid) doItemSetAttribute(teleport, "aid", t.aid) doCreatureSay(cid, config.message, TALKTYPE_ORANGE_1) addEvent(removal, config.timeToRemove * 1000, position) end return TRUE end
  20. Usa esse: http://www.xtibia.com/forum/topic/177761-um-pet-system-diferente/page__fromsearch__1 Adiciona os storages e nomes como vc quiser e apenas troca o arquivo petsystem.lua por esse, o resto faz conforme esta la: local petNames = {"RAT","DRAGON","DEMON"} local petStorage = { ["RAT"] = 203105, -- storage do pet 1 ["DRAGON"] = 203106, -- storage do pet 2 ["DEMON"] = 203107 -- storage do pet 3 } local textSay = {"Sim", "Nao", "Talves", "Nao intendi vc poderia repetir?"} function onSay(cid, words, param, channel) local summons = getCreatureSummons(cid) if param == "" then local text = "Você não possui pets!" local o = 0 for i=1, #petNames do if getPlayerStorageValue(cid, petStorage[petNames[i]]) > 0 then o = o + 1 if o == 1 then text = o.." - ".. string.lower(petNames[i]) .."\n" else text = text.. o .." - ".. string.lower(petNames[i]) .."\n" end end end doShowTextDialog(cid,8977,text) return true end if param == "back" then for k = 1, #summons do pet = getCreatureName(summons[k]) doCreatureSay(cid, string.lower(pet) ..", back!", 1) doRemoveCreature(summons[k]) setPlayerStorageValue(cid, petStorage[pet], 1) end return true end local t = string.explode(param, ",") if t[1] == "say" then if #summons > 0 then doCreatureSay(summons[1], t[2], 1) else doPlayerSendCancel(cid,"Você possui Pet sumonado.") end return true end if t[1] == "conversa" then if #summons > 0 then doCreatureSay(summons[1], textSay[math.random(1,#textSay)], 1) else doPlayerSendCancel(cid,"Você possui Pet sumonado.") return true end end param = string.upper(param) if isInArray(petNames, param) then if getPlayerStorageValue(cid, petStorage[param]) == -1 then doPlayerSendCancel(cid,"Você não possui esse Pet.") return true elseif getPlayerStorageValue(cid, petStorage[param]) == 1 then if getTilePzInfo(getCreaturePosition(cid)) == false then x = doSummonCreature(param, getCreaturePosition(cid)) doConvinceCreature(cid, x) doCreatureSay(cid, string.lower(param) ..", go!", 1) doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 2) setPlayerStorageValue(cid, petStorage[param], 2) else doPlayerSendTextMessage(cid, 22, "Você não pode sumonar seu Pet em Pz.") return true end elseif getPlayerStorageValue(cid, petStorage[param]) == 2 and #summons > 0 then doPlayerSendTextMessage(cid, 22, "Seu Pet esta sumonado, fale !pet back.") return true else doPlayerSendTextMessage(cid, 22, "Seu Pet esta morto, fale !petrevive nomedopet para revivelo.") return true end else doPlayerSendCancel(cid,"Esse Pet não existe.") end return true end
  21. Ótimo script, pra quem busca algo novo para otserv.
  22. Hoje vim trazer uma spell que criei a pedido de um membro e achei bem legal. É uma spell que você controla para criar uma muralha em volta de seus inimigos, ela é otima para wars e servers derivados como de avatar, naruto. Então primeiro vou posta o script dela e depois um video para melhor entendimento. Vai em data/spells/scripts, duplica um arquivo e nomeia para "crystal wall" sem as aspas e nele cole: --<Script by Jhon992>-- local stonesId = {8633,8634,8635,8636} -- ids dos diferente tipos de stones. local timeRemove = 60 -- tempo para dumir as pedras em segundos. function createObject(cid, position, stonesPosition) if (isPlayer(cid)) then if getPlayerLookDir(cid) == 0 then positions = {x=position.x, y=position.y-1, z=position.z} elseif getPlayerLookDir(cid) == 1 then positions = {x=position.x+1, y=position.y, z=position.z} elseif getPlayerLookDir(cid) == 2 then positions = {x=position.x, y=position.y+1, z=position.z} elseif getPlayerLookDir(cid) == 3 then positions = {x=position.x-1, y=position.y, z=position.z} end if isWalkable(positions) then createStone(stonesPosition, positions, stonesId[math.random(1,#stonesId)], cid) addEvent(createObject, 500, cid, positions, stonesPosition) else addEvent(removeStones, timeRemove*1000, stonesPosition) end end end function createStone(stonesPosition, positions, stone, cid) doCreateItem(stone, 1, positions) stonesPosition[(#stonesPosition)+1] = {x=positions.x, y=positions.y, z=positions.z, stackpos=1} end function removeStones(stonesPosition) for i=1, #stonesPosition do for o=1, 2 do stonesPosition[i] = {x=stonesPosition[i].x, y=stonesPosition[i].y, z=stonesPosition[i].z, stackpos=o} if isInArray(stonesId, getThingfromPos(stonesPosition[i]).itemid) then doRemoveItem(getThingfromPos(stonesPosition[i]).uid) end end end end function isWalkable(pos, creature, pz, proj) -- nord 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 onCastSpell(cid, var) local stonesPosition = {} local position = getPlayerPosition(cid) createObject(cid, position, stonesPosition) return true end E em data/spells/spells.xml a tag: Obs: As tags serão diferentes dependendo da versão de seu ot. Tire como base de alguma outra tag e coloque as vocações de sua escolha. <instant name="Crystal Wall" words="exevo crystal" lvl="45" mana="800" prem="1" blockwalls="1" exhaustion="2000" groups="3,2000" icon="127" needlearn="0" event="script" value="crystal wall.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="5"/> <vocation id="6"/> </instant> Prontinho. Você pode escolher o tempo que demorara para sumir os crystais e pode modificar os crystais por outros ids, apenas modificando as duas primeiras linhas do arquivo "crystal wall.lua". Ela vai funcionar da seguinte maneira, quando você usa-sa ela ira criar crystais para a direção em que você esta virado e conforme você for modificando a direção os crystais vão saindo, até que encontre alguma barreira como players e itens que não se pode andar por cima. Video:
  23. fiz a última aqui rapidinho pra vc tirar como exemplo. --<Script by Jhon992>-- local stonesId = {8633,8634,8635,8636} -- ids dos diferente tipos de stones. local timeRemove = 30 -- tempo para dumir as pedras em segundos. local stonesPosition = {} -- não mexa. function createObject(cid, position) if (isPlayer(cid)) then if getPlayerLookDir(cid) == 0 then positions = {x=position.x, y=position.y-1, z=position.z} elseif getPlayerLookDir(cid) == 1 then positions = {x=position.x+1, y=position.y, z=position.z} elseif getPlayerLookDir(cid) == 2 then positions = {x=position.x, y=position.y+1, z=position.z} elseif getPlayerLookDir(cid) == 3 then positions = {x=position.x-1, y=position.y, z=position.z} end if isWalkable(positions) then createStone(positions, stonesId[math.random(1,#stonesId)], cid) addEvent(createObject, 500, cid, positions) else addEvent(removeStones, timeRemove*1000) end end end function createStone(positions, stone, cid) doCreateItem(stone, 1, positions) stonesPosition[(#stonesPosition)+1] = {x=positions.x, y=positions.y, z=positions.z, stackpos=1} end function removeStones() for i=1, #stonesPosition do for o=1, 2 do stonesPosition[i] = {x=stonesPosition[i].x, y=stonesPosition[i].y, z=stonesPosition[i].z, stackpos=o} if isInArray(stonesId, getThingfromPos(stonesPosition[i]).itemid) then doRemoveItem(getThingfromPos(stonesPosition[i]).uid) end end end end function isWalkable(pos, creature, pz, proj) -- nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection 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 onCastSpell(cid, var) local position = getPlayerPosition(cid) createObject(cid, position) end
  24. não sei, fiquei meio assim tbm. mais fiz pra escolher um numero msm. asijda aqui ele disse que era sóh 1 nm: o player chega fala hi e escolhe um numero de 1 a 10 acho que o exemplo da mega sena foi sóh pra dizer que mais de uma pessoa pode ganhar.
  • Quem Está Navegando   0 membros estão online

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