All pastes #623643 Raw Edit

Untitled

public text v1 · immutable
·published 2007-07-17 19:09 UTC
rendered paste body
-- Create the Mango AIScript Base object
ULD_Ironaya_AI = Mango.AIScripts.Create('ULD_Ironaya_AI');
ULD_Ironaya_AI.AgroDistance = 20; -- Experiment with this :p


-- Function prototypes (to keep it clean)
local ULD_Ironaya_AI_Init;
local ULD_Ironaya_AI_MoveInLineOfSight;
local ULD_Ironaya_AI_AttackStart;
local ULD_Ironaya_AI_DamageInflict;

-- this will check if player is drawing agro
function ULD_Ironaya_AI.CheckAggro(LuaAI,unit)
	local data = LuaAI:Data()

   	if LuaAI:GetCreature():GetDistanceSq(unit) < ULD_Ironaya_AI.AgroDistance then
		LuaAI:DoStartAttack(unit);
		if (data["IsAttacking"] == false) then
			data["IsAttacking"] = true;
			-- Cast first spell     (6603 : no stun charge / 32021 : stunning charge)
	        LuaAI:DoSay("I will crush you small one, you and your allies!",0);
	        LuaAI:DoCast(LuaAI:GetCreature(), 6603);
			LuaAI:SetData(data)
 		end

	end

end


function ULD_Ironaya_AI_Init(LuaAI)
	local data = LuaAI:Data()
	-- Initialize AI data
	data = { }
	data["IsAttacking"] = false;
	data["Arcing Smash"] = false;
	data["Arcing Smash2"] = false;
	data["Arcing Smash3"] = false;
	data["War Stomp"] = false;
	data["Knock Away"] = false;
	data["Death Wish"] = false;
	LuaAI:SetData(data)
	return true
end

function ULD_Ironaya_AI_MoveInLineOfSight(LuaAI,unit)
	ULD_Ironaya_AI.CheckAggro(LuaAI,unit) -- Check if the guard has to talk or not :)
	LuaAI:MoveInLineOfSight_agr(unit)
end

-- Called at each attack of creature by any victim
function ULD_Ironaya_AI_AttackStart(LuaAI,unit)
	local data = LuaAI:Data()
	--TODO Seems that dont work for now ... dont have time to test
	--local spellid = 12328 -- Death Wish is default
	--local randn = rand_range(1,100)
	--
	--if randn > 80 then  spellid = 12328
	--end
	--
	--LuaAI:GetCreature():StopMoving()
	--LuaAI:DoCast(unit,spellid)
	ULD_Ironaya_AI.CheckAggro(LuaAI, unit);
	LuaAI:DoStartAttack(unit)
end

function ULD_Ironaya_AI_DamageInflict(LuaAI,unit,amount_damage)
	local data = LuaAI:Data()
	local HP = LuaAI:GetCreature():GetHealth();
	local MaxHP = LuaAI:GetCreature():GetMaxHealth();
	
	if (data["Death Wish"] == false) then
		if (100 / MaxHP * HP < 35) then
			-- Death Wish
			-- Spell doesnt work
			local num3 = rand_range(0,100)
			if (num3 > 50) then spellid = 12328
			elseif (num3 < 50) then spellid = 6603
			end
		    data["Death Wish"] = true;
			LuaAI:DoCast(LuaAI:GetCreature(),spellid)
			LuaAI:SetData(data)
			return;
		end
	end
	if (data["Knock Away"] == false) then
		if (100 / MaxHP * HP <= 60) then -- Needs correct percentage!
			-- Knock Away
			-- Don't know exact spellid, using this one atm : 23382
			
			
			local num = rand_range(0,100)
			if (num >= 50) then
				LuaAI:DoSay("Get away from me!", 0); -- Was left in for fun 
			else
				LuaAI:DoSay("Begone with you!", 0); -- Was left in for fun
			end

			LuaAI:DoCast(LuaAI:GetCreature(), 23382);
			data["Knock Away"] = true;
			LuaAI:SetData(data)
			return;
		end
	end
	if (data["War Stomp"] == false) then
		if (100 / MaxHP * HP < 21) then
		   -- War Stomp
		   -- Don't know exact spellid, using this one atm : 19482
		   -- Description: Knocks nearby enemies back, stunning them.
		   LuaAI:DoCast(LuaAI:GetCreature(), 19482);
		   data["War Stomp"] = true;
			LuaAI:DoStartAttack(unit)
			LuaAI:SetData(data)
			return;
		end
	end
	if (data["Arcing Smash"] == false) then
		if (100 / MaxHP * HP < 95) then
		   -- not sure if this works
	   	   -- Arcing Smash
		   -- Don't know exact spellid, using this one atm : 16169
		   -- Description: Lashes out in a vicious arc, inflicting damage to enemies in a cone in front of the caster.
			local num1 = rand_range(0,100)
			if (num1 > 95) then spellid = 16169
			elseif (num1 < 95) then spellid = 6603
			end
			LuaAI:DoCast(unit,spellid)
		    data["Arcing Smash"] = true;
			LuaAI:SetData(data)
			return;
		end
	end

	if (data["Arcing Smash2"] == false) then
		if (100 / MaxHP * HP < 45) then
		   -- not sure if this works
	   	   -- Arcing Smash
		   -- Don't know exact spellid, using this one atm : 16169
		   -- Description: Lashes out in a vicious arc, inflicting damage to enemies in a cone in front of the caster.
			local num2 = rand_range(0,100)
			if (num2 > 80) then spellid = 16169 
			elseif (num1 < 80) then spellid = 6603
			end
			LuaAI:DoCast(unit,spellid)
		    data["Arcing Smash2"] = true;
			LuaAI:SetData(data)
			return;
		end
	end

	if (data["Arcing Smash3"] == false) then
		if (100 / MaxHP * HP < 25) then
		   -- not sure if this works
	   	   -- Arcing Smash
		   -- Don't know exact spellid, using this one atm : 16169
		   -- Description: Lashes out in a vicious arc, inflicting damage to enemies in a cone in front of the caster.
			local num4 = rand_range(0,100)
			if (num4 > 85) then spellid = 16169
			elseif (num4 < 85) then spellid = 6603
			end
			LuaAI:DoCast(unit,spellid)
		    data["Arcing Smash2"] = true;
			LuaAI:SetData(data)
			return;
		end
	end

end

-- Assign the functions
ULD_Ironaya_AI.Init 				= ULD_Ironaya_AI_Init;
ULD_Ironaya_AI.MoveInLineOfSight	= ULD_Ironaya_AI_MoveInLineOfSight;
ULD_Ironaya_AI.AttackStart			= ULD_Ironaya_AI_AttackStart;
ULD_Ironaya_AI.DamageInflict		= ULD_Ironaya_AI_DamageInflict;