Ir para conteúdo
  • 0

Weapon Script.


othereality

Pergunta

Eu tava querendo fazer o seguinte um script que eu ia por em todas as weapons do OT, esse script não tem nenhum efeito a menos que o player tenha um storage "x".

Dai se o player tiver a storage ele regenera o level * 2 por ataque.

 

Eu consegui um script que regenera vida a partir de uma equação, mas percebi que a média de dano que era de 100 ~ 250 antes, com o mesmo char, depois de por o script, passou para 20 ~ 60 mais ou menos.

 

Acho que deu pra entender né.. auiehaue

Qualquer coisa só perguntar.

Obrigado a todos que ajuderem!

 

 

EDIT:

 

Eu encontrei esse script em no OTLand:

function onStatsChange(cid, attacker, type, combat, value)
local reset = getReset(cid)
if type == STATSCHANGE_HEALTHLOSS then
	if combat == COMBAT_PHYSICALDAMAGE then
		if reset > 0 then
			local value = (value + value*((reset/5) + 1))
			doTargetCombatHealth(attacker, cid, combat, -value, -value, CONST_ME_DRAWBLOOD)
			return false
		end
	end
end
return true
end

Não tem nada a ver com weapons, mas pelo que eu entendi ele altera o ataque básico do jogo né?

Talvez alguém consiga fazer o meu pedido usando esse script de ideia.. sei lá..

 

 

> Creditos do script a DarkHaos do OTLand.

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

Posts Recomendados

  • 0

Da pra usar essa mesma função.

local storage = 3456

function onStatsChange(cid, attacker, type, combat, value)
   if type == STATSCHANGE_HEALTHLOSS then
       if isPlayer(attacker) then
           if getPlayerStorageValue(attacker, storage) > 0 then
               doCreatureAddHealth(attacker, getPlayerLevel(attacker)*2)   
           end
       end
   end
return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

Primeiro em data/creaturescripts/scripts, cria um arquivo chamado "health_level" sem as aspas e nele cole:

local storage = 3456

function onStatsChange(cid, attacker, type, combat, value)
   if type == STATSCHANGE_HEALTHLOSS then
    if isPlayer(attacker) then
	    if getPlayerStorageValue(attacker, storage) > 0 then
		    doCreatureAddHealth(attacker, getPlayerLevel(attacker)*2)   
	    end
    end
   end
return true
end

function onCombat(cid, target)
   if isPlayer(cid) then
       registerCreatureEvent(target, "healthLevel")
   end
return true
end

 

Agora no creaturescripts.xml as tags:

<event type="statschange" name="healthLevel" event="script" value="health_level.lua"/>
<event type="combat" name="healthHit" event="script" value="health_level.lua"/>

 

E no login.lua, antes do último return true põe:

registerCreatureEvent(cid, "healthHit")

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Jhon!

eu mudei essa linha só pq fica meio engraçado recuperar sempre igual..

                            doCreatureAddHealth(attacker, math.random(getPlayerLevel(attacker) * 2,getPlayerLevel(attacker) * 3))

 

>> Eu queria fazer um outro pedido mas não sei se é possível, é um script igual a esse só que ao invés de recuperar HP quando hita, ele vai dar o mesmo valor em dano extra em holy!

Link para o comentário
Compartilhar em outros sites

  • 0

@OtheReality -

Tenta adaptar essa função no script no lugar do "docreatureaddhealth"

local hit = math.random(getPlayerLevel(attacker) * 2,getPlayerLevel(attacker) * 3)
doTargetCombatHealth(attacker, cid, COMBAT_HOLYDAMAGE, -hit, -hit, CONST_ME_HOLYDAMAGE)

 

@preier -

local vocation = {4,8}
local porcentagem = 1 -- 1%
function onStatsChange(cid, attacker, type, combat, value)
   if type == STATSCHANGE_HEALTHLOSS then
	    if isPlayer(attacker) then
			    if isInArray(vocation, getPlayerVocation(attacker)) then
				    doCreatureAddHealth(attacker, getCreatureMaxHealth(attacker)*(porcentagem/100))                        
			    end
	    end
   end
return true
end
function onCombat(cid, target)
   if isPlayer(cid) then
	    registerCreatureEvent(target, "healthPercent")
   end
return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou! Brigadão :)

 

Só que o dano tava bem mais alto do que deveria, um level 25 tava batendo 1300 extra...

Então eu botei pra bater só 1 de dano e percebi que ele tava hitando 20, então deduzi que tava multiplicando o dano por 20. Dai fiz isso:

-hit * 0.05, -hit * 0.05,

Então eu resolvi isso, mas ta dando um outro erro que não atrapalha no in game mas acho que talvez cause lag..

 

Cada vez que alguém da um hit com o dano extra aparece no console:

[Error - CreatureEvent::executeCombat] Call stack overflow.

 

E uma ultima coisinha.. sabe a mensagem no server log quando o player da algum dano:

13:30 You deal 4 damage to a zombie.

Tem como fazer ela aparecer pro dano extra também?

Link para o comentário
Compartilhar em outros sites

  • 0

AAAAAAAAHHH

depois de milênios testando eu percebi o que era o primeiro erro..

local hit = math.random(getPlayerLevel(attacker) * 2,getPlayerLevel(attacker) * 3)

doTargetCombatHealth(attacker, cid, COMBAT_HOLYDAMAGE, -hit, -hit, CONST_ME_HOLYDAMAGE)

Tava dando erro por que o hit minimo e o máximo eram pela mesma equação então podia ser o minimo maior que o máximo dai dava erro.

Troquei por:

 

local hit1 = getPlayerLevel(attacker) * 2

local hit2 = getPlayerLevel(attacker) * 3

doTargetCombatHealth(attacker, cid, COMBAT_HOLYDAMAGE, -hit1, -hit2, CONST_ME_HOLYDAMAGE)

Isso concertou o problema de multiplicar por 20 tb..

vlw Jhon pela ajuda =D

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

  • 0

Ainda não!

Preciso de ajuda ainda.

Eu consegui entender o que ta causando o bug mas não consigo resolver!

 

 

local hit1 = (getPlayerLevel(attacker) * 2)

local hit2 = (getPlayerLevel(attacker) * 3)

doTargetCombatHealth(attacker, cid, COMBAT_HOLYDAMAGE, -hit1, -hit2, CONST_ME_HOLYDAMAGE)

O que causa o bug do console:

[Error - CreatureEvent::executeCombat] Call stack overflow.

E também o bug de multiplicar 20x o valor que vc botou é usar valores negativos na formula.

 

Quando eu tiro os sinais de menos(-) o script funciona perfeitamente.. só que não quero healar o target.

>>> Será que alguém sabe o que eu tenho que fazer pra resolver isso?!

Link para o comentário
Compartilhar em outros sites

  • 0

Ahh mas assim fica ruim pq não mostra o dano.

E também os bichos imunes ou fortes ou fracos contra holy não vão ter diferença.

 

EDIT:

 

será que não da pra fazer por function onAttack() ?

 

EDIT2:

 

Eu achei um script parecido com o que eu queria e alterei o que eu sabia e ficou assim:

 

function onAttack(cid, target)
	local i = 1
	local storage = 23195
	local v = getPlayerVocation(cid)
	local damageMin = (getPlayerLevel(cid) * 2)
	local damageMax = (getPlayerLevel(cid) * 3)
	function doAttack()
			if v == 7 then
					doTargetCombatHealth(target, COMBAT_HOLYDAMAGE, -damageMin, -damageMax, CONST_ME_HOLYDAMAGE)
			end
			exhaustion.set(cid, storage, 1)
	end
	if exhaustion.get(cid, storage) then
			return false
	else
			repeat
							addEvent(doAttack, 50, 1)
							i = i - 1
			until i <= 0
	end
	if i ~= 1 then
			i = 1
	end
	return true
end

Ta funcionando direitinho o dano, mas eu tenho que ficar tirando e botando o target do inimigo se não ele só da um ataque e para.

E eu tenho que botar o target no inimigo só depois que acabou aquele exhaust entre um ataque e outra que define no vocations.xml

 

EDIT3:

 

A de healar quando bate que tava funcionando direitinho começou a dar o seguinte erro:

 

[22/06/2012 18:42:47] [Error - CreatureScript Interface]

[22/06/2012 18:42:47] data/creaturescripts/scripts/health_level.lua:onStatsChange

[22/06/2012 18:42:47] Description:

[22/06/2012 18:42:47] data/creaturescripts/scripts/health_level.lua:-1: attempt to call a number value

 

Mas continua funcionando.

 

 

E eu cheguei a fazer funcionar a de dano, mas quando tentei por só pra quem te o storage ela bugo tb =/

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

  • 0

onStatsChange roda o script qndo a creature perde vida. no 1º script q vc postou o script vai rodar tb quando a creature perder vida por um exori do atacante.

 

onAttack roda quando vc clica pra atacar. entao vc vai ter q atacar, parar de atacar, atacar pra ela rodar.

 

eu ainda n entendi direito oq vc quer fazer, vc qr fazer q quando o player ataca um bicho/player, ele (o player q atacou) perca vida ou a creature atacada perca?

 

o script é pra rodar enquando um player estiver atakando usando uma determinada weapon? ou funcionar com as magias tb?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...