Aurolio
New Member
- Joined
- Aug 26, 2018
- Messages
- 45
- Reaction score
- 3
I am using a rebirth system for my ots. It is on TFS 0.4 Tibia 8.6.
The script for the npc is here:
And here is the code for my onLook function:
The problem that occured in here is that the count of rebirths start from the second rebirth. What I mean by that is:
1. I am going to the npc with new character to do my first rebirth. Rebirth is performed successfully. The problem is that the rebirth count is = 0, so when I double click on myself it says "You have 0 rebirths.". Adding the stats etc works perfectly fine.
2. Doing the rebirth again what means that it is my second rebirth, everything goes successfully. The count is now = 1, but it should be = 2. Double click on myself, it says "You have 1 rebirth.".
Anyone know how to solve this problem?
The script for the npc is here:
Code:
local config = {
price = 0, -- Price of first rebirth
priceIncrease = 0, -- Works as 'price' + current rebirths * priceIncrease.
rebirthLevel = 450, -- Level for first rebirth.
rebirthIncrease = 0, -- Works as 'rebirthLevel' + current rebirths * rebirthIncrease.
maxRebirths = 1000, -- Number of times a player can rebirth.
level = 1000, -- The level the player is set to apon rebirth.
healthPercent = 1.00, -- 1.00 = 100%.
health = 100, -- Only used if 'healthPercent' = 0.
manaPercent = 1.00, -- 1.00 = 100%.
mana = 100, -- Only used if 'manaPercent' = 0.
keepSkills = true, -- Wether players keep skills and level apon rebirth.
skillLevel = 10, -- Only used if 'keepSkills' = false.
magicLevel = 0, -- Only used if 'keepSkills' = false.
capacity = 10000, -- The capacity players are set to apon rebirth.
templePos = {x = 2000, y = 2000, z = 7}, -- The place where players reset to should there town id return 0.
storage = 85987 -- Player storage rebirth count is kept on.
}
local focuses = {}
local function isFocused(cid)
for i, v in pairs(focuses) do
if(v == cid) then
return true
end
end
return false
end
local function addFocus(cid)
if(not isFocused(cid)) then
table.insert(focuses, cid)
end
end
local function removeFocus(cid)
for i, v in pairs(focuses) do
if(v == cid) then
table.remove(focuses, i)
break
end
end
end
local function lookAtFocus()
for i, v in pairs(focuses) do
if(isPlayer(v)) then
doNpcSetCreatureFocus(v)
return
end
end
doNpcSetCreatureFocus(0)
end
function onCreatureDisappear(cid)
if(isFocused(cid)) then
selfSay("Goodbye.")
removeFocus(cid)
end
end
function onCreatureSay(cid, type, msg)
if((msg == "hi") and not (isFocused(cid))) then
selfSay("Welcome, ".. getCreatureName(cid) ..".", cid, true)
selfSay("I can {rebirth} you!", cid)
addFocus(cid)
status = 1
elseif((isFocused(cid)) and (msg == "rebirth") and (status == 1)) then
if (getCreatureStorage(cid, config.storage) < config.maxRebirths) then
storage = getCreatureStorage(cid, config.storage)
rebirthLevel = config.rebirthLevel + (config.rebirthIncrease * storage)
if (getPlayerLevel(cid) >= rebirthLevel) then
money = config.price + (config.priceIncrease * storage)
if (getPlayerMoney(cid) >= money) then
selfSay("I can rebirth you for " .. money .. " gold.", cid)
selfSay("Do you want me to rebirth you?", cid)
status = 2
else
selfSay("You need at least " .. money .. " gold before you can rebirth.", cid)
status = 1
end
else
selfSay("You need to be at least level " .. rebirthLevel .. " before you can rebirth.", cid)
status = 1
end
else
selfSay("It seems you can not rebirth anymore.", cid)
status = 1
end
elseif((isFocused(cid)) and (msg == "yes") and (status == 2)) then
selfSay("Ok then i will rebirth you.", cid)
selfSay("You will now be logged out.", cid)
doPlayerRemoveMoney(cid, money)
addEvent(doRebirthPlayer, 2000, {cid=cid})
removeFocus(cid)
elseif((isFocused(cid)) and (msg == "no") and (status == 2)) then
selfSay("Maybe one day you will wise up and change your mind!", cid)
status = 1
elseif((isFocused(cid)) and (msg == "bye" or msg == "goodbye" or msg == "cya")) then
selfSay("Goodbye!", cid, true)
removeFocus(cid)
end
end
function onPlayerCloseChannel(cid)
if(isFocused(cid)) then
selfSay("Goodbye.")
removeFocus(cid)
end
end
function onThink()
for i, focus in pairs(focuses) do
if(not isCreature(focus)) then
removeFocus(focus)
else
local distance = getDistanceTo(focus) or -1
if((distance > 4) or (distance == -1)) then
selfSay("Goodbye.")
removeFocus(focus)
end
end
end
lookAtFocus()
end
function doRebirthPlayer(cid)
cid = cid.cid
if (cid == nil) then
return true
end
local guid = getPlayerGUID(cid)
if (config.healthPercent > 0) then
health = getCreatureMaxHealth(cid) * config.healthPercent
else
health = config.health
end
if (config.manaPercent > 0) then
mana = getCreatureMaxMana(cid) * config.manaPercent
else
mana = config.mana
end
if (getPlayerTown(cid) > 0) then
pos = getTownTemplePosition(getPlayerTown(cid))
else
pos = config.templePos
end
doCreatureSetStorage(cid, config.storage, getCreatureStorage(cid, config.storage) + 1)
doRemoveCreature(cid, true)
db.executeQuery("UPDATE `players` SET level = " .. config.level .. " WHERE id = " .. guid .. ";")
db.executeQuery("UPDATE `players` SET cap = " .. config.capacity .. " WHERE id = " .. guid .. ";")
db.executeQuery("UPDATE `players` SET health = " .. health .. " WHERE id = " .. guid .. ";")
db.executeQuery("UPDATE `players` SET healthmax = " .. health .. " WHERE id = " .. guid .. ";")
db.executeQuery("UPDATE `players` SET mana = " .. mana .. " WHERE id = " .. guid .. ";")
db.executeQuery("UPDATE `players` SET manamax = " .. mana .. " WHERE id = " .. guid .. ";")
db.executeQuery("UPDATE `players` SET posx = " .. pos.x .. " WHERE id = " .. guid .. ";")
db.executeQuery("UPDATE `players` SET posy = " .. pos.y .. " WHERE id = " .. guid .. ";")
db.executeQuery("UPDATE `players` SET posz = " .. pos.z .. " WHERE id = " .. guid .. ";")
if (not config.keepSkills) then
db.executeQuery("UPDATE `players` SET maglevel = " .. config.magicLevel .. " WHERE id = " .. guid .. ";")
db.executeQuery("UPDATE `player_skills` SET value = " .. config.skillLevel .. " WHERE id = " .. guid .. ";")
end
return true
end
And here is the code for my onLook function:
Code:
function onLook(cid, thing, position, lookDistance)
if (isPlayer(thing.uid) and thing.uid ~= cid and getCreatureStorage(thing.uid, 85987) ~= -1) then
local sex = getPlayerSex(thing.uid)
local message = "You see " .. getPlayerName(thing.uid) .. " (Level " .. getPlayerLevel(thing.uid) .. ")."
if(getPlayerFlagValue(thing.uid, PLAYERFLAG_SHOWGROUPINSTEADOFVOCATION)) then
message = message .. " " .. (sex == PLAYERSEX_FEMALE and "She" or "He") .. " is a " .. getPlayerGroupName(thing.uid) .. "."
elseif(getPlayerVocation(thing.uid) ~= 0) then
message = message .. " " .. (sex == PLAYERSEX_FEMALE and "She" or "He") .. " is a " .. getPlayerVocationName(thing.uid):lower() .. "."
else
message = message .. " " .. (sex == PLAYERSEX_FEMALE and "She" or "He") .. " has no vocation."
end
if(getPlayerNameByGUID(getPlayerPartner(thing.uid), false, false) ~= nil) then
message = message .. " " .. (sex == PLAYERSEX_FEMALE and "She" or "He") .. " is " .. (sex == PLAYERSEX_FEMALE and "wife" or "husband") .. " of " .. getPlayerNameByGUID(getPlayerPartner(thing.uid)) .. "."
end
if(getPlayerGuildId(thing.uid) > 0) then
message = message .. " " .. (sex == PLAYERSEX_FEMALE and "She" or "He") .. " is " .. (getPlayerGuildRank(thing.uid) == "" and "a member" or getPlayerGuildRank(thing.uid)) .. " of the " .. getPlayerGuildName(thing.uid)
message = getPlayerGuildNick(thing.uid) ~= "" and message .. " (" .. getPlayerGuildNick(thing.uid) .. ")." or message .. "."
end
if(getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEECREATUREDETAILS)) then
message = message .. "\nHealth: [" .. getCreatureHealth(thing.uid) .. " / " .. getCreatureMaxHealth(thing.uid) .. "], Mana: [" .. getCreatureMana(thing.uid) .. " / " .. getCreatureMaxMana(thing.uid) .. "]."
end
if(getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEEPOSITION)) then
message = message .. "\nPosition: [X: " .. position.x .. "] [Y: " .. position.y .. "] [Z: " .. position.z .. "]."
end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, message .. (sex == PLAYERSEX_FEMALE and " \nShe" or " \nHe") .. " has " .. (getCreatureStorage(thing.uid, 85987) == -1 and "0" or getCreatureStorage(thing.uid, 85987)) .. " " .. (math.abs(getCreatureStorage(thing.uid, 85987)) == 1 and "rebirth." or "rebirths."))
return false
elseif thing.uid == cid then
local message = "You see yourself."
if(getPlayerFlagValue(cid, PLAYERFLAG_SHOWGROUPINSTEADOFVOCATION)) then
message = message .. " You are " .. getPlayerGroupName(cid) .. "."
elseif(getPlayerVocation(cid) ~= 0) then
message = message .. " You are a " .. getPlayerVocationName(cid):lower() .. "."
else
message = message .. " You have no vocation."
end
if(getPlayerNameByGUID(getPlayerPartner(cid), false, false) ~= nil) then
message = message .. " You are " .. (getPlayerSex(cid) == PLAYERSEX_FEMALE and "wife" or "husband") .. " of " .. getPlayerNameByGUID(getPlayerPartner(cid)) .. "."
end
if(getPlayerGuildId(cid) > 0) then
message = message .. " You are " .. (getPlayerGuildRank(cid) == "" and "a member" or getPlayerGuildRank(cid)) .. " of the " .. getPlayerGuildName(cid)
message = getPlayerGuildNick(cid) ~= "" and message .. " (" .. getPlayerGuildNick(cid) .. ")." or message .. "."
end
if(getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEECREATUREDETAILS)) then
message = message .. "\nHealth: [" .. getCreatureHealth(cid) .. " / " .. getCreatureMaxHealth(cid) .. "], Mana: [" .. getCreatureMana(cid) .. " / " .. getCreatureMaxMana(cid) .. "]."
end
if(getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEEPOSITION)) then
message = message .. "\nPosition: [X: " .. position.x .. "] [Y: " .. position.y .. "] [Z: " .. position.z .. "]."
end
return false, doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, message .. " \nYou have " .. (getCreatureStorage(cid, 85987) == -1 and "0" or getCreatureStorage(cid, 85987)) .. " " .. (getCreatureStorage(cid, 85987) == 1 and "rebirth." or "rebirths."))
end
return true
end
The problem that occured in here is that the count of rebirths start from the second rebirth. What I mean by that is:
1. I am going to the npc with new character to do my first rebirth. Rebirth is performed successfully. The problem is that the rebirth count is = 0, so when I double click on myself it says "You have 0 rebirths.". Adding the stats etc works perfectly fine.
2. Doing the rebirth again what means that it is my second rebirth, everything goes successfully. The count is now = 1, but it should be = 2. Double click on myself, it says "You have 1 rebirth.".
Anyone know how to solve this problem?