VIP System Completo
Vá´ate o arquivo global.lua e adicione no fim dele as funções do vip system
-- Vip system lib
function getPlayerAccount(cid)
return getAccountNumberByPlayerName(getPlayerName(cid))
end
function setVipTable()
db.query("ALTER TABLE `accounts` ADD `vip_time` INT( 15 ) NOT NULL;")
end
function getPlayerVip(cid)
local resultId = db.storeQuery("SELECT `id`, `vip_time` FROM `accounts` WHERE `id` = '".. getPlayerAccount(cid) .."';")
if resultId ~= false then
return result.getDataInt(resultId, "vip_time")
else
error('Account not found.')
end
end
function getVipByAcc(acc)
local a = db.storeQuery("SELECT `vip_time` FROM `accounts` WHERE `id` = '"..acc.."';")
if a ~= false then
return result.getDataInt(a, "vip_time")
else
error('Account not found.')
end
end
function setPlayerVip(cid,secs) -- seconds
if isPlayer(cid) then
db.query("UPDATE `accounts` SET `vip_time` = '"..(os.time()+secs).."' WHERE `id` ='".. getPlayerAccount(cid) .."' LIMIT 1 ;")
else
error('Player not found.')
end
end
getVipByAccount = getVipByAcc
function hasVip(cid)
if isPlayer(cid) then
if os.time(day) < getPlayerVip(cid) then
return true
else
return false
end
else
error('Player not found.')
end
end
function accountHasVip(acc)
if os.time() < getVipByAccount(acc) then
return true
else
return false
end
end
function setVipByAccount(acc,secs) -- seconds
local a = getVipByAcc(acc)
if a ~= false then
if tonumber(secs) ~= nil then
db.query("UPDATE `accounts` SET `vip_time` = '"..(os.time()+secs).."' WHERE `id` ='"..acc.."' LIMIT 1 ;")
return true
else
error('Time must be defined as number.')
end
else
error('Account not found.')
end
return false
end
function getPlayerVipTime(cid)
if getPlayerVip(cid)-os.time() > 0 then
return getPlayerVip(cid)-os.time()
else
return 0
end
end
function getAccountVipTime(acc)
if getVipByAcc(acc)-os.time() > 0 then
return getVipByAcc(acc)-os.time()
else
return 0
end
end
function addVipByAccount(acc,secs) -- seconds
local a = getVipByAcc(acc)
if a ~= false then
if tonumber(secs) ~= nil then
db.query("UPDATE `accounts` SET `vip_time` = '"..os.time()+(getAccountVipTime(acc)+secs).."' WHERE `id` ='"..acc.."' LIMIT 1 ;")
return true
else
error('Time must be defined as number.')
end
else
error('Account not found.')
end
return false
end
function doPlayerAddVip(cid,secs) -- seconds
local a = getPlayerVip(cid)
if a ~= false then
if tonumber(secs) ~= nil then
return setPlayerVip(cid,(getPlayerVipTime(cid) + secs))
else
error('Time must be defined as number.')
end
else
error('Player not found.')
end
end
function returnVipString(cid)
if isPlayer(cid) == true then
return os.date("%d %B %Y %X", getPlayerVip(cid))
else
error('Player not found.')
end
end
function returnVipCountdown(num)
local d = (tonumber(string.format("%.0f", os.date("%j",num))) - 1)
local h = (tonumber(string.format("%.0f", os.date("%H",num))) - 1)
local m = (tonumber(string.format("%.0f", os.date("%M",num))))
local s = (tonumber(string.format("%.0f", os.date("%S",num))))
local tvar, tnames, text = {d, h, m, s}, {"day", "hour", "minute", "second"}, ""
local nvar, nnames = {}, {}
for i = 1, #tvar do
local s = ""
table.insert(nvar, tvar)
if tvar > 1 then s = "s" end
table.insert(nnames, tnames..s)
if i == 1 then
if tvar > 0 then text = text..nvar.." "..nnames else text = text end
else
if tvar > 0 then
if text == "" then
text = nvar.." "..nnames
else
if tvar[i+1] ~= nil and tvar[i+1] > 0 then
text = text..", "..nvar.." "..nnames
else
text = text.." and "..nvar.." "..nnames
end
end
else
text = text
end
end
end
if text == "" then
return "no more vip time"
else
return text.." of vip time"
end
end
-- end of vip system lib
depois vai em talkactions/scripts e crie um arquivo vip.lua e adicionei:
function onSay(cid, words, param)
vipsystem_info = {
name = "Vipsystem for TFS 1.0 by Zbizu(inspired by Mock's creation)",
author = "Zbizu",
version = "1.0",
}
vip_config = {
log_opearations = true, -- logs date, IP integer and player name to make sure explainations of its user are truth if something go wrong, ignores players commands
log_file = "vip_log.txt"
}
local daycounter = (math.floor((getVipByAccount(getPlayerAccount(cid))-os.time())/86400, 0) + 1)
if getPlayerAccess(cid) > 0 then
adm_info = "\nYou have special access which allows you to manage players viptime.\n\nAvailable params: see, add, reset\nsee - views player's viptime\nadd - adds player's viptime\nreset - makes player's viptime expired immediately\n\nUsage: "..words.." \"param, playername, time, reason"
else
adm_info = ""
adm_info = ""
end
if param == "" or getPlayerAccess(cid) == 0 then
if (daycounter)*(-1) == 1 then s = "" else s = "s" end
local ret_ = getPlayerVip(cid)
if ret_ == 0 then
doPlayerPopupFYI(cid,"You don't have any vip time."..adm_info)
return false
else
if getPlayerVipTime(cid) == 0 then
if (daycounter)*(-1) == 0 then
doPlayerPopupFYI(cid, "You don't have any vip time.\nYour vip expired in " .. os.date("%d %B %Y %X ",ret_) .. "(today)."..adm_info)
return false
else
doPlayerPopupFYI(cid, "You don't have any vip time.\nYour vip expired in " .. os.date("%d %B %Y %X ",ret_) .. "(" .. (daycounter)*(-1) .. " day".. s .." ago)."..adm_info)
return false
end
else
doPlayerPopupFYI(cid, "Your vip status ends in " .. os.date("%d %B %Y %X",ret_) .. ".\nYou have: " .. (daycounter) .. " days left."..adm_info)
return false
end
end
else
if vip_config.log_opearations then
file = io.open(vip_config.log_file, "a+")
file:write(os.date("[%x %X]", os.time()).."[IP: "..getPlayerIp(cid).."]["..getPlayerName(cid).."]: ".. words .." \"".. param .."\n")
file:close()
end
local t = string.split(param, ", ", 4)
local actions = {["see"] = 1, ["add"] = 2, ["reset"] = 3}
local gen = {[0] = "She", [1] = "He", [2] = "This user"}
if actions[t[1]] == nil then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Incorrect action specified.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "To see usage manual type "..words.." without params.")
return false
else
local pid = getPlayerByName(t[2])
reason_text = t[4]
if reason_text ~= nil then
if(t[5] ~= nil) then
for j = 5, #t do
reason_text = reason_text .. ", " .. t[j]
end
end
else
reason_text = ""
end
if reason_text == "" then vip_comment = "" else vip_comment = "Reason: "..reason_text end
if pid then
if actions[t[1]] == 1 then
if getPlayerVip(pid) == 0 then
doPlayerPopupFYI(cid, getPlayerName(pid).."'s account never had any vip time.")
else
doPlayerPopupFYI(cid, getPlayerName(pid).."'s vip time expiration date:\n" .. os.date("%d %B %Y %X",getPlayerVip(pid)) .. "\n".. gen[getPlayerSex(pid)] .. " has ".. (getPlayerVipTime(pid)) .. " left.")
end
return false
elseif actions[t[1]] == 2 then
if tonumber(t[3]) ~= nil then
if tonumber(t[3]) == 0 then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getPlayerName(pid).."'s vip time wasn't changed.")
return false
else
if tonumber(t[3]) > 0 then
vip_action = "added to"
vip_formula = tonumber(t[3])
else
vip_action = "removed from"
vip_formula = tonumber(t[3]*(-1))
end
if vip_config.log_opearations then
file = io.open(vip_config.log_file, "a+")
file:write(os.date("Player had "..(getPlayerVipTime(pid)).." left\n"))
file:close()
end
doPlayerAddVip(pid,tonumber(t[3]))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, (vip_formula).." "..vip_action.." "..getPlayerName(pid).."'s account.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, gen[getPlayerSex(pid)] .. " has ".. (getPlayerVipTime(pid)) .. " now.")
if vip_comment ~= "" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, vip_comment) end
doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE, (vip_formula).." "..vip_action.." your account.")
doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE, "You have ".. (getPlayerVipTime(pid)) .. " now.")
if vip_comment ~= "" then doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE, vip_comment) end
return false
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Time must be a number.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "To see usage manual type "..words.." without params.")
end
return false
elseif actions[t[1]] == 3 then
if vip_config.log_opearations then
file = io.open(vip_config.log_file, "a+")
file:write(os.date("Player had "..(getPlayerVipTime(pid)).." left\n"))
file:close()
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getPlayerName(pid).."'s vip status removed. ".. gen[getPlayerSex(pid)] .. " had "..(getPlayerVipTime(pid)).." left.")
if vip_comment ~= "" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, vip_comment) end
doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE, "Your vip status has been removed.")
if vip_comment ~= "" then doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE, vip_comment) end
setPlayerVip(pid,0)
return false
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player not found.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "To see usage manual type "..words.." without params.")
return false
end
end
end
return true
end
Depois em talkactions.xml adicione as 2 linhas:
<talkaction words="/vip" script="vip.lua"/>
<talkaction words="!vip" script="vip.lua"/>
para add vip ai player e so usar o comando:
/vip "add, player NOME, 86400
86400 = 1 day em segundo
vamos fazer o vip scroll, vai em actions/scripts e crie um arquivo vip.lua e adicione:
function onUse(cid, item)
if hasVip(cid) == false then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"Agora voce e um player VIP.")
doPlayerAddVip(cid, 2592000) -- 30 dias tempo em segudos.
doRemoveItem(item.uid, 1)
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"Voce ja e VIP so poderá renovar daqui 30 dias.")
end
return TRUE
end
depois em actions.xml adicione a linha
<action itemid="16101" script="vip.lua"/>
vamos fazer o aviso ao logar, vai em creaturescripts/scripts e crie um arquivo vip.lua e adicione:
function onLogin(cid)
local player = Player(cid)
if hasVip(cid) == true then
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Você tem 50% de exp a mais agora!")
else
player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Tornesse vip e ganhe 50% a mais de experiencia!")
end
return true
end
depois em creaturescripts.xml adicione a linha:
<event type="login" name="vipstatus" script="vip.lua"/>
vamos fazer o piso vip, vai em movements/scripts e crie um arquivo vip.lua e adicione:
function onStepIn(cid, item, position, fromPosition)
local config = {
msgDenied = "Você não e vip ,Compre =D.",
msgWelcome = "Seja Bem Vindo a Area vip."
}
if hasVip(cid) == false then
doTeleportThing(cid, fromPosition, true)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgDenied)
doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
return TRUE
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgWelcome)
return TRUE
end
depois em movements.xml adicione a linha:
<movevent event="StepIn" uniqueid="13500" script="vip.lua"/>
agora vamos por extra exp vip para vip
Crie um arquivo com o nome extraexp.lua em creaturescripts/scripts e coloque isso dentro:
local rate = 50 --- porcentagem que irá ganhar a mais.
function onKill(cid, target, lastHit)
if hasVip(cid) == true then
local monster = Monster(target)
if not monster then
return true
end
for id, damage in pairs(monster:getDamageMap()) do
local player = Player(id)
if player then
local experience = damage.total / monster:getType():getHealth() * monster:getType():getExperience()
local expFormula = (((experience * Game.getExperienceStage(player:getLevel())) / 100) * rate)
player:addExperience(math.floor(expFormula), true)
end
end
end
return true
end
Em creaturescripts.xml adcione a tag:
<event type="kill" name="Exp_Extra" event="script" value="extraexp.lua"/>
E por fim add o evento no creaturescripts/scripts/login.lua:
player:registerEvent("Exp_Extra")
e não se esqueça de executa o comando no mysql pra criar a tabela vip_time:
ALTER TABLE `accounts` ADD `vip_time` INT( 15 ) NOT NULL;
Acho que e só isso qualquer duvidas só postar:
Creditos: A min (por corrigir algumas coisas), Imkingran (pelo adptação) e luanluciano93 (pelo extra exp)