Exemplo n.º 1
0
        private void revertChange(ChangeListTree.ChangeData change)
        {
            GameData.TripleInt      tripleInt;
            GameData.Item           item   = this.tree.GetItem(change);
            ChangeListTree.TreeNode parent = change.Parent;
            bool flag = false;

            switch (change.Type)
            {
            case ChangeListTree.ChangeType.NAME:
            {
                item.Name = item.OriginalName;
                break;
            }

            case ChangeListTree.ChangeType.VALUE:
            {
                if (change.OldValue != null)
                {
                    item[change.Key] = change.OldValue;
                }
                else
                {
                    item.Remove(change.Key);
                }
                item.refreshState();
                break;
            }

            case ChangeListTree.ChangeType.NEWREF:
            {
                item.removeReference(change.Section, change.Key);
                break;
            }

            case ChangeListTree.ChangeType.MODREF:
            {
                tripleInt = item.OriginalValue(change.Section, change.Key);
                item.setReferenceValue(change.Section, change.Key, tripleInt);
                break;
            }

            case ChangeListTree.ChangeType.DELREF:
            {
                tripleInt = item.OriginalValue(change.Section, change.Key);
                item.addReference(change.Section, change.Key, new int?(tripleInt.v0), new int?(tripleInt.v1), new int?(tripleInt.v2));
                break;
            }

            case ChangeListTree.ChangeType.NEWINST:
            {
                item.removeInstance(change.Key);
                break;
            }

            case ChangeListTree.ChangeType.MODINST:
            {
                item.getInstance(change.Key).revert();
                break;
            }

            case ChangeListTree.ChangeType.INSTVALUE:
            {
                item.getInstance(change.Section)[change.Key] = change.OldValue;
                if (change.Parent.Children.Count != 1)
                {
                    break;
                }
                change = change.Parent as ChangeListTree.ChangeData;
                break;
            }

            case ChangeListTree.ChangeType.INVALIDREF:
            {
                flag = true;
                break;
            }
            }
            if (!flag)
            {
                this.tree.Remove(change);
            }
            if (item.getState() == GameData.State.ORIGINAL)
            {
                this.tree.Remove(change.Parent.Parent ?? change.Parent);
            }
            this.nav.refreshState(item);
            this.nav.HasChanges = true;
        }
Exemplo n.º 2
0
        private void mergeButton_Click(object sender, EventArgs e)
        {
            string str;

            GameData.TripleInt referenceValue;
            int num = 0;

            this.Cursor = Cursors.WaitCursor;
            foreach (ChangeListTree.TreeNode node in this.tree.Nodes)
            {
                if (!node.Checked)
                {
                    continue;
                }
                GameData.Item item     = this.tree.GetItem(node);
                GameData.Item newValue = this.gameData.getItem(item.stringID);
                if (item.getState() == GameData.State.OWNED || newValue == null)
                {
                    this.gameData.items.Add(item.stringID, item);
                    item.resolveReferences(this.gameData);
                    item.changeOwner(this.gameData.activeFileName);
                    num++;
                }
                else if (item.getState() != GameData.State.REMOVED)
                {
                    foreach (ChangeListTree.TreeNode child in node.Children)
                    {
                        if (!child.Checked)
                        {
                            continue;
                        }
                        ChangeListTree.ChangeData changeDatum = child as ChangeListTree.ChangeData;
                        switch (changeDatum.Type)
                        {
                        case ChangeListTree.ChangeType.NAME:
                        {
                            newValue.Name = changeDatum.NewValue.ToString();
                            break;
                        }

                        case ChangeListTree.ChangeType.VALUE:
                        {
                            newValue[changeDatum.Key] = changeDatum.NewValue;
                            break;
                        }

                        case ChangeListTree.ChangeType.NEWREF:
                        case ChangeListTree.ChangeType.INVALIDREF:
                        {
                            referenceValue = item.getReferenceValue(changeDatum.Section, changeDatum.Key);
                            newValue.addReference(changeDatum.Section, changeDatum.Key, new int?(referenceValue.v0), new int?(referenceValue.v1), new int?(referenceValue.v2));
                            break;
                        }

                        case ChangeListTree.ChangeType.MODREF:
                        {
                            referenceValue = item.getReferenceValue(changeDatum.Section, changeDatum.Key);
                            newValue.setReferenceValue(changeDatum.Section, changeDatum.Key, referenceValue);
                            break;
                        }

                        case ChangeListTree.ChangeType.DELREF:
                        {
                            newValue.removeReference(changeDatum.Section, changeDatum.Key);
                            break;
                        }

                        case ChangeListTree.ChangeType.NEWINST:
                        {
                            GameData.Instance instance  = item.getInstance(changeDatum.Key);
                            GameData.Instance instance1 = newValue.addInstance(changeDatum.Key, instance);
                            using (IEnumerator <KeyValuePair <string, GameData.TripleInt> > enumerator = instance.referenceData("states", false).GetEnumerator())
                            {
                                while (enumerator.MoveNext())
                                {
                                    KeyValuePair <string, GameData.TripleInt> current = enumerator.Current;
                                    int?nullable  = null;
                                    int?nullable1 = nullable;
                                    nullable = null;
                                    int?nullable2 = nullable;
                                    nullable = null;
                                    instance1.addReference("states", current.Key, nullable1, nullable2, nullable);
                                }
                                break;
                            }
                            break;
                        }

                        case ChangeListTree.ChangeType.MODINST:
                        {
                            if (item.getInstance(changeDatum.Key).getState() != GameData.State.REMOVED)
                            {
                                foreach (ChangeListTree.TreeNode treeNode in child.Children)
                                {
                                    if (!treeNode.Checked)
                                    {
                                        continue;
                                    }
                                    ChangeListTree.ChangeData changeDatum1 = treeNode as ChangeListTree.ChangeData;
                                    if (changeDatum1.Type != ChangeListTree.ChangeType.INSTVALUE)
                                    {
                                        continue;
                                    }
                                    newValue.getInstance(changeDatum1.Section)[changeDatum1.Key] = changeDatum1.NewValue;
                                    num++;
                                }
                                num--;
                                break;
                            }
                            else
                            {
                                newValue.removeInstance(changeDatum.Key);
                                break;
                            }
                        }

                        case ChangeListTree.ChangeType.INSTVALUE:
                        {
                            newValue.getInstance(changeDatum.Section)[changeDatum.Key] = changeDatum.NewValue;
                            break;
                        }
                        }
                        num++;
                    }
                }
                else
                {
                    if (newValue == null)
                    {
                        continue;
                    }
                    this.gameData.deleteItem(newValue);
                    num++;
                }
            }
            foreach (ChangeListTree.TreeNode node1 in this.tree.Nodes)
            {
                if (!node1.Checked)
                {
                    continue;
                }
                GameData.Item item1 = this.gameData.getItem(this.tree.GetItem(node1).stringID);
                if (item1 == null)
                {
                    continue;
                }
                item1.resolveReferences(this.gameData);
            }
            if (num != 0)
            {
                str = (num != 1 ? string.Concat(num, " changes merged") : "1 change merged");
            }
            else
            {
                str = "No changes detected";
            }
            if (this.leveldata.Checked)
            {
                string str1 = string.Concat(Directory.GetParent(this.currentMod), "/leveldata");
                string str2 = string.Concat(MergeDialog.nav.ModPath, "leveldata");
                if (MergeDialog.nav.ModPath == MergeDialog.nav.BasePath)
                {
                    str2 = string.Concat(MergeDialog.nav.ModPath, "/newland/leveldata/");
                    if (!MergeDialog.nav.ActiveFile.EndsWith("gamedata.base"))
                    {
                        FileInfo fileInfo = new FileInfo(MergeDialog.nav.ActiveFile);
                        str2 = string.Concat(str2, fileInfo.Name.Substring(0, fileInfo.Name.Length - fileInfo.Extension.Length));
                    }
                }
                string str3 = MergeDialog.mergeLevelData(str1, str2);
                if (str3.Length > 0)
                {
                    str = string.Concat(str, "\n\n", str3);
                }
            }
            this.Cursor = Cursors.Default;
            MessageBox.Show(str, "合并", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
        }