Ir para conteúdo
  • Cadastre-se

(Resolvido)Tiler que diminuem dano


Ir para solução Resolvido por lordzetros,

Posts Recomendados

Boa tarde tibianos, estou precisando de um script que... quando um player está em cima de um tiler, ele perde cerca de 20% do seu dano, pois no meu servidor o 1x1 está bem, mas na hora do castle, players estão morrendo muito rápido e eu queria equilibrar desta forma

muito obrigado

Link para o post
Compartilhar em outros sites

Entendi, não é complicado de fazer, mas não acha que é muita coisa para colocar piso em piso? Tipo, o castle é só em um 'andar', z = valorÚnico? 

Feliz daquele que ensina o que sabe, e aprende o que ensina.

 

               

star-wars-animated-gif-23.gif

Link para o post
Compartilhar em outros sites

@DouglasVinicius Ia demorar um pouco, kkk, mas sim, é possível de pegar em massa, agora o seguinte, o seu castle tem outros 'andares'? Ou é só em um plano?

Feliz daquele que ensina o que sabe, e aprende o que ensina.

 

               

star-wars-animated-gif-23.gif

Link para o post
Compartilhar em outros sites

@DouglasVinicius Terminei, colega, no servidor que efetuo testes de scripts está funcional, agora me diz uma coisa, você sabe me dizer se seu castle tem algum globalStorage que salva se o mesmo tá aberto ou não? 

Feliz daquele que ensina o que sabe, e aprende o que ensina.

 

               

star-wars-animated-gif-23.gif

Link para o post
Compartilhar em outros sites

@DouglasVinicius sem problemas, pode postar seu script? Porque o script de verificar se os players são atacados na área é ativado quando o player perde vida, e toda vida ele vai tá chamando o script, eu gostaria de colocar um storage que tem no castle para rodar o script só quando o castle abrir, entende? 

Feliz daquele que ensina o que sabe, e aprende o que ensina.

 

               

star-wars-animated-gif-23.gif

Link para o post
Compartilhar em outros sites

@lordzetros Posso sim, os únicos scripts que eu tenho ai são

 

Abrir as portas e fechar as portas

Citar

local day = "tuesday"                            --Mude o dia que o evento será executado aqui. EM INGLÊS.
local id = 1547
local posis = {  
    {x = 3084, y = 569, z = 6},  -- posição da barreira
    {x = 3085, y = 569, z = 6},  -- posição da barreira 
    {x = 3086, y = 569, z = 6}, -- posição da barreira 
    {x = 3087, y = 569, z = 6}, -- posição da barreira 
    {x = 3088, y = 569, z = 6}, -- posição da barreira 
    {x = 3084, y = 567, z = 6}, -- posição da barreira 
    {x = 3085, y = 567, z = 6}, -- posição da barreira 
    {x = 3086, y = 567, z = 6}, -- posição da barreira
    {x = 3087, y = 567, z = 6}, -- posição da barreira  
    {x = 3088, y = 567, z = 6},   -- posição da barreira 

function onTime()
    if os.date("%A") == day then
        for i = 1, #posis do
            local item = getTileItemById(posis, id).uid
            if item > 0 then
                doRemoveItem(item, 1)
            else
                doCreateItem(id, 1, posis)
            end
        end
    end
    return true
end

Teleport

 

Citar

local configuration = {
    day = "tuesday",
    to_pos = {x = 3186, y = 568, z = 3},    --Para onde o teleport levará.
    pos = {x = 3186, y = 574, z = 3},       --Onde o teleport será criado.
    teleport_id = 1387,                --ID do teleport.
    aid = 3434,                        --Action ID do teleport.
}
function onTime()
    if os.date("%A") == configuration.day then
        local item = getTileItemById(configuration.pos, configuration.teleport_id).uid
        if item < 1 then
            local tp = doCreateTeleport(configuration.teleport_id, configuration.to_pos, configuration.pos)
            doItemSetAttribute(tp, "aid", configuration.aid)
            broadcastMessage("Suba no trono e termine o castle", MESSAGE_STATUS_WARNING)
        end
    end
    return true
end

 

Globalevents

Citar

    <globalevent name="openterca" time="01:00" event="script" value="castle/open1.lua"/>
    <globalevent name="closeterca" time="01:30" event="script" value="castle/close1.lua"/>
    <globalevent name="tpterca" time="01:29" event="script" value="castle/tp1.lua"/>

o horário está assim porque servidor está 3 horas adiantado

Link para o post
Compartilhar em outros sites
  • Solução

Em data/creaturescripts/scripts/ crie um arquivo chamado castleDano.lua e adicione o seguinte código dentro:

local posicoes_castle = {
[1] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 7}},
[2] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 6}},
[3] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 5}},
[4] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 4}},
}

local porcento = 0.2 --  0.2 = 20%

function players_area(fromPosition, toPosition)
	local players = {}
	for _, pid in ipairs(getPlayersOnline()) do
		local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z}
		local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z}
		local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z)
		for index = 0, math.abs(toPosition.z - fromPosition.z) do
			f.z = min + index
			t.z = min + index
			if (isInRange(getPlayerPosition(pid), f, t)) then
				table.insert(players, pid)
			end
		end    
	end
	return players
end 

function onStatsChange(cid, attacker, type, combat, value)
	if (type == STATSCHANGE_HEALTHLOSS and isPlayer(attacker) and isPlayer(cid) and getGlobalStorageValue(25580) == 2) then
		local total = {}
		for k = 1, #posicoes_castle do
			table.insert(total, players_area(posicoes_castle[k].supEsquerdo, posicoes_castle[k].infDireito))
		end
		if (isInArray(total, getPlayerPosition(cid)) and isInArray(total, getPlayerPosition(attacker))) then
			local valor_m = porcento * value
			doTargetCombatHealth(attacker, cid, combat, valor_m, valor_m, COLOR_NONE)
		end
	end
	return true
end

 

Em data/creaturescripts/creaturescripts.xml adicione a seguinte linha abaixo de uma semelhante:

<event type="statschange" name="reduzCastle" event="script" value="castleDano.lua"/>

 

Em data/creaturescripts/scripts/login.lua adicione isto abaixo de outro semelhante (registerCreatureEvent):

registerCreatureEvent(cid, "reduzCastle")

 

 

Agora modificando seu script, no Teleport.lua

local configuration = {
    day = "tuesday",
    to_pos = {x = 3186, y = 568, z = 3},    --Para onde o teleport levará.
    pos = {x = 3186, y = 574, z = 3},       --Onde o teleport será criado.
    teleport_id = 1387,                --ID do teleport.
    aid = 3434,                        --Action ID do teleport.
}
function onTime()
    if os.date("%A") == configuration.day then
        local item = getTileItemById(configuration.pos, configuration.teleport_id).uid
        if item < 1 then
            local tp = doCreateTeleport(configuration.teleport_id, configuration.to_pos, configuration.pos)
            doItemSetAttribute(tp, "aid", configuration.aid)
            broadcastMessage("Suba no trono e termine o castle", MESSAGE_STATUS_WARNING)
            setGlobalStorageValue(25580, 2)
        end
    end
    return true
end

 

E no close1.lua - close1 é igual open1, certo? Se for, adicione isto no close1 mesmo (poderiam ter feito 1 script para as duas coisas, mas tudo bem):

local day = "tuesday"                            --Mude o dia que o evento será executado aqui. EM INGLÊS.
local id = 1547
local posis = {  
    {x = 3084, y = 569, z = 6},  -- posição da barreira
    {x = 3085, y = 569, z = 6},  -- posição da barreira 
    {x = 3086, y = 569, z = 6}, -- posição da barreira 
    {x = 3087, y = 569, z = 6}, -- posição da barreira 
    {x = 3088, y = 569, z = 6}, -- posição da barreira 
    {x = 3084, y = 567, z = 6}, -- posição da barreira 
    {x = 3085, y = 567, z = 6}, -- posição da barreira 
    {x = 3086, y = 567, z = 6}, -- posição da barreira
    {x = 3087, y = 567, z = 6}, -- posição da barreira  
    {x = 3088, y = 567, z = 6},   -- posição da barreira 
} 
function onTime()
    if os.date("%A") == day then
        for i = 1, #posis do
            local item = getTileItemById(posis, id).uid
            if item > 0 then
                doRemoveItem(item, 1)
            else
                doCreateItem(id, 1, posis)
            end
        end
	setGlobalStorageValue(25580, 1)
    end
    return true
end

 

EXPLICAÇÃO:

A ideia é fazer com que o player que sofreu o ataque ganhe 20% do dano total que recebeu.
Na parte das posicoes_castle do script que fiz, tu vai configurar o canto superior esquerdo e inferior direito da área total de cada andar 

Segue imagem para demonstração:

Screenshot_42.thumb.png.b3f7de6229d586bad1bac39d78e0f357.png

Feliz daquele que ensina o que sabe, e aprende o que ensina.

 

               

star-wars-animated-gif-23.gif

Link para o post
Compartilhar em outros sites
15 horas atrás, lordzetros disse:

Em data/creaturescripts/scripts/ crie um arquivo chamado castleDano.lua e adicione o seguinte código dentro:


local posicoes_castle = {
[1] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 7}},
[2] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 6}},
[3] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 5}},
[4] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 4}},
}

local porcento = 0.2 --  0.2 = 20%

function players_area(fromPosition, toPosition)
	local players = {}
	for _, pid in ipairs(getPlayersOnline()) do
		local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z}
		local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z}
		local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z)
		for index = 0, math.abs(toPosition.z - fromPosition.z) do
			f.z = min + index
			t.z = min + index
			if (isInRange(getPlayerPosition(pid), f, t)) then
				table.insert(players, pid)
			end
		end    
	end
	return players
end 

function onStatsChange(cid, attacker, type, combat, value)
	if (type == STATSCHANGE_HEALTHLOSS and isPlayer(attacker) and isPlayer(cid) and getGlobalStorageValue(25580) == 2) then
		local total = {}
		for k = 1, #posicoes_castle do
			table.insert(total, players_area(posicoes_castle[k].supEsquerdo, posicoes_castle[k].infDireito))
		end
		if (isInArray(total, getPlayerPosition(cid)) and isInArray(total, getPlayerPosition(attacker))) then
			local valor_m = porcento * value
			doTargetCombatHealth(attacker, cid, combat, valor_m, valor_m, COLOR_NONE)
		end
	end
	return true
end

 

Em data/creaturescripts/creaturescripts.xml adicione a seguinte linha abaixo de uma semelhante:


<event type="statschange" name="reduzCastle" event="script" value="castleDano.lua"/>

 

Em data/creaturescripts/scripts/login.lua adicione isto abaixo de outro semelhante (registerCreatureEvent):


registerCreatureEvent(cid, "reduzCastle")

 

 

Agora modificando seu script, no Teleport.lua


local configuration = {
    day = "tuesday",
    to_pos = {x = 3186, y = 568, z = 3},    --Para onde o teleport levará.
    pos = {x = 3186, y = 574, z = 3},       --Onde o teleport será criado.
    teleport_id = 1387,                --ID do teleport.
    aid = 3434,                        --Action ID do teleport.
}
function onTime()
    if os.date("%A") == configuration.day then
        local item = getTileItemById(configuration.pos, configuration.teleport_id).uid
        if item < 1 then
            local tp = doCreateTeleport(configuration.teleport_id, configuration.to_pos, configuration.pos)
            doItemSetAttribute(tp, "aid", configuration.aid)
            broadcastMessage("Suba no trono e termine o castle", MESSAGE_STATUS_WARNING)
            setGlobalStorageValue(25580, 2)
        end
    end
    return true
end

 

E no close1.lua - close1 é igual open1, certo? Se for, adicione isto no close1 mesmo (poderiam ter feito 1 script para as duas coisas, mas tudo bem):


local day = "tuesday"                            --Mude o dia que o evento será executado aqui. EM INGLÊS.
local id = 1547
local posis = {  
    {x = 3084, y = 569, z = 6},  -- posição da barreira
    {x = 3085, y = 569, z = 6},  -- posição da barreira 
    {x = 3086, y = 569, z = 6}, -- posição da barreira 
    {x = 3087, y = 569, z = 6}, -- posição da barreira 
    {x = 3088, y = 569, z = 6}, -- posição da barreira 
    {x = 3084, y = 567, z = 6}, -- posição da barreira 
    {x = 3085, y = 567, z = 6}, -- posição da barreira 
    {x = 3086, y = 567, z = 6}, -- posição da barreira
    {x = 3087, y = 567, z = 6}, -- posição da barreira  
    {x = 3088, y = 567, z = 6},   -- posição da barreira 
} 
function onTime()
    if os.date("%A") == day then
        for i = 1, #posis do
            local item = getTileItemById(posis, id).uid
            if item > 0 then
                doRemoveItem(item, 1)
            else
                doCreateItem(id, 1, posis)
            end
        end
	setGlobalStorageValue(25580, 1)
    end
    return true
end

 

EXPLICAÇÃO:

A ideia é fazer com que o player que sofreu o ataque ganhe 20% do dano total que recebeu.
Na parte das posicoes_castle do script que fiz, tu vai configurar o canto superior esquerdo e inferior direito da área total de cada andar 

Segue imagem para demonstração:

Screenshot_42.thumb.png.b3f7de6229d586bad1bac39d78e0f357.png

 

Oie, desculpa te incomodar, mas eu fiz tudo certinho, e não aconteceu nada, coloquei para reduzir até 90% e nada aconteceu

 

meu castledano modificado

 

Citar

local posicoes_castle = {
[1] = {supEsquerdo = {x = 3073, y = 536, z = 6}, infDireito = {x = 3213, y = 623, z = 6}},
[2] = {supEsquerdo = {x = 3073, y = 536, z = 5}, infDireito = {x = 3213, y = 623, z = 5}},
[3] = {supEsquerdo = {x = 3073, y = 536, z = 4}, infDireito = {x = 3213, y = 623, z = 4}},
[4] = {supEsquerdo = {x = 3073, y = 536, z = 3}, infDireito = {x = 3213, y = 623, z = 3}},
}

local porcento = 0.9 --  0.2 = 20%

function players_area(fromPosition, toPosition)
	local players = {}
	for _, pid in ipairs(getPlayersOnline()) do
		local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z}
		local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z}
		local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z)
		for index = 0, math.abs(toPosition.z - fromPosition.z) do
			f.z = min + index
			t.z = min + index
			if (isInRange(getPlayerPosition(pid), f, t)) then
				table.insert(players, pid)
			end
		end    
	end
	return players
end 

function onStatsChange(cid, attacker, type, combat, value)
	if (type == STATSCHANGE_HEALTHLOSS and isPlayer(attacker) and isPlayer(cid) and getGlobalStorageValue(25580) == 2) then
		local total = {}
		for k = 1, #posicoes_castle do
			table.insert(total, players_area(posicoes_castle[k].supEsquerdo, posicoes_castle[k].infDireito))
		end
		if (isInArray(total, getPlayerPosition(cid)) and isInArray(total, getPlayerPosition(attacker))) then
			local valor_m = porcento * value
			doTargetCombatHealth(attacker, cid, combat, valor_m, valor_m, COLOR_NONE)
		end
	end
	return true
end

 

Lembrando que eu estou em linux, se for melhor para ti fazer um tiler, eu mudo sim um por um sem probleminhas kk 

Link para o post
Compartilhar em outros sites

@DouglasVinicius Nenhum erro? Tipo, se tu achar que não mudou porque o cara tá tirando o mesmo dano, isso é normal, porque com esse script ele não 'reduz o dano' diretamente, tipo, o cara tira 600 de dano, se eu configurar para 'reduzir' 10%, então ele depois de tirar 600 de dano, o script vai dá 10% de vida para o usuário que sofreu o dano. Tecnicamente se o player não morrer, o atacante tirou 540 de dano.

Feliz daquele que ensina o que sabe, e aprende o que ensina.

 

               

star-wars-animated-gif-23.gif

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo