Postado Março 27, 2014 11 anos Olá amigos do Tibia King. Bem , não sei se existe um tutorial já, mas procurei muito e não axei... gostaria de saber se alguém sabe como eu faço para, quando meu char usar potion, ele n poder usar magia de atk, ou runas de atk imediatamente, e virce versa.. Já mudei o exaust das magias para 2000, e das potions para 1500, mas isso não altera nessa questão, axo que tem que ser feito algum script.. é como no global, se vocês observarem, ao usar uma potion seja de mana ou heal, o char não usa imediatamente SD ou Magias de Atk( e virce versa ), tem um pequeno intervalo para que ele possa usar.. Galera, agradeço se alguém poder me ajudar, REP++ pra quem conseguir.. Um grande abraço amigos!!!
Postado Março 27, 2014 11 anos se vc manjar de script faz assim: toda vez q usar pot seta um storage por x tempo e antes de castar qualquer spell checa o storage, se tiver com valor 1 ele nao solta, se tiver com valor 0 ele solta Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Março 27, 2014 11 anos Autor Hm, eu não manjo muito de script, mas entendi mas ou menos sua ideia... poderia detalhar como faço amigão? agradeceria abraço!!!
Postado Março 27, 2014 11 anos esse é o script da minha strong health potion, note que o exhaust dela tá configurado pra funcionar só entre dois usos seguintes local MIN = 50 local MAX = 100 local EMPTY_POTION = 7636 local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) if isPlayer(itemEx.uid) == FALSE then return FALSE end if hasCondition(cid, CONDITION_EXHAUST_HEAL) == TRUE then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return TRUE end if doCreatureAddHealth(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then return FALSE end doAddCondition(cid, exhaust) doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) doTransformItem(item.uid, EMPTY_POTION) return TRUE end agora editando pra colocar o exhaust que vc quer ficaria assim: local MIN = 50 local MAX = 100 local EMPTY_POTION = 7636 local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) if isPlayer(itemEx.uid) == FALSE then return FALSE end if hasCondition(cid, CONDITION_EXHAUST_HEAL) == TRUE then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return TRUE end if exhaustion.check(cid, 23000) == false then exhaustion.set(cid, 23001, 1000) if doCreatureAddHealth(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then return FALSE end doAddCondition(cid, exhaust) doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) doTransformItem(item.uid, EMPTY_POTION) else doPlayerSendCancel(cid, "Cooldown[" ..exhaustion.get(cid, 23000).."]") end return TRUE end o 23000 é o storage que salva o exhausted das magias, e cria um 23001 pra salvar o das potions. Daí é só ir editando as magias uma por uma e adicionando a linha inversa. if exhaustion.check(cid, 23001) == false then exhaustion.set(cid, 23000 1000) ficando assim por exemplo no exori local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) setCombatParam(combat, COMBAT_PARAM_USECHARGES, true) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack, level / 5 return -(skillTotal * 1.5 + levelTotal), -(skillTotal * 2.5 + levelTotal) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var) if exhaustion.check(cid, 23001) == false then exhaustion.set(cid, 23000, 1000) return doCombat(cid, combat, var) else doPlayerSendCancel(cid, "Cooldown[" ..exhaustion.get(cid, 23000).."]") end end obs: exhaustion.set(cid, 23000, 1000) 23000 é o storage e 1000 é o tempo em milisegundos que vai ficar o exhausted mas essa função acho que só existe a partir do 8.6. Caso seu server seja anterior a isso você precisa colocar isso daqui na lib exhaustion = { check = function (cid, storage) if(getPlayerFlagValue(cid, PLAYERFLAG_HASNOEXHAUSTION)) then return false end return getPlayerStorageValue(cid, storage) >= os.time(t) end, get = function (cid, storage) if(getPlayerFlagValue(cid, PLAYERFLAG_HASNOEXHAUSTION)) then return false end local exhaust = getPlayerStorageValue(cid, storage) if(exhaust > 0) then local left = exhaust - os.time(t) if(left >= 0) then return left end end return false end, set = function (cid, storage, time) setPlayerStorageValue(cid, storage, os.time(t) + time) end, make = function (cid, storage, time) local exhaust = exhaustion.get(cid, storage) if(not exhaust) then exhaustion.set(cid, storage, time) return true end return false end } Se der algum erro posta aqui o erro e as informações completas do tipo (que server vc usa, qual versão do tibia, detalhes, etc.) Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá! "Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda (obg ao @Beeny por fazer essa linda sign <3)
Postado Março 27, 2014 11 anos Autor Deu um errinho aqui; [Error - Luainterface : : loadFile ] data/spells/scripts/attack/rage of the skies.lua:18 'end' expected <to close 'function' at line 16> near 'else' [WARNING] - event : : loadscript] Cannot load script <data/spells/scripts/attack/rage of the skie.lua> vou postar aqui minhas potions, e a magia, assim você pode me dizer onde está errado. o server é um TFS 0.4 (8.60) MAGIA: (No meu bloco de notas ela ta toda em linha reta > , por isso ficou assim \/ [lua] local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS) function onGetFormulaValues(cid, level, maglevel) local min = -((level/5)+(maglevel*3.99)+75) local max = -((level/5)+(maglevel*9.99)+150) return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") local area = createCombatArea(AREA_CROSS6X6) setCombatArea(combat, area) function onCastSpell(cid, var) if exhaustion.check(cid, 23001) == false then exhaustion.set(cid, 23000, 1000) return doCombat(cid, combat, var) end else doPlayerSendCancel(cid, "Cooldown[" ..exhaustion.get(cid, 23000).."]") end end [/lua] POTIONS; [lua] local config = { removeOnUse = "yes", usableOnTarget = "yes", -- can be used on target? (fe. healing friend) splashable = "no", range = -1, realAnimation = "yes", -- make text effect visible only for players in range 1x1 multiplier = { health = 1.0, mana = 1.0 } } config.removeOnUse = getBooleanFromString(config.removeOnUse) config.usableOnTarget = getBooleanFromString(config.usableOnTarget) config.splashable = getBooleanFromString(config.splashable) config.realAnimation = getBooleanFromString(config.realAnimation) local POTIONS = { [8704] = {empty = 7636, splash = 42, health = {45, 95}}, -- small health potion [7618] = {empty = 7636, splash = 42, health = {100, 180}}, -- health potion [7588] = {empty = 7634, splash = 42, health = {200, 300}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion [7591] = {empty = 7635, splash = 42, health = {450, 500}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion [8473] = {empty = 7635, splash = 42, health = {600, 750}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion [7620] = {empty = 7636, splash = 47, mana = {40, 130}}, -- mana potion [7589] = {empty = 7634, splash = 47, mana = {110, 190}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion [7590] = {empty = 7635, splash = 47, mana = {120, 250}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion [8472] = {empty = 7635, splash = 43, health = {200, 300}, mana = {100, 150}, level = 80, vocations = {3, 7}, vocStr = "paladins"} } local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) local potion = POTIONS[item.itemid] if(not potion) then return false end if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then if(not config.splashable) then return false end if(toPosition.x == CONTAINER_POSITION) then toPosition = getThingPosition(item.uid) end doDecayItem(doCreateItem(POOL, potion.splash, toPosition)) doRemoveItem(item.uid, 1) if(not potion.empty or config.removeOnUse) then return true end if(fromPosition.x ~= CONTAINER_POSITION) then doCreateItem(potion.empty, fromPosition) else doPlayerAddItem(cid, potion.empty, 1) end return true end if(hasCondition(cid, CONDITION_EXHAUST)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return true end if(((potion.level and getPlayerLevel(cid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(cid)))) and not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1) return true end if(config.range > 0 and cid ~= itemEx.uid and getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(itemEx.uid)) > config.range) then return false end local health = potion.health if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.multiplier.health))) then return false end local mana = potion.mana if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.multiplier.mana))) then return false end doSendMagicEffect(getThingPosition(itemEx.uid), CONST_ME_MAGIC_BLUE) if(not config.realAnimation) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) else for i, tid in ipairs(getSpectators(getThingPosition(itemEx.uid), 1, 1)) do if(isPlayer(tid)) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid) else doPlayerSendCancel(cid, "Cooldown[" ..exhaustion.get(cid, 23000).."]") end end return TRUE end doAddCondition(cid, exhaust) doRemoveItem(item.uid, 1) if(not potion.empty or config.removeOnUse) then return true end if(fromPosition.x ~= CONTAINER_POSITION) then doCreateItem(potion.empty, fromPosition) else doPlayerAddItem(cid, potion.empty, 1) end return true end[/lua] Cara, gostei muito , muito eficiente... mesmo não tendo funcionado "ainda" , já agradeço rs.... Abraço .. aguardando resposta!
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.