/// <summary>
        /// </summary>
        /// <param name="self">
        /// </param>
        /// <param name="caller">
        /// </param>
        /// <param name="target">
        /// </param>
        /// <param name="arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public override bool Execute(
            INamedEntity self,
            INamedEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            var temp = new UploadedNano()
            {
                NanoId = arguments[0].AsInt32()
            };

            ((Character)self).UploadedNanos.Add(temp);
            UploadedNanosDao.WriteNano(((Character)self).Identity.Instance, temp);

            var message = new CharacterActionMessage()
            {
                Identity   = self.Identity,
                Action     = CharacterActionType.UploadNano,
                Target     = self.Identity,
                Parameter1 = (int)IdentityType.NanoProgram,
                Parameter2 = temp.NanoId,
                Unknown    = 0
            };

            ((Character)self).Client.SendCompressed(message);

            return(true);
        }
        /// <summary>
        /// Calls a function by its number
        /// </summary>
        /// <param name="functionNumber">
        /// The number of the function
        /// </param>
        /// <param name="self">
        /// The self.
        /// </param>
        /// <param name="caller">
        /// The caller.
        /// </param>
        /// <param name="target">
        /// The target.
        /// </param>
        /// <param name="arguments">
        /// The arguments.
        /// </param>
        /// <returns>
        /// </returns>
        public bool CallFunction(
            int functionNumber, INamedEntity self, INamedEntity caller, IInstancedEntity target, object[] arguments)
        {
            FunctionPrototype func = this.GetFunctionByNumber(functionNumber);

            return(func.Execute(self, caller, target, arguments));
        }
Esempio n. 3
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            IEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            if (Arguments.Length == 2)
            {
                ((Character)Self).Stats[StatIds.backmesh].Value = Arguments[0].AsInt32();
                ((Character)Self).MeshLayer.AddMesh(5, (Int32)Arguments[1], (Int32)Arguments[0], 0);
            }
            else
            {
                int placement = (Int32)Arguments[Arguments.Length - 1];
                if (placement == 51)
                {
                    ((Character)Self).SocialMeshLayer.AddMesh(5, (Int32)Arguments[1], (Int32)Arguments[0], 0);
                }
                else
                {
                    ((Character)Self).Stats[StatIds.backmesh].Value = Arguments[0].AsInt32();
                    ((Character)Self).MeshLayer.AddMesh(5, (Int32)Arguments[1], (Int32)Arguments[0], 0);
                }
            }

            return(true);
        }
Esempio n. 4
0
        public override bool Execute(
            INamedEntity self,
            IEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            Vendor temp = caller as Vendor;

            if (temp != null)
            {
                if (temp.BaseInventory.Pages[temp.BaseInventory.StandardPage].List().Count == 0)
                {
                    if (temp.OriginalIdentity.Equals(Identity.None))
                    {
                    }
                    else
                    {
                        int id = temp.Playfield.Identity.Instance << 16
                                 | ((temp.OriginalIdentity.Instance >> 16) & 0xff);
                        ((ICharacter)self).Playfield.Publish(
                            ChatTextMessageHandler.Default.CreateIM(
                                ((ICharacter)self),
                                "This shop has no entry in the database yet. Please enter a new entry with the id "
                                + id.ToString() + "."));
                    }
                }
                else
                {
                    ShopUpdateMessageHandler.Default.Send((ICharacter)self, caller, ((Vendor)caller).BaseInventory.Pages[((Vendor)caller).BaseInventory.StandardPage]);
                }
            }
            return(true);
        }
        /// <summary>
        /// Calls a function by its number
        /// </summary>
        /// <param name="functionNumber">
        /// The number of the function
        /// </param>
        /// <param name="self">
        /// The self.
        /// </param>
        /// <param name="caller">
        /// The caller.
        /// </param>
        /// <param name="target">
        /// The target.
        /// </param>
        /// <param name="arguments">
        /// The arguments.
        /// </param>
        /// <returns>
        /// </returns>
        public bool CallFunction(
            int functionNumber,
            INamedEntity self,
            INamedEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            FunctionPrototype func = this.GetFunctionByNumber(functionNumber);

            if (func != null)
            {
                if (Program.DebugGameFunctions)
                {
                    LogUtil.Debug("Called " + func.GetType().Name + ": ");
                    LogUtil.Debug(FunctionArgumentList.List(arguments));
                }

                return(func.Execute(self, caller, target, arguments));
            }

            if (Program.DebugGameFunctions)
            {
                LogUtil.Debug("Function " + (FunctionType)functionNumber + "(" + functionNumber + ")" + " not found!");
                LogUtil.Debug(FunctionArgumentList.List(arguments));
            }

            return(false);
        }
        /// <summary>
        /// </summary>
        /// <param name="self">
        /// </param>
        /// <param name="caller">
        /// </param>
        /// <param name="target">
        /// </param>
        /// <param name="arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public override bool Execute(
            INamedEntity self,
            INamedEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            string text    = arguments[0].AsString();
            byte   b       = 0;
            var    message = new FormatFeedbackMessage()
            {
                Identity   = self.Identity,
                Message    = text + (char)b,
                Unknown1   = 0,
                DataLength = (short)(text.Length + 0xf),
                Unknown2   = 0x7e26,
                Unknown3   = 0x21212122,
                Unknown4   = 0x3a212121,
                Unknown5   = 0x293C,
                Unknown6   = 0x73,
                Unknown7   = 0
            };

            ((ICharacter)self).Send(message);
            return(true);
        }
Esempio n. 7
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            INamedEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            if (Arguments.Length == 2)
            {
                ((Character)Self).Stats[StatIds.headmesh].Value = Arguments[1].AsInt32();
                ((Character)Self).MeshLayer.AddMesh(0, Arguments[1].AsInt32(), Arguments[0].AsInt32(), 4);
            }
            else
            {
                int placement = (Int32)Arguments[Arguments.Length - 1];
                if (placement >= 49)
                {
                    // Social page
                    ((Character)Self).SocialMeshLayer.AddMesh(0, Arguments[1].AsInt32(), Arguments[0].AsInt32(), 4);
                }
                else
                {
                    ((Character)Self).Stats[StatIds.headmesh].Value = Arguments[0].AsInt32();
                    ((Character)Self).MeshLayer.AddMesh(0, Arguments[1].AsInt32(), Arguments[0].AsInt32(), 4);
                }
            }

            AppearanceUpdate.AnnounceAppearanceUpdate((Character)Self);

            return(true);
        }
        /// <summary>
        /// </summary>
        /// <param name="entity">
        /// </param>
        /// <returns>
        /// </returns>
        public bool CheckRequirement(IInstancedEntity entity)
        {
            if (this.theCheckFunc == null)
            {
                try
                {
                    this.theCheckFunc = RequirementLambdaCreator.Create(this);
                    return(this.theCheckFunc(entity));
                }
                catch (Exception)
                {
                    LogUtil.Debug("Could not create lambda for a requirement.");
                    LogUtil.Debug("Values:");
                    LogUtil.Debug("Target:       " + ((ItemTarget)this.Target));
                    LogUtil.Debug(
                        "StatId:       " + (this.Statnumber + " (" + StatNamesDefaults.GetStatName(this.Statnumber))
                        + ")");
                    LogUtil.Debug("Operator:     " + ((Operator)this.Operator));
                    LogUtil.Debug("Value:        " + this.Value);
                    LogUtil.Debug("ChildOperator:" + ((Operator)this.ChildOperator));
                    return(false);
                }
            }

            return(this.theCheckFunc(entity));
        }
Esempio n. 9
0
 /// <summary>
 /// </summary>
 /// <param name="self">
 /// </param>
 /// <param name="caller">
 /// </param>
 /// <param name="target">
 /// </param>
 /// <param name="arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public override bool Execute(
     INamedEntity self, INamedEntity caller, IInstancedEntity target, object[] arguments)
 {
     lock (target)
     {
         return this.FunctionExecute(self, caller, target, arguments);
     }
 }
Esempio n. 10
0
 /// <summary>
 /// </summary>
 /// <param name="self">
 /// </param>
 /// <param name="caller">
 /// </param>
 /// <param name="target">
 /// </param>
 /// <param name="arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public override bool Execute(
     INamedEntity self, INamedEntity caller, IInstancedEntity target, object[] arguments)
 {
     lock (target)
     {
         return(this.FunctionExecute(self, caller, target, arguments));
     }
 }
        /// <summary>
        /// </summary>
        /// <param name="character">
        /// </param>
        /// <param name="target">
        /// </param>
        /// <param name="args">
        /// </param>
        public override void ExecuteCommand(ICharacter character, Identity target, string[] args)
        {
            IInstancedEntity targetEntity = null;

            // Fall back to self it no target is selected
            if ((targetEntity = character.Playfield.FindByIdentity(target)) == null)
            {
                targetEntity = character;
            }

            IItemContainer container = targetEntity as IItemContainer;

            // Does this entity have a BaseInventory?
            if (container != null)
            {
                int lowId;
                int highId;
                int ql;
                if (!int.TryParse(args[1], out lowId))
                {
                    character.Playfield.Publish(ChatText.CreateIM(character, "LowId is no number"));
                    return;
                }

                if (!int.TryParse(args[2], out ql))
                {
                    character.Playfield.Publish(ChatText.CreateIM(character, "QualityLevel is no number"));
                    return;
                }

                // Determine low and high id depending on ql
                lowId  = ItemLoader.ItemList[lowId].GetLowId(ql);
                highId = ItemLoader.ItemList[lowId].GetHighId(ql);

                Item item = new Item(ql, lowId, highId);
                if (ItemLoader.ItemList[lowId].IsStackable())
                {
                    item.MultipleCount = ItemLoader.ItemList[lowId].getItemAttribute(212);
                }

                InventoryError err = container.BaseInventory.TryAdd(item);
                if (err != InventoryError.OK)
                {
                    character.Playfield.Publish(
                        ChatText.CreateIM(character, "Could not add to inventory. (" + err + ")"));
                }

                if (targetEntity as Character != null)
                {
                    AddTemplate.Send((targetEntity as Character).Client, item);
                }
            }
            else
            {
                character.Playfield.Publish(ChatText.CreateIM(character, "Target has no Inventory."));
            }
        }
Esempio n. 12
0
 /// <summary>
 /// </summary>
 /// <param name="Self">
 /// </param>
 /// <param name="Caller">
 /// </param>
 /// <param name="Target">
 /// </param>
 /// <param name="Arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public bool FunctionExecute(
     INamedEntity Self,
     IEntity Caller,
     IInstancedEntity Target,
     MessagePackObject[] Arguments)
 {
     ((Character)Self).Stats[Arguments[0].AsInt32()].Modifier += Arguments[1].AsInt32();
     return(true);
 }
Esempio n. 13
0
 /// <summary>
 /// </summary>
 /// <param name="self">
 /// </param>
 /// <param name="caller">
 /// </param>
 /// <param name="target">
 /// </param>
 /// <param name="arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public override bool Execute(
     INamedEntity self,
     IEntity caller,
     IInstancedEntity target,
     MessagePackObject[] arguments)
 {
     BankMessageHandler.Default.Send((ICharacter)self);
     return(true);
 }
        public override bool Execute(
            INamedEntity self,
            IEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            ICharacter character = (ICharacter)self;

            int statelId = (int)((uint)0xC0000000 | arguments[1].AsInt32() | (arguments[2].AsInt32() << 16));

            character.Stats[StatIds.externaldoorinstance].BaseValue      = 0;
            character.Stats[StatIds.externalplayfieldinstance].BaseValue = 0;

            if (arguments[1].AsInt32() > 0)
            {
                StatelData sd = PlayfieldLoader.PFData[arguments[1].AsInt32()].GetDoor(statelId);
                if (sd == null)
                {
                    throw new Exception(
                              "Statel " + arguments[3].AsInt32().ToString("X") + " not found? Check the rdb dammit");
                }

                Vector3 v = new Vector3(sd.X, sd.Y, sd.Z);

                Quaternion q = new Quaternion(sd.HeadingX, sd.HeadingY, sd.HeadingZ, sd.HeadingW);

                Quaternion.Normalize(q);
                Vector3 n = (Vector3)q.RotateVector3(Vector3.AxisZ);

                v.x += n.x * 2.5;
                v.z += n.z * 2.5;
                character.Playfield.Teleport(
                    (Dynel)character,
                    new Coordinate(v),
                    q,
                    new Identity()
                {
                    Type = (IdentityType)arguments[0].AsInt32(), Instance = arguments[1].AsInt32()
                });
            }

            return(true);

            self.Stats[StatIds.externalplayfieldinstance].Value = 0;
            self.Stats[StatIds.externaldoorinstance].Value      = 0;
            self.Playfield.Teleport(
                (Dynel)self,
                new Coordinate(100, 10, 100),
                ((ICharacter)self).Heading,
                new Identity()
            {
                Type = (IdentityType)arguments[0].AsInt32(), Instance = arguments[1].AsInt32()
            });
            return(true);
        }
 /// <summary>
 /// </summary>
 /// <param name="Self">
 /// </param>
 /// <param name="Caller">
 /// </param>
 /// <param name="Target">
 /// </param>
 /// <param name="Arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public bool FunctionExecute(
     INamedEntity Self,
     IEntity Caller,
     IInstancedEntity Target,
     MessagePackObject[] Arguments)
 {
     Character ch = (Character)Self;
     ch.Stats[Arguments[0].AsInt32()].PercentageModifier += Arguments[1].AsInt32();
     Console.WriteLine("percentage-modify stat " + Arguments[0].AsInt32());
     return true;
 }
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            INamedEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            if (Self is Character)
            {
                Character t     = (Character)Self;
                bool      found = false;
                int       placement;
                if (Arguments.Length == 2)
                {
                    placement = 0;
                }
                else
                {
                    placement = (Int32)Arguments[Arguments.Length - 1];
                }

                if (placement >= 49)
                {
                    if (t.SocialTab.ContainsKey((Int32)Arguments[1]))
                    {
                        t.SocialTab[(Int32)Arguments[1]] = (Int32)Arguments[0];
                    }
                    else
                    {
                        t.SocialTab.Add((Int32)Arguments[1], (Int32)Arguments[0]);
                    }
                }
                else
                {
                    foreach (AOTextures aot in t.Textures)
                    {
                        if (aot.place == (Int32)Arguments[1])
                        {
                            found       = true;
                            aot.Texture = (Int32)Arguments[0];
                        }
                    }

                    if (!found)
                    {
                        t.Textures.Add(new AOTextures((Int32)Arguments[1], (Int32)Arguments[0]));
                    }
                }

                AppearanceUpdate.AnnounceAppearanceUpdate(t);
            }

            return(true);
        }
Esempio n. 17
0
        /// <summary>
        /// </summary>
        /// <param name="self">
        /// </param>
        /// <param name="caller">
        /// </param>
        /// <param name="target">
        /// </param>
        /// <param name="arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public override bool Execute(
            INamedEntity self,
            INamedEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            IZoneClient client      = ((ICharacter)self).Client;
            BankMessage bankmessage = OpenBank.Create(client);

            client.Character.Send(bankmessage);
            return(true);
        }
Esempio n. 18
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(INamedEntity Self, INamedEntity Caller, IInstancedEntity Target, object[] Arguments)
        {
            int statNumber = (int)Arguments[0];
            int statValue = (int)Arguments[1];
            IStats tempTarget = Target;
            if (tempTarget != null)
            {
                tempTarget.Stats[statNumber].Value = statValue;
                return true;
            }

            return false;
        }
Esempio n. 19
0
        /// <summary>
        /// </summary>
        /// <param name="client">
        /// </param>
        /// <param name="target">
        /// </param>
        /// <param name="args">
        /// </param>
        public override void ExecuteCommand(Client client, Identity target, string[] args)
        {
            IInstancedEntity targetEntity = null;

            if ((targetEntity = client.Playfield.FindByIdentity(target)) != null)
            {
                IItemContainer container = targetEntity as IItemContainer;

                // Does this entity have a BaseInventory?
                if (container != null)
                {
                    int lowId;
                    int highId;
                    int ql;
                    if (!int.TryParse(args[1], out lowId))
                    {
                        client.SendChatText("LowId is no number");
                        return;
                    }

                    if (!int.TryParse(args[2], out highId))
                    {
                        client.SendChatText("HighId is no number");
                        return;
                    }

                    if (!int.TryParse(args[3], out ql))
                    {
                        client.SendChatText("QualityLevel is no number");
                        return;
                    }

                    Item           item = new Item(ql, lowId, highId);
                    InventoryError err  = container.BaseInventory.TryAdd(item);
                    if (err != InventoryError.OK)
                    {
                        client.SendChatText("Could not add to inventory." + (int)err);
                    }

                    if (targetEntity as Character != null)
                    {
                        AddTemplate.Send((targetEntity as Character).Client, item);
                    }
                }
                else
                {
                    client.SendChatText("Target has no Inventory.");
                    return;
                }
            }
        }
Esempio n. 20
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(INamedEntity Self, INamedEntity Caller, IInstancedEntity Target, object[] Arguments)
        {
            int    statNumber = (int)Arguments[0];
            int    statValue  = (int)Arguments[1];
            IStats tempTarget = Target;

            if (tempTarget != null)
            {
                tempTarget.Stats[statNumber].Value = statValue;
                return(true);
            }

            return(false);
        }
Esempio n. 21
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            INamedEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            // TODO: Use the arguments!!!!!

            Coordinate  destination = new Coordinate();
            IQuaternion heading     = new Quaternion(0.0, 0.0, 0.0, 0.0);
            Identity    playfield   = new Identity();

            ((Character)Self).Teleport(destination, heading, playfield);
            return(true);
        }
        public override bool Execute(
            INamedEntity self,
            IEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            ICharacter character = (ICharacter)self;

            int statelId = (int)((uint)0xC0000000 | arguments[1].AsInt32() | (arguments[2].AsInt32() << 16));
            character.Stats[StatIds.externaldoorinstance].BaseValue = 0;
            character.Stats[StatIds.externalplayfieldinstance].BaseValue = 0;

            if (arguments[1].AsInt32() > 0)
            {
                StatelData sd = PlayfieldLoader.PFData[arguments[1].AsInt32()].GetDoor(statelId);
                if (sd == null)
                {
                    throw new Exception(
                        "Statel " + arguments[3].AsInt32().ToString("X") + " not found? Check the rdb dammit");
                }

                Vector3 v = new Vector3(sd.X, sd.Y, sd.Z);

                Quaternion q = new Quaternion(sd.HeadingX, sd.HeadingY, sd.HeadingZ, sd.HeadingW);

                Quaternion.Normalize(q);
                Vector3 n = (Vector3)q.RotateVector3(Vector3.AxisZ);

                v.x += n.x * 2.5;
                v.z += n.z * 2.5;
                character.Playfield.Teleport(
                    (Dynel)character,
                    new Coordinate(v),
                    q,
                    new Identity() { Type = (IdentityType)arguments[0].AsInt32(), Instance = arguments[1].AsInt32() });
            }

            return true;

            self.Stats[StatIds.externalplayfieldinstance].Value = 0;
            self.Stats[StatIds.externaldoorinstance].Value = 0;
            self.Playfield.Teleport(
                (Dynel)self,
                new Coordinate(100, 10, 100),
                ((ICharacter)self).Heading,
                new Identity() { Type = (IdentityType)arguments[0].AsInt32(), Instance = arguments[1].AsInt32() });
            return true;
        }
Esempio n. 23
0
 /// <summary>
 /// </summary>
 /// <param name="self">
 /// </param>
 /// <param name="caller">
 /// </param>
 /// <param name="target">
 /// </param>
 /// <param name="arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public override bool Execute(
     INamedEntity self,
     IEntity caller,
     IInstancedEntity target,
     MessagePackObject[] arguments)
 {
     string text = arguments[0].AsString();
     var message = new FormatFeedbackMessage()
                   {
                       Identity = self.Identity,
                       FormattedMessage = "~&!!!\":!!!)<s" + (char)(text.Length + 1),
                       Unknown1 = 0,
                       Unknown2 = 0,
                   };
     ((ICharacter)self).Send(message);
     return true;
 }
Esempio n. 24
0
 /// <summary>
 /// </summary>
 /// <param name="chatCommand">
 /// </param>
 private void HandleChatCommand(ChatCommand chatCommand)
 {
     foreach (Playfield playfield in this.playfields)
     {
         IInstancedEntity character =
             playfield.FindByIdentity(
                 new Identity {
             Type = IdentityType.CanbeAffected, Instance = chatCommand.CharacterId
         });
         if (character != null)
         {
             ChatCommandHandler.Read(
                 chatCommand.ChatCommandString.TrimStart('.'),
                 (ZoneClient)((Character)character).Client);
         }
     }
 }
Esempio n. 25
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            INamedEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            int Statnumber;
            int minhit;
            int maxhit;

            Statnumber = (int)Arguments[0];
            minhit     = (int)Arguments[1];
            maxhit     = (int)Arguments[2];
            if (minhit > maxhit)
            {
                minhit = maxhit;
                maxhit = (int)Arguments[1];
            }

            Random    rnd    = new Random();
            int       random = rnd.Next(minhit, maxhit);
            Character ch     = (Character)Self;

            // Increase only to maximum value. if max value is lower then actual value, half of the random will be subtracted
            if (Statnumber == 27)
            {
                random = Math.Min(random, ch.Stats[StatIds.life].Value - ch.Stats[StatIds.health].Value);
            }

            if (Statnumber == 132)
            {
                random = Math.Min(
                    random,
                    ch.Stats[StatIds.maxnanoenergy].Value - ch.Stats[StatIds.nanoenergypool].Value);
            }

            if (random < 0)
            {
                random /= 2;
            }

            ((Character)Self).Stats[Statnumber].Value += random;

            return(true);
        }
Esempio n. 26
0
        /// <summary>
        /// </summary>
        /// <param name="self">
        /// </param>
        /// <param name="caller">
        /// </param>
        /// <param name="target">
        /// </param>
        /// <param name="arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public override bool Execute(
            INamedEntity self,
            IEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            string text    = arguments[0].AsString();
            var    message = new FormatFeedbackMessage()
            {
                Identity         = self.Identity,
                FormattedMessage = "~&!!!\":!!!)<s" + (char)(text.Length + 1),
                Unknown1         = 0,
                Unknown2         = 0,
            };

            ((ICharacter)self).Send(message);
            return(true);
        }
Esempio n. 27
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            INamedEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            int    statNumber = Arguments[0].AsInt32();
            int    statValue  = Arguments[1].AsInt32();
            IStats tempTarget = Target;

            if (tempTarget != null)
            {
                tempTarget.Stats[statNumber].Set((uint)statValue);
                return(true);
            }

            return(false);
        }
Esempio n. 28
0
        /// <summary>
        /// </summary>
        /// <param name="entity">
        /// </param>
        /// <returns>
        /// </returns>
        public bool CheckRequirements(IInstancedEntity entity)
        {
            bool result = true;
            foreach (Requirement requirements in this.Requirements)
            {
                if (requirements.ChildOperator == Operator.And)
                {
                    result &= requirements.CheckRequirement(entity);
                }

                if (!result)
                {
                    return false;
                }
            }

            return true;
        }
Esempio n. 29
0
        /// <summary>
        /// </summary>
        /// <param name="entity">
        /// </param>
        /// <returns>
        /// </returns>
        public bool CheckRequirements(IInstancedEntity entity)
        {
            bool result = true;

            foreach (Requirements requirements in this.Requirements)
            {
                if (requirements.ChildOperator == (int)Operator.And)
                {
                    result &= requirements.CheckRequirement(entity);
                }

                if (!result)
                {
                    return(false);
                }
            }

            return(true);
        }
Esempio n. 30
0
        /// <summary>
        /// </summary>
        /// <param name="self">
        /// </param>
        /// <param name="caller">
        /// </param>
        /// <param name="target">
        /// </param>
        /// <param name="arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public override bool Execute(
            INamedEntity self,
            IEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            if (arguments.Count() != 3)
            {
                return(false);
            }

            uint arg1        = arguments[1].AsUInt32();
            int  toPlayfield = arguments[2].AsInt32();

            byte                 destinationIndex = (byte)(arg1 >> 16);
            PlayfieldData        pfd           = PlayfieldLoader.PFData[toPlayfield];
            PlayfieldDestination pfDestination = pfd.Destinations[destinationIndex];

            float newX = (pfDestination.EndX - pfDestination.StartX) * 0.5f + pfDestination.StartX;
            float newZ = (pfDestination.EndZ - pfDestination.StartZ) * 0.5f + pfDestination.StartZ;
            float dist = WallCollision.Distance(
                pfDestination.StartX,
                pfDestination.StartZ,
                pfDestination.EndX,
                pfDestination.EndZ);
            float headDistX = (pfDestination.EndX - pfDestination.StartX) / dist;
            float headDistZ = (pfDestination.EndZ - pfDestination.StartZ) / dist;

            newX -= headDistZ * 4;
            newZ += headDistX * 4;

            Coordinate destCoordinate = new Coordinate(newX, pfDestination.EndY, newZ);

            ((ICharacter)self).Teleport(
                destCoordinate,
                ((ICharacter)self).Heading,
                new Identity()
            {
                Type = IdentityType.Playfield, Instance = toPlayfield
            });
            return(true);
        }
Esempio n. 31
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            IEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            // TODO: Use the arguments!!!!!

            Coordinate  destination = new Coordinate(Arguments[0].AsInt32(), Arguments[1].AsInt32(), Arguments[2].AsInt32());
            IQuaternion heading     = new Quaternion(0.0, 0.0, 0.0, 0.0);
            Identity    playfield   = new Identity()
            {
                Type = IdentityType.Playfield, Instance = Arguments[3].AsInt32()
            };

            if (playfield.Instance == 0)
            {
                playfield = Self.Playfield.Identity;
            }
            ((Character)Self).Teleport(destination, heading, playfield);
            return(true);
        }
        /// <summary>
        /// </summary>
        /// <param name="self">
        /// </param>
        /// <param name="caller">
        /// </param>
        /// <param name="target">
        /// </param>
        /// <param name="arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public override bool Execute(
            INamedEntity self,
            IEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            if (arguments.Count() != 3)
            {
                return false;
            }

            uint arg1 = arguments[1].AsUInt32();
            int toPlayfield = arguments[2].AsInt32();

            byte destinationIndex = (byte)(arg1 >> 16);
            PlayfieldData pfd = PlayfieldLoader.PFData[toPlayfield];
            PlayfieldDestination pfDestination = pfd.Destinations[destinationIndex];

            float newX = (pfDestination.EndX - pfDestination.StartX) * 0.5f + pfDestination.StartX;
            float newZ = (pfDestination.EndZ - pfDestination.StartZ) * 0.5f + pfDestination.StartZ;
            float dist = WallCollision.Distance(
                pfDestination.StartX,
                pfDestination.StartZ,
                pfDestination.EndX,
                pfDestination.EndZ);
            float headDistX = (pfDestination.EndX - pfDestination.StartX) / dist;
            float headDistZ = (pfDestination.EndZ - pfDestination.StartZ) / dist;
            newX -= headDistZ * 4;
            newZ += headDistX * 4;

            Coordinate destCoordinate = new Coordinate(newX, pfDestination.EndY, newZ);

            ((ICharacter)self).Teleport(
                destCoordinate,
                ((ICharacter)self).Heading,
                new Identity() { Type = IdentityType.Playfield, Instance = toPlayfield });
            return true;
        }
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            IEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            // TODO: Wait for mesh name list
            Character ch = (Character)Self;

            switch (Arguments[0].AsString())
            {
            case "robe":
                ch.Stats[StatIds.mesh].Value = 1;
                break;

            default:
                ch.Stats[StatIds.mesh].Value = 0;
                break;
            }

            ch.ChangedAppearance = true;
            return(true);
        }
Esempio n. 34
0
        /// <summary>
        /// </summary>
        /// <param name="self">
        /// </param>
        /// <param name="caller">
        /// </param>
        /// <param name="target">
        /// </param>
        /// <param name="arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public override bool Execute(
            INamedEntity self, 
            INamedEntity caller, 
            IInstancedEntity target, 
            MessagePackObject[] arguments)
        {
            var temp = new UploadedNano() { NanoId = arguments[0].AsInt32() };
            ((Character)self).UploadedNanos.Add(temp);
            UploadedNanosDao.WriteNano(((Character)self).Identity.Instance, temp);

            var message = new CharacterActionMessage()
                          {
                              Identity = self.Identity,
                              Action = CharacterActionType.UploadNano,
                              Target = self.Identity,
                              Parameter1 = (int)IdentityType.NanoProgram,
                              Parameter2 = temp.NanoId,
                              Unknown = 0
                          };
            ((Character)self).Client.SendCompressed(message);

            return true;
        }
        public override bool Execute(
            INamedEntity self,
            IEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            uint externalDoorInstance = self.Stats[StatIds.externaldoorinstance].BaseValue;
            int  externalPlayfieldId  = self.Stats[StatIds.externalplayfieldinstance].Value;

            StatelData door =
                PlayfieldLoader.PFData[externalPlayfieldId].Statels.FirstOrDefault(
                    x =>
                    (uint)x.Identity.Instance == externalDoorInstance &&
                    (x.Identity.Type == IdentityType.Door /*|| x.Identity.Type==IdentityType.MissionEntrance*/));

            if (door != null)
            {
                Vector3 v = new Vector3(door.X, door.Y, door.Z);

                Quaternion q = new Quaternion(door.HeadingX, door.HeadingY, door.HeadingZ, door.HeadingW);

                Quaternion.Normalize(q);
                Vector3 n = (Vector3)q.RotateVector3(Vector3.AxisZ);

                v.x += n.x * 2.5;
                v.z += n.z * 2.5;
                self.Playfield.Teleport(
                    (Dynel)self,
                    new Coordinate(v),
                    q,
                    new Identity()
                {
                    Type = IdentityType.Playfield, Instance = externalPlayfieldId
                });
            }
            return(door != null);
        }
Esempio n. 36
0
 /// <summary>
 /// </summary>
 /// <param name="entity">
 /// </param>
 /// <returns>
 /// </returns>
 public bool CheckRequirement(IInstancedEntity entity)
 {
     if (this.theCheckFunc == null)
     {
         try
         {
             this.theCheckFunc = RequirementLambdaCreator.Create(this);
             //return this.theCheckFunc(entity);
         }
         catch (Exception)
         {
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "Could not create lambda for a requirement.");
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "Values:");
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "Target:       " + (this.Target));
             LogUtil.Debug(
                 DebugInfoDetail.GameFunctions,
                 "StatId:       " + (this.Statnumber + " (" + StatNamesDefaults.GetStatName(this.Statnumber))
                 + ")");
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "Operator:     " + (this.Operator));
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "Value:        " + this.Value);
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "ChildOperator:" + (this.ChildOperator));
             return(false);
         }
     }
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "Values:");
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "Target:       " + (this.Target));
     LogUtil.Debug(
         DebugInfoDetail.GameFunctions,
         "StatId:       " + (this.Statnumber + " (" + StatNamesDefaults.GetStatName(this.Statnumber))
         + ")");
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "Operator:     " + (this.Operator));
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "Value:        " + this.Value + " <-> " + entity.Stats[this.Statnumber].Value.ToString());
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "ChildOperator:" + (this.ChildOperator));
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "Result:       " + this.theCheckFunc(entity));
     return(this.theCheckFunc(entity));
 }
Esempio n. 37
0
 /// <summary>
 /// </summary>
 /// <param name="self">
 /// </param>
 /// <param name="caller">
 /// </param>
 /// <param name="target">
 /// </param>
 /// <param name="arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public override bool Execute(
     INamedEntity self, 
     INamedEntity caller, 
     IInstancedEntity target, 
     MessagePackObject[] arguments)
 {
     string text = arguments[0].AsString();
     byte b = 0;
     var message = new FormatFeedbackMessage()
                   {
                       Identity = self.Identity,
                       Message = text + (char)b,
                       Unknown1 = 0,
                       DataLength = (short)(text.Length + 0xf),
                       Unknown2 = 0x7e26,
                       Unknown3 = 0x21212122,
                       Unknown4 = 0x3a212121,
                       Unknown5 = 0x293C,
                       Unknown6 = 0x73,
                       Unknown7 = 0
                   };
     ((ICharacter)self).Send(message);
     return true;
 }
 /// <summary>
 /// </summary>
 /// <param name="entity">
 /// </param>
 /// <returns>
 /// </returns>
 public bool CheckRequirement(IInstancedEntity entity)
 {
     if (this.theCheckFunc == null)
     {
         try
         {
             this.theCheckFunc = RequirementLambdaCreator.Create(this);
             //return this.theCheckFunc(entity);
         }
         catch (Exception)
         {
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "Could not create lambda for a requirement.");
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "Values:");
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "Target:       " + (this.Target));
             LogUtil.Debug(
                 DebugInfoDetail.GameFunctions,
                 "StatId:       " + (this.Statnumber + " (" + StatNamesDefaults.GetStatName(this.Statnumber))
                 + ")");
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "Operator:     " + (this.Operator));
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "Value:        " + this.Value);
             LogUtil.Debug(DebugInfoDetail.GameFunctions, "ChildOperator:" + (this.ChildOperator));
             return false;
         }
     }
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "Values:");
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "Target:       " + (this.Target));
     LogUtil.Debug(
         DebugInfoDetail.GameFunctions,
         "StatId:       " + (this.Statnumber + " (" + StatNamesDefaults.GetStatName(this.Statnumber))
         + ")");
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "Operator:     " + (this.Operator));
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "Value:        " + this.Value + " <-> " + entity.Stats[this.Statnumber].Value.ToString());
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "ChildOperator:" + (this.ChildOperator));
     LogUtil.Debug(DebugInfoDetail.GameFunctions, "Result:       " + this.theCheckFunc(entity));
     return this.theCheckFunc(entity);
 }
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            IEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            if (Self is Character)
            {
                Character t = (Character)Self;
                bool found = false;
                int placement;
                if (Arguments.Length == 2)
                {
                    placement = 0;
                }
                else
                {
                    placement = (Int32)Arguments[Arguments.Length - 1];
                }

                if (placement >= 49)
                {
                    if (t.SocialTab.ContainsKey((Int32)Arguments[1]))
                    {
                        t.SocialTab[(Int32)Arguments[1]] = (Int32)Arguments[0];
                    }
                    else
                    {
                        t.SocialTab.Add((Int32)Arguments[1], (Int32)Arguments[0]);
                    }
                }
                else
                {
                    foreach (AOTextures aot in t.Textures)
                    {
                        if (aot.place == (Int32)Arguments[1])
                        {
                            found = true;
                            aot.Texture = (Int32)Arguments[0];
                        }
                    }

                    if (!found)
                    {
                        t.Textures.Add(new AOTextures((Int32)Arguments[1], (Int32)Arguments[0]));
                    }
                }
            }
            ((Character)Self).ChangedAppearance = true;
            return true;
        }
Esempio n. 40
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            IEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            int Statnumber;
            int minhit;
            int maxhit;

            Statnumber = (int)Arguments[0];
            minhit = (int)Arguments[1];
            maxhit = (int)Arguments[2];
            if (minhit > maxhit)
            {
                minhit = maxhit;
                maxhit = (int)Arguments[1];
            }

            Random rnd = new Random();
            int random = rnd.Next(minhit, maxhit);
            Character ch = (Character)Self;

            // Increase only to maximum value. if max value is lower then actual value, half of the random will be subtracted
            if (Statnumber == 27)
            {
                random = Math.Min(random, ch.Stats[StatIds.life].Value - ch.Stats[StatIds.health].Value);
            }

            if (Statnumber == 132)
            {
                random = Math.Min(
                    random,
                    ch.Stats[StatIds.maxnanoenergy].Value - ch.Stats[StatIds.nanoenergypool].Value);
            }

            if (random < 0)
            {
                random /= 2;
            }

            ((Character)Self).Stats[Statnumber].Value += random;

            return true;
        }
Esempio n. 41
0
 /// <summary>
 /// </summary>
 /// <param name="Self">
 /// </param>
 /// <param name="Caller">
 /// </param>
 /// <param name="Target">
 /// </param>
 /// <param name="Arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public bool FunctionExecute(
     INamedEntity Self,
     IEntity Caller,
     IInstancedEntity Target,
     MessagePackObject[] Arguments)
 {
     ((Character)Self).Stats[Arguments[0].AsInt32()].Modifier += Arguments[1].AsInt32();
     return true;
 }
Esempio n. 42
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            IEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            int statNumber = Arguments[0].AsInt32();
            int statValue = Arguments[1].AsInt32();
            IStats tempTarget = Target;
            if (tempTarget != null)
            {
                tempTarget.Stats[statNumber].Set((uint)statValue);
                return true;
            }

            return false;
        }
Esempio n. 43
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            IEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            // TODO: Use the arguments!!!!!

            Coordinate destination = new Coordinate(Arguments[0].AsInt32(), Arguments[1].AsInt32(), Arguments[2].AsInt32());
            IQuaternion heading = new Quaternion(0.0, 0.0, 0.0, 0.0);
            Identity playfield = new Identity() { Type = IdentityType.Playfield, Instance = Arguments[3].AsInt32() };
            if (playfield.Instance==0)
            {
                playfield = Self.Playfield.Identity;
            }
            ((Character)Self).Teleport(destination, heading, playfield);
            return true;
        }
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self, 
            INamedEntity Caller, 
            IInstancedEntity Target, 
            MessagePackObject[] Arguments)
        {
            // TODO: Wait for mesh name list
            Character ch = (Character)Self;
            switch (Arguments[0].AsString())
            {
                case "robe":
                    ch.Stats[StatIds.mesh].Value = 1;
                    break;
                default:
                    ch.Stats[StatIds.mesh].Value = 0;
                    break;
            }

            ch.ChangedAppearance = true;
            return true;
        }
 /// <summary>
 /// </summary>
 /// <param name="Self">
 /// </param>
 /// <param name="Caller">
 /// </param>
 /// <param name="Target">
 /// </param>
 /// <param name="Arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public bool FunctionExecute(
     INamedEntity Self, 
     INamedEntity Caller, 
     IInstancedEntity Target, 
     MessagePackObject[] Arguments)
 {
     Character ch = (Character)Self;
     ch.Stats[Arguments[0].AsInt32()].PercentageModifier += Arguments[1].AsInt32();
     Console.WriteLine("percentage-modify stat " + Arguments[0].AsInt32());
     return true;
 }
Esempio n. 46
0
 /// <summary>
 /// Calls a function by its number
 /// </summary>
 /// <param name="functionNumber">
 /// The number of the function
 /// </param>
 /// <param name="self">
 /// The self.
 /// </param>
 /// <param name="caller">
 /// The caller.
 /// </param>
 /// <param name="target">
 /// The target.
 /// </param>
 /// <param name="arguments">
 /// The arguments.
 /// </param>
 /// <returns>
 /// </returns>
 public bool CallFunction(
     int functionNumber, INamedEntity self, INamedEntity caller, IInstancedEntity target, object[] arguments)
 {
     FunctionPrototype func = this.GetFunctionByNumber(functionNumber);
     return func.Execute(self, caller, target, arguments);
 }
        /// <summary>
        /// Calls a function by its number
        /// </summary>
        /// <param name="functionNumber">
        /// The number of the function
        /// </param>
        /// <param name="self">
        /// The self.
        /// </param>
        /// <param name="caller">
        /// The caller.
        /// </param>
        /// <param name="target">
        /// The target.
        /// </param>
        /// <param name="arguments">
        /// The arguments.
        /// </param>
        /// <returns>
        /// </returns>
        public bool CallFunction(
            int functionNumber,
            INamedEntity self,
            IEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            FunctionPrototype func = this.GetFunctionByNumber(functionNumber);
            if (func != null)
            {
                LogUtil.Debug(DebugInfoDetail.GameFunctions, "Called " + func.GetType().Name + ": ");
                LogUtil.Debug(DebugInfoDetail.GameFunctions, FunctionArgumentList.List(arguments));

                return func.Execute(self, caller, target, arguments);
            }

            LogUtil.Debug(
                DebugInfoDetail.GameFunctions,
                "Function " + (FunctionType)functionNumber + "(" + functionNumber + ")" + " not found!");
            LogUtil.Debug(DebugInfoDetail.GameFunctions, FunctionArgumentList.List(arguments));

            return false;
        }
Esempio n. 48
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self, 
            INamedEntity Caller, 
            IInstancedEntity Target, 
            MessagePackObject[] Arguments)
        {
            // TODO: Use the arguments!!!!!

            Coordinate destination = new Coordinate();
            IQuaternion heading = new Quaternion(0.0, 0.0, 0.0, 0.0);
            Identity playfield = new Identity();
            ((Character)Self).Teleport(destination, heading, playfield);
            return true;
        }
Esempio n. 49
0
 /// <summary>
 /// </summary>
 /// <param name="entity">
 /// </param>
 public void DisconnectClient(IInstancedEntity entity)
 {
     Pool.Instance.RemoveObject(entity);
 }
Esempio n. 50
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self, 
            INamedEntity Caller, 
            IInstancedEntity Target, 
            MessagePackObject[] Arguments)
        {
            if (Arguments.Length == 2)
            {
                ((Character)Self).Stats[StatIds.backmesh].Value = Arguments[0].AsInt32();
                ((Character)Self).MeshLayer.AddMesh(5, (Int32)Arguments[1], (Int32)Arguments[0], 0);
            }
            else
            {
                int placement = (Int32)Arguments[Arguments.Length - 1];
                if (placement == 51)
                {
                    ((Character)Self).SocialMeshLayer.AddMesh(5, (Int32)Arguments[1], (Int32)Arguments[0], 0);
                }
                else
                {
                    ((Character)Self).Stats[StatIds.backmesh].Value = Arguments[0].AsInt32();
                    ((Character)Self).MeshLayer.AddMesh(5, (Int32)Arguments[1], (Int32)Arguments[0], 0);
                }
            }

            return true;
        }
Esempio n. 51
0
        /// <summary>
        /// </summary>
        /// <param name="Self">
        /// </param>
        /// <param name="Caller">
        /// </param>
        /// <param name="Target">
        /// </param>
        /// <param name="Arguments">
        /// </param>
        /// <returns>
        /// </returns>
        public bool FunctionExecute(
            INamedEntity Self,
            IEntity Caller,
            IInstancedEntity Target,
            MessagePackObject[] Arguments)
        {
            if (Arguments.Length == 2)
            {
                ((Character)Self).Stats[StatIds.headmesh].Value = Arguments[1].AsInt32();
                ((Character)Self).MeshLayer.AddMesh(0, Arguments[1].AsInt32(), Arguments[0].AsInt32(), 4);
            }
            else
            {
                int placement = (Int32)Arguments[Arguments.Length - 1];
                if (placement >= 49)
                {
                    // Social page
                    ((Character)Self).SocialMeshLayer.AddMesh(0, Arguments[1].AsInt32(), Arguments[0].AsInt32(), 4);
                }
                else
                {
                    ((Character)Self).Stats[StatIds.headmesh].Value = Arguments[0].AsInt32();
                    ((Character)Self).MeshLayer.AddMesh(0, Arguments[1].AsInt32(), Arguments[0].AsInt32(), 4);
                }
            }

            ((Character)Self).ChangedAppearance = true;

            return true;
        }
Esempio n. 52
0
        /// <summary>
        /// </summary>
        /// <param name="entity">
        /// </param>
        /// <returns>
        /// </returns>
        public bool CheckRequirement(IInstancedEntity entity)
        {
            if (this.theCheckFunc == null)
            {
                try
                {
                    this.theCheckFunc = RequirementLambdaCreator.Create(this);
                    return this.theCheckFunc(entity);
                }
                catch (Exception)
                {
                    LogUtil.Debug("Could not create lambda for a requirement.");
                    LogUtil.Debug("Values:");
                    LogUtil.Debug("Target:       " + ((ItemTarget)this.Target));
                    LogUtil.Debug(
                        "StatId:       " + (this.Statnumber + " (" + StatNamesDefaults.GetStatName(this.Statnumber))
                        + ")");
                    LogUtil.Debug("Operator:     " + ((Operator)this.Operator));
                    LogUtil.Debug("Value:        " + this.Value);
                    LogUtil.Debug("ChildOperator:" + ((Operator)this.ChildOperator));
                    return false;
                }
            }

            return this.theCheckFunc(entity);
        }
 /// <summary>
 /// Locks function targets and executes the function
 /// </summary>
 /// <param name="self">
 /// Dynel (Character or NPC)
 /// </param>
 /// <param name="caller">
 /// Caller of the function
 /// </param>
 /// <param name="target">
 /// Target of the Function (Dynel or Statel)
 /// </param>
 /// <param name="arguments">
 /// Function Arguments
 /// </param>
 /// <returns>
 /// </returns>
 public abstract bool Execute(
     INamedEntity self, 
     INamedEntity caller, 
     IInstancedEntity target, 
     MessagePackObject[] arguments);
        public override bool Execute(
            INamedEntity self,
            IEntity caller,
            IInstancedEntity target,
            MessagePackObject[] arguments)
        {
            uint externalDoorInstance = self.Stats[StatIds.externaldoorinstance].BaseValue;
            int externalPlayfieldId = self.Stats[StatIds.externalplayfieldinstance].Value;

            StatelData door =
                PlayfieldLoader.PFData[externalPlayfieldId].Statels.FirstOrDefault(
                    x =>
                        (uint)x.Identity.Instance == externalDoorInstance
                        && (x.Identity.Type == IdentityType.Door /*|| x.Identity.Type==IdentityType.MissionEntrance*/));
            if (door != null)
            {
                Vector3 v = new Vector3(door.X, door.Y, door.Z);

                Quaternion q = new Quaternion(door.HeadingX, door.HeadingY, door.HeadingZ, door.HeadingW);

                Quaternion.Normalize(q);
                Vector3 n = (Vector3)q.RotateVector3(Vector3.AxisZ);

                v.x += n.x * 2.5;
                v.z += n.z * 2.5;
                self.Playfield.Teleport(
                    (Dynel)self,
                    new Coordinate(v),
                    q,
                    new Identity() { Type = IdentityType.Playfield, Instance = externalPlayfieldId });
            }
            return door != null;
        }
Esempio n. 55
-1
 public override bool Execute(
     INamedEntity self,
     IEntity caller,
     IInstancedEntity target,
     MessagePackObject[] arguments)
 {
     Vendor temp = caller as Vendor;
     if (temp != null)
     {
         if (temp.BaseInventory.Pages[temp.BaseInventory.StandardPage].List().Count == 0)
         {
             if (temp.OriginalIdentity.Equals(Identity.None))
             {
             }
             else
             {
                 int id = temp.Playfield.Identity.Instance << 16
                          | ((temp.OriginalIdentity.Instance >> 16) & 0xff);
                 ((ICharacter)self).Playfield.Publish(
                     ChatTextMessageHandler.Default.CreateIM(
                         ((ICharacter)self),
                         "This shop has no entry in the database yet. Please enter a new entry with the id "
                         + id.ToString() + "."));
             }
         }
         else
         {
             ShopUpdateMessageHandler.Default.Send((ICharacter)self, caller, ((Vendor)caller).BaseInventory.Pages[((Vendor)caller).BaseInventory.StandardPage]);
         }
     }
     return true;
 }
Esempio n. 56
-1
 /// <summary>
 /// </summary>
 /// <param name="self">
 /// </param>
 /// <param name="caller">
 /// </param>
 /// <param name="target">
 /// </param>
 /// <param name="arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public override bool Execute(
     INamedEntity self,
     IEntity caller,
     IInstancedEntity target,
     MessagePackObject[] arguments)
 {
     BankMessageHandler.Default.Send((ICharacter)self);
     return true;
 }
Esempio n. 57
-1
 /// <summary>
 /// </summary>
 /// <param name="self">
 /// </param>
 /// <param name="caller">
 /// </param>
 /// <param name="target">
 /// </param>
 /// <param name="arguments">
 /// </param>
 /// <returns>
 /// </returns>
 public override bool Execute(
     INamedEntity self, 
     INamedEntity caller, 
     IInstancedEntity target, 
     MessagePackObject[] arguments)
 {
     IZoneClient client = ((ICharacter)self).Client;
     BankMessage bankmessage = OpenBank.Create(client);
     client.Character.Send(bankmessage);
     return true;
 }