Example #1
0
 // When something gets in range (I think it is 350 or 400) we want
 // to add it to correct lists and set some events
 public override void OnEnterRange(Object Obj, Object DistObj)
 {
     if (DistObj.IsPlayer())
     {
         stuffInRange.Add(DistObj);
     }
 }
        // When something gets in range (I think it is 350 or 400) we want
        // to add it to correct lists and set some events
        public override void OnEnterRange(Object Obj, Object DistObj)
        {
            if (DistObj.IsPlayer())
            {
                //Obj.Say("YOU HAVE COME IN RANGE " + DistObj.Name);
                stuffInRange.Add(DistObj);

                // Just some small talk every 10s
                //Obj.EvtInterface.AddEvent(SayStuff, 10000, 0);

                // Checks HP of boss when receiving damage
                Obj.EvtInterface.AddEventNotify(EventName.OnReceiveDamage, CheckHP);

                // Bragging about killing player when players die
                DistObj.EvtInterface.AddEventNotify(EventName.OnDie, OnKilledPlayer);

                // Spawns magic wall to make everybody fight in his labolatory

                // Despawns adds and maigc walls on boss death
                Obj.EvtInterface.AddEventNotify(EventName.OnDie, RemoveAllAdds);
                Obj.EvtInterface.AddEventNotify(EventName.OnDie, RemoveWall);
            }

            // We are adding the magic walls we are spawning below to the list to quickly dispose them when needed
            else if (DistObj.IsGameObject())
            {
                GameObject GO = DistObj as GameObject;
                if (GO.Entry == 2000441)
                {
                    // Despawns wall when boss dies
                    magicWalls.Add(GO);
                }
            }
        }
Example #3
0
        public void RemoveObject(Object obj)
        {
            //Log.Success("RemoveObject", "[" + X + "," + Y + "] Cell Remove " + Obj.Name);

            if (obj._Cell == this)
            {
                if (obj.IsPlayer())
                {
                    Players.Remove(obj.GetPlayer());
                }

                Objects.Remove(obj);
                obj._Cell = null;
            }
        }
Example #4
0
        public bool IsVisibleBForA(Object a, Object b)
        {
            if (a == null || b == null || a.IsDisposed || b.IsDisposed)
            {
                return(false);
            }

            if (a == b || !a.IsActive || !b.IsActive || !b.IsVisible)
            {
                return(false);
            }

            if (b.IsPlayer() && (b.GetPlayer().Client == null || !b.GetPlayer().Client.IsPlaying()))
            {
                return(false);
            }

            return(true);
        }
Example #5
0
        public bool UpdateRange(Object curObj, bool forceUpdate = false)
        {
            if (!curObj.IsActive || curObj.IsDisposed)
            {
                return(false);
            }

            if (curObj.X == 0 && curObj.Y == 0)
            {
                return(false);
            }

            float distance = curObj.Get2DDistanceToWorldPoint(curObj.LastRangeCheck);

            if (distance > 100 || forceUpdate)
            {
                curObj.LastRangeCheck.X = curObj.WorldPosition.X;
                curObj.LastRangeCheck.Y = curObj.WorldPosition.Y;
            }
            else
            {
                return(false);
            }

            curObj.OnRangeUpdate();

            GetRangedObject(curObj, 1, distObj =>
            {
                if (distObj == null)
                {
                    return;
                }

                if (IsVisibleBForA(curObj, distObj) && !curObj.HasInRange(distObj))
                {
                    curObj.AddInRange(distObj);
                    distObj.AddInRange(curObj);

                    if (curObj.IsPlayer())
                    {
                        distObj.SendMeTo(curObj.GetPlayer());
                    }

                    if (distObj.IsPlayer())
                    {
                        curObj.SendMeTo(distObj.GetPlayer());
                    }
                }
            });

            Object dist;

            for (var i = 0; i < curObj.ObjectsInRange.Count; ++i)
            {
                if ((dist = curObj.ObjectsInRange[i]) == null)
                {
                    continue;
                }

                if (dist.Get2DDistanceToObject(curObj) > MaxVisibilityRange || !IsVisibleBForA(curObj, dist))
                {
                    curObj.RemoveInRange(dist);
                    dist.RemoveInRange(curObj);
                    i--;
                }
            }

            return(true);
        }