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; }
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(); }
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(); }