Ir para conteúdo
  • 0
Entre para seguir isso  
bielfaisca15

Scripting Error Script Action de Potions por porcentagem

Pergunta

bielfaisca15    0
bielfaisca15

Antes de fazer a sua pergunta, tenha certeza de ter lido o guia abaixo:

https://forums.otserv.com.br/index.php?/forums/topic/165121-como-fazer-uma-pergunta-ou-o-grande-guia-do-usuário-com-dúvidas/

Descreva em algumas palavras a base utilizada. (Nome do servidor / Nome do cliente / Nome do website / etc.).

Ex: The Forgotten Server 0.4 Versão 8.60

Base:

Qual é a sua pergunta?

Script dá erro, assim que utiliza alguma potion, no caso testei a great mana potion.

 

Você tem o código disponível? Se tiver poste-o na caixa de código que está dentro do spoiler abaixo:

Spoiler

 local config = {
removeOnUse = "no",
usableOnTarget = "yes", -- can be used on target? (fe. healing friend)
splashable = "no",
realAnimation = "no", -- make text effect visible only for players in range 1x1
healthMultiplier = 1.0,
manaMultiplier = 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 = 2, health = {5, 10}, max = 100, min = 50}, -- small health potion
[7618] = {empty = 7636, splash = 2, health = {10, 20}, max = 200, min = 50}, -- health potion
[7588] = {empty = 7634, splash = 2, health = {20, 40}, max = 500, min = 0, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion
[7591] = {empty = 7635, splash = 2, health = {50, 70}, max = 1000, min = 0, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion
[8473] = {empty = 7635, splash = 2, health = {80, 100}, max = 2000, min = 0, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion

[7620] = {empty = 7636, splash = 7, mana = {7, 13}, max = 150, min = 50}, -- mana potion
[7589] = {empty = 7634, splash = 7, mana = {11, 19}, max = 300, min = 0, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion
[7590] = {empty = 7635, splash = 7, mana = {20, 30}, max = 500, min = 0, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion

[8472] = {empty = 7635, splash = 3, health = {20, 40}, mana = {11, 19}, max = 1000, min = 0, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion
}

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 = getThingPos(item.uid)
end

doDecayItem(doCreateItem(2016, potion.splash, toPosition))
doTransformItem(item.uid, potion.empty)
return true
end

if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) 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

local min_, max_ = potion.min, potion.max

local health = potion.health
local maxhp = getCreatureMaxHealth(cid)
    if health then
        local random = math.ceil(math.random(health[1], health[2])) / 100
local hp = maxhp * random * healthMultiplier
if hp < min_ then
hp = min_
elseif hp > max_ then
hp = max_
end

doCreatureAddHealth(itemEx.uid, hp)
end

local mana = potion.mana
local maxmp = getPlayerMaxMana(cid)
    if mana then
        local random = math.ceil(math.random(mana[1], mana[2])) / 100
local mp = maxmp * random * manaMultiplier
if mp < min_ then
mp = min_
elseif mp > max_ then
mp = max_
end

doPlayerAddMana(itemEx.uid, mp)
end

doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE)
if(not realAnimation) then
doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)
else
for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do
if(isPlayer(tid)) then
doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid)
end
end
end

doAddCondition(cid, exhaust)
if(not potion.empty or config.removeOnUse) then
doRemoveItem(item.uid, 1)
return true
end
doRemoveItem(item.uid, 1)
     doPlayerAddItem(cid, potion.empty, 1)
return true
end

 

 

Você tem alguma imagem que possa auxiliar no problema? Se sim, anexe-a dentro do spoiler abaixo:

Spoiler

erro.png.dbaed2859f90b589f5e048d564d724f0.png

 

Compartilhar este post


Link para o post

1 resposta a esta questão

Recommended Posts

  • 0
TheRatazana    8
TheRatazana

Na linha 70 troque healthMultiplier por config.healthMultiplier

Na linha 84 troque manaMultiplier por config.manaMultiplier

 

Sempre que por algo dentro de uma tabela, como fez na config, você precisa referenciar a tabela da onde está tentando acessar esse valor

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×