/// <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)); }
/// <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); }
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); }
/// <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)); }
/// <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="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.")); } }
/// <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); }
/// <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); }
/// <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); }
/// <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; }
/// <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; } } }
/// <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); }
/// <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; }
/// <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; }
/// <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); } } }
/// <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); }
/// <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); }
/// <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); }
/// <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; }
/// <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); }
/// <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: 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); }
/// <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); }
/// <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 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; }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <summary> /// </summary> /// <param name="entity"> /// </param> public void DisconnectClient(IInstancedEntity entity) { Pool.Instance.RemoveObject(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, 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; }
/// <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; }
/// <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; }
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> /// </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; }
/// <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; }