Assassin.iss thoughts

okumams

Active Member
Hello =) I just went into the IRC tonight looking for info. I've been workin on my personal custom update for the assassin.iss but am not sure all the skills are firing as desired. I was told by Valerian and Nuprecon that Pygar is working on an update for Assassin. I figured I share some of my notes if they could be any help.

I'm a Info Sys Analyst and have coded with php, javascript, html, VB6. I've pecked through the Example.iss, EQ2Bot.iss, and Brigand.iss to help me come up with what I have coded thus far. But I still need the assistance from the Masters.

Code:
;My Concept
;Stealth Attack
;	Mortal Blade;Jugular Slice;Execute;Pinpoint Blade;Moon Blade
;DebuffAttack
;     Mesh
;HOAttack
;	Squeeze
;	Bladed Opening
;PoisonAttack
;	Noxious Enfeeblement
;	Poisonous Bite
;	Death Mark
;	Poison Combination
;DoTAttack
;	Gushing Wound
;	Impale
;	Scarring Blow
;Stun
;	Cheap Shot
;	Masked Strike
;If Named or Epic
;	RapidStealthAttack
;Else
;	Activate Stealth if not on
;StealthAttack
Sooo.... My present Combat routine is as follows... I've included EQ2Echo states for debugging purposes

Code:
function Combat_Routine(int xAction)
{
	AutoFollowingMA:Set[FALSE]
	if ${Me.ToActor.WhoFollowing(exists)}
	{
		EQ2Execute /stopfollow
	}

	EQ2Echo CastStealthAttack > console
	;EQ2Echo CastStealthAttack >> zexodata.txt
	call CastStealthAttack
	EQ2Echo .. > console
	;EQ2Echo .. >> zexodata.txt

	EQ2Echo DebuffAttack > console
	;EQ2Echo DebuffAttack >> zexodata.txt
	Call DebuffAttack
	EQ2Echo .. > console
	;EQ2Echo .. >> zexodata.txt

	EQ2Echo PoisonAttack > console
	;EQ2Echo PoisonAttack >> zexodata.txt
	Call PoisonAttack
	EQ2Echo .. > console
	;EQ2Echo .. >> zexodata.txt

	EQ2Echo DoTAttack > console
	;EQ2Echo DoTAttack >> zexodata.txt
	Call DoTAttack
	EQ2Echo .. > console
	;EQ2Echo .. >> zexodata.txt

	EQ2Echo StunAttack > console
	;EQ2Echo StunAttack >> zexodata.txt
	Call StunAttack
	EQ2Echo .. > console
	;EQ2Echo .. >> zexodata.txt

	if ${Actor[${KillTarget}].IsNamed}
	{
		call RapidStealthAttack
	}
	 else
	{
		if !${Me.ToActor.IsStealthed}
		{
			if ${Me.Ability[Spy].IsReady}
			{
				Target ${KillTarget}
				EQ2Echo Casting Spy > console
				;EQ2Echo Casting Spy >> zexodata.txt
				Me.Ability[Spy]:Use
			} 
			elseif ${Me.Ability[Stealth].IsReady}
			{
				Target ${KillTarget}
				EQ2Echo Casting Stealth > console
				;EQ2Echo Casting Stealth >> zexodata.txt
				Me.Ability[Stealth]:Use
			}
		}
	}

	EQ2Echo CastStealthAttack > console
	;EQ2Echo CastStealthAttack >> zexodata.txt
	call CastStealthAttack
	EQ2Echo .. > console
	;EQ2Echo .. >> zexodata.txt
}
I'm breaking up the functions in separate posts below. The problem I think I'm having is that the spells are not queueing properly. It casts one, and while it casts another interrupts or something. wondering if I need to set the cast immediately flag in CastSpellRange to false.
 
Last edited:

okumams

Active Member
Code:
function DebuffAttack()
{
	;Mesh
	if ${Me.Ability[${SpellType[52]}].IsReady}
	{
		EQ2Echo .     Casting Mesh > console
		;EQ2Echo .     Casting Mesh >> zexodata.txt
		call CastSpellRange 52 0 0 0 ${KillTarget} 0 0 0 0 1
		EQ2Echo .. > console
		;EQ2Echo .. >> zexodata.txt
	}
	EQ2Echo HOAttack > console
	;EQ2Echo HOAttack >> zexodata.txt
	Call HOAttack
}

function HOAttack()
{
	;Lucky Break
	if ${Me.Ability[${SpellType[303]}].IsReady}
	{
		EQ2Echo .     Casting Lucky Break > console
		;EQ2Echo .     Casting Lucky Break >> zexodata.txt
		call CastSpellRange 303 0 0 0 ${KillTarget} 0 0 0 0 1
		wait 4
		EQ2Echo .     Casting Squeeze > console
		;EQ2Echo .     Casting Squeeze >> zexodata.txt
		call CastSpellRange 51 0 0 0 ${KillTarget} 0 0 0 0 1
	}
	;Bladed Opening
	if ${Me.Ability[${SpellType[381]}].IsReady}
	{
		EQ2Echo .     Casting Bladed Opening > console
		;EQ2Echo .     Casting Bladed Opening >> zexodata.txt
		call CastSpellRange 381 0 0 0 ${KillTarget} 0 0 0 0 1
	}
}
 

okumams

Active Member
Code:
function PoisonAttack()
{
	;Noxious Enfeeblement
	if ${Me.Ability[Noxious Enfeeblement].IsReady}
	{
		Target ${KillTarget}
		EQ2Echo .     Casting Noxious Enfeeblement > console
		;EQ2Echo .     Casting Noxious Enfeeblement >> zexodata.txt
		Me.Ability[Noxious Enfeeblement]:Use
		wait 4
	}
	;Poisonous Bite
	if ${Me.Ability[Poisonous Bite].IsReady}
	{
		Target ${KillTarget}
		EQ2Echo .     Casting Poisonous Bite > console
		;EQ2Echo .     Casting Poisonous Bite >> zexodata.txt
		Me.Ability[Poisonous Bite]:Use
		wait 4
	}
	;Death Mark
	if ${Me.Ability[${SpellType[50]}].IsReady}
	{
		EQ2Echo .     Casting Death Mark > console
		;EQ2Echo .     Casting Death Mark >> zexodata.txt
		call CastSpellRange 50 0 0 0 ${KillTarget} 0 0 0 0 1
	}
	;Poison Combination
	if ${Me.Ability[${SpellType[388]}].IsReady}
	{
		EQ2Echo .     Casting Poison Combination > console
		;EQ2Echo .     Casting Poison Combination >> zexodata.txt
		call CastSpellRange 388 0 0 0 ${KillTarget} 0 0 0 0 1
	}
}
 

okumams

Active Member
Code:
function DoTAttack()
{
	;Gushing Wound
	if ${Me.Ability[${SpellType[71]}].IsReady}
	{
		EQ2Echo .     Casting Gushing Wound > console
		;EQ2Echo .     Casting Gushing Wound >> zexodata.txt
		call CastSpellRange 71 0 0 0 ${KillTarget} 0 0 0 0 1
	}
	;Deadly Impale
	if ${Me.Ability[${SpellType[70]}].IsReady}
	{
		EQ2Echo .     Casting Impale > console
		;EQ2Echo .     Casting Impale >> zexodata.txt
		call CastSpellRange 70 0 0 0 ${KillTarget} 0 0 0 0 1
	}
	;Scarring Blow
	if ${Me.Ability[${SpellType[150]}].IsReady}
	{
		EQ2Echo .     Casting Scarring Blow > console
		;EQ2Echo .     Casting Scarring Blow >> zexodata.txt
		call CastSpellRange 150 0 0 0 ${KillTarget} 0 0 0 0 1
	}
}
 

okumams

Active Member
Code:
function StunAttack()
{
	;Cheap Shot
	if ${Me.Ability[${SpellType[190]}].IsReady}
	{
		EQ2Echo Cheap Shot > console
		;EQ2Echo Cheap Shot >> zexodata.txt
		call CastSpellRange 190 0 0 1 ${KillTarget} 0 0 0 0 1
		EQ2Echo .. > console
		;EQ2Echo .. >> zexodata.txt
	}
	;Masked Strike
	if ${Me.Ability[${SpellType[186]}].IsReady}
	{
		EQ2Echo Masked Strike > console
		;EQ2Echo Masked Strike >> zexodata.txt
		call CastSpellRange 186 0 0 1 ${KillTarget} 0 0 0 0 1
		EQ2Echo .. > console
		;EQ2Echo .. >> zexodata.txt
	}
}
The desire here is to move behind the mob after casting cheap shot to hit the mob with masked strike. But I'm not sure I'm doing it correctly.
 
Last edited:

okumams

Active Member
Code:
function CastStealthAttack()
{
	;; function CastSpellRange(int start, int finish, int xvar1, int xvar2, int TargetID, int notall, int refreshtimer, bool castwhilemoving, bool IgnoreMaintained, int CastSpellWhen, bool IgnoreIsReady)

	EQ2Echo In Cast Stealth Attack > console
	;EQ2Echo In Cast Stealth Attack >> zexodata.txt
	;if ${Me.Ability[${SpellType[96]}].IsReady} && ${AoEMode} && ${Mob.Count}>=2
	;{
		;Slate
	;	EQ2Echo .     Casting Slate > console
	;	call CastSpellRange 96 0 1 0 ${KillTarget} 0 0 0 0 1
	;}
	;elseif ${Me.Ability[${SpellType[95]}].IsReady} && ${AoEMode} && ${Mob.Count}>=2
	;{
		;Stealth Assault
	;	EQ2Echo .    Casting Stealth Assault > console
	;	call CastSpellRange 95 0 1 0 ${KillTarget} 0 0 0 0 1
	;}
	;Execute
	if (${Me.ToActor.IsStealthed}) && (${Me.Ability[${SpellType[130]}].IsReady})
	{
		EQ2Echo .     Casting Execute > console
		;EQ2Echo .     Casting Execute >> zexodata.txt
		call CastSpellRange 130 0 0 0 ${KillTarget} 0 0 0 0 1
		wait 4
	}
	;Mortal Blade
	if (${Me.ToActor.IsStealthed}) && (${Me.Ability[${SpellType[131]}].IsReady})
	{
		EQ2Echo .     Casting Mortal Blade > console
		;EQ2Echo .     Casting Mortal Blade >> zexodata.txt
		call CastSpellRange 131 0 0 0 ${KillTarget} 1 0 0 0 1
		wait 4
	}
	;Moon Blade
	if (${Me.ToActor.IsStealthed}) && (${Me.Ability[${SpellType[135]}].IsReady})
	{
		EQ2Echo .    Casting Moon Blade > console
		;EQ2Echo .    Casting Moon Blade >> zexodata.txt
		call CastSpellRange 135 0 0 0 ${KillTarget} 0 0 0 0 1
		wait 4
	}
	;Jugular Slice
	if (${Me.ToActor.IsStealthed}) && (${Me.Ability[${SpellType[132]}].IsReady})
	{
		EQ2Echo .     Casting Jugular Slice > console
		;EQ2Echo .     Casting Jugular Slice >> zexodata.txt
		call CastSpellRange 132 0 0 0 ${KillTarget} 0 0 0 0 1
		wait 4
	}
	;Pinpoint Blade
	if (${Me.ToActor.IsStealthed}) && (${Me.Ability[${SpellType[133]}].IsReady})
	{
		EQ2Echo .    Casting Pinpoint Blade > console
		;EQ2Echo .    Casting Pinpoint Blade >> zexodata.txt
		call CastSpellRange 133 0 0 0 ${KillTarget} 0 0 0 0 1
		wait 4
	}
	;Fatal FollowUp
	if ${Me.Ability[${SpellType[999]}].IsReady}
	{
		EQ2Echo .    Casting Fatal Followup > console
		;EQ2Echo .    Casting Fatal Followup >> zexodata.txt
		call CastSpellRange 999 0 0 0 ${KillTarget} 0 0 0 0 1
	}
	;Death Blow
	if (${Me.Ability[${SpellType[360]}].IsReady}) && (${Actor[$KillTarget}].Health} < 20)
	{
		EQ2Echo .    Casting DeathBlow > console
		;EQ2Echo .    Casting DeathBlow >> zexodata.txt
		call CastSpellRange 360 0 0 0 ${KillTarget} 0 0 0 0 1
	}
	EQ2Echo Exiting Cast Stealth Attack > console
	;EQ2Echo Exiting Cast Stealth Attack >> zexodata.txt
}
 

okumams

Active Member
Code:
function RapidStealthAttack()
{
	;Disfiguring Strike
	if ${Me.Ability[${SpellType[110]}].IsReady}
	{
		EQ2Echo .     Casting Disfiguring Strike > console
		;EQ2Echo .     Casting Disfiguring Strike >> zexodata.txt
		call CastSpellRange 110 0 0 0 ${KillTarget} 0 0 0 0 1
	}

	;Concealment
	if ${Me.Ability[${SpellType[359]}].IsReady}
	{
		EQ2Echo .     Casting Concealment > console
		;EQ2Echo .     Casting Concealment >> zexodata.txt
		call CastSpellRange 359 0 0 0 ${KillTarget} 0 0 0 0 1
	}

	;Honed Reflexes (Speed Buff)
	if ${Me.Ability[${SpellType[155]}].IsReady}
	{
		EQ2Echo .     Casting Honed Reflexes > console
		;EQ2Echo .     Casting Honed Reflexes >> zexodata.txt
		call CastSpellRange 155 0 0 0 ${KillTarget} 0 0 0 0 1
	}

	;Velium Strike
	if ${Me.Ability[${SpellType[151]}].IsReady}
	{
		EQ2Echo .     Casting Velium Strike > console
		;EQ2Echo .     Casting Velium Strike >> zexodata.txt
		call CastSpellRange 151 0 0 0 ${KillTarget} 0 0 0 0 1
	}

	;Sinister Strike
	if ${Me.Ability[${SpellType[998]}].IsReady}
	{
		EQ2Echo .     Casting Sinister Strike > console
		;EQ2Echo .     Casting Sinister Strike >> zexodata.txt
		call CastSpellRange 998 0 0 0 ${KillTarget} 0 0 0 0 1
	}
}
 

okumams

Active Member
I added the following code after the initial stealth attack function call

Code:
	;Evasive Maneuvers
	if ${Me.Ability[Evasive Maneuvers].IsReady}
	{
		Target ${KillTarget}
		;EQ2Echo .     Casting Evasive Maneuvers > console
		;;EQ2Echo .     Casting Evasive Maneuvers >> zexodata.txt
		Me.Ability[Evasive Maneuvers]:Use
		wait 4
	}

	;Deadly Focus
	if ${Me.Ability[Deadly Focus].IsReady}
	{
		Target ${KillTarget}
		;EQ2Echo .     Casting Deadly Focus > console
		;;EQ2Echo .     Casting Deadly Focus >> zexodata.txt
		Me.Ability[Deadly Focus]:Use
		wait 4
	}

	;Exacting
	if ${Me.Ability[Exacting].IsReady}
	{
		Target ${KillTarget}
		;EQ2Echo .     Casting Exacting > console
		;;EQ2Echo .     Casting Exacting >> zexodata.txt
		Me.Ability[Exacting]:Use
		wait 4
	}
I've added all these changes to my personal copy of the Assassin.iss file. I didn't want to mess the original.
 
Top Bottom