コード例 #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;
            }
        }
コード例 #2
0
ファイル: DbIOConstants.cs プロジェクト: zdurexz/RagnarokSDE
        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);
            }
        }
コード例 #3
0
ファイル: ItemParser.cs プロジェクト: secretdataz/RagnarokSDE
 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));
     }
 }
コード例 #4
0
ファイル: ItemParser.cs プロジェクト: secretdataz/RagnarokSDE
 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));
 }
コード例 #5
0
ファイル: QueryMvpDrops.cs プロジェクト: userid0/RagnarokSDE
        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")));
        }
コード例 #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();
            }
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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;
                    }
                }
            }
        }
コード例 #9
0
ファイル: TabGenerator.cs プロジェクト: userid0/RagnarokSDE
        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());
        }
コード例 #10
0
        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);
            }
        }
コード例 #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;
        }
コード例 #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);
            }
        }
コード例 #13
0
        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";
                }
            }
        }
コード例 #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);
            }
        }
コード例 #15
0
            public MobDropView(ReadableTuple <int> tuple, int index)
            {
                _tuple = tuple;
                _index = index;
                _tuple.PropertyChanged += (s, e) => OnPropertyChanged();

                _reload();
            }
コード例 #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("}");
            }
        }
コード例 #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;
        }
コード例 #18
0
ファイル: ItemParser.cs プロジェクト: zdurexz/RagnarokSDE
        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);
        }
コード例 #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();
            }
コード例 #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");
        }
コード例 #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);
            }
        }
コード例 #22
0
        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;
            //}
        }
コード例 #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();
            }
コード例 #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);
            }
        }
コード例 #25
0
        private int _getGender(ReadableTuple <int> tuple)
        {
            var gender = tuple.GetValue <int>(ServerItemAttributes.Gender);

            if (gender < 0)
            {
                return(2);
            }
            return(gender);
        }
コード例 #26
0
        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;
            }
        }
コード例 #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");
        }
コード例 #28
0
        private string _findWeaponType(ReadableTuple <int> tupleSource)
        {
            var viewId = _getInt(ServerItemAttributes.ClassNumber, tupleSource);

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

            return(null);
        }
コード例 #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));
                }
            }
        }
コード例 #30
0
        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));
        }
コード例 #31
0
ファイル: ItemParser.cs プロジェクト: Tokeiburu/RagnarokSDE
		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);
			}
		}
コード例 #32
0
ファイル: ItemParser.cs プロジェクト: Tokeiburu/RagnarokSDE
		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);
			}
		}
コード例 #33
0
ファイル: ItemParser.cs プロジェクト: Tokeiburu/RagnarokSDE
		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());
			}
		}
コード例 #34
0
ファイル: DbMaker.cs プロジェクト: Tokeiburu/RagnarokSDE
		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;
		}
コード例 #35
0
ファイル: ItemParser.cs プロジェクト: Tokeiburu/RagnarokSDE
		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));
			}
		}
コード例 #36
0
ファイル: ItemParser.cs プロジェクト: Tokeiburu/RagnarokSDE
		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);
			}
		}
コード例 #37
0
ファイル: ItemParser.cs プロジェクト: Tokeiburu/RagnarokSDE
		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));
		}
コード例 #38
0
ファイル: ItemParser.cs プロジェクト: Tokeiburu/RagnarokSDE
		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("]");
			}
		}
コード例 #39
0
ファイル: ItemParser.cs プロジェクト: Tokeiburu/RagnarokSDE
		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());
			}
		}
コード例 #40
0
ファイル: ItemParser.cs プロジェクト: Tokeiburu/RagnarokSDE
		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("\">");
			}
		}
コード例 #41
0
ファイル: ItemParser.cs プロジェクト: Tokeiburu/RagnarokSDE
		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();
			}
		}