public NPC(string Datei, MainForm Main) { InitializeComponent(); this.Main = Main; NPCFile = Datei; this.Text = new FileInfo(NPCFile).Name; for(int i = 0; i < Main.ItemsArr.Length; i++) { combo_newItemName.Items.Add(Main.ItemsArr[i].AnzeigeName); } for(int i = 0; i < 4; i++) { lv_slots[i] = new ListView(); lv_slots[i].Columns.Add("Item ID", 62); lv_slots[i].Columns.Add("Nom", 131); lv_slots[i].FullRowSelect = true; lv_slots[i].View = View.Details; lv_slots[i].Dock = DockStyle.Fill; tp_slots[i] = new TabPage("Slot " + i.ToString()); tp_slots[i].Controls.Add(lv_slots[i]); tc_slots.TabPages.Add(tp_slots[i]); } openNPC = ReadNPC(); NPCAnzeigen(openNPC); }
public StructNPC ReadNPC() { string NPCFileText = File.ReadAllText(NPCFile, System.Text.Encoding.UTF8); StructNPC returnNPC = new StructNPC(); returnNPC.Items = new System.Windows.Forms.ListView.ListViewItemCollection[4]; for(int i = 0; i < 4; i++) { returnNPC.Items[i] = new System.Windows.Forms.ListView.ListViewItemCollection(lv_slots[i]); } returnNPC.Texte = new System.Windows.Forms.ListView.ListViewItemCollection(lv_texte); NPCFileText = NPCFileText.Replace("\r", string.Empty); Regex zahl = new Regex(@"[\d]+"); Regex floatZahl = new Regex(@"[\d]+[.]?[\d]*"); Regex[] spawnCMDs = new Regex[] {new Regex("NAME \"[\\w]+\""), new Regex(@"MOVER " + zahl.ToString()), new Regex(@"POS " + floatZahl.ToString() + " " + floatZahl.ToString() + " " + floatZahl.ToString()), new Regex(@"WORLD " + floatZahl.ToString()), new Regex(@"ROTATION " + zahl.ToString()), new Regex(@"SIZE " + zahl.ToString()), new Regex(@"PAGE [0|1|2|3]"), new Regex("TEXT " + zahl.ToString() + " \"[\\w]+[\"]?")}; string[] lines = NPCFileText.Split('\n'); try { for(int x = 0; x < lines.Length; x++) { if(!lines[x].StartsWith("//")) { for(int i = 0; i < spawnCMDs.Length; i++) { if(spawnCMDs[i].IsMatch(lines[x])) { if(i == 0) // Name { returnNPC.Name = lines[x].Split(' ')[1].Replace("\"", ""); break; } else if(i == 1) // NPC-ID { returnNPC.NPCID = int.Parse(zahl.Matches(lines[x])[0].ToString()); break; } else if(i == 2) // Position { returnNPC.Pos.X = float.Parse(floatZahl.Matches(lines[x])[0].ToString().Replace('.', ',')); returnNPC.Pos.Y = float.Parse(floatZahl.Matches(lines[x])[1].ToString().Replace('.', ',')); returnNPC.Pos.Z = float.Parse(floatZahl.Matches(lines[x])[2].ToString().Replace('.', ',')); break; } else if(i == 3) // Position.World { returnNPC.Pos.World = int.Parse(zahl.Matches(lines[x])[0].ToString()); break; } else if(i == 4) // Rotation { returnNPC.Rotation = int.Parse(zahl.Matches(lines[x])[0].ToString()); break; } else if(i == 5) // Size { returnNPC.Size = int.Parse(zahl.Matches(lines[x])[0].ToString()); break; } else if(i == 6) // Items { Regex RegexSpace = new Regex(@"[\s]*"); int o = x+1; int Slot = int.Parse(lines[x].Substring(5, 1)); while(!lines[o].Contains("END") || lines[o].Contains("PAGE")) { returnNPC.Items[Slot].Add(RegexSpace.Replace(lines[o], "")); returnNPC.Items[Slot][returnNPC.Items[Slot].Count-1].SubItems.Add(findeItem(int.Parse(RegexSpace.Replace(lines[o], "")))); o++; } break; } else if(i == 7) // Texte { for(int y = 0; y < lines[x].Length; y++) { if(lines[x].Substring(y, 1) == "\"") { int o = x+1; string Text = string.Empty; Text += lines[x].Substring(y+1) + "%N"; while(!lines[o-1].Contains("\"") || lines[o-1].Contains("TEXT")) { Text += lines[o] + "%N"; o++; } Text = Text.Remove(Text.Length-2, 2); returnNPC.Texte.Add(Text.Replace("\"", "")).SubItems.Add(zahl.Matches(lines[x])[0].ToString()); break; } } break; } } } } } /* foreach(ListView.ListViewItemCollection lv in returnNPC.Items) { foreach(ListViewItem lvItem in lv) { lvItem.SubItems[2].Text = findeItem(int.Parse(lvItem.SubItems[1].Text)); } } */ } catch ( Exception ex ) { Main.LoggIt(ex.Message, ex.StackTrace); } return returnNPC; }
void NPCAnzeigen(StructNPC zeigeNPC) { try { txt_id.Text = zeigeNPC.NPCID.ToString(); txt_name.Text = zeigeNPC.Name; txt_rotation.Text = zeigeNPC.Rotation.ToString(); txt_size.Text = zeigeNPC .Size.ToString(); txt_World.Text = zeigeNPC.Pos.World.ToString(); txt_X.Text = zeigeNPC.Pos.X.ToString(); txt_Y.Text = zeigeNPC.Pos.Y.ToString(); txt_Z.Text = zeigeNPC.Pos.Z.ToString(); } catch (Exception ex) { Main.LoggIt(ex.Message, ex.StackTrace); } }