Olha segue abaixo o erro que deu agora!
Ele reseto, adiciono 1 ponto em resets em players,
mais não em accounts em guild_points
erro:

Olha segue abaixo o erro que deu agora!
Ele reseto, adiciono 1 ponto em resets em players,
mais não em accounts em guild_points
erro:

info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

Olha segue abaixo o erro que deu agora!
Ele reseto, adiciono 1 ponto em resets em players,
mais não em accounts em guild_points
Função:
function doPlayerReset(tid, count)
if teleport then
doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
end
local resets = getPlayerResets(tid)
local account = getPlayerAccount(tid)
local pid = getPlayerGUID(tid)
function setResetsInLook(tid)
return db.query("UPDATE `players` SET `description` = ' [Reset "..(resets+(count == nil and 1 or count)).."]' WHERE `id` = '"..pid.."';")
end
if system == "database" then
doRemoveCreature(tid)
doPlayerAddResets(tid, count == nil and 1 or count)
elseif system == "storage" then
doPlayerAddResets(tid, count == nil and 1 or count)
doRemoveCreature(tid)
else
return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
end
db.query("UPDATE `players` SET `level` = '"..nlevel.."', `health` = '"..nhp.."', `healthmax` = '"..nhpx.."', `mana` = '"..nmp.."', `manamax` = '"..nmpx.."' WHERE `id` = "..pid..";")
setGuildPoints(tid, 1)
if look then
setResetsInLook(tid)
end
end
Talkaction:
function onSay(cid, words, param)
if words == "!reset" or words == "!resetar" then
if prem and not isPremium(cid) then
doPlayerSendCancel(cid, "Você precisa ser Premium Account para resetar.") return true
elseif pz and not getTilePzInfo(getCreaturePosition(cid)) then
doPlayerSendCancel(cid, "Você precisa estar em Protection Zone para resetar.") return true
elseif white and getCreatureSkullType(cid) == SKULL_WHITE then
doPlayerSendCancel(cid, "Você precisa estar sem White Skull para resetar.") return true
elseif red and getCreatureSkullType(cid) == SKULL_RED then
doPlayerSendCancel(cid, "Você precisa estar sem Red Skull para resetar.") return true
elseif black and getCreatureSkullType(cid) == SKULL_BLACK then
doPlayerSendCancel(cid, "Você precisa estar sem Black Skull para resetar.") return true
elseif battle and hasCondition(cid, CONDITION_INFIGHT) then
doPlayerSendCancel(cid, "Você precisa estar sem battle para resetar.") return true
elseif getPlayerLevel(cid) < level then
doPlayerSendCancel(cid, "Você precisa ter level "..level.." para resetar.") return true
elseif limite and getPlayerResets(cid) == limite then
doPlayerSendCancel(cid, "Você já está no limite de resets ("..limite..").") return true
elseif exhaustion.check(cid, exhastor) then
doPlayerSendCancel(cid, "Espere "..exhaustion.get(cid, exhastor).." segundos para usar o comando novamente.") return true
end
doPlayerReset(cid, 1)
doPlayerPopupFYI(cid, "Você resetou com sucesso. Você agora tem "..(getPlayerResets(cid)+1).." resets. Você será deslogad"..(getPlayerSex(cid) >= 1 and "o" or "a").." em "..time.." segundos.")
exhaustion.set(cid, exhastor, time)
elseif words == "/addresets" then
local t = string.explode(param, ",")
if getPlayerGroupId(cid) < group then return false
elseif not t then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Parâmetros incorretos. Especifique o nome do player e opcionalmente a quantidade de resets.") return true
elseif not getPlayerByName(t[1]) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Player "..t[1].." não encontrado.") return true
elseif t[3] then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Parâmetros incorretos. Especifique apenas o nome do player e opcionalmente a quantidade de resets.") return true
end
doPlayerReset(getPlayerGUIDByName(t[1]), t[2] == nil and "1" or t[2])
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..(t[2] == nil and "1" or t[2]).." resets no player "..getCreatureName(getPlayerByName(t[1]))..". Agora el"..(getPlayerSex(getPlayerByName(t[1])) >= 1 and "e" or "a").." possui "..(getPlayerResets(getPlayerByName(t[1]))+(t[2] == nil and "1" or t[2])).." resets.")
doPlayerPopupFYI(getPlayerByName(t[1]), ""..getCreatureName(cid).." adicionou "..(t[2] == nil and "1" or t[2]).." resets em seu character. Você agora tem "..(getPlayerResets(getPlayerByName(t[1]))+(t[2] == nil and "1" or t[2])).." resets. Você será deslogad"..(getPlayerSex(getPlayerByName(t[1])) >= 1 and "o" or "a").." em "..time.." segundos.")
end
return true
end
Cara nos é muito guerreiro! isso que chamo de ajuda xTibia ![]()
Mais vamos lá, ainda deu erro, mais vamos ver se foi eu que fiz erro ou certo não sei!.
Ficou assim o reset;
-- CONFIGS --
prem = false -- Premium Account necessária para resetar? (true / false)
pz = true -- É preciso estar em Protection Zone para resetar? (true / false)
white = false -- Players com White Skull podem resetar? (true / false)
red = false -- Players com Red Skull podem resetar? (true / false)
black = false -- Players com Black Skull podem resetar? (true / false)
battle = false -- Players com battle podem resetar? (true / false)
teleport = true -- Teleportar o player para o templo após o reset? (true / false)
look = true -- Aparecer resets no look? (true / false)
level = 8 -- Level necessário para resetar
nlevel = 8 -- Level que o player ficará após o reset
nhpx = 185 -- HPMax que o player ficará após o reset
nmpx = 35 -- MPMax que o player ficará após o reset
nhp = 185 -- HP que o player ficará após o reset
nmp = 35 -- MP que o player ficará após o reset
time = 3 -- Tempo para o player deslogar ao resetar (segundos)
limite = 100 -- Limite de resets (Caso não queira limite, coloque false)
system = "database" -- Modo do sistema (database / storage)
storage = 39650 -- Storage dos resets
group = 5 -- ID do Group que tem permissão para adicionar resets (6 = god, 5 = cm, 4 = gm, 3 = senior tutor, 2 = tutor)
exhastor = 17138
-- CONFIGS --
------------------------------------------------------------------------------------------------------------------------------------
function getPlayerResets(tid)
if system == "database" then
local a = db.getResult("SELECT `resets` FROM `players` WHERE `id`= "..pid..";")
b = a:getDataInt("resets", pid)
return b
elseif system == "storage" then
return getPlayerStorageValue(tid, storage) < 0 and 0 or getPlayerStorageValue(tid, storage)
else
return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
end
end
function doPlayerReset(tid, count)
if teleport then
doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
end
local resets = getPlayerResets(tid)
local account = getPlayerAccount(tid)
local pid = getPlayerGUID(tid)
function setResetsInLook(tid)
return db.query("UPDATE `players` SET `description` = ' [Reset "..(resets+(count == nil and 1 or count)).."]' WHERE `id` = '"..pid.."';")
end
if system == "database" then
doRemoveCreature(tid)
doPlayerAddResets(tid, count == nil and 1 or count)
elseif system == "storage" then
doPlayerAddResets(tid, count == nil and 1 or count)
doRemoveCreature(tid)
else
return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
end
db.query("UPDATE `players` SET `level` = '"..nlevel.."', `health` = '"..nhp.."', `healthmax` = '"..nhpx.."', `mana` = '"..nmp.."', `manamax` =
'"..nmpx.."' WHERE `id` = "..pid..";")
setGuildPoints(tid, 1)
if look then
setResetsInLook(tid)
end
end
------------------------------------------------------------------------------------------------------------------------------------
function onSay(cid, words, param)
if words == "!reset" or words == "!resetar" then
if prem and not isPremium(cid) then
doPlayerSendCancel(cid, "Você precisa ser Premium Account para resetar.") return true
elseif pz and not getTilePzInfo(getCreaturePosition(cid)) then
doPlayerSendCancel(cid, "Você precisa estar em Protection Zone para resetar.") return true
elseif white and getCreatureSkullType(cid) == SKULL_WHITE then
doPlayerSendCancel(cid, "Você precisa estar sem White Skull para resetar.") return true
elseif red and getCreatureSkullType(cid) == SKULL_RED then
doPlayerSendCancel(cid, "Você precisa estar sem Red Skull para resetar.") return true
elseif black and getCreatureSkullType(cid) == SKULL_BLACK then
doPlayerSendCancel(cid, "Você precisa estar sem Black Skull para resetar.") return true
elseif battle and hasCondition(cid, CONDITION_INFIGHT) then
doPlayerSendCancel(cid, "Você precisa estar sem battle para resetar.") return true
elseif getPlayerLevel(cid) < level then
doPlayerSendCancel(cid, "Você precisa ter level "..level.." para resetar.") return true
elseif limite and getPlayerResets(cid) == limite then
doPlayerSendCancel(cid, "Você já está no limite de resets ("..limite..").") return true
elseif exhaustion.check(cid, exhastor) then
doPlayerSendCancel(cid, "Espere "..exhaustion.get(cid, exhastor).." segundos para usar o comando novamente.") return true
end
doPlayerReset(cid, 1)
doPlayerPopupFYI(cid, "Você resetou com sucesso. Você agora tem "..(getPlayerResets(cid)+1).." resets. Você será deslogad"..(getPlayerSex(cid) >= 1 and
"o" or "a").." em "..time.." segundos.")
exhaustion.set(cid, exhastor, time)
elseif words == "/addresets" then
local t = string.explode(param, ",")
if getPlayerGroupId(cid) < group then return false
elseif not t then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Parâmetros incorretos. Especifique o nome do player e opcionalmente a quantidade
de resets.") return true
elseif not getPlayerByName(t[1]) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Player "..t[1].." não encontrado.") return true
elseif t[3] then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Parâmetros incorretos. Especifique apenas o nome do player e opcionalmente a
quantidade de resets.") return true
end
doPlayerReset(getPlayerGUIDByName(t[1]), t[2] == nil and "1" or t[2])
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..(t[2] == nil and "1" or t[2]).." resets no player "..getCreatureName
(getPlayerByName(t[1]))..". Agora el"..(getPlayerSex(getPlayerByName(t[1])) >= 1 and "e" or "a").." possui "..(getPlayerResets(getPlayerByName(t[1]))+(t[2] == nil and
"1" or t[2])).." resets.")
doPlayerPopupFYI(getPlayerByName(t[1]), ""..getCreatureName(cid).." adicionou "..(t[2] == nil and "1" or t[2]).." resets em seu character. Você agora
tem "..(getPlayerResets(getPlayerByName(t[1]))+(t[2] == nil and "1" or t[2])).." resets. Você será deslogad"..(getPlayerSex(getPlayerByName(t[1])) >= 1 and "o" or
"a").." em "..time.." segundos.")
end
return true
end
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

-- CONFIGS --
local prem = false -- Premium Account necessária para resetar? (true / false)
local pz = true -- É preciso estar em Protection Zone para resetar? (true / false)
local white = false -- Players com White Skull podem resetar? (true / false)
local red = false -- Players com Red Skull podem resetar? (true / false)
local black = false -- Players com Black Skull podem resetar? (true / false)
local battle = false -- Players com battle podem resetar? (true / false)
local teleport = true -- Teleportar o player para o templo após o reset? (true / false)
local look = true -- Aparecer resets no look? (true / false)
local level = 8 -- Level necessário para resetar
local nlevel = 8 -- Level que o player ficará após o reset
local nhpx = 185 -- HPMax que o player ficará após o reset
local nmpx = 35 -- MPMax que o player ficará após o reset
local nhp = 185 -- HP que o player ficará após o reset
local nmp = 35 -- MP que o player ficará após o reset
local time = 3 -- Tempo para o player deslogar ao resetar (segundos)
local limite = 100 -- Limite de resets (Caso não queira limite, coloque false)
local system = "database" -- Modo do sistema (database / storage)
local storage = 39650 -- Storage dos resets
local group = 5 -- ID do Group que tem permissão para adicionar resets (6 = god, 5 = cm, 4 = gm, 3 = senior tutor, 2 = tutor)
local exhastor = 17138
-- CONFIGS --
------------------------------------------------------------------------------------------------------------------------------------
function getPlayerResets(tid)
if system == "database" then
local a = db.getResult("SELECT `resets` FROM `players` WHERE `id`= "..getPlayerGUID(tid)..";")
b = a:getDataInt("resets", pid)
return b
elseif system == "storage" then
return getPlayerStorageValue(tid, storage) < 0 and 0 or getPlayerStorageValue(tid, storage)
else
return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
end
end
function doPlayerReset(tid, count)
if teleport then
doTeleportThing(tid, getTownTemplePosition(getPlayerTown(tid)))
end
local resets = getPlayerResets(tid)
local account = getPlayerAccount(tid)
local pid = getPlayerGUID(tid)
function setResetsInLook(tid)
return db.query("UPDATE `players` SET `description` = ' [Reset "..(resets+(count == nil and 1 or count)).."]' WHERE `id` = '"..pid.."';")
end
if system == "database" then
doRemoveCreature(tid)
doPlayerAddResets(tid, count == nil and 1 or count)
elseif system == "storage" then
doPlayerAddResets(tid, count == nil and 1 or count)
doRemoveCreature(tid)
else
return print("Erro: Configuração da variável 'system' no sistema de resets incorreta.")
end
db.query("UPDATE `players` SET `level` = '"..nlevel.."', `health` = '"..nhp.."', `healthmax` = '"..nhpx.."', `mana` = '"..nmp.."', `manamax` ='"..nmpx.."' WHERE `id` = "..pid..";")
setGuildPoints(tid, 1)
if look then
setResetsInLook(tid)
end
end
------------------------------------------------------------------------------------------------------------------------------------
function onSay(cid, words, param)
if words == "!reset" or words == "!resetar" then
if prem and not isPremium(cid) then
doPlayerSendCancel(cid, "Você precisa ser Premium Account para resetar.") return true
elseif pz and not getTilePzInfo(getCreaturePosition(cid)) then
doPlayerSendCancel(cid, "Você precisa estar em Protection Zone para resetar.") return true
elseif white and getCreatureSkullType(cid) == SKULL_WHITE then
doPlayerSendCancel(cid, "Você precisa estar sem White Skull para resetar.") return true
elseif red and getCreatureSkullType(cid) == SKULL_RED then
doPlayerSendCancel(cid, "Você precisa estar sem Red Skull para resetar.") return true
elseif black and getCreatureSkullType(cid) == SKULL_BLACK then
doPlayerSendCancel(cid, "Você precisa estar sem Black Skull para resetar.") return true
elseif battle and hasCondition(cid, CONDITION_INFIGHT) then
doPlayerSendCancel(cid, "Você precisa estar sem battle para resetar.") return true
elseif getPlayerLevel(cid) < level then
doPlayerSendCancel(cid, "Você precisa ter level "..level.." para resetar.") return true
elseif limite and getPlayerResets(cid) == limite then
doPlayerSendCancel(cid, "Você já está no limite de resets ("..limite..").") return true
elseif exhaustion.check(cid, exhastor) then
doPlayerSendCancel(cid, "Espere "..exhaustion.get(cid, exhastor).." segundos para usar o comando novamente.") return true
end
doPlayerReset(cid, 1)
doPlayerPopupFYI(cid, "Você resetou com sucesso. Você agora tem "..(getPlayerResets(cid)+1).." resets.")
exhaustion.set(cid, exhastor, time)
elseif words == "/addresets" then
local t = string.explode(param, ",")
if getPlayerGroupId(cid) < group then return false
elseif not t then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Parâmetros incorretos. Especifique o nome do player e opcionalmente a quantidade de resets.") return true
elseif not getPlayerByName(t[1]) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Player "..t[1].." não encontrado.") return true
elseif t[3] then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Parâmetros incorretos. Especifique apenas o nome do player e opcionalmente a quantidade de resets.") return true
end
doPlayerReset(getPlayerGUIDByName(t[1]), t[2] == nil and "1" or t[2])
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..(t[2] == nil and "1" or t[2]).." resets no player "..getCreatureName(getPlayerByName(t[1]))..". Agora el"..(getPlayerSex(getPlayerByName(t[1])) >= 1 and "e" or "a").." possui "..(getPlayerResets(getPlayerByName(t[1]))+(t[2] == nil and "1" or t[2])).." resets.")
doPlayerPopupFYI(getPlayerByName(t[1]), ""..getCreatureName(cid).." adicionou "..(t[2] == nil and "1" or t[2]).." resets em seu character. Você agora tem "..(getPlayerResets(getPlayerByName(t[1]))+(t[2] == nil and "1" or t[2])).." resets.")
end
return true
end
Desculpa a demora da resposta, estava estudando mais sobre uns futuros no meu server e vou ter que mudar esse comando reset. Como eu te disse anteriormente, vou precisar de um comando que gaste X Pontos do player, esses pontos se encontra em Players/rpontos na database.
Exemplo:
Jogador tem 10 RPONTOS, ele usara o comando:
!comprar axe
Ele ganha um royal axe, e cobrara 5 RPONTOS dele.
teria como me ajudar ?
E a respeito do reset acima, ainda esta dando erro.
Mais esquece, pois terei que mudar mesmo assim!
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

@@raynerjr substitua seu data/lib/050-function.lua por este:
--- Correct functions by 5mok3 --
function doPlayerGiveItem(cid, itemid, amount, subType)
local item = 0
if(isItemStackable(itemid)) then
item = doCreateItemEx(itemid, amount)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
else
for i = 1, amount do
item = doCreateItemEx(itemid, subType)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
end
return true
end
function doSetItemActionId(lols, actionid)
return doItemSetAttribute(lols, "aid", actionid)
end
function comparePos(pos1, pos2)
return (pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z)
end
function doPlayerGiveItemContainer(cid, containerid, itemid, amount, subType)
for i = 1, amount do
local container = doCreateItemEx(containerid, 1)
for x = 1, getContainerCapById(containerid) do
doAddContainerItem(container, itemid, subType)
end
if(doPlayerAddItemEx(cid, container, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
return true
end
function doPlayerTakeItem(cid, itemid, amount)
return getPlayerItemCount(cid, itemid) >= amount and doPlayerRemoveItem(cid, itemid, amount)
end
function doPlayerBuyItem(cid, itemid, count, cost, charges)
return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItem(cid, itemid, count, charges)
end
function doPlayerBuyItemContainer(cid, containerid, itemid, count, cost, charges)
return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItemContainer(cid, containerid, itemid, count, charges)
end
function doPlayerSellItem(cid, itemid, count, cost)
if(not doPlayerTakeItem(cid, itemid, count)) then
return false
end
if(not doPlayerAddMoney(cid, cost)) then
error('[doPlayerSellItem] Could not add money to: ' .. getPlayerName(cid) .. ' (' .. cost .. 'gp).')
end
return true
end
function doPlayerWithdrawMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end
local balance = getPlayerBalance(cid)
if(amount > balance or not doPlayerAddMoney(cid, amount)) then
return false
end
doPlayerSetBalance(cid, balance - amount)
return true
end
function doPlayerDepositMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end
if(not doPlayerRemoveMoney(cid, amount)) then
return false
end
doPlayerSetBalance(cid, getPlayerBalance(cid) + amount)
return true
end
function isPremium(cid)
return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigInfo('freePremium'))))
end
function getMonthDayEnding(day)
if(day == "01" or day == "21" or day == "31") then
return "st"
elseif(day == "02" or day == "22") then
return "nd"
elseif(day == "03" or day == "23") then
return "rd"
end
return "th"
end
function getMonthString(m)
return os.date("%B", os.time{year = 1970, month = m, day = 1})
end
function getArticle(str)
return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a"
end
function isNumber(str)
return tonumber(str) ~= nil
end
function doPlayerAddAddons(cid, addon)
for i = 0, table.maxn(maleOutfits) do
doPlayerAddOutfit(cid, maleOutfits[i], addon)
end
for i = 0, table.maxn(femaleOutfits) do
doPlayerAddOutfit(cid, femaleOutfits[i], addon)
end
end
function doPlayerWithdrawAllMoney(cid)
return doPlayerWithdrawMoney(cid, getPlayerBalance(cid))
end
function doPlayerDepositAllMoney(cid)
return doPlayerDepositMoney(cid, getPlayerMoney(cid))
end
function doPlayerTransferAllMoneyTo(cid, target)
return doPlayerTransferMoneyTo(cid, target, getPlayerBalance(cid))
end
function playerExists(name)
return getPlayerGUIDByName(name) ~= nil
end
function getTibiaTime()
local minutes, hours = getWorldTime(), 0
while (minutes > 60) do
hours = hours + 1
minutes = minutes - 60
end
return {hours = hours, minutes = minutes}
end
function doWriteLogFile(file, text)
local f = io.open(file, "a+")
if(not f) then
return false
end
f:write("[" .. os.date("%d/%m/%Y %H:%M:%S") .. "] " .. text .. "\n")
f:close()
return true
end
function getExperienceForLevel(lv)
lv = lv - 1
return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3
end
function doMutePlayer(cid, time)
local condition = createConditionObject(CONDITION_MUTED)
setConditionParam(condition, CONDITION_PARAM_TICKS, time * 1000)
return doAddCondition(cid, condition)
end
function getPlayerGroupName(cid)
return getGroupInfo(getPlayerGroupId(cid)).name
end
function getPlayerVocationName(cid)
return getVocationInfo(getPlayerVocation(cid)).name
end
function getPromotedVocation(vid)
return getVocationInfo(vid).promotedVocation
end
function doPlayerRemovePremiumDays(cid, days)
return doPlayerAddPremiumDays(cid, -days)
end
function getPlayerMasterPos(cid)
return getTownTemplePosition(getPlayerTown(cid))
end
function getHouseOwner(houseId)
return getHouseInfo(houseId).owner
end
function getHouseName(houseId)
return getHouseInfo(houseId).name
end
function getHouseEntry(houseId)
return getHouseInfo(houseId).entry
end
function getHouseRent(houseId)
return getHouseInfo(houseId).rent
end
function getHousePrice(houseId)
return getHouseInfo(houseId).price
end
function getHouseTown(houseId)
return getHouseInfo(houseId).town
end
function getHouseTilesCount(houseId)
return getHouseInfo(houseId).tiles
end
function getItemNameById(itemid)
return getItemDescriptionsById(itemid).name
end
function getItemPluralNameById(itemid)
return getItemDescriptionsById(itemid).plural
end
function getItemArticleById(itemid)
return getItemDescriptionsById(itemid).article
end
function getItemName(uid)
return getItemDescriptions(uid).name
end
function getItemPluralName(uid)
return getItemDescriptions(uid).plural
end
function getItemArticle(uid)
return getItemDescriptions(uid).article
end
function getItemText(uid)
return getItemDescriptions(uid).text
end
function getItemSpecialDescription(uid)
return getItemDescriptions(uid).special
end
function getItemWriter(uid)
return getItemDescriptions(uid).writer
end
function getItemDate(uid)
return getItemDescriptions(uid).date
end
function getTilePzInfo(pos)
return getTileInfo(pos).protection
end
function getTileZoneInfo(pos)
local tmp = getTileInfo(pos)
if(tmp.pvp) then
return 2
end
if(tmp.nopvp) then
return 1
end
return 0
end
function doShutdown()
return doSetGameState(GAMESTATE_SHUTDOWN)
end
function doSummonCreature(name, pos, displayError)
local displayError, cid = displayError or true, doCreateMonster(name, pos, displayError)
if(not cid) then
cid = doCreateNpc(name, pos, displayError)
end
return cid
end
function getOnlinePlayers()
local tmp = getPlayersOnline()
local players = {}
for i, cid in ipairs(tmp) do
table.insert(players, getCreatureName(cid))
end
return players
end
function getPlayerByName(name)
local cid = getCreatureByName(name)
return isPlayer(cid) and cid or nil
end
function isPlayer(cid)
return isCreature(cid) and cid >= AUTOID_PLAYERS and cid < AUTOID_MONSTERS
end
function isPlayerGhost(cid)
if(not isPlayer(cid)) then
return false
end
return getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) or getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN)
end
function isMonster(cid)
return isCreature(cid) and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS
end
function isNpc(cid)
return isCreature(cid) and cid >= AUTOID_NPCS
end
function doPlayerSetExperienceRate(cid, value)
return doPlayerSetRate(cid, SKILL__LEVEL, value)
end
function doPlayerSetMagicRate(cid, value)
return doPlayerSetRate(cid, SKILL__MAGLEVEL, value)
end
function doPlayerAddLevel(cid, amount, round)
local experience, level = 0, getPlayerLevel(cid)
if(amount > 0) then
experience = getExperienceForLevel(level + amount) - (round and getPlayerExperience(cid) or getExperienceForLevel(level))
else
experience = -((round and getPlayerExperience(cid) or getExperienceForLevel(level)) - getExperienceForLevel(level + amount))
end
return doPlayerAddExperience(cid, experience)
end
function doPlayerAddMagLevel(cid, amount)
for i = 1, amount do
doPlayerAddSpentMana(cid, (getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid)) / getConfigInfo('rateMagic'))
end
return true
end
function doPlayerAddSkill(cid, skill, amount, round)
if(skill == SKILL__LEVEL) then
return doPlayerAddLevel(cid, amount, round)
elseif(skill == SKILL__MAGLEVEL) then
return doPlayerAddMagLevel(cid, amount)
end
return doPlayerAddSkillTry(cid, skill, (getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill)) /
getConfigInfo('rateSkill'))
end
function getPartyLeader(cid)
local party = getPartyMembers(cid)
if(type(party) ~= 'table') then
return 0
end
return party[1]
end
function isInParty(cid)
return type(getPartyMembers(cid)) == 'table'
end
function isPrivateChannel(channelId)
return channelId >= CHANNEL_PRIVATE
end
function doPlayerResetIdleTime(cid)
return doPlayerSetIdleTime(cid, 0)
end
function doBroadcastMessage(text, class)
local class = class or MESSAGE_STATUS_WARNING
if(type(class) == 'string') then
local className = MESSAGE_TYPES[class]
if(className == nil) then
return false
end
class = className
elseif(class < MESSAGE_FIRST or class > MESSAGE_LAST) then
return false
end
local players = getPlayersOnline()
for _, pid in ipairs(players) do
doPlayerSendTextMessage(pid, class, text)
end
print("> Broadcasted message: \"" .. text .. "\".")
return true
end
function doPlayerBroadcastMessage(cid, text, class, checkFlag, ghost)
local checkFlag, ghost, class = checkFlag or true, ghost or false, class or TALKTYPE_BROADCAST
if(checkFlag and not getPlayerFlagValue(cid, PLAYERFLAG_CANBROADCAST)) then
return false
end
if(type(class) == 'string') then
local className = TALKTYPE_TYPES[class]
if(className == nil) then
return false
end
class = className
elseif(class < TALKTYPE_FIRST or class > TALKTYPE_LAST) then
return false
end
local players = getPlayersOnline()
for _, pid in ipairs(players) do
doCreatureSay(cid, text, class, ghost, pid)
end
print("> " .. getCreatureName(cid) .. " broadcasted message: \"" .. text .. "\".")
return true
end
function getBooleanFromString(input)
local tmp = type(input)
if(tmp == 'boolean') then
return input
end
if(tmp == 'number') then
return input > 0
end
local str = string.lower(tostring(input))
return (str == "yes" or str == "true" or (tonumber(str) ~= nil and tonumber(str) > 0))
end
function doCopyItem(item, attributes)
local attributes = attributes or false
local ret = doCreateItemEx(item.itemid, item.type)
if(attributes) then
if(item.actionid > 0) then
doItemSetAttribute(ret, "aid", item.actionid)
end
end
if(isContainer(item.uid)) then
for i = (getContainerSize(item.uid) - 1), 0, -1 do
local tmp = getContainerItem(item.uid, i)
if(tmp.itemid > 0) then
doAddContainerItemEx(ret, doCopyItem(tmp, true).uid)
end
end
end
return getThing(ret)
end
function doRemoveThing(uid)
if(isCreature(uid)) then
return doRemoveCreature(uid)
end
return doRemoveItem(uid)
end
function setAttackFormula(combat, type, minl, maxl, minm, maxm, min, max)
local min, max = min or 0, max or 0
return setCombatFormula(combat, type, -1, 0, -1, 0, minl, maxl, minm, maxm, -min, -max)
end
function setHealingFormula(combat, type, minl, maxl, minm, maxm, min, max)
local min, max = min or 0, max or 0
return setCombatFormula(combat, type, 1, 0, 1, 0, minl, maxl, minm, maxm, min, max)
end
function doChangeTypeItem(uid, subtype)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
local subtype = subtype or 1
return doTransformItem(thing.uid, thing.itemid, subtype)
end
function doSetItemText(uid, text, writer, date)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
doItemSetAttribute(uid, "text", text)
if(writer ~= nil) then
doItemSetAttribute(uid, "writer", tostring(writer))
if(date ~= nil) then
doItemSetAttribute(uid, "date", tonumber(date))
end
end
return true
end
function getFluidSourceType(itemid)
local item = getItemInfo(itemid)
return item and item.fluidSource or false
end
function getDepotId(uid)
return getItemAttribute(uid, "depotid") or false
end
function getItemDescriptions(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
local item = getItemInfo(thing.itemid)
return {
name = getItemAttribute(uid, "name") or item.name,
plural = getItemAttribute(uid, "pluralname") or item.plural,
article = getItemAttribute(uid, "article") or item.article,
special = getItemAttribute(uid, "description") or "",
text = getItemAttribute(uid, "text") or "",
writer = getItemAttribute(uid, "writer") or "",
date = getItemAttribute(uid, "date") or 0
}
end
function getItemWeightById(itemid, count, precision)
local item, count, precision = getItemInfo(itemid), count or 1, precision or false
if(not item) then
return false
end
if(count > 100) then
-- print a warning, as its impossible to have more than 100 stackable items without "cheating" the count
print('[Warning] getItemWeightById', 'Calculating weight for more than 100 items!')
end
local weight = item.weight * count
--[[if(precision) then
return weight
end
local t = string.explode(tostring(weight), ".")
if(table.maxn(t) == 2) then
return tonumber(t[1] .. "." .. string.sub(t[2], 1, 2))
end]]--
return weight
end
function getItemWeaponType(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
return getItemInfo(thing.itemid).weaponType
end
function getItemRWInfo(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
local item, flags = getItemInfo(thing.itemid), 0
if(item.readable) then
flags = 1
end
if(item.writable) then
flags = flags + 2
end
return flags
end
function getItemLevelDoor(itemid)
local item = getItemInfo(itemid)
return item and item.levelDoor or false
end
function isItemStackable(itemid)
local item = getItemInfo(itemid)
return item and item.stackable or false
end
function isItemRune(itemid)
local item = getItemInfo(itemid)
return item and item.clientCharges or false
end
function getPlayerPoints(cid)
local res = db.getResult("SELECT `rpontos` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";")
if(res:getID() == -1) then
return false
end
local ret = res:getDataInt("rpontos")
res:free()
return tonumber(ret)
end
function addPlayerPoints(cid, quant)
return db.query("UPDATE `players` SET `rpontos` = '" .. getPlayerPoints(cid) + quant .. "' WHERE `id` = " ..getPlayerGUID(cid) .. ";")
end
function removePlayerPoints(cid, quant)
return db.query("UPDATE `players` SET `rpontos` = '" .. getPlayerPoints(cid) - quant .. "' WHERE `id` = " .. getPlayerGUID(cid) .. ";")
end
function isItemDoor(itemid)
local item = getItemInfo(itemid)
return item and item.type == 5 or false
end
function isItemContainer(itemid)
local item = getItemInfo(itemid)
return item and item.group == 2 or false
end
function isItemFluidContainer(itemid)
local item = getItemInfo(itemid)
return item and item.group == 12 or false
end
function isItemMovable(itemid)
local item = getItemInfo(itemid)
return item and item.movable or false
end
function isCorpse(uid)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
local item = getItemInfo(thing.itemid)
return item and item.corpseType ~= 0 or false
end
function getContainerCapById(itemid)
local item = getItemInfo(itemid)
if(not item or item.group ~= 2) then
return false
end
return item.maxItems
end
function getMonsterAttackSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.attacks or false
end
function getMonsterHealingSpells(name)
local monster = getMonsterInfo(name)
return monster and monster.defenses or false
end
function getMonsterLootList(name)
local monster = getMonsterInfo(name)
return monster and monster.loot or false
end
function getMonsterSummonList(name)
local monster = getMonsterInfo(name)
return monster and monster.summons or false
end
function getCreaturesInRange(position, radiusx, radiusy, showMonsters, showPlayers, showSummons)
local creaturesList = {}
for x = -radiusx, radiusx do
for y = -radiusy, radiusy do
if not (x == 0 and y == 0) then
local creature = getTopCreature({x = position.x+x, y = position.y+y, z = position.z})
if (creature.type == 1 and showPlayers) or (creature.type == 2 and showMonsters and (not showSummons or (showSummons and
getCreatureMaster(creature.uid) == (creature.uid)))) then
table.insert(creaturesList, creature.uid)
end
end
end
end
local creature = getTopCreature(position)
if (creature.type == 1 and showPlayers) or (creature.type == 2 and showMonsters and (not showSummons or (showSummons and getCreatureMaster(creature.uid) ==
(creature.uid)))) then
if not(table.find(creaturesList, creature.uid)) then
table.insert(creaturesList, creature.uid)
end
end
return creaturesList
end
Em data/talkactions/talkactions.xml adicione a tag:
<talkaction words="!comprar;/comprar" event="script" value="comprar.lua"/>
Agora em data/talkactions/scripts crie o arquivo comprar.lua com o seguinte conteúdo:
local items = {
["axe"] = {id = 2400, qtd = 1, pontos = 3},
["sword"] = {id = 2400, qtd = 1, pontos = 4},
["club"] = {id = 2400, qtd = 1, pontos = 1}
}
function onSay(cid, words, param)
local param = string.lower(param)
if param == "" then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Command requires param!")
return false
end
local item = items[param]
if item then
if getPlayerPoints(cid) >= item.pontos then
removePlayerPoints(cid, item.pontos)
doPlayerAddItem(cid, item.id, item.qtd)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce comprou um " .. getItemNameById(item.id) .. ".")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_GIFT_WRAPS)
return true
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Desculpe! Este item custa " .. item.pontos .. " pontos.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Item nao encontrado.")
end
return false
end
Configurando:
["axe"] = palavra que o cara vai usar para comprar
id = 2400 -- id do item
qtd = 1 -- quantidade do item
pontos = 3 -- valor em pontos
Só uma dúvida!
Na minha database os pontos estão com o nome de "rpontos". Quando usar o comando ele vai gastar esses da database né ?
Editado Junho 24 por raynerjr
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

Só uma dúvida!
Na minha database os pontos estão com o nome de "rpontos". Quando usar o comando ele vai gastar esses da database né ?
Sim, isso mesmo, da tabela "players".
Perfeito! Namoral! Maravilhoso!
Teria como o nesse comando o jogador comprar premium account também ?
!comprar premium
custo: 3 pontos = 1 dia
tem como isso ?
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

Perfeito! Namoral! Maravilhoso!
Teria como o nesse comando o jogador comprar premium account também ?
!comprar premium
custo: 3 pontos = 1 dia
tem como isso ?
local config = {
dias = 30, -- dias
pontos = 3 -- pontos
}
function onSay(cid, words, param, channel)
if getPlayerPoints(cid) >= config.pontos then
removePlayerPoints(cid, config.pontos)
doPlayerAddPremiumDays(cid, config.dias)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce comprou " .. config.dias .. " dias de Premium Account.")
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_GIFT_WRAPS)
return true
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Desculpe! A Premium account custa " .. config.pontos .. " pontos.")
end
return false
end
Comando para checar quantos pontos o jogador tem ainda.
exemplo.
!checkpoints
Ultimo favor que peço!
kkkkkkk
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

Comando para checar quantos pontos o jogador tem ainda.
exemplo.
!checkpoints
Ultimo favor que peço!
kkkkkkk
function onSay(cid, words, param, channel) local pontos = getPlayerPoints(cid) if pontos > 0 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce tem " .. pontos .. (pontos == 1 and "ponto" or "pontos") .. ".") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce nao possui pontos.") end return true end
Depois de muito esforço!
Parabéns XTibia por esse grande membro da coordenação, ele realmente sabe o que é ajudar os outros! Merece até uma conquista nova!
@BrunoMinervinho Amigo não sei nem como lhe agradecer, lutamos e lutamos para ter arrumar, e hoje vencemos! Não como esperávamos, mais de qualquer formar para min foi uma guerra vencida! Esses comandos irão fazer a mesma função que eu queria antes, mais agora são feitos por dentro do jogo!
Obrigado pela atenção e esforço de vontade!
Parabéns!
REP+
Resolvido
info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino
O erro foi meu, já atualizei, desculpa...
Tenta novamente.