sailorv 5 Postado Maio 16, 2013 Share Postado Maio 16, 2013 (editado) E isso mesmo isso nao e para todos os ots. E um systema novo de jogar tibia onde level nao vale mais nada. aqui quem domina sao os veterano ( quanto mais tempo voce joga mais forte voce fica ) !!! o scrit em si fonciona mais recomendo configura as classes para ficar mais divertido. vamos comecar Pasta DATA\XML\ abre o arquivo groups.xml e coloca isso antes da tags </groups> <group id="1001" name="Novato" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1002" name="Recruta" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1003" name="Soldado" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1004" name="Cabo" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1005" name="Terceiro Sargento" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1006" name="Segundo Sargento" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1007" name="Primeiro Sargento" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1008" name="Aspirante" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1009" name="Segundo Tenente" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1010" name="Primeiro Tenente" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1011" name="Capitão" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1012" name="Major" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1013" name="Tenente Coronel" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1014" name="Coronel" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> <group id="1015" name="General" flags="17213423616" customFlags="67108864" access="0" depotLimit="1000" maxVips="200" /> agora na pasta MODS crie um novo arquivo com o nome RankByPlayingTime.xml com o seguinte codigo salva e e so curtir <?xml version="1.0" encoding="UTF-8"?> <mod name="New level System script" version="1.0" author="Willian Batista Cima" contact="" enabled="yes"> <description> Rank by Playing Time script .-. special thanks to Skymagnum that helped me a little. </description> ----------------------------------------------------------------------- <config name="rankTimeSystem"><![CDATA[ rankTimeSystem = { } rankTimeSetting = { storageBase = 10009000101 , -- SAVE THE PLAY TIME } rankTimeSetting.storagetime = rankTimeSetting.storageBase+1 rankTimeSetting.storagelogin = rankTimeSetting.storageBase+2 -- rankTimeSetting.storagelogout = rankTimeSetting.storageBase+3 -- speed base level 218 + ( 2*getPlayerLevel(cid) ) http://www.tibiabr.com/calc_de_velocidade local base_character = { name = "newbe" , play_time = 0 , life=100 , mana=100 , spd=( 218 ) , cap=0 } rankTimeClass = { -- Novato = Inicio ( 300 vida, 200 mana, speed a velocidade normal, Cap 400 ). os.time() 3*60*60 -- group id name playtime in sec [1001] = { name = "Novato" , play_time = 1 , life=base_character.life+300 , mana=base_character.mana+200 , spd=base_character.spd , cap=base_character.cap+400 } , [1002] = { name = "Recruta" , play_time = 1*60*60 , life=base_character.life+350 , mana=base_character.mana+220 , spd=base_character.spd+10 , cap=base_character.cap+450 } , -- [1003] = { name = "Soldado" , play_time = 6*60*60 , life=base_character.life+400 , mana=base_character.mana+240 , spd=base_character.spd+20 , cap=base_character.cap+500 } , -- [1004] = { name = "Cabo" , play_time = (1*24)*60*60 , life=base_character.life+500 , mana=base_character.mana+260 , spd=base_character.spd+30 , cap=base_character.cap+550 } , [1005] = { name = "Terceiro Sargento" , play_time = (5*24)*60*60 , life=base_character.life+600 , mana=base_character.mana+280 , spd=base_character.spd+40 , cap=base_character.cap+600 } , [1006] = { name = "Segundo Sargento" , play_time = (9*24)*60*60 , life=base_character.life+700 , mana=base_character.mana+300 , spd=base_character.spd+50 , cap=base_character.cap+650 } , [1007] = { name = "Primeiro Sargento" , play_time = (12*24)*60*60 , life=base_character.life+800 , mana=base_character.mana+320 , spd=base_character.spd+60 , cap=base_character.cap+700 } , [1008] = { name = "Aspirante" , play_time = (15*24)*60*60 , life=base_character.life+900 , mana=base_character.mana+340 , spd=base_character.spd+70 , cap=base_character.cap+750 } , [1009] = { name = "Segundo Tenente" , play_time = (30*24)*60*60 , life=base_character.life+1000 , mana=base_character.mana+360 , spd=base_character.spd+80 , cap=base_character.cap+800 } , [1010] = { name = "Primeiro Tenente" , play_time = (60*24)*60*60 , life=base_character.life+1100 , mana=base_character.mana+380 , spd=base_character.spd+90 , cap=base_character.cap+850 } , [1011] = { name = "Capitao" , play_time = (90*24)*60*60 , life=base_character.life+1300 , mana=base_character.mana+400 , spd=base_character.spd+100 , cap=base_character.cap+900 } , [1012] = { name = "Major" , play_time = (120*24)*60*60 , life=base_character.life+1500 , mana=base_character.mana+420 , spd=base_character.spd+120 , cap=base_character.cap+950 } , [1013] = { name = "Tenente Coronel" , play_time = (150*24)*60*60 , life=base_character.life+1800 , mana=base_character.mana+440 , spd=base_character.spd+140 , cap=base_character.cap+1000 } , [1014] = { name = "Coronel" , play_time = (250*24)*60*60 , life=base_character.life+2000 , mana=base_character.mana+460 , spd=base_character.spd+160 , cap=base_character.cap+1050 } , [1015] = { name = "General" , play_time = (365*24)*60*60 , life=base_character.life+2300 , mana=base_character.mana+480 , spd=base_character.spd+180 , cap=base_character.cap+1100 } , LAST_GROUP = 1015 , -- last group should alws be the last } function getPlayerMaxCap(cid) local query = db.getResult("SELECT `cap` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";") if query:getID() ~= -1 then return query:getDataInt("cap") end query:free() return LUA_ERROR end ]]></config> ----------------------------------------------------------------------- <event type="login" name="CheckingPlayerRankLogin" event="script"><![CDATA[ domodlib('rankTimeSystem') local cfg = rankTimeSetting local class = rankTimeClass function onLogin(cid) registerCreatureEvent(cid,"CheckingPlayerRankLogout") -- registerCreatureEvent(cid,"lifeRingSystem_think") if getPlayerGroupId(cid) > 1 and getPlayerGroupId(cid) < 11 or getPlayerName(cid) == "Account Manager" then -- lets not change GM TUTOR ETC... return true -- change to acc mng to rank time ? better not or he will alws win the 1st position ; D ( TOP rank) end if getPlayerGroupId(cid) == 1 and getPlayerName(cid) ~= "Account Manager" then setPlayerGroupId(cid, 1001 ) end if getPlayerGroupId(cid) == class.LAST_GROUP then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You have the RANK of : " ..class[ getPlayerGroupId(cid) ].name ..", Congratulations . ") return true end -- next ( ) if getPlayerStorageValue(cid, cfg.storagetime ) > class[( getPlayerGroupId(cid)+1 )].play_time then setPlayerGroupId(cid, ( getPlayerGroupId(cid)+1 ) ) setCreatureMaxHealth(cid, class[ getPlayerGroupId(cid) ].life ) setCreatureMaxMana(cid, class[ getPlayerGroupId(cid) ].mana ) doPlayerSetMaxCapacity(cid, -( getPlayerMaxCap(cid) or 0 )+class[ getPlayerGroupId(cid) ].cap ) doChangeSpeed(cid, -getCreatureSpeed(cid)+class[ getPlayerGroupId(cid) ].spd ) -- getPlayerStorageValue(cid, cfg.storageSped ) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You got a new RANK : " ..class[ getPlayerGroupId(cid) ].name ..", status has been updated . ") else local n_t_f_n_rank = class[( getPlayerGroupId(cid)+1 )].play_time - getPlayerStorageValue(cid, cfg.storagetime ) -- needed time for new class doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "YOU RANK IS : " ..class[ getPlayerGroupId(cid) ].name ..": time for next rank . " .. n_t_f_n_rank/60/60 .." hours." ) end if(getPlayerStorageValue(cid, cfg.storageBase) > 0) then setPlayerStorageValue(cid, cfg.storagelogin , os.clock() ) -- save the time he loggin to play elseif getPlayerName(cid) ~= "Account Manager" then setPlayerStorageValue(cid, cfg.storageBase , 1 ) -- setPlayerStorageValue(cid, cfg.storagetime , 0 ) -- save the time he started to play end return true end ]]></event> ----------------------------------------------------------------------- <event type="logout" name="CheckingPlayerRankLogout" event="script"><![CDATA[ domodlib('rankTimeSystem') local cfg = rankTimeSetting local class = rankTimeClass function onLogout(cid) local played_time = ( os.clock() - getPlayerStorageValue(cid, cfg.storagelogin ) ) if played_time > 1*60 then -- if he played more than 1 min we will save his play time. setPlayerStorageValue(cid, cfg.storagetime , ( getPlayerStorageValue(cid, cfg.storagetime )+played_time ) ) end return true end ]]></event> <talkaction words="!myinfo" event="script"><![CDATA[ domodlib('rankTimeSystem') local cfg = rankTimeSetting local class = rankTimeClass function onSay(cid, words, param, channel) if(param ~= '') then if(param == 'spd') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerName(cid) .. " 's spd is " .. getCreatureSpeed(cid) ) return true end if (param == 'group') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerName(cid) .. " 's group is : " .. getPlayerGroupId(cid) ) return true end if (param == 'rank') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerName(cid) .. " 's rank is : " .. class[ getPlayerGroupId(cid) ].name ) return true end if (param == 'playertime') then local played_time = ( os.clock() - getPlayerStorageValue(cid, cfg.storagelogin ) ) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerName(cid) .. " 's played time is : " .. played_time ) return true end end doPlayerSendCancel(cid, ' param can be "playertime", spd hp sp rank cap. ') return false end ]]></talkaction> <talkaction log="yes" words="!setrank" access="5" event="script"><![CDATA[ domodlib('rankTimeSystem') local cfg = rankTimeSetting local class = rankTimeClass -- !setrank Sailorv , Novato or days like 365 for last rank function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return false end local t = string.explode(param, ",") local pid = getCreatureByName( t[1] ) local days = tonumber(t[2]) if not isPlayer(pid) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player not found.") return false end if getPlayerGroupId(pid) < 1000 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This Player cant get More time.") return false end if(not days) then for k, v in pairs(class) do if string.lower(t[2]) == string.lower(class[ k ].name) then setPlayerStorageValue(pid, cfg.storagetime , ( class[ k ].play_time ) ) setPlayerGroupId(pid, k-1 ) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getPlayerName(pid) .." got the RANK of " .. class[ k ].name .. " . ") return true end end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, " Rank name not Found . ") return false end local played_time = ( days*24 ) *60*60 -- ADD TIME in DAYS setPlayerStorageValue(pid, cfg.storagetime , ( getPlayerStorageValue(cid, cfg.storagetime )+played_time ) ) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getPlayerName(pid) .." got " .. days .. " days") return true end ]]></talkaction> </mod> !setrank -- para mudar a classes do jogador !setrank Sailorv , Novato or days like 365 for last rank !myinfo -- verificar as info do jogagor !myinfo spd hp sp group rank etc ... SS ou video vo ajuntar depois. @EDIT 16/05/2013 changed acess to access="5 added tag spoiler Editado Maio 16, 2013 por hellFriend Link para o comentário Compartilhar em outros sites More sharing options...
Skymagnum 234 Postado Maio 16, 2013 Share Postado Maio 16, 2013 (editado) Caralho mano que pog é esse, tirando esse pog tá muito bom. Em 050-functions: function getTime(s) local h = math.floor(s / 3600) local m = math.floor((s - h * 3600 )/ 60) local s = s - h * 3600 - m * 60 return h .. ":" .. m .. ":" .. s end e isso também S1EXU92y[/pastebin] em login.lua updatePatente(cid) Talkaction para checar. nYim1Pf4[/pastebin] Não é necessário criar groups mano. Editado Maio 16, 2013 por Skymagnum Link para o comentário Compartilhar em outros sites More sharing options...
leoperez011 0 Postado Maio 16, 2013 Share Postado Maio 16, 2013 cara mt bom esse script vou usar com certeza REP+ Pra você Link para o comentário Compartilhar em outros sites More sharing options...
sailorv 5 Postado Maio 16, 2013 Autor Share Postado Maio 16, 2013 (editado) Caralho mano que pog é esse, tirando esse pog tá muito bom. eu reconheco que voce e um (script melhor do que eu ) e o teu codigo e bem mais simple e direto ao que interessa. mais eu so quero mostrar ao outros que no tibia existe muitas funcionalidade que nao sao exploradas. e que so poderam ( usando essas flags ) um exemplo eu quero criar um mods do tipo bomberman3ou4 -- mais to sem tempo agora. e isso so depois que eu fazer o npc pra jogar xadrez -- ai entra minha vida privada meu trabalho etc ... @ pra que fica verificando todo segundo :] -- ta bem parei addEvent(updatePatente, 1000, player) Nada mais é que o Mestre da Programação Orientada a Gambiarras. Comumente visto em departamentos de informática onde a necessidade de resolução de problemas em uma quantidade de tempo 10 vezes inferior ao normal é algo corriqueiro. Um MPOG não se origina do nada. Não é o tipo de técnica que se aprende na faculdade. São vários anos forjando seu karatêr, orientando seu raciocínio para a solução mais Gamb. é necessário também possuir a certificação MGA. aqui estao os meus preferidos :] A Função ficou com 3000 linhas porque é impossível deixar ela menor Programador POG tentando se passar por expert O que importa são os resultados™ Programadores do Google Adwords sobre POG Na minha máquina funcionou. Programador sobre POG Simplesmente comentei e funcionou! MPOG sobre Mestre da arte de POG dizendo como resolveu o problema O Código tá certo, deve ser problema na massa de dados. Programador Experiente, com várias certificações em POG Eu fiz somente o que foi especificado! Analista, usando a técnica In-Diana Para ser POGger, tem de ser astuto, tem que saber onde o compilador quer te ferrar POGger passando seus ensinamentos para estagiário! font : http://desciclopedia...da_a_Gambiarras cara mt bom esse script vou usar com certeza REP+ Pra você muito obrigado ^^ Editado Maio 16, 2013 por hellFriend Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados