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 801
  • 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
22 horas atrás, FeeTads disse:

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

CLARO.

 

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

Por onde você checa esse dano extra?

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.6k

Informação Importante

Confirmação de Termo