Пример #1
0
        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;
                }

        }
Пример #2
0
 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++;
     }
     }
Пример #3
0
        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;
            }
        }