Qual é a distro?
Btw, tenta trocar todos os db.executeQuery no script para db.query e vê se resolve.
- Fórum
- OTServ
- Suporte
- Tópicos Sem Resposta
- [Encerrado] [Encerrado] [ERRO] ACTION - Change Vocation
[Encerrado] [Encerrado] [ERRO] ACTION - Change Vocation
Por UntFrc, 16 de set. de 2017 em Tópicos Sem Resposta
info
Grupo: Administrador
Registrado: 23/07/06
Posts: 121
Reputação: +99
Gênero: Masculino
Char no Tibia: Politico

function onUse(cid, item, frompos, item2, topos) level = getPlayerLevel(cid)-8 pid = getPlayerGUID(cid) magehealth = level*5 -- Quantidade de vida que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) magemana = level*30 -- Quantidade de mana que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) paladinhealth = level*10 -- Quantidade de vida que o Paladin ganha a cada level(mude apenas os numeros) paladinmana = level*15 -- Quantidade de mana que o Paladin ganha a cada level(mude apenas os numeros) knighthealth = level*15 -- Quantidade de vida que o Knight ganha a cada level(mude apenas os numeros) knightmana = level*5 -- Quantidade de mana que o Knight ganha a cada level(mude apenas os numeros) if item.uid == 37001 then doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to sorcerer.') doPlayerSetVocation(cid, 1) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doRemoveCreature(cid) db.query("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.query("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end if item.uid == 37011 then doPlayerSetVocation(cid, 2) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to druid.') doRemoveCreature(cid) db.query("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.query("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end if item.uid == 37012 then doPlayerSetVocation(cid, 3) setCreatureMaxHealth(cid, paladinhealth) setCreatureMaxMana(cid, paladinmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to paladin.') doRemoveCreature(cid) db.query("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.query("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end if item.uid == 37013 then doPlayerSetVocation(cid, 4) setCreatureMaxHealth(cid, knighthealth) setCreatureMaxMana(cid, knightmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to knight.') doRemoveCreature(cid) db.query("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.query("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end end
3 horas atrás, PoRaI disse:Qual é a distro?
Btw, tenta trocar todos os db.executeQuery no script para db.query e vê se resolve.
Não foi também. A distro é TFS 0.3.6
data/actions/scripts/changevoc.lua:43: attempt to call field 'query' (a nil value)
10 horas atrás, Dandjes disse:
Não foi também. A distro é TFS 0.3.6
data/actions/scripts/changevoc.lua:43: attempt to call field 'query' (a nil value)
function onUse(cid, item, frompos, item2, topos) level = getPlayerLevel(cid)-8 pid = getPlayerGUID(cid) magehealth = level*5 -- Quantidade de vida que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) magemana = level*30 -- Quantidade de mana que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) paladinhealth = level*10 -- Quantidade de vida que o Paladin ganha a cada level(mude apenas os numeros) paladinmana = level*15 -- Quantidade de mana que o Paladin ganha a cada level(mude apenas os numeros) knighthealth = level*15 -- Quantidade de vida que o Knight ganha a cada level(mude apenas os numeros) knightmana = level*5 -- Quantidade de mana que o Knight ganha a cada level(mude apenas os numeros) if item.uid == 37001 then doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to sorcerer.') doPlayerSetVocation(cid, 1) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doRemoveCreature(cid) end if item.uid == 37011 then doPlayerSetVocation(cid, 2) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to druid.') doRemoveCreature(cid) end if item.uid == 37012 then doPlayerSetVocation(cid, 3) setCreatureMaxHealth(cid, paladinhealth) setCreatureMaxMana(cid, paladinmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to paladin.') doRemoveCreature(cid) end if item.uid == 37013 then doPlayerSetVocation(cid, 4) setCreatureMaxHealth(cid, knighthealth) setCreatureMaxMana(cid, knightmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to knight.') doRemoveCreature(cid) end end
3 horas atrás, Crypter disse:function onUse(cid, item, frompos, item2, topos) level = getPlayerLevel(cid)-8 pid = getPlayerGUID(cid) magehealth = level*5 -- Quantidade de vida que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) magemana = level*30 -- Quantidade de mana que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) paladinhealth = level*10 -- Quantidade de vida que o Paladin ganha a cada level(mude apenas os numeros) paladinmana = level*15 -- Quantidade de mana que o Paladin ganha a cada level(mude apenas os numeros) knighthealth = level*15 -- Quantidade de vida que o Knight ganha a cada level(mude apenas os numeros) knightmana = level*5 -- Quantidade de mana que o Knight ganha a cada level(mude apenas os numeros) if item.uid == 37001 then doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to sorcerer.') doPlayerSetVocation(cid, 1) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doRemoveCreature(cid) end if item.uid == 37011 then doPlayerSetVocation(cid, 2) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to druid.') doRemoveCreature(cid) end if item.uid == 37012 then doPlayerSetVocation(cid, 3) setCreatureMaxHealth(cid, paladinhealth) setCreatureMaxMana(cid, paladinmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to paladin.') doRemoveCreature(cid) end if item.uid == 37013 then doPlayerSetVocation(cid, 4) setCreatureMaxHealth(cid, knighthealth) setCreatureMaxMana(cid, knightmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to knight.') doRemoveCreature(cid) end end
Desse jeito vai dar na mesma, não vai resetar o skill. Imagina um knight com ml 95??
info
Grupo: Administrador
Registrado: 23/07/06
Posts: 121
Reputação: +99
Gênero: Masculino
Char no Tibia: Politico

local vocation_table = {
[37001] = 1,
[37011] = 2,
[37012] = 3,
[37013] = 4,
}
function onUse(cid, item, frompos, item2, topos)
local voc = vocation_table[item.uid]
if voc then
if getPlayerVocation(cid) == voc then
return doPlayerSendCancel(cid, "Você não pode trocar para a mesma vocação.")
elseif getPlayerVocation(cid) == 0 then
return doPlayerSendCancel(cid, "Você precisa ter uma vocação para ser outra.")
elseif getCreatureCondition(cid, CONDITION_INFIGHT) then
return doPlayerSendCancel(cid, "Você não pode trocar de vocação em combate.")
end
local pid = getPlayerGUID(cid)
local level = math.max(1, getPlayerLevel(cid) - 8)
local vocationInfo = getVocationInfo(voc)
local hpLevel = vocationInfo.healthGain * level
local manaLevel = vocationInfo.manaGain * level
local baseInfo = getVocationInfo(0)
local baseHp = baseInfo.healthGain * 8
local baseMana = baseInfo.manaGain * 8
doSendMagicEffect(topos, 14)
setCreatureMaxHealth(cid, baseHp + hpLevel)
setCreatureMaxMana(cid, baseMana + manaLevel)
doPlayerSetVocation(cid, voc)
doRemoveCreature(cid)
local executeQuery = db.executeQuery or db.query
executeQuery("UPDATE `player_skills` SET `value` = '10', count = '0' WHERE `player_id` = '".. pid .."';")
executeQuery("UPDATE `players` SET `maglevel` = '0', `manaspent` = '0' WHERE `id` = '".. pid .."';")
end
return true
end
Eu refiz o seu script, não sei se vai ajudar no seu caso.
O que imagino que possa ser é: você ter criado uma variável chamada db e ter dado conflito com a tabela de funções db, sei lá.
E também, se possível, envia seu luascript.cpp pra eu dar uma olhada aí.
1 hora atrás, Dandjes disse:
Desse jeito vai dar na mesma, não vai resetar o skill. Imagina um knight com ml 95??
Você não disse se usa Mysql ou Sqlite, não mostrou nem ao menos o banco de dados, e quer um milagre
18 minutos atrás, Crypter disse:Você não disse se usa Mysql ou Sqlite, não mostrou nem ao menos o banco de dados, e quer um milagre
É sqlite, o que exatamente do banco de dados voce precisa ver?
55 minutos atrás, PoRaI disse:local vocation_table = { [37001] = 1, [37011] = 2, [37012] = 3, [37013] = 4, } function onUse(cid, item, frompos, item2, topos) local voc = vocation_table[item.uid] if voc then if getPlayerVocation(cid) == voc then return doPlayerSendCancel(cid, "Você não pode trocar para a mesma vocação.") elseif getPlayerVocation(cid) == 0 then return doPlayerSendCancel(cid, "Você precisa ter uma vocação para ser outra.") elseif getCreatureCondition(cid, CONDITION_INFIGHT) then return doPlayerSendCancel(cid, "Você não pode trocar de vocação em combate.") end local pid = getPlayerGUID(cid) local level = math.max(1, getPlayerLevel(cid) - 8) local vocationInfo = getVocationInfo(voc) local hpLevel = vocationInfo.healthGain * level local manaLevel = vocationInfo.manaGain * level local baseInfo = getVocationInfo(0) local baseHp = baseInfo.healthGain * 8 local baseMana = baseInfo.manaGain * 8 doSendMagicEffect(topos, 14) setCreatureMaxHealth(cid, baseHp + hpLevel) setCreatureMaxMana(cid, baseMana + manaLevel) doPlayerSetVocation(cid, voc) doRemoveCreature(cid) local executeQuery = db.executeQuery or db.query executeQuery("UPDATE `player_skills` SET `value` = '10', count = '0' WHERE `player_id` = '".. pid .."';") executeQuery("UPDATE `players` SET `maglevel` = '0', `manaspent` = '0' WHERE `id` = '".. pid .."';") end return true end
Eu refiz o seu script, não sei se vai ajudar no seu caso.O que imagino que possa ser é: você ter criado uma variável chamada db e ter dado conflito com a tabela de funções db, sei lá.
E também, se possível, envia seu luascript.cpp pra eu dar uma olhada aí.
Também não foi. Acho melhor deixar pra lá isso kkkkk
Acredito que não vá funcionar em sqlite.
function onUse(cid, item, frompos, item2, topos) level = getPlayerLevel(cid)-8 pid = getPlayerGUID(cid) magehealth = level*5 -- Quantidade de vida que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) magemana = level*30 -- Quantidade de mana que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) paladinhealth = level*10 -- Quantidade de vida que o Paladin ganha a cada level(mude apenas os numeros) paladinmana = level*15 -- Quantidade de mana que o Paladin ganha a cada level(mude apenas os numeros) knighthealth = level*15 -- Quantidade de vida que o Knight ganha a cada level(mude apenas os numeros) knightmana = level*5 -- Quantidade de mana que o Knight ganha a cada level(mude apenas os numeros) if item.uid == 37001 then doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to sorcerer.') doPlayerSetVocation(cid, 1) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `maglevel` = " .. 0 .. " WHERE `id` = " .. getPlayerGUID(cid) .. ";") db.executeQuery("UPDATE `player_skills` SET ` value` = " .. 0 .. " WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") end if item.uid == 37011 then doPlayerSetVocation(cid, 2) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to druid.') doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `maglevel` = " .. 0 .. " WHERE `id` = " .. getPlayerGUID(cid) .. ";") db.executeQuery("UPDATE `player_skills` SET ` value` = " .. 0 .. " WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") end if item.uid == 37012 then doPlayerSetVocation(cid, 3) setCreatureMaxHealth(cid, paladinhealth) setCreatureMaxMana(cid, paladinmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to paladin.') doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `maglevel` = " .. 0 .. " WHERE `id` = " .. getPlayerGUID(cid) .. ";") db.executeQuery("UPDATE `player_skills` SET ` value` = " .. 0 .. " WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") end if item.uid == 37013 then doPlayerSetVocation(cid, 4) setCreatureMaxHealth(cid, knighthealth) setCreatureMaxMana(cid, knightmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to knight.') doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `maglevel` = " .. 0 .. " WHERE `id` = " .. getPlayerGUID(cid) .. ";") db.executeQuery("UPDATE `player_skills` SET ` value` = " .. 0 .. " WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") end end
7 horas atrás, Crypter disse:function onUse(cid, item, frompos, item2, topos) level = getPlayerLevel(cid)-8 pid = getPlayerGUID(cid) magehealth = level*5 -- Quantidade de vida que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) magemana = level*30 -- Quantidade de mana que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) paladinhealth = level*10 -- Quantidade de vida que o Paladin ganha a cada level(mude apenas os numeros) paladinmana = level*15 -- Quantidade de mana que o Paladin ganha a cada level(mude apenas os numeros) knighthealth = level*15 -- Quantidade de vida que o Knight ganha a cada level(mude apenas os numeros) knightmana = level*5 -- Quantidade de mana que o Knight ganha a cada level(mude apenas os numeros) if item.uid == 37001 then doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to sorcerer.') doPlayerSetVocation(cid, 1) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `maglevel` = " .. 0 .. " WHERE `id` = " .. getPlayerGUID(cid) .. ";") db.executeQuery("UPDATE `player_skills` SET ` value` = " .. 0 .. " WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") end if item.uid == 37011 then doPlayerSetVocation(cid, 2) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to druid.') doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `maglevel` = " .. 0 .. " WHERE `id` = " .. getPlayerGUID(cid) .. ";") db.executeQuery("UPDATE `player_skills` SET ` value` = " .. 0 .. " WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") end if item.uid == 37012 then doPlayerSetVocation(cid, 3) setCreatureMaxHealth(cid, paladinhealth) setCreatureMaxMana(cid, paladinmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to paladin.') doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `maglevel` = " .. 0 .. " WHERE `id` = " .. getPlayerGUID(cid) .. ";") db.executeQuery("UPDATE `player_skills` SET ` value` = " .. 0 .. " WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") end if item.uid == 37013 then doPlayerSetVocation(cid, 4) setCreatureMaxHealth(cid, knighthealth) setCreatureMaxMana(cid, knightmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to knight.') doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `maglevel` = " .. 0 .. " WHERE `id` = " .. getPlayerGUID(cid) .. ";") db.executeQuery("UPDATE `player_skills` SET ` value` = " .. 0 .. " WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") end end
[Error - Action Interface] data/actions/scripts/changevoc.lua:onUse Description: (internalGetPlayerInfo) Player not found when requesting player info #18 [Error - Action Interface] data/actions/scripts/changevoc.lua:onUse Description: data/actions/scripts/changevoc.lua:22: attempt to concatenate a boolean value stack traceback: data/actions/scripts/changevoc.lua:22: in function <data/actions/scripts/changevoc.lua:1>
Acho que definitivamente não vai funcionar, pelo menos acredito eu que em sqlite não. Mas vou deixar um rep+ pra voces pelo esforço em tentar ajudar e quem sabe alguém com interesse no script que use MySql tente testar ou usar e um dia seja útil.
info
Grupo: Administrador
Registrado: 26/02/07
Posts: 254
Reputação: +205
Gênero: Masculino
Char no Tibia: Frenvius

info
Grupo: Herói
Registrado: 28/11/10
Posts: 3.4k
Reputação: +585
Gênero: Masculino






info
Grupo: Campones
Registrado: 19/02/16
Posts: 95
Reputação: +27
Gênero: Outro
Olá. Eu encontrei na internet um script que troca a vocação por action, ele tem uma linha na qual deveria executar um comando na database para resetar os skills, mas está dando um erro e não está zerando os skills. Alguém saberia como consertar isso? Eu testei em SQL.
ERRO:
SCRIPT:
function onUse(cid, item, frompos, item2, topos) level = getPlayerLevel(cid)-8 pid = getPlayerGUID(cid) magehealth = level*5 -- Quantidade de vida que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) magemana = level*30 -- Quantidade de mana que o Sorcerer e Druid ganha a cada level(mude apenas os numeros) paladinhealth = level*10 -- Quantidade de vida que o Paladin ganha a cada level(mude apenas os numeros) paladinmana = level*15 -- Quantidade de mana que o Paladin ganha a cada level(mude apenas os numeros) knighthealth = level*15 -- Quantidade de vida que o Knight ganha a cada level(mude apenas os numeros) knightmana = level*5 -- Quantidade de mana que o Knight ganha a cada level(mude apenas os numeros) if item.uid == 37001 then doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to sorcerer.') doPlayerSetVocation(cid, 1) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doRemoveCreature(cid) db.executeQuery("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.executeQuery("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end if item.uid == 37011 then doPlayerSetVocation(cid, 2) setCreatureMaxHealth(cid, magehealth) setCreatureMaxMana(cid, magemana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to druid.') doRemoveCreature(cid) db.executeQuery("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.executeQuery("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end if item.uid == 37012 then doPlayerSetVocation(cid, 3) setCreatureMaxHealth(cid, paladinhealth) setCreatureMaxMana(cid, paladinmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to paladin.') doRemoveCreature(cid) db.executeQuery("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.executeQuery("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end if item.uid == 37013 then doPlayerSetVocation(cid, 4) setCreatureMaxHealth(cid, knighthealth) setCreatureMaxMana(cid, knightmana) doSendMagicEffect(topos, 14) doPlayerPopupFYI(cid, 'You changed your vocation to knight.') doRemoveCreature(cid) db.executeQuery("UPDATE `player_skills` SET `value` = ".. 10 ..", count = ".. 0 .." WHERE `player_id` = ".. pid ..";") db.executeQuery("UPDATE `players` SET `maglevel` = ".. 0 ..", `manaspent` = ".. 0 .." WHERE `id` = ".. pid ..";") end end