Ru-MaNGOS

Ru-MaNGOS (http://ru-mangos.ru/index.php)
-   Tools (http://ru-mangos.ru/forumdisplay.php?f=22)
-   -   SpellWork C# (http://ru-mangos.ru/showthread.php?t=765)

LordJZ 17.04.2010 20:35

SpellWork C#
 
Вложений: 3
Мы тут с Konctantin начали переписывать SpellWork на C#.

Репозиторий тут: http://github.com/LordJZ/spellwork_cs/

Пока что реализованы не все функции оригинального spell_work-а, но вроде бы все работает.
Скриншоты: (пока что не все реализовано)


Ссылка на скомпилированный файл во вложении.
Пожалуйста пишите свои пожелания и баг-репорты.

Konctantin 17.04.2010 20:38

Ждем баг-репортов и пожеланий :)

xmolex 17.04.2010 21:01

Хотел спросить, имена в 3.3.3 в Spell.dbc уже не используются? Использую enGB. Вроде всегда имена были, а тут не видно.

Konctantin 17.04.2010 21:13

у нас тут автодетект, проверялось только на русских, щас проверю не английски

====
Поправлено, спасибо.

TOM_RUS 17.04.2010 22:44

Небольшой патчик http://paste2.org/p/778934, добавлен sln файл для VS2010 (компиляция в VS2008 не проверялась, теоретически должно компилится с варнингами о неподдерживаемой версии .NET Framework), перенесена часть кода в класс Extensions...

xmolex 17.04.2010 22:51

Цитата:

Сообщение от Konctantin (Сообщение 4661)
Поправлено, спасибо.

Если не сложно, можно бинарник, а то C# не стоит.

TOM_RUS 17.04.2010 23:03

Кстати, содержимое файла Utility.cs тоже можно переделать в Extensions (хотя эти методы все равно не используются)...

Цитата:

Сообщение от xmolex (Сообщение 4666)
Если не сложно, можно бинарник, а то C# не стоит.

А что мешает поставить? Если VS установлена (не Express), то даже места на винте дополнительного не потребуется...

Konctantin 17.04.2010 23:11

Вложений: 1
Патч накатил, и сразу пришлось null на "" менять, кстати вопрос, а зачем было делать в структуре приват переменные пабликами, я их специально скрыл, чтоб недоступны были из списка выбора, а то там и так всего много, да и null устраивал :)
Пока пускай будет, мало ли.

исходник прилепил

TOM_RUS 17.04.2010 23:14

Цитата:

Сообщение от Konctantin (Сообщение 4668)
кстати вопрос, а зачем было делать в структуре приват переменные пабликами

Ну хотя бы для того чтобы компилятор не ругался :)

Konctantin 17.04.2010 23:19

Есть один баг, не правильно отображаются Stances и Not Stances, пока не знаю как поправить

TOM_RUS 17.04.2010 23:27

В GenerateSpellDesc не лучше ли заменить str += ... на StringBuilder? А то выглядит ужасно :)

Код:

            return String.Format("SpellRange: ID - {0} {1} (unk = {2}) MinRange = {3}, MinRangeFriendly = {4}, MaxRange = {5}, MaxRangeFriendly = {6}\r\n",
                q.Key, q.Value.Description1, q.Value.Description2, q.Value.Field5, q.Value.MinRange,
                q.Value.MinRangeFriendly, q.Value.MaxRange, q.Value.MaxRangeFriendly);

Неверное количество аргументов.

Код:

        static String GetFormInfo(ulong val, string name)
        {
            int i = 1;

Fix для Stances

Код:

        public ulong Stances;                                    // 12-13    m_shapeshiftMask
        public ulong StancesNot;                                  // 14-15    m_shapeshiftExclude

структура

Код:

"\r\n"
можно заменить на Environment.NewLine

Код:

public static StringBuilder AppendFormatLine(this StringBuilder sb, string format, params object[] args)
{
    return sb.AppendFormat(format, args).AppendLine();
}

Extension метод, может пригодиться при замене "str += ..." на StringBuilder...

Для
Код:

""
есть readonly константа String.Empty либо метод String.IsNullOrEmpty(string str). При желании можно добавить Extension метод чтобы можно было делать
так:
Код:

var str = "abc";
if(str.IsNullOrEmpty())
{
  ...
}

вместо
Код:

var str = "abc";
if(String.IsNullOrEmpty(str))
{
  ...
}

это как кому больше нравится...

В файле Structure.cs опечатка curent -> current

Код:

GetAuraModTypeName()
GenerateSpellDesc()
GetProcInfo()
GetTriggerSpell()
...

и другие подобные методы, почему бы их не перенести в структуру SpellEntry...

Код:

var spell = (from s in DBC.Spell where s.Key == spellId select s.Value).First();
зачем тут LINQ вообще? Можно просто var spell = DBC.Spell[spellId] сделать...

Код:

sb.Append(Environment.NewLine);
можно просто заменить на sb.AppendLine()

Код:

sb.AppendFormat("CasterAuraState 0x{0:X8}, TargetAuraState 0x{1:X8}\r\n", spell.CasterAuraState, spell.TargetAuraState);
и подобные заканчивающиеся на "\r\n" не предлагаемый выше Extension method "public static StringBuilder AppendFormatLine(this StringBuilder sb, string format, params object[] args)"

Konctantin 18.04.2010 01:25

Поправил, правда не все, оставил еще LordJZ, пускай и он поклацает.

TOM_RUS 18.04.2010 12:04

Еще патчик http://paste2.org/p/779518.

LordJZ 18.04.2010 12:34

Цитата:

Сообщение от TOM_RUS (Сообщение 4684)
Еще патчик http://paste2.org/p/779518.

Спасибо. :)

TOM_RUS 18.04.2010 14:16

http://paste2.org/p/779641

Konctantin 18.04.2010 14:31

Может права на репозитарий лучше у LordJZ взять?

TOM_RUS 18.04.2010 17:31

http://paste2.org/p/779792

Konctantin 18.04.2010 22:20

Вложений: 1
Все-таки используем контрол, для отображения текста который допускает форматирование, начал заменять StringBuilder на расширения класса RichTextBox подобными методами.

Спасибо Kirix за замечание.

Сделал, вот как это будет примерно выглядеть: осталось только расставить стили и выделить важную информацию.

Konctantin 19.04.2010 20:08

Вложений: 1
Я зашел в тупик, не знаю от куда и как берутся некоторые поля для таблицы spell_proc_event, а именно:
-ProcFlagEx - подозреваю что это spell.ProcFlags - но не уверен :(
-PPMRate - даже не представляю

с каких полей dbc составляются эти данные?

и чуточку не уверен в Cooldown, так что нужна помощь, или хотя бы намек или пинок в нужном направлении.

Вот пока последняя на данный момент скомпилированая версия SpellWork

Laise 20.04.2010 06:44

Цитата:

Сообщение от Konctantin (Сообщение 4732)
Я зашел в тупик, не знаю от куда и как берутся некоторые поля для таблицы spell_proc_event, а именно:
-ProcFlagEx - подозреваю что это spell.ProcFlags - но не уверен :(
-PPMRate - даже не представляю

с каких полей dbc составляются эти данные?

и чуточку не уверен в Cooldown, так что нужна помощь, или хотя бы намек или пинок в нужном направлении.
SpellWork

procEx - из enum ProcFlagsEx в мангосе, в дбс этого нет
PPMRate - шанс прока в зависимости от скорости оружия, в старом спеллворке было просто поле для ввода
Cooldown - тоже было просто поле для ввода

Konctantin 20.04.2010 07:18

Cooldown - я взял spell.RecoveryTime / 1000f - но если не устраивает можем поставить свое

PPMRate, procEx - это то чего нету в dbc но то что мы хотим видеть.

Спасибо, вот я и получил тот пинок в нужном направлении.

так, с проками кажется разобрался полностью, по ходу будет видно, как будет время сегодня сделаю полностью эту вкладку и приведу ее к нужному функционалу.

Какие есть у кого пожелания, что бы вы еще хотели видеть?

Laise 20.04.2010 09:25

Цитата:

Сообщение от Konctantin (Сообщение 4743)

Какие есть у кого пожелания, что бы вы еще хотели видеть?

поиск по spellIconID и по attributes/attributesEx(было в старом) =)

Konctantin 20.04.2010 10:43

Готово http://github.com/LordJZ/spellwork_c...6ee711b73fdc60

LordJZ 20.04.2010 15:03

Кстати да, поиск было бы классно расширить и спрятать в отдельный блок

Konctantin 20.04.2010 22:24

У меня опять вопрос, как для таблицы spell_proc_event надо брать данные по столбцам SpellFamilyMask0, SpellFamilyMask1, SpellFamilyMask2, они берутся прямо из dbc и не меняются или как-то генерируются?

Просто не нашел в исходниках СпеллВорка как это дело обрабатывается:(

Konctantin 21.04.2010 21:36

Реализована работа с базой данных для таблицы spell_proc_event (пока немного кривовато, надо проверок натыкать).
Остался открытым вопрос с моего предыдущего поста. Необходимо проверять, но я сейчас не могу, сделал все чисто теоретически.

Прикрепил последнюю скомпилированную версию, там же и MySql.Data.dll для работы с базой данных.
http://filekeeper.org/download/share...3a__11723_.rar

Konctantin 23.04.2010 15:20

+ Добавил фильтр на выборку из базы данных
+ Добавлено несколько проверок для роботы с базой данных
+ Добавил форму для подсчета флагов
+ Добавил бинарные файлы "SpellWork.exe" и "MySql.Data.dll" в репозитарий
скачать можно тут http://github.com/LordJZ/spellwork_c...k/bin/Release/

Konctantin 23.04.2010 19:03

Простите, ошибочка вышла, скомпилировал в дебаге, а залил релиз.
Поправлено.

PSZ 24.04.2010 13:50

Предлагаю сделать не одну вкладку Spell Info, а две - удобно сравнивать спеллы.

LordJZ 24.04.2010 14:13

А лучше сделать вкладку Compare Spell

Konctantin 24.04.2010 20:29

Я уже работаю над этим, хочу сделать что-то на подобии TortoiseIDiff, с 2 полями, и выделение цветом разбежностей (красным) и совпадений (зеленым)

Konctantin 24.04.2010 20:43

Цитата:

Предлагаю сделать не одну вкладку Spell Info, а две - удобно сравнивать спеллы.
По идее вкладки "Spell Info" и "Spell Proc Event" идентичны, информация что в них выводится одинаковая, а отборы независимые.
Если мешают дополнительные панели во вкладке "Spell Proc Event" - их легко можно сдвинуть, и они не будут мешать.

Konctantin 28.04.2010 09:18

Помогите с задачей, для реализации расширенного фильтра в SpellWork
Есть структура:
Код:

public struct SpellEntry
{
      public uint ID;
      ....
};

как мне представить структуру как массив полей (для того чтобы вывести в комбобокс и пользователь мог сам выбирать поле структуры и присваивать ей значение)

Я частично решил проблему, чтобы заполнить ComboBox нужными данными из структуры сделал такой метод расширения:
Код:

public static void SetStructFields<T>(this ComboBox cb) where T : struct
{
        cb.Items.Clear();

        DataTable dt = new DataTable();
        dt.Columns.Add("ID");
        dt.Columns.Add("NAME");

        var type = typeof(T).GetMembers();
        int i = 0;
        foreach (var str in type)
        {
                dt.Rows.Add(new object[]
                {
                        str,
                        String.Format("({0:000}) {1}", i, str.Name)
                });
                i++;
        }

        cb.DataSource    = dt;
        cb.DisplayMember = "NAME";
        cb.ValueMember  = "ID";
}

Но появился второй вопрос, как можно теперь применить это в запросе LINQ?
все данные у меня хранятся в Dictionary<uint, SpellEntry> Spell;
Что я имею ввиду: скажем есть такой простенький запрос:
Код:

var query = from s in DBC.Spell.Value where s.SpellName == val select s;
как сделать чтобы в запрос вставить переменную из ComboBox
чтобы было что-то на подобии:
Код:

var field = ((ComboBox)sender).SelectedValue;
var query = from s in DBC.Spell.Value where s[field] == val select s;

Естественно так как я написал - не работает, по сему и прошу помощи.

И возможно ли вообще присвоение переменной в єтом участке кода:
Код:

DBC.Spell.Value where s[field]
Много гуглил но так и не нашел способа реализации данной задачи, возможно ответ очевиден, но ...

Konctantin 01.05.2010 23:09

пока ничего серьезного не делал, но в последней версии ускорил загрузку программы, теперь ДБЦ читаются быстрее.
Так же должна показываться ошибка, если структура не подходит к ДБЦ файлу.
От нечего делать добавил иконки в SpellFamilyTree

Konctantin 12.05.2010 01:09

Вложений: 1
Сделал сравнение спелов, сравнение идет построчно:


http://ru-mangos.ru/attachment.php?a...1&d=1273615752

Konctantin 12.05.2010 06:41

Есть просьба: залейте кто нибудь ДБЦ с клиентов 112 и 243

MangMan 12.05.2010 07:27

Вложений: 1
Вот такая вот ошибка
http://ru-mangos.ru/attachment.php?a...1&d=1273638583
Установлен .NetFramework 4
(Ранние версии NetFramework отсутствуют)

Konctantin 12.05.2010 07:51

я собираю на 3.5 .NetFramework, попробуйте установить его.
Да и там еще библиотека для работы с базой данных, вы ее скачали?
http://github.com/LordJZ/spellwork_c...MySql.Data.dll

Konctantin 12.05.2010 14:28

Вложений: 1
Реализован дополнительный фильтр, теперь можно выбрать поле и задать ему значение. Фильтр можно использовать самостоятельно и с основным фильтром.

http://ru-mangos.ru/attachment.php?a...1&d=1273663590

Спасибо всем за идеи, жду новых пожеланий.

crAwling 12.05.2010 14:41

Можно ли прок перенести в спел прок ивент, как было ранее сделано в старом спелл ворке?
И не могу разобраться, как выбрать маску для прока?


Текущее время: 00:20. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS