1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Результаты поиска

  1. Hardx
    В смысле ты хочешь затолкать объекты-наследников разных классов в один массив? нет, я хочу чтобы мой метод(DoReflection) просмотрел все свойства в классе(допустим структура GRoleBase), и допустим если он встретил в классе(структура GRoleBase) свойство с типом "Int32", значит он присвоит этому свойству значение прочитанное из пакета, который нам прислал Gamedbd. Обычно читалось это так: int id = PacketReader.ReadInt32(); А массивы обычно читались так: int lenght = PacketReader.ReadCUInt32(); GRoleForbid[] forbid = new GRoleForbid[lenght]; for (int i = 0; i < lenght; i++) { forbid[i] = new GRoleForbid(); forbid[i].createtime = packetReader.ReadInt32(); ... } Так вот, если мой метод найдет массив, он будет создавать массив с нужным кол-во, и будет с помощью рекурсии читать все что находится в след. структуре. Только вот как инициализировать(forbid = new GRoleForbid() ; ) эту структуру с помощью рефлексии я не знаю
    Сообщение от: Hardx, 25 окт 2015 в разделе: PW Вопросник
  2. Hardx
    Прив всем) Вопрос может быть и нубский, но ответа я в интернете не нашел. Есть идея читать пакеты принятые от игровых служб PW с помощью рефлексии и рекурсии. Допустим есть структура GRoleBase из Gamedbd: public class GRoleBase { public byte version { get; private set;} public int id{ get; private set;} public Octets name{ get; private set;} public int race{ get; private set;} public int cls{ get; private set;} public byte gender{ get; private set;} public Octets custom_data{ get; private set;} public Octets config_data{ get; private set;} public int custom_stamp{ get; private set;} public byte status{ get; private set;} public int delete_time{ get; private set;} public int create_time{ get; private set;} public int lastlogin_time{ get; private set;} public GRoleForbid[] forbid{ get; private set;} public Octets help_states{ get; private set;} public int spouse{ get; private set;} public int userid{ get; private set;} public Octets cross_data{ get; private set;} public byte reserved2{ get; private set;} public byte reserved3{ get; private set;} public byte reserved4{ get; private set;} } В этой структуре есть массив из GRoleForbid, и каждый элемент в массиве содержит следующую структуру: public class GRoleForbid { public byte type { get; private set;} public int time { get; private set;} public int createtime { get; private set;} public Octets reason { get; private set;} } И мой метод чтения: public static void DoReflection(object cls, PacketReader packetReader) { foreach (var prop in cls.GetType().GetProperties()) { switch (prop.PropertyType.ToString()) { case "System.Byte": { prop.SetValue(cls, packetReader.ReadByte()); break; } case "System.Int32": { prop.SetValue(cls, (int)packetReader.ReadInt32()); break; } case "SGR.Octets": { prop.SetValue(cls, packetReader.ReadOctets()); break; } default: { if (prop.PropertyType.IsArray) { var length = packetReader.ReadCUInt32(); object value = Activator.CreateInstance(prop.PropertyType, length); //prop.PropertyType равняется GRoleForbid[] foreach (var item in (object[])value) { //Перед вызовом следующего метода, нужно создать экземпляр. DOReflection(item, packetReader); } prop.SetValue(cls, value); } else { object value = Activator.CreateInstance(prop.PropertyType); prop.SetValue(cls, value); DoReflection(value, packetReader); } break; } } } } Проблема возникла с создание экземпляра класса в массиве. Если брать по примеру, то создать экземпляр GRoleForbid. Но для создания нужно узнать сначала тип этого элемента, ведь этот метод будет читать любые структуры, отправленные в этот метод. Собственно в этом и заключается вопрос, как это можно сделать? P.S От безысходности уже хотел согрешить, и использовать велосипед, переведя тип массива в строку и убрать квадратные скобки. Но это уже, по моему мнению, какой-то ад получается.
    Автор темы: Hardx, 24 окт 2015, ответов - 11, в разделе: PW Вопросник
  3. Hardx
  4. Hardx
  5. Hardx
  6. Hardx
    Привет всем) Представляю Вам свою разработку: [IMG] AIPolicy Editor - редактор логики монстров в MMORPG игре Perfect World. С помощью данного редактора Вы сможете создавать уникальных монстров и боссов, которые будут не только бить персонажа, но и взаимодействовать с миром, создавать новых монстров, использовать умения (и многое другое) при определённых условиях. Редактор предоставляет Вам удобный способ редактирования условий для выполнения действий, окно выбора умения с его описанием, быстрыми перехода между связными действиями и удобный расширенным поиском. Большинство полей расшифровано и подробно описано, чтобы начальный пользователь не запутался в создание логики монстра. Редактор поддерживает AIPolicy.data от версии 1.2.6 до 1.5.1, и в будущем будет обновляться до новых версий. Также в случае возникновения ошибки (никто от этого не застрахован), в редактор встроена функция мгновенной отправки ошибки разработчику, для исправления этой ошибки (по желанию, можно прикрепить сам файл AIPolicy.data). Возможности: Загрузки, редактирования, сохранения файла AIPolicy.data версий от 1.2.6 до 1.5.1 Загрузка файла с описанием умений всех версий и удобный выбор умений Удобный редактор условий, никакого текста, только элементы управления Массовое редактирование всех полей и элементов Удобное массовое позиционирование элементов в программе Сортировка Массовое копирование в буфер обмена и вставка из буфера Расширенный поиск со встроенным редактором Удаления всех пустых контроллеров Удобное редактирование сообщений в игре с выбором канала чата. Расширенный список настроек, включая четыре разных дизайна под Ваш вкус Удобный интерфейс программы с перемещением окон и смены их размера Отправка сообщения разработчику при возникновения ошибки с возможностью прикрепить AIPolicy.data и strskills.txt По желанию, делать Backup файла перед сохранением изменений Скриншоты программы: [IMG] [IMG] [IMG] [IMG] Цена: 5 000 рублей Первым трём покупателям скидка 5%:) Skype: dimonpw2
    Автор темы: Hardx, 22 авг 2015, ответов - 8, в разделе: Продам
  7. Hardx
  8. Hardx
  9. Hardx
  10. Hardx
  11. Hardx
  12. Hardx
  13. Hardx
  14. Hardx
  15. Hardx
  16. Hardx
  17. Hardx
    "Дежавю" называется помоему
    Сообщение от: Hardx, 30 окт 2014 в разделе: PW Вопросник
  18. Hardx
  19. Hardx
  20. Hardx