Пример #1
0
 public override void AoiEntry(VisibleObject obj)
 {
     if (Script != null)
     {
         Script.ExecuteScriptableFunction("OnEntry", new HybrasylWorldObject(obj));
     }
 }
Пример #2
0
 public override void AoiDeparture(VisibleObject obj)
 {
     if (Script != null)
     {
         Script.ExecuteScriptableFunction("OnLeave", new HybrasylWorldObject(obj));
     }
 }
Пример #3
0
            public void ShowTo(User invoker, VisibleObject target = null, bool runCheck = true)
            {
                // Either we must have an associate already known to us, one must be passed, or we must have a script defined
                if (Associate == null && target == null && Script == null)
                {
                    Logger.ErrorFormat("DialogSequence {0} has no known associate or script...?", Name);
                    // Need better error handling here
                    return;
                }
                if (PreDisplayCallback != null && runCheck)
                {
                    var invocation = new ScriptInvocation();
                    invocation.Function = PreDisplayCallback;
                    invocation.Invoker = invoker;
                    invocation.Associate = target == null ? Associate : target;
                    if (Script != null)
                        invocation.Script = Script;

                    if (invocation.Execute())
                        Dialogs.First().ShowTo(invoker, target);
                }
                else
                {
                    Dialogs.First().ShowTo(invoker, target);
                }
            }
Пример #4
0
 public override void ShowTo(User invoker, VisibleObject invokee)
 {
     var dialogPacket = base.GenerateBasePacket(invoker, invokee);
     if (Options.Count > 0)
     {
         dialogPacket.WriteByte((byte)Options.Count);
         foreach (var option in Options)
         {
             dialogPacket.WriteString8(option.OptionText);
         }
         invoker.Enqueue(dialogPacket);
         RunCallback(invoker, invokee);
     }
 }
Пример #5
0
 public override void ShowTo(User invoker, VisibleObject invokee)
 {
     return;
 }
Пример #6
0
            public ServerPacket GenerateBasePacket(User invoker, VisibleObject invokee)
            {
                byte color = 0;
                ushort sprite = 0;
                byte objType = 0;

                var dialogPacket = new ServerPacket(0x30);
                dialogPacket.WriteByte((byte)(DialogType));

                if (invokee is Creature)
                {
                    var creature = (Creature) invokee;
                    sprite = (ushort) (0x4000 + creature.Sprite);
                    objType = 1;
                }
                else if (invokee is Item)
                {
                    var item = (Item) invokee;
                    objType = 2;
                    sprite = (ushort)(0x8000 + item.Sprite);
                    color = item.Color;
                }
                else if (invokee is Reactor)
                {
                    objType = 4;
                }

                if (DisplaySprite != 0)
                    sprite = DisplaySprite;

                dialogPacket.WriteByte(objType);
                dialogPacket.WriteUInt32(invokee.Id);
                dialogPacket.WriteByte(0); // Unknown value
                Logger.DebugFormat("Sprite is {0}", sprite);
                dialogPacket.WriteUInt16(sprite);
                dialogPacket.WriteByte(color);
                dialogPacket.WriteByte(0); // Unknown value
                dialogPacket.WriteUInt16(sprite);
                dialogPacket.WriteByte(color);
                Logger.DebugFormat("Dialog group id {0}, index {1}", Sequence.Id, Index);
                dialogPacket.WriteUInt16((ushort)Sequence.Id);
                dialogPacket.WriteUInt16((ushort)Index);

                dialogPacket.WriteBoolean(HasPrevDialog());
                dialogPacket.WriteBoolean(HasNextDialog());

                dialogPacket.WriteByte(0);
                dialogPacket.WriteString8(invokee.Name);
                if (DisplayText != null)
                {
                    dialogPacket.WriteString16(DisplayText);
                }
                return dialogPacket;
            }
Пример #7
0
 public bool IsInViewport(VisibleObject obj)
 {
     return Map.EntityTree.GetObjects(GetViewport()).Contains(obj);
 }
Пример #8
0
 public void AoiDeparture(VisibleObject obj, int transmitDelay)
 {
     Logger.DebugFormat("Removing item with ID {0}", obj.Id);
     var removePacket = new ServerPacket(0x0E);
     removePacket.TransmitDelay = transmitDelay;
     removePacket.WriteUInt32(obj.Id);
     Enqueue(removePacket);
 }
Пример #9
0
        public override void ShowTo(VisibleObject obj)
        {
            if (obj is User)
            {
                var user = obj as User;
                SendUpdateToUser(user.Client);
            }
            else if (obj is Item)
            {
                var item = obj as Item;
                SendVisibleItem(item);

            }
        }
Пример #10
0
 public override void ShowTo(VisibleObject obj)
 {
     if (obj is User)
     {
         var user = obj as User;
         user.SendDoorUpdate(X, Y, Closed,
             IsLeftRight);
     }
 }
Пример #11
0
 public virtual void AoiDeparture(VisibleObject obj)
 {
 }
Пример #12
0
 public virtual void AoiEntry(VisibleObject obj)
 {
 }
Пример #13
0
 public override void ShowTo(VisibleObject obj)
 {
     if (obj is User)
     {
         var user = obj as User;
         user.SendVisibleItem(this);
     }
 }
Пример #14
0
 public virtual void AoiEntry(VisibleObject obj)
 {
 }
Пример #15
0
 public virtual void AoiDeparture(VisibleObject obj)
 {
 }
Пример #16
0
 public void RunCallback(User target, VisibleObject associate)
 {
     ActiveDialog.RunCallback(target, associate);
 }
Пример #17
0
 public virtual void ShowTo(VisibleObject obj)
 {
 }
Пример #18
0
 public virtual void HideFrom(VisibleObject obj)
 {
 }
Пример #19
0
        public override void ShowTo(VisibleObject obj)
        {
            if (obj is User)
            {
                var user = obj as User;
                var npcPacket = new ServerPacket(0x07);
                npcPacket.WriteUInt16(0x01); // Number of mobs in this packet
                npcPacket.WriteUInt16(X);
                npcPacket.WriteUInt16(Y);
                npcPacket.WriteUInt32(Id);
                npcPacket.WriteUInt16((ushort)(Sprite + 0x4000));
                npcPacket.WriteByte(0);
                npcPacket.WriteByte(0);
                npcPacket.WriteByte(0);
                npcPacket.WriteByte(0);
                npcPacket.WriteByte((byte)Direction);
                npcPacket.WriteByte(0);

                npcPacket.WriteByte(2); // Dot color. 0 = monster, 1 = nonsolid monster, 2=NPC
                npcPacket.WriteString8(Name);
                user.Enqueue(npcPacket);
            }
        }
Пример #20
0
 public virtual int Distance(VisibleObject obj)
 {
     return(Point.Distance(obj.X, obj.Y, X, Y));
 }
Пример #21
0
 public override void AoiDeparture(VisibleObject obj)
 {
     Logger.DebugFormat("Removing item with ID {0}", obj.Id);
     var removePacket = new ServerPacket(0x0E);
     removePacket.WriteUInt32(obj.Id);
     Enqueue(removePacket);
 }
Пример #22
0
        public void Insert(VisibleObject obj, byte x, byte y, bool updateClient = true)
        {
            if (Objects.Add(obj))
            {
                obj.Map = this;
                obj.X = x;
                obj.Y = y;

                EntityTree.Add(obj);

                var user = obj as User;
                if (user != null)
                {
                    if (updateClient)
                    {
                        obj.SendMapInfo();
                        obj.SendLocation();
                    }
                    Users.Add(user.Name, user);
                }

                var value = obj as Objects.Reactor;
                if (value != null)
                {
                    Reactors.Add(new Tuple<byte, byte>((byte)x,(byte)y), value);
                }

                var affectedObjects = EntityTree.GetObjects(obj.GetViewport());

                foreach (var target in affectedObjects)
                {
                    target.AoiEntry(obj);
                    obj.AoiEntry(target);
                }

            }
        }
Пример #23
0
 public override void AoiEntry(VisibleObject obj)
 {
     Logger.DebugFormat("Showing {0} to {1}", Name, obj.Name);
     obj.ShowTo(this);
 }
Пример #24
0
        public void Remove(VisibleObject obj)
        {
            if (Objects.Remove(obj))
            {
                EntityTree.Remove(obj);

                if (obj is User)
                {
                    var user = obj as User;
                    Users.Remove(user.Name);
                    if (user.ActiveExchange != null)
                        user.ActiveExchange.CancelExchange(user);
                }

                var affectedObjects = EntityTree.GetObjects(obj.GetViewport());

                foreach (var target in affectedObjects)
                {
                    // If the target of a Remove is a player, we insert a 250ms delay to allow the animation
                    // frame to complete.
                    if (target is User)
                        ((User)target).AoiDeparture(obj, 250);
                    else
                        target.AoiDeparture(obj);

                    obj.AoiDeparture(target);
                }

                obj.Map = null;
                obj.X = 0;
                obj.Y = 0;
            }
        }
Пример #25
0
            public void RunCallback(User target, VisibleObject associateOverride = null)
            {
                if (CallbackFunction != null)
                {
                    VisibleObject associate = associateOverride == null ? Sequence.Associate as VisibleObject : associateOverride;

                    var invocation = new ScriptInvocation();
                    invocation.Invoker = target;
                    invocation.Associate = associate;
                    invocation.Function = CallbackFunction;

                    associate.Script.ExecuteFunction(invocation);
                }
            }
Пример #26
0
 public void NotifyNearbyAoiEntry(VisibleObject objectToAdd)
 {
     foreach (var obj in EntityTree.GetObjects(objectToAdd.GetViewport()))
     {
         if (obj is User)
         {
             Logger.DebugFormat("Notifying {0} of item {1} at {2},{3} with sprite {4}", obj.Name, objectToAdd.Name,
                 objectToAdd.X, objectToAdd.Y, objectToAdd.Sprite);
             var user = obj as User;
             user.AoiEntry(objectToAdd);
         }
     }
 }
Пример #27
0
 public virtual void ShowTo(User invoker, VisibleObject invokee)
 {
 }
Пример #28
0
        public void NotifyNearbyAoiDeparture(VisibleObject objectToRemove)
        {
            foreach (var obj in EntityTree.GetObjects(objectToRemove.GetViewport()))
            {
                if (obj is User)
                {
                    var user = obj as User;
                    user.AoiDeparture(objectToRemove);
                }
            }

        }
Пример #29
0
 public override void ShowTo(User invoker, VisibleObject invokee)
 {
     var dialogPacket = base.GenerateBasePacket(invoker, invokee);
     invoker.Enqueue(dialogPacket);
     RunCallback(invoker, invokee);
 }
Пример #30
0
 public static int Distance(VisibleObject obj1, VisibleObject obj2)
 {
     return Distance(obj1.X, obj1.Y, obj2.X, obj2.Y);
 }
Пример #31
0
 public override void ShowTo(User invoker, VisibleObject invokee)
 {
     Logger.DebugFormat("active for input dialog: {0}, {1}, {2}", TopCaption, InputLength, BottomCaption);
     var dialogPacket = base.GenerateBasePacket(invoker, invokee);
     dialogPacket.WriteString8(TopCaption);
     dialogPacket.WriteByte((byte)InputLength);
     dialogPacket.WriteString8(BottomCaption);
     invoker.Enqueue(dialogPacket);
     RunCallback(invoker, invokee);
 }
Пример #32
0
 public static int Distance(VisibleObject obj, int x, int y)
 {
     return Distance(obj.X, obj.Y, x, y);
 }
Пример #33
0
 /// <summary>
 /// Start a dialog sequence. The player must not already be in a dialog or in
 /// any other state.
 /// </summary>
 /// <param name="target"></param>
 /// <param name="dialogStart"></param>
 /// <returns></returns>
 public bool StartDialog(VisibleObject target, DialogSequence dialogStart)
 {
     if (dialogStart.Id == null)
     {
         Logger.ErrorFormat("Can't start a dialog with a null dialog ID: {0}", dialogStart.Name);
         return false;
     }
     if (!InDialog)
     {
         Associate = target;
         ActiveDialogSequence = dialogStart;
         ActiveDialog = dialogStart.Dialogs.First();
         return true;
     }
     return false;
 }
Пример #34
0
 public override void AoiEntry(VisibleObject obj)
 {
     ShowTo(obj);
 }
Пример #35
0
            /// <summary>
            /// Set the index of a current dialog session. This dialog should be either the previous or next dialog
            /// from the last one (index wise) and the player must be in a dialog.
            /// </summary>
            ///
            /// <param name="target">The target merchant.</param>
            /// <param name="pursuitId">A dialog sequence (pursuit) ID.</param>
            /// <param name="newIndex">The index to which we are navigating.</param>
            /// <returns></returns>

            public bool SetDialogIndex(VisibleObject target, int pursuitId, int newIndex)
            {
                // Sanity checking
                if (target != Associate || pursuitId != CurrentPursuitId ||
                    target.Map.Id != User.Map.Id || !InDialog)
                {
                    Logger.DebugFormat("{0}: Failed check", User.Name);
                    return false;
                }

                if (newIndex == (ActiveDialog.Index + 1) &&
                    newIndex != ActiveDialogSequence.Dialogs.Count() &&
                    newIndex < (ActiveDialogSequence.Dialogs.Count()))
                {
                    // Next
                    Logger.DebugFormat("Advancing one dialog");
                    ActiveDialog = ActiveDialogSequence.Dialogs[ActiveDialog.Index + 1];
                    Logger.DebugFormat("Active dialog is type {0}", ActiveDialog.GetType());
                    return true;
                }
                else if (newIndex == (ActiveDialog.Index - 1) &&
                    newIndex >= 0)
                {
                    // Previous
                    Logger.DebugFormat("Rewinding one dialog");
                    ActiveDialog = ActiveDialogSequence.Dialogs[ActiveDialog.Index - 1];
                    return true;
                }

                return false;
            }
Пример #36
0
 public override void AoiEntry(VisibleObject obj)
 {
     ShowTo(obj);
 }