Moderator: MacroQuest Developers


Code: Select all
${Spawn[whatever].NearestSpawn[1, npc radius 150].Distance} Code: Select all
${Spawn[loc y x npc radius 10]}
Code: Select all
bool MQ2SpawnType::GetMember(MQ2VARPTR VarPtr, PCHAR Member, PCHAR Index, MQ2TYPEVAR &Dest)
{
.
.
.
case Distance:
Dest.Float=GetDistance(pSpawn->X,pSpawn->Y);
Dest.Type=pFloatType;
return true;
.
.
.
}Code: Select all
static inline FLOAT GetDistance(FLOAT X1,FLOAT Y1)
{
FLOAT dX=X1-((PSPAWNINFO)pCharSpawn)->X;
FLOAT dY=Y1-((PSPAWNINFO)pCharSpawn)->Y;
return sqrtf(dX*dX + dY*dY);
}
static inline FLOAT GetDistance(FLOAT X1,FLOAT Y1,FLOAT X2,FLOAT Y2)
{
FLOAT dX=X1-X2;
FLOAT dY=Y1-Y2;
return sqrtf(dX*dX + dY*dY);
}
Code: Select all
/varset SpawnID ${Spawn[whatever].ID}
/varset NearSpawnID ${Spawn[id ${SpawnID}].NearestSpawn[].ID}
/echo Distance: ${Math.Distance[${Spawn[id ${SpawnID}].Y},${Spawn[id ${SpawnID}].Y}:${Spawn[id ${NearSpawnID}].Y},${Spawn[id ${NearSpawnID}].Y}]}


Not quite. If you want to check the distances of the nearest 10 mobs against the nearest 15 mobs (I found ways to simplify this).Night Hawk wrote:a^2+b^2=c^2
Code: Select all
Check to see the distance between Candidate and CheckMob (to be used in a loop):
${Math.Sqrt[${Math.Calc[${Math.Calc[${NearestSpawn[${CheckMob},npc].X}-${NearestSpawn[${Candidate},npc].X}]}*${Math.Calc[${NearestSpawn[${CheckMob},npc].X}-${NearestSpawn[${Candidate},npc].X}]}]}+${Math.Calc[${Math.Calc[${NearestSpawn[${CheckMob},npc].Y}-${NearestSpawn[${Candidate},npc].Y}]}+${Math.Calc[${NearestSpawn[${CheckMob},npc].Y}-${NearestSpawn[${Candidate},npc].Y}]}]}]}
Also known as c = sqrt ( (x-x1)^2 + (y-y1)^2 )
Code: Select all
${NearestSpawn[${Candidate},npc].NearestSpawnDistance[${CheckMob},npc]}