EQ Crash - reproducable

Need help with a macro you are writing? Ask here!

Moderator: MacroQuest Developers

pukpuk
orc pawn
orc pawn
Posts: 12
Joined: Thu Sep 02, 2004 5:35 am

EQ Crash - reproducable

Post by pukpuk » Wed Sep 15, 2004 7:03 am

After updating to the new version of MQ2, I recognized that my "old" macro does bring EQ to crash immediately after starting to cast a "HoT-spell". Does anyone of u recognized simliar problems or is there any change in spellcasting...?

Here is the important part of my macro:

#turbo 40
#include spell_routines.inc

#Chat Chat
#Chat tell

Sub Main

/declare mychannel string outer XXXchannel
/declare healspell string outer Supernal Light
/declare fasthealspell string outer Supernal Remedy
/declare hotspell string outer Supernal Elixir
/declare daspell string outer Divine Barrier
/declare yaulpspell string outer Yaulp V
/declare spellhastebuff string outer Blessing of Reverence
/declare selfhpbuff string outer Blessed Armor of the Risen
/declare Poison string outer Antidote
/declare Disease string outer Counteract Disease
/declare gatespell string outer Gate
/declare Resurrect string outer Reviviscence
/declare Manastone int outer 0
/declare virtue string outer Virtue
/declare symbol string outer Symbol of Kazad
/declare stun string outer Tarnation
/declare hammer string outer Unswerving Hammer of Faith
/declare ddspell string outer Condemnation

/declare hotpoint int outer 85
/declare healpoint int outer 65
/declare fasthealpoint int outer 40
/declare dacastpoint int outer 30


/declare worsthurtid int outer 0
/declare worsthurt string outer NULL
/declare worsthp int outer 100
/declare worsthurtmember int outer 99
/declare hottimer0 int outer 0
/declare hottimer1 int outer 0
/declare hottimer2 int outer 0
/declare hottimer3 int outer 0
/declare hottimer4 int outer 0
/declare hottimer5 int outer 0
/declare spellrange int outer 100
/declare gmember int outer
/declare rodwait int outer 0
/declare following int outer 0
/declare follname string outer NULL
/declare autosit int outer 1
/declare manatimer int outer 0
/declare oomtimer int outer 0


/join ${mychannel}
/echo AFaeppo Active, running in Autohealmode
/echo Casting ${hotspell} at ${hotpoint}% HP
/echo Casting ${healspell} at ${healpoint}% HP
/echo Casting ${fasthealspell} at ${fasthealpoint}% HP
/echo Casting ${daspell} at ${dacastpoint}% HP


:healloop

/call GMCheck

/if (${Me.PctHPs}<=${dacastpoint}) {
/if (${Me.SpellReady[${daspell}]}) {
/g Casting DA!! <<WARNING>> DA!! No Heals for 18 seconds
:retryda
/call Cast "${daspell}"
/delay 1
/if ((!${Me.Buff[${daspell}].ID})&&(${Me.SpellReady[${daspell}]})) /goto :retryda
}
/if (!${Me.Buff[${daspell}].ID}) {
/target myself
/call cast "${fasthealspell}" gem4 1s
}
}

/varset worsthurt NULL
/varset worsthp 100
/varset worsthurtid 0
/varset worsthurtmember 99
/for gmember 0 to ${Group}
/if (${Group[${gmember}].Distance}<=${spellrange}) {
/if (${Group[${gmember}].PctHPs}<${worsthp}) {
/varset worsthurt ${Group[${gmember}].Name}
/varset worsthp ${Group[${gmember}].PctHPs}
/varset worsthurtid ${Group[${gmember}].ID}
/varset worsthurtmember ${gmember}
}
}
/next gmember
/if (${worsthurtid}<>0) {
/target id ${worsthurtid}
/if (${worsthp}<=${fasthealpoint}) {
/call cast "${fasthealspell}" gem4 1s
/g Fast Heal for %t (1.8s)
/goto :healloop
}
/if (${worsthp}<=${healpoint}) {
/call cast "${healspell}" gem3 1s
/g Heal for %t (3s)
/goto :healloop
}
/if (${worsthp}<=${hotpoint}) /call HOT
}

/if (${worsthurtid}==0) {
/if ((!${Me.Buff[Blessing of Reverence].ID})&&(!${Me.Buff[Aura of Reverence].ID})&&(${Me.PctMana}>=60)) {
/target myself
/call cast "${spellhastebuff}" gem7 5s
}
/if ((!${Me.Buff[${selfhpbuff}].ID})&&(!${Me.Buff[Blessing of the Nine].ID})&&(!${Me.Buff[Protection of the Nine].ID})&&(!${Me.Buff[Protection of the Glades].ID})&&(!${Me.Buff[Protection of the Cabbage].ID})&&(${Me.PctMana}>=60)) {
/target myself
/call cast "${selfhpbuff}" gem7 5s
}
}

/call CheckEvents
/if ((${Bool[${Me.Standing}]})&&(!${Me.Mount.ID})&&(${Me.SpellReady[${yaulpspell}]})&&(!${Me.Buff[${yaulpspell}].ID})) {
/call Cast "${yaulpspell}"
}

/goto :healloop
/return

Sub HOT

/if (${worsthurtmember}==0) {
/if (${hottimer0}==0) {
/call cast "${hotspell}" gem5 1s
/g HoT for %t (3s)
/varset hottimer0 1
/timed 300 /varset hottimer0 0
}
}

/if (${worsthurtmember}==1) {
/if (${hottimer1}==0) {
/call cast "${hotspell}" gem5 1s
/g HoT for %t (3s)
/varset hottimer1 1
/timed 300 /varset hottimer1 0
}
}
/if (${worsthurtmember}==2) {
/if (${hottimer2}==0) {
/call cast "${hotspell}" gem5 1s
/g HoT for %t (3s)
/varset hottimer2 1
/timed 300 /varset hottimer2 0
}
}
/if (${worsthurtmember}==3) {
/if (${hottimer0}==0) {
/call cast "${hotspell}" gem5 1s
/g HoT for %t (3s)
/varset hottimer3 1
/timed 300 /varset hottimer3 0
}
}
/if (${worsthurtmember}==4) {
/if (${hottimer0}==0) {
/call cast "${hotspell}" gem5 1s
/g HoT for %t (3s)
/varset hottimer4 1
/timed 300 /varset hottimer4 0
}
}
/if (${worsthurtmember}==5) {
/if (${hottimer5}==0) {
/call cast "${hotspell}" gem5 1s
/g HoT for %t (3s)
/varset hottimer5 1
/timed 300 /varset hottimer5 0
}
}
/Return

ztrike
a ghoul
a ghoul
Posts: 83
Joined: Fri Mar 26, 2004 1:17 pm
Contact:

Post by ztrike » Wed Sep 15, 2004 7:08 am

Code: Select all

#turbo 40 
#include spell_routines.inc 

#Chat Chat 
#Chat tell 

Sub Main 

/declare mychannel string outer XXXchannel 
/declare healspell string outer Supernal Light 
/declare fasthealspell string outer Supernal Remedy 
/declare hotspell string outer Supernal Elixir 
/declare daspell string outer Divine Barrier 
/declare yaulpspell string outer Yaulp V 
/declare spellhastebuff string outer Blessing of Reverence 
/declare selfhpbuff string outer Blessed Armor of the Risen 
/declare Poison string outer Antidote 
/declare Disease string outer Counteract Disease 
/declare gatespell string outer Gate 
/declare Resurrect string outer Reviviscence 
/declare Manastone int outer 0 
/declare virtue string outer Virtue 
/declare symbol string outer Symbol of Kazad 
/declare stun string outer Tarnation 
/declare hammer string outer Unswerving Hammer of Faith 
/declare ddspell string outer Condemnation 

/declare hotpoint int outer 85 
/declare healpoint int outer 65 
/declare fasthealpoint int outer 40 
/declare dacastpoint int outer 30 


/declare worsthurtid int outer 0 
/declare worsthurt string outer NULL 
/declare worsthp int outer 100 
/declare worsthurtmember int outer 99 
/declare hottimer0 int outer 0 
/declare hottimer1 int outer 0 
/declare hottimer2 int outer 0 
/declare hottimer3 int outer 0 
/declare hottimer4 int outer 0 
/declare hottimer5 int outer 0 
/declare spellrange int outer 100 
/declare gmember int outer 
/declare rodwait int outer 0 
/declare following int outer 0 
/declare follname string outer NULL 
/declare autosit int outer 1 
/declare manatimer int outer 0 
/declare oomtimer int outer 0 


/join ${mychannel} 
/echo AFaeppo Active, running in Autohealmode 
/echo Casting ${hotspell} at ${hotpoint}% HP 
/echo Casting ${healspell} at ${healpoint}% HP 
/echo Casting ${fasthealspell} at ${fasthealpoint}% HP 
/echo Casting ${daspell} at ${dacastpoint}% HP 


:healloop 

/call GMCheck 

/if (${Me.PctHPs}<=${dacastpoint}) { 
/if (${Me.SpellReady[${daspell}]}) { 
/g Casting DA!! <<WARNING>> DA!! No Heals for 18 seconds 
:retryda 
/call Cast "${daspell}" 
/delay 1 
/if ((!${Me.Buff[${daspell}].ID})&&(${Me.SpellReady[${daspell}]})) /goto :retryda 
} 
/if (!${Me.Buff[${daspell}].ID}) { 
/target myself 
/call cast "${fasthealspell}" gem4 1s 
} 
} 

/varset worsthurt NULL 
/varset worsthp 100 
/varset worsthurtid 0 
/varset worsthurtmember 99 
/for gmember 0 to ${Group} 
/if (${Group[${gmember}].Distance}<=${spellrange}) { 
/if (${Group[${gmember}].PctHPs}<${worsthp}) { 
/varset worsthurt ${Group[${gmember}].Name} 
/varset worsthp ${Group[${gmember}].PctHPs} 
/varset worsthurtid ${Group[${gmember}].ID} 
/varset worsthurtmember ${gmember} 
} 
} 
/next gmember 
/if (${worsthurtid}<>0) { 
/target id ${worsthurtid} 
/if (${worsthp}<=${fasthealpoint}) { 
/call cast "${fasthealspell}" gem4 1s 
/g Fast Heal for %t (1.8s) 
/goto :healloop 
} 
/if (${worsthp}<=${healpoint}) { 
/call cast "${healspell}" gem3 1s 
/g Heal for %t (3s) 
/goto :healloop 
} 
/if (${worsthp}<=${hotpoint}) /call HOT 
} 

/if (${worsthurtid}==0) { 
/if ((!${Me.Buff[Blessing of Reverence].ID})&&(!${Me.Buff[Aura of Reverence].ID})&&(${Me.PctMana}>=60)) { 
/target myself 
/call cast "${spellhastebuff}" gem7 5s 
} 
/if ((!${Me.Buff[${selfhpbuff}].ID})&&(!${Me.Buff[Blessing of the Nine].ID})&&(!${Me.Buff[Protection of the Nine].ID})&&(!${Me.Buff[Protection of the Glades].ID})&&(!${Me.Buff[Protection of the Cabbage].ID})&&(${Me.PctMana}>=60)) { 
/target myself 
/call cast "${selfhpbuff}" gem7 5s 
} 
} 

/call CheckEvents 
/if ((${Bool[${Me.Standing}]})&&(!${Me.Mount.ID})&&(${Me.SpellReady[${yaulpspell}]})&&(!${Me.Buff[${yaulpspell}].ID})) { 
/call Cast "${yaulpspell}" 
} 

/goto :healloop 
/return 

Sub HOT 

/if (${worsthurtmember}==0) { 
/if (${hottimer0}==0) { 
/call cast "${hotspell}" gem5 1s 
/g HoT for %t (3s) 
/varset hottimer0 1 
/timed 300 /varset hottimer0 0 
} 
} 

/if (${worsthurtmember}==1) { 
/if (${hottimer1}==0) { 
/call cast "${hotspell}" gem5 1s 
/g HoT for %t (3s) 
/varset hottimer1 1 
/timed 300 /varset hottimer1 0 
} 
} 
/if (${worsthurtmember}==2) { 
/if (${hottimer2}==0) { 
/call cast "${hotspell}" gem5 1s 
/g HoT for %t (3s) 
/varset hottimer2 1 
/timed 300 /varset hottimer2 0 
} 
} 
/if (${worsthurtmember}==3) { 
/if (${hottimer0}==0) { 
/call cast "${hotspell}" gem5 1s 
/g HoT for %t (3s) 
/varset hottimer3 1 
/timed 300 /varset hottimer3 0 
} 
} 
/if (${worsthurtmember}==4) { 
/if (${hottimer0}==0) { 
/call cast "${hotspell}" gem5 1s 
/g HoT for %t (3s) 
/varset hottimer4 1 
/timed 300 /varset hottimer4 0 
} 
} 
/if (${worsthurtmember}==5) { 
/if (${hottimer5}==0) { 
/call cast "${hotspell}" gem5 1s 
/g HoT for %t (3s) 
/varset hottimer5 1 
/timed 300 /varset hottimer5 0 
} 
} 
/Return
(i know.. i didnt post an answer.. just think its a bit more fun to look at in code)
Ztrike out

pukpuk
orc pawn
orc pawn
Posts: 12
Joined: Thu Sep 02, 2004 5:35 am

Post by pukpuk » Wed Sep 15, 2004 3:12 pm

ok after several tests with other macros I found out, that it seems to be a bug with casting at all. I have lot of crashs if casting while running a macro.
Not tested exactly where the bugs are... Will proceed.

User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Wed Sep 15, 2004 3:22 pm

Code: Select all

#define EQ_Character__GetFocusCastingTimeModifier          0x48CC24 
in eqgame.h should fix at least one CTD in spell_routines.inc, give that a try

Neolesh
a hill giant
a hill giant
Posts: 231
Joined: Mon Aug 23, 2004 11:15 am

Post by Neolesh » Wed Sep 15, 2004 10:04 pm

This did not fix the crashing for me. Still crashing while trying to cast using spell_routines.inc

User avatar
Night Hawk
a grimling bloodguard
a grimling bloodguard
Posts: 590
Joined: Fri Aug 13, 2004 4:56 pm

Post by Night Hawk » Wed Sep 15, 2004 10:05 pm

Did you recompile after making the #define change?

Neolesh
a hill giant
a hill giant
Posts: 231
Joined: Mon Aug 23, 2004 11:15 am

Post by Neolesh » Thu Sep 16, 2004 1:34 am

Yes I had recompiled at that point. What I found out the problem was is I had a version of MQ2 that came out about an hour before the current one and I didn't know any different. It's fixed now. Apparently the CTD was more than just this one offset but the latest version of mq2 works fine. Sorry about that.

BorealisSunbinder
orc pawn
orc pawn
Posts: 12
Joined: Thu Oct 17, 2002 6:28 pm

Post by BorealisSunbinder » Thu Sep 16, 2004 2:14 am

I just wanted to acknowledge this in case someone else was chasing down the Casting-Causing-Crash problem. I had the MQ2-20040914 version of the download and was experiencing this very problem. Re-downloaded and got the MQ2-20040915 version and everything shapped right back up.

Thanks to those posting here and all the DEVS!!!

pukpuk
orc pawn
orc pawn
Posts: 12
Joined: Thu Sep 02, 2004 5:35 am

Post by pukpuk » Thu Sep 16, 2004 8:04 am

Yeah the "second" new version seems to be working very well :)

Thanks a lot!!