Ir para conteúdo

[Ajuda] Criar uma armadura que diminui em porcentagem o dano desse script:

Featured Replies

Postado

.Qual servidor ou website você utiliza como base? 

8.60 TFS 1.3

Qual o motivo deste tópico? 

Ajuda

Está surgindo algum erro? Se sim coloque-o aqui. 

Citar

 

 

Você tem o código disponível? Se tiver publique-o aqui: 

local areas = {
    {leftUpPoint = {x = 31815, y = 32206, z = 7}, rightDownPoint = {x = 32070, y = 32425, z = 7}, minHit = 300, maxHit = 600},

}

function onThink(interval, lastExecution, thinkInterval)
    for id, arr in pairs(areas) do
        for x = arr.leftUpPoint.x, arr.rightDownPoint.x do
            for y = arr.leftUpPoint.y, arr.rightDownPoint.y do
                for z = arr.leftUpPoint.z, arr.rightDownPoint.z do
                    local pos = {x = x, y = y, z = z}
                    local uid = getTopCreature(pos).uid
                    if isPlayer(uid) then
                        local random = math.random(arr.minHit, arr.maxHit)
                        doCreatureAddHealth(uid, -random)
                        doSendMagicEffect(pos, 8)
                    end
                end
            end
        end
    end
    return true
end


<globalevent name="think" interval="3000" script="others/areahit.lua"/>

 

Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. 

 

Resolvido por Toruk

Ir para solução
  • Respostas 6
  • Visualizações 469
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Exemplo de como fazer um "check" de armadura: Sendo 2500 o id do item que está no slot da armor e 0.5 a porcentagem do dano que o player irá receber (nesse caso, 50%).   local player = P

  • Tem, basta criar um "local" para determinar a somatória de proteção dos itens e ir acrescentando conforme o item, vou dar um exemplo em seu script. Usei 3 exemplos: armor, legs e backpack.  

  • Scorpiondaniel
    Scorpiondaniel

    Mano você é foda! Me manda seu discord por favor!

Postado
  • Solução

Exemplo de como fazer um "check" de armadura:

Sendo 2500 o id do item que está no slot da armor e 0.5 a porcentagem do dano que o player irá receber (nesse caso, 50%).

 

local player = Player(uid)
local random = math.random(arr.minHit, arr.maxHit)
local armor = player:getSlotItem(CONST_SLOT_ARMOR)
if armor and armor:getId() == 2500 then
	doCreatureAddHealth(uid, -random*0.5)
	doSendMagicEffect(pos, 8)
	return true
end

 

Postado
  • Autor
58 minutos atrás, Toruk disse:

Exemplo de como fazer um "check" de armadura:

Sendo 2500 o id do item que está no slot da armor e 0.5 a porcentagem do dano que o player irá receber (nesse caso, 50%).

 


local player = Player(uid)
local random = math.random(arr.minHit, arr.maxHit)
local armor = player:getSlotItem(CONST_SLOT_ARMOR)
if armor and armor:getId() == 2500 then
	doCreatureAddHealth(uid, -random*0.5)
	doSendMagicEffect(pos, 8)
	return true
end

 

Funcionou mano agradeço desde já! Mas teria como colocar tipo se tiver a armadura completa exemplo, boots, shield, legs, armor e elmo ele diminui 50% caso contrario diminui 10% cada parte?

Postado

Tem, basta criar um "local" para determinar a somatória de proteção dos itens e ir acrescentando conforme o item, vou dar um exemplo em seu script. Usei 3 exemplos: armor, legs e backpack.

 

Raciocínio do script: O se o player n tiver nenhum dos itens, vai passar "armorProtection = 1" para o final do scripts e vai tomar o dano multiplicado por 1, que seria o dano por inteiro. Conforme ele vai tendo as partes do set, ele vai diminuindo o "armorProtection em 0,1", isso fará com que o dano final seja multiplicado por 1 valor menor ainda (Ex: se tiver 2 itens, vai ser multiplicado por 0.8, ou seja, 80% do valor total).

 

Para adicionar mais partes da armadura é só ir seguindo o mesmo raciocínio e ir colocando conforme desejar. O nome de cada slot pode ser visto em creature.h do seu tfs, mas em geral, são sempre os mesmos: https://github.com/otland/forgottenserver/blob/master/src/creature.h#L24-L41

 

local areas = {
	{leftUpPoint = {x = 31815, y = 32206, z = 7},
	rightDownPoint = {x = 32070, y = 32425, z = 7},
	minHit = 300,
	maxHit = 600,
	armorID = 15000,
	legsID = 15001,
	backpackID = 15002,
},
}

function onThink(interval, lastExecution, thinkInterval)
	for id, arr in pairs(areas) do
		for x = arr.leftUpPoint.x, arr.rightDownPoint.x do
			for y = arr.leftUpPoint.y, arr.rightDownPoint.y do
				for z = arr.leftUpPoint.z, arr.rightDownPoint.z do
					local pos = {x = x, y = y, z = z}
					local uid = getTopCreature(pos).uid
					if isPlayer(uid) then
						local player = Player(uid)

						--- START ARMOR PROTECTION ---
						local armorProtection = 1 -- 100% damage
						--- Check Armor ---
						local armor = player:getSlotItem(CONST_SLOT_ARMOR)
						if armor and armor:getId() == arr.armorID then
							armorProtection = armorProtection - 0.1 -- remove 10%
						end
						--- Check Legs ---
						local legs = player:getSlotItem(CONST_SLOT_LEGS)
						if legs and legs:getId() == arr.legsID then
							armorProtection = armorProtection - 0.1 -- remove 10%
						end
						--- Check Backpack ---
						local bp = player:getSlotItem(CONST_SLOT_BACKPACK)
						if bp and bp:getId() == arr.backpackID then
							armorProtection = armorProtection - 0.1 -- remove 10%
						end
						--- END PROTECTION ---
						local finalDamage = math.random(arr.minHit, arr.maxHit)
						doCreatureAddHealth(uid, -finalDamage*armorProtection)
						doSendMagicEffect(pos, 8)
					end
				end
			end
		end
	end
	return true
end

 

Postado
  • Autor
3 minutos atrás, Toruk disse:

Tem, basta criar um "local" para determinar a somatória de proteção dos itens e ir acrescentando conforme o item, vou dar um exemplo em seu script. Usei 3 exemplos: armor, legs e backpack.

 

Raciocínio do script: O se o player n tiver nenhum dos itens, vai passar "armorProtection = 1" para o final do scripts e vai tomar o dano multiplicado por 1, que seria o dano por inteiro. Conforme ele vai tendo as partes do set, ele vai diminuindo o "armorProtection em 0,1", isso fará com que o dano final seja multiplicado por 1 valor menor ainda (Ex: se tiver 2 itens, vai ser multiplicado por 0.8, ou seja, 80% do valor total).

 

Para adicionar mais partes da armadura é só ir seguindo o mesmo raciocínio e ir colocando conforme desejar. O nome de cada slot pode ser visto em creature.h do seu tfs, mas em geral, são sempre os mesmos: https://github.com/otland/forgottenserver/blob/master/src/creature.h#L24-L41

 


local areas = {
	{leftUpPoint = {x = 31815, y = 32206, z = 7},
	rightDownPoint = {x = 32070, y = 32425, z = 7},
	minHit = 300,
	maxHit = 600,
	armorID = 15000,
	legsID = 15001,
	backpackID = 15002,
},
}

function onThink(interval, lastExecution, thinkInterval)
	for id, arr in pairs(areas) do
		for x = arr.leftUpPoint.x, arr.rightDownPoint.x do
			for y = arr.leftUpPoint.y, arr.rightDownPoint.y do
				for z = arr.leftUpPoint.z, arr.rightDownPoint.z do
					local pos = {x = x, y = y, z = z}
					local uid = getTopCreature(pos).uid
					if isPlayer(uid) then
						local player = Player(uid)

						--- START ARMOR PROTECTION ---
						local armorProtection = 1 -- 100% damage
						--- Check Armor ---
						local armor = player:getSlotItem(CONST_SLOT_ARMOR)
						if armor and armor:getId() == arr.armorID then
							armorProtection = armorProtection - 0.1 -- remove 10%
						end
						--- Check Legs ---
						local legs = player:getSlotItem(CONST_SLOT_LEGS)
						if legs and legs:getId() == arr.legsID then
							armorProtection = armorProtection - 0.1 -- remove 10%
						end
						--- Check Backpack ---
						local bp = player:getSlotItem(CONST_SLOT_BACKPACK)
						if bp and bp:getId() == arr.backpackID then
							armorProtection = armorProtection - 0.1 -- remove 10%
						end
						--- END PROTECTION ---
						local finalDamage = math.random(arr.minHit, arr.maxHit)
						doCreatureAddHealth(uid, -finalDamage*armorProtection)
						doSendMagicEffect(pos, 8)
					end
				end
			end
		end
	end
	return true
end

 

Mano você é foda! Me manda seu discord por favor!

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.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo