Ir para conteúdo

Advanced RANK SYSTEM by time


sailorv

Posts Recomendados

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 por hellFriend
Link para o comentário
Compartilhar em outros sites

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 por Skymagnum
Link para o comentário
Compartilhar em outros sites

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 por hellFriend
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...