Ir para conteúdo

Featured Replies

Postado

Olá Feetads, poderia explicar melhor como funcionará? talvez tenha uma forma mais fácil.
 

Até onde entendi é parecido com o atual daily reward do tibia global. Eu fiz algo parecido no meu server, a diferença é que ele dá uma recompensa por dia, e caso fique 24hrs em pegar, ele volta na primeira.

Dê uma olhada: 

local days = {
		-- [dia] = {itemId, itemCount, "ordem"},
		[1] = {2160, 1, "first"},
		[2] = {2160, 2, "second"},
		[3] = {2160, 3, "third"},
		[4] = {2160, 4, "fourth"},
		[5] = {2160, 5, "fifth"},
		[6] = {12328, 6, "sixth"}, -- stamina refill
		[7] = {2160, 7, "seventh"}
},

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
	
	local timeQuest = player:getStorageValue(Storage.dailyQuestTime) > 0 and player:getStorageValue(Storage.dailyQuestTime) or 0
	if (timeQuest + 86400) >= os.time() then
		player:sendTextMessage(MESSAGE_STATUS_SMALL, "You still can't get the next reward.")
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return true
	elseif (timeQuest + 172800) <= os.time() then
		player:setStorageValue(Storage.dailyQuest, 1)
	end

	local day = player:getStorageValue(Storage.dailyQuest) > 0 and player:getStorageValue(Storage.dailyQuest) or 1
	local dayReward = days[day]
	if dayReward then
		local reward = ItemType(dayReward[1])
		if reward:getId() ~= 0 then
			if player:getFreeCapacity() < reward:getWeight() then
				player:sendTextMessage(MESSAGE_STATUS_SMALL, "You don't have capacity.")
				player:getPosition():sendMagicEffect(CONST_ME_POFF)
				return true
			end

			player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You received ".. dayReward[2] .." ".. reward:getName() .. " as a reward for the ".. dayReward[3] .." day of daily quest.")
			player:addItem(reward:getId(), dayReward[2])
			player:setStorageValue(Storage.dailyQuestTime, os.time())

			if day == 7 then
				player:setStorageValue(Storage.dailyQuest, 1)
			else
				player:setStorageValue(Storage.dailyQuest, day + 1)
			end
		end
	end

	return true
end

 

Editado por luanluciano93 (veja o histórico de edições)

  • Respostas 13
  • Visualizações 955
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • So volto tarde
    So volto tarde

    saquei mais ou menos, mas se for pelo que deu para entender, utilizar um globalevent será a melhor opção mesmo, só um adendo: vc está verificando se apenas os players online estão com tal valor d

  • luanluciano93
    luanluciano93

    Olá Feetads, poderia explicar melhor como funcionará? talvez tenha uma forma mais fácil.   Até onde entendi é parecido com o atual daily reward do tibia global. Eu fiz algo parecido no meu serv

  • luanluciano93
    luanluciano93

    Algo assim  function ResetSystem:applyBonuses(pid) local bonus = self:getInfo(pid) if (bonus and bonus.damage_percent) then local storageTime = getPlayerStorageValue(pid, 1111) - os.time() i

Postado
  • Autor

@luanluciano93

então acho que eh um pouco diferente desse daily reward (alias gostei do teu me deu uma ideia genial kkkkkkkk posso roubar?)

o script funciona da seguinte maneira
o action do bau seta a storage tempo pra +24h
e seta a storage de dano extra pra +1

ai vem o creature ou o globalEvent
que faria o seguinte, a cada 1 minuto checa os players onlines, e caso tenha passado 24 horas desde a ultima vez que ele fez a quest ele perderia a storage de dano extra

e apareceria na tela dele que ele perdeu.
pq checar a cada 1 minuto? pro cara nao entrar na quest, fazer uma parte deslogar esperar o check logar.... digamos que burlar o sistema
então eu precisaria que algo ficasse constantemente checando se ja passou 24horas após ele fazer a quest. e cada vez que ele faz a storage é setada com os.time()+24h pra ele nao perder a storage e ficar tudo certinho.

e pq checar constantemente? pro player nao ficar com esse dano extra por muito tempo
eu poderia deixar pra checar a cada hora ou quando abrisse a quest por exemplo, mas teria algumas maneiras de burlar e continuar com o dano extra.

e pq entre global ou creature?
global > checka todos de uma vez (pode ser um peso grande pra distro pegar 300 pessoas online e checkar um por um, setar a storage....)
creature > quando o player loga, ele começa um loop de onLogin a cada 1 minuto ele chama a função pra checar a storage, porém são varios loops em tempos aleatorios, e checar 300 players em tempos aleatorios pode fazer com que todo segundo esteja executando um loop e isso cause lag

Editado por FeeTads
faltou explicar sobre o pq precisar ser constante (veja o histórico de edições)

Postado
  • Autor
25 minutos atrás, luanluciano93 disse:

CLARO.

 

talvez um evento "onTargetCombat" não resolveria toda essa verificação?

Por onde você checa esse dano extra?

o proprio sistema do reset system ja checa
 

function ResetSystem:applyBonuses(pid)
	local bonus = self:getInfo(pid)
	if (bonus and bonus.damage_percent) then
		if getPlayerStorageValue(pid, 888251) >= 1	then		--se a storage da quest for mais ou igual a 1 
			bonusquest = getPlayerStorageValue(pid, 888251)	-- recebe conforme a quantidade de vezes que fez a quest
		else
			bonusquest = 0;				--se não seta pra 0
		end
		setPlayerDamageMultiplier(pid, 1.0 + ((bonus.damage_percent+bonusquest) / 100.0))
	else
		setPlayerDamageMultiplier(pid, 1.0)
	end
end


caso ele tenha a storage maior que 1, significa que ele fez a quest tantas vezes, o bonus recebe a storage e depois aplica, esse sistema de damage é direto na source tbm
 

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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo