Ir para conteúdo
  • 0

premium account


s2dieginho

Pergunta

parte 1°

tipo queria um sistema de Premium Account, na minha cidade templo tem 2 teleportes que levao a cidades exclusivas para ''P.A'' queria que so'' P.A ''entrassem nesse teleportes

apos o tempo da sua p.a acabar se ele voltar para cidade templo nao poder mais entrar nesse teleportes ''P.A'' ate renovar sua ''P.A''

quando o tempo da sua ''P.A'' acabar se o player tiver logado dentro das areas ''P.A'' ele ser teletansportado de volta para a cidade templo.

 

pf queria o mais rapido possivel a 1° parte

 

parte 2°

queria que tive-se um limite de tempo para sair de lá

ex:. minha p.a acabo mais o player tem +1 hora para sair ou sera teletransportado de volta para templo estandotando online ou nao ou ate mesmo caçando...

Editado por s2dieginho
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

1ª parte:

 

TAG movements.xml:

<movevent type="StepIn" actionid="26282" event="script" value="premiumtp.lua"/>
<movevent type="StepIn" actionid="26283" event="script" value="premiumtp.lua"/>

premiumtp.lua em movements/scripts:

 

 

 

function onStepIn(cid, item, position, fromPos)
	local config = {
	pos_cidade1 = {x=160,y=50,z=7},
	nome_cidade1 = "Angola",
	pos_cidade2 = {x=180,y=1080,z=7},
	nome_cidade2 = "Vila Mimosa"
	}
	
	if item.actionid == 26282 then
		if isPremium(cid) then
			doTeleportThing(cid, config.pos_cidade1)
			doSendMagicEffect(config.pos_cidade1, 10)
			doPlayerSendTextMessage(cid, 27, "Voce chegou em "..config.nome_cidade1".")
		else
			doPlayerSendCancel(cid, "Apenas jogadores premium podem usar esse teleporte.")
			doTeleportThing(cid, fromPos)
			doSendMagicEffect(fromPos,2)
		end
	elseif item.actionid == 26283 then
		if isPremium(cid) then
			doTeleportThing(cid, config.pos_cidade2)
			doSendMagicEffect(config.pos_cidade2, 10)
			doPlayerSendTextMessage(cid, 27, "Voce chegou em "..config.nome_cidade2".")
		else
			doPlayerSendCancel(cid, "Apenas jogadores premium podem usar esse teleporte.")
			doTeleportThing(cid, fromPos)
			doSendMagicEffect(fromPos,2)
		end
	end
	return true
end	

 

 

 

 

 

2ª parte:

 

Cara, aqui eu me compliquei um pouco. Tentei pensar em um jeito melhor de checar se o cara estava em uma área PA, mas não consegui:

  • Você vai definir no script 4 posições:
  • Pos1 será a área de início da primeira área PA (escolha o canto superior esquerdo da área e z=7)
  • Pos2 será o fim da área PA (canto inferior direito, z=7)
  • Pos3 e 4 serão a mesma coisa, mas para a segunda área PA
  • A cada 5min (configurável), o servidor vai checar se os jogadores free estão na área definida (embaixo e acima também) e vai remover os que estiverem.

Alguns possíveis problemas:

  • O código, imagino eu, terá um grande custo no desempenho por checar uma área bem grande, então é melhor que o tempo de checagem não seja muito baixo (testa você mesmo pra ver se trava ou não aí)
  • Possivelmente os jogadores poderão se esquivar da checagem geral, então você pode usar uma função no login (particularmente, eu acho desnecessário)
  • Não fiz a parte do aviso antecipado porque iria criar mais problemas do que vale a pena, mas é fácil de colocar, se você fizer questão
  • Ele checa do z=2 até z=12, se tiver alguma área acima ou abaixo disso, procura isInAreaMultifloor(...,5) e muda o 5 pra 7.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

TAG no globalevents.xml:

<globalevent name="PremiumAreaCheck" interval="300000" event="script" value="PACheck.lua"/> 
-- intervalo de 5 minutos em milissegundos para chamar o código. Se o seu servidor considerar o intervalo em segundos, divida o tempo por 1000

Arquivo PACheck.lua em globalevents/scripts:

 

 

 

function isInAreaMultifloor(pos,pos1,pos2,var)	
	for Floor = (pos1.z-var), (pos1.z+var) do
		if isInArea({x=pos.x,y=posy,z=Floor}, {x=pos1.x,y=pos1.y,z=Floor}, {x=pos2.x,y=pos2.y,z=Floor}) then
			return true
		end
	end
	return false
end

function onThink()
	local pos1,pos2 = {x=1,y=1,z=1}, {x=2,y=2,z=2}
	local pos3,pos4 = {x=3,y,3,z=3}, {x=4,y=4,z=4}
	local players = getPlayersOnline()
	for _,pid in ipairs(players) do
		if not isPremium(pid) then
			 if isInAreaMultifloor(getCreaturePosition(pid), pos1, pos2, 5) or isInAreaMultifloor(getCreaturePosition(pid), pos3, pos4, 5) then
				doPlayerSendTextMessage(pid,21,'Sua PA expirou e voce estava em uma area premium. Por favor, para continuar acessando aquela area, renove sua PA.')
				doTeleportThing(pid, getTownTemplePosition(1))
				doSendMagicEffect(getTownTemplePosition(1), 10)
			end
		end
	end
	return true
end

 

 

Editado por omega blueheaven
Link para o comentário
Compartilhar em outros sites

  • 0

pra que serve o pos1,pos2,pos3,pos4?

 

Nesse momento eu estou me esforçando o máximo que posso para não ser grosso. Então vou dizer simplesmente: Releia. O. Que. Eu. Postei.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...