Example #1
0
        private void _tbImport_Click(object sender, RoutedEventArgs e)
        {
            Table <int, ReadableTuple <int> > btable = _tab.ProjectDatabase.GetMetaTable <int>(ServerDbs.Mobs);

            SelectFromDialog select = new SelectFromDialog(btable, ServerDbs.Mobs, "");

            select.Owner = WpfUtilities.TopWindow;

            if (select.ShowDialog() == true)
            {
                _eventsDisabled = true;
                ReadableTuple <int> tuple = btable.GetTuple(select.Id.ToInt());
                _level = tuple.GetValue <int>(ServerMobAttributes.Lv);

                for (int i = 0; i < 6; i++)
                {
                    _rates[i] = tuple.GetValue <int>(ServerMobAttributes.Str.Index + i);
                }

                _gpRate.SetPosition(_level / Limit, false);

                _setValues();
                _eventsDisabled = false;
            }
        }
Example #2
0
        public static void WriteEntry <TKey>(StringBuilder builder, ReadableTuple <TKey> tuple)
        {
            string value      = tuple.GetValue <string>(ServerConstantsAttributes.Value);
            int    group      = tuple.GetValue <int>(ServerConstantsAttributes.Type);
            bool   deprecated = tuple.GetValue <bool>(ServerConstantsAttributes.Deprecated);
            bool   writeGroup = group == 1 || deprecated;

            if (writeGroup)
            {
                builder.AppendLine("{");

                builder.Append("\t\tValue: ");
                builder.AppendLine(value);

                if (group == 1)
                {
                    builder.AppendLine("\t\tParameter: true");
                }

                if (deprecated)
                {
                    builder.AppendLine("\t\tDeprecated: true");
                }

                builder.Append("\t}");
            }
            else
            {
                builder.Append(value);
            }
        }
Example #3
0
 private static void _trySetIfDefault(ReadableTuple <int> tuple, StringBuilder builder, DbAttribute attribute, string defaultValue)
 {
     if (tuple.GetValue <string>(attribute) != defaultValue)
     {
         builder.AppendLineUnix("\t" + attribute.AttributeName + ": " + tuple.GetValue <string>(attribute));
     }
 }
Example #4
0
 private static void _trySet(ReadableTuple <int> tuple, StringBuilder builder, DbAttribute attribute)
 {
     builder.Append("\t");
     builder.Append(attribute.AttributeName);
     builder.Append(": ");
     builder.AppendLineUnix(tuple.GetValue <string>(attribute));
 }
Example #5
0
        private void _update(TValue item)
        {
            List <MobDropView> result = new List <MobDropView>();
            Table <int, ReadableTuple <int> > btable = _tab.ProjectDatabase.GetMetaTable <int>(ServerDbs.Items);

            try {
                int startIndex = ServerMobAttributes.Mvp1ID.Index;

                for (int j = 0; j < 6; j += 2)
                {
                    string value = (string)item.GetRawValue(startIndex + j);

                    if (string.IsNullOrEmpty(value) || value == "0")
                    {
                        continue;
                    }

                    ReadableTuple <int> tuple = (ReadableTuple <int>)(object) item;
                    result.Add(new MobDropView(tuple, startIndex + j, btable));
                }
            }
            catch {
            }

            _lv.ItemsSource = new RangeObservableCollection <MobDropView>(result.OrderBy(p => p, Extensions.BindDefaultSearch <MobDropView>(_lv, "ID")));
        }
Example #6
0
        private void _addRange()
        {
            var tab = _tab.To <int>();

            var range = FormatConverters.IntOrHexConverter(_tbRange.Text);
            var from  = FormatConverters.IntOrHexConverter(_tbFrom.Text);
            var table = tab.GetDb <int>((ServerDbs)_destTable.SelectedItem).Table;

            try {
                table.Commands.Begin();

                for (int i = 0; i < range; i++)
                {
                    var tuple = new ReadableTuple <int>(i + from, tab.DbComponent.AttributeList);

                    if (_based != null)
                    {
                        tuple.Copy(_based);
                        tuple.SetRawValue(0, i + from);
                    }

                    tuple.Added = true;
                    table.Commands.AddTuple(i + from, tuple);
                }
            }
            catch (Exception err) {
                table.Commands.CancelEdit();
                ErrorHandler.HandleException(err);
            }
            finally {
                table.Commands.End();
                tab.Filter();
            }
        }
        public override void ButtonClicked()
        {
            ReadableTuple <TKey> tuple = _tab.List.SelectedItem as ReadableTuple <TKey>;

            if (tuple == null)
            {
                return;
            }

            var dbMobs   = _tab.GetMetaTable <int>(ServerDbs.Mobs);
            var dbSkills = _tab.GetTable <int>(ServerDbs.Skills);

            try {
                string mobName   = "";
                string skillName = "";

                var tupleMob   = dbMobs.TryGetTuple(Int32.Parse(tuple.GetRawValue <string>(1)));
                var tupleSkill = dbSkills.TryGetTuple(Int32.Parse(tuple.GetRawValue <string>(4)));

                if (tupleMob != null)
                {
                    mobName = tupleMob.GetValue <string>(ServerMobAttributes.KRoName);
                }

                if (tupleSkill != null)
                {
                    skillName = tupleSkill.GetValue <string>(ServerSkillAttributes.Name);
                }

                _textBox.Text = mobName + "@" + skillName;
            }
            catch (Exception err) {
                ErrorHandler.HandleException(err);
            }
        }
        private void _updateFields(ReadableTuple <int> tuple)
        {
            // We update the fields
            int value = tuple.GetValue <int>(_attribute);

            _boxes.ForEach(p => p.IsChecked = false);

            if (value == 0)
            {
                _boxes[0].IsChecked = true;
            }
            else
            {
                for (int i = 1; i < 4; i++)
                {
                    CheckBox box = _boxes[i];

                    int val = 1 << (i - 1);

                    if ((value & val) == val)
                    {
                        box.IsChecked = true;
                    }
                }
            }
        }
Example #9
0
        public static void CopyTuplesDefault(TabGenerator <TKey> tabGenerator, List <ReadableTuple <TKey> > items, BaseDb gdb)
        {
            int max = tabGenerator.MaxElementsToCopyInCustomMethods < 0 ? gdb.AttributeList.Attributes.Count - tabGenerator.StartIndexInCustomMethods : tabGenerator.MaxElementsToCopyInCustomMethods;

            StringBuilder builder  = new StringBuilder();
            List <int>    toRemove =
                (from attribute in gdb.AttributeList.Attributes.OrderByDescending(p => p.Index)
                 where attribute.IsSkippable && !_isAttributeEnabled(attribute, gdb)
                 select attribute.Index).ToList();

            for (int i = 0; i < items.Count; i++)
            {
                ReadableTuple <TKey> item = items[i];

                List <string> objs = item.GetRawElements().Skip(tabGenerator.StartIndexInCustomMethods).Take(max).Select(p => (p ?? "").ToString()).ToList();

                foreach (var index in toRemove)
                {
                    if (index < objs.Count)
                    {
                        objs.RemoveAt(index);
                    }
                }

                builder.AppendLine(string.Join(",", objs.ToArray()));
            }

            Clipboard.SetDataObject(builder.ToString());
        }
        public override void ButtonClicked()
        {
            ReadableTuple <TKey> tuple = _tab.List.SelectedItem as ReadableTuple <TKey>;

            if (tuple == null)
            {
                return;
            }

            var dbMobs = _tab.GetMetaTable <int>(ServerDbs.Mobs);

            try {
                string name = "";

                var tupleMob = dbMobs.TryGetTuple(tuple.GetKey <int>());

                if (tupleMob != null)
                {
                    name = tupleMob.GetValue <string>(ServerMobAttributes.KRoName);
                }

                _textBox.Text = name;
            }
            catch (Exception err) {
                ErrorHandler.HandleException(err);
            }
        }
Example #11
0
        public NouseEditDialog(ReadableTuple <int> tuple)
            : base("NoUse edit", "cde.ico", SizeToContent.Height, ResizeMode.CanResize)
        {
            InitializeComponent();

            ToolTipsBuilder.Initialize(new string[] {
                "Cannot use the item while sitting."
            }, this);

            _override = tuple.GetIntNoThrow(ServerItemAttributes.NoUseOverride);
            _flag     = tuple.GetIntNoThrow(ServerItemAttributes.NoUseFlag);

            _cbUpper1.Tag = 1 << 0;

            _boxes.Add(_cbUpper1);

            _tbOverride.Text = tuple.GetIntNoThrow(ServerItemAttributes.NoUseOverride).ToString(CultureInfo.InvariantCulture);
            _eventId         = 0;
            _boxes.ForEach(_addEvents);

            _tbOverride.TextChanged += delegate {
                _update();
            };

            WindowStartupLocation = WindowStartupLocation.CenterOwner;
        }
Example #12
0
        public static void SetQuestValue(Table <int, ReadableTuple <int> > table, ReadableTuple <int> tuple, string[] elements, int id)
        {
            string value = tuple.GetValue <string>(ClientQuestsAttributes.AttributeList[id]);

            if (value == "")
            {
                if (elements[id] == "")
                {
                    return;
                }

                table.Commands.Set(tuple, ClientQuestsAttributes.AttributeList[id], elements[id]);
            }
            else if (elements[id] == "")
            {
                //table.Set(tuple.Key, ClientQuestsAttributes.AttributeList[id], value);
            }
            else if (_isKorean(value))
            {
                if (elements[id] == value)
                {
                    return;
                }

                table.Commands.Set(tuple, ClientQuestsAttributes.AttributeList[id], elements[id]);
            }
            else if (_isKorean(elements[id]))
            {
                //table.Set(tuple.Key, ClientQuestsAttributes.AttributeList[id], value);
            }
        }
        private void _autoAddElement(ReadableTuple <int> tupleSource, ParameterHolder holder)
        {
            var          script = tupleSource.GetValue <string>(ServerItemAttributes.Script);
            const string Bonus  = "bonus bAtkEle";

            if (script.Contains(Bonus))
            {
                int start = script.IndexOf(Bonus, StringComparison.Ordinal) + Bonus.Length;
                int end   = script.IndexOf(";", start, StringComparison.Ordinal);

                if (end < 0)
                {
                    end = script.Length;
                }

                var bonus = script.Substring(start, end - start).Trim(',', ' ', ';');

                if (bonus.Length > 4)
                {
                    holder.Values[ParameterHolderKeys.Property] = bonus.Substring(4);
                }
            }
            else
            {
                if (ProjectConfiguration.AutocompleteNeutralProperty)
                {
                    holder.Values[ParameterHolderKeys.Property] = "Neutral";
                }
            }
        }
Example #14
0
        public static void TrySetGender(ReadableTuple <int> tuple, StringBuilder builder, DbAttribute attribute, string defaultValue)
        {
            int    key = tuple.GetKey <int>();
            string val = tuple.GetValue <string>(attribute);

            if (key >= 1950 && key < 2000)
            {
                if (val == "0")
                {
                    return;
                }
            }

            if (key == 2635)
            {
                if (val == "0")
                {
                    return;
                }
            }

            if (val != "" && val != defaultValue && val != "-1")
            {
                builder.Append("\t");
                builder.Append(attribute.AttributeName);
                builder.Append(": ");
                builder.AppendLine(val);
            }
        }
Example #15
0
            public MobDropView(ReadableTuple <int> tuple, int index)
            {
                _tuple = tuple;
                _index = index;
                _tuple.PropertyChanged += (s, e) => OnPropertyChanged();

                _reload();
            }
Example #16
0
        public static void ExpandFlagYaml <T>(StringBuilder builder, ReadableTuple <int> tuple, string name, DbAttribute attribute, string indent1, string indent2, Func <bool> isExtra = null, Action extra = null)
        {
            long value = FormatConverters.LongOrHexConverter(tuple.GetValue <string>(attribute));

            if (value != 0 || (isExtra != null && isExtra()))
            {
                if (name != "")
                {
                    builder.Append(indent1);
                    builder.Append(name);
                    builder.AppendLine(": {");
                }

                var flagsData = FlagsManager.GetFlag <T>();

                if (flagsData != null)
                {
                    foreach (var v in flagsData.Values)
                    {
                        long vF = v.Value;

                        if ((v.DataFlag & FlagDataProperty.Hide) == FlagDataProperty.Hide)
                        {
                            continue;
                        }

                        if ((vF & value) == vF)
                        {
                            builder.Append(indent2);
                            builder.Append(v.Name);
                            builder.AppendLine(": true");
                        }
                    }
                }
                else
                {
                    foreach (var v in Enum.GetValues(typeof(T)).Cast <T>())
                    {
                        int vF = (int)(object)v;

                        if ((vF & value) == vF)
                        {
                            builder.Append(indent2);
                            builder.Append(Constants.ToString(v));
                            builder.AppendLine(": true");
                        }
                    }
                }

                if (extra != null)
                {
                    extra();
                }

                builder.Append(indent1);
                builder.AppendLine("}");
            }
        }
Example #17
0
        public TradeEditDialog(ReadableTuple <int> tuple) : base("Trade edit", "cde.ico", SizeToContent.Height, ResizeMode.CanResize)
        {
            InitializeComponent();

            ToolTipsBuilder.Initialize(new string[] {
                "Item can't be droped",
                "Item can't be traded (nor vended)",
                "Wedded partner can override restriction 2.",
                "Item can't be sold to npcs",
                "Item can't be placed in the cart",
                "Item can't be placed in the storage",
                "Item can't be placed in the guild storage",
                "Item can't be attached to mail",
                "Item can't be auctioned"
            }, this);

            _flag = tuple.GetIntNoThrow(ServerItemAttributes.TradeFlag);

            _cbUpper1.Tag = 1 << 0;
            _cbUpper2.Tag = 1 << 1;
            _cbUpper3.Tag = 1 << 2;
            _cbUpper4.Tag = 1 << 3;
            _cbUpper5.Tag = 1 << 4;
            _cbUpper6.Tag = 1 << 5;
            _cbUpper7.Tag = 1 << 6;
            _cbUpper8.Tag = 1 << 7;
            _cbUpper9.Tag = 1 << 8;

            _rbMet1.Tag = 467;
            _rbMet2.Tag = 475;
            _rbMet3.Tag = 483;
            _rbMet4.Tag = 491;
            _rbMet5.Tag = 507;

            _boxes.Add(_cbUpper1);
            _boxes.Add(_cbUpper2);
            _boxes.Add(_cbUpper3);
            _boxes.Add(_cbUpper4);
            _boxes.Add(_cbUpper5);
            _boxes.Add(_cbUpper6);
            _boxes.Add(_cbUpper7);
            _boxes.Add(_cbUpper8);
            _boxes.Add(_cbUpper9);

            _radios.Add(_rbMet1);
            _radios.Add(_rbMet2);
            _radios.Add(_rbMet3);
            _radios.Add(_rbMet4);
            _radios.Add(_rbMet5);

            _eventId = 0;

            _boxes.ForEach(_addEvents);
            _radios.ForEach(_addEvents);

            _rbEvents             = true;
            WindowStartupLocation = WindowStartupLocation.CenterOwner;
        }
Example #18
0
        public static bool IsArmorType(ReadableTuple <int> tuple)
        {
            if (SdeAppConfiguration.RevertItemTypes)
            {
                return(tuple.GetValue <TypeType>(ServerItemAttributes.Type) == TypeType.Weapon);
            }

            return(tuple.GetValue <TypeType>(ServerItemAttributes.Type) == TypeType.Armor);
        }
Example #19
0
            public PetEvolutionView(ReadableTuple <int> tuple, EvolutionTarget evolutionTarget, Table <int, ReadableTuple <int> > mobsTable)
            {
                _tuple           = tuple;
                _evolutionTarget = evolutionTarget;
                _mobsTable       = mobsTable;
                //_tuple.TupleModified += _tuple_TupleModified;

                _reload();
            }
Example #20
0
        public string GetSpriteFromJob(ReadableTuple <int> tuple, PreviewHelper helper)
        {
            if (helper.PreviewSprite == PreviewHelper.SpriteNone)
            {
                return(helper.PreviewSprite);
            }

            return(LuaHelper.GetSpriteFromJob(helper.Grf, helper.Job, helper, helper.PreviewSprite, LuaHelper.ViewIdTypes.Headgear) + ".act");
        }
Example #21
0
        public static void TrySetIfNotDefault(ReadableTuple <int> tuple, StringBuilder builder, DbAttribute attribute, string defaultValue)
        {
            string val = tuple.GetValue <string>(attribute);

            if (val != defaultValue)
            {
                builder.AppendLine("\t" + attribute.AttributeName + ": " + val);
            }
        }
        private void _autoAddJob(ReadableTuple <int> tupleSource, ParameterHolder holder, int equipLevel)
        {
            var    val            = tupleSource.GetValue <string>(ServerItemAttributes.ApplicableJob);
            string applicationJob = JobList.GetStringJobFromHex(val, _getUpper(tupleSource), _getGender(tupleSource), equipLevel);

            //if (!String.IsNullOrEmpty(applicationJob)) {
            holder.Values[ParameterHolderKeys.ApplicableJob] = applicationJob;
            //}
        }
Example #23
0
            public MobDropView(ReadableTuple <int> tuple, int index, Table <int, ReadableTuple <int> > itemsTable)
            {
                _tuple                = tuple;
                _index                = index;
                _itemsTable           = itemsTable;
                _tuple.TupleModified += _tuple_TupleModified;

                _reload();
            }
Example #24
0
        public void Read(ReadableTuple <int> tuple, GDbTab tab)
        {
            PreviewSprite = null;
            KeepPreviousPreviewPosition = true;
            RemoveJobs();
            RemoveError();
            List <Job> jobs;

            _lastTuple  = tuple;
            _metaGrf    = tab.ProjectDatabase.MetaGrf;
            _currentTab = tab;

            foreach (var preview in _previews)
            {
                if (preview.CanRead(tuple))
                {
                    if (_lastMatch != preview)
                    {
                        KeepPreviousPreviewPosition = false;
                    }

                    _lastMatch = preview;
                    string job = tuple.GetValue <string>(ServerItemAttributes.ApplicableJob);
                    jobs = JobList.GetJobsFromHex("0x" + ((job == "") ? "FFFFFFFF" : job), tuple.GetIntNoThrow(ServerItemAttributes.Upper));
                    preview.Read(tuple, this, jobs);
                    break;
                }
            }

            if (_listView.Items.Count > 0)
            {
                _listView.SelectedItem = PreferredJob;

                if (_listView.SelectedItem == null)
                {
                    if (_oldJob != null)
                    {
                        _listView.SelectedItem = _oldJob;
                    }

                    if (_listView.SelectedItem == null)
                    {
                        _listView.SelectedIndex = 0;
                    }
                }
            }
            else
            {
                _updatePreview(SpriteDefault);
            }

            if (!KeepPreviousPreviewPosition)
            {
                _selector.SetAction(_lastMatch.SuggestedAction);
            }
        }
        private int _getGender(ReadableTuple <int> tuple)
        {
            var gender = tuple.GetValue <int>(ServerItemAttributes.Gender);

            if (gender < 0)
            {
                return(2);
            }
            return(gender);
        }
        private void _autoAddJobIfRestricted(ReadableTuple <int> tupleSource, ParameterHolder holder)
        {
            var    val            = tupleSource.GetValue <string>(ServerItemAttributes.ApplicableJob);
            string applicationJob = JobList.GetStringJobFromHex(val, _getUpper(tupleSource), _getGender(tupleSource));

            if (String.CompareOrdinal(applicationJob, JobList.EveryJob.Name) != 0)
            {
                holder.Values[ParameterHolderKeys.ApplicableJob] = applicationJob;
            }
        }
Example #27
0
        public string GetSpriteFromJob(ReadableTuple <int> tuple, PreviewHelper helper)
        {
            var name = LuaHelper.GetSpriteFromJob(helper.Grf, null, helper, helper.PreviewSprite, LuaHelper.ViewIdTypes.Npc);

            if (name.EndsWith(".gr2"))
            {
                return(name);
            }
            return(name + ".act");
        }
        private string _findWeaponType(ReadableTuple <int> tupleSource)
        {
            var viewId = _getInt(ServerItemAttributes.ClassNumber, tupleSource);

            if (viewId > 0 && viewId < WeaponTypes.Count)
            {
                return(WeaponTypes[viewId]);
            }

            return(null);
        }
Example #29
0
        private void _checkResource(string res, List <ValidationErrorView> errors, ReadableTuple <int> tuple, HashSet <string> processed, ValidationErrors error, string type, ServerDbs serverDb)
        {
            if (processed.Add(res))
            {
                var result = _database.MetaGrf.GetData(res);

                if (result == null)
                {
                    errors.Add(new ResourceError(error, tuple == null ? -1 : tuple.Key, type + ": " + res, serverDb, this, res));
                }
            }
        }
        public int Get(ReadableTuple <int> tuple)
        {
            object val  = tuple.GetValue(_attribute);
            string sval = val as string;

            if (String.IsNullOrEmpty(sval))
            {
                return(-1);
            }

            return(Int32.Parse((string)val));
        }
Example #31
0
		private static void _trySetGender(ReadableTuple<int> tuple, StringBuilder builder, DbAttribute attribute, string defaultValue) {
			int key = tuple.GetKey<int>();
			string val = tuple.GetValue<string>(attribute);

			if (key >= 1950 && key < 2000) {
				if (val == "0")
					return;
			}

			if (key == 2635) {
				if (val == "0")
					return;
			}

			if (val != "" && val != defaultValue && val != "-1") {
				builder.Append("\t");
				builder.Append(attribute.AttributeName);
				builder.Append(": ");
				builder.AppendLineUnix(val);
			}
		}
Example #32
0
		private static void _trySetIfDefaultEmptyAddHex(ReadableTuple<int> tuple, StringBuilder builder, DbAttribute attribute, string defaultValue) {
			string val = "0x" + tuple.GetValue<string>(attribute);

			if (val != "" && val != defaultValue && val.Length > 2 && val.ToLower() != "0xffffffff") {
				builder.Append("\t");
				builder.Append(attribute.AttributeName);
				builder.Append(": ");
				builder.AppendLineUnix(val);
			}
		}
Example #33
0
		private static void _trySetIfRefineable(ReadableTuple<int> tuple, StringBuilder builder, DbAttribute attribute, bool defaultValue) {
			int type = tuple.GetValue<int>(ServerItemAttributes.Type);
			bool val = tuple.GetValue<bool>(attribute);

			if (type != 4 && type != 5) {
				if (val) {
					// This is not supposed to be allowed, but... we'll let it slide
					DbLoaderErrorHandler.Handle("The refineable status on the item ID [" + tuple.GetKey<int>() + "] has been set to true but the item type is not an equipment. This is suspicious.", ErrorLevel.Warning);
					builder.AppendLineUnix("\t" + attribute.AttributeName + ": true");
				}
				return;
			}

			if (val != defaultValue) {
				builder.Append("\t");
				builder.Append(attribute.AttributeName);
				builder.Append(": ");
				builder.AppendLineUnix(val.ToString().ToLower());
			}
		}
Example #34
0
		public bool Init(DbHolder holder) {
			try {
				if (!File.Exists(_file)) return false;

				string dbRawName = Path.GetFileNameWithoutExtension(_file);
				string dbName = _toDbName(dbRawName.Replace("_db", ""));
				string[] lines = File.ReadAllLines(_file);
				string[] itemsRaw = null;
				bool waitOne = false;

				foreach (string line in lines) {
					string t = line;

					string[] raw = t.Replace("[,", ",[").Replace("{,", ",{").Split(',');

					if (waitOne && raw.Length <= 1) break;

					if (waitOne) {
						raw[0] = raw[0].TrimStart('/', ' ', '\t');
						itemsRaw = itemsRaw.Concat(raw).ToArray();
					}
					else {
						itemsRaw = raw;
					}

					if (itemsRaw.Length > 1) {
						int end = itemsRaw.Length - 1;
						itemsRaw[end] = itemsRaw[end].Contains("//") ? itemsRaw[end].Substring(0, itemsRaw[end].IndexOf("//", StringComparison.Ordinal)) : itemsRaw[end];
						waitOne = true;
					}
				}

				if (itemsRaw == null || itemsRaw.Length <= 1) return false;

				Dictionary<int, string> comments = new Dictionary<int, string>();

				foreach (string line in lines) {
					if (!line.StartsWith("//")) break;

					string bufLine = line.Trim('/', ' ');

					if (bufLine.Length > 2 && bufLine[2] == '.') {
						int ival;

						if (Int32.TryParse(bufLine.Substring(0, 2), out ival)) {
							string t = bufLine.Substring(3).Trim(' ', '\t');

							int index = t.LastIndexOf("  ", StringComparison.Ordinal);

							if (index > -1) {
								t = t.Substring(index);
							}
							else {
								index = t.LastIndexOf("\t\t", StringComparison.Ordinal);

								if (index > -1) {
									t = t.Substring(index);
								}
							}

							comments[ival] = t.Trim(' ', '\t');
						}
					}
				}

				List<string> items = itemsRaw.ToList();

				items[0] = items[0].TrimStart('/', ' ');
				items = items.ToList().Select(p => p.Trim(' ')).ToList();
				HashSet<int> variable = new HashSet<int>();

				if (items.Any(p => p == "...")) {
					// Find the longest line

					if (_hasLogic(items, variable)) { }
					else {
						int itemIndex = items.IndexOf("...");
						List<int> count = lines.Select(line => line.Split(',').Length).ToList();

						int missingArguments = count.Max(p => p) - items.Count;

						if (missingArguments == 0) {
							items[itemIndex] = "Unknown";
						}
						else if (missingArguments < 0) {
							items.RemoveAt(itemIndex);
						}
						else {
							items.RemoveAt(itemIndex);

							for (int i = 0; i < missingArguments; i++) {
								items.Insert(itemIndex, "Variable");
								variable.Add(itemIndex + i);
							}
						}
					}
				}

				if (items.Any(p => p.Contains('[')) || items.Any(p => p.Contains('{'))) {
					bool begin = false;

					for (int i = 0; i < items.Count; i++) {
						if (items[i].StartsWith("[") || items[i].StartsWith("{")) {
							if (items[i] != "{}")
								begin = true;
						}

						if (begin) {
							variable.Add(i);
						}

						if (items[i].EndsWith("]") || items[i].EndsWith("}")) {
							begin = false;
						}
					}
				}

				items = items.Select(p => p.Trim('[', ']', '{', '}')).ToList();

				AttributeList list = new AttributeList();

				IntLineStream reader = new IntLineStream(_file);
				Type dbType = typeof (int);

				bool? duplicates = reader.HasDuplicateIds();

				if (duplicates == null || duplicates == true) {
					dbType = typeof (string);
				}

				bool first = true;
				DbAttribute bindingAttribute = null;

				for (int i = 0; i < items.Count; i++) {
					string value = items[i];
					string desc = null;
					string toDisplay = _toDisplay(value);
					DbAttribute att;

					if (comments.ContainsKey(i + 1))
						desc = comments[i + 1];

					if (i == 0 && first) {
						if (duplicates == null) {
							att = new PrimaryAttribute(value, dbType, 0, toDisplay);
						}
						else if (duplicates == true) {
							att = new PrimaryAttribute("RealId", dbType, "");
							first = false;
							i--;
						}
						else {
							att = new PrimaryAttribute(value, dbType, 0, toDisplay);
						}
					}
					else {
						string toLower = value.ToLower();
						CustomAttribute custom = new CustomAttribute(value, typeof(string), "", toDisplay, desc);
						att = custom;

						if (toLower.Contains("skillid")) {
							att.AttachedObject = ServerDbs.Skills;
							custom.SetDataType(dbType == typeof(int) ? typeof(SelectTupleProperty<int>) : typeof(SelectTupleProperty<string>));
							if (i == 1) bindingAttribute = new DbAttribute("Elements", typeof(SkillBinding), duplicates == true ? 2 : 1) { IsDisplayAttribute = true, Visibility = VisibleState.Hidden };
						}

						if (toLower.Contains("mobid")) {
							att.AttachedObject = ServerDbs.Mobs;
							custom.SetDataType(dbType == typeof(int) ? typeof(SelectTupleProperty<int>) : typeof(SelectTupleProperty<string>));
							if (i == 1) bindingAttribute = new DbAttribute("Elements", typeof(MobBinding), duplicates == true ? 2 : 1) { IsDisplayAttribute = true, Visibility = VisibleState.Hidden };
						}

						if (toLower.Contains("itemid")) {
							att.AttachedObject = ServerDbs.Items;
							custom.SetDataType(dbType == typeof(int) ? typeof(SelectTupleProperty<int>) : typeof(SelectTupleProperty<string>));
							if (i == 1) bindingAttribute = new DbAttribute("Elements", typeof(ItemBinding), duplicates == true ? 2 : 1) { IsDisplayAttribute = true, Visibility = VisibleState.Hidden };
						}

						if (variable.Contains(i))
							att.IsSkippable = true;
					}

					list.Add(att);
				}

				if (bindingAttribute != null)
					list.Add(bindingAttribute);
				else {
					string toLower = items[0].ToLower();

					if (toLower.Contains("skillid")) {
						bindingAttribute = new DbAttribute("Elements", typeof(SkillBinding), duplicates == true ? 2 : 1) { IsDisplayAttribute = true, Visibility = VisibleState.Hidden };
					}

					if (toLower.Contains("mobid")) {
						bindingAttribute = new DbAttribute("Elements", typeof(MobBinding), duplicates == true ? 2 : 1) { IsDisplayAttribute = true, Visibility = VisibleState.Hidden };
					}

					if (toLower.Contains("itemid")) {
						bindingAttribute = new DbAttribute("Elements", typeof(ItemBinding), duplicates == true ? 2 : 1) { IsDisplayAttribute = true, Visibility = VisibleState.Hidden };
					}

					if (bindingAttribute != null)
						list.Add(bindingAttribute);
				}


				if (dbType == typeof(int)) {
					_adb = new DummyDb<int>();

					_adb.To<int>().TabGenerator.OnSetCustomCommands += GTabsMaker.SelectFromMobDb;
					_adb.To<int>().TabGenerator.OnSetCustomCommands += GTabsMaker.SelectFromItemDb;
					_adb.To<int>().TabGenerator.OnSetCustomCommands += GTabsMaker.SelectFromSkillDb;
				}
				else {
					_adb = new DummyDb<string>();

					var db = _adb.To<string>();

					if (duplicates == true) {
						db.LayoutIndexes = new int[] {
							1, list.Attributes.Count
						};

						db.DbLoader = DbLoaderMethods.DbUniqueLoader;
						db.DbWriter = DbWriterMethods.DbUniqueWriter;

						db.TabGenerator.OnInitSettings += delegate(GDbTabWrapper<string, ReadableTuple<string>> tab, GTabSettings<string, ReadableTuple<string>> settings, BaseDb gdb) {
							settings.CanChangeId = false;
							settings.CustomAddItemMethod = delegate {
								try {
									string id = Methods.RandomString(32);

									ReadableTuple<string> item = new ReadableTuple<string>(id, settings.AttributeList);
									item.Added = true;

									db.Table.Commands.StoreAndExecute(new AddTuple<string, ReadableTuple<string>>(id, item));
									tab._listView.ScrollToCenterOfView(item);
								}
								catch (KeyInvalidException) {
								}
								catch (Exception err) {
									ErrorHandler.HandleException(err);
								}
							};
						};
						db.TabGenerator.StartIndexInCustomMethods = 1;
						db.TabGenerator.OnInitSettings += delegate(GDbTabWrapper<string, ReadableTuple<string>> tab, GTabSettings<string, ReadableTuple<string>> settings, BaseDb gdb) {
							settings.AttributeList = gdb.AttributeList;
							settings.AttId = gdb.AttributeList.Attributes[1];
							settings.AttDisplay = gdb.AttributeList.Attributes.FirstOrDefault(p => p.IsDisplayAttribute) ?? gdb.AttributeList.Attributes[2];
							settings.AttIdWidth = 60;
						};
						db.TabGenerator.OnSetCustomCommands += GTabsMaker.SelectFromMobDbString;
						db.TabGenerator.OnSetCustomCommands += GTabsMaker.SelectFromSkillDbString;
					}
					else if (duplicates == null) {
						db.UnsafeContext = true;
						db.DbWriter = DbWriterMethods.DbStringCommaWriter;
					}
				}

				ServerDbs sdb = ServerDbs.Instantiate(dbRawName, dbName, FileType.Txt);

				if (bindingAttribute != null)
					bindingAttribute.AttachedObject = _adb;

				_adb.IsCustom = true;
				_adb.DbSource = sdb;
				_adb.AttributeList = list;

				return true;
			}
			catch { }
			return false;
		}
Example #35
0
		private static void _trySetIfDefault(ReadableTuple<int> tuple, StringBuilder builder, DbAttribute attribute, string defaultValue) {
			if (tuple.GetValue<string>(attribute) != defaultValue) {
				builder.AppendLineUnix("\t" + attribute.AttributeName + ": " + tuple.GetValue<string>(attribute));
			}
		}
Example #36
0
		private static void _trySetIfDefaultLocation(ReadableTuple<int> tuple, StringBuilder builder, DbAttribute attribute) {
			string val = tuple.GetValue<string>(attribute);

			if (val != "" && val != "0") {
				builder.Append("\t");
				builder.Append(attribute.AttributeName);
				builder.Append(": ");
				builder.AppendLineUnix(val);
			}
		}
Example #37
0
		private static void _trySet(ReadableTuple<int> tuple, StringBuilder builder, DbAttribute attribute) {
			builder.Append("\t");
			builder.Append(attribute.AttributeName);
			builder.Append(": ");
			builder.AppendLineUnix(tuple.GetValue<string>(attribute));
		}
Example #38
0
		private static void _trySetIfDefaultEmptyBracket(ReadableTuple<int> tuple, StringBuilder builder, DbAttribute attribute, string defaultValue) {
			string val = tuple.GetValue<string>(attribute);

			if (val != "" && val != defaultValue) {
				builder.Append("\t");
				builder.Append(attribute.AttributeName);
				builder.Append(": [");
				builder.Append(val);
				builder.AppendLineUnix("]");
			}
		}
Example #39
0
		private static void _trySetIfDefaultBoolean(ReadableTuple<int> tuple, StringBuilder builder, DbAttribute attribute, bool defaultValue) {
			if (tuple.GetRawValue(attribute.Index) as string == "")
				return;

			bool val = tuple.GetValue<bool>(attribute);

			if (val != defaultValue) {
				builder.Append("\t");
				builder.Append(attribute.AttributeName);
				builder.Append(": ");
				builder.AppendLineUnix(val.ToString().ToLower());
			}
		}
Example #40
0
		private static void _trySetIfDefaultEmptyScript(ReadableTuple<int> tuple, StringBuilder builder, DbAttribute attribute, string defaultValue) {
			string val = tuple.GetValue<string>(attribute);

			if (val != "" && val != defaultValue) {
				builder.Append("\t");
				builder.Append(attribute.AttributeName);
				builder.Append(": <\"");
				builder.Append(Format(val, 2, true));
				builder.AppendLineUnix("\">");
			}
		}
Example #41
0
		private static void _trySetIfDefaultEmptyToHex(ReadableTuple<int> tuple, StringBuilder builder, DbAttribute attribute, string defaultValue) {
			string val = tuple.GetValue<string>(attribute);

			int ival;

			if (Int32.TryParse(val, out ival)) {
				string sval = "0x" + ival.ToString("X").ToLower();

				if (val != defaultValue) {
					builder.Append("\t");
					builder.Append(attribute.AttributeName);
					builder.Append(": ");
					builder.AppendLineUnix(sval);
				}
			}
			else {
				Z.F();
			}
		}