مشاهدة النسخة كاملة : مشــكــلةة ف الـويـر درو9وب
manshestar
2019-08-19, 03:45 AM
يا جدعان عندي الوار دروب مش بيسيف اي حاجة لو جبت مونت او جرمنت و لبسته و قفلت الاكونت و فتحته بيختفه من الوار دروب بس بيجيبلك الجرمنت الي كنت لابسه الاول خالص اول جرمنت لبسته
و الاجنحة نفس النظام لازم تقلع حاجة من الاصطفة و تلبسها علشان الرانك يتحدث و يتفتحلك الاجنحة الي كانت معاك
Hassan Emprator
2019-08-19, 04:04 AM
جرب بدل دا بي العندك كلاس wardrobeusing ProtoBuf;
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Collections.Concurrent;
using System.Text;
using System.Threading.Tasks;
namespace MrHassan.Network.GamePackets
{
public sealed class CoatStorage
{
public CoatStorage() { }
public bool Read(byte[] packet)
{
using (var memoryStream = new MemoryStream(packet))
{
Info = Serializer.DeserializeWithLengthPrefix<CoatStorageProto>(memoryStream, PrefixStyle.Fixed32);
}
return true;
}
public void Handle(Client.GameState client)
{
switch (Info.ActionId)
{
case Action.Combine:
{
ConquerItem ItemInInventory = null;
ConquerItem ItemInSystem = null;
if (client.Inventory.TryGetItem((uint)Info.ItemId, out ItemInInventory))
{
if (client.Entity.StorageItems.TryGetValue((uint)Info .ItemGuid, out ItemInSystem))
{
ItemInSystem.Minutes += ItemInInventory.Minutes;
Database.ConquerItemTable.UpdateMinutes(ItemInSyst em);
if (ItemInSystem.Minutes != 0)
{
uint num;
if (DateTime.Now >= ItemInSystem.TimeStamp.AddMinutes(ItemInSystem.Min utes))
{
Database.ConquerItemTable.DeleteItem(ItemInSystem. UID);
}
else
{
TimeSpan span = new TimeSpan(ItemInSystem.TimeStamp.AddMinutes(ItemInS ystem.Minutes).Ticks);
TimeSpan span2 = new TimeSpan(DateTime.Now.Ticks);
num = (uint)(span.TotalSeconds - span2.TotalSeconds);
ItemInSystem.TimeLeftInMinutes = num;
}
}
client.Inventory.Remove(ItemInInventory, Game.Enums.ItemUse.Remove);
var proto = new CoatStorageProto();
proto.ActionId = Action.Combine;
proto.ItemGuid = Info.ItemGuid;
proto.ItemId = (int)ItemInSystem.ID;
proto.AddItem(ItemInSystem, 1);
client.Send(FinalizeProtoBuf(proto));
}
}
break;
}
case Action.Equipcheck:
ConquerItem myItem;
if (client.Inventory.TryGetItem(Info.ItemGuid, out myItem))
{
var packet = FinalizeProtoBuf(new CoatStorageProto()
{
ActionId = Info.ActionId,
ItemGuid = Info.ItemGuid,
});
client.Send(packet);
}
break;
case Action.Addtowardrobe:
{
if (!CanEquip(Info, client))
{
if (client.Inventory.TryGetItem(Info.ItemGuid, out myItem))
{
if (!client.Entity.StorageItems.ContainsKey(myItem.UI D))
client.Entity.StorageItems.Add(myItem.UID, myItem);
myItem.InWardrobe = true;
Database.ConquerItemTable.UpdateWardrobe(myItem.In Wardrobe, myItem.UID);
client.Inventory.Remove(myItem, Game.Enums.ItemUse.None);
}
break;
}
if (client.Entity.StorageItems.TryGetValue(Info.ItemG uid, out myItem))
{
foreach (var i in client.Entity.StorageItems.Values)
{
if (i.Position == (byte)PacketHandler.GetPositionFromID(myItem.ID))
{
if (client.Equipment.TryGetItem((byte)i.Position) != null)
client.Equipment.Remove((byte)i.Position, true);
i.Position = 0;
Database.ConquerItemTable.UpdateLocation(i, client);
}
}
myItem.Position = (byte)PacketHandler.GetPositionFromID(myItem.ID);
if (!client.Equipment.Add(myItem))
{
client.Equipment.Remove((byte)myItem.Position, true);
}
var iu = new ItemUsage(true);
iu.ID = ItemUsage.Unknown5;
iu.UID = myItem.UID;
iu.dwParam = myItem.Position;
client.Send(iu.ToArray());
ClientEquip equips = new ClientEquip();
equips.DoEquips(client);
client.Send(equips.ToArray());
Database.ConquerItemTable.UpdateLocation(myItem, client);
client.Equipment.UpdateEntityPacket();
client.Send(FinalizeProtoBuf(new CoatStorageProto()
{
ActionId = Info.ActionId,
ItemGuid = Info.ItemGuid,
ItemId = (int)myItem.ID
}));
}
else if (client.Inventory.TryGetItem(Info.ItemGuid, out myItem))
{
client.Entity.StorageItems.Add(myItem.UID, myItem);
myItem.InWardrobe = true;
Database.ConquerItemTable.UpdateWardrobe(myItem.In Wardrobe, myItem.UID);
client.Inventory.Remove(myItem, Game.Enums.ItemUse.None);
client.Send(FinalizeProtoBuf(new CoatStorageProto()
{
ActionId = Info.ActionId,
ItemGuid = Info.ItemGuid,
ItemId = (int)myItem.ID
}));
foreach (var i in client.Entity.StorageItems.Values)
{
if (i.Position != 0 && i.Position == (byte)PacketHandler.GetPositionFromID(myItem.ID))
{
if (client.Equipment.TryGetItem((byte)i.Position) != null)
client.Equipment.Remove((byte)i.Position, true);
i.Position = 0;
Database.ConquerItemTable.UpdateLocation(i, client);
}
}
myItem.Position = (byte)PacketHandler.GetPositionFromID(myItem.ID);
if (!client.Equipment.Add(myItem))
{
client.Equipment.Remove((byte)myItem.Position, true);
}
var iu = new ItemUsage(true);
iu.ID = ItemUsage.Unknown5;
iu.UID = myItem.UID;
iu.dwParam = myItem.Position;
client.Send(iu.ToArray());
ClientEquip equips = new ClientEquip();
equips.DoEquips(client);
client.Send(equips.ToArray());
Database.ConquerItemTable.UpdateLocation(myItem, client);
client.Equipment.UpdateEntityPacket();
}
break;
}
case Action.Takeoff:
if (client.Entity.StorageItems.TryGetValue(Info.ItemG uid, out myItem))
{
client.Send(FinalizeProtoBuf(new CoatStorageProto()
{
ActionId = Info.ActionId,
ItemGuid = Info.ItemGuid,
ItemId = (int)myItem.ID
}));
var pos = (byte)PacketHandler.GetPositionFromID(myItem.ID);
client.Equipment.Remove(pos, true);
ClientEquip equips = new ClientEquip();
equips.DoEquips(client);
if (pos == 17)
equips.SteedArmor = 0;
else equips.Garment = 0;
client.Send(equips.ToArray());
client.Equipment.UpdateEntityPacket();
}
break;
case Action.Retrieve:
if (client.Entity.StorageItems.TryGetValue(Info.ItemG uid, out myItem) && client.Inventory.Count < 40)
{
var pos = (byte)PacketHandler.GetPositionFromID(myItem.ID);
client.Entity.StorageItems.Remove(myItem.UID);
myItem.InWardrobe = false;
Database.ConquerItemTable.UpdateWardrobe(myItem.In Wardrobe, myItem.UID);
client.Send(FinalizeProtoBuf(new CoatStorageProto()
{
ActionId = Info.ActionId,
ItemGuid = Info.ItemGuid,
ItemId = (int)myItem.ID
}));
client.Inventory.Add(myItem, Game.Enums.ItemUse.Move);
ClientEquip equips = new ClientEquip();
equips.DoEquips(client);
if (pos == 17)
equips.SteedArmor = 0;
else equips.Garment = 0;
client.Send(equips.ToArray());
client.Equipment.UpdateEntityPacket();
}
break;
}
new TitleStorage().CheckTitles(client);
}
private bool CanEquip(CoatStorageProto Info, Client.GameState client)
{
ConquerItem myItem;
if (client.Inventory.TryGetItem(Info.ItemGuid, out myItem) ||
client.Entity.StorageItems.TryGetValue(Info.ItemGu id, out myItem) ||
client.Equipment.TryGetItem(Info.ItemGuid, out myItem))
{
var dbInfo = Database.ConquerItemInformation.BaseInformations.C ontainsKey(myItem.ID) ?
Database.ConquerItemInformation.BaseInformations[myItem.ID] : null;
if (dbInfo == null)
return false;
bool isSteedArmor = PacketHandler.GetPositionFromID(myItem.ID) == PacketHandler.Positions.SteedArmor;
bool CanEquipSteedArmor = isSteedArmor && client.Entity.SubClasses.Classes.ContainsKey(9)
&& client.Entity.SubClasses.Classes[9].Phase >= Database.ConquerItemInformation.BaseInformations[myItem.ID].Proficiency;
if (!isSteedArmor)
{
var charSex = (client.Entity.Body == 1003 || client.Entity.Body == 1004) ? "Male" : "Female";
if ((dbInfo.Gender == 1 ? charSex != "Male" : dbInfo.Gender == 0 ? false : charSex != "Female"))
{
return false;
}
}
else if (isSteedArmor && !CanEquipSteedArmor) return false;
}
else return false;
return true;
}
private byte[] FinalizeProtoBuf(CoatStorageProto coatStorageProto)
{
using (var memoryStream = new MemoryStream())
{
Serializer.SerializeWithLengthPrefix(memoryStream, coatStorageProto, PrefixStyle.Fixed32);
var pkt = new byte[8 + memoryStream.Length];
memoryStream.ToArray().CopyTo(pkt, 0);
Writer.Write((ushort)memoryStream.Length, 0, pkt);
Writer.Write((ushort)3300, 2, pkt);
return pkt;
}
}
public void Login(Client.GameState client)
{
var pkt = new CoatStorageProto();
foreach (var item in client.Entity.StorageItems.Values)
{
pkt.AddItem(item,
client.Entity.StorageItems.Values.Where(i => i.ID == item.ID).Count());
client.Send(FinalizeProtoBuf(pkt));
if (item.Position != 0)
{
client.Equipment.Add(item);
var iu = new ItemUsage(true);
iu.ID = ItemUsage.Unknown5;
iu.UID = item.UID;
iu.dwParam = item.Position;
client.Send(iu.ToArray());
ClientEquip equips = new ClientEquip();
equips.DoEquips(client);
client.Send(equips.ToArray());
Database.ConquerItemTable.UpdateLocation(item, client);
client.Equipment.UpdateEntityPacket();
}
}
var currentGarment = client.Equipment.TryGetItem((byte)PacketHandler.Po sitions.Garment);
if (currentGarment != null && !client.Entity.StorageItems.ContainsKey(currentGar ment.UID))
{
client.Entity.StorageItems.Add(currentGarment.UID, currentGarment);
pkt.AddItem(currentGarment,
client.Entity.StorageItems.Values.Where(i => i.ID == currentGarment.ID).Count());
pkt.Item.Equipped = true;
client.Send(FinalizeProtoBuf(pkt));
}
var currentMountArmor = client.Equipment.TryGetItem((byte)PacketHandler.Po sitions.SteedArmor);
if (currentMountArmor != null && !client.Entity.StorageItems.ContainsKey(currentMou ntArmor.UID))
{
client.Entity.StorageItems.Add(currentMountArmor.U ID, currentMountArmor);
pkt.AddItem(currentMountArmor,
client.Entity.StorageItems.Values.Where(i => i.ID == currentMountArmor.ID).Count());
pkt.Item.Equipped = true;
client.Send(FinalizeProtoBuf(pkt));
}
}
public CoatStorageProto Info;
public enum Action : int
{
/// <summary>
/// Load items in storage ...
/// </summary>
Login = 0,
Equipcheck = 1,
Retrieve = 2,
Combine = 4,
Addtowardrobe = 5,
Takeoff = 6,
dwParam = 7,
}
}
[ProtoContract]
public class CoatStorageProto
{
[ProtoMember(1, IsRequired = true)]
public CoatStorage.Action ActionId;
[ProtoMember(2, IsRequired = true)]
public uint ItemGuid;
[ProtoMember(3, IsRequired = true)]
public int ItemId;
[ProtoMember(4, IsRequired = true)]
public int Junk;
[ProtoMember(5, IsRequired = true)]
public ItemStorage Item;
public void AddItem(ConquerItem item, int stack)
{
Item = new ItemStorage();
Item.ItemUID = item.UID;
Item.ItemID = (int)item.ID;
Item.Maximumdurability = Item.Minimumdurability = item.MaximDurability;
Item.Stack = stack;
Item.FirstSocket = (int)item.SocketOne;
Item.SecondSocket = (int)item.SocketTwo;
Item.Plus = item.Plus;
Item.Protection = item.Bless;
Item.Bound = item.Bound;
Item.Health = item.Enchant;
Item.SocketProgress = (int)item.SocketProgress;
Item.Effect = item.Effect;
Item.Color = item.Color;
Item.CraftProgress = (int)item.PlusProgress;
Item.Locked = item.Lock == 1 ? true : false;
Item.Suspicious = false;
Item.Inscribed = false;
Item.dwParam7 = 0;
Item.Equipped = item.Position != 0;
Item.dwParam15 = 0;
Item.Time = 0;
Item.SubTime = 0;
}
}
[ProtoContract]
public class ItemStorage
{
[ProtoMember(1, IsRequired = true)]
public uint ItemUID;
[ProtoMember(2, IsRequired = true)]
public int ItemID;
[ProtoMember(3, IsRequired = true)]
public int SocketProgress;
[ProtoMember(4, IsRequired = true)]
public int FirstSocket;
[ProtoMember(5, IsRequired = true)]
public int SecondSocket;
[ProtoMember(6, IsRequired = true)]
public Game.Enums.ItemEffect Effect;
[ProtoMember(7, IsRequired = true)]
public int dwParam7;
[ProtoMember(8, IsRequired = true)]
public int Plus;
[ProtoMember(9, IsRequired = true)]
public int Protection;
[ProtoMember(10, IsRequired = true)]
public bool Bound;
[ProtoMember(11, IsRequired = true)]
public int Health;
[ProtoMember(12, IsRequired = true)]
public bool Equipped;
[ProtoMember(13, IsRequired = true)]
public bool Suspicious;
[ProtoMember(14, IsRequired = true)]
public bool Locked;
[ProtoMember(15, IsRequired = true)]
public int dwParam15;
[ProtoMember(16, IsRequired = true)]
public Game.Enums.Color Color;
[ProtoMember(17, IsRequired = true)]
public int CraftProgress;
/// <summary>
/// Inscribed in guild arsenal
/// This class is for wardrobe items which are garments or mount armors so this filed is always false
/// </summary>
[ProtoMember(18, IsRequired = true)]
public bool Inscribed;
/// <summary>
/// Time left in seconds !
/// </summary>
[ProtoMember(19, IsRequired = true)]
public int Time;
/// <summary>
/// Time left in minutes (if item not activated only)
/// </summary>
[ProtoMember(20, IsRequired = true)]
public int SubTime;
[ProtoMember(21, IsRequired = true)]
public int Stack;
[ProtoMember(22, IsRequired = true)]
public int Minimumdurability;
[ProtoMember(23, IsRequired = true)]
public int Maximumdurability;
}
public static class Storage
{
private static string Path = Constants.DataHolderPath + "Storage.ini";
public static void Read(out StorageInfo storageInfo)
{
storageInfo = new StorageInfo();
var reader = new IniFile(Path);
{
storageInfo.Count = reader.ReadInt32("Storage", "StorageTypeCount", 0);
storageInfo.Storages = new StorageInfo.Storage[storageInfo.Count];
for (int i = 0; i < storageInfo.Count; i++)
{
var mySection = (i + 1).ToString();
storageInfo.Storages[i] = new StorageInfo.Storage();
storageInfo.Storages[i].Type = reader.ReadInt32(mySection, "Type", 0);
storageInfo.Storages[i].UnitCount = reader.ReadInt32(mySection, "UnitCount", 0);
storageInfo.Storages[i].ViewType = reader.ReadInt32(mySection, "ViewType", 0);
storageInfo.Storages[i].Units = new StorageInfo.Storage.Unit[storageInfo.Storages[i].UnitCount];
for (int u = 0; u < storageInfo.Storages[i].UnitCount; u++)
{
var unitSection = mySection + "-" + (u + 1).ToString();
storageInfo.Storages[i].Units[u] = new StorageInfo.Storage.Unit();
storageInfo.Storages[i].Units[u].ID = reader.ReadInt32(unitSection, "ID", 0);
storageInfo.Storages[i].Units[u].AniSection = reader.ReadString(unitSection, "AniSection");
storageInfo.Storages[i].Units[u].GetWayType3 = reader.ReadInt32(unitSection, "GetWayType3", 0);
storageInfo.Storages[i].Units[u].GetWayText3 = reader.ReadString(unitSection, "GetWayText3");
storageInfo.Storages[i].Units[u].Param = reader.ReadString(unitSection, "Param");
storageInfo.Storages[i].Units[u].Intro = reader.ReadString(unitSection, "Intro");
}
}
}
//Console.WriteLine("Storages loaded");
}
}
[StructLayout(LayoutKind.Sequential)]
public class StorageInfo
{
public int Count;
public Storage[] Storages;
public class Storage
{
public int Type;
public int UnitCount;
public int ViewType;
public Unit[] Units;
public class Unit
{
public int ID;
public string AniSection;
public int GetWayType3;
public string GetWayText3;
public string Param;
public string Intro;
}
}
public Storage GetStorageByType(int Type)
{
foreach (var storage in Storages)
if (storage != null && storage.Type == Type)
return storage;
return null;
}
public Storage.Unit GetUnitByID(int ID, Storage _storage = null)
{
if (_storage != null)
{
foreach (var unit in _storage.Units)
if (unit.ID == ID)
return unit;
}
else
{
foreach (var storage in Storages)
if (storage != null)
foreach (var unit in storage.Units)
if (unit.ID == ID)
return unit;
}
return null;
}
}
public sealed class StorageManager
{
public static StorageInfo Info;
public static void Load()
{
try
{
Storage.Read(out Info);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
public static T Wing<T>(int _type, int _id)
{
object value = null;
int trash = 0;
if (typeof(T) == typeof(bool))
{
value = int.TryParse(Info.GetUnitByID(_id, Info.GetStorageByType(_type)).Param, out trash);
}
else if (typeof(T) == typeof(int))
{
var myType = _type.ToString();
var myID = _id.ToString();
while (myID.Length < 4)
myID = "0" + myID;
value = int.Parse(myType + myID);
}
else
throw new Exception("Unknow type : " + typeof(T).Name);
return (T)Convert.ChangeType(value, typeof(T));
}
public static int GetTitlePoints(short _type, short _id)
{
if (_type == 1 && _id == 1000)
return 150;
else if (_type == 2018 && _id == 1)
return 500;
else if (_type == 2001 && _id == 2)
return 300;
else if (_type == 2002 && _id == 3)
return 150;
else if (_type == 2003 && _id == 4)
return 300;
else if (_type == 2004 && _id == 5)
return 150;
else if (_type == 2005 && _id == 6)
return 150;
else if (_type == 2006 && _id == 7)
return 150;
else if (_type == 2020 && _id == 2020)
return 300;
else if (_type == 2021 && _id == 2021)
return 200;
else if (_type == 2022 && _id == 2022)
return 100;
else if (_type == 2023 && _id == 2023)
return 300;
else if (_type == 2024 && _id == 2024)
return 200;
else if (_type == 2025 && _id == 2025)
return 100;
else if (_type == 2028 && _id == 2028)
return 150;
else if (_type == 2029 && _id == 2029)
return 300;
else if (_type == 2030 && _id == 2030)
return 100;
else if (_type == 2031 && _id == 2031)
return 200;
else if (_type == 6009 && _id == 6009)
return 300;
else if (_type == 6007 && _id == 6007)
return 300;
else if (_type == 6008 && _id == 6008)
return 300;
else if (_type == 2026 && _id == 2026)
return 100;
else if (_type == 2027 && _id == 2027)
return 300;
else if (_type == 2032 && _id == 2032)
return 300;
else if (_type == 2033 && _id == 2033)
return 300;
else if (_type == 6011 && _id == 6011)
return 300;
else if (_type == 2034 && _id == 2034)
return 300;
else if (_type == 2013 && _id == 14)
return 300;
else if (_type == 2014 && _id == 15)
return 300;
else if (_type == 2015 && _id == 16)
return 300;
else if (_type == 2016 && _id == 17)
return 300;
else if (_type == 2035 && _id == 2035)
return 300;
else if (_type == 2036 && _id == 2036)
return 300;
else if (_type == 2037 && _id == 2037)
return 300;
else if (_type == 2038 && _id == 2038)
return 300;
else if (_type == 2039 && _id == 2039)
return 300;
else if (_type == 2040 && _id == 2040)
return 100;
else if (_type == 2041 && _id == 2041)
return 100;
else if (_type == 2044 && _id == 2044)
return 100;
else if (_type == 2045 && _id == 2045)
return 100;
else if (_type == 6012 && _id == 6012)
return 100;
else if (_type == 2050 && _id == 2050)
return 100;
else if (_type == 2051 && _id == 2051)
return 100;
else if (_type == 2052 && _id == 2052)
return 100;
else if (_type == 2053 && _id == 2053)
return 150;
else if (_type == 2054 && _id == 2054)
return 150;
else if (_type == 2057 && _id == 2057)
return 150;
else if (_type == 2056 && _id == 2056)
return 100;
else if (_type == 2046 && _id == 2046)
return 150;
else if (_type == 2047 && _id == 2047)
return 150;
else if (_type == 2048 && _id == 2048)
return 150;
else if (_type == 2049 && _id == 2049)
return 150;
else if (_type == 2059 && _id == 2059)
return 100;
else if (_type == 2060 && _id == 2060)
return 150;
else if (_type == 2061 && _id == 2061)
return 150;
else if (_type == 2062 && _id == 2062)
return 150;
else if (_type == 6013 && _id == 6013)
return 100;
else if (_type == 6014 && _id == 6014)
return 150;
else if (_type == 6015 && _id == 6015)
return 150;
else if (_type == 6016 && _id == 6016)
return 150;
else if (_type == 6017 && _id == 6017)
return 150;
else if (_type == 2063 && _id == 2063)
return 150;
else if (_type == 2064 && _id == 2064)
return 150;
else if (_type == 2065 && _id == 2065)
return 150;
return 0;
}
public static T Title<T>(int _type, int _id)
{
object value = null;
int trash = 0;
if (typeof(T) == typeof(bool))
{
value = !int.TryParse(Info.GetUnitByID(_id, Info.GetStorageByType(_type)).Param, out trash);
}
else if (typeof(T) == typeof(int))
{
var myType = _type.ToString();
var myID = _id.ToString();
while (myID.Length < 4)
myID = "0" + myID;
value = int.Parse(myType + myID);
}
else
throw new Exception("Unknow type : " + typeof(T).Name);
return (T)Convert.ChangeType(value, typeof(T));
}
}
public sealed class TitleStorage
{
public TitleStorage() { }
public bool Read(byte[] packet)
{
using (var memoryStream = new MemoryStream(packet))
{
Info = Serializer.DeserializeWithLengthPrefix<TitleStorageProto>(memoryStream, PrefixStyle.Fixed32);
}
return true;
}
private bool CollectedRandMonkey(Client.GameState client)
{
return client.Entity.StorageItems.Values.Where(p => MonkeysValues.Contains(p.ID)).ToList().Count > 0 ? true : false;
}
private bool CollectedCelestialFox(Client.GameState client)
{
return client.Entity.StorageItems.Values.Where(p => p.ID == 200595).ToList().Count > 0 ? true : false;
}
private bool CollectedCelestialFoxFantasy(Client.GameState client)
{
return client.Entity.StorageItems.Values.Where(p => p.ID == 200596).ToList().Count > 0 ? true : false;
}
List<uint> MonkeysValues = new List<uint>()
{
200553,
200554,
200555,
200556,
200557,
200558,
200559,
200560
};
private bool Collected8TypesMonkey(Client.GameState client)
{
List<uint> IDs = new List<uint>();
var Dict = client.Entity.StorageItems.Values.ToList();
for (int x = 0; x < Dict.Count; x++)
{
if (MonkeysValues.Contains(Dict[x].ID) && !IDs.Contains(Dict[x].ID))
{
IDs.Add(Dict[x].ID);
}
}
return IDs.Count == 8 ? true : false;
}
private bool CollectedMonkey(Client.GameState client, uint ID)
{
return client.Entity.StorageItems.Values.Where(p => p.ID == ID).ToList().Count > 0 ? true : false;
}
public void CheckTitles(Client.GameState client)
{
if (client.Entity.haveallTitles) { GetAll(client); return; }
#region Titles And Wings Equips
#region Wings
#region Union Emperor
if (client.Union != null)
if (client.Union.IsKingdom())
if (client.Union.IsLeader(client.Entity.UID))
new TitleStorage().AddTitle(client, 4001, 1000, false);
else
new TitleStorage().RemoveTitle(client, 4001, 1000, false);
else
new TitleStorage().RemoveTitle(client, 4001, 1000, false);
else
new TitleStorage().RemoveTitle(client, 4001, 1000, false);
#endregion
#region The Champion Of Elite Pk Tournament
if (client.Entity.Titles.ContainsKey(TitlePacket.Titl es.ElitePKChamption_High))
{
DateTime date = DateTime.Now;
for (int i = DateTime.Now.Day; i < 31; i++)
{
date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, i);
if (date.DayOfWeek == DayOfWeek.Friday)
{
date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, i, 19, 55, 0);
break;
}
}
if (date.Day == DateTime.Now.Day && date.Hour == DateTime.Now.Hour && date.Year == DateTime.Now.Year && date.Minute == date.Minute && DateTime.Now.DayOfWeek != DayOfWeek.Friday)
{
for (int i = 1; i < 31; i++)
{
date = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, i);
if (date.DayOfWeek == DayOfWeek.Friday)
{
date = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, i, 19, 55, 0);
break;
}
}
}
TimeSpan timespan = date - DateTime.Now;
int time = (int)(timespan.TotalSeconds);
new TitleStorage().AddTitle(client, 6001, 20, false, time);
}
else
new TitleStorage().RemoveTitle(client, 6001, 20, false);
#endregion
#region Own a 5-star garment
if (Database.WardrobeTable.AmountStarGarments(client, 5) >= 1)
{
new TitleStorage().AddTitle(client, 6003, 22, false);
}
else
new TitleStorage().RemoveTitle(client, 6003, 22, false);
#endregion
#region Own a 5-star Mount armor
if (Database.WardrobeTable.AmountStarMounts(client, 5) >= 1)
{
new TitleStorage().AddTitle(client, 6004, 23, false);
}
else
new TitleStorage().RemoveTitle(client, 6004, 23, false);
#endregion
#region Prestige Score reaches 600,000
if (client.Entity.TotalPerfectionScore >= 600000)
{
new TitleStorage().AddTitle(client, 2026, 2026, false);
}
else
new TitleStorage().RemoveTitle(client, 2026, 2026, false);
#endregion
#region Stars Score reaches 324
if (client.Equipment.TotalStars >= 324)
{
new TitleStorage().AddTitle(client, 6007, 6007, false);
}
else
new TitleStorage().RemoveTitle(client, 6007, 6007, false);
#endregion
#region Stars Score reaches 216
if (client.Equipment.TotalStars >= 216)
{
new TitleStorage().AddTitle(client, 6008, 6008, false);
}
else
new TitleStorage().RemoveTitle(client, 6008, 6008, false);
#endregion
#endregion
#region Titles
#region Union Emperor
if (client.Union != null)
if (client.Union.IsKingdom())
if (client.Union.IsLeader(client.Entity.UID))
new TitleStorage().AddTitle(client, 1, 1000, false);
else
new TitleStorage().RemoveTitle(client, 1, 1000, false);
else
new TitleStorage().RemoveTitle(client, 1, 1000, false);
else
new TitleStorage().RemoveTitle(client, 1, 1000, false);
#endregion
#region VIP
if (client.Entity.VIPLevel > 0)
{
switch (client.Entity.VIPLevel)
{
case 1:
case 2:
case 3:
case 4:
{
new TitleStorage().AddTitle(client, 2030, 2030, false);
break;
}
case 5:
case 6:
{
new TitleStorage().AddTitle(client, 2029, 2029, false);
break;
}
case 7:
{
new TitleStorage().AddTitle(client, 2031, 2031, false);
break;
}
}
}
else
{
new TitleStorage().RemoveTitle(client, 2030, 2030, false);
new TitleStorage().RemoveTitle(client, 2029, 2029, false);
new TitleStorage().RemoveTitle(client, 2031, 2031, false);
}
#endregion
#region CollectedRandMonkey
if (CollectedRandMonkey(client))
{
new TitleStorage().AddTitle(client, 2013, 14, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2013, 14, false);
}
#endregion
#region Collect 8 kinds of permanent saint monkeys (can be activated via the Wardrobe after the event)
if (Collected8TypesMonkey(client))
{
new TitleStorage().AddTitle(client, 2016, 17, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2016, 17, false);
}
#endregion
#region Collect a permanent Solar Monkey
if (CollectedMonkey(client, 200559))
{
new TitleStorage().AddTitle(client, 2014, 15, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2014, 15, false);
}
#endregion
#region Collect a permanent Lunar Monkey
if (CollectedMonkey(client, 200560))
{
new TitleStorage().AddTitle(client, 2015, 16, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2015, 16, false);
}
#endregion
#region Tulip
if (client.Entity.MyFlowers != null && client.Entity.MyFlowers.RankTuilps == 1)
{
new TitleStorage().AddTitle(client, 6005, 6005, false);
}
else
{
new TitleStorage().RemoveTitle(client, 6005, 6005, false);
}
#endregion
#region The Total Score of Chi Study Reaches 1.600 Points
if (client.ChiData.DragonPoints == 400 && client.ChiData.PhoenixPoints == 400 && client.ChiData.TigerPoints == 400 && client.ChiData.TurtlePoints == 400)
{
new TitleStorage().AddTitle(client, 2018, 1, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2018, 1, false);
}
#endregion
#region Prestige Score reaches 400,000
if (client.Entity.TotalPerfectionScore >= 400000)
{
new TitleStorage().AddTitle(client, 2027, 2027, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2027, 2027, false);
}
#endregion
#region The Total Score Of Jiang hu training reaches 81,000 points(Title)
if (client.Entity.MyJiang != null && client.Entity.MyJiang.Inner_Strength >= 81000)
{
new TitleStorage().AddTitle(client, 2004, 5, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2004, 5, false);
}
#endregion
#region Complete 320 Achievement
if (client.Entity.MyAchievement.Count(client.Entity.U ID) >= 320)
{
new TitleStorage().AddTitle(client, 2001, 2, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2001, 2, false);
}
#endregion
#region Own 5 garments of 4-star or 5-star
if (Database.WardrobeTable.AmountStarGarments(client, 4) >= 5)
{
new TitleStorage().AddTitle(client, 2005, 6, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2005, 6, false);
}
#endregion
#region Own 5 Mount of 4-star or 5-star
if (Database.WardrobeTable.AmountStarMounts(client, 4) >= 5)
{
new TitleStorage().AddTitle(client, 2006, 7, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2006, 7, false);
}
#endregion
#region CelestialFox(200595)
if (CollectedCelestialFox(client))
{
new TitleStorage().AddTitle(client, 2050, 2050, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2050, 2050, false);
}
#endregion
#region CelestialFox(Fantasy)(200596)
if (CollectedCelestialFoxFantasy(client))
{
new TitleStorage().AddTitle(client, 2051, 2051, false);
}
else
{
new TitleStorage().RemoveTitle(client, 2051, 2051, false);
}
#endregion
#endregion
#endregion
#region GM
/*if (client.Account.State == Database.AccountTable.AccountState.GameMaster)
{
foreach (var title in Database.WardrobeTable.Titles.Values)
{
AddTitle(client, (short)title.Type, (short)title.ID);
}
}*/
#endregion
}
public void Login(Client.GameState client, bool Crossed = false, string val = "")
{
if (!Crossed)
{
CheckTitles(client);
using (var cmd = new Database.MySqlCommand(Database.MySqlCommandType.SE LECT).Select("entities").Where("UID", client.Account.EntityID))
using (var reader = new Database.MySqlReader(cmd))
{
if (reader.Read())
{
if (reader.ReadString("Wardrobe") != "")
{
if (reader.ReadString("Wardrobe").Contains("~"))
{
var wing = reader.ReadString("Wardrobe").Split('~')[0];
int type = Convert.ToInt32(wing.Split('-')[0]);
int id = Convert.ToInt32(wing.Split('-')[1]);
if (client.Entity.Wings.ContainsKey((uint)type) && client.Entity.Wings.ContainsValue((uint)id))
{
var pkt = new TitleStorageProto()
{
ActionId = Action.Update,
Points = client.Entity.UTitlePoints,
Type = type,
Id = id,
Value = new TitleValue()
{
Type = type,
Id = id,
Equipped = true
}
};
client.Send(FinalizeProtoBuf(pkt));
client.Entity.EquippedWing = StorageManager.Wing<int>(type, id);
client.Entity.NowEquippedWing.Clear();
client.Entity.NowEquippedWing.Add(type + "~" + id);
}
var title = reader.ReadString("Wardrobe").Split('~')[1];
int type2 = Convert.ToInt32(title.Split('-')[0]);
int id2 = Convert.ToInt32(title.Split('-')[1]);
if (client.Entity.WTitles.ContainsKey((uint)type2) && client.Entity.WTitles.ContainsValue((uint)id2))
{
var pkt = new TitleStorageProto()
{
ActionId = Action.Update,
Points = client.Entity.UTitlePoints,
Type = type2,
Id = id2,
Value = new TitleValue()
{
Type = type2,
Id = id2,
Equipped = true
}
};
client.Send(FinalizeProtoBuf(pkt));
client.Entity.EquippedTitle = StorageManager.Title<int>(type2, id2);
client.Entity.NowEquippedTitle.Clear();
client.Entity.NowEquippedTitle.Add(type2 + "~" + id2);
}
}
}
}
}
}
else
{
if (val != "")
{
if (val.Contains("~"))
{
CheckTitles(client);
var wing = val.Split('~')[0];
int type = Convert.ToInt32(wing.Split('-')[0]);
int id = Convert.ToInt32(wing.Split('-')[1]);
var pkt = new TitleStorageProto()
{
ActionId = Action.Update,
Points = client.Entity.UTitlePoints,
Type = type,
Id = id,
Value = new TitleValue()
{
Type = type,
Id = id,
Equipped = true
}
};
client.Send(FinalizeProtoBuf(pkt));
client.Entity.EquippedWing = StorageManager.Wing<int>(type, id);
client.Entity.NowEquippedWing.Clear();
client.Entity.NowEquippedWing.Add(type + "~" + id);
var title = val.Split('~')[1];
int type2 = Convert.ToInt32(title.Split('-')[0]);
int id2 = Convert.ToInt32(title.Split('-')[1]);
pkt.Type = type2;
pkt.Id = id2;
pkt.Value.Type = type2;
pkt.Value.Id = id2;
client.Send(FinalizeProtoBuf(pkt));
client.Entity.EquippedTitle = StorageManager.Title<int>(type2, id2);
client.Entity.NowEquippedTitle.Clear();
client.Entity.NowEquippedTitle.Add(type2 + "~" + id2);
}
}
}
}
public void Handle(Client.GameState client)
{
switch (Info.ActionId)
{
case Action.Unequip:
{
if (StorageManager.Wing<bool>(Info.Type, Info.Id))
{
client.Entity.EquippedWing = 0;
client.Entity.NowEquippedWing.Clear();
}
else if (StorageManager.Title<bool>(Info.Type, Info.Id))
{
client.Entity.EquippedTitle = 0;
client.Entity.NowEquippedTitle.Clear();
}
client.Send(FinalizeProtoBuf(Info));
break;
}
case Action.Equip:
{
if (client.Entity.UTitlePoints < StorageManager.GetTitlePoints((short)Info.Type, (short)Info.Id))
break;
if (StorageManager.Wing<bool>(Info.Type, Info.Id))
{
client.Entity.EquippedWing = StorageManager.Wing<int>(Info.Type, Info.Id);
client.Entity.NowEquippedWing.Clear();
client.Entity.NowEquippedWing.Add(Info.Type + "~" + Info.Id);
}
else if (StorageManager.Title<bool>(Info.Type, Info.Id))
{
client.Entity.EquippedTitle = StorageManager.Title<int>(Info.Type, Info.Id);
client.Entity.NowEquippedTitle.Clear();
client.Entity.NowEquippedTitle.Add(Info.Type + "~" + Info.Id);
}
Info = new TitleStorageProto()
{
ActionId = Action.Equip,
Points = client.Entity.UTitlePoints,
Type = Info.Type,
Id = Info.Id,
};
client.Send(FinalizeProtoBuf(Info));
break;
}
}
new TitleStorage().CheckTitles(client);
}
public void GetAll(Client.GameState client)
{
foreach (var title in Database.WardrobeTable.Titles.Values)
{
AddTitle(client, (short)title.Type, (short)title.ID, false);
}
client.Entity.haveallTitles = true;
}
public void AddTitle(Client.GameState client, short _type, short _id, bool equipped = false, int TimeInSeconds = 0)
{
if (StorageManager.Wing<bool>(_type, _id))
{
if (!client.Entity.Wings.ContainsValue((uint)_id))
client.Entity.Wings.Add((uint)_type, (uint)_id);
else return;
}
else
{
if (!client.Entity.WTitles.ContainsValue((uint)_id))
client.Entity.WTitles.Add((uint)_type, (uint)_id);
else return;
}
client.Entity.UTitlePoints += StorageManager.GetTitlePoints(_type, _id);
var pkt = new TitleStorageProto()
{
ActionId = Action.Update,
Points = client.Entity.UTitlePoints,
Value = new TitleValue()
{
Type = _type,
Id = _id,
Equipped = equipped,
Time = TimeInSeconds,
}
};
client.Send(FinalizeProtoBuf(pkt));
if (equipped)
{
if (StorageManager.Wing<bool>(_type, _id))
{
client.Entity.EquippedWing = StorageManager.Wing<int>(_type, _id);
client.Entity.NowEquippedWing.Clear();
client.Entity.NowEquippedWing.Add(_type + "~" + _id);
}
else if (StorageManager.Title<bool>(_type, _id))
{
client.Entity.EquippedTitle = StorageManager.Title<int>(_type, _id);
client.Entity.NowEquippedTitle.Clear();
client.Entity.NowEquippedTitle.Add(_type + "~" + _id);
}
}
}
public void RemoveTitle(Client.GameState client, short _type, short _id, bool equipped = false)
{
if (StorageManager.Wing<bool>(_type, _id))
{
if (client.Entity.Wings.ContainsValue((uint)_id))
{
client.Entity.Wings.Remove((uint)_type);
if (client.Entity.EquippedWing == StorageManager.Wing<int>(_type, _id))
{
client.Entity.EquippedWing = 0;
client.Entity.NowEquippedWing.Clear();
var pkt = new TitleStorageProto()
{
ActionId = Action.Unequip,
Id = _id,
Type = _type,
Points = client.Entity.UTitlePoints,
Value = new TitleValue()
{
Type = _type,
Id = _id,
Equipped = false
}
};
client.Send(FinalizeProtoBuf(pkt));
}
client.Entity.UTitlePoints -= StorageManager.GetTitlePoints(_type, _id);
var pkt2 = new TitleStorageProto()
{
ActionId = Action.RemoveTitle,
Id = _id,
Type = _type,
Points = client.Entity.UTitlePoints,
Value = new TitleValue()
{
Type = _type,
Id = _id,
Equipped = false
}
};
client.Send(FinalizeProtoBuf(pkt2));
}
else return;
}
else
{
if (client.Entity.WTitles.ContainsValue((uint)_id))
{
client.Entity.WTitles.Remove((uint)_type);
if (client.Entity.EquippedTitle == StorageManager.Title<int>(_type, _id))
{
client.Entity.EquippedTitle = 0;
client.Entity.NowEquippedTitle.Clear();
var pkt = new TitleStorageProto()
{
ActionId = Action.Unequip,
Id = _id,
Type = _type,
Points = client.Entity.UTitlePoints,
Value = new TitleValue()
{
Type = _type,
Id = _id,
Equipped = false
}
};
client.Send(FinalizeProtoBuf(pkt));
}
client.Entity.UTitlePoints -= StorageManager.GetTitlePoints(_type, _id);
var pkt2 = new TitleStorageProto()
{
ActionId = Action.RemoveTitle,
Id = _id,
Type = _type,
Points = client.Entity.UTitlePoints,
Value = new TitleValue()
{
Type = _type,
Id = _id,
Equipped = false
}
};
client.Send(FinalizeProtoBuf(pkt2));
}
else return;
}
}
public byte[] FinalizeProtoBuf(TitleStorageProto titleStorageProto)
{
using (var memoryStream = new MemoryStream())
{
Serializer.SerializeWithLengthPrefix(memoryStream, titleStorageProto, PrefixStyle.Fixed32);
var pkt = new byte[8 + memoryStream.Length];
memoryStream.ToArray().CopyTo(pkt, 0);
Writer.Write((ushort)memoryStream.Length, 0, pkt);
Writer.Write((ushort)3301, 2, pkt);
return pkt;
}
}
public TitleStorageProto Info;
[Flags]
public enum Action : int
{
Update = 0,
UseTitle = 1,
RemoveTitle = 3,
Equip = 4,
Unequip = 5,
}
}
[ProtoContract]
public class TitleStorageProto
{
[ProtoMember(1, IsRequired = true)]
public TitleStorage.Action ActionId;
[ProtoMember(2, IsRequired = true)]
public int Points;
[ProtoMember(3, IsRequired = true)]
public int Type;
[ProtoMember(4, IsRequired = true)]
public int Id;
[ProtoMember(5, IsRequired = true)]
public TitleValue Value;
}
[ProtoContract]
public class TitleValue
{
[ProtoMember(1, IsRequired = true)]
public int Type;
[ProtoMember(2, IsRequired = true)]
public int Id;
[ProtoMember(3, IsRequired = true)]
public bool Equipped;
[ProtoMember(4, IsRequired = true)]
public int Time;
}
}
LyokaWarior
2019-08-19, 04:06 AM
بــووص ع كــوود التســيــف اوو بـدل الكــلأأس !!
بــااي#
manshestar
2019-08-19, 04:16 AM
جرب بدل دا بي العندك كلاس wardrobeusing protobuf;
using system;
using system.runtime.interopservices;
using system.collections.generic;
using system.io;
using system.linq;
using system.collections.concurrent;
using system.text;
using system.threading.tasks;
namespace mrhassan.network.gamepackets
{
public sealed class coatstorage
{
public coatstorage() { }
public bool read(byte[] packet)
{
using (var memorystream = new memorystream(packet))
{
info = serializer.deserializewithlengthprefix<coatstorageproto>(memorystream, prefixstyle.fixed32);
}
return true;
}
public void handle(client.gamestate client)
{
switch (info.actionid)
{
case action.combine:
{
conqueritem itemininventory = null;
conqueritem iteminsystem = null;
if (client.inventory.trygetitem((uint)info.itemid, out itemininventory))
{
if (client.entity.storageitems.trygetvalue((uint)info .itemguid, out iteminsystem))
{
iteminsystem.minutes += itemininventory.minutes;
database.conqueritemtable.updateminutes(iteminsyst em);
if (iteminsystem.minutes != 0)
{
uint num;
if (datetime.now >= iteminsystem.timestamp.addminutes(iteminsystem.min utes))
{
database.conqueritemtable.deleteitem(iteminsystem. uid);
}
else
{
timespan span = new timespan(iteminsystem.timestamp.addminutes(itemins ystem.minutes).ticks);
timespan span2 = new timespan(datetime.now.ticks);
num = (uint)(span.totalseconds - span2.totalseconds);
iteminsystem.timeleftinminutes = num;
}
}
client.inventory.remove(itemininventory, game.enums.itemuse.remove);
var proto = new coatstorageproto();
proto.actionid = action.combine;
proto.itemguid = info.itemguid;
proto.itemid = (int)iteminsystem.id;
proto.additem(iteminsystem, 1);
client.send(finalizeprotobuf(proto));
}
}
break;
}
case action.equipcheck:
Conqueritem myitem;
if (client.inventory.trygetitem(info.itemguid, out myitem))
{
var packet = finalizeprotobuf(new coatstorageproto()
{
actionid = info.actionid,
itemguid = info.itemguid,
});
client.send(packet);
}
break;
case action.addtowardrobe:
{
if (!canequip(info, client))
{
if (client.inventory.trygetitem(info.itemguid, out myitem))
{
if (!client.entity.storageitems.containskey(myitem.ui d))
client.entity.storageitems.add(myitem.uid, myitem);
myitem.inwardrobe = true;
database.conqueritemtable.updatewardrobe(myitem.in wardrobe, myitem.uid);
client.inventory.remove(myitem, game.enums.itemuse.none);
}
break;
}
if (client.entity.storageitems.trygetvalue(info.itemg uid, out myitem))
{
foreach (var i in client.entity.storageitems.values)
{
if (i.position == (byte)packethandler.getpositionfromid(myitem.id))
{
if (client.equipment.trygetitem((byte)i.position) != null)
client.equipment.remove((byte)i.position, true);
i.position = 0;
database.conqueritemtable.updatelocation(i, client);
}
}
myitem.position = (byte)packethandler.getpositionfromid(myitem.id);
if (!client.equipment.add(myitem))
{
client.equipment.remove((byte)myitem.position, true);
}
var iu = new itemusage(true);
iu.id = itemusage.unknown5;
iu.uid = myitem.uid;
iu.dwparam = myitem.position;
client.send(iu.toarray());
clientequip equips = new clientequip();
equips.doequips(client);
client.send(equips.toarray());
database.conqueritemtable.updatelocation(myitem, client);
client.equipment.updateentitypacket();
client.send(finalizeprotobuf(new coatstorageproto()
{
actionid = info.actionid,
itemguid = info.itemguid,
itemid = (int)myitem.id
}));
}
else if (client.inventory.trygetitem(info.itemguid, out myitem))
{
client.entity.storageitems.add(myitem.uid, myitem);
myitem.inwardrobe = true;
database.conqueritemtable.updatewardrobe(myitem.in wardrobe, myitem.uid);
client.inventory.remove(myitem, game.enums.itemuse.none);
client.send(finalizeprotobuf(new coatstorageproto()
{
actionid = info.actionid,
itemguid = info.itemguid,
itemid = (int)myitem.id
}));
foreach (var i in client.entity.storageitems.values)
{
if (i.position != 0 && i.position == (byte)packethandler.getpositionfromid(myitem.id))
{
if (client.equipment.trygetitem((byte)i.position) != null)
client.equipment.remove((byte)i.position, true);
i.position = 0;
database.conqueritemtable.updatelocation(i, client);
}
}
myitem.position = (byte)packethandler.getpositionfromid(myitem.id);
if (!client.equipment.add(myitem))
{
client.equipment.remove((byte)myitem.position, true);
}
var iu = new itemusage(true);
iu.id = itemusage.unknown5;
iu.uid = myitem.uid;
iu.dwparam = myitem.position;
client.send(iu.toarray());
clientequip equips = new clientequip();
equips.doequips(client);
client.send(equips.toarray());
database.conqueritemtable.updatelocation(myitem, client);
client.equipment.updateentitypacket();
}
break;
}
case action.takeoff:
If (client.entity.storageitems.trygetvalue(info.itemg uid, out myitem))
{
client.send(finalizeprotobuf(new coatstorageproto()
{
actionid = info.actionid,
itemguid = info.itemguid,
itemid = (int)myitem.id
}));
var pos = (byte)packethandler.getpositionfromid(myitem.id);
client.equipment.remove(pos, true);
clientequip equips = new clientequip();
equips.doequips(client);
if (pos == 17)
equips.steedarmor = 0;
else equips.garment = 0;
client.send(equips.toarray());
client.equipment.updateentitypacket();
}
break;
case action.retrieve:
If (client.entity.storageitems.trygetvalue(info.itemg uid, out myitem) && client.inventory.count < 40)
{
var pos = (byte)packethandler.getpositionfromid(myitem.id);
client.entity.storageitems.remove(myitem.uid);
myitem.inwardrobe = false;
database.conqueritemtable.updatewardrobe(myitem.in wardrobe, myitem.uid);
client.send(finalizeprotobuf(new coatstorageproto()
{
actionid = info.actionid,
itemguid = info.itemguid,
itemid = (int)myitem.id
}));
client.inventory.add(myitem, game.enums.itemuse.move);
clientequip equips = new clientequip();
equips.doequips(client);
if (pos == 17)
equips.steedarmor = 0;
else equips.garment = 0;
client.send(equips.toarray());
client.equipment.updateentitypacket();
}
break;
}
new titlestorage().checktitles(client);
}
private bool canequip(coatstorageproto info, client.gamestate client)
{
conqueritem myitem;
if (client.inventory.trygetitem(info.itemguid, out myitem) ||
client.entity.storageitems.trygetvalue(info.itemgu id, out myitem) ||
client.equipment.trygetitem(info.itemguid, out myitem))
{
var dbinfo = database.conqueriteminformation.baseinformations.c ontainskey(myitem.id) ?
Database.conqueriteminformation.baseinformations[myitem.id] : Null;
if (dbinfo == null)
return false;
bool issteedarmor = packethandler.getpositionfromid(myitem.id) == packethandler.positions.steedarmor;
bool canequipsteedarmor = issteedarmor && client.entity.subclasses.classes.containskey(9)
&& client.entity.subclasses.classes[9].phase >= database.conqueriteminformation.baseinformations[myitem.id].proficiency;
if (!issteedarmor)
{
var charsex = (client.entity.body == 1003 || client.entity.body == 1004) ? "male" : "female";
if ((dbinfo.gender == 1 ? Charsex != "male" : Dbinfo.gender == 0 ? False : Charsex != "female"))
{
return false;
}
}
else if (issteedarmor && !canequipsteedarmor) return false;
}
else return false;
return true;
}
private byte[] finalizeprotobuf(coatstorageproto coatstorageproto)
{
using (var memorystream = new memorystream())
{
serializer.serializewithlengthprefix(memorystream, coatstorageproto, prefixstyle.fixed32);
var pkt = new byte[8 + memorystream.length];
memorystream.toarray().copyto(pkt, 0);
writer.write((ushort)memorystream.length, 0, pkt);
writer.write((ushort)3300, 2, pkt);
return pkt;
}
}
public void login(client.gamestate client)
{
var pkt = new coatstorageproto();
foreach (var item in client.entity.storageitems.values)
{
pkt.additem(item,
client.entity.storageitems.values.where(i => i.id == item.id).count());
client.send(finalizeprotobuf(pkt));
if (item.position != 0)
{
client.equipment.add(item);
var iu = new itemusage(true);
iu.id = itemusage.unknown5;
iu.uid = item.uid;
iu.dwparam = item.position;
client.send(iu.toarray());
clientequip equips = new clientequip();
equips.doequips(client);
client.send(equips.toarray());
database.conqueritemtable.updatelocation(item, client);
client.equipment.updateentitypacket();
}
}
var currentgarment = client.equipment.trygetitem((byte)packethandler.po sitions.garment);
if (currentgarment != null && !client.entity.storageitems.containskey(currentgar ment.uid))
{
client.entity.storageitems.add(currentgarment.uid, currentgarment);
pkt.additem(currentgarment,
client.entity.storageitems.values.where(i => i.id == currentgarment.id).count());
pkt.item.equipped = true;
client.send(finalizeprotobuf(pkt));
}
var currentmountarmor = client.equipment.trygetitem((byte)packethandler.po sitions.steedarmor);
if (currentmountarmor != null && !client.entity.storageitems.containskey(currentmou ntarmor.uid))
{
client.entity.storageitems.add(currentmountarmor.u id, currentmountarmor);
pkt.additem(currentmountarmor,
client.entity.storageitems.values.where(i => i.id == currentmountarmor.id).count());
pkt.item.equipped = true;
client.send(finalizeprotobuf(pkt));
}
}
public coatstorageproto info;
public enum action : Int
{
/// <summary>
/// load items in storage ...
/// </summary>
login = 0,
equipcheck = 1,
retrieve = 2,
combine = 4,
addtowardrobe = 5,
takeoff = 6,
dwparam = 7,
}
}
[protocontract]
public class coatstorageproto
{
[protomember(1, isrequired = true)]
public coatstorage.action actionid;
[protomember(2, isrequired = true)]
public uint itemguid;
[protomember(3, isrequired = true)]
public int itemid;
[protomember(4, isrequired = true)]
public int junk;
[protomember(5, isrequired = true)]
public itemstorage item;
public void additem(conqueritem item, int stack)
{
item = new itemstorage();
item.itemuid = item.uid;
item.itemid = (int)item.id;
item.maximumdurability = item.minimumdurability = item.maximdurability;
item.stack = stack;
item.firstsocket = (int)item.socketone;
item.secondsocket = (int)item.sockettwo;
item.plus = item.plus;
item.protection = item.bless;
item.bound = item.bound;
item.health = item.enchant;
item.socketprogress = (int)item.socketprogress;
item.effect = item.effect;
item.color = item.color;
item.craftprogress = (int)item.plusprogress;
item.locked = item.lock == 1 ? True : False;
item.suspicious = false;
item.inscribed = false;
item.dwparam7 = 0;
item.equipped = item.position != 0;
item.dwparam15 = 0;
item.time = 0;
item.subtime = 0;
}
}
[protocontract]
public class itemstorage
{
[protomember(1, isrequired = true)]
public uint itemuid;
[protomember(2, isrequired = true)]
public int itemid;
[protomember(3, isrequired = true)]
public int socketprogress;
[protomember(4, isrequired = true)]
public int firstsocket;
[protomember(5, isrequired = true)]
public int secondsocket;
[protomember(6, isrequired = true)]
public game.enums.itemeffect effect;
[protomember(7, isrequired = true)]
public int dwparam7;
[protomember(8, isrequired = true)]
public int plus;
[protomember(9, isrequired = true)]
public int protection;
[protomember(10, isrequired = true)]
public bool bound;
[protomember(11, isrequired = true)]
public int health;
[protomember(12, isrequired = true)]
public bool equipped;
[protomember(13, isrequired = true)]
public bool suspicious;
[protomember(14, isrequired = true)]
public bool locked;
[protomember(15, isrequired = true)]
public int dwparam15;
[protomember(16, isrequired = true)]
public game.enums.color color;
[protomember(17, isrequired = true)]
public int craftprogress;
/// <summary>
/// inscribed in guild arsenal
/// this class is for wardrobe items which are garments or mount armors so this filed is always false
/// </summary>
[protomember(18, isrequired = true)]
public bool inscribed;
/// <summary>
/// time left in seconds !
/// </summary>
[protomember(19, isrequired = true)]
public int time;
/// <summary>
/// time left in minutes (if item not activated only)
/// </summary>
[protomember(20, isrequired = true)]
public int subtime;
[protomember(21, isrequired = true)]
public int stack;
[protomember(22, isrequired = true)]
public int minimumdurability;
[protomember(23, isrequired = true)]
public int maximumdurability;
}
public static class storage
{
private static string path = constants.dataholderpath + "storage.ini";
public static void read(out storageinfo storageinfo)
{
storageinfo = new storageinfo();
var reader = new inifile(path);
{
storageinfo.count = reader.readint32("storage", "storagetypecount", 0);
storageinfo.storages = new storageinfo.storage[storageinfo.count];
for (int i = 0; i < storageinfo.count; i++)
{
var mysection = (i + 1).tostring();
storageinfo.storages[i] = new storageinfo.storage();
storageinfo.storages[i].type = reader.readint32(mysection, "type", 0);
storageinfo.storages[i].unitcount = reader.readint32(mysection, "unitcount", 0);
storageinfo.storages[i].viewtype = reader.readint32(mysection, "viewtype", 0);
storageinfo.storages[i].units = new storageinfo.storage.unit[storageinfo.storages[i].unitcount];
for (int u = 0; u < storageinfo.storages[i].unitcount; u++)
{
var unitsection = mysection + "-" + (u + 1).tostring();
storageinfo.storages[i].units[u] = new storageinfo.storage.unit();
storageinfo.storages[i].units[u].id = reader.readint32(unitsection, "id", 0);
storageinfo.storages[i].units[u].anisection = reader.readstring(unitsection, "anisection");
storageinfo.storages[i].units[u].getwaytype3 = reader.readint32(unitsection, "getwaytype3", 0);
storageinfo.storages[i].units[u].getwaytext3 = reader.readstring(unitsection, "getwaytext3");
storageinfo.storages[i].units[u].param = reader.readstring(unitsection, "param");
storageinfo.storages[i].units[u].intro = reader.readstring(unitsection, "intro");
}
}
}
//console.writeline("storages loaded");
}
}
[structlayout(layoutkind.sequential)]
public class storageinfo
{
public int count;
public storage[] storages;
public class storage
{
public int type;
public int unitcount;
public int viewtype;
public unit[] units;
public class unit
{
public int id;
public string anisection;
public int getwaytype3;
public string getwaytext3;
public string param;
public string intro;
}
}
public storage getstoragebytype(int type)
{
foreach (var storage in storages)
if (storage != null && storage.type == type)
return storage;
return null;
}
public storage.unit getunitbyid(int id, storage _storage = null)
{
if (_storage != null)
{
foreach (var unit in _storage.units)
if (unit.id == id)
return unit;
}
else
{
foreach (var storage in storages)
if (storage != null)
foreach (var unit in storage.units)
if (unit.id == id)
return unit;
}
return null;
}
}
public sealed class storagemanager
{
public static storageinfo info;
public static void load()
{
try
{
storage.read(out info);
}
catch (exception e)
{
console.writeline(e);
}
}
public static t wing<t>(int _type, int _id)
{
object value = null;
int trash = 0;
if (typeof(t) == typeof(bool))
{
value = int.tryparse(info.getunitbyid(_id, info.getstoragebytype(_type)).param, out trash);
}
else if (typeof(t) == typeof(int))
{
var mytype = _type.tostring();
var myid = _id.tostring();
while (myid.length < 4)
myid = "0" + myid;
value = int.parse(mytype + myid);
}
else
throw new exception("unknow type : " + typeof(t).name);
return (t)convert.changetype(value, typeof(t));
}
public static int gettitlepoints(short _type, short _id)
{
if (_type == 1 && _id == 1000)
return 150;
else if (_type == 2018 && _id == 1)
return 500;
else if (_type == 2001 && _id == 2)
return 300;
else if (_type == 2002 && _id == 3)
return 150;
else if (_type == 2003 && _id == 4)
return 300;
else if (_type == 2004 && _id == 5)
return 150;
else if (_type == 2005 && _id == 6)
return 150;
else if (_type == 2006 && _id == 7)
return 150;
else if (_type == 2020 && _id == 2020)
return 300;
else if (_type == 2021 && _id == 2021)
return 200;
else if (_type == 2022 && _id == 2022)
return 100;
else if (_type == 2023 && _id == 2023)
return 300;
else if (_type == 2024 && _id == 2024)
return 200;
else if (_type == 2025 && _id == 2025)
return 100;
else if (_type == 2028 && _id == 2028)
return 150;
else if (_type == 2029 && _id == 2029)
return 300;
else if (_type == 2030 && _id == 2030)
return 100;
else if (_type == 2031 && _id == 2031)
return 200;
else if (_type == 6009 && _id == 6009)
return 300;
else if (_type == 6007 && _id == 6007)
return 300;
else if (_type == 6008 && _id == 6008)
return 300;
else if (_type == 2026 && _id == 2026)
return 100;
else if (_type == 2027 && _id == 2027)
return 300;
else if (_type == 2032 && _id == 2032)
return 300;
else if (_type == 2033 && _id == 2033)
return 300;
else if (_type == 6011 && _id == 6011)
return 300;
else if (_type == 2034 && _id == 2034)
return 300;
else if (_type == 2013 && _id == 14)
return 300;
else if (_type == 2014 && _id == 15)
return 300;
else if (_type == 2015 && _id == 16)
return 300;
else if (_type == 2016 && _id == 17)
return 300;
else if (_type == 2035 && _id == 2035)
return 300;
else if (_type == 2036 && _id == 2036)
return 300;
else if (_type == 2037 && _id == 2037)
return 300;
else if (_type == 2038 && _id == 2038)
return 300;
else if (_type == 2039 && _id == 2039)
return 300;
else if (_type == 2040 && _id == 2040)
return 100;
else if (_type == 2041 && _id == 2041)
return 100;
else if (_type == 2044 && _id == 2044)
return 100;
else if (_type == 2045 && _id == 2045)
return 100;
else if (_type == 6012 && _id == 6012)
return 100;
else if (_type == 2050 && _id == 2050)
return 100;
else if (_type == 2051 && _id == 2051)
return 100;
else if (_type == 2052 && _id == 2052)
return 100;
else if (_type == 2053 && _id == 2053)
return 150;
else if (_type == 2054 && _id == 2054)
return 150;
else if (_type == 2057 && _id == 2057)
return 150;
else if (_type == 2056 && _id == 2056)
return 100;
else if (_type == 2046 && _id == 2046)
return 150;
else if (_type == 2047 && _id == 2047)
return 150;
else if (_type == 2048 && _id == 2048)
return 150;
else if (_type == 2049 && _id == 2049)
return 150;
else if (_type == 2059 && _id == 2059)
return 100;
else if (_type == 2060 && _id == 2060)
return 150;
else if (_type == 2061 && _id == 2061)
return 150;
else if (_type == 2062 && _id == 2062)
return 150;
else if (_type == 6013 && _id == 6013)
return 100;
else if (_type == 6014 && _id == 6014)
return 150;
else if (_type == 6015 && _id == 6015)
return 150;
else if (_type == 6016 && _id == 6016)
return 150;
else if (_type == 6017 && _id == 6017)
return 150;
else if (_type == 2063 && _id == 2063)
return 150;
else if (_type == 2064 && _id == 2064)
return 150;
else if (_type == 2065 && _id == 2065)
return 150;
return 0;
}
public static t title<t>(int _type, int _id)
{
object value = null;
int trash = 0;
if (typeof(t) == typeof(bool))
{
value = !int.tryparse(info.getunitbyid(_id, info.getstoragebytype(_type)).param, out trash);
}
else if (typeof(t) == typeof(int))
{
var mytype = _type.tostring();
var myid = _id.tostring();
while (myid.length < 4)
myid = "0" + myid;
value = int.parse(mytype + myid);
}
else
throw new exception("unknow type : " + typeof(t).name);
return (t)convert.changetype(value, typeof(t));
}
}
public sealed class titlestorage
{
public titlestorage() { }
public bool read(byte[] packet)
{
using (var memorystream = new memorystream(packet))
{
info = serializer.deserializewithlengthprefix<titlestorageproto>(memorystream, prefixstyle.fixed32);
}
return true;
}
private bool collectedrandmonkey(client.gamestate client)
{
return client.entity.storageitems.values.where(p => monkeysvalues.contains(p.id)).tolist().count > 0 ? True : False;
}
private bool collectedcelestialfox(client.gamestate client)
{
return client.entity.storageitems.values.where(p => p.id == 200595).tolist().count > 0 ? True : False;
}
private bool collectedcelestialfoxfantasy(client.gamestate client)
{
return client.entity.storageitems.values.where(p => p.id == 200596).tolist().count > 0 ? True : False;
}
list<uint> monkeysvalues = new list<uint>()
{
200553,
200554,
200555,
200556,
200557,
200558,
200559,
200560
};
private bool collected8typesmonkey(client.gamestate client)
{
list<uint> ids = new list<uint>();
var dict = client.entity.storageitems.values.tolist();
for (int x = 0; x < dict.count; x++)
{
if (monkeysvalues.contains(dict[x].id) && !ids.contains(dict[x].id))
{
ids.add(dict[x].id);
}
}
return ids.count == 8 ? True : False;
}
private bool collectedmonkey(client.gamestate client, uint id)
{
return client.entity.storageitems.values.where(p => p.id == id).tolist().count > 0 ? True : False;
}
public void checktitles(client.gamestate client)
{
if (client.entity.havealltitles) { getall(client); return; }
#region titles and wings equips
#region wings
#region union emperor
if (client.union != null)
if (client.union.iskingdom())
if (client.union.isleader(client.entity.uid))
new titlestorage().addtitle(client, 4001, 1000, false);
else
new titlestorage().removetitle(client, 4001, 1000, false);
else
new titlestorage().removetitle(client, 4001, 1000, false);
else
new titlestorage().removetitle(client, 4001, 1000, false);
#endregion
#region the champion of elite pk tournament
if (client.entity.titles.containskey(titlepacket.titl es.elitepkchamption_high))
{
datetime date = datetime.now;
for (int i = datetime.now.day; i < 31; i++)
{
date = new datetime(datetime.now.year, datetime.now.month, i);
if (date.dayofweek == dayofweek.friday)
{
date = new datetime(datetime.now.year, datetime.now.month, i, 19, 55, 0);
break;
}
}
if (date.day == datetime.now.day && date.hour == datetime.now.hour && date.year == datetime.now.year && date.minute == date.minute && datetime.now.dayofweek != dayofweek.friday)
{
for (int i = 1; i < 31; i++)
{
date = new datetime(datetime.now.year, datetime.now.month + 1, i);
if (date.dayofweek == dayofweek.friday)
{
date = new datetime(datetime.now.year, datetime.now.month + 1, i, 19, 55, 0);
break;
}
}
}
timespan timespan = date - datetime.now;
int time = (int)(timespan.totalseconds);
new titlestorage().addtitle(client, 6001, 20, false, time);
}
else
new titlestorage().removetitle(client, 6001, 20, false);
#endregion
#region own a 5-star garment
if (database.wardrobetable.amountstargarments(client, 5) >= 1)
{
new titlestorage().addtitle(client, 6003, 22, false);
}
else
new titlestorage().removetitle(client, 6003, 22, false);
#endregion
#region own a 5-star mount armor
if (database.wardrobetable.amountstarmounts(client, 5) >= 1)
{
new titlestorage().addtitle(client, 6004, 23, false);
}
else
new titlestorage().removetitle(client, 6004, 23, false);
#endregion
#region prestige score reaches 600,000
if (client.entity.totalperfectionscore >= 600000)
{
new titlestorage().addtitle(client, 2026, 2026, false);
}
else
new titlestorage().removetitle(client, 2026, 2026, false);
#endregion
#region stars score reaches 324
if (client.equipment.totalstars >= 324)
{
new titlestorage().addtitle(client, 6007, 6007, false);
}
else
new titlestorage().removetitle(client, 6007, 6007, false);
#endregion
#region stars score reaches 216
if (client.equipment.totalstars >= 216)
{
new titlestorage().addtitle(client, 6008, 6008, false);
}
else
new titlestorage().removetitle(client, 6008, 6008, false);
#endregion
#endregion
#region titles
#region union emperor
if (client.union != null)
if (client.union.iskingdom())
if (client.union.isleader(client.entity.uid))
new titlestorage().addtitle(client, 1, 1000, false);
else
new titlestorage().removetitle(client, 1, 1000, false);
else
new titlestorage().removetitle(client, 1, 1000, false);
else
new titlestorage().removetitle(client, 1, 1000, false);
#endregion
#region vip
if (client.entity.viplevel > 0)
{
switch (client.entity.viplevel)
{
case 1:
Case 2:
Case 3:
Case 4:
{
new titlestorage().addtitle(client, 2030, 2030, false);
break;
}
case 5:
Case 6:
{
new titlestorage().addtitle(client, 2029, 2029, false);
break;
}
case 7:
{
new titlestorage().addtitle(client, 2031, 2031, false);
break;
}
}
}
else
{
new titlestorage().removetitle(client, 2030, 2030, false);
new titlestorage().removetitle(client, 2029, 2029, false);
new titlestorage().removetitle(client, 2031, 2031, false);
}
#endregion
#region collectedrandmonkey
if (collectedrandmonkey(client))
{
new titlestorage().addtitle(client, 2013, 14, false);
}
else
{
new titlestorage().removetitle(client, 2013, 14, false);
}
#endregion
#region collect 8 kinds of permanent saint monkeys (can be activated via the wardrobe after the event)
if (collected8typesmonkey(client))
{
new titlestorage().addtitle(client, 2016, 17, false);
}
else
{
new titlestorage().removetitle(client, 2016, 17, false);
}
#endregion
#region collect a permanent solar monkey
if (collectedmonkey(client, 200559))
{
new titlestorage().addtitle(client, 2014, 15, false);
}
else
{
new titlestorage().removetitle(client, 2014, 15, false);
}
#endregion
#region collect a permanent lunar monkey
if (collectedmonkey(client, 200560))
{
new titlestorage().addtitle(client, 2015, 16, false);
}
else
{
new titlestorage().removetitle(client, 2015, 16, false);
}
#endregion
#region tulip
if (client.entity.myflowers != null && client.entity.myflowers.ranktuilps == 1)
{
new titlestorage().addtitle(client, 6005, 6005, false);
}
else
{
new titlestorage().removetitle(client, 6005, 6005, false);
}
#endregion
#region the total score of chi study reaches 1.600 points
if (client.chidata.dragonpoints == 400 && client.chidata.phoenixpoints == 400 && client.chidata.tigerpoints == 400 && client.chidata.turtlepoints == 400)
{
new titlestorage().addtitle(client, 2018, 1, false);
}
else
{
new titlestorage().removetitle(client, 2018, 1, false);
}
#endregion
#region prestige score reaches 400,000
if (client.entity.totalperfectionscore >= 400000)
{
new titlestorage().addtitle(client, 2027, 2027, false);
}
else
{
new titlestorage().removetitle(client, 2027, 2027, false);
}
#endregion
#region the total score of jiang hu training reaches 81,000 points(title)
if (client.entity.myjiang != null && client.entity.myjiang.inner_strength >= 81000)
{
new titlestorage().addtitle(client, 2004, 5, false);
}
else
{
new titlestorage().removetitle(client, 2004, 5, false);
}
#endregion
#region complete 320 achievement
if (client.entity.myachievement.count(client.entity.u id) >= 320)
{
new titlestorage().addtitle(client, 2001, 2, false);
}
else
{
new titlestorage().removetitle(client, 2001, 2, false);
}
#endregion
#region own 5 garments of 4-star or 5-star
if (database.wardrobetable.amountstargarments(client, 4) >= 5)
{
new titlestorage().addtitle(client, 2005, 6, false);
}
else
{
new titlestorage().removetitle(client, 2005, 6, false);
}
#endregion
#region own 5 mount of 4-star or 5-star
if (database.wardrobetable.amountstarmounts(client, 4) >= 5)
{
new titlestorage().addtitle(client, 2006, 7, false);
}
else
{
new titlestorage().removetitle(client, 2006, 7, false);
}
#endregion
#region celestialfox(200595)
if (collectedcelestialfox(client))
{
new titlestorage().addtitle(client, 2050, 2050, false);
}
else
{
new titlestorage().removetitle(client, 2050, 2050, false);
}
#endregion
#region celestialfox(fantasy)(200596)
if (collectedcelestialfoxfantasy(client))
{
new titlestorage().addtitle(client, 2051, 2051, false);
}
else
{
new titlestorage().removetitle(client, 2051, 2051, false);
}
#endregion
#endregion
#endregion
#region gm
/*if (client.account.state == database.accounttable.accountstate.gamemaster)
{
foreach (var title in database.wardrobetable.titles.values)
{
addtitle(client, (short)title.type, (short)title.id);
}
}*/
#endregion
}
public void login(client.gamestate client, bool crossed = false, string val = "")
{
if (!crossed)
{
checktitles(client);
using (var cmd = new database.mysqlcommand(database.mysqlcommandtype.se lect).select("entities").where("uid", client.account.entityid))
using (var reader = new database.mysqlreader(cmd))
{
if (reader.read())
{
if (reader.readstring("wardrobe") != "")
{
if (reader.readstring("wardrobe").contains("~"))
{
var wing = reader.readstring("wardrobe").split('~')[0];
int type = convert.toint32(wing.split('-')[0]);
int id = convert.toint32(wing.split('-')[1]);
if (client.entity.wings.containskey((uint)type) && client.entity.wings.containsvalue((uint)id))
{
var pkt = new titlestorageproto()
{
actionid = action.update,
points = client.entity.utitlepoints,
type = type,
id = id,
value = new titlevalue()
{
type = type,
id = id,
equipped = true
}
};
client.send(finalizeprotobuf(pkt));
client.entity.equippedwing = storagemanager.wing<int>(type, id);
client.entity.nowequippedwing.clear();
client.entity.nowequippedwing.add(type + "~" + id);
}
var title = reader.readstring("wardrobe").split('~')[1];
int type2 = convert.toint32(title.split('-')[0]);
int id2 = convert.toint32(title.split('-')[1]);
if (client.entity.wtitles.containskey((uint)type2) && client.entity.wtitles.containsvalue((uint)id2))
{
var pkt = new titlestorageproto()
{
actionid = action.update,
points = client.entity.utitlepoints,
type = type2,
id = id2,
value = new titlevalue()
{
type = type2,
id = id2,
equipped = true
}
};
client.send(finalizeprotobuf(pkt));
client.entity.equippedtitle = storagemanager.title<int>(type2, id2);
client.entity.nowequippedtitle.clear();
client.entity.nowequippedtitle.add(type2 + "~" + id2);
}
}
}
}
}
}
else
{
if (val != "")
{
if (val.contains("~"))
{
checktitles(client);
var wing = val.split('~')[0];
int type = convert.toint32(wing.split('-')[0]);
int id = convert.toint32(wing.split('-')[1]);
var pkt = new titlestorageproto()
{
actionid = action.update,
points = client.entity.utitlepoints,
type = type,
id = id,
value = new titlevalue()
{
type = type,
id = id,
equipped = true
}
};
client.send(finalizeprotobuf(pkt));
client.entity.equippedwing = storagemanager.wing<int>(type, id);
client.entity.nowequippedwing.clear();
client.entity.nowequippedwing.add(type + "~" + id);
var title = val.split('~')[1];
int type2 = convert.toint32(title.split('-')[0]);
int id2 = convert.toint32(title.split('-')[1]);
pkt.type = type2;
pkt.id = id2;
pkt.value.type = type2;
pkt.value.id = id2;
client.send(finalizeprotobuf(pkt));
client.entity.equippedtitle = storagemanager.title<int>(type2, id2);
client.entity.nowequippedtitle.clear();
client.entity.nowequippedtitle.add(type2 + "~" + id2);
}
}
}
}
public void handle(client.gamestate client)
{
switch (info.actionid)
{
case action.unequip:
{
if (storagemanager.wing<bool>(info.type, info.id))
{
client.entity.equippedwing = 0;
client.entity.nowequippedwing.clear();
}
else if (storagemanager.title<bool>(info.type, info.id))
{
client.entity.equippedtitle = 0;
client.entity.nowequippedtitle.clear();
}
client.send(finalizeprotobuf(info));
break;
}
case action.equip:
{
if (client.entity.utitlepoints < storagemanager.gettitlepoints((short)info.type, (short)info.id))
break;
if (storagemanager.wing<bool>(info.type, info.id))
{
client.entity.equippedwing = storagemanager.wing<int>(info.type, info.id);
client.entity.nowequippedwing.clear();
client.entity.nowequippedwing.add(info.type + "~" + info.id);
}
else if (storagemanager.title<bool>(info.type, info.id))
{
client.entity.equippedtitle = storagemanager.title<int>(info.type, info.id);
client.entity.nowequippedtitle.clear();
client.entity.nowequippedtitle.add(info.type + "~" + info.id);
}
info = new titlestorageproto()
{
actionid = action.equip,
points = client.entity.utitlepoints,
type = info.type,
id = info.id,
};
client.send(finalizeprotobuf(info));
break;
}
}
new titlestorage().checktitles(client);
}
public void getall(client.gamestate client)
{
foreach (var title in database.wardrobetable.titles.values)
{
addtitle(client, (short)title.type, (short)title.id, false);
}
client.entity.havealltitles = true;
}
public void addtitle(client.gamestate client, short _type, short _id, bool equipped = false, int timeinseconds = 0)
{
if (storagemanager.wing<bool>(_type, _id))
{
if (!client.entity.wings.containsvalue((uint)_id))
client.entity.wings.add((uint)_type, (uint)_id);
else return;
}
else
{
if (!client.entity.wtitles.containsvalue((uint)_id))
client.entity.wtitles.add((uint)_type, (uint)_id);
else return;
}
client.entity.utitlepoints += storagemanager.gettitlepoints(_type, _id);
var pkt = new titlestorageproto()
{
actionid = action.update,
points = client.entity.utitlepoints,
value = new titlevalue()
{
type = _type,
id = _id,
equipped = equipped,
time = timeinseconds,
}
};
client.send(finalizeprotobuf(pkt));
if (equipped)
{
if (storagemanager.wing<bool>(_type, _id))
{
client.entity.equippedwing = storagemanager.wing<int>(_type, _id);
client.entity.nowequippedwing.clear();
client.entity.nowequippedwing.add(_type + "~" + _id);
}
else if (storagemanager.title<bool>(_type, _id))
{
client.entity.equippedtitle = storagemanager.title<int>(_type, _id);
client.entity.nowequippedtitle.clear();
client.entity.nowequippedtitle.add(_type + "~" + _id);
}
}
}
public void removetitle(client.gamestate client, short _type, short _id, bool equipped = false)
{
if (storagemanager.wing<bool>(_type, _id))
{
if (client.entity.wings.containsvalue((uint)_id))
{
client.entity.wings.remove((uint)_type);
if (client.entity.equippedwing == storagemanager.wing<int>(_type, _id))
{
client.entity.equippedwing = 0;
client.entity.nowequippedwing.clear();
var pkt = new titlestorageproto()
{
actionid = action.unequip,
id = _id,
type = _type,
points = client.entity.utitlepoints,
value = new titlevalue()
{
type = _type,
id = _id,
equipped = false
}
};
client.send(finalizeprotobuf(pkt));
}
client.entity.utitlepoints -= storagemanager.gettitlepoints(_type, _id);
var pkt2 = new titlestorageproto()
{
actionid = action.removetitle,
id = _id,
type = _type,
points = client.entity.utitlepoints,
value = new titlevalue()
{
type = _type,
id = _id,
equipped = false
}
};
client.send(finalizeprotobuf(pkt2));
}
else return;
}
else
{
if (client.entity.wtitles.containsvalue((uint)_id))
{
client.entity.wtitles.remove((uint)_type);
if (client.entity.equippedtitle == storagemanager.title<int>(_type, _id))
{
client.entity.equippedtitle = 0;
client.entity.nowequippedtitle.clear();
var pkt = new titlestorageproto()
{
actionid = action.unequip,
id = _id,
type = _type,
points = client.entity.utitlepoints,
value = new titlevalue()
{
type = _type,
id = _id,
equipped = false
}
};
client.send(finalizeprotobuf(pkt));
}
client.entity.utitlepoints -= storagemanager.gettitlepoints(_type, _id);
var pkt2 = new titlestorageproto()
{
actionid = action.removetitle,
id = _id,
type = _type,
points = client.entity.utitlepoints,
value = new titlevalue()
{
type = _type,
id = _id,
equipped = false
}
};
client.send(finalizeprotobuf(pkt2));
}
else return;
}
}
public byte[] finalizeprotobuf(titlestorageproto titlestorageproto)
{
using (var memorystream = new memorystream())
{
serializer.serializewithlengthprefix(memorystream, titlestorageproto, prefixstyle.fixed32);
var pkt = new byte[8 + memorystream.length];
memorystream.toarray().copyto(pkt, 0);
writer.write((ushort)memorystream.length, 0, pkt);
writer.write((ushort)3301, 2, pkt);
return pkt;
}
}
public titlestorageproto info;
[flags]
public enum action : Int
{
update = 0,
usetitle = 1,
removetitle = 3,
equip = 4,
unequip = 5,
}
}
[protocontract]
public class titlestorageproto
{
[protomember(1, isrequired = true)]
public titlestorage.action actionid;
[protomember(2, isrequired = true)]
public int points;
[protomember(3, isrequired = true)]
public int type;
[protomember(4, isrequired = true)]
public int id;
[protomember(5, isrequired = true)]
public titlevalue value;
}
[protocontract]
public class titlevalue
{
[protomember(1, isrequired = true)]
public int type;
[protomember(2, isrequired = true)]
public int id;
[protomember(3, isrequired = true)]
public bool equipped;
[protomember(4, isrequired = true)]
public int time;
}
}
جربت للاسف نفس المشكلة و خت الكلاس من سورس مستر باندا نفس المشكلة ثواني هنزل صورة المشكلة لما بجيب جرمنت و البسه و اقفل الاكونت بيحصل ايرور في القنصل ثواني هورهولك
manshestar
2019-08-19, 04:19 AM
دي صورة المشكلة الي بتحصل لما بلبس جرمنت و اقفل الاكونت بيظهر الايرور ده في القنصل عفواً لايمكن عرض الروابط في الإرشيف
Hassan Emprator
2019-08-19, 04:25 AM
دي صورة المشكلة الي بتحصل لما بلبس جرمنت و اقفل الاكونت بيظهر الايرور ده في القنصل
تمام يحبي هتبحث عن الفويد دا
public static void SaveJiangHu(Client.GameState client)
هتبدله بي دا
لما تضضيف دا الايرور هيتحل
public static void SaveJiangHu(Client.GameState client)
{
try
{
MemoryStream stream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(stream);
client.Entity.MyJiang.Serialize(writer);
///////////
string SQL = "UPDATE `jiang` SET Powers=@Powers,OwnName=@OwnName,CustomizedName=@Cu stomizedName where UID = " + client.Entity.UID + " ;";
byte[] rawData = stream.ToArray();
using (var conn = DataHolder.MySqlConnection)
{
conn.Open();
using (var cmd = new MySql.Data.MySqlClient.MySqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = SQL;
cmd.Parameters.AddWithValue("@Powers", rawData);
cmd.Parameters.AddWithValue("@OwnName", client.Entity.MyJiang.OwnName);
cmd.Parameters.AddWithValue("@CustomizedName", client.Entity.MyJiang.CustomizedName);
cmd.ExecuteNonQuery();
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
manshestar
2019-08-19, 04:30 AM
تمام يحبي هتبحث عن الفويد دا
public static void savejianghu(client.gamestate client)
هتبدله بي دا
لما تضضيف دا الايرور هيتحل
public static void savejianghu(client.gamestate client)
{
try
{
memorystream stream = new memorystream();
binarywriter writer = new binarywriter(stream);
client.entity.myjiang.serialize(writer);
///////////
string sql = "update `jiang` set powers=@powers,ownname=@ownname,customizedname=@cu stomizedname where uid = " + client.entity.uid + " ;";
byte[] rawdata = stream.toarray();
using (var conn = dataholder.mysqlconnection)
{
conn.open();
using (var cmd = new mysql.data.mysqlclient.mysqlcommand())
{
cmd.connection = conn;
cmd.commandtext = sql;
cmd.parameters.addwithvalue("@powers", rawdata);
cmd.parameters.addwithvalue("@ownname", client.entity.myjiang.ownname);
cmd.parameters.addwithvalue("@customizedname", client.entity.myjiang.customizedname);
cmd.executenonquery();
}
}
}
catch (exception e)
{
console.writeline(e);
}
}
هو ده نفس الي عندي ع فكرة يا حسن
Hassan Emprator
2019-08-19, 04:32 AM
هو ده نفس الي عندي ع فكرة يا حسن
اصل انت الي في الصوره دا ايرورو في سطر 283 وي السطرو وداني للفويت دا وعا فكره دا ايرور في الجيانغ ملوش دعوه بي الوار دروب
manshestar
2019-08-19, 04:33 AM
اصل انت الي في الصوره دا ايرورو في سطر 283 وي السطرو وداني للفويت دا وعا فكره دا ايرور في الجيانغ ملوش دعوه بي الوار دروب
يا حبيبي عارف انا قصدي بقولك ان الكود الي انت بعته هو هو الي موجود في الفويد بالظبط و علشان بردو اكملها حطيط نفس الكود بتاعك و نفس الحوار المشكلة ان الاكواد مفهاش اي اختلاف
vBulletin® v3.8.8 Beta 1, Copyright ©2000-2024, TranZ by code