public string GetIndexDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, TO8CHLI skits, Dictionary <uint, TSS.TSSEntry> inGameIdDict, bool phpLinks = false) { StringBuilder sb = new StringBuilder(); string url = HyoutaTools.Tales.Vesperia.Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Skit, version, versionPostfix, locale, websiteLanguage, phpLinks, extra: RefString); sb.Append("<tr>"); sb.Append("<td>"); sb.Append(CategoryString); sb.Append("</td>"); if (websiteLanguage.WantsJp()) { sb.Append("<td>"); sb.Append("<a href=\"" + url + "\">"); sb.Append(inGameIdDict[StringDicIdName].StringJpnHtml(version, inGameIdDict)); sb.Append("</a>"); sb.Append("</td>"); } if (websiteLanguage.WantsEn()) { sb.Append("<td>"); sb.Append("<a href=\"" + url + "\">"); sb.Append(inGameIdDict[StringDicIdName].StringEngHtml(version, inGameIdDict)); sb.Append("</a>"); sb.Append("</td>"); } sb.Append("<td>"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, CharacterBitmask, websiteLanguage.MainJp()); sb.Append("</td>"); sb.Append("</tr>"); return(sb.ToString()); }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict) { StringBuilder sb = new StringBuilder(); int colspan = websiteLanguage.WantsBoth() ? 1 : 2; if (websiteLanguage.WantsJp()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicId].StringJpnHtml(version, inGameIdDict)); sb.Append("</span><br>"); sb.Append(inGameIdDict[TextStringDicId].StringJpnHtml(version, inGameIdDict)); sb.Append("</td>"); } if (websiteLanguage.WantsEn()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicId].StringEngHtml(version, inGameIdDict)); sb.Append("</span><br>"); sb.Append(inGameIdDict[TextStringDicId].StringEngHtml(version, inGameIdDict)); sb.Append("</td>"); } return(sb.ToString()); }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict) { StringBuilder sb = new StringBuilder(); sb.Append("<tr id=\"skill" + InGameID + "\">"); //sb.Append( RefString + "<br>" ); sb.Append("<td>"); sb.Append("<img src=\"skill-icons/category-" + Category + ".png\" width=\"32\" height=\"32\">"); sb.Append("</td>"); int colspan = websiteLanguage.WantsBoth() ? 1 : 2; if (websiteLanguage.WantsJp()) { sb.Append("<td colspan=\"" + colspan + "\" class=\"skilljpn\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicID].StringJpnHtml(version, inGameIdDict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append(inGameIdDict[DescStringDicID].StringJpnHtml(version, inGameIdDict)); sb.Append("</td>"); } if (websiteLanguage.WantsEn()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicID].StringEngHtml(version, inGameIdDict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append(inGameIdDict[DescStringDicID].StringEngHtml(version, inGameIdDict)); sb.Append("</td>"); } sb.Append("<td class=\"skilldata\">"); if (LearnableByBitmask > 0) { sb.Append("<span class=\"equip\">"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, LearnableByBitmask, websiteLanguage.MainJp()); sb.Append("</span>"); } sb.Append(EquipCost + " SP<br>"); sb.Append(LearnCost + " LP<br>"); sb.Append("Symbol Weight: " + SymbolValue + "<br>"); //sb.Append( "~7: " + Unknown7 + "<br>" ); //sb.Append( "~13: " + Unknown13 + "<br>" ); //sb.Append( "~14: " + Unknown14 + "<br>" ); //sb.Append( "~15: " + Unknown15 + "<br>" ); if (Inactive == 0) { sb.Append("Unusable<br>"); } sb.Append("</td>"); sb.Append("</tr>"); return(sb.ToString()); }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, ItemDat.ItemDat items, ShopData shops, Dictionary <uint, TSS.TSSEntry> inGameIdDict, bool phpLinks = false) { StringBuilder sb = new StringBuilder(); int colspan = websiteLanguage.WantsBoth() ? 3 : 6; sb.Append("<tr id=\"shop" + InGameID + "\">"); if (websiteLanguage.WantsJp()) { sb.Append("<td class=\"synopsistitle\" colspan=\"" + colspan + "\">"); sb.Append(inGameIdDict[StringDicID].StringJpnHtml(version, inGameIdDict)); sb.Append("</td>"); } if (websiteLanguage.WantsEn()) { sb.Append("<td class=\"synopsistitle\" colspan=\"" + colspan + "\">"); sb.Append(inGameIdDict[StringDicID].StringEngHtml(version, inGameIdDict)); sb.Append("</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); for (int i = 2; i < 9; ++i) { if (i == 4) { continue; } sb.Append("<td>"); foreach (var item in ShopItems) { if (items.itemIdDict[item.ItemID].Data[(int)ItemDat.ItemData.Category] == i) { sb.Append(item.GetDataAsHtml(version, versionPostfix, locale, websiteLanguage, items, inGameIdDict, phpLinks: phpLinks)); sb.Append("<br>"); } } sb.Append("</td>"); } sb.Append("</tr>"); if (OnTrigger > 0) { sb.Append("<tr>"); sb.Append("<td class=\"strategychar\" colspan=\"6\">"); sb.Append("Changes to <a href=\"" + Vesperia.Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Shop, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)ChangeToShop) + "\">"); sb.Append(inGameIdDict[shops.ShopDictionary[ChangeToShop].StringDicID].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage)); sb.Append("</a>"); sb.Append("</td>"); sb.Append("</tr>"); } return(sb.ToString()); }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict) { var nameEn = inGameIdDict[NameStringDicID].StringEng; var nameJp = inGameIdDict[NameStringDicID].StringJpn; StringBuilder sb = new StringBuilder(); sb.Append("<tr>"); sb.Append("<td>"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, 1u << (int)(Character - 1), websiteLanguage.MainJp()); sb.Append("</td>"); int colspan = websiteLanguage.WantsBoth() ? 1 : 2; if (websiteLanguage.WantsJp()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicID].StringJpnHtml(version, inGameIdDict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append(inGameIdDict[DescStringDicID].StringJpnHtml(version, inGameIdDict)); sb.Append("</td>"); } if (websiteLanguage.WantsEn()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); if (nameEn.Contains("\x06(COS)") && !nameJp.Contains("\x06(COS)")) { sb.Append(nameEn.Replace("\x06(COS)", "").ToHtmlEng(inGameIdDict, version)); Console.WriteLine("Removed EN costume icon for " + nameEn); } else { sb.Append(inGameIdDict[NameStringDicID].StringEngHtml(version, inGameIdDict)); } sb.Append("</span>"); sb.Append("<br>"); sb.Append(inGameIdDict[DescStringDicID].StringEngHtml(version, inGameIdDict)); sb.Append("</td>"); } sb.Append("<td>"); sb.Append(BunnyGuildPointsMaybe + " Fame point" + (BunnyGuildPointsMaybe != 1 ? "s" : "")); sb.Append("</td>"); return(sb.ToString()); }
public static void AppendRecord(StringBuilder sb, GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, Dictionary <uint, TSS.TSSEntry> InGameIdDict, uint id) { sb.Append("<tr>"); if (websiteLanguage.WantsJp()) { sb.Append("<td>"); sb.Append(InGameIdDict[id].StringJpnHtml(version, InGameIdDict)); sb.Append("</td>"); } if (websiteLanguage.WantsEn()) { sb.Append("<td>"); sb.Append(InGameIdDict[id].StringEngHtml(version, InGameIdDict)); sb.Append("</td>"); } sb.Append("</tr>"); //sb.Append( "<tr><td colspan=\"2\"><hr></td></tr>" ); }
public static string TrophyNodeToHtml(GameVersion version, Dictionary <uint, TSS.TSSEntry> inGameIdDict, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, HyoutaTools.Trophy.TrophyNode jp, HyoutaTools.Trophy.TrophyNode en) { var sb = new StringBuilder(); bool wantJp = websiteLanguage.WantsJp() && jp != null; bool wantEn = websiteLanguage.WantsEn() && en != null; bool wantBoth = wantJp && wantEn; sb.Append("<tr>"); sb.Append("<td>"); sb.Append("<img width=\"60\" height=\"60\" src=\"trophies/TROP" + jp.ID + ".PNG\"/>"); sb.Append("</td>"); int colspan = wantBoth ? 1 : 2; if (wantJp) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(jp.Name); sb.Append("</span>"); sb.Append("<br/>"); sb.Append(jp.Detail.ToHtmlJpn(inGameIdDict, version)); sb.Append("</td>"); } if (wantEn) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(en.Name); sb.Append("</span>"); sb.Append("<br/>"); sb.Append(en.Detail.ToHtmlEng(inGameIdDict, version)); sb.Append("</td>"); } sb.Append("</tr>"); return(sb.ToString()); }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict) { StringBuilder sb = new StringBuilder(); //sb.Append( RefString ); sb.Append("<tr id=\"strategyoption" + InGameID + "\">"); sb.Append("<td>"); sb.Append(StrategySet.GetCategoryName(Category, version, websiteLanguage, inGameIdDict)); sb.Append("</td>"); int colspan = websiteLanguage.WantsBoth() ? 1 : 2; if (websiteLanguage.WantsJp()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicID].StringJpnHtml(version, inGameIdDict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append(inGameIdDict[DescStringDicID].StringJpnHtml(version, inGameIdDict)); sb.Append("</td>"); } if (websiteLanguage.WantsEn()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicID].StringEngHtml(version, inGameIdDict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append(inGameIdDict[DescStringDicID].StringEngHtml(version, inGameIdDict)); sb.Append("</td>"); } sb.Append("<td>"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, Characters, websiteLanguage.MainJp()); sb.Append("</td>"); sb.Append("</tr>"); return(sb.ToString()); }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, T8BTTA strategy, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict) { StringBuilder sb = new StringBuilder(); //sb.Append( RefString ); sb.Append("<tr>"); int colspan = websiteLanguage.WantsBoth() ? 5 : 10; if (websiteLanguage.WantsJp()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicID].StringJpnHtml(version, inGameIdDict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append(inGameIdDict[DescStringDicID].StringJpnHtml(version, inGameIdDict)); sb.Append("</td>"); } if (websiteLanguage.WantsEn()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicID].StringEngHtml(version, inGameIdDict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append(inGameIdDict[DescStringDicID].StringEngHtml(version, inGameIdDict)); sb.Append("</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td>"); sb.Append("</td>"); for (int i = 0; i < StrategyDefaults.GetLength(1); ++i) { sb.Append("<td class=\"strategychar\">"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, 1u << i, websiteLanguage.MainJp()); sb.Append("</td>"); } sb.Append("</tr>"); for (uint xRaw = 0; xRaw < StrategyDefaults.GetLength(0); ++xRaw) { uint x = xRaw; // swap around OVL and FS because they're stored the wrong way around compared to how they show up ingame if (x == 6) { x = 7; } else if (x == 7) { x = 6; } sb.Append("<tr>"); sb.Append("<td>"); sb.Append("<span class=\"strategycat\">"); sb.Append(GetCategoryName(x, version, websiteLanguage, inGameIdDict)); sb.Append("</span>"); sb.Append("</td>"); for (uint y = 0; y < StrategyDefaults.GetLength(1); ++y) { if (y == 8 && !version.HasPS3Content()) { continue; } // skip patty strategy if we don't have her sb.Append("<td>"); var option = strategy.StrategyOptionDict[StrategyDefaults[x, y]]; sb.Append(inGameIdDict[option.NameStringDicID].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage)); sb.Append("</td>"); } sb.Append("</tr>"); } //sb.Append( "<td>" ); //for ( int i = 0; i < UnknownFloats1.Length; ++i ) { // sb.Append( UnknownFloats1[i] + " / " ); //} //sb.Append( "<br>" ); //for ( int i = 0; i < UnknownFloats2.Length; ++i ) { // sb.Append( UnknownFloats2[i] + " / " ); //} //sb.Append( "</td>" ); return(sb.ToString()); }
public static bool WantsBoth(this WebsiteLanguage lang) { return(lang.WantsJp() && lang.WantsEn()); }
public static void AppendSetting(StringBuilder sb, GameVersion Version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, Dictionary <uint, TSS.TSSEntry> InGameIdDict, uint idName, uint idDesc, uint option1 = 0, uint option2 = 0, uint option3 = 0, uint option4 = 0) { for (int i = 0; i < 2; ++i) { if (!websiteLanguage.WantsJp() && i == 0) { continue; } if (!websiteLanguage.WantsEn() && i == 1) { continue; } sb.Append("<tr>"); sb.Append("<td>"); sb.Append("<span class=\"itemname\">"); sb.Append(InGameIdDict[idName].GetStringHtml(i, Version, InGameIdDict)); sb.Append("</span>"); sb.Append("</td>"); int optionCount = 0; if (option1 > 0) { ++optionCount; } if (option2 > 0) { ++optionCount; } if (option3 > 0) { ++optionCount; } if (option4 > 0) { ++optionCount; } if (optionCount == 0) { sb.Append("<td colspan=\"4\">"); sb.Append("</td>"); } else { if (option1 > 0) { if (optionCount == 1) { sb.Append("<td colspan=\"4\">"); } else { sb.Append("<td>"); } sb.Append(InGameIdDict[option1].GetStringHtml(i, Version, InGameIdDict)); sb.Append("</td>"); } if (option2 > 0) { if (optionCount == 2) { sb.Append("<td colspan=\"3\">"); } else { sb.Append("<td>"); } sb.Append(InGameIdDict[option2].GetStringHtml(i, Version, InGameIdDict)); sb.Append("</td>"); } if (option3 > 0) { if (optionCount == 3) { sb.Append("<td colspan=\"2\">"); } else { sb.Append("<td>"); } sb.Append(InGameIdDict[option3].GetStringHtml(i, Version, InGameIdDict)); sb.Append("</td>"); } if (option4 > 0) { sb.Append("<td>"); sb.Append(InGameIdDict[option4].GetStringHtml(i, Version, InGameIdDict)); sb.Append("</td>"); } } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td colspan=\"5\">"); sb.Append(InGameIdDict[idDesc].GetStringHtml(i, Version, InGameIdDict)); sb.Append("</td>"); sb.Append("</tr>"); } }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict, T8BTEMEG.T8BTEMEG encounterGroups, T8BTEMGP.T8BTEMGP enemyGroups, T8BTEMST.T8BTEMST enemies, ShopData.ShopData shops, bool phpLinks = false) { StringBuilder sb = new StringBuilder(); StringBuilder shopEnemySb = new StringBuilder(); List <uint> alreadyPrinted = new List <uint>(); for (int i = 0; i < ShopsOrEnemyGroups.Length; ++i) { if (ShopsOrEnemyGroups[i] == 0) { continue; } if (Category == 1) { // references to shops var shop = shops.ShopDictionary[ShopsOrEnemyGroups[i]]; shopEnemySb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Shop, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)shop.InGameID) + "\">"); shopEnemySb.Append(inGameIdDict[shop.StringDicID].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage)); shopEnemySb.Append("</a>"); } else { // references to encounter groups foreach (uint groupId in encounterGroups.EncounterGroupIdDict[ShopsOrEnemyGroups[i]].EnemyGroupIDs) { if (groupId == 0xFFFFFFFFu) { continue; } foreach (uint id in enemyGroups.EnemyGroupIdDict[groupId].EnemyIDs) { if (id == 0xFFFFFFFFu) { continue; } if (alreadyPrinted.Contains(id)) { continue; } var enemy = enemies.EnemyIdDict[id]; shopEnemySb.Append("<img src=\"monster-icons/44px/monster-" + enemy.IconID.ToString("D3") + ".png\" height=\"22\" width=\"22\"> "); shopEnemySb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Enemy, version, versionPostfix, locale, websiteLanguage, phpLinks, category: (int)enemy.Category, id: (int)enemy.InGameID) + "\">"); shopEnemySb.Append(inGameIdDict[enemy.NameStringDicID].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage) + "</a>"); shopEnemySb.Append("<br>"); alreadyPrinted.Add(id); } } } } int variantCount = 0; for (int i = 0; i < 4; ++i) { if (i >= 1 && ChangeEventTriggers[i] == 0) { continue; } var name = inGameIdDict[NameStringDicIDs[i]]; var desc = inGameIdDict[DescStringDicIDs[i]]; if (i >= 1 && name.StringJpn == inGameIdDict[NameStringDicIDs[i - 1]].StringJpn && name.StringEng == inGameIdDict[NameStringDicIDs[i - 1]].StringEng && desc.StringJpn == inGameIdDict[DescStringDicIDs[i - 1]].StringJpn && desc.StringEng == inGameIdDict[DescStringDicIDs[i - 1]].StringEng && RefStrings[i] == RefStrings[i - 1] ) { continue; } variantCount++; } for (int i = 0; i < 4; ++i) { if (i >= 1 && ChangeEventTriggers[i] == 0) { continue; } var name = inGameIdDict[NameStringDicIDs[i]]; var desc = inGameIdDict[DescStringDicIDs[i]]; if (i >= 1 && name.StringJpn == inGameIdDict[NameStringDicIDs[i - 1]].StringJpn && name.StringEng == inGameIdDict[NameStringDicIDs[i - 1]].StringEng && desc.StringJpn == inGameIdDict[DescStringDicIDs[i - 1]].StringJpn && desc.StringEng == inGameIdDict[DescStringDicIDs[i - 1]].StringEng && RefStrings[i] == RefStrings[i - 1] ) { continue; } if (i == 0) { sb.Append("<tr id=\"location" + LocationID + "\">"); } else { sb.Append("<tr>"); } sb.Append("<td>"); if (RefStrings[i] != "") { sb.Append("<img src=\"worldmap/U_" + RefStrings[i] + ".png\">"); } sb.Append("</td>"); sb.Append("<td>"); if (websiteLanguage.WantsJp()) { sb.Append("<span class=\"itemname\">"); sb.Append(name.StringJpnHtml(version, inGameIdDict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append(desc.StringJpnHtml(version, inGameIdDict)); } if (websiteLanguage.WantsBoth()) { sb.Append("<br>"); sb.Append("<br>"); } if (websiteLanguage.WantsEn()) { sb.Append("<span class=\"itemname\">"); sb.Append(name.StringEngHtml(version, inGameIdDict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append(desc.StringEngHtml(version, inGameIdDict)); } if (RefStrings[i] == "") { sb.Append("<br>"); } sb.Append("</td>"); if (i == 0) { sb.Append("<td rowspan=\"" + variantCount + "\">"); sb.Append(shopEnemySb); sb.Append("</td>"); } sb.Append("</tr>"); } return(sb.ToString()); }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict) { StringBuilder sb = new StringBuilder(); var synopsisEntry = inGameIdDict[TextStringDicId]; string jp = synopsisEntry.StringJpn != null ? synopsisEntry.StringJpn : ""; jp = Website.WebsiteGenerator.ReplaceIconsWithHtml(new StringBuilder(jp), inGameIdDict, version, true).ToString(); string en = synopsisEntry.StringEng != null ? synopsisEntry.StringEng : ""; en = Website.WebsiteGenerator.ReplaceIconsWithHtml(new StringBuilder(en), inGameIdDict, version, false).ToString(); string[] textJpn = jp.Split('\f'); string[] textEng = en.Split('\f'); for (int i = 0; i < textJpn.Length; ++i) { textJpn[i] = VesperiaUtil.RemoveTags(textJpn[i], inGameIdDict, true, true).Replace("\n", "<br />"); } for (int i = 0; i < textEng.Length; ++i) { textEng[i] = VesperiaUtil.RemoveTags(textEng[i], inGameIdDict, false, true).Replace("\n", "<br />"); } //sb.Append( "Unlocks between " + StoryIdMin + " and " + StoryIdMax + "<br>" ); sb.Append("<table class=\"synopsis\">"); sb.Append("<tr id=\"synopsis" + ID + "\"><td class=\"synopsistitle\" colspan=\"" + textJpn.Length + "\">"); if (version.HasPS3Content()) { sb.Append("<img src=\"synopsis/U_" + RefString1 + ".png\"><br><br>"); } if (websiteLanguage.WantsJp()) { sb.Append(inGameIdDict[NameStringDicId].StringJpnHtml(version, inGameIdDict) + "</td></tr><tr>"); foreach (string s in textJpn) { sb.Append("<td>" + s + "</td>"); } } sb.Append("</tr>"); sb.Append("</table>"); if (websiteLanguage.WantsBoth()) { sb.Append("<br>"); } if (websiteLanguage.WantsEn()) { sb.Append("<table class=\"synopsis\">"); sb.Append("<tr id=\"synopsis" + ID + "\"><td class=\"synopsistitle\" colspan=\"" + textEng.Length + "\">"); sb.Append(inGameIdDict[NameStringDicId].StringEngHtml(version, inGameIdDict) + "</td></tr><tr>"); foreach (string s in textEng) { sb.Append("<td>" + s + "</td>"); } sb.Append("</tr>"); sb.Append("</table>"); } return(sb.ToString()); }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, Dictionary <uint, Arte> arteIdDict, T8BTEMST.T8BTEMST enemies, T8BTSK.T8BTSK skills, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict, bool phpLinks = false) { StringBuilder sb = new StringBuilder(); sb.Append("<tr id=\"arte" + InGameID + "\">"); sb.Append("<td style=\"text-align: right;\">"); //sb.Append( RefString + "<br>" ); if (Character > 0 && Character <= 9) { Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, 1u << (int)(Character - 1), websiteLanguage.MainJp()); } if (Character > 9) { var enemy = enemies.EnemyIdDict[Character]; sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Enemy, version, versionPostfix, locale, websiteLanguage, phpLinks, category: (int)enemy.Category, id: (int)enemy.InGameID) + "\">"); sb.Append("<img src=\"monster-icons/48px/monster-" + enemy.IconID.ToString("D3") + ".png\" width=\"32\" height=\"32\" title=\"" + inGameIdDict[enemy.NameStringDicID].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage) + "\">"); sb.Append("</a>"); } sb.Append("<img src=\"menu-icons/artes-"); switch (Type) { case ArteType.Base: sb.Append("00"); break; case ArteType.Arcane: sb.Append("01"); break; case ArteType.Altered: sb.Append("12"); break; case ArteType.AlteredSpell: sb.Append("12"); break; case ArteType.NoviceSpell: sb.Append("04"); break; case ArteType.IntermediateSpell: sb.Append("05"); break; case ArteType.AdvancedSpell: sb.Append("06"); break; case ArteType.Burst: sb.Append("02"); break; case ArteType.BurstSpell: sb.Append("02"); break; case ArteType.AlteredBurst: sb.Append("02"); break; case ArteType.AlteredBurstSpell: sb.Append("02"); break; case ArteType.Mystic: sb.Append("02"); break; } sb.Append(".png\" width=\"32\" height=\"32\">"); sb.Append("</td>"); int colspan = websiteLanguage.WantsBoth() ? 1 : 2; if (websiteLanguage.WantsJp()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicId].StringJpnHtml(version, inGameIdDict) + "</span><br>"); sb.Append(inGameIdDict[DescStringDicId].StringJpnHtml(version, inGameIdDict)); sb.Append("</td>"); } if (websiteLanguage.WantsEn()) { sb.Append("<td colspan=\"" + colspan + "\">"); sb.Append("<span class=\"itemname\">"); sb.Append(inGameIdDict[NameStringDicId].StringEngHtml(version, inGameIdDict) + "</span><br>"); sb.Append(inGameIdDict[DescStringDicId].StringEngHtml(version, inGameIdDict)); sb.Append("</td>"); } sb.Append("<td>"); //sb.Append( Type + "<br>" ); bool iconsInserted = false; if (Character <= 9) { switch (FatalStrikeType) { case 0: sb.Append("<img src=\"menu-icons/artes-13.png\" width=\"16\" height=\"16\">"); iconsInserted = true; break; case 1: sb.Append("<img src=\"menu-icons/artes-15.png\" width=\"16\" height=\"16\">"); iconsInserted = true; break; case 2: sb.Append("<img src=\"menu-icons/artes-14.png\" width=\"16\" height=\"16\">"); iconsInserted = true; break; } } if (ElementFire > 0) { sb.Append("<img src=\"text-icons/icon-element-02.png\" width=\"16\" height=\"16\">"); iconsInserted = true; } if (ElementEarth > 0) { sb.Append("<img src=\"text-icons/icon-element-04.png\" width=\"16\" height=\"16\">"); iconsInserted = true; } if (ElementWind > 0) { sb.Append("<img src=\"text-icons/icon-element-01.png\" width=\"16\" height=\"16\">"); iconsInserted = true; } if (ElementWater > 0) { sb.Append("<img src=\"text-icons/icon-element-05.png\" width=\"16\" height=\"16\">"); iconsInserted = true; } if (ElementLight > 0) { sb.Append("<img src=\"text-icons/icon-element-03.png\" width=\"16\" height=\"16\">"); iconsInserted = true; } if (ElementDarkness > 0) { sb.Append("<img src=\"text-icons/icon-element-06.png\" width=\"16\" height=\"16\">"); iconsInserted = true; } if (iconsInserted) { sb.Append("<br>"); } if (TPUsage > 0) { sb.Append("TP usage: " + TPUsage + "<br>"); } for (int i = 0; i < LearnRequirementsOtherArtesType.Length; ++i) { if (LearnRequirementsOtherArtesType[i] > 0) { switch (LearnRequirementsOtherArtesType[i]) { case 1: // Level if (LearnRequirementsOtherArtesId[i] == 300) { sb.Append("Learn via Event"); } else { sb.Append("Level " + LearnRequirementsOtherArtesId[i]); } break; case 2: // Other Arte var otherArte = arteIdDict[LearnRequirementsOtherArtesId[i]]; if (otherArte.ID != this.ID) { sb.Append("<img src=\"menu-icons/artes-" + otherArte.GetIconNumber() + ".png\" width=\"16\" height=\"16\">"); sb.Append("<a href=\"" + Vesperia.Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Arte, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)otherArte.InGameID) + "\">" + inGameIdDict[otherArte.NameStringDicId].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage)); sb.Append("</a>, "); } else { sb.Append("Learn with "); } sb.Append(LearnRequirementsOtherArtesUsageCount[i] + " uses"); break; case 3: // appears on Rita and Repede's Burst Artes in 360 only, appears to be unused break; default: sb.Append("##Unknown Learn Type: " + LearnRequirementsOtherArtesType[i] + "<br>"); sb.Append("##Value 1: " + LearnRequirementsOtherArtesId[i] + "<br>"); sb.Append("##Value 2: " + LearnRequirementsOtherArtesUsageCount[i] + "<br>"); break; } sb.Append("<br>"); } } for (int i = 0; i < AlteredArteRequirementType.Length; ++i) { if (AlteredArteRequirementType[i] > 0) { switch (AlteredArteRequirementType[i]) { case 1: // original arte var otherArte = arteIdDict[AlteredArteRequirementId[i]]; sb.Append("Alters from "); sb.Append("<img src=\"menu-icons/artes-" + otherArte.GetIconNumber() + ".png\" width=\"16\" height=\"16\">"); sb.Append("<a href=\"" + Vesperia.Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Arte, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)otherArte.InGameID) + "\">" + inGameIdDict[otherArte.NameStringDicId].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage) + "</a>"); break; case 3: // skill var skill = skills.SkillIdDict[AlteredArteRequirementId[i]]; sb.Append("<img src=\"skill-icons/category-" + skill.Category + ".png\" width=\"16\" height=\"16\">"); sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Skill, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)skill.InGameID) + "\">" + inGameIdDict[skill.NameStringDicID].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage) + "</a>"); break; default: sb.Append("##Unknown Altered Type: " + AlteredArteRequirementType[i] + "<br>"); sb.Append("##Value: " + AlteredArteRequirementId[i] + "<br>"); break; } sb.Append("<br>"); } } if (UsableInMenu > 0) { sb.Append("Usable outside of battle"); } sb.Append("</td>"); /* * sb.Append( "<td>" ); * sb.AppendLine(); * sb.AppendLine( "~" + 9 + ": " + Data[9] + "<br>" ); * for ( int i = 16; i < 22; ++i ) { * sb.AppendLine( "~" + i + ": " + Data[i] + "<br>" ); * } * for ( int i = 40; i < 69; ++i ) { * if ( i == 44 ) continue; * if ( i == 42 || i == 66 ) { * sb.AppendLine( "~" + i + ": " + Data[i].UIntToFloat() + "<br>" ); * } else { * sb.AppendLine( "~" + i + ": " + Data[i] + "<br>" ); * } * } * for ( int i = 79; i < 95; ++i ) { * if ( i == 83 ) continue; * sb.AppendLine( "~" + i + ": " + Data[i] + "<br>" ); * } * sb.Append( "</td>" ); * //*/ sb.Append("</tr>"); return(sb.ToString()); }
public static string ScenarioProcessGroupsToHtml(List <List <ScenarioData> > groups, ScenarioType type, GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, Dictionary <uint, TSS.TSSEntry> inGameIdDict, uint[] iconsWithItems, bool phpLinks = false) { var sb = new StringBuilder(); AddHeader(sb, version, "Scenario Index (" + type.ToString() + ")"); sb.AppendLine("<body>"); AddMenuBar(sb, version, versionPostfix, locale, websiteLanguage, iconsWithItems, inGameIdDict); sb.Append("<div class=\"scenario-index\">"); sb.Append("<ul>"); for (int i = 0; i < groups.Count; ++i) { var group = groups[i]; string commonBegin = ScenarioData.FindMostCommonStart(group); sb.Append("<li>"); if (type == ScenarioType.Maps) { sb.Append(commonBegin.Split(new char[] { '_', '0' })[0]); } else { if (commonBegin != "") { sb.Append(commonBegin); } else { sb.Append("Intro"); } } sb.Append("<ul>"); for (int j = 0; j < group.Count; ++j) { var scene = group[j]; sb.Append("<li>"); sb.Append("<a href=\""); sb.Append(WebsiteGenerator.GetUrl(WebsiteSection.Scenario, version, versionPostfix, locale, websiteLanguage, phpLinks, extra: scene.EpisodeId)); sb.Append("\">"); sb.Append(scene.HumanReadableNameWithoutPrefix(commonBegin)); sb.Append("</a>"); foreach (var skit in scene.Skits) { sb.Append("<ul>"); sb.Append("<li>"); sb.Append("<a href=\""); sb.Append(WebsiteGenerator.GetUrl(WebsiteSection.Skit, version, versionPostfix, locale, websiteLanguage, phpLinks, extra: skit.RefString)); sb.Append("\">"); if (websiteLanguage.WantsJp()) { sb.Append(inGameIdDict[skit.StringDicIdName].GetStringHtml(0, version, inGameIdDict)); } if (websiteLanguage.WantsBoth()) { sb.Append(" ("); } if (websiteLanguage.WantsEn()) { sb.Append(inGameIdDict[skit.StringDicIdName].GetStringHtml(1, version, inGameIdDict)); } if (websiteLanguage.WantsBoth()) { sb.Append(")"); } sb.Append("</a>"); sb.Append("</li>"); sb.Append("</ul>"); } sb.Append("</li>"); } sb.Append("</ul>"); sb.Append("</li>"); } sb.Append("</ul>"); sb.Append("</div>"); AddFooter(sb); sb.AppendLine("</body></html>"); return(sb.ToString()); }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, TO8CHLI skits, Dictionary <uint, TSS.TSSEntry> inGameIdDict) { StringBuilder sb = new StringBuilder(); sb.Append(RefString); if (websiteLanguage.WantsJp()) { sb.Append("<br>"); sb.Append(inGameIdDict[StringDicIdName].StringJpnHtml(version, inGameIdDict)); sb.Append("<br>"); sb.Append(inGameIdDict[StringDicIdCondition].StringJpnHtml(version, inGameIdDict)); } if (websiteLanguage.WantsEn()) { sb.Append("<br>"); sb.Append(inGameIdDict[StringDicIdName].StringEngHtml(version, inGameIdDict)); sb.Append("<br>"); sb.Append(inGameIdDict[StringDicIdCondition].StringEngHtml(version, inGameIdDict)); } sb.Append("<br>Category: "); sb.Append(CategoryString); sb.Append("<br>Available after event: "); sb.Append(FlagTrigger); if (FlagCancel == 9999999) { sb.Append("<br>Never expires."); } else { sb.Append("<br>Expires after event: "); sb.Append(FlagCancel); } if (SkitConditionForwarderReference == 0xFFFFFFFF) { Util.Assert(SkitConditionRelated == 0); sb.Append("<br>No special condition."); } else { Util.Assert(SkitConditionRelated > 0); var fw = skits.SkitConditionForwarderList[(int)SkitConditionForwarderReference]; /* * sb.AppendLine(); * sb.Append( "<br>Trigger Condition #" + SkitConditionForwarderReference ); * sb.Append( " / Condition: " + fw.SkitConditionReference ); * sb.Append( " / Count: " + fw.SkitConditionCount ); * //*/ for (uint i = 0; i < fw.SkitConditionCount; ++i) { var c = skits.SkitConditionList[(int)(fw.SkitConditionReference + i)]; sb.Append("<br>"); c.GetDataAsHtml(sb, version, websiteLanguage, inGameIdDict); } sb.Append("~SkitConditionRelated: " + SkitConditionRelated); } sb.Append("<br>"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, CharacterBitmask, websiteLanguage.MainJp()); sb.Append("<br>"); sb.Append("~4: 0x" + Unknown4.ToString("X8")); sb.Append("<br>"); return(sb.ToString()); }
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, COOKDAT recipes, ItemDat.ItemDat items, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict, bool phpLinks = false) { StringBuilder sb = new StringBuilder(); sb.Append("<tr id=\"recipe" + ID + "\"><td>"); sb.Append("<img src=\"recipes/U_" + RefString + ".png\">"); sb.Append("</td><td>"); if (websiteLanguage.WantsJp()) { sb.Append("<span class=\"itemname\">" + inGameIdDict[NameStringDicID].StringJpnHtml(version, inGameIdDict) + "</span><br>"); sb.Append(inGameIdDict[DescriptionStringDicID].StringJpnHtml(version, inGameIdDict) + "<br>"); sb.Append(inGameIdDict[EffectStringDicID].StringJpnHtml(version, inGameIdDict)); } if (websiteLanguage.WantsBoth()) { sb.Append("<br>"); sb.Append("<br>"); } if (websiteLanguage.WantsEn()) { sb.Append("<span class=\"itemname\">" + inGameIdDict[NameStringDicID].StringEngHtml(version, inGameIdDict) + "</span><br>"); sb.Append(inGameIdDict[DescriptionStringDicID].StringEngHtml(version, inGameIdDict) + "<br>"); sb.Append(inGameIdDict[EffectStringDicID].StringEngHtml(version, inGameIdDict)); } sb.Append("</td><td>"); for (int i = 0; i < IngredientGroups.Length; ++i) { if (IngredientGroups[i] != 0) { uint stringDicId; stringDicId = IngredientGroupDict[IngredientGroups[i]]; var entry = inGameIdDict[stringDicId]; sb.Append("<img src=\"item-icons/ICON" + IngredientGroups[i] + ".png\" height=\"16\" width=\"16\"> "); sb.Append(entry.StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage) + " x" + IngredientGroupCount[i] + "<br>"); } } for (int i = 0; i < Ingredients.Length; ++i) { if (Ingredients[i] != 0) { var item = items.itemIdDict[Ingredients[i]]; sb.Append("<img src=\"item-icons/ICON" + item.Data[(int)ItemData.Icon] + ".png\" height=\"16\" width=\"16\"> "); sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Item, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)item.Data[(int)ItemData.ID], icon: (int)item.Data[(int)ItemData.Icon]) + "\">"); sb.Append(inGameIdDict[item.NamePointer].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage) + "</a> x" + IngredientCount[i] + "<br>"); } } sb.Append("</td><td>"); if (HP > 0) { sb.Append("HP Heal: " + HP + "%<br>"); } if (TP > 0) { sb.Append("TP Heal: " + TP + "%<br>"); } if (PhysicalAilmentHeal > 0 || DeathHeal > 0) { sb.Append("Cures Ailments: "); if (DeathHeal > 0) { sb.Append("<img src=\"text-icons/icon-status-13.png\" height=\"16\" width=\"16\" title=\"Death\">"); } if ((PhysicalAilmentHeal & 1) == 1) { sb.Append("<img src=\"text-icons/icon-status-01.png\" height=\"16\" width=\"16\" title=\"Poison\">"); } if ((PhysicalAilmentHeal & 2) == 2) { sb.Append("<img src=\"text-icons/icon-status-07.png\" height=\"16\" width=\"16\" title=\"Contamination\">"); } if ((PhysicalAilmentHeal & 4) == 4) { sb.Append("<img src=\"text-icons/icon-status-02.png\" height=\"16\" width=\"16\" title=\"Paralysis\">"); } if ((PhysicalAilmentHeal & 8) == 8) { sb.Append("<img src=\"text-icons/icon-status-03.png\" height=\"16\" width=\"16\" title=\"Petrification\">"); } if ((PhysicalAilmentHeal & 16) == 16) { sb.Append("<img src=\"text-icons/icon-status-04.png\" height=\"16\" width=\"16\" title=\"Weakness\">"); } if ((PhysicalAilmentHeal & 32) == 32) { sb.Append("<img src=\"text-icons/icon-status-05.png\" height=\"16\" width=\"16\" title=\"Sealed Artes\">"); } if ((PhysicalAilmentHeal & 64) == 64) { sb.Append("<img src=\"text-icons/icon-status-06.png\" height=\"16\" width=\"16\" title=\"Sealed Skills\">"); } sb.Append("<br>"); } if (StatValue > 0) { //sb.Append( "Stat Type: " + StatType + "<br>" ); switch (StatType) { case 1: sb.Append("P. ATK"); break; case 2: sb.Append("P. DEF"); break; case 3: sb.Append("M. ATK"); break; case 4: sb.Append("M. DEF"); break; case 5: sb.Append("AGL"); break; case 11: sb.Append("Over Limit gauge increases<br>"); break; } if (StatType != 11) { sb.Append(" +" + StatValue + (StatType < 5 ? "%" : "") + "<br>"); sb.Append("Duration: " + StatTime + " seconds<br>"); } } if (RecipeCreationCharacter.Count(x => x != 0) > 0) { sb.Append("Recipe Evolutions:<br>"); for (int i = 0; i < RecipeCreationCharacter.Length; ++i) { if (RecipeCreationCharacter[i] != 0) { var otherRecipe = recipes.RecipeList[(int)RecipeCreationRecipe[i]]; Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, (uint)(1 << (int)(RecipeCreationCharacter[i] - 1)), websiteLanguage.MainJp()); sb.Append(" <a href=\"" + Vesperia.Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Recipe, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)otherRecipe.ID) + "\">"); sb.Append(inGameIdDict[otherRecipe.NameStringDicID].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage)); sb.Append("</a>"); sb.Append("<br>"); } } } sb.Append("<table class=\"element\">"); sb.Append("<tr>"); sb.Append("<td>Likes</td>"); sb.Append("<td>Dislikes</td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td>"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, CharactersLike, websiteLanguage.MainJp()); sb.Append("</td>"); sb.Append("<td>"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, CharactersDislike, websiteLanguage.MainJp()); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td>Good at</td>"); sb.Append("<td>Bad at</td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td>"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, CharactersGoodAtMaking, websiteLanguage.MainJp()); sb.Append("</td>"); sb.Append("<td>"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, inGameIdDict, version, CharactersBadAtMaking, websiteLanguage.MainJp()); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table>"); sb.Append("</td></tr>"); return(sb.ToString()); }
public static string GetItemDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, ItemDat items, ItemDatSingle item, T8BTSK.T8BTSK skills, T8BTEMST.T8BTEMST enemies, COOKDAT.COOKDAT Recipes, WRLDDAT.WRLDDAT Locations, ShopData.ShopData shopData, TOVSEAF.TOVSEAF searchPoints, TSS.TSSFile tss, Dictionary <uint, TSS.TSSEntry> dict, bool phpLinks = false) { if (dict == null) { dict = tss.GenerateInGameIdDictionary(); } bool trustItemBookForShops = true; // true to use the values of the item book for shop locations; false to parse it out from the actual data bool trustItemBookForEnemies = false; // true to use the values of the item book for enemy drop/steal lists; false to parse it out from the actual data var sb = new StringBuilder(); sb.Append("<tr id=\"item" + item.Data[(int)ItemData.ID] + "\">"); sb.Append("<td rowspan=\"3\">"); sb.Append("<img src=\"items/U_" + item.ItemString.TrimNull() + ".png\" height=\"128\" width=\"128\">"); sb.Append("</td><td colspan=\"2\">"); uint equip = item.Data[(int)ItemData.EquippableByBitfield]; if (equip > 0) { sb.Append("<span class=\"equip\">"); Website.WebsiteGenerator.AppendCharacterBitfieldAsImageString(sb, dict, version, equip, websiteLanguage.MainJp()); sb.Append("</span>"); } var nameEntry = dict[item.NamePointer]; var descEntry = dict[item.DescriptionPointer]; if (websiteLanguage.WantsJp()) { sb.Append("<img src=\"item-icons/ICON" + item.Data[(int)ItemData.Icon] + ".png\" height=\"16\" width=\"16\"> "); sb.Append("<span class=\"itemname\">"); sb.Append(nameEntry.StringJpnHtml(version, dict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append("<span class=\"itemdesc\">"); sb.Append(descEntry.StringJpnHtml(version, dict)); sb.Append("</span>"); } if (websiteLanguage.WantsBoth()) { sb.Append("<br>"); sb.Append("<br>"); } if (websiteLanguage.WantsEn()) { sb.Append("<img src=\"item-icons/ICON" + item.Data[(int)ItemData.Icon] + ".png\" height=\"16\" width=\"16\"> "); sb.Append("<span class=\"itemname\">"); sb.Append(nameEntry.StringEngHtml(version, dict)); sb.Append("</span>"); sb.Append("<br>"); sb.Append("<span class=\"itemdesc\">"); sb.Append(descEntry.StringEngHtml(version, dict)); sb.Append("</span>"); } sb.Append("<span class=\"special\">"); if (item.Data[(int)ItemData.UsableInBattle] > 0) { sb.Append("Usable in battle"); } ; if (item.Data[(int)ItemData.InCollectorsBook] == 0) { sb.Append("Not in Collector's Book"); } sb.Append("</span>"); sb.Append("</td>"); uint synthCount = item.Data[(int)ItemData.SynthRecipeCount]; switch (synthCount) { case 0: break; case 1: sb.Append("<td colspan=\"2\">"); break; default: sb.Append("<td>"); break; } for (int j = 0; j < synthCount; ++j) { uint synthItemCount = item.Data[(int)ItemData.Synth1ItemSlotCount + j * 16]; sb.Append("Synthesis Level: " + item.Data[(int)ItemData._Synth1Level + j * 16]); sb.Append("<br>"); sb.Append("Price: " + item.Data[(int)ItemData.Synth1Price + j * 16] + " Gald"); for (int i = 0; i < synthItemCount; ++i) { sb.Append("<br>"); var otherItem = items.itemIdDict[item.Data[(int)ItemData.Synth1Item1Type + i * 2 + j * 16]]; var otherItemNameEntry = dict[otherItem.NamePointer]; string otherItemName = otherItemNameEntry.StringEngOrJpnHtml(version, dict, websiteLanguage); sb.Append("<img src=\"item-icons/ICON" + otherItem.Data[(int)ItemData.Icon] + ".png\" height=\"16\" width=\"16\"> "); sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Item, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)otherItem.Data[(int)ItemData.ID], icon: (int)otherItem.Data[(int)ItemData.Icon]) + "\">"); sb.Append(otherItemName + "</a> x" + item.Data[(int)ItemData.Synth1Item1Count + i * 2 + j * 16]); } if (synthCount > 1 && j == 0) { sb.Append("</td><td>"); } } sb.Append("</td></tr><tr>"); uint category = item.Data[(int)ItemData.Category]; switch (category) { case 2: default: sb.Append("<td colspan=\"2\">"); if (item.Data[(int)ItemData.MDEF_or_HPHealPercent] > 0) { sb.Append("HP Heal %: " + item.Data[(int)ItemData.MDEF_or_HPHealPercent] + "<br>"); } if (item.Data[(int)ItemData.AGL_TPHealPercent] > 0) { sb.Append("TP Heal %: " + item.Data[(int)ItemData.AGL_TPHealPercent] + "<br>"); } // why is this here twice? uint physAilAlt = item.Data[(int)ItemData.PDEF]; uint physAil = item.Data[(int)ItemData._LUCK]; if (physAil != physAilAlt) { throw new Exception(); } if (physAil > 0) { sb.Append("Cures physical ailments: "); if ((physAil & 1) == 1) { sb.Append("<img src=\"text-icons/icon-status-13.png\" height=\"32\" width=\"32\">"); } if ((physAil & 2) == 2) { sb.Append("<img src=\"text-icons/icon-status-01.png\" height=\"32\" width=\"32\">"); } if ((physAil & 4) == 4) { sb.Append("<img src=\"text-icons/icon-status-02.png\" height=\"32\" width=\"32\">"); } if ((physAil & 8) == 8) { sb.Append("<img src=\"text-icons/icon-status-03.png\" height=\"32\" width=\"32\">"); } if ((physAil & 16) == 16) { sb.Append("<img src=\"text-icons/icon-status-04.png\" height=\"32\" width=\"32\">"); } if ((physAil & 32) == 32) { sb.Append("<img src=\"text-icons/icon-status-05.png\" height=\"32\" width=\"32\">"); } if ((physAil & 64) == 64) { sb.Append("<img src=\"text-icons/icon-status-06.png\" height=\"32\" width=\"32\">"); } if ((physAil & 128) == 128) { sb.Append("<img src=\"text-icons/icon-status-07.png\" height=\"32\" width=\"32\">"); } sb.Append("<br>"); } if (item.Data[(int)ItemData._AGL_Again] > 0) { sb.Append("Cures magical ailments<br>"); } if (item.Data[(int)ItemData.PermanentPAtkIncrease] > 0) { sb.Append("Permanent PATK increase: " + item.Data[(int)ItemData.PermanentPAtkIncrease] + "<br>"); } if (item.Data[(int)ItemData.PermanentPDefIncrease] > 0) { sb.Append("Permanent PDEF increase: " + item.Data[(int)ItemData.PermanentPDefIncrease] + "<br>"); } if (item.Data[(int)ItemData.AttrFire] > 0) { sb.Append("Permanent MATK increase: " + item.Data[(int)ItemData.AttrFire] + "<br>"); } if (item.Data[(int)ItemData.AttrWater] > 0) { sb.Append("Permanent MDEF increase: " + item.Data[(int)ItemData.AttrWater] + "<br>"); } if (item.Data[(int)ItemData.AttrWind] > 0) { sb.Append("Permanent AGL increase: " + item.Data[(int)ItemData.AttrWind] + "<br>"); } if (item.Data[(int)ItemData.Skill1] > 0) { sb.Append("Max HP increase: " + item.Data[(int)ItemData.Skill1] + "<br>"); } if (item.Data[(int)ItemData.Skill1Metadata] > 0) { sb.Append("Max TP increase: " + item.Data[(int)ItemData.Skill1Metadata] + "<br>"); } for (int i = 0; i < 8; ++i) { int recipeId = (int)item.Data[(int)ItemData.UsedInRecipe1 + i]; if (recipeId != 0) { var recipe = Recipes.RecipeList[recipeId]; var recipeNameEntry = dict[recipe.NameStringDicID]; sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Recipe, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)recipe.ID) + "\">" + recipeNameEntry.StringEngOrJpnHtml(version, dict, websiteLanguage) + "</a><br>"); } } sb.Append("</td>"); break; case 3: case 4: case 5: case 6: case 7: sb.Append("<td>"); if ((int)item.Data[(int)ItemData.PATK] > 0) { sb.Append("PATK: " + (int)item.Data[(int)ItemData.PATK] + "<br>"); } if ((int)item.Data[(int)ItemData.MATK] > 0) { sb.Append("MATK: " + (int)item.Data[(int)ItemData.MATK] + "<br>"); } if ((int)item.Data[(int)ItemData.PDEF] > 0) { sb.Append("PDEF: " + (int)item.Data[(int)ItemData.PDEF] + "<br>"); } if ((int)item.Data[(int)ItemData.MDEF_or_HPHealPercent] > 0) { sb.Append("MDEF: " + (int)item.Data[(int)ItemData.MDEF_or_HPHealPercent] + "<br>"); } int agl1 = (int)item.Data[(int)ItemData.AGL_TPHealPercent]; int agl2 = (int)item.Data[(int)ItemData._AGL_Again]; if (agl2 > 0) { sb.Append("AGL: " + agl2 + "<br>"); } if ((int)item.Data[(int)ItemData._LUCK] > 0) { sb.Append("LUCK: " + (int)item.Data[(int)ItemData._LUCK] + "<br>"); } int attackElementCount = 0; int defenseElementCount = 0; for (int i = 0; i < 6; ++i) { if ((int)item.Data[(int)ItemData.AttrFire + i] > 0) { attackElementCount++; } if ((int)item.Data[(int)ItemData.AttrFire + i] < 0) { defenseElementCount++; } } if (attackElementCount > 0 || defenseElementCount > 0) { int fire = (int)item.Data[(int)ItemData.AttrFire]; int watr = (int)item.Data[(int)ItemData.AttrWater]; int wind = (int)item.Data[(int)ItemData.AttrWind]; int eart = (int)item.Data[(int)ItemData.AttrEarth]; int lght = (int)item.Data[(int)ItemData.AttrLight]; int dark = (int)item.Data[(int)ItemData.AttrDark]; if (defenseElementCount > 0) { sb.Append("<table class=\"element\"><tr>"); sb.Append("<td colspan=\"" + defenseElementCount + "\">Resistance</td>"); sb.Append("</tr><tr>"); if (fire < 0) { sb.Append("<td><img src=\"text-icons/icon-element-02.png\"></td>"); } if (eart < 0) { sb.Append("<td><img src=\"text-icons/icon-element-04.png\"></td>"); } if (wind < 0) { sb.Append("<td><img src=\"text-icons/icon-element-01.png\"></td>"); } if (watr < 0) { sb.Append("<td><img src=\"text-icons/icon-element-05.png\"></td>"); } if (lght < 0) { sb.Append("<td><img src=\"text-icons/icon-element-03.png\"></td>"); } if (dark < 0) { sb.Append("<td><img src=\"text-icons/icon-element-06.png\"></td>"); } sb.Append("</tr><tr>"); if (fire < 0) { sb.Append("<td>" + -fire + "%</td>"); } if (eart < 0) { sb.Append("<td>" + -eart + "%</td>"); } if (wind < 0) { sb.Append("<td>" + -wind + "%</td>"); } if (watr < 0) { sb.Append("<td>" + -watr + "%</td>"); } if (lght < 0) { sb.Append("<td>" + -lght + "%</td>"); } if (dark < 0) { sb.Append("<td>" + -dark + "%</td>"); } sb.Append("</tr></table>"); } if (attackElementCount > 0) { sb.Append("<table class=\"element\"><tr>"); if (category == 3 || category == 4) { // weapons and sub-weapons add elemental attributes to your attack sb.Append("<td colspan=\"" + attackElementCount + "\">Attack Element</td>"); } else { // defensive equipment instead uses this field as a weak/resist, with weak as positive and resist as negative values sb.Append("<td colspan=\"" + attackElementCount + "\">Weakness</td>"); } sb.Append("</tr><tr>"); if (fire > 0) { sb.Append("<td><img src=\"text-icons/icon-element-02.png\"></td>"); } if (eart > 0) { sb.Append("<td><img src=\"text-icons/icon-element-04.png\"></td>"); } if (wind > 0) { sb.Append("<td><img src=\"text-icons/icon-element-01.png\"></td>"); } if (watr > 0) { sb.Append("<td><img src=\"text-icons/icon-element-05.png\"></td>"); } if (lght > 0) { sb.Append("<td><img src=\"text-icons/icon-element-03.png\"></td>"); } if (dark > 0) { sb.Append("<td><img src=\"text-icons/icon-element-06.png\"></td>"); } if (!(category == 3 || category == 4)) { // weapons always have a "1" here, don't print that, it's not useful sb.Append("</tr><tr>"); if (fire > 0) { sb.Append("<td>" + fire + "%</td>"); } if (eart > 0) { sb.Append("<td>" + eart + "%</td>"); } if (wind > 0) { sb.Append("<td>" + wind + "%</td>"); } if (watr > 0) { sb.Append("<td>" + watr + "%</td>"); } if (lght > 0) { sb.Append("<td>" + lght + "%</td>"); } if (dark > 0) { sb.Append("<td>" + dark + "%</td>"); } } sb.Append("</tr></table>"); } } sb.Append("</td><td>"); for (int i = 0; i < 3; ++i) { uint skillId = item.Data[(int)ItemData.Skill1 + i * 2]; if (skillId != 0) { var skill = skills.SkillIdDict[skillId]; var skillNameEntry = dict[skill.NameStringDicID]; string skillName = skillNameEntry.StringEngOrJpnHtml(version, dict, websiteLanguage); string skillCat = "<img src=\"skill-icons/category-" + skill.Category.ToString() + ".png\" height=\"16\" width=\"16\">"; sb.Append(skillCat); sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Skill, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)skill.InGameID) + "\">"); sb.Append(skillName); sb.Append("</a>, " + item.Data[(int)ItemData.Skill1Metadata + i * 2] + "<br>"); } } sb.Append("</td>"); break; } sb.Append("<td>"); sb.Append(item.Data[(int)ItemData.ShopPrice] + " Gald"); if (trustItemBookForShops) { if (item.Data[(int)ItemData.BuyableIn1] > 0 || item.Data[(int)ItemData.BuyableIn2] > 0 || item.Data[(int)ItemData.BuyableIn3] > 0) { //sb.Append( "<br>Available at shops in:" ); for (int i = 0; i < 3; ++i) { if (item.Data[(int)ItemData.BuyableIn1 + i] > 0) { var loc = Locations.LocationIdDict[item.Data[(int)ItemData.BuyableIn1 + i]]; sb.Append("<br><a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Location, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)loc.LocationID) + "\">"); sb.Append(loc.GetLastValidName(dict).StringEngOrJpnHtml(version, dict, websiteLanguage) + "</a>"); } } } } else { List <ShopData.ShopDefinition> shops = new List <ShopData.ShopDefinition>(); foreach (var kvp in shopData.ShopDictionary) { ShopData.ShopDefinition shop = kvp.Value; foreach (var shopItem in shop.ShopItems) { if (shopItem.ItemID == item.Data[(int)ItemData.ID]) { shops.Add(shop); break; } } } bool printShopsDirectly = false; if (printShopsDirectly) { foreach (var shop in shops) { sb.Append("<br><a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Shop, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)shop.InGameID) + "\">"); sb.Append(dict[shop.StringDicID].StringEngOrJpnHtml(version, dict, websiteLanguage) + "</a>"); } } else { foreach (var shop in shops) { WRLDDAT.Location loc = FindLocationOfShop(shop, shopData, Locations); if (loc != null) { sb.Append("<br><a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Location, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)loc.LocationID) + "\">"); sb.Append(loc.GetLastValidName(dict).StringEngOrJpnHtml(version, dict, websiteLanguage) + "</a>"); } else { sb.Append("<br><a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Shop, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)shop.InGameID) + "\">"); sb.Append(dict[shop.StringDicID].StringEngOrJpnHtml(version, dict, websiteLanguage) + "</a>"); } } } } sb.Append("</td><td>"); List <uint> itemsRequireSynth = FindItemsThatRequireForSynth(item.Data[(int)ItemData.ID], items); if (itemsRequireSynth.Count > 0) { sb.Append("Can be used to synthesize"); foreach (uint otherItemId in itemsRequireSynth) { ItemDatSingle otherItem = items.itemIdDict[otherItemId]; sb.Append("<br>"); var otherItemNameEntry = dict[otherItem.NamePointer]; string otherItemName = otherItemNameEntry.StringEngOrJpnHtml(version, dict, websiteLanguage); sb.Append("<img src=\"item-icons/ICON" + otherItem.Data[(int)ItemData.Icon] + ".png\" height=\"16\" width=\"16\"> "); sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Item, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)otherItem.Data[(int)ItemData.ID], icon: (int)otherItem.Data[(int)ItemData.Icon]) + "\">"); sb.Append(otherItemName + "</a>"); } } sb.Append("</td></tr><tr>"); // drops and steals List <(uint enemyId, uint dropChance, uint?fatalType, uint?fatalIncrease)>[] enemyIds = new List <(uint enemyId, uint dropChance, uint?fatalType, uint?fatalIncrease)> [3];
public string GetDataAsHtml(GameVersion version, string versionPostfix, GameLocale locale, WebsiteLanguage websiteLanguage, ItemDat.ItemDat items, WRLDDAT.WRLDDAT locations, TSS.TSSFile stringDic, Dictionary <uint, TSS.TSSEntry> inGameIdDict, bool phpLinks = false) { var sb = new StringBuilder(); sb.Append("<tr id=\"enemy" + InGameID + "\">"); sb.Append("<td style=\"height: 46px; width: 46px;\">"); var enemyNameEntry = inGameIdDict[NameStringDicID]; sb.Append("<img src=\"monster-icons/44px/monster-" + IconID.ToString("D3") + ".png\" title=\"" + RefString + "\">"); sb.Append("</td>"); sb.Append("<td style=\"height: 46px;\">"); if (websiteLanguage.WantsJp()) { sb.Append("<span class=\"itemname\">" + enemyNameEntry.StringJpnHtml(version, inGameIdDict) + "</span>"); } if (websiteLanguage.WantsBoth()) { sb.Append("<br>"); } if (websiteLanguage.WantsEn()) { sb.Append("<span class=\"itemname\">" + enemyNameEntry.StringEngHtml(version, inGameIdDict) + "</span>"); } //sb.Append( RefString2 + "<br>" ); //sb.Append( RefString3 + "<br>" ); //sb.Append( RefString4 + "<br>" ); //sb.Append( RefString5 + "<br>" ); sb.Append("</td>"); //sb.Append( " / Category: " + Category + "<br>" ); AppendStats(sb, "Easy", 0); AppendStats(sb, "Normal", 1); AppendStats(sb, "Hard", 2); AppendStats(sb, "Unknown", 3); sb.Append("<td rowspan=\"2\">"); sb.Append("EXP: " + EXP + ", "); Website.WebsiteGenerator.AppendFatalStrikeIcon(sb, inGameIdDict, FatalTypeExp); sb.Append(" +" + EXPModifier + "<br>"); sb.Append("LP: " + LP + ", "); Website.WebsiteGenerator.AppendFatalStrikeIcon(sb, inGameIdDict, FatalTypeLP); sb.Append(" +" + LPModifier + "<br>"); sb.Append("Gald: " + Gald + "<br>"); sb.Append("Fatal Strike Resistances:<br>"); Website.WebsiteGenerator.AppendFatalStrikeIcon(sb, inGameIdDict, 0); sb.Append(FatalBlue); sb.Append(" "); Website.WebsiteGenerator.AppendFatalStrikeIcon(sb, inGameIdDict, 1); sb.Append(FatalRed); sb.Append(" "); Website.WebsiteGenerator.AppendFatalStrikeIcon(sb, inGameIdDict, 2); sb.Append(FatalGreen); sb.Append("<br>"); int weakCount = 0; int strongCount = 0; int immuneCount = 0; int absorbCount = 0; for (int i = 0; i < Attributes.Length; ++i) { if (Attributes[i] > 100) { weakCount++; } if (Attributes[i] > 0 && Attributes[i] < 100) { strongCount++; } if (Attributes[i] == 0) { immuneCount++; } if (Attributes[i] < 0) { absorbCount++; } } if (weakCount > 0) { sb.Append("Weak: "); for (int i = 0; i < Attributes.Length; ++i) { if (Attributes[i] > 100) { Website.WebsiteGenerator.AppendElementIcon(sb, inGameIdDict, (Element)i); sb.Append(Attributes[i] - 100); sb.Append("% "); } } sb.Append("<br>"); } if (strongCount > 0) { sb.Append("Strong: "); for (int i = 0; i < Attributes.Length; ++i) { if (Attributes[i] > 0 && Attributes[i] < 100) { Website.WebsiteGenerator.AppendElementIcon(sb, inGameIdDict, (Element)i); sb.Append(Attributes[i]); sb.Append("% "); } } sb.Append("<br>"); } if (immuneCount > 0) { sb.Append("Immune: "); for (int i = 0; i < Attributes.Length; ++i) { if (Attributes[i] == 0) { Website.WebsiteGenerator.AppendElementIcon(sb, inGameIdDict, (Element)i); } } sb.Append("<br>"); } if (absorbCount > 0) { sb.Append("Absorb: "); for (int i = 0; i < Attributes.Length; ++i) { if (Attributes[i] < 0) { Website.WebsiteGenerator.AppendElementIcon(sb, inGameIdDict, (Element)i); sb.Append(-Attributes[i]); sb.Append("% "); } } sb.Append("<br>"); } if (KillableWithFS == 0) { sb.Append("Immune to Fatal Strike.<br>"); } sb.Append("</td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td colspan=\"2\">"); if (InMonsterBook == 0) { sb.Append("Not in Monster Book.<br>"); } if (Location != 0) { var loc = locations.LocationIdDict[Location]; sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Location, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)loc.LocationID) + "\">"); if (LocationWeather > -1) { sb.Append("<img src=\"menu-icons/weather-" + LocationWeather + ".png\" width=\"16\" height=\"16\">"); } sb.Append(loc.GetLastValidName(inGameIdDict).StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage) + "</a><br>"); } for (int i = 0; i < DropItems.Length; ++i) { if (DropItems[i] != 0) { sb.Append("Drops:<br>"); break; } } for (int i = 0; i < DropItems.Length; ++i) { if (DropItems[i] != 0) { var item = items.itemIdDict[DropItems[i]]; sb.Append("<img src=\"item-icons/ICON" + item.Data[(int)ItemData.Icon] + ".png\" height=\"16\" width=\"16\"> "); sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Item, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)item.Data[(int)ItemData.ID], icon: (int)item.Data[(int)ItemData.Icon]) + "\">"); sb.Append(inGameIdDict[item.NamePointer].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage) + "</a>"); sb.Append(", " + DropChances[i] + "%"); if (DropChances[i] < 100) { sb.Append(", "); Website.WebsiteGenerator.AppendFatalStrikeIcon(sb, inGameIdDict, FatalTypeDrop); sb.Append(" +" + DropModifier[i] + "%"); } sb.Append("<br>"); } } if (SecretMissionDrop != 0 && SecretMissionDropChance > 0) { sb.Append("Secret Mission Reward:<br>"); var item = items.itemIdDict[SecretMissionDrop]; sb.Append("<img src=\"item-icons/ICON" + item.Data[(int)ItemData.Icon] + ".png\" height=\"16\" width=\"16\"> "); sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Item, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)item.Data[(int)ItemData.ID], icon: (int)item.Data[(int)ItemData.Icon]) + "\">"); sb.Append(inGameIdDict[item.NamePointer].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage) + "</a>, " + SecretMissionDropChance + "%<br>"); } if (StealItem != 0) { sb.Append("Steal:<br>"); var item = items.itemIdDict[StealItem]; sb.Append("<img src=\"item-icons/ICON" + item.Data[(int)ItemData.Icon] + ".png\" height=\"16\" width=\"16\"> "); sb.Append("<a href=\"" + Website.WebsiteGenerator.GetUrl(Website.WebsiteSection.Item, version, versionPostfix, locale, websiteLanguage, phpLinks, id: (int)item.Data[(int)ItemData.ID], icon: (int)item.Data[(int)ItemData.Icon]) + "\">"); sb.Append(inGameIdDict[item.NamePointer].StringEngOrJpnHtml(version, inGameIdDict, websiteLanguage) + "</a>, " + StealChance + "%<br>"); } sb.Append("</td>"); sb.Append("</tr>"); return(sb.ToString()); }