Ir para conteúdo
  • 0

RESETS ? Ajudinha


raynerjr

Pergunta

Preciso de uma ajuda!

Preciso que o seguinte script de reset abaixo adicione os seguintes comandos após o jogador usar os comando !reset;

 

1º Remova todo HP / MP;

2º Adicione HPMAX / MPMAX 185 HP - 35 MP;

3º Adicione em accounts da database 1 ponto em guild_points;

4º Adicione em players da database 1 ponto em reset;

 

Obs: tudo da database do myphpadmin!

 

Script:

local config = {
    backToLevel = 8,
    redskull = false, -- need to be without redskull to reset?
    battle = true, -- need to be without battle to reset?
    pz = false, -- need to be in protect zone to reset?
    stages = {
        {resets = 4, level = 350, premium = 330},
        {resets = 9, level = 355, premium = 340},
        {resets = 14, level = 360, premium = 355},
        {resets = 19, level = 365, premium = 360},
        {resets = 24, level = 380, premium = 370},
        {resets = 29, level = 390, premium = 380},
        {resets = 34, level = 410, premium = 400},
        {resets = 39, level = 430, premium = 420},
        {resets = 44, level = 450, premium = 440},
        {resets = 49, level = 480, premium = 470},
        {resets = 54, level = 510, premium = 500},
        {resets = 59, level = 550, premium = 540},
        {resets = 64, level = 590, premium = 580},
        {resets = 69, level = 630, premium = 620},
        {resets = 74, level = 680, premium = 670},
        {resets = 79, level = 730, premium = 720},
        {resets = 84, level = 780, premium = 770},
        {resets = 89, level = 860, premium = 840},
        {resets = 94, level = 930, premium = 910},
        {resets = 2^1024, level = 1010, premium = 990}
    }
}

function onSay(cid, words, param)
    local function getPlayerResets(cid)
        local resets = getPlayerStorageValue(cid, 500)
        return resets < 0 and 0 or resets
    end

    local function doPlayerAddResets(cid, count)
        setPlayerStorageValue(cid, 500, getPlayerResets(cid) + count)
    end

    if config.redskull and getCreatureSkullType(cid) == 4 then
        return doPlayerSendCancel(cid, "You need to be without red skull to reset.")
    elseif config.pz and not getTilePzInfo(getCreaturePosition(cid)) then
        return doPlayerSendCancel(cid, "You need to be in protection zone to reset.")
    elseif config.battle and getCreatureCondition(cid, CONDITION_INFIGHT) then
        return doPlayerSendCancel(cid, "You need to be without battle to reset.")
    end

    local resetLevel = 0
    for x, y in ipairs(config.stages) do
        if getPlayerResets(cid) <= y.resets then
            resetLevel = isPremium(cid) and y.premium or y.level
            break
        end
    end

    if getPlayerLevel(cid) < resetLevel then
        return doPlayerSendCancel(cid, "You need level " .. resetLevel .. " or more to reset.")
    end

    doPlayerAddResets(cid, 1)
    local healthMax, manaMax = getCreatureMaxHealth(cid), getCreatureMaxMana(cid)
    doPlayerAddLevel(cid, -(getPlayerLevel(cid) - config.backToLevel))
    setCreatureMaxHealth(cid, healthMax)
    setCreatureMaxMana(cid, manaMax)
    doSendMagicEffect(getCreaturePosition(cid), CONST_ME_FIREWORK_RED)
    doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Now you have " .. getPlayerResets(cid) .. " " .. (getPlayerResets(cid) == 1 and "reset" or "resets") .. ".")
    return true
end

Podem me ajudar ?

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

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

 

Link para o comentário
Compartilhar em outros sites

  • 0

Cara nos é muito guerreiro! isso que chamo de ajuda xTibia positive.gif

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

Erro:
2e2fd228409a5e0f7f1632dbf433f10d934436e5
Link para o comentário
Compartilhar em outros sites

  • 0

@@raynerjr

 

 

-- 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

 

Link para o comentário
Compartilhar em outros sites

  • 0

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!

Link para o comentário
Compartilhar em outros sites

  • 0

@@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

Link para o comentário
Compartilhar em outros sites

  • 0

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 por raynerjr
Link para o comentário
Compartilhar em outros sites

  • 0

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".

Link para o comentário
Compartilhar em outros sites

  • 0

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 ?

Link para o comentário
Compartilhar em outros sites

  • 0

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
Link para o comentário
Compartilhar em outros sites

  • 0

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
Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...