Exemplo n.º 1
0
        private void onLoad(object sender, EventArgs e)
        {
            if (DesignMode)
                return;

            tbSelectedPath.Text = filesList.SelectedPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
            cbBitmapType.SelectedIndex = 0;
            pbMGump.Image = new Bitmap(pbMGump.Width, pbMGump.Height);//new Bitmap(260, 237);
            pbFGump.Image = new Bitmap(pbMGump.Width, pbMGump.Height);//new Bitmap(260, 237);

            // Поиск тайлов предметов и создание списка
            listViewItem.BeginUpdate();
            listViewItem.Clear();
            var tiles = new List<int>(2048);
            for (int i = 0; i < TileData.ItemTable.Length; ++i)
                if (TileData.ItemTable[i].Wearable && Art.IsValidStatic(i)) {
                    tiles.Add(i);
                    var node = new ListViewItem();
                    node.Tag = i;
                    node.ToolTipText = String.Format("ID: 0x{0:X4} ({0,5}){2}{1}", i, Ultima.TileData.ItemTable[i].Name, Environment.NewLine);
                    listViewItem.Items.Add(node);
                }
            listViewItem.EndUpdate();
            listViewItem.Tag = new object[1];
            (listViewItem.Tag as object[])[0] = false;

            // Сортировка тайлов по анимациям
            int anim_min = 0, anim_max = 0;
            var anims = new Dictionary<int, List<int>>(1024);
            foreach (var tile in tiles) {
                var animId = Math.Max(0, (int)TileData.ItemTable[tile].Animation);
                if (!anims.ContainsKey(animId))
                    anims.Add(animId, new List<int>(2));
                anims[animId].Add(tile);
                anim_max = Math.Max(anim_max, animId);
                anim_min = Math.Min(anim_min, animId);
            }

            // Построение списка экипировки
            treeViewBody.BeginUpdate();
            treeViewBody.Nodes.Clear();
            enties = new EquipEntry[Math.Max(2048, ++anim_max)];
            Array.Clear(enties, 0, enties.Length);
            //var pairs = from pair in anims orderby pair.Key ascending select pair;
            for (int i = 0; i < enties.Length; ++i) {
                enties[i] = anims.ContainsKey(i) ? new EquipEntry(i, anims[i].ToArray()) : i < 1000 ? null : new EquipEntry(i, new int[0]);
                var node = new TreeNode(String.Format("{0,4}", i));
                node.Tag = i;
                treeViewBody.Nodes.Add(node);
                treeViewBody_UpdateNode(i, false);
            }
            treeViewBody.EndUpdate();
            treeViewBody.Update();
            treeViewBody.Refresh();
            treeViewBody.Nodes[1000].EnsureVisible();
            numNumber.Maximum = enties.Length;
            SelectedEntry = enties[0];

            // Построение списка гампов
            listViewGump.BeginUpdate();
            listViewGump.Clear();
            for (int id = 50000; id < 60000; ++id) {
                if (!Ultima.Gumps.IsValidIndex(id)) continue;
                var node = new ListViewItem();
                node.Tag = id;
                node.ToolTipText = String.Format("ID: 0x{0:X4} ({0,5}) [муж]{2}{1}", id, EquipEntry.FromGump(id).ItemName ?? String.Empty, Environment.NewLine);
                listViewGump.Items.Add(node);

                if (!Ultima.Gumps.IsValidIndex(id+10000)) continue;
                node = new ListViewItem();
                node.Tag = id + 10000;
                node.ToolTipText = String.Format("ID: 0x{0:X4} ({0,5}) [жен]{2}{1}", id+10000, EquipEntry.FromGump(id+10000).ItemName ?? String.Empty, Environment.NewLine);
                listViewGump.Items.Add(node);
            }
            listViewGump.EndUpdate();
            listViewGump.Tag = new object[1];
            (listViewGump.Tag as object[])[0] = false;

            // Построение списка тел
            listViewBody.BeginUpdate();
            listViewBody.Clear();
            for (int id = 400; id < 941; ++id) {
                var body = Ultima.AnimationEdit.GetAnimation(3, id, 4, 1);
                if (body == null || body.Frames == null || body.Frames.Count < 1) continue;
                var node = new ListViewItem();
                node.Name = String.Format("{0,4}", 600+id);
                node.Tag = new[] { 4, 1, 0, 600+id };
                listViewBody.Items.Add(node);
            }
            listViewBody.EndUpdate();

            // Построение списка Цветов
            listViewBodyHue.BeginUpdate();
            listViewBodyHue.Clear();
            for (int id = 0; id < Ultima.Hues.List.Length; ++id) {
                var node = new ListViewItem();
                node.Name = String.Format("{0,4}", id);
                node.Tag = new[] { 4, 1, 0, id };
                listViewBodyHue.Items.Add(node);
            }
            listViewBodyHue.EndUpdate();

            // Инициалзация списка расс
            cbBody.BeginUpdate();
            cbBody.Items.Clear();
            for (int i = 0; i < Race.Length; ++i)
                cbBody.Items.Add(Race.GetInstance(i).Name);
            cbBody.EndUpdate();

            lvAnim.BeginUpdate();
            lvAnim.Clear();
            string[] directs = new string[]{"4 - Down", "5 - South", "6 - Left", "7 - West", "0 - Up"};
            string[] actions = new string[]{"Walk_01","WalkStaff_01","Run_01","RunStaff_01","Idle_01","Idle_01",
                                            "Fidget_Yawn_Stretch_01","CombatIdle1H_01","CombatIdle1H_01","AttackSlash1H_01",
                                            "AttackPierce1H_01","AttackBash1H_01","AttackBash2H_01","AttackSlash2H_01",
                                            "AttackPierce2H_01","CombatAdvance_1H_01","Spell1","Spell2","AttackBow_01",
                                            "AttackCrossbow_01","GetHit_Fr_Hi_01","Die_Hard_Fwd_01","Die_Hard_Back_01",
                                            "Horse_Walk_01","Horse_Run_01","Horse_Idle_01","Horse_Attack1H_SlashRight_01",
                                            "Horse_AttackBow_01","Horse_AttackCrossbow_01","Horse_Attack2H_SlashRight_01",
                                            "Block_Shield_Hard_01","Punch_Punch_Jab_01","Bow_Lesser_01","Salute_Armed1h_01",
                                            "Ingest_Eat_01"}; //human
            for (int a = 0; a < 35; ++a)
                for (int d = 0; d < 5; ++d) {
                var node = new ListViewItem();
                node.Tag = new []{a, d, 0};
                node.ToolTipText = String.Format("{4}{0}Action: {1,2}{0}Direction: {2}{0}Durarion: {3}", Environment.NewLine, a, directs[d], "-", actions[a]);
                lvAnim.Items.Add(node);
            }
            lvAnim.EndUpdate();

            cbBody.SelectedIndex = Race.Length > 1 ? 1 : 0;
        }
Exemplo n.º 2
0
        private void SelectEntry(EquipEntry entry)
        {
            SelectedEntry = entry;
            if (entry == null || entry.Number == 0) {
                tbNumber.Text = tbName.Text = tbRealBody.Text = String.Empty;
                cbWeapon.CheckState = cbArmor.CheckState = cbPartialHue.CheckState = cbLightSource.CheckState = CheckState.Indeterminate;

                DrawGump(enties[0]);

                lvItems.Update();
                lvItems.Clear();
                lvItems.EndUpdate();

                lvAnim.Update();
                return;
            }

            treeViewBody.Nodes[entry.Number].EnsureVisible();

            listViewBodyHue.Items[entry.HueColor].Selected = true;
            listViewBodyHue.Items[entry.HueColor].EnsureVisible();
            for (int i = 0; i < listViewBody.Items.Count; ++i)
                if ((listViewBody.Items[i].Tag as int[])[3] == entry.Animation) {
                    listViewBody.Items[i].Selected = true;
                    listViewBody.Items[i].EnsureVisible();
                    break;
                }

            // Обновление инфы
            tbNumber.Text = String.Format("{0,4}", numNumber.Value = entry.Number);
            tbName.Text = entry.ItemName ?? String.Empty;
            tbRealBody.Text = String.Format("{0,4}", numNumber.Value = entry.Animation);
            tbRealBody.ForeColor = Animations.IsAnimDefinied(entry.Animation) ? Color.Blue : Color.DarkRed;
            cbWeapon.CheckState = entry.ItemWeapon;
            cbArmor.CheckState = entry.ItemArmor;
            cbPartialHue.CheckState = entry.ItemPartialHue;
            cbLightSource.CheckState = entry.ItemLightSource;

            // Обновление гампов
            DrawGump(entry);

            // Обновление тайлов
            lvItems.Update();
            lvItems.Clear();
            for (int i = 0; i < entry.ArtTiles.Length; ++i) {
                var node = new ListViewItem();
                node.Name = String.Format("{0}. 0x{1:X4}", i+1, entry.ArtTiles[i]);
                node.Tag = entry.ArtTiles[i];
                lvItems.Items.Add(node);
            }
            lvItems.EndUpdate();
            contextMenuItem_CopyTo_SetLength(entry.ArtTiles.Length);

            // Обновление анимации
            lvAnim.Update();
        }
Exemplo n.º 3
0
        private void DrawGump(EquipEntry entry)
        {
            bool patched;
            var race = Race.GetInstance(cbBody.SelectedIndex);
            using (var graphpic = Graphics.FromImage(pbMGump.Image)) {
                graphpic.Clear(Color.Black);
                if (race.M_Gump > 0)
                    graphpic.DrawImage(new Bitmap(Gumps.GetGump(race.M_Gump, Ultima.Hues.GetHue(race.ColHue), true, out patched)), 0, 0);
                if (Gumps.IsValidIndex(entry.GumpMale) && entry.Number > 0) {
                    /*if (SelectedEntry.HueColor > 0)
                        graphpic.DrawImage(new Bitmap(Gumps.GetGump(entry.GumpMale, Ultima.Hues.GetHue(SelectedEntry.HueColor), SelectedEntry.ItemPartialHue == CheckState.Checked, out patched)), 0, 0);
                    else*/ graphpic.DrawImage(new Bitmap(Gumps.GetGump(entry.GumpMale)), 0, 0);

                    var trect = new Rectangle(0, 237, pbMGump.Width, pbMGump.Image.Height - 237);
                    var flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;
                    TextRenderer.DrawText(graphpic, String.Format("{0,5} (0x{0:X4})", entry.GumpMale), FontItemName, trect, Color.LightSlateGray, flags);
                }
            } pbMGump.Invalidate();
            using (var graphpic = Graphics.FromImage(pbFGump.Image)) {
                graphpic.Clear(Color.Black);
                if (race.F_Gump > 0)
                    graphpic.DrawImage(new Bitmap(Gumps.GetGump(race.F_Gump, Ultima.Hues.GetHue(race.ColHue), true, out patched)), 0,0);
                var gumpId = Gumps.IsValidIndex(entry.GumpFemale) ? entry.GumpFemale : entry.GumpMale;
                if (Gumps.IsValidIndex(gumpId) && entry.Number > 0) {
                    /*if (SelectedEntry.HueColor > 0)
                        graphpic.DrawImage(new Bitmap(Gumps.GetGump(gumpId, Ultima.Hues.GetHue(SelectedEntry.HueColor), SelectedEntry.ItemPartialHue == CheckState.Checked, out patched)), 0, 0);
                    else*/ graphpic.DrawImage(new Bitmap(Gumps.GetGump(gumpId)), 0, 0);

                    if (gumpId == entry.GumpFemale) {
                        var trect = new Rectangle(0, 237, pbFGump.Width, pbFGump.Image.Height - 237);
                        var flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;
                        TextRenderer.DrawText(graphpic, String.Format("{0,5} (0x{0:X4})", gumpId), FontItemName, trect, Color.LightSlateGray, flags);
                    }

                }
            } pbFGump.Invalidate();
        }