
Solutions
-
xWhiteWolf's post in (Resolvido)[PEDIDO]/addskill was marked as the answerse é nas sources, a forma de adicionar seria pegar uma source nova da sua versão, fazer as modificações e compilar ela dnv. (O executável que abre o server não passa das sources compiladas) então é muito mais fácil pegar algo já pronto q funcione e trocar.
-
xWhiteWolf's post in (Resolvido)Duvida Sobre Script was marked as the answerPrimeiro vc cria a vocação no seu vocations.xml, feito isso vc pode ir atrás do npc aqui no fórum mesmo.. tem um monte desse estilo. A função principal é ele checar sua vocação, se vc não for troll então ele seta sua vocação como troll
-
xWhiteWolf's post in (Resolvido)Monster falar uma mensagem e depois de 3 segundos dar HS was marked as the answerae galera, fiz certinho aqui:
local arr = { {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0} } local area = createCombatArea(arr) function onCastSpell(cid, var) doCreatureSay(cid, "I WILL UNLEASH THE FURY OF HELL!", 20) addEvent(function() if isCreature(cid) then doAreaCombatHealth(cid, 1, getThingPos(cid), area, -1000, -3000, CONST_ME_MORTAREA) end end, 5000) return true end em arr vcs editam a area que vcs quiserem.
doAreaCombatHealth(cid, 1, getThingPos(cid), area, -1000, -3000, CONST_ME_MORTAREA) aqui vcs editam o resto:
1 é o tipo de combat, os possiveis são:
COMBAT_NONE = 0 COMBAT_PHYSICALDAMAGE = 1 COMBAT_ENERGYDAMAGE = 2 COMBAT_EARTHDAMAGE = 4 COMBAT_POISONDAMAGE = 4 COMBAT_FIREDAMAGE = 8 COMBAT_UNDEFINEDDAMAGE = 16 COMBAT_LIFEDRAIN = 32 COMBAT_MANADRAIN = 64 COMBAT_HEALING = 128 COMBAT_DROWNDAMAGE = 256 COMBAT_ICEDAMAGE = 512 COMBAT_HOLYDAMAGE = 1024 COMBAT_DEATHDAMAGE = 2048 -1000 e -3000 são os danos minimos e máximos e const_me_mortarea é o efeito.
Daí no monstro é só adicionar
<attack name="delayed" interval="1000" chance="15"/> sendo interval o tempo q ele vai tentar usar a magia e chance é a chance de ela sair. Nesse caso a cada 1 segundo ele faz um número aleatorio entre 1 e 100, se esse número for menor que 15 então ele solta a magia.
-
xWhiteWolf's post in (Resolvido)Sistema de Mineração was marked as the answerexatamente como vc pediu...
terra = {351,352,353,354,355} levels = { [-1] = 2229, ---- skull [0] = 1294, --- small stone [1] = 3976, --- worm [10] = 2149, -- Small Emerald [12] = 2146, -- Small Sapphire [15] = 2145, -- Small Diamond [17] = 2150, -- Small Amethyst [20] = 2147, -- Small Ruby [25] = 2144, -- Black Pearls [27] = 2143, -- White Pearls [30] = 2157, -- Gold Nuggets [35] = 2156, --- red gem [36] = 2158, -- blue gem [37] = 2155, -- green gem [38] = 2153, -- violet gem [39] = 2154, -- yellow gem [40] = 2157, -- small enchanted emerald [42] = 2157, -- Small Enchanted Sapphiire [45] = 2158, -- Small Enchanted Amethyst [50] = 2161, -- Small Enchanted Ruby [70] = 2162 -- Life Crystal } local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (getPlayerStorageValue(cid, config.storage)^2)/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return TRUE end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return FALSE end return true end agora é só ir no creaturescripts\scripts\login.lua e colocar antes do ultimo return true:
if getPlayerStorageValue(cid, 19333) == -1 then setPlayerStorageValue(cid, 19333, 0) elseif getPlayerStorageValue(cid, 19334) == -1 then setPlayerStorageValue(cid, 19334, 0) end obs: a fórmula pro level da skill tá assim:
level atual x level atual / k
dá pra mudar mas eu prefiri fazer assim pq a função quadrática é crescente então a cada level ia precisar de mais experiencia doque o level anterior, mas fica a seu critério mudar. Pode parecer que tá bem fácil upar no começo, mas lembre-se doque eu falei.
Fazendo uma continha simples você descobre que se precisa de somente 50 mineiradas pra pegar level 10, mas a mesma conta nos diz que é necessário 1250 mineiradas pra se chegar no 50. Então cuidado com oque faz na fórmula auheuhauheuh
Também tomei a liberdade de editar o formato inicial das recompensas.. fiz a cada 2 leveis pra facilitar e não complicar o script ainda mais, mas ainda assim está dentro daquilo que vc falou anteriormente. Espero que vc tenha gostado porque leveu quase 4 horas pra fazer isso aí auhuhauhauh
-
xWhiteWolf's post in (Resolvido){Pedido} Npc Police was marked as the answero primeiro tem que ser um npc mesmo?
achei esse script aqui http://www.tibiaking.com/forum/topic/11649-npc-guard-ataca-players-com-skulls/
-
xWhiteWolf's post in (Resolvido){Pedido} Modificações em Scripts was marked as the answer1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não possui dardos.")
return false
end
muda o return false pra return true.
2)
-- CONFIGURAÇÕESporcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) tipoaura = math.random(30,33) -- número do efeito da aura (efeito normal, /z do jogo) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendMagicEffect(atual, tipoaura) else doSendMagicEffect(atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendMagicEffect(atual, tipoaura) elseif(i<8) then doSendMagicEffect(atual, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end /\ cura a vida e solta os efeitos 30 a 33
-- CONFIGURAÇÕES porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantmana = 10 -- porcentagem da mana máxima que cada cura irá curar. (No caso, irá curar 10% da mana máxima cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) tipoaura = math.random(30,33) -- número do efeito da aura (efeito normal, /z do jogo) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureMana(cid)<getCreatureMaxMana(cid)) then doCreatureAddMana(cid, getCreatureMaxMana(cid)/quantmana) if(i<=8 and i>1) then doSendMagicEffect(atual, tipoaura) else doSendMagicEffect(atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendMagicEffect(atual, tipoaura) elseif(i<8) then doSendMagicEffect(atual, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end /\ cura mana e solta os efeitos 30 a 33 (se quiser muda no math.random
-- CONFIGURAÇÕES porcentagem = 40 -- chance de dar haste em cada volta da aura, em porcentagem tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) efeitocura = 49 -- número do efeito quando der haste (efeito de posição fixa, pode ser identificado com /z no jogo) duration = 10 -- segundos que vai durar o haste da aura. (coloque um tempo baixo porque ela vai ficar se repetindo. local condition = createConditionObject(CONDITION_HASTE) setConditionParam(condition, CONDITION_PARAM_TICKS, duration*1000) setConditionFormula(condition, 1.7, -36, 1.7, -36) -- Função que chama a aura function efeitosAura(i,tm,cid) tipoaura = math.random(12,14) -- número do efeito da aura (efeito normal, /z do jogo) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureCondition(cid, condition) == false) then doAddCondition(cid, condition) if(i<=8 and i>1) then doSendMagicEffect(atual, tipoaura) else doSendMagicEffect(atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendMagicEffect(atual, tipoaura) elseif(i<8) then doSendMagicEffect(atual, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end /\ da velocidade a cada rodada de aura por 10 segundos.. os efeitos são um math.random de 12 até 14 (12, 13, 14)
-
xWhiteWolf's post in (Resolvido)[PEDIDO] Tile que Passa só se tiver GUILD was marked as the answerfunction onStepIn(cid, item, position, fromPosition) if getPlayerGuildId(cid) > 0 then doPlayerSendTextMessage(cid, 27, "Voce entrou, sua guild é a "..getPlayerGuildName(cid)..".") return true else doPlayerSendTextMessage(cid, 27, "Voce não possue guild, portanto não pode entrar nessa zona.") doTeleportThing(cid, fromPosition) return false end end
-
xWhiteWolf's post in (Resolvido)Erro no Script was marked as the answerlocal storage_quest = 90000 function onStepIn(cid, item, position, fromPosition) if getPlayerStorageValue(cid, storage_quest) < 1 then doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, "Você não completou a Cyber quest!") doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) end doPlayerSendTextMessage(cid, 27, "Você não completou a Cyber quest! .") return true end deleta esse arquivo que vc tem, cria um novo, adiciona esse daqui nele e salva como .lua
-
xWhiteWolf's post in (Resolvido)problemas com runas (item) was marked as the answeraparentemente você migrou de server e os items.xml estavam configurados para a versão antiga.
[25/05/2014 18:54:28] [Warning - Items::loadFromXml] Unknown type rune
[25/05/2014 18:54:29] [Warning - Items::loadFromXml] Unknown key value fieldAbsorbPercentFire
dá CTRL+F no items.xml e muda todos os items que tiverem type = rune
e procura fieldAbsorbPercentFire << isso tá errado, dá ctlr F em PercentFire e você vai achar qual é o jeito certo de se colocar e muda nesse daí q tá errado.
-
xWhiteWolf's post in (Resolvido)[PEDIDO]Script Aviso de Invasores Castle 24 Horas LEIA! was marked as the answerfunction onStepIn(cid, item, position, fromPosition) local castle_one_name = "Ratim Bum" -- Nome do castelo 1 local storages = {154154,54321,123123} -- Storages ( se vc eh iniciante, deixe como está...) local sto_ativ = getGlobalStorageValue(storages[2]) position = getCreaturePosition(cid) if isPlayerGuild(cid) == TRUE then if sto_ativ == 1 or sto_ativ == -1 then guildname = getPlayerGuildName(cid) guild = getPlayerGuildId(cid) guild_sto = getGlobalStorageValue(storages[3]) if guild ~= guild_sto then doBroadcastMessage("O(a) "..getCreatureName(cid).." estestá tentando invadir o castelo "..castle_one_name.." para a guild \""..guildname..".", 22) doSendMagicEffect(position, 39) else doPlayerSendCancel(cid,"Este castelo ja foi conquistado pela sua guild!") doSendMagicEffect(position, 2) end else doPlayerSendCancel(cid,"O sistema está desativado") end else doPlayerSendCancel(cid,"É nescessario ter guild para dominar o castelo!") doSendMagicEffect(position, 2) end return true end function isPlayerGuild(cid) if getPlayerGuildName(cid) ~= "" then return TRUE else return FALSE end end
-
xWhiteWolf's post in (Resolvido)Attack msm q no bixo was marked as the answervocê que tem que colocar como resolvido, para isso clique em "Melhor Resposta" na resposta que eu te dei e o tópico ficará como [RESOLVIDO]
-
xWhiteWolf's post in (Resolvido)[Erro] Alguém pode me dizer oque tem de errado nesse script? was marked as the answerdeleta a primeira linha e escreve ela de novo (sério) isso deve resolver. Caso o problema persista muda o nome da table e altera nos lugares que ela tá sendo chamada tb
-
xWhiteWolf's post in (Resolvido)Dois pedidos! was marked as the answerdanih, vc só colocar as coisas fora da function principal quando elas não variam com o tempo. a pos do player tem que ser pega quando ele clicar na alavanca e não quando liga o server.
o certo seria:
function onUse(cid, item, fromPosition, itemEx, toPosition) local pos = getPlayerPosition(cid) local up = {x= pos.x, y = pos.y, z= pos.z+1} -- aumenta um andar local down = {x= pos.x, y = pos.y, z= pos.z-1} -- diminui um andar. if (item.itemid == 1946) then doTeleportThing(cid, up) elseif (item.itemid == 1945) then doTeleportThing(cid, down) end return true end função ao Usar:
pega a posição do Player
calcula up e down
se o itemid que é clicado tiver valor igual a 1946 então
teleportar pra up
senão, se o itemid que é clicado tiver valor igual a 1945 então
teleportar pra cima
fim do se
retornar verdadeiro para a função (nesse caso ele checa a função e permite ou não a clicagem, se tivesse return false ele não permitira que vc clicasse e seria como se n tivesse usado (é util pra scripts que utilizem doRemoveItem) )
fim da função
___________________________________________
Vale lembrar que não irá bugar porque nesse script ele não muda o id da alavanca ao clicar;
-
xWhiteWolf's post in (Resolvido)Diferença entre scripts was marked as the answerbom, a galera tá usando mais loops [for, while] (digamos que tá na moda) e tão preferindo fazer funções. O script novo é basicamente isso, e sem contar tb que ele é pro TFS novo (1.0) nessa nova versão você pode inserir uma função dentro de outra usando ":" como nesse exemplo aqui
for i = 1,4 do Player(cid[5-i]):teleportTo(new_player_pos[i]) para i = 1,4 fazer:
Player(cid[5-i]): teleportar para (NovaPosiçãoDePlayer)
Ele vai começar com i = 1, daí teremos
Player de numero 4 vai ser teleportado para a posição de numero 1 da table de new_player_pos
dps o player de numero 3 vai ser teleportado pra pos de numero 2... e assim até i = 4.
O resto é meio q entendível percebendo essa lógica das tables.. #Table retorna o numero de elementos que essa Table possui;
No caso local players_area é uma table de 2 elementos.
local players_area = { {x = 33225, y = 31671, z = 13}, --- PRIMEIRO ELEMENTO {x = 33222, y = 31671, z = 13} ---- SEGUNDO } já a new _player_pos possui 4 elementos, um pra cada player
local new_player_pos = { {x = 33222, y = 31659, z = 13}, {x = 33221, y = 31659, z = 13}, {x = 33220, y = 31659, z = 13}, {x = 33219, y = 31659, z = 13} } -
xWhiteWolf's post in (Resolvido)Remover o Critical was marked as the answerconfig.lua.. procura algo parecido com isso:
criticalHitChance = 10 criticalHitMultiplier = 1.1 displayCriticalHitNotify = true
o primeiro é a chance de dar ataque critico, o segundo é o quanto o ataque critico vai ser melhor que o ataque normal e o terceiro é pra sair a animaçãozinha do "CRITICAL!!" em cima do player qnd ele der critical -
xWhiteWolf's post in (Resolvido)Script de Passiva para Players was marked as the answercara, eu consegui aqui fazer dar um exori a cada % após tomar danos maiores que um valor determinado.. mas isso taria mais pra um counter attack doque pruma passiva.. me fala quais tipos de passiva vc quer que eu faço pra ti, porque cada uma vai ser muito diferente da outra.
assim foi como ficou pra dar exori:
-------------- area da magia --- local area = createCombatArea{ {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } ------- local config = { percent = 20, -- porcentagem de sair a magia (50 = 50% de chance) valorvida = 100 --quanto deve ser o valor minimo de vida a perder para executar o script } function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS and value >= config.valorvida then if math.random (1,100) <= config.percent then local pos = getCreaturePosition(cid) local level, magic = getPlayerLevel(cid), getPlayerMagLevel(cid) local min, max = -(magic * 1.5 + level), -(magic * 2.5 + level) doAreaCombatHealth(cid, COMBAT_PHYSICALDAMAGE, pos, area, min, max, CONST_ME_HITAREA) end end return true end -
xWhiteWolf's post in (Resolvido)Magia de Buff para :Life, Skill, e mana was marked as the answerutevosio:
--Spell Method by Night Wolf local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 39) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local config = { tempo = 15, --- tempo que vai ficar recuperando mana (tempo total) mana = 15, -- quanto de mana ganha a cada intervalo intervalo = 1 --- intervalo que leva pra recuperar X de mana, } local condition = createConditionObject(CONDITION_FOOD) setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_MANAGAIN, config.mana) setConditionParam(condition, CONDITION_PARAM_MANATICKS, config.intervalo*1000) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end exorisio
--Spell Method by Night Wolf local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 39) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local config = { tempo = 60, --- tempo que vai durar a spell percent = 20 -- quanto % vai aumentar } local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_SKILL_CLUBPERCENT, 100+config.percent) setConditionParam(condition, CONDITION_PARAM_SKILL_SWORDPERCENT, 100+config.percent) setConditionParam(condition, CONDITION_PARAM_SKILL_AXEPERCENT, 100+config.percent) setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCEPERCENT, 100+config.percent) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end utamogransio
--Spell Method by Night Wolf local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 39) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local config = { tempo = 60, --- tempo que vai durar a spell percent = 25 -- quanto % vai aumentar } local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELDPERCENT, 100+config.percent) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end vitagransio
--Spell Method by Night Wolf local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 39) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local config = { tempo = 60, --- tempo que vai durar a spell percent = 25 -- quanto % vai aumentar } local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, config.tempo*1000) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setConditionParam(condition, CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT, 100+config.percent) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end e no spells.xml
<instant name="Buff Mana" words="utevo sio" lvl="40" mana="100" maglv="90" prem="1" aggressive="0" needtarget="1" params="1" exhaustion="1500" needlearn="0" event="script" value="especiais/utevosio.lua"> </instant> <instant name="Buff Skills" words="exori sio" lvl="40" mana="100" maglv="90" prem="1" aggressive="0" needtarget="1" params="1" exhaustion="1500" needlearn="0" event="script" value="especiais/exorisio.lua"> </instant> <instant name="Buff Shield" words="utamo gran sio" lvl="40" mana="100" maglv="120" prem="1" aggressive="0" needtarget="1" params="1" exhaustion="1500" needlearn="0" event="script" value="especiais/utamogransio.lua"> </instant> <instant name="Buff Hit Points" words="vita gran sio" lvl="40" mana="100" maglv="120" prem="1" aggressive="0" needtarget="1" params="1" exhaustion="1500" needlearn="0" event="script" value="especiais/vitagransio.lua"> com base nisso vc cria as outras.. espero ter ajudado.
-
xWhiteWolf's post in (Resolvido)Como criar storage de exp? was marked as the answersó colocar no movements com algum action ou unique id e colocar esse mesmo action/unique id no chão da porta e no teleporte... esse script possui bugs que tendem ao infinito mas to confiando em você pra pensar numa solução e postar o script completo.
Dica: um dos bugs é caso o player entre na quest e saia, a exp vai ficar pra sempre com ele kkk o outro é se ele entrar, pisar no tile e vai ganhar exp, ele sai do tile pra frente, volta pra trás pra perder a exp e vai pra frente em direção a quest.. daí ele termina tudo e quando sair no teleporte ele vai ganhar a exp a mais e ficar com ela pra sempre auhauhauh se vc n conseguir eu resolvo pra ti dps
local storage = 77788 local value = 1.25 -- 1x exp normal +25% function onStepIn(cid, item, position, fromPosition) if (getPlayerStorageValue(cid, storage) < 1) then setPlayerStorageValue(cid, storage, 1) doPlayerSetExtraExpRate(cid, value) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Now you're with "..value.."x of experience!") elseif (getPlayerStorageValue(cid, storage) == 1) then doPlayerSetExtraExpRate(cid, -value) setPlayerStorageValue(cid, storage, 0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You're no longer with "..value.."x experience!") end return true end -
xWhiteWolf's post in (Resolvido)Como faço pra tirar essa placa? was marked as the answerela aparece qnd vc loga ou qnd vc pisa no templo? Se for qnd loga deve ser um creaturescripts e se não tiver nada no creaturescripts.xml tá dentro do login.lua (que é um arquivo dentro de creaturescripts\scripts)
-
xWhiteWolf's post in (Resolvido)Dúvida parameters de Movement was marked as the answerpior q nem é um problema sem lógica uhauhauh eu coloquei pra toda vez que desequipar uma determinada arma da mão, ela fosse removida.. só que quando o player passa de uma mão pra outra ele remove ela e já conta como se tivesse equipado, ao remover ela pela função doRemoveItem é como se tivesse desequipado (da outra mão agora) e ele vai remover algo que já foi removido, por isso dá erro na distro. Eu pensei em um monte de formas mas a maioria delas inclui repetir o id do item pra outro movement onEquip (oque vai dar erro no console), eu consegui resolver certinho de uma maneira meio escrota e pras minhas necessidades acabou dando certo.... mas a idéia era fazer um scrip 100% funcional pra que outros pudessem mudar à vontade pra postar aqui. Enfim né, até amanhã vou postar o script da forma que tá e te convido pra dar uma olhada e ver se vc pensa em alguma outra forma de resolver o problema. Abração Max.
-
xWhiteWolf's post in (Resolvido)BUG 0 DE LIFE 0 DE MANA was marked as the answeronpreparedeath não pode ser, o return false de onpreparedeath faz com que não apareça o corpo mas o player morre de qqc jeito. É algum onKill ou onDeath
-
xWhiteWolf's post in (Resolvido)Pedido scripter revert was marked as the answeradicionou
<talkaction words="!revert;/revert" event="script" value="reverter.lua"/> ??
editei o script ali em cima, testa agora.
-
xWhiteWolf's post in (Resolvido)Demon Oak Quest - Bugada was marked as the answerfaça um quadrado mentalmente cuja as diagonais sejam as posições abaixo
local areaPosition = { {x=32705, y=32342, z=7, stackpos = 255}, {x=32726, y=32358, z=7, stackpos = 255} } a arvore não pode estar dentro desse quadrado. Então ou vc diminui o quadrado ou vc coloca a arvore pra fora dele.
-
xWhiteWolf's post in (Resolvido)[Pedido] Script monster .. was marked as the answerabra o xml do monster em questão e procure por isso:
<flag attackable="1"/> mude pra
<flag attackable="0"/> -
xWhiteWolf's post in (Resolvido)Abrir Ostra e Ganhar Giant Shimmering Pearl was marked as the answerpronto
--[[Script made 100% by Night Wolf for lagoa at tibiaking ~~~ enjoy it]] function onUse(cid, item, frompos, item2, topos) local config = { idconcha = XXXX, -- id da concha que vai abrir storaged = 45798, -- storage que será utilizado idperola = 2143, -- id da perola que ganha tempo = 20*60*60, --definido para 20 horas (20 HORAS * 60 MINUTOS * 60 SEGUNDOS) pos = getPlayerPosition (cid), --não mexa chance = 20 -- quanto % tem de chance de abrir a ostra e ganhar pérola } time = os.time() + config.tempo if item.itemid == config.idconcha then if os.time() - getCreatureStorage(cid, config.storaged) >= config.tempo then setPlayerStorageValue(cid, config.storaged, time) doTransformItem(item.uid,7553) if config.chance > math.random(1,100) then doPlayerAddItem(cid, config.idperola) doSendMagicEffect(config.pos,math.random(28,30)) --aqui é a parte do efeito, coloquei um random entre o efeito 28~30 que são os fogos de artificio doPlayerSendTextMessage(cid, 19, "You are real lucky, a "..getItemNameById(config.idperola).."!") else doPlayerSendTextMessage(cid, 19, "The oyster was empty. Better luck next time!") end else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You must wait "..config.tempo/3600 .." hours to open another oyster. Next available will be at: " ..os.date("%c", getPlayerStorageValue(cid, config.storaged)).. " (Mes/Dia/Ano e horario).") end end return true end