/// <summary> /// </summary> /// <param name="followTargetMessage"> /// </param> /// <param name="client"> /// </param> protected override void Read(FollowTargetMessage followTargetMessage, IZoneClient client) { // REFACT can we use the base class methods here ?? // var followTargetMessage = (FollowTargetMessage)message.Body; var announce = new FollowTargetMessage { Identity = client.Controller.Character.Identity, Unknown = 0 }; var followinfo = followTargetMessage.Info as FollowTargetInfo; if (followinfo != null) { announce.Info = new FollowTargetInfo() { MoveType = 0, Target = followinfo.Target, Dummy = 0x40, Dummy1 = 0x20000000 }; } client.Controller.Character.Playfield.Publish(new IMSendAOtomationMessageToPlayfield { Body = announce }); }
/// <summary> /// Sends chat server info to client /// </summary> /// <param name="client"> /// Client that gets the info /// </param> public static void Send(IZoneClient client) { /* get chat settings from config */ string chatServerIp = string.Empty; IPAddress tempIp; if (IPAddress.TryParse(ConfigReadWrite.Instance.CurrentConfig.ChatIP, out tempIp)) { chatServerIp = ConfigReadWrite.Instance.CurrentConfig.ChatIP; } else { IPHostEntry chatHost = Dns.GetHostEntry(ConfigReadWrite.Instance.CurrentConfig.ChatIP); foreach (IPAddress ip in chatHost.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { chatServerIp = ip.ToString(); break; } } } int chatPort = Convert.ToInt32(ConfigReadWrite.Instance.CurrentConfig.ChatPort); var chatServerInfoMessage = new ChatServerInfoMessage { HostName = chatServerIp, Port = chatPort }; client.SendCompressed(chatServerInfoMessage); }
/// <summary> /// </summary> /// <param name="pooledIn"> /// </param> /// <param name="identity"> /// </param> /// <param name="zoneClient"> /// </param> public Character(Pool pooledIn, Identity identity, IZoneClient zoneClient) : base(pooledIn, identity) { this.DoNotDoTimers = true; this.Client = zoneClient; this.ActiveNanos = new List <IActiveNano>(); this.UploadedNanos = new List <IUploadedNanos>(); this.BaseInventory = new PlayerInventory(this); this.SocialTab = new Dictionary <int, int> { { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, { 4, 0 }, { 38, 0 }, { 1004, 0 }, { 1005, 0 }, { 64, 0 }, { 32, 0 }, { 1006, 0 }, { 1007, 0 } }; this.Read(); this.meshLayer.AddMesh(0, this.Stats[StatIds.headmesh].Value, 0, 4); this.socialMeshLayer.AddMesh(0, this.Stats[StatIds.headmesh].Value, 0, 4); this.DoNotDoTimers = false; }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="stat"> /// </param> /// <param name="value"> /// </param> /// <param name="announce"> /// </param> public static void Send(IZoneClient client, int stat, uint value, bool announce) { var statMessage = new StatMessage { Identity = client.Character.Identity, Stats = new[] { new GameTuple <CharacterStat, uint> { Value1 = (CharacterStat)stat, Value2 = value } } }; var statM = new Message { Body = statMessage }; if (!client.Character.DoNotDoTimers) { client.Character.Playfield.Publish( new IMSendAOtomationMessageToClient { client = client, message = statM }); } /* announce to playfield? */ if (announce) { client.Character.Playfield.AnnounceOthers(statMessage, client.Character.Identity); } }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="forced"> /// </param> protected override void OnClientDisconnected(IClient client, bool forced) { IZoneClient cl = (IZoneClient)client; cl.Character.BaseInventory.Write(); base.OnClientDisconnected(client, forced); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="desiredQuality"> /// </param> /// <param name="ts"> /// </param> /// <param name="sourceItem"> /// </param> /// <param name="targetItem"> /// </param> /// <returns> /// </returns> private static bool WindowBuild( IZoneClient client, int desiredQuality, TradeSkillEntry ts, Item sourceItem, Item targetItem) { if (!((ts.MinTargetQL >= targetItem.Quality) || (ts.MinTargetQL == 0))) { return(false); } if (!ts.ValidateRange(sourceItem.Quality, targetItem.Quality)) { return(false); } foreach (TradeSkillSkill tss in ts.Skills) { if (client.Controller.Character.Stats[tss.StatId].Value < Convert.ToInt32(tss.Percent / 100M * targetItem.Quality)) { return(false); } } return(true); }
/// <summary> /// Set own stat (no announce) /// </summary> /// <param name="client"> /// Affected client /// </param> /// <param name="stat"> /// Stat /// </param> /// <param name="value"> /// Value /// </param> /// <param name="announce"> /// Let others on same playfield know? /// </param> /// <returns> /// The <see cref="uint"/>. /// </returns> public static uint Set(IZoneClient client, int stat, uint value, bool announce) { var oldValue = (uint)client.Character.Stats[stat].Value; Send(client, stat, value, announce); return(oldValue); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="body"> /// </param> public void Send(IZoneClient client, MessageBody body) { this.Publish(new IMSendAOtomationMessageBodyToClient() { client = client, Body = body }); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="message"> /// </param> public void Send(IZoneClient client, Message message) { this.Publish(new IMSendAOtomationMessageToClient() { client = client, message = message }); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="messages"> /// </param> /// <returns> /// </returns> public static IMSendAOtomationMessageBodiesToClient CreateIM(IZoneClient client, MessageBody[] messages) { return(new IMSendAOtomationMessageBodiesToClient() { Bodies = messages, client = client }); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="list"> /// </param> /// <param name="statId"> /// </param> private static void AddStat3232(IZoneClient client, IList <GameTuple <int, uint> > list, int statId) { var tuple = new GameTuple <int, uint> { Value1 = statId, Value2 = client.Character.Stats[statId].BaseValue }; list.Add(tuple); }
/// <summary> /// </summary> /// <param name="message"> /// </param> /// <param name="client"> /// </param> protected override void Read(KnuBotTradeMessage message, IZoneClient client) { // Remove the item from the inventory client.Controller.Character.BaseInventory.Pages[(int)message.Container.Type].Remove( message.Container.Instance); // client.Character.Knubot. }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <returns> /// </returns> public static PlayfieldAnarchyFMessage Create(IZoneClient client) { var message = new PlayfieldAnarchyFMessage { Identity = new Identity { Type = IdentityType.Playfield2, Instance = client.Character.Playfield.Identity .Instance }, CharacterCoordinates = new Vector3 { X = client.Character.Coordinates.x, Y = client.Character.Coordinates.y, Z = client.Character.Coordinates.z, }, PlayfieldId1 = new Identity { Type = IdentityType.Playfield1, Instance = client.Character.Playfield.Identity .Instance }, PlayfieldId2 = new Identity { Type = IdentityType.Playfield2, Instance = client.Character.Playfield.Identity .Instance }, PlayfieldX = Playfields.GetPlayfieldX( client.Character.Playfield.Identity.Instance), PlayfieldZ = Playfields.GetPlayfieldZ( client.Character.Playfield.Identity.Instance) }; // TODO: Add the VendorHandler again /* var vendorcount = VendorHandler.GetNumberofVendorsinPlayfield(client.Character.PlayField); * if (vendorcount > 0) * { * var firstVendorId = VendorHandler.GetFirstVendor(client.Character.PlayField); * message.PlayfieldVendorInfo = new PlayfieldVendorInfo * { * VendorCount = vendorcount, * FirstVendorId = firstVendorId * }; * } */ return(message); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <returns> /// </returns> public static PlayfieldAnarchyFMessage Create(IZoneClient client) { var message = new PlayfieldAnarchyFMessage { Identity = new Identity { Type = IdentityType.Playfield2, Instance = client.Character.Playfield.Identity .Instance }, CharacterCoordinates = new Vector3 { X = client.Character.Coordinates.x, Y = client.Character.Coordinates.y, Z = client.Character.Coordinates.z, }, PlayfieldId1 = new Identity { Type = IdentityType.Playfield1, Instance = client.Character.Playfield.Identity .Instance }, PlayfieldId2 = new Identity { Type = IdentityType.Playfield2, Instance = client.Character.Playfield.Identity .Instance }, PlayfieldX = Playfields.GetPlayfieldX( client.Character.Playfield.Identity.Instance), PlayfieldZ = Playfields.GetPlayfieldZ( client.Character.Playfield.Identity.Instance) }; // TODO: Add the VendorHandler again /* var vendorcount = VendorHandler.GetNumberofVendorsinPlayfield(client.Character.PlayField); if (vendorcount > 0) { var firstVendorId = VendorHandler.GetFirstVendor(client.Character.PlayField); message.PlayfieldVendorInfo = new PlayfieldVendorInfo { VendorCount = vendorcount, FirstVendorId = firstVendorId }; } */ return message; }
/// <summary> /// </summary> /// <param name="message"> /// </param> /// <param name="client"> /// </param> protected override void Read(LookAtMessage message, IZoneClient client) { if (client.Controller.LookAt(message.Target)) { if (message.ReturnInfo != 1) { CharacterInfoPacketMessageHandler.Default.Send(client.Controller.Character, message.Target); } } }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="page"> /// </param> /// <param name="slotNumber"> /// </param> public static void Send(IZoneClient client, IInventoryPage page, int slotNumber) { switch (slotNumber) { case 6: var action167Message = new CharacterActionMessage() { Identity = client.Controller.Character.Identity, Action = CharacterActionType .ChangeAnimationAndStance, }; client.Controller.Character.Playfield.Announce(action167Message); var equipMessage = new CharacterActionMessage() { Identity = client.Controller.Character.Identity, Action = CharacterActionType.Equip, Target = page.Identity, Parameter1 = 0, Parameter2 = 6, }; client.Controller.Character.Send(equipMessage); break; default: IItem item = page[slotNumber]; var templateActionMessage = new TemplateActionMessage() { Identity = client.Controller.Character.Identity, ItemHighId = item.HighID, ItemLowId = item.LowID, Quality = item.Quality, Unknown1 = 1, Unknown2 = page is SocialArmorInventoryPage ? 7 : 6, Placement = new Identity() { Type = page.Identity .Type, Instance = slotNumber }, Unknown = 0, }; client.Controller.Character.Send(templateActionMessage); break; } }
/// <summary> /// Gets the zones for the subscription. /// </summary> /// <seealso href="https://api.cloudflare.com/#zone-list-zones"/> public static Task <IEnumerable <Zone> > GetAllZonesAsync( this IZoneClient client, ZoneGetParameters parameters = null) { if (client == null) { throw new ArgumentNullException(nameof(client)); } return(client.GetAllZonesAsync(CancellationToken.None, parameters)); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="MsgCategory"> /// </param> /// <param name="MsgNum"> /// </param> /// <returns> /// </returns> public static FeedbackMessage Create(IZoneClient client, int MsgCategory, int MsgNum) { return(new FeedbackMessage { Identity = client.Character.Identity, Unknown = 0x01, Unknown1 = 0x00000000, CategoryId = MsgCategory, MessageId = MsgNum }); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="MsgCategory"> /// </param> /// <param name="MsgNum"> /// </param> /// <returns> /// </returns> public static FeedbackMessage Create(IZoneClient client, int MsgCategory, int MsgNum) { return new FeedbackMessage { Identity = client.Character.Identity, Unknown = 0x01, Unknown1 = 0x00000000, CategoryId = MsgCategory, MessageId = MsgNum }; }
/// <summary> /// Gets the zones for the subscription. /// </summary> /// <seealso href="https://api.cloudflare.com/#zone-list-zones"/> public static Task <CloudFlareResponse <IReadOnlyList <Zone> > > GetZonesAsync( this IZoneClient client, ZoneGetParameters parameters = null) { if (client == null) { throw new ArgumentNullException(nameof(client)); } return(client.GetZonesAsync(CancellationToken.None, parameters)); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <returns> /// </returns> public static BankMessage Create(IZoneClient client) { BankMessage bank = new BankMessage() { Identity = client.Character.Identity, BankSlots = client.Character.BaseInventory.Pages[(int)IdentityType.Bank] .ToInventoryArray() }; return(bank); }
/// <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="client"> /// </param> /// <returns> /// </returns> public static BankMessage Create(IZoneClient client) { BankMessage bank = new BankMessage() { Identity = client.Character.Identity, BankSlots = client.Character.BaseInventory.Pages[(int)IdentityType.Bank] .ToInventoryArray() }; return bank; }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="item"> /// </param> /// <returns> /// </returns> public static AddTemplateMessage Create(IZoneClient client, Item item) { return new AddTemplateMessage { Identity = client.Character.Identity, Unknown = 0x00, LowId = item.LowID, HighId = item.HighID, Quality = item.Quality, Count = item.MultipleCount }; }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="item"> /// </param> /// <returns> /// </returns> public static AddTemplateMessage Create(IZoneClient client, Item item) { return(new AddTemplateMessage { Identity = client.Character.Identity, Unknown = 0x00, LowId = item.LowID, HighId = item.HighID, Quality = item.Quality, Count = item.MultipleCount }); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="statsToUpdate"> /// </param> public static void SendBulk(IZoneClient client, Dictionary <int, uint> statsToUpdate) { if (statsToUpdate.Count == 0) { return; } var toPlayfieldIds = new List <int>(); foreach (KeyValuePair <int, uint> keyValuePair in statsToUpdate) { if (client.Controller.Character.Stats[keyValuePair.Key].AnnounceToPlayfield) { toPlayfieldIds.Add(keyValuePair.Key); } } var toPlayfield = new List <GameTuple <CharacterStat, uint> >(); var toClient = new List <GameTuple <CharacterStat, uint> >(); foreach (KeyValuePair <int, uint> keyValuePair in statsToUpdate) { var statValue = new GameTuple <CharacterStat, uint> { Value1 = (CharacterStat)keyValuePair.Key, Value2 = keyValuePair.Value }; toClient.Add(statValue); if (toPlayfieldIds.Contains(keyValuePair.Key)) { toPlayfield.Add(statValue); } } var message = new StatMessage { Identity = client.Controller.Character.Identity, Stats = toClient.ToArray() }; client.SendCompressed(message); /* announce to playfield? */ if (toPlayfieldIds.Count > 0) { message.Stats = toPlayfield.ToArray(); client.Controller.Character.Playfield.AnnounceOthers(message, client.Controller.Character.Identity); } }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="item"> /// </param> public static void Send(IZoneClient client, Item item) { var message = new AddTemplateMessage { Identity = client.Character.Identity, Unknown = 0x00, LowId = item.LowID, HighId = item.HighID, Quality = item.Quality, Count = item.MultipleCount }; client.SendCompressed(message); }
/// <summary> /// </summary> /// <param name="identity"> /// </param> /// <param name="client"> /// </param> public Character(Identity identity, IZoneClient client) { this.identity = identity; this.BaseInventory = new UnitInventory(this.identity.Instance); this.pets = new List <Pet>(); this.client = client; this.Textures = new List <AOTextures>(); this.uploadedNanos = new List <AOUploadedNanos>(); this.meshLayer = new MeshLayers(); this.socialMeshLayer = new MeshLayers(); this.SocialTab = new Dictionary <int, int>(); // TODO: Load names here? }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="list"> /// </param> /// <param name="statId"> /// </param> private static void AddStat88(IZoneClient client, IList <GameTuple <byte, byte> > list, int statId) { if (statId > 255) { Console.WriteLine("AddStat88 statId(" + statId + ") > 255"); } var tuple = new GameTuple <byte, byte> { Value1 = (byte)statId, Value2 = (byte)client.Controller.Character.Stats[statId].BaseValue }; list.Add(tuple); }
/// <summary> /// Gets the zones for the subscription. /// </summary> /// <seealso href="https://api.cloudflare.com/#zone-zone-details"/> public static Task <Zone> GetZoneAsync( this IZoneClient client, IdentifierTag zoneId, CloudFlareAuth auth = null) { if (zoneId == null) { throw new ArgumentNullException(nameof(zoneId)); } if (client == null) { throw new ArgumentNullException(nameof(client)); } return(client.GetZoneAsync(zoneId, CancellationToken.None, auth)); }
/// <summary> /// </summary> /// <param name="message"> /// </param> /// <param name="client"> /// </param> protected override void Read(ZoneLoginMessage message, IZoneClient client) { ZoneClient zc = (ZoneClient)client; PlayerController pc = new PlayerController(zc); zc.Controller = pc; zc.CreateCharacter(message.CharacterId); zc.SendInitiateCompressionMessage(new InitiateCompressionMessage()); client.Controller.Character.Playfield = zc.Playfield; ClientConnected tmpClientConnected = new ClientConnected(); tmpClientConnected.Read(message.CharacterId, zc); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="item"> /// </param> /// <param name="container"> /// </param> /// <param name="placement"> /// </param> /// <returns> /// </returns> public static TemplateActionMessage Create(IZoneClient client, Item item, int container, int placement) { return(new TemplateActionMessage() { Identity = client.Character.Identity, ItemHighId = item.HighID, ItemLowId = item.LowID, Quality = item.Quality, Placement = new Identity() { Type = (IdentityType)container, Instance = placement }, Unknown1 = 1, Unknown2 = 3 }); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="container"> /// </param> /// <param name="placement"> /// </param> public static void TradeSkillTargetChanged(IZoneClient client, int container, int placement) { if ((container != 0) && (placement != 0)) { client.Controller.Character.TradeSkillTarget = new TradeSkillInfo(0, container, placement); Item item = client.Controller.Character.BaseInventory.GetItemInContainer(container, placement); TradeSkillPacket.SendTarget( client.Controller.Character, TradeSkill.Instance.TargetProcessesCount(item.HighID)); TradeSkillChanged(client); } else { client.Controller.Character.TradeSkillTarget = null; } }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="item"> /// </param> /// <param name="container"> /// </param> /// <param name="placement"> /// </param> /// <returns> /// </returns> public static TemplateActionMessage Create(IZoneClient client, Item item, int container, int placement) { return new TemplateActionMessage() { Identity = client.Character.Identity, ItemHighId = item.HighID, ItemLowId = item.LowID, Quality = item.Quality, Placement = new Identity() { Type = (IdentityType)container, Instance = placement }, Unknown1 = 1, Unknown2 = 3 }; }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="stat"> /// </param> /// <param name="value"> /// </param> /// <param name="announce"> /// </param> public static void SendDirect(IZoneClient client, int stat, uint value, bool announce) { var statMessage = new StatMessage { Identity = client.Character.Identity, Stats = new[] { new GameTuple <CharacterStat, uint> { Value1 = (CharacterStat)stat, Value2 = value } } }; client.SendCompressed(statMessage); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="page"> /// </param> /// <param name="slotNumber"> /// </param> public static void Send(IZoneClient client, IInventoryPage page, int slotNumber) { switch (slotNumber) { case 6: var action97Message = new CharacterActionMessage() { Identity = client.Controller.Character.Identity, Action = CharacterActionType.Unknown3, Parameter2 = 6 }; client.Controller.Character.Send(action97Message); break; default: IItem item = page[slotNumber]; var templateActionMessage = new TemplateActionMessage() { Identity = client.Controller.Character.Identity, ItemHighId = item.HighID, ItemLowId = item.LowID, Quality = item.Quality, Unknown1 = 1, Unknown2 = 7, Placement = new Identity() { Type = page.Identity .Type, Instance = slotNumber }, Unknown = 0, }; client.Controller.Character.Send(templateActionMessage); break; } }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="stat"> /// </param> /// <param name="value"> /// </param> /// <param name="announce"> /// </param> public static void Send(IZoneClient client, int stat, int value, bool announce) { Send(client, stat, (UInt32)value, announce); }
/// <summary> /// Set own stat (no announce) /// </summary> /// <param name="client"> /// Affected client /// </param> /// <param name="stat"> /// Stat /// </param> /// <param name="value"> /// Value /// </param> /// <param name="announce"> /// Let others on same playfield know? /// </param> /// <returns> /// The <see cref="uint"/>. /// </returns> public static uint Set(IZoneClient client, int stat, uint value, bool announce) { var oldValue = (uint)client.Character.Stats[stat].Value; Send(client, stat, value, announce); return oldValue; }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="stat"> /// </param> /// <param name="value"> /// </param> /// <param name="announce"> /// </param> public static void SendDirect(IZoneClient client, int stat, uint value, bool announce) { var statMessage = new StatMessage { Identity = client.Character.Identity, Stats = new[] { new GameTuple<CharacterStat, uint> { Value1 = (CharacterStat)stat, Value2 = value } } }; client.SendCompressed(statMessage); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="item"> /// </param> /// <param name="container"> /// </param> /// <param name="placement"> /// </param> public static void Send(IZoneClient client, Item item, int container, int placement) { client.Character.Send(Create(client, item, container, placement)); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <returns> /// </returns> public static FullCharacterMessage Create(IZoneClient client) { var fullCharacterMessage = new FullCharacterMessage { Identity = client.Character.Identity, Unknown1 = 25 }; /* part 1 of data */ List<InventorySlot> inventory = new List<InventorySlot>(); foreach (IInventoryPage ivp in client.Character.BaseInventory.Pages.Values) { foreach (KeyValuePair<int, IItem> kv in ivp.List()) { var temp = new InventorySlot { Placement = kv.Key, Flags = (short)kv.Value.Flags, Count = (short)kv.Value.MultipleCount, Identity = kv.Value.Identity, ItemLowId = kv.Value.LowID, ItemHighId = kv.Value.HighID, Quality = kv.Value.Quality, Unknown = kv.Value.Nothing }; inventory.Add(temp); } } fullCharacterMessage.InventorySlots = inventory.ToArray(); /* part 2 of data */ /* number of entries */ fullCharacterMessage.UploadedNanoIds = client.Character.UploadedNanos.Select(n => n.NanoId).ToArray(); /* part 3 of data */ /* number of entries */ fullCharacterMessage.Unknown2 = new object[0]; /* No idea what these are */ /* used to be skill locks + some unknown data */ // TODO: Find out what following 6 ints are fullCharacterMessage.Unknown3 = 1; fullCharacterMessage.Unknown4 = 0; fullCharacterMessage.Unknown5 = 1; fullCharacterMessage.Unknown6 = 0; fullCharacterMessage.Unknown7 = 1; fullCharacterMessage.Unknown8 = 0; /* part 6 of data (1-st stats block) */ /* Int32 stat number Int32 stat value */ var stats1 = new List<GameTuple<int, uint>>(); /* State */ AddStat3232(client, stats1, 7); /* UnarmedTemplateInstance */ AddStat3232(client, stats1, 418); /* Invaders Killed */ AddStat3232(client, stats1, 615); /* KilledByInvaders */ AddStat3232(client, stats1, 616); /* AccountFlags */ AddStat3232(client, stats1, 660); /* VP */ AddStat3232(client, stats1, 669); /* UnsavedXP */ AddStat3232(client, stats1, 592); /* NanoFocusLevel */ AddStat3232(client, stats1, 355); /* Specialization */ AddStat3232(client, stats1, 182); /* ShadowBreedTemplate */ AddStat3232(client, stats1, 579); /* ShadowBreed */ AddStat3232(client, stats1, 532); /* LastPerkResetTime */ AddStat3232(client, stats1, 577); /* SocialStatus */ AddStat3232(client, stats1, 521); /* PlayerOptions */ AddStat3232(client, stats1, 576); /* TempSaveTeamID */ AddStat3232(client, stats1, 594); /* TempSavePlayfield */ AddStat3232(client, stats1, 595); /* TempSaveX */ AddStat3232(client, stats1, 596); /* TempSaveY */ AddStat3232(client, stats1, 597); /* VisualFlags */ AddStat3232(client, stats1, 673); /* PvPDuelKills */ AddStat3232(client, stats1, 674); /* PvPDuelDeaths */ AddStat3232(client, stats1, 675); /* PvPProfessionDuelKills */ AddStat3232(client, stats1, 676); /* PvPProfessionDuelDeaths */ AddStat3232(client, stats1, 677); /* PvPRankedSoloKills */ AddStat3232(client, stats1, 678); /* PvPRankedSoloDeaths */ AddStat3232(client, stats1, 679); /* PvPRankedTeamKills */ AddStat3232(client, stats1, 680); /* PvPRankedTeamDeaths */ AddStat3232(client, stats1, 681); /* PvPSoloScore */ AddStat3232(client, stats1, 682); /* PvPTeamScore */ AddStat3232(client, stats1, 683); /* PvPDuelScore */ AddStat3232(client, stats1, 684); AddStat3232(client, stats1, 0x289); AddStat3232(client, stats1, 0x28a); /* SavedXP */ AddStat3232(client, stats1, 334); /* Flags */ AddStat3232(client, stats1, 0); /* Features */ AddStat3232(client, stats1, 224); /* ApartmentsAllowed */ AddStat3232(client, stats1, 582); /* ApartmentsOwned */ AddStat3232(client, stats1, 583); /* MonsterScale */ AddStat3232(client, stats1, 360); /* VisualProfession */ AddStat3232(client, stats1, 368); /* NanoAC */ AddStat3232(client, stats1, 168); AddStat3232(client, stats1, 214); AddStat3232(client, stats1, 221); /* LastConcretePlayfieldInstance */ AddStat3232(client, stats1, 191); /* MapOptions */ AddStat3232(client, stats1, 470); /* MapAreaPart1 */ AddStat3232(client, stats1, 471); /* MapAreaPart2 */ AddStat3232(client, stats1, 472); /* MapAreaPart3 */ AddStat3232(client, stats1, 585); /* MapAreaPart4 */ AddStat3232(client, stats1, 586); /* MissionBits1 */ AddStat3232(client, stats1, 256); /* MissionBits2 */ AddStat3232(client, stats1, 257); /* MissionBits3 */ AddStat3232(client, stats1, 303); /* MissionBits4 */ AddStat3232(client, stats1, 432); /* MissionBits5 */ AddStat3232(client, stats1, 65); /* MissionBits6 */ AddStat3232(client, stats1, 66); /* MissionBits7 */ AddStat3232(client, stats1, 67); /* MissionBits8 */ AddStat3232(client, stats1, 544); /* MissionBits9 */ AddStat3232(client, stats1, 545); /* MissionBits10 */ AddStat3232(client, stats1, 617); AddStat3232(client, stats1, 618); AddStat3232(client, stats1, 619); AddStat3232(client, stats1, 198); /* AutoAttackFlags */ AddStat3232(client, stats1, 349); /* PersonalResearchLevel */ AddStat3232(client, stats1, 263); /* GlobalResearchLevel */ AddStat3232(client, stats1, 264); /* PersonalResearchGoal */ AddStat3232(client, stats1, 265); /* GlobalResearchGoal */ AddStat3232(client, stats1, 266); /* BattlestationSide */ AddStat3232(client, stats1, 668); /* BattlestationRep */ AddStat3232(client, stats1, 670); /* Members */ AddStat3232(client, stats1, 300); fullCharacterMessage.Stats1 = stats1.ToArray(); /* Int32 stat number Int32 stat value */ var stats2 = new List<GameTuple<int, uint>>(); /* VeteranPoints */ AddStat3232(client, stats2, 68); /* MonthsPaid */ AddStat3232(client, stats2, 69); /* PaidPoints */ AddStat3232(client, stats2, 672); /* AutoAttackFlags */ AddStat3232(client, stats2, 349); /* XPKillRange */ AddStat3232(client, stats2, 275); /* InPlay */ AddStat3232(client, stats2, 194); /* Health (current health)*/ AddStat3232(client, stats2, 27); /* Life (max health)*/ AddStat3232(client, stats2, 1); /* Psychic */ AddStat3232(client, stats2, 21); /* Sense */ AddStat3232(client, stats2, 20); /* Intelligence */ AddStat3232(client, stats2, 19); /* Stamina */ AddStat3232(client, stats2, 18); /* Agility */ AddStat3232(client, stats2, 17); /* Strength */ AddStat3232(client, stats2, 16); /* Attitude */ AddStat3232(client, stats2, 63); /* Alignment (Clan Tokens) */ AddStat3232(client, stats2, 62); /* Cash */ AddStat3232(client, stats2, 61); /* Profession */ AddStat3232(client, stats2, 60); /* AggDef */ AddStat3232(client, stats2, 51); /* Icon */ AddStat3232(client, stats2, 79); /* Mesh */ AddStat3232(client, stats2, 12); /* RunSpeed */ AddStat3232(client, stats2, 156); /* DeadTimer */ AddStat3232(client, stats2, 34); /* Team */ AddStat3232(client, stats2, 6); /* Breed */ AddStat3232(client, stats2, 4); /* Sex */ AddStat3232(client, stats2, 59); /* LastSaveXP */ AddStat3232(client, stats2, 372); /* NextXP */ AddStat3232(client, stats2, 350); /* LastXP */ AddStat3232(client, stats2, 57); /* Level */ AddStat3232(client, stats2, 54); /* XP */ AddStat3232(client, stats2, 52); /* IP */ AddStat3232(client, stats2, 53); /* CurrentMass */ AddStat3232(client, stats2, 78); /* ItemType */ AddStat3232(client, stats2, 72); /* PreviousHealth */ AddStat3232(client, stats2, 11); /* CurrentState */ AddStat3232(client, stats2, 423); /* Age */ AddStat3232(client, stats2, 58); /* Side */ AddStat3232(client, stats2, 33); /* WaitState */ AddStat3232(client, stats2, 430); /* DriveWater */ AddStat3232(client, stats2, 117); /* MeleeMultiple */ AddStat3232(client, stats2, 101); /* LR_MultipleWeapon */ AddStat3232(client, stats2, 134); /* LR_EnergyWeapon */ AddStat3232(client, stats2, 133); /* RadiationAC */ AddStat3232(client, stats2, 94); /* SenseImprovement */ AddStat3232(client, stats2, 122); /* BowSpecialAttack */ AddStat3232(client, stats2, 121); /* Burst */ AddStat3232(client, stats2, 148); /* FullAuto */ AddStat3232(client, stats2, 167); /* MapNavigation */ AddStat3232(client, stats2, 140); /* DriveAir */ AddStat3232(client, stats2, 139); /* DriveGround */ AddStat3232(client, stats2, 166); /* BreakingEntry */ AddStat3232(client, stats2, 165); /* Concealment */ AddStat3232(client, stats2, 164); /* Chemistry */ AddStat3232(client, stats2, 163); /* Psychology */ AddStat3232(client, stats2, 162); /* ComputerLiteracy */ AddStat3232(client, stats2, 161); /* NanoProgramming */ AddStat3232(client, stats2, 160); /* Pharmaceuticals */ AddStat3232(client, stats2, 159); /* WeaponSmithing */ AddStat3232(client, stats2, 158); /* FieldQuantumPhysics */ AddStat3232(client, stats2, 157); /* AttackSpeed */ AddStat3232(client, stats2, 3); /* Evade */ AddStat3232(client, stats2, 155); /* Dodge */ AddStat3232(client, stats2, 154); /* Duck */ AddStat3232(client, stats2, 153); /* BodyDevelopment */ AddStat3232(client, stats2, 152); /* AimedShot */ AddStat3232(client, stats2, 151); /* FlingShot */ AddStat3232(client, stats2, 150); /* NanoProwessInitiative */ AddStat3232(client, stats2, 149); /* FastAttack */ AddStat3232(client, stats2, 147); /* SneakAttack */ AddStat3232(client, stats2, 146); /* Parry */ AddStat3232(client, stats2, 145); /* Dimach */ AddStat3232(client, stats2, 144); /* Riposte */ AddStat3232(client, stats2, 143); /* Brawl */ AddStat3232(client, stats2, 142); /* Tutoring */ AddStat3232(client, stats2, 141); /* Swim */ AddStat3232(client, stats2, 138); /* Adventuring */ AddStat3232(client, stats2, 137); /* Perception */ AddStat3232(client, stats2, 136); /* DisarmTraps */ AddStat3232(client, stats2, 135); /* NanoEnergyPool */ AddStat3232(client, stats2, 132); /* MaterialLocation */ AddStat3232(client, stats2, 131); /* MaterialCreation */ AddStat3232(client, stats2, 130); /* PsychologicalModification */ AddStat3232(client, stats2, 129); /* BiologicalMetamorphose */ AddStat3232(client, stats2, 128); /* MaterialMetamorphose */ AddStat3232(client, stats2, 127); /* ElectricalEngineering */ AddStat3232(client, stats2, 126); /* MechanicalEngineering */ AddStat3232(client, stats2, 125); /* Treatment */ AddStat3232(client, stats2, 124); /* FirstAid */ AddStat3232(client, stats2, 123); /* PhysicalProwessInitiative */ AddStat3232(client, stats2, 120); /* DistanceWeaponInitiative */ AddStat3232(client, stats2, 119); /* CloseCombatInitiative */ AddStat3232(client, stats2, 118); /* AssaultRifle */ AddStat3232(client, stats2, 116); /* Shotgun */ AddStat3232(client, stats2, 115); /* SubMachineGun */ AddStat3232(client, stats2, 114); /* Rifle */ AddStat3232(client, stats2, 113); /* Pistol */ AddStat3232(client, stats2, 112); /* Bow */ AddStat3232(client, stats2, 111); /* ThrownGrapplingWeapons */ AddStat3232(client, stats2, 110); /* Grenade */ AddStat3232(client, stats2, 109); /* ThrowingKnife */ AddStat3232(client, stats2, 108); /* 2HBluntWeapons */ AddStat3232(client, stats2, 107); /* Piercing */ AddStat3232(client, stats2, 106); /* 2HEdgedWeapons */ AddStat3232(client, stats2, 105); /* MeleeEnergyWeapon */ AddStat3232(client, stats2, 104); /* 1HEdgedWeapons */ AddStat3232(client, stats2, 103); /* 1HBluntWeapons */ AddStat3232(client, stats2, 102); /* MartialArts */ AddStat3232(client, stats2, 100); /* Alignment (Clan Tokens) */ AddStat3232(client, stats2, 62); /* MetaType (Omni Tokens) */ AddStat3232(client, stats2, 75); /* TitleLevel */ AddStat3232(client, stats2, 37); /* GmLevel */ AddStat3232(client, stats2, 215); /* FireAC */ AddStat3232(client, stats2, 97); /* PoisonAC */ AddStat3232(client, stats2, 96); /* ColdAC */ AddStat3232(client, stats2, 95); /* RadiationAC */ AddStat3232(client, stats2, 94); /* ChemicalAC */ AddStat3232(client, stats2, 93); /* EnergyAC */ AddStat3232(client, stats2, 92); /* MeleeAC */ AddStat3232(client, stats2, 91); /* ProjectileAC */ AddStat3232(client, stats2, 90); /* RP */ AddStat3232(client, stats2, 199); /* SpecialCondition */ AddStat3232(client, stats2, 348); /* SK */ AddStat3232(client, stats2, 573); /* Expansions */ AddStat3232(client, stats2, 389); /* ClanRedeemed */ AddStat3232(client, stats2, 572); /* ClanConserver */ AddStat3232(client, stats2, 571); /* ClanDevoted */ AddStat3232(client, stats2, 570); /* OTUnredeemed */ AddStat3232(client, stats2, 569); /* OTOperator */ AddStat3232(client, stats2, 568); /* OTFollowers */ AddStat3232(client, stats2, 567); /* GOS */ AddStat3232(client, stats2, 566); /* ClanVanguards */ AddStat3232(client, stats2, 565); /* OTTrans */ AddStat3232(client, stats2, 564); /* ClanGaia */ AddStat3232(client, stats2, 563); /* OTMed*/ AddStat3232(client, stats2, 562); /* ClanSentinels */ AddStat3232(client, stats2, 561); /* OTArmedForces */ AddStat3232(client, stats2, 560); /* SocialStatus */ AddStat3232(client, stats2, 521); /* PlayerID */ AddStat3232(client, stats2, 607); /* KilledByInvaders */ AddStat3232(client, stats2, 616); /* InvadersKilled */ AddStat3232(client, stats2, 615); /* AlienLevel */ AddStat3232(client, stats2, 169); /* AlienNextXP */ AddStat3232(client, stats2, 178); /* AlienXP */ AddStat3232(client, stats2, 40); fullCharacterMessage.Stats2 = stats2.ToArray(); /* Byte stat number Byte stat value */ var stats3 = new List<GameTuple<byte, byte>>(); /* InsurancePercentage */ AddStat88(client, stats3, 236); /* ProfessionLevel */ AddStat88(client, stats3, 10); /* PrevMovementMode */ AddStat88(client, stats3, 174); /* CurrentMovementMode */ AddStat88(client, stats3, 173); /* Fatness */ AddStat88(client, stats3, 47); /* Race */ AddStat88(client, stats3, 89); /* TeamSide */ AddStat88(client, stats3, 213); /* BeltSlots */ AddStat88(client, stats3, 45); fullCharacterMessage.Stats3 = stats3.ToArray(); /* Byte stat number Int16 (short) stat value */ var stats4 = new List<GameTuple<byte, short>>(); /* AbsorbProjectileAC */ AddStat816(client, stats4, 238); /* AbsorbMeleeAC */ AddStat816(client, stats4, 239); /* AbsorbEnergyAC */ AddStat816(client, stats4, 240); /* AbsorbChemicalAC */ AddStat816(client, stats4, 241); /* AbsorbRadiationAC */ AddStat816(client, stats4, 242); /* AbsorbColdAC */ AddStat816(client, stats4, 243); /* AbsorbNanoAC */ AddStat816(client, stats4, 246); /* AbsorbFireAC */ AddStat816(client, stats4, 244); /* AbsorbPoisonAC */ AddStat816(client, stats4, 245); /* TemporarySkillReduction */ AddStat816(client, stats4, 247); /* InsuranceTime */ AddStat816(client, stats4, 49); /* CurrentNano */ AddStat816(client, stats4, 214); /* maxMaxNanoEnergyEnergy */ AddStat816(client, stats4, 221); /* MaxNCU */ AddStat816(client, stats4, 181); /* MapFlags */ AddStat816(client, stats4, 9); /* ChangeSideCount */ AddStat816(client, stats4, 237); fullCharacterMessage.Stats4 = stats4.ToArray(); /* ? */ fullCharacterMessage.Unknown9 = 0; /* ? */ fullCharacterMessage.Unknown10 = 0; fullCharacterMessage.Unknown11 = new object[0]; fullCharacterMessage.Unknown12 = new object[0]; fullCharacterMessage.Unknown13 = new object[0]; return fullCharacterMessage; }
/// <summary> /// </summary> /// <param name="identity"> /// </param> /// <param name="client"> /// </param> public Character(Identity identity, IZoneClient client) { this.identity = identity; this.BaseInventory = new UnitInventory(this.identity.Instance); this.pets = new List<Pet>(); this.client = client; this.Textures = new List<AOTextures>(); this.uploadedNanos = new List<AOUploadedNanos>(); this.meshLayer = new MeshLayers(); this.socialMeshLayer = new MeshLayers(); this.SocialTab = new Dictionary<int, int>(); // TODO: Load names here? }
/// <summary> /// </summary> /// <param name="character"> /// </param> /// <param name="receiver"> /// </param> public static void SendToOne(ICharacter character, IZoneClient receiver) { SimpleCharFullUpdateMessage message = ConstructMessage((Character)character); receiver.Controller.Character.Send(message); }
/// <summary> /// Sends chat server info to client /// </summary> /// <param name="client"> /// Client that gets the info /// </param> public static void Send(IZoneClient client) { client.Character.Send(Create()); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="MsgCategory"> /// </param> /// <param name="MsgNum"> /// </param> /// <returns> /// </returns> public static bool Send(IZoneClient client, int MsgCategory, int MsgNum) { client.Character.Send(Create(client, MsgCategory, MsgNum)); return true; }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="messages"> /// </param> /// <returns> /// </returns> public static IMSendAOtomationMessageBodiesToClient CreateIM(IZoneClient client, MessageBody[] messages) { return new IMSendAOtomationMessageBodiesToClient() { Bodies = messages, client = client }; }
public PlayerController(IZoneClient client) { this.Client = client; }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <returns> /// </returns> public static SimpleCharFullUpdateMessage ConstructMessage(IZoneClient client) { return ConstructMessage((Character)client.Controller.Character); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="item"> /// </param> public static void Send(IZoneClient client, Item item) { client.Character.Playfield.Send(client, Create(client, item)); }
/// <summary> /// </summary> /// <param name="client"> /// </param> public static void SendToPlayfield(IZoneClient client) { SimpleCharFullUpdateMessage message = ConstructMessage(client); client.Controller.Character.Playfield.Announce(message); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="list"> /// </param> /// <param name="statId"> /// </param> private static void AddStat3232(IZoneClient client, IList<GameTuple<int, uint>> list, int statId) { var tuple = new GameTuple<int, uint> { Value1 = statId, Value2 = client.Character.Stats[statId].BaseValue }; list.Add(tuple); }
/// <summary> /// </summary> /// <param name="client"> /// </param> public void Reconnect(IZoneClient client) { this.Controller.Client = client; }
/// <summary> /// </summary> /// <param name="client"> /// </param> public static void Send(IZoneClient client) { PlayfieldAnarchyFMessage message = Create(client); client.SendCompressed(message); }
/// <summary> /// </summary> /// <param name="client"> /// </param> public static void Send(IZoneClient client) { // TODO: Let this in for now, it needs to be removed when Character login is rewritten client.SendCompressed(Create(client)); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="statsToUpdate"> /// </param> public static void SendBulk(IZoneClient client, Dictionary<int, uint> statsToUpdate) { if (statsToUpdate.Count == 0) { return; } var toPlayfieldIds = new List<int>(); foreach (KeyValuePair<int, uint> keyValuePair in statsToUpdate) { if (client.Character.Stats[keyValuePair.Key].AnnounceToPlayfield) { toPlayfieldIds.Add(keyValuePair.Key); } } var toPlayfield = new List<GameTuple<CharacterStat, uint>>(); var toClient = new List<GameTuple<CharacterStat, uint>>(); foreach (KeyValuePair<int, uint> keyValuePair in statsToUpdate) { var statValue = new GameTuple<CharacterStat, uint> { Value1 = (CharacterStat)keyValuePair.Key, Value2 = keyValuePair.Value }; toClient.Add(statValue); if (toPlayfieldIds.Contains(keyValuePair.Key)) { toPlayfield.Add(statValue); } } var message = new StatMessage { Identity = client.Character.Identity, Stats = toClient.ToArray() }; client.SendCompressed(message); /* announce to playfield? */ if (toPlayfieldIds.Count > 0) { message.Stats = toPlayfield.ToArray(); client.Character.Playfield.AnnounceOthers(message, client.Character.Identity); } }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="list"> /// </param> /// <param name="statId"> /// </param> private static void AddStat88(IZoneClient client, IList<GameTuple<byte, byte>> list, int statId) { if (statId > 255) { Console.WriteLine("AddStat88 statId(" + statId + ") > 255"); } var tuple = new GameTuple<byte, byte> { Value1 = (byte)statId, Value2 = (byte)client.Character.Stats[statId].BaseValue }; list.Add(tuple); }
/// <summary> /// </summary> /// <param name="client"> /// </param> /// <param name="stat"> /// </param> /// <param name="value"> /// </param> /// <param name="announce"> /// </param> public static void Send(IZoneClient client, int stat, uint value, bool announce) { var statMessage = new StatMessage { Identity = client.Character.Identity, Stats = new[] { new GameTuple<CharacterStat, uint> { Value1 = (CharacterStat)stat, Value2 = value } } }; var statM = new Message { Body = statMessage }; if (!client.Character.DoNotDoTimers) { client.Character.Playfield.Publish( new IMSendAOtomationMessageToClient { client = client, message = statM }); } /* announce to playfield? */ if (announce) { client.Character.Playfield.AnnounceOthers(statMessage, client.Character.Identity); } }