public static string GetPouchBuffCaption(BdatStringValue value) { if (value == null) { return(null); } BdatStringItem item = value.Parent; BdatFieldInfo field = value.Member.Metadata; BdatStringCollection tables = item.Table.Collection; int captionId = int.Parse(value.ValueString); BdatStringValue captionValue = tables["BTL_PouchBuff"][captionId]?["Name"]; if (captionValue == null) { return(null); } if (!captionValue.Resolved) { ResolveItemRef(captionValue); } string caption = captionValue.DisplayString; if (caption == null) { return(null); } var sb = new StringBuilder(caption); List <BdatTag> tags = BdatStringTools.ParseTags(caption); foreach (BdatTag tag in tags.OrderByDescending(x => x.Start)) { if (tag.SubType != "PouchParam") { continue; } float buffValue = float.Parse(item[field.RefField].ValueString); sb.Remove(tag.Start, tag.Length); sb.Insert(tag.Start, buffValue); } return(sb.ToString()); }