RevScript TalkAction Reset System !reset

Alex

Administrator
Dev
Messages
2,368
Points
707
Hola a todos,

Aqui les traigo el Script por Dzfeoo y LeoTK para Resetear usando el comando, !reset

Nos iremos en data/scripts/talkactions/player e insertaremos el siguiente código:

local resetSys = TalkAction("!reset")

local config = {
backToLevel = 8,
redskull = true, -- need to be without redskull to reset?
battle = true, -- need to be without battle to reset?
pz = true, -- 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 resetSys.onSay(player, words, param)
local function getExperienceForLevel(lv)
lv = lv - 1
return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3
end
local function getPlayerResets()
local resets = player:getStorageValue(500)
return resets < 0 and 0 or resets
end

local function doPlayerAddResets(count)
player:setStorageValue(500, getPlayerResets() + count)
end

if config.redskull and player:getSkull() == 4 then
player:sendCancelMessage("You need to be without red skull to reset.")
return false
elseif config.pz and not getTilePzInfo(player:getPosition()) then
player:sendCancelMessage("You need to be in protection zone to reset.")
return false
elseif config.battle and player:getCondition(CONDITION_INFIGHT) then
player:sendCancelMessage("You need to be without battle to reset.")
return false
end

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

if getPlayerLevel(player) < resetLevel then
player:sendCancelMessage("You need level " .. resetLevel .. " or more to reset.")
return false
end

doPlayerAddResets(1)
local healthMax, manaMax, health, mana = player:getMaxHealth(), player:getMaxMana(), player:getHealth(), player:getMana()
player:removeExperience(getExperienceForLevel(player:getLevel()) - getExperienceForLevel(config.backToLevel))
player:setMaxHealth(healthMax)
player:setMaxMana(manaMax)
player:addHealth(health)
player:addMana(mana)
player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED)
player:sendTextMessage(MESSAGE_INFO_DESCR, "Now you have " .. getPlayerResets() .. " " .. (getPlayerResets() == 1 and "reset" or "resets") .. ".")
return false
end

resetSys:register()
 
ola buenas noches como puedo aser para q no te deje toda lavida y mana q solo te de un porsentage muy minimo pero muy minimo
 
ola buenas noches como puedo aser para q no te deje toda lavida y mana q solo te de un porsentage muy minimo pero muy minimo
Puedes hacer una variable para definir la vida y poner la vida base más un valor flexible que sería múltiplo por los reinicios.
Hice una adición al guión de arriba.
local resetSys = TalkAction("!reset")
local config = {
backToLevel = 8,
redskull = true, -- need to be without redskull to reset?
battle = true, -- need to be without battle to reset?
pz = true, -- 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 resetSys.onSay(player, words, param)
local function getExperienceForLevel(lv)
lv = lv - 1
return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3
end
local function getPlayerResets()
local resets = player:getStorageValue(500)
return resets < 0 and 0 or resets
end

local function doPlayerAddResets(count)
player:setStorageValue(500, getPlayerResets() + count)
end

if config.redskull and player:getSkull() == 4 then
player:sendCancelMessage("You need to be without red skull to reset.")
return false
elseif config.pz and not getTilePzInfo(player:getPosition()) then
player:sendCancelMessage("You need to be in protection zone to reset.")
return false
elseif config.battle and player:getCondition(CONDITION_INFIGHT) then
player:sendCancelMessage("You need to be without battle to reset.")
return false
end

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

if getPlayerLevel(player) < resetLevel then
player:sendCancelMessage("You need level " .. resetLevel .. " or more to reset.")
return false
end

doPlayerAddResets(1)

local healthMaxBase = 185 -- Vida inicial nivel 8
local healthMaxBonus = 50 -- Vida extra por reinicio
local ManaMAxBase = 90 -- Mana inicial nivel 8
local ManaMAxBonus = 25 -- Mana extra por reinicio
local h = healthMaxBase + (healthMaxBonus * getPlayerResets())
local m = ManaMAxBase + (ManaMAxBonus * getPlayerResets())
local healthMax, manaMax, health, mana = player:getMaxHealth(), player:getMaxMana(), player:getHealth(), player:getMana()
player:removeExperience(getExperienceForLevel(player:getLevel()) - getExperienceForLevel(config.backToLevel))
player:setMaxHealth(h)
player:setMaxMana(m)
player:addHealth(h)
player:addMana(m)
player:getPosition():sendMagicEffect(CONST_ME_FIREWORK_RED)
player:sendTextMessage(MESSAGE_INFO_DESCR, "Now you have " .. getPlayerResets() .. " " .. (getPlayerResets() == 1 and "reset" or "resets") .. ".")
return false
end

resetSys:register()

Como no he probado el script, no sé si funciona al agregar esta mecánica, es posible que no sirva de nada. Tengo un script de reinicio que hice por mi cuenta, pero es mucho más complejo, se deben hacer otras cosas en la base de datos y también declarar el almacenamiento en el reproductor.

Si este script funciona, el ajuste que hice permitirá una ganancia gradual con cada reinicio, se puede ajustar una ganancia definida de vida de 50 y maná de 25 en la variable
 
Si quieres, echa un vistazo al script de talkactions.

local resets = TalkAction("!resetar")
function resets.onSay(player, words, param)
local ResetsAtualPlayer = player:getStorageValue(Storage.STORAGE_RESET)
local resets1a10 = math.max(50 * ResetsAtualPlayer, 50)
local resets11a20 = math.max(500 + ((ResetsAtualPlayer - 10) * 100), 100)
local resets21mais = math.max(1500 + ((ResetsAtualPlayer - 20) * 200), 200)
if player:getSkull() ~= 3 and ResetsAtualPlayer <= 9 and player:getLevel() >= resets1a10 then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Voce resetou.")
countReset = player:getStorageValue(Storage.STORAGE_RESET) + 1
player:teleportTo(player:getTown():getTemplePosition(), true)
player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
local target = player
local name = player:getName()
player:setStorageValue(Storage.STORAGE_RESET, countReset)
local contagemReset = player:getStorageValue(Storage.STORAGE_RESET)
local multiplocap = player:getStorageValue(Storage.STORAGE_RESET) * 100
local multiplohpmp = player:getStorageValue(Storage.STORAGE_RESET) * 50
local capatual = 470 + multiplocap
local life = 185 + multiplohpmp
local mana = 90 + multiplohpmp
local criticalchance = math.min(contagemReset * 0.25, 10)
local criticalhit = math.min(contagemReset * 0.25, 10)
local lifeleech = math.min(contagemReset * 25, 1000)
local lifeleechchance = 100
local manaleech = math.min(contagemReset * 25, 1000)
local manaleechchance = 100
target:remove()
db.query("UPDATE `players` SET `stamina` = 2520 WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `offlinetraining_time` = 43200 WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `level` = 8 WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `health` = " .. life .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `mana` = " .. mana .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `healthmax` = " .. life .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `manamax` = " .. mana .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `cap` = " .. capatual .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `reset` = " .. contagemReset .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_life_leech_amount` = " .. lifeleech .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_life_leech_chance` = " .. lifeleechchance .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_mana_leech_amount` = " .. manaleech .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_mana_leech_chance` = " .. manaleechchance .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_critical_hit_chance` = " .. criticalchance .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_critical_hit_damage` = " .. criticalhit .. " WHERE `name` = '" .. name .. "';")
elseif player:getSkull() ~= 3 and ResetsAtualPlayer >= 10 and ResetsAtualPlayer <= 19 and player:getLevel() >= resets11a20 then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Voce resetou.")
countReset = player:getStorageValue(Storage.STORAGE_RESET) + 1
countReset2 = player:getStorageValue(112554) + 1
player:setStorageValue(112554, countReset2)
player:teleportTo(player:getTown():getTemplePosition(), true)
player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
local target = player
local name = player:getName()
player:setStorageValue(Storage.STORAGE_RESET, countReset)
player:setStorageValue(112554, countReset2)
local contagemReset = player:getStorageValue(Storage.STORAGE_RESET)
local multiplocap = player:getStorageValue(Storage.STORAGE_RESET) * 200
local multiplohpmp = player:getStorageValue(Storage.STORAGE_RESET) * 100
local contagemReset2 = player:getStorageValue(Storage.STORAGE_RESET)
local capatual = 470 + multiplocap
local life = 185 + multiplohpmp
local mana = 90 + multiplohpmp
local criticalchance = math.min(contagemReset * 0.25, 10)
local criticalhit = math.min(contagemReset * 0.25, 10)
local lifeleech = math.min(contagemReset * 25, 1000)
local lifeleechchance = 100
local manaleech = math.min(contagemReset * 25, 1000)
local manaleechchance = 100
target:remove()
db.query("UPDATE `players` SET `stamina` = 2520 WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `offlinetraining_time` = 43200 WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `level` = 8 WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `health` = " .. life .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `mana` = " .. mana .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `healthmax` = " .. life .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `manamax` = " .. mana .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `cap` = " .. capatual .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `reset` = " .. contagemReset .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_life_leech_amount` = " .. lifeleech .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_life_leech_chance` = " .. lifeleechchance .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_mana_leech_amount` = " .. manaleech .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_mana_leech_chance` = " .. manaleechchance .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_critical_hit_chance` = " .. criticalchance .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_critical_hit_damage` = " .. criticalhit .. " WHERE `name` = '" .. name .. "';")
elseif player:getSkull() ~= 3 and ResetsAtualPlayer >= 20 and player:getLevel() >= resets21mais then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Voce resetou.")
countReset = player:getStorageValue(Storage.STORAGE_RESET) + 1
countReset3 = player:getStorageValue(112555) + 1
player:setStorageValue(112555, countReset3)
player:teleportTo(player:getTown():getTemplePosition(), true)
player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
local target = player
local name = player:getName()
player:setStorageValue(Storage.STORAGE_RESET, countReset)
player:setStorageValue(112555, countReset3)
local contagemReset = player:getStorageValue(Storage.STORAGE_RESET)
local multiplocap = player:getStorageValue(Storage.STORAGE_RESET) * 500
local multiplohpmp = player:getStorageValue(Storage.STORAGE_RESET) * 800
local capatual = 470 + multiplocap
local life = 185 + multiplohpmp
local mana = 90 + multiplohpmp
local criticalchance = math.min(contagemReset * 0.25, 10)
local criticalhit = math.min(contagemReset * 0.25, 10)
local lifeleech = math.min(contagemReset * 25, 1000)
local lifeleechchance = 100
local manaleech = math.min(contagemReset * 25, 1000)
local manaleechchance = 100
target:remove()
db.query("UPDATE `players` SET `stamina` = 2520 WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `offlinetraining_time` = 43200 WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `level` = 8 WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `health` = " .. life .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `mana` = " .. mana .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `healthmax` = " .. life .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `manamax` = " .. mana .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `cap` = " .. capatual .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `reset` = " .. contagemReset .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_life_leech_amount` = " .. lifeleech .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_life_leech_chance` = " .. lifeleechchance .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_mana_leech_amount` = " .. manaleech .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_mana_leech_chance` = " .. manaleechchance .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_critical_hit_chance` = " .. criticalchance .. " WHERE `name` = '" .. name .. "';")
db.query("UPDATE `players` SET `skill_critical_hit_damage` = " .. criticalhit .. " WHERE `name` = '" .. name .. "';")
elseif player:getSkull() ~= 3 and ResetsAtualPlayer <= 10 and player:getLevel() <= resets1a10 then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Voce ainda nao tem level suficiente para reset e necessario level: " .. resets1a10 .. " ou mais.")
elseif player:getSkull() ~= 3 and ResetsAtualPlayer >= 11 and ResetsAtualPlayer <= 20 and player:getLevel() <= resets11a20 then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Voce ainda nao tem level suficiente para reset e necessario level: " .. resets11a20 .. " ou mais.")
elseif player:getSkull() ~= 3 and ResetsAtualPlayer >= 21 and player:getLevel() <= resets21mais then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Voce ainda nao tem level suficiente para reset e necessario level: " .. resets21mais .. " ou mais.")
return false
end
end
resets:register()
 
Se realiza en etapas y modifica muchas cosas según los datos de este script, pero hay otras partes; estudiar este script puede ayudarte a tener una idea.
 

Tibia Server Lists

#1 FEATURED US Ultron OT 1,627 / 5,000Online EXPStages PROTO8.6 ENGINEUltron OT RANK PTS5.9 +100% VOTES0 #2 FEATURED US Nefera 158 / 0Online EXPx1 PROTO15.20 ENGINECrystal Server RANK PTS5.1 +100% VOTES0 #3 FEATURED ES Deixis 0 / 0Offline EXPStages PROTO1098 ENGINETFS RANK PTS3.7 +100% VOTES1 #4 FEATURED ES Maeli 9 / 150Online EXPx10 PROTO10.98 ENGINETFS 1.4.2 RANK PTS3.7 +100% VOTES0 #5 MX Marlboro War 46 / 300Online EXP999 PROTO8.6 ENGINETFS 0.3.7 RANK PTS5.5 -33% VOTES0 #6 BR Tibinha YurOts 18 / 150Online EXPStages PROTO7.4 ENGINEYurOTS 1.5 RANK PTS5.2 -14% VOTES0 #7 US Halera 2 / 0Online EXPStages PROTO10.98 ENGINETFS 1.4.2 RANK PTS4.9 -83% VOTES0 #8 BR Exordion Legacy 61 / 2,000Online EXPx2 PROTO7.72 ENGINEExordion RANK PTS4.9 +100% VOTES0 #9 PL Lubelski 3 / 1,000Online EXP200 PROTO7.6 ENGINELubelskiOTS 2.56.0 RANK PTS4.6 -15% VOTES0 #10 DE DBU Online 0 / 400Online EXP11 PROTO8.6 ENGINETFS 1.0 RANK PTS4.3 +100% VOTES0 #11 PL ReWar 0 / 2,000Online EXPcustom PROTO8.6 ENGINEOther RANK PTS4.3 0% VOTES0 #12 PL Velesta 0 / 1,000Offline EXP20 PROTO8.0 ENGINETFS 1.4.2 RANK PTS4.3 -98% VOTES0 #13 ES JustRL FreeTC 1530 16 / 250Online EXPx2 PROTO15.30 ENGINECrystal Server RANK PTS4.3 +100% VOTES0 #14 ES Farlia Global 2026 0 / 333Offline EXPx5 PROTO15.25 ENGINEFarliaServ 1.525 RANK PTS3.9 -22% VOTES0 #15 SE MortalisOT Custom 0 / 500Offline EXP100x -1.2x PROTO10.98 ENGINEMortalisOT V1 RANK PTS3.8 +100% VOTES0 #16 US Rommania 0 / 500Online EXPstages, x10 PROTO7.4 ENGINETFS 0.4 RANK PTS3.6 +100% VOTES0 #17 US BerethaOnline 2 / 2,000Online EXPStages PROTO10.98 ENGINETFS RANK PTS3.5 +100% VOTES0
Top