Postado Março 10, 2015 10 anos up.. Esse erro aparece quando eu piso no tile Editado Março 10, 2015 10 anos por maper007 (veja o histórico de edições)
Postado Dezembro 19, 2015 9 anos Em 2 września 2014 22:45:04, Mitsuig disse: se não especificar true ou false você tendo ou não vip vai ganhar extra exp. Desculpe, mas eu não acrescentar nada
Postado Março 17, 2016 9 anos Em 01/09/2014 at 16:20, Mitsuig disse: 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) estou tentando usar seu script mais o player:registerEvent("Exp_Extra") não pega
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.