void WriteScriptValue(System.IO.BinaryWriter rR, ScriptType var) { switch (var.scrID) { case ScriptType.ScriptID.INT: { rR.Write(var.intval); } break; case ScriptType.ScriptID.SHORT: { rR.Write(var.shortval); } break; case ScriptType.ScriptID.BYTE: { rR.Write(var.byteval); } break; case ScriptType.ScriptID.BOOL: { rR.Write(var.boolval); } break; case ScriptType.ScriptID.STRING: { rR.Write(var.len); rR.Write(var.val,0,var.len); } break; case ScriptType.ScriptID.VOID: { rR.Write(var.val); } break; case ScriptType.ScriptID.HIDDEN: { rR.Write(var.val); } break; case ScriptType.ScriptID.DIRECTION: { rR.Write((ulong)var.dirval); } break; case ScriptType.ScriptID.SPELL: case ScriptType.ScriptID.ENCHANTMENT: case ScriptType.ScriptID.ABILITY: case ScriptType.ScriptID.PROP: { rR.Write(Convert.ToByte(var.len)); rR.Write(var.val, 0, var.len); } break; case ScriptType.ScriptID.OBJECT: { rR.Write(Convert.ToByte(var.byteval)); rR.Write(Convert.ToByte(var.len)); rR.Write(var.val, 0, var.len); rR.Write(Convert.ToByte(var.len2)); rR.Write(var.val2, 0, var.len2); for (int p = 0; p < 4; p++) { rR.Write(Convert.ToByte(var.loopval[p].len)); rR.Write(var.loopval[p].val, 0, var.loopval[p].len); } } break; case ScriptType.ScriptID.COLOR: { rR.Write(var.col.R); rR.Write(var.col.G); rR.Write(var.col.B); } break; default: break; } }
private void button1_Click(object sender, EventArgs e) { int index = (int)treeView1.SelectedNode.Tag; if (modlist[index].scrID == ScriptType.ScriptID.LOOP) { if (modlist[index].loopval.Count > 0 && modlist[index].loopval[0].scrID != ScriptType.ScriptID.OBJECT) { ScriptType item = new ScriptType(); item.scrID = modlist[index].loopval[0].scrID; modlist[index].loopval.Add(item); listLoop.Items.Add(item.scrID); } else { ScriptType item = new ScriptType(); item.scrID = ScriptType.ScriptID.OBJECT; item.val = new byte[5]; item.val = Encoding.ASCII.GetBytes("EMPTY"); item.val2 = new byte[13]; item.val2 = Encoding.ASCII.GetBytes("SPELL_INVALID"); item.loopval = new List<ScriptType>(); item.len = 5; item.len2 = 13; for (int i = 0; i < 4; i++) { ScriptType tem = new ScriptType(); tem.len = 0; item.loopval.Add(tem); } modlist[index].loopval.Add(item); listLoop.Items.Add("EMPTY"); } modlist[index].len++; } }
private void HandleMod() { if (Scripting.CheckMod(m_ExePath, obj.Name)) { } else return; modlayout = Scripting.EditMod(m_ExePath, obj.Name); try { int count = modlayout.Count; string[] mod = (string[])modlayout.ToArray(typeof(string)); // listMod.Items.Clear(); modlayout.Clear(); System.IO.MemoryStream rS = new System.IO.MemoryStream(obj.modbuf); System.IO.BinaryReader rR = new System.IO.BinaryReader(rS); bool isLoop = false; int loopLen = 0; ArrayList loopList = new ArrayList(); string loopName = ""; for (int i = 0; i < count && mod[i] != null; ) { ScriptType loopItem = new ScriptType(); if (mod[i + 1] == "LOOP") { loopName = mod[i]; loopLen = rR.ReadByte(); loopLen--; isLoop = true; loopItem.len = loopLen + 1; loopItem.scrID = ScriptType.ScriptID.LOOP; loopItem.loopval = new List<ScriptType>(); i += 2; string str = mod[i]; while (str != "END") { loopList.Add(str); i++; str = mod[i]; } i++; } int max = (loopLen * (loopList.Count)); //if (isLoop) // max++; for (int j = 0; j <= max; j++) { TreeNode nodey = new TreeNode(); ScriptType item = new ScriptType(); string switchVal; if (isLoop) switchVal = loopList[(j % loopList.Count)].ToString(); else switchVal = mod[i + 1]; switch (switchVal) { case "EXTENT": if (rR.BaseStream.Position <= obj.modbuf.Length - 4) { item.intval = rR.ReadInt32(); item.scrID = ScriptType.ScriptID.INT; if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); // listMod.Items.Add(mod[i + 1] + " : " + mod[i]); nodey.Text = mod[i + 1] + " : " + mod[i]; nodey.Tag = modlist.Count-1; MISC.Nodes.Add(nodey); //treeView1.Nodes.Add(nodey); } } break; case "BYTE": if (rR.BaseStream.Position <= obj.modbuf.Length) { item.byteval = rR.ReadByte(); item.scrID = ScriptType.ScriptID.BYTE; if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(mod[i + 1] + " : " + mod[i]); nodey.Text = mod[i + 1] + " : " + mod[i]; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); MISC.Nodes.Add(nodey); } } break; case "SHORT": if (rR.BaseStream.Position <= obj.modbuf.Length - 2) { item.shortval = rR.ReadInt16(); item.scrID = ScriptType.ScriptID.SHORT; if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(mod[i + 1] + " : " + mod[i]); nodey.Text = mod[i + 1] + " : " + mod[i]; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); MISC.Nodes.Add(nodey); } } break; case "INT": if (rR.BaseStream.Position <= obj.modbuf.Length - 4) { item.intval = rR.ReadInt32(); item.scrID = ScriptType.ScriptID.INT; if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(mod[i + 1] + " : " + mod[i]); nodey.Text = mod[i + 1] + " : " + mod[i]; nodey.Tag = modlist.Count-1; // treeView1.Nodes.Add(nodey); MISC.Nodes.Add(nodey); } } break; case "STRING": if (rR.BaseStream.Position <= obj.modbuf.Length - 4) { item.len = rR.ReadInt32(); item.scrID = ScriptType.ScriptID.STRING; if (rR.BaseStream.Position <= obj.modbuf.Length - item.len) { item.val = new byte[item.len]; item.val = rR.ReadBytes(item.len); if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(mod[i + 1] + " : " + mod[i] + " : " + item.len); nodey.Text = mod[i] + " : " + item.len; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); STRINGS.Nodes.Add(nodey); } } } break; case "BOOL": if (rR.BaseStream.Position <= obj.modbuf.Length) { item.scrID = ScriptType.ScriptID.BOOL; item.boolval = rR.ReadBoolean(); if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(mod[i + 1] + " : " + mod[i]); nodey.Text = mod[i + 1] + " : " + mod[i]; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); MISC.Nodes.Add(nodey); } } break; case "FLOAT": if (rR.BaseStream.Position <= obj.modbuf.Length - 4) { item.floatval = (float)rR.ReadUInt32(); item.scrID = ScriptType.ScriptID.FLOAT; if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); // listMod.Items.Add(mod[i + 1] + " : " + mod[i]); nodey.Text = mod[i + 1] + " : " + mod[i]; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); MISC.Nodes.Add(nodey); } } break; case "VOID": if (rR.BaseStream.Position <= obj.modbuf.Length - Convert.ToInt32(mod[i + 2])) { item.len = Convert.ToInt32(mod[i + 2]); item.scrID = ScriptType.ScriptID.VOID; item.val = new byte[item.len]; item.val = rR.ReadBytes(item.len); if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); // listMod.Items.Add(mod[i + 1] + " : " + mod[i]); nodey.Text = mod[i + 1] + " : " + mod[i]; nodey.Tag = modlist.Count-1; treeView1.Nodes.Add(nodey); MISC.Nodes.Add(nodey); } } break; case "HIDDEN": if (rR.BaseStream.Position <= obj.modbuf.Length - Convert.ToInt32(mod[i + 2])) { item.len = Convert.ToInt32(mod[i + 2]); item.scrID = ScriptType.ScriptID.HIDDEN; item.val = new byte[item.len]; item.val = rR.ReadBytes(item.len); if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(" "); } } break; case "DIRECTION": if (rR.BaseStream.Position <= obj.modbuf.Length - 8) { item.scrID = ScriptType.ScriptID.DIRECTION; ulong val = rR.ReadUInt64(); item.dirval = (ScriptType.Direction)val; if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(mod[i + 1] + " : " + mod[i] + " : " + item.len); nodey.Text = mod[i]; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); DIRECTION.Nodes.Add(nodey); } } break; case "PROP": if (rR.BaseStream.Position <= obj.modbuf.Length) { item.len = (int)rR.ReadByte();//rR.ReadInt32(); item.scrID = ScriptType.ScriptID.PROP; if (rR.BaseStream.Position <= obj.modbuf.Length - item.len) { item.val = new byte[item.len]; item.val = rR.ReadBytes(item.len); if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); // listMod.Items.Add(mod[i + 1] + " : " + mod[i] + " : " + item.len); nodey.Text = mod[i] + " : " + item.len; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); PROPS.Nodes.Add(nodey); } } } break; case "LOADREST": if (rR.BaseStream.Position <= obj.modbuf.Length) { if (rR.BaseStream.Position == obj.modbuf.Length) item.len = 1; else item.len = (int)(obj.modbuf.Length - rR.BaseStream.Position); item.scrID = ScriptType.ScriptID.HIDDEN; item.val = new byte[item.len]; item.val = rR.ReadBytes(item.len); if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); } } break; case "SPELL": if (rR.BaseStream.Position <= obj.modbuf.Length) { item.len = (int)rR.ReadByte();//rR.ReadInt32(); item.scrID = ScriptType.ScriptID.SPELL; if (rR.BaseStream.Position <= obj.modbuf.Length - item.len) { item.val = new byte[item.len]; item.val = rR.ReadBytes(item.len); if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(mod[i + 1] + " : " + mod[i] + " : " + item.len); nodey.Text = mod[i + 1] + " : " + mod[i] + " : " + item.len; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); PROPS.Nodes.Add(nodey); } } } break; case "ENCHANTMENT": if (rR.BaseStream.Position <= obj.modbuf.Length) { item.len = (int)rR.ReadByte();//rR.ReadInt32(); item.scrID = ScriptType.ScriptID.ENCHANTMENT; if (rR.BaseStream.Position <= obj.modbuf.Length - item.len) { item.val = new byte[item.len]; item.val = rR.ReadBytes(item.len); if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(mod[i + 1] + " : " + mod[i] + " : " + item.len); nodey.Text = mod[i + 1] + " : " + mod[i] + " : " + item.len; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); PROPS.Nodes.Add(nodey); } } } break; case "OBJECT": if (rR.BaseStream.Position <= obj.modbuf.Length) { item.byteval = rR.ReadByte(); item.len = (int)rR.ReadByte();//rR.ReadInt32(); item.scrID = ScriptType.ScriptID.OBJECT; if (rR.BaseStream.Position <= obj.modbuf.Length - item.len) { item.val = new byte[item.len]; item.val = rR.ReadBytes(item.len); item.len2 = rR.ReadByte(); item.val2 = rR.ReadBytes(item.len2); item.loopval = new List<ScriptType>(); for (int p = 0; p < 4; p++) { if (rR.BaseStream.Position <= obj.modbuf.Length) { ScriptType me = new ScriptType(); me.scrID = ScriptType.ScriptID.ENCHANTMENT; me.len = (int)rR.ReadByte(); me.val = new byte[me.len]; if (me.len > 0) { me.val = rR.ReadBytes(me.len); } item.loopval.Add(me); } } if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); // listMod.Items.Add(mod[i + 1] + " : " + mod[i] + " : " + item.len); nodey.Text = mod[i + 1] + " : " + mod[i] + " : " + item.len; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); MISC.Nodes.Add(nodey); } } } break; case "ABILITY": if (rR.BaseStream.Position <= obj.modbuf.Length) { item.len = (int)rR.ReadByte();//rR.ReadInt32(); item.scrID = ScriptType.ScriptID.ABILITY; if (rR.BaseStream.Position <= obj.modbuf.Length - item.len) { item.val = new byte[item.len]; item.val = rR.ReadBytes(item.len); if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(mod[i + 1] + " : " + mod[i] + " : " + item.len); nodey.Text = mod[i + 1] + " : " + mod[i] + " : " + item.len; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); PROPS.Nodes.Add(nodey); } } } break; case "COLOR": if (rR.BaseStream.Position <= obj.modbuf.Length - 3) { byte r = rR.ReadByte(); byte g = rR.ReadByte(); byte b = rR.ReadByte(); Color col = Color.FromArgb(r, g, b); item.col = col; item.scrID = ScriptType.ScriptID.COLOR; if (isLoop) loopItem.loopval.Add(item); else { modlist.Add(item); //listMod.Items.Add(mod[i + 1] + " : " + mod[i]); nodey.Text = mod[i]; nodey.Tag = modlist.Count-1; COLORS.Nodes.Add(nodey); //treeView1.Nodes.Add(nodey); } } break; default: break; } } if (isLoop) { modlist.Add(loopItem); //listMod.Items.Add("LOOP" + " : " + loopName); TreeNode nodey = new TreeNode(); nodey.Text = loopName; nodey.Tag = modlist.Count-1; //treeView1.Nodes.Add(nodey); LOOPS.Nodes.Add(nodey); isLoop = false; loopLen = 0; } else i += 3; } rR.Close(); rS.Close(); } catch { MessageBox.Show("*WARNING* Bad mod editor / corrupt mod box"); loadfailed = true; } }