Sub SummonStuff(SSpell,SumItem,int SumNum,int CondNumber)
/if (${Me.Invis}) /return
/if (${FindItemCount[=${SumItem}]}>=${SumNum}) /return 0
/declare SumResult string local FALSE
/declare SummonAttempts int local 0
/declare CurrentCount int local 0
/declare OriginalCount int local ${FindItemCount[=${SumItem}]}
DEBUGBUFF SummonStuff Enter SSpell: ${SSpell} SumItem: ${SumItem} SumNum: ${SumNum}
/if (${CondNumber} && ${If[${Cond[${CondNumber}]},0,1]}) /return 0
/while (${FindItemCount[=${SumItem}]}<${SumNum}) {
/if (${Me.FreeInventory}==0) {
/echo No room in inventory skipping summoning >> ${SumItem} <<.
/break
}
/varset CurrentCount ${FindItemCount[=${SumItem}]}
| Summon axes for zerkers had to be hard coded because spell is same name as the item summoned.
/if (${Select[${Me.Class.ShortName},BER]} && ${SSpell.Find[axe]}) {
/doevents flush Missing
/if (!${Me.CombatAbility[${SSpell}]}) {
/varset SumResult CAST_COMPONENTS
/return ${SumResult}
} else /if (!${Me.CombatAbilityReady[${SSpell}]}) {
DEBUGBUFF ${SSpell} Combat Ability not ready skipping
/varset SumResult CAST_NOT_READY
/return ${SumResult}
}
/if (${Cursor.ID}) /call CheckCursor SummonStuff 1
/docommand /disc ${SSpell}
/varset MissingComponent 0
/call CastWait "${SSpell}" SummonStuff
/doevents Missing
/if (!${MissingComponent} && !${Cursor.ID}) {
/delay 20 ${Cursor.ID}
}
/if (${Cursor.ID}) {
/varcalc SummonAttempts ${SummonAttempts}+1
/varset SumResult CAST_SUCCESS
} else {
/if (!${MissingComponent}) {
/doevents Missing
} else {
/varset SumResult CAST_COMPONENTS
}
}
} else {
| Check if summoning from an item
/if (${FindItemCount[=${SSpell}]} > 0) {
| Check if item is ready to cast
/if (${FindItem[=${SSpell}].Timer}!=0) {
DEBUGBUFF ${SSpell} Item not ready yet skipping
/varset SumResult CAST_NOT_READY
/return ${SumResult}
}
}
/if (${Cursor.ID}) /call CheckCursor SummonStuff 1
/call CastWhat "${SSpell}" ${Me.ID} SummonStuff-nomem 0 0
/varset SumResult ${Macro.Return}
}
DEBUGBUFF CheckBuffs summon item cast result ${Macro.Return} ${SumResult}
/if (${SumResult.Equal[CAST_SUCCESS]}) {
/delay 5s ${Cursor.ID}
/if (${Cursor.ID}) {
/echo Summoned >> ${SumItem} <<
/varcalc SummonAttempts ${SummonAttempts}+1
/call CheckCursor SummonStuff 1
} else /if (${FindItemCount[=${SumItem}]}==${CurrentCount} && ${SummonAttempts}>0) {
/echo Summoning >> ${SumItem} << Failed - Check reagents, timer, etc
/echo -- Turning off ${SSpell} - ${SSpell}|Summon|${SumItem}|0
/varset SummonAttempts 0
/varset SumResult CAST_COMPONENTS
/break
}
} else /if (${SumResult.Equal[CAST_COMPONENTS]}) {
/echo You are missing components. Turning Off ${SSpell}.
/break
} else /if (${Select[${SumResult},CAST_NO_RESULT,CAST_RECOVER]}) {
/break
}
/if (${SummonAttempts}>5) /break
}
/if (${Cursor.ID}) /call CheckCursor SummonStuff 0
/if (${FindItemCount[=${SumItem}]}>${OriginalCount}) /echo I now have ${FindItemCount[=${SumItem}]} of >> ${SumItem} <<
DEBUGBUFF SummonStuff Leave ${Me.FreeInventory} ${SumResult} ${SummonAttempts}
/return ${SumResult}