;== This function plots a point hypotenuse feet directly ahead of me. function plotXY(float hypotenuse) { ;other 2 sides of the triangle declare a float local declare b float local ;angle c of a triangle declare c int local ;x,y loc hypotenuse ahead of me if (!${Variable[plotX](exists)}) declare plotX float script if (!${Variable[plotY](exists)}) declare plotY float script if (${debug}==1) echo X Y: ${Me.X} ${Me.Y} if (${debug}==1) echo Heading: ${Me.Heading} c:Set[${Math.Calc[${Me.Heading}%90]}] if (${debug}==1) echo Heading mod 90 (angle c of a right triangle): ${c} a:Set[${Math.Cos[${c}]}] a:Set[${Math.Calc[${a}*${hypotenuse}]}] if (${debug}==1) echo Length of side a: ${a} b:Set[${Math.Sin[${c}]}] b:Set[${Math.Calc[${b}*${hypotenuse}]}] if (${debug}==1) echo Length of side b: ${b} ;Select which way to face if (${Me.Heading} >= 0 && ${Me.Heading} <= 90) { if (${debug}==1) echo Heading between 0 and 90 plotX:Set[${Math.Calc[${Me.X}+${a}]}] plotY:Set[${Math.Calc[${Me.Y}-${b}]}] if (${debug}==1) echo plotX plotY: ${plotX} ${plotY} } elseif (${Me.Heading} >= 91 && ${Me.Heading} <= 180) { if (${debug}==1) echo Heading between 91 and 180 plotX:Set[${Math.Calc[${Me.X}-${b}]}] plotY:Set[${Math.Calc[${Me.Y}-${a}]}] if (${debug}==1) echo plotX plotY: ${plotX} ${plotY} } elseif (${Me.Heading} >= 181 && ${Me.Heading} <= 270) { if (${debug}==1) echo Heading between 181 and 270 plotX:Set[${Math.Calc[${Me.X}-${a}]}] plotY:Set[${Math.Calc[${Me.Y}+${b}]}] if (${debug}==1) echo plotX plotY: ${plotX} ${plotY} } elseif (${Me.Heading} >= 271 && ${Me.Heading} <= 359) { if (${debug}==1) echo Heading between 271 and 359 plotX:Set[${Math.Calc[${Me.X}+${b}]}] plotY:Set[${Math.Calc[${Me.Y}+${a}]}] if (${debug}==1) echo plotX plotY: ${plotX} ${plotY} } } ;== Plot a line from me to a point. For instance plots a stright ;== line between me and a merchant, or me and a corpse, regardless of ;== which way I am facing. function plotLine(float pLToX, float pLToY) { declare debug int local 0 ;== the new point on the line if (!${Variable[pLX](exists)}) declare pLX float script if (!${Variable[pLY](exists)}) declare pLY float script ;== slope of the line declare pLRise float local declare pLRun float local declare pLSlope float local ;== hypotenuse of the triangle declare pLHypotenuse float local ;== sine and cosine of the triangle declare pLSin float local declare pLCos float local ;== How far away to check for obstacles declare pLNewHypotenuse int local 30 ;== determine the slope (rise/run) of the line if (${debug}==1) echo My X,Y: ${Me.X},${Me.Y} \tTrying to get to X,Y: ${pLToX},${pLToY} pLRise:Set[${Math.Calc[${pLToY}-${Me.Y}]}] pLRun:Set[${Math.Calc[${pLToX}-${Me.X}]}] if (${pLRun}) pLSlope:Set[${Math.Calc[${pLRise}/${pLRun}]}] if (${debug}==1) echo Rise: ${pLRise} \tRun: ${pLRun} \tSlope: ${pLSlope} ;== Make a right triangle from the line and solve for hypot. The hpot is ;== the same as the distance from my loc to the point we're trying to get to. ;== a^2 + b^2 = c^2 pLHypotenuse:Set[${Math.Sqrt[${Math.Calc[${pLRun}^^2+${pLRise}^^2]}]}] if (${debug}==1) echo Hypotenuse: ${pLHypotenuse} \tDistance: ${Math.Distance[${Me.X},${Me.Y},${pLToX},${pLToY}]} ;== Make a new triange with the same sine/cosine, make hypot pLNewHypot if (${pLHypotenuse}) { pLSin:Set[${Math.Calc[${pLRise}/${pLHypotenuse}]}] pLCos:Set[${Math.Calc[${pLRun}/${pLHypotenuse}]}] if (${debug}==1) echo sin: ${pLSin} \tcos: ${pLCos} } pLX:Set[${Math.Calc[${pLCos}*${pLNewHypotenuse}]}] pLY:Set[${Math.Calc[${pLSin}*${pLNewHypotenuse}]}] if (${debug}==1) echo New point pLNewHypot feet away X,Y: ${pLX},${pLY} \tDistance: ${Math.Distance[${Me.X},${Me.Y},${pLX},${pLY}]} pLX:Set[${Math.Calc[${Me.X}+${pLX}]}] pLY:Set[${Math.Calc[${Me.Y}+${pLY}]}] if (${debug}==1) echo New point + my loc X,Y: ${Math.Calc[${Me.X}+${pLX}]},${Math.Calc[${Me.Y}+${pLY}]} ;== if the distance to the point we're trying to reach is closer ;== then the new point then set pLXY to the point we're trying to reafch if (${Math.Distance[${Me.X},${Me.Y},${pLX},${pLY}]} > ${pLNewHypotenuse}) { if (${debug}==1) echo Distance to new point is further than new hypot. pLX:Set[${pLToX}] pLY:Set[${pLToY}] } }