Tudo que marcot postou
-
[PEDIDO] Tile que da dano em x vocation
Acredito que sim, o actionID você coloca no piso indicado. Você estava querendo fazer isso com UM piso em específico ou em uma área completa? Se quiser eu coloco para o efeito se manter em qualquer piso que tiver o action id 9999, não necessariamente o char ficar parado no mesmo piso. Aliás, qual sua versão de TFS? Se não estiver funcionando absolutamente nada pode ser a tag, que é diferente.
- Abrir portas modem e roteador?
-
Tile Invisível/transparente
Mas se você botar um tile transparente no andar 7 inevitavelmente vai ficar preto, você tem que ter algo por baixo dele. Tenta seguir o mesmo princípio daqueles pisos que são escadas pra descer, que geralmente são usados em montanhas.
-
[AJUDA] Item não Heala após relogar
Tenta fazendo scripts assim: O primeiro guarda o horário que o player deslogou, então é ativado no ato do logout O segundo vai pegar o tempo que o player ficou offline e caso o jogador tenha algum dos itens equipado, o script se encarrega de fazer os calculos e curar o jogador (ativado no ato de login)
-
Serve Com Level Pokemon não Ganha XP ao mata !
A única coisa que alguém pode te ajudar a partir do que você passou é que ele está usando algum valor errado, consequentemente, um valor NULO (nil). Não tem como consertar sem ver códigos.
-
[PEDIDO] Tile que da dano em x vocation
@bismarkzika, Qual é a condição a ser satisfeita para parar o damage? O jogador sair do piso?? Caso seja, aqui está o script: Nome: [PEDIDO] Tile que da dano em x vocation Distro utilizada nos testes: Aries Server to Tibia 8.1 - Version 4.0 based on OTServ SVN Version 0.6.0 Comportamento: Caso um jogador de uma das vocations especificadas na lista config.vocation pise no local indicado, um contador será inicializado e, a cada tickTime segundos o jogador receberá damagePerTick de dano caso permaneça neste local. Em data/movements/movements.xml, adicione esta tag: <movevent event="StepIn" actionid="9999" script="vocation_damage.lua" /> Em data/movements/scripts crie um arquivo chamado vocation_damage.lua e cole isto dentro dele: -- [PEDIDO] Tile que da dano em x vocation by marcot local config = { vocation = {4}, -- Lista de Vocations afetadas pelo damage damagePerTick = 50, -- Dano recebido a cada tick tickTime = 5 -- Tempo do dano (segundos) } -- Main function onStepIn(cid, item, pos) if not isPlayer (cid) then return false end if isInArray(config.vocation, getPlayerVocation(cid)) then infos = { cid = cid, pos = getPlayerPosition(cid), } addEvent (damageCondition, config.tickTime * 1000, infos) end return true end -- Funcao para comparar duas coordenadas (Retorna true caso sejam iguais) function comparePositions (posA, posB) if posA.x == posB.x and posA.y == posB.y and posA.z == posB.z then return true end return false end -- Funcao responsavel pela condition do player receber dano function damageCondition (infos) if comparePositions (infos.pos, getPlayerPosition(infos.cid)) then doCreatureAddHealth (infos.cid, -config.damagePerTick) addEvent (damageCondition, config.tickTime * 1000, infos) end end
-
[PEDIDO] Script Spell Hiraishin no Jutsu Seal 1,2,3 e Hiraishin no Jutsu 1,2,3
Mds, voei não sei porque coloquei um then numa função dkosadsa Eu vou tentar debugar na janela de horário que tenho hoje caso tenha algum erro, mas não é certeza de que eu tenha essa janela entre meus horários. P.S.: Interessante esse editor aí compilar o script, você sabe onde eu posso achá-lo para download? [Edit] Tente estes scripts: Seal1.lua: local config = { storageID = 49615, storageID2 = 49620, tempo = 6, -- Tempo de duracao da marcacao itemID = 105, -- item ID da sprite que fica no chao effectWhenTeleport = 11, -- Efeito que aparece no player quando é teleportado effectWhenExpired = 2, -- Efeito que aparece quando a skill expira } local errorMsg = { alreadyMarked = "Voce ja possui uma marcacao em andamento neste slot.", expired = "A skill de selamento expirou.", } function onCastSpell(cid, var) markedPosition = getPlayerPosition(cid) if getPlayerStorageValue(cid, config.storageID) <= os.time() and not getPlayerStorageValue(cid, config.storageID) == -1 then doPlayerSendTextMessage(cid, 22, errorMsg.alreadyMarked) return false end -- doCreateItem(config.itemID, 1, markedPosition) setPlayerStorageValue(cid, config.storageID, os.time() + getTime()) setPlayerStorageValue(cid, config.storageID2, 1) doPlayerSendTextMessage(cid, 22, "Voce tem ".. config.tempo .." minutos para usar a spell antes que ela expire.") local estrutura = { cid = cid, markedPosition = markedPosition, timeFinal = os.time() + getTime() } addEvent (teleportIsTrue, 333, estrutura) return true end function getTime () return config.tempo * 60 end function teleportIsTrue (st) if os.time() > st.timeFinal then setPlayerStorageValue(st.cid, config.storageID2, 0) doPlayerSendTextMessage(st.cid, 22, errorMsg.expired) return false elseif getPlayerStorageValue(st.cid, config.storageID2) == 2 then doTeleportThing(st.cid, st.markedPosition, true) setPlayerStorageValue(st.cid, config.storageID2, 1) doSendMagicEffect(getPlayerPosition(st.cid), config.effectWhenTeleport) end addEvent (teleportIsTrue, 333, st) return true end hiraishin_teleport.lua: local config = { storageID2 = 49620, } function onCastSpell(cid, var) if getPlayerStorageValue (cid, config.storageID2) == 1 then setPlayerStorageValue(cid, config.storageID2, 2) else doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum local com a kunai.") return false end return true end Mds eu nao sei onde tava com a cabeça quando fiz os scripts anteriores dsodakpdas
-
[PEDIDO] Script Spell Hiraishin no Jutsu Seal 1,2,3 e Hiraishin no Jutsu 1,2,3
Estou sem poder testar no momento mas tente este código: Seal1.lua local config = { storageID = 49610, storageID2 = 49611, tempo = 6, -- Tempo de duracao da marcacao itemID = 105, -- item ID da sprite que fica no chao effectWhenTeleport = 11, -- Efeito que aparece no player quando é teleportado effectWhenExpired = 2, -- Efeito que aparece quando a skill expira } local errorMsg = { alreadyMarked = "Voce ja possui uma marcacao em andamento neste slot.", expired = "A skill de selamento expirou.", } function onCastSpell(cid, var) markedPosition = getPlayerPosition(cid) if getPlayerStorageValue(cid, config.storageID) <= os.time() + getTime(config.time) then doPlayerSendTextMessage(cid, 22, errorMsg.alreadyMarked) return false end doCreateItem(config.itemID, 1, markedPosition) setPlayerStorageValue(cid, config.storageID, os.time() + getTime(config.time)) setPlayerStorageValue(cid, config.storageID2, 1) doPlayerSendTextMessage(cid, 22, "Voce tem ".. config.time .." minutos para usar a spell antes que ela expire.") local estrutura = { cid = cid, markedPosition = markedPosition, timeFinal = os.time() + getTime(config.time) } addEvent (teleportIsTrue, 333, estrutura) return true end function getTime (minutes) then return 60 * minutes end function teleportIsTrue, 333, st) if os.time() > st.timeFinal then setPlayerStorageValue(st.cid, config.storageID2, 0) doPlayerSendTextMessage(st.cid, 22, errorMsg.expired) return false elseif getPlayerPosition(st.cid, config.storageID2) == 2 then doTeleportThing(st.cid, getThingPosition(st.markedPosition), true) setPlayerStorageValue(st.cid, config.storageID2, 1) doSendMagicEffect(getPlayerPosition(struct.player), config.effectWhenTeleport) end addEvent (teleportIsTrue, 333, st) return true end Em spells.lua cole a tag: <instant name="Hiraishin no Jutsu" words="hiraishin no jutsu seal 1" lvl="18" mana="1" prem="1" aggressive="0" params="1" exhaustion="2000" needlearn="0" event="script" value="Seal1.lua"> <vocation id="4"/> </instant> Em data/spells/scripts crie hiraishin_teleport.lua e cole: local config = { storageID2 = 49611, } function onCastSpell(cid, var) if getPlayerStorageValue (cid, config.storageID2) == 1 then setPlayerStorageValue(cid, config.storageID2, 2) else doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum local com a kunai.") return false end return true end Em spells.xml cole: <instant name="Hiraishin no Jutsu" words="hiraishin no jutsu teleport 1" lvl="18" mana="1" prem="1" aggressive="0" params="1" exhaustion="2000" needlearn="0" event="script" value="hiraishin_teleport.lua"> <vocation id="4"/> </instant> Para fazer até o 3 basta criar um arquivo para cada, modificando apenas os storageIDs(nos scripts) e o words (spells.xml). Caso dê algum erro mande-o aqui, quando eu chegar em casa estarei disposto a testar. OBS.: O item jogado no chão nesta versão não irá sumir. Gostaria que algum outro membro me desse uma ideia, mas a princípio eu pensei em você editar o items.xml deste itemID (105) e colocar duração de 10min com decayTo 0. Caso eu coloque do jeito que pensei inicialmente, se um player jogar um item X encima da kunai, X será o item a desaparecer e não a kunai. Daria erro inclusive se a pessoa movesse essa kunai, também.
-
Mega System
Quando a função de transformar o pokémon em mega for chamada você dá um addEvent de uma função que vai destransformá-lo dentro do tempo estimado.
-
Monstro hitando em outro Monstro
Posso tentar ajudar, mas poderia especificar algumas coisas? A função deve retornar verdadeiro quando é para dar dano e false caso contrário? O que é essa função "getCreatureMaster" e o que ela retorna especificamente? Isso seria um sistema de poketibia para se o treinador tiver com o pokemon pra fora nao tomar dano ou algo do tipo?
-
(Resolvido)[PEDIDO] Spells Hiraishin Ni No Dan Seal e Hiraishin Ni No Dan
Script sem o bug de tirar o target e sem damage: local config = { storageID = 49609, mark_time = 10 * 60, effectWhenTeleport = 339, -- Efeito ao teleportar effectWhenUsed = 152, } local errorMsg = { pz = "Seu alvo nao pode estar fora do PZ.", playerOnly = "Voce so pode usar este jutsu em players.", alreadyMarked = "Voce ja marcou um jogador.", } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 152) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) function onCastSpell(cid, var) if isPlayer(getCreatureTarget(cid)) then if getPlayerStorageValue (cid, config.storageID) <= 0 then setPlayerStorageValue(cid, config.storageID, 1) doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getCreatureName(getCreatureTarget(cid))) target = getCreatureTarget(cid) doSendMagicEffect(getPlayerPosition(target), 152) local struct = { left = config.mark_time * 3, player = cid, target = target, var = var } addEvent(teleportIsTrue, 333, struct) else doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel(cid, errorMsg.alreadyMarked) return false end else doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel(cid, errorMsg.playerOnly) return false end return doCombat(cid, combat, var) end function teleportIsTrue (struct) if struct.left ~= 0 then if getPlayerStorageValue (struct.player, config.storageID) == 2 then doTeleportThing(struct.player, getThingPosition(struct.target), true) setPlayerStorageValue(struct.player, config.storageID, 0) doSendMagicEffect(getPlayerPosition(struct.player), config.effectWhenTeleport) doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.") return TRUE end struct.left = struct.left - 1 addEvent (teleportIsTrue, 333, struct) elseif struct.left == 0 then doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.") setPlayerStorageValue(struct.player, config.storageID, 0) else return FALSE end end
-
[dxp] Trade center teleport
Acho que isso deve corrigir o erro que apareceu no terminal: local config = { storageID = 14586, tradeCenter = {pos = {x = 224, y = 307, z = 7}}, cpActionID = {23000, 23001, 23002, 23003, 23004, 23005, 23006, 23007, 23008, 23009}, tcActionID = 22334, } local cities = { pewter = {id = 1, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, cerulean = {id = 2, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, viridian = {id = 3, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, celadon = {id = 4, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, saffron = {id = 5, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, lavender = {id = 6, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, vermilion = {id = 7, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, cinnabar = {id = 8, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, fuchsia = {id = 9, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, } function onStepIn(cid, item, pos) if isSummon(cid) then return false end teleportTo = config.tradeCenter.pos if isInArray (config.cpActionID, item.actionid) then if item.actionid == config.cpActionID[1] then setPlayerStorageValue(cid, config.storageID, cities.pewter.id) elseif item.actionid == config.cpActionID[2] then setPlayerStorageValue(cid, config.storageID, cities.cerulean.id) elseif item.actionid == config.cpActionID[3] then setPlayerStorageValue(cid, config.storageID, cities.viridian.id) elseif item.actionid == config.cpActionID[4] then setPlayerStorageValue(cid, config.storageID, cities.celadon.id) elseif item.actionid == config.cpActionID[5] then setPlayerStorageValue(cid, config.storageID, cities.saffron.id) elseif item.actionid == config.cpActionID[6] then setPlayerStorageValue(cid, config.storageID, cities.lavender.id) elseif item.actionid == config.cpActionID[7] then setPlayerStorageValue(cid, config.storageID, cities.vermilion.id) elseif item.actionid == config.cpActionID[8] then setPlayerStorageValue(cid, config.storageID, cities.cinnabar.id) elseif item.actionid == config.cpActionID[9] then setPlayerStorageValue(cid, config.storageID, cities.fuchsia.id) end elseif item.actionid == config.tcActionID then playerStatus = getPlayerStorageValue(cid, config.storageID) if playerStatus == cities.pewter.id then teleportTo = cities.pewter.pos elseif playerStatus == cities.cerulean.id then teleportTo = cities.cerulean.pos elseif playerStatus == cities.viridian.id then teleportTo = cities.viridian.pos elseif playerStatus == cities.celadon.id then teleportTo = cities.celadon.pos elseif playerStatus == cities.saffron.id then teleportTo = cities.saffron.pos elseif playerStatus == cities.lavender.id then teleportTo = cities.lavender.pos elseif playerStatus == cities.vermilion.id then teleportTo = cities.vermilion.pos elseif playerStatus == cities.cinnabar.id then teleportTo = cities.cinnabar.pos elseif playerStatus == cities.fuchsia.id then teleportTo = cities.fuchsia.pos else teleportTo = cities.cerulean.pos end end if #getCreatureSummons(cid) >= 1 then for i = 1, #getCreatureSummons(cid) do doTeleportThing(getCreatureSummons(cid), teleportTo, false) end end doTeleportThing(cid, teleportTo, false) return true end
-
[dxp] Trade center teleport
Tentei fazer um esboço, a ideia é mais ou menos esta, mas estou sem tempo para testar: local config = { storageID = 14586, tradeCenter = {pos = {x = 224, y = 307, z = 7}}, cpActionID = {23000, 23001, 23002, 23003, 23004, 23005, 23006, 23007, 23008, 23009}, tcActionID = 22334, } local cities = { pewter = {id = 1, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, cerulean = {id = 2, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, viridian = {id = 3, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, celadon = {id = 4, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, saffron = {id = 5, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, lavender = {id = 6, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, vermilion = {id = 7, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, cinnabar = {id = 8, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, fuchsia = {id = 9, pos = {x = 396, y = 1746, z = 9, stackpos=253}}, } function onStepIn(cid, item, pos) if isSummon(cid) then return false end teleportTo = config.tradeCenter.pos if isInArray (config.cpActionID, item.actionid) then if item.actionid == config.cpActionID[1] then setPlayerStorageValue(cid, config.storageID, cities.pewter.id) elseif item.actionid == config.cpActionID[2] then setPlayerStorageValue(cid, config.storageID, cities.cerulean.id) elseif item.actionid == config.cpActionID[3] then setPlayerStorageValue(cid, config.storageID, cities.viridian.id) elseif item.actionid == config.cpActionID[4] then setPlayerStorageValue(cid, config.storageID, cities.celadon.id) elseif item.actionid == config.cpActionID[5] then setPlayerStorageValue(cid, config.storageID, cities.saffron.id) elseif item.actionid == config.cpActionID[6] then setPlayerStorageValue(cid, config.storageID, cities.lavender.id) elseif item.actionid == config.cpActionID[7] then setPlayerStorageValue(cid, config.storageID, cities.vermilion.id) elseif item.actionid == config.cpActionID[8] then setPlayerStorageValue(cid, config.storageID, cities.cinnabar.id) elseif item.actionid == config.cpActionID[9] then setPlayerStorageValue(cid, config.storageID, cities.fuchsia.id) end elseif item.actionid == config.tcActionID then playerStatus = getPlayerStorage(cid, config.storageID) if playerStatus == cities.pewter.id then teleportTo = cities.pewter.pos elseif playerStatus == cities.cerulean.id then teleportTo = cities.cerulean.pos elseif playerStatus == cities.viridian.id then teleportTo = cities.viridian.pos elseif playerStatus == cities.celadon.id then teleportTo = cities.celadon.pos elseif playerStatus == cities.saffron.id then teleportTo = cities.saffron.pos elseif playerStatus == cities.lavender.id then teleportTo = cities.lavender.pos elseif playerStatus == cities.vermilion.id then teleportTo = cities.vermilion.pos elseif playerStatus == cities.cinnabar.id then teleportTo = cities.cinnabar.pos elseif playerStatus == cities.fuchsia.id then teleportTo = cities.fuchsia.pos else teleportTo = cities.cerulean.pos end end if #getCreatureSummons(cid) >= 1 then for i = 1, #getCreatureSummons(cid) do doTeleportThing(getCreatureSummons(cid), teleportTo, false) end end doTeleportThing(cid, teleportTo, false) return true end Você tem o actionID do item que você colocou no chão, dentro de cada cidade você coloca o equivalente e no pvp você coloca um único (configurável na parte do config). Quando o jogador passa ele olha qual é a action ID que você acabou de passar por cima e a partir daí ele decide o que vai fazer. Se for de CP ele salva o ID de onde você veio pra reutilizar depois, caso você esteja saindo ele pega o seu ID e te manda para a cidade equivalente. Daria pra diminuir bastante o código usando for, mas acredito que ficaria um pouco mais técnico para caso alguém queira modificar...
-
[dxp] Trade center teleport
Pode ser nesse aí mesmo.
-
[dxp] Trade center teleport
Considere fazer o seguinte: separe um storageID apenas para este teleport, e aí considera algo do tipo: Status 1 do Storage = Player veio de Fuchsia Status 2 do Storage = Player veio de Cinnabar Status 3 do Storage = Player veio de Lavender E assim vai... Quando a pessoa for sair do Trade Center você coloca uma verificação tipo: storageStatus = getPlayerStorageValue (cid, storageDoPiso) if storageStatus == 1 then teleportar o jogador para fuchsia elseif storageStatus == 2 then teleportar o jogador para cinnabar elseif storageStatus == 3 then teleportar o jogador para lavender end
-
(Resolvido)[ Pedido ] tem que lança magia
Me manda como está seu script do exevo gran mas frigo, creio que tem coisa faltando.
-
[ PEDIDO ] Item que so fica em uma bag
Usa o editor de item.otb e coloca pra não ter como mover os itens, acho que dá certo.
-
Blacksmith NPC TFS 1.0
Estarei enviando meu contato no discord por privado.
-
(Resolvido)[PEDIDO] Spells Hiraishin Ni No Dan Seal e Hiraishin Ni No Dan
TAG data/spells/spells.xml: <instant name="Hiraishin No Jutsu" words="hiraishin ni no dan seal" lvl="12" mana="20" prem="1" aggressive="1" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="hiraishin.lua"> <vocation id="4"/> </instant> <instant name="Hiraishin no Jutsu" words="hiraishin ni no dan" lvl="18" mana="10" prem="1" aggressive="1" params="1" exhaustion="2000" needlearn="0" event="script" value="hiraishinII.lua"> <vocation id="4"/> </instant> hiraishin.lua local config = { storageID = 49609, mark_time = 10 * 60, effectWhenTeleport = 339, -- Efeito ao teleportar effectWhenUsed = 152, } local errorMsg = { pz = "Seu alvo nao pode estar fora do PZ.", playerOnly = "Voce so pode usar este jutsu em players.", alreadyMarked = "Voce ja marcou um jogador.", } local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 152) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onCastSpell(cid, var) --local target = getThingFromPosition(variantToPosition(var), 1) if isPlayer(getCreatureTarget(cid)) then if getPlayerStorageValue (cid, config.storageID) <= 0 then setPlayerStorageValue(cid, config.storageID, 1) doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getCreatureName(getCreatureTarget(cid))) local struct = { left = config.mark_time * 3, player = cid, target = target, var = var } addEvent(teleportIsTrue, 333, struct) else doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel(cid, errorMsg.alreadyMarked) return false end else doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel(cid, errorMsg.playerOnly) return false end return doCombat(cid, combat, var) end function teleportIsTrue (struct) if struct.left ~= 0 then if getPlayerStorageValue (struct.player, config.storageID) == 2 then doTeleportThing(struct.player, getThingPosition(getCreatureTarget(struct.player)), true) setPlayerStorageValue(struct.player, config.storageID, 0) doSendMagicEffect(getPlayerPosition(struct.player), config.effectWhenTeleport) doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.") return TRUE end struct.left = struct.left - 1 addEvent (teleportIsTrue, 333, struct) elseif struct.left == 0 then doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.") setPlayerStorageValue(struct.player, config.storageID, 0) else return FALSE end end hiraishinII.lua local config = { storageID = 49609, mark_time = 6, } function onCastSpell(cid, var) --local target = getThingFromPosition(variantToPosition(var), 1) if getPlayerStorageValue (cid, config.storageID) == 1 then setPlayerStorageValue(cid, config.storageID, 2) else doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum jogador.") return false end return true end Quanto à parte de não cancelar o target não conheço muito bem, mas acredito que a própria source do OTServer ja deva cancelar quando sái da tela. Não sei se existe alguma função em LUA que mantenha o target enquanto o jogador está fora da tela.
-
Blacksmith NPC TFS 1.0
The first and second add them to hammer's script (action). The third one is a NPC script. I can explain better tomorrow when i wake up, im in my cellphone :s
-
Blacksmith NPC TFS 1.0
@costantino2, We are going to use a storage ID to identify if the player has permission or not. Try something like that: Add this tag in the beginning of your blacksmith system .lua: local config = { storageID = 10000, errorMsg = "You dont have permission to use this." } And this other in the beginning of function onUse (.lua): if getPlayerStorageValue (cid, config.storageID) ~= 1 then doPlayerSendTextMessage(cid,22, config.errorMsg) return true end NPC Script, try something like this one: 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 local config = { storageID = 10000, price = 10000, } function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'blacksmith') then selfSay('Do you want to have permission to blacksmithing?', cid) talkState[talkUser] = 1 elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if(doPlayerRemoveMoney(cid, config.price)) then setPlayerStorageValue(cid, config.storageID, 1) selfSay('Here you are.', cid) else selfSay('Sorry, you don\'t have enough gold.', cid) end talkState[talkUser] = 0 elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser])) then talkState[talkUser] = 0 selfSay('Ok then.', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
[ PEDIDO ] Criar esse script
Dá pra colocar pra tirar a porta utilizando um sistema semelhante ao daquela ponte de rookgard no tibia global. Tente usar adequadamente estas funções na morte do boss: doRemoveItem(uid[, count = -1]) -- para retirar a porta doCreateItem(itemid[, type/count], pos) -- para adicionar a porta novamente Sendo que bem provavelmente esse de adicionar a porta você terá que utilizar quando o player sair da quest.
-
(Resolvido)[dxp] alguns pokémons com revive bugado
Então, ele tinha 3 possibilidades de o revive funcionar: Se você usasse o revive no tal do item b.on que deve estar definido em algum lugar do seu server (mas que provavelmente é a pokeball "ligada) Se você usasse o revive no tal do item b.off que deve estar definido, também, em algum lugar (mas que pode ser a pokeball "desligada") Se você usasse o revive no item b.use (que nao sei o que é) enquanto você tiver menos de uma summon e sem estar no ride Ele não verificava a quantidade de summons nos 2 primeiros casos, então o revive funcionava. Gênio nada kk, minha facul é isso de cima a baixo
-
(Resolvido)[dxp] alguns pokémons com revive bugado
Só uma ultima tentativa, tenta trocar pra: if (item2.itemid == b.on and #getCreatureSummons(cid) < 1) or (item2.itemid == b.off and #getCreatureSummons(cid) < 1) or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then Saindo do lado mais técnico para tentar simplificar: num if você tem uma expressão assim como (1 + 2), mas com apenas verdadeiro e falso como possíveis resultados. Caso a expressão resulte em verdadeiro, o que está dentro do bloco do if será executado: if true then <bloco do if> else <bloco do else> end Caso o if não seja executado, o else será executado. A expressão do script se for traduzir ficaria algo assim: SE id do item for igual a b.on ou id do item igual a b.off ou (id do item igual a b.use e quantidade de summons do player menor que um e não estiver em ride/fly/surf faça if item2.itemid == b.on or item2.itemid == b.off or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then
-
(Resolvido)[dxp] alguns pokémons com revive bugado
IF é uma condicional que só executa seu bloco quando a expressão dele tem TRUE (Verdadeiro) como resultado. Expressões deste tipo podem ser chamadas expressões booleanas e podem ter resultados TRUE ou FALSE. Essas expressões são feitas com operadores de negação (not em LUA, ! em C++/Java), ou (or em LUA, || em C++/Java) e e (and em LUA, && em C++). As expressões seguem as tabelas abaixo: Note que os exemplos acima são exemplos reais de aplicação em circuitos eletrônicos (os desenhos acima das tabelas são as representações dos componentes que usamos), ignore NOR e NAND. Ou seja, no exemplo acima do seu script, temos: if item2.itemid == b.on or item2.itemid == b.off or (item2.itemid == b.use and #getCreatureSummons(cid) < 1 and not isRiderOrFlyOrSurf(cid)) then O IF será executado caso (item2.itemid == b.on) ou (item2.itemid == b.off) ou (item2.itemid == b.use E quantidadeDeSumons < 1 e (não(estarNoRideSurfRide)) Por isso estranhei, porque ele só verifica se você está sem poke na parte da direita e-e