L2JMobius

C6 remember which page when going back

Strelook66 · 3 · 2104

Online Strelook66

  • Knight
  • ***
    • Posts: 82
Hello,

Could somebody help me with an issue regarding pages? Problem im having is when i'm accessing this part of the code to see some info about the achievement, and then I press "Back", it returns to the very first page in the list, but I want it to remember from which page I accessed this info. Example, if achievement is on page 3, and when I hit back from info, I want it to remain on page 3, not page 1.

Code: [Select]
private void showAchievementInfo(int achievementID, L2PcInstance player)
{
Achievement a = AchievementsManager.getInstance().getAchievementList().get(achievementID);

StringBuilder tb = new StringBuilder();
tb.append("<html><title>Achievements Manager</title><body>");
tb.append("<img src=\"L2UI.SquareWhite\" width=300 height=1><img src=\"L2UI.SquareBlank\" width=1 height=3>");
tb.append("<center>");
tb.append("<table width=285 border=0 bgcolor=000000>");
tb.append("<tr><td width=270 align=\"center\">" + a.getName() + "</td></tr></table><br>");
tb.append("<center>Status: " + getStatusString(achievementID, player));

if (a.meetAchievementRequirements(player) && !player.getCompletedAchievements().contains(achievementID))
{
tb.append("<button value=\"Get Reward!\" action=\"bypass -h npc_%objectId%_getReward " + a.getID() + "\" width=75 height=21 back=\"L2UI_ch3.BigButton3_over\" fore=\"L2UI_ch3.BigButton3\">");
}

tb.append("<br><img src=\"L2UI.SquareWhite\" width=300 height=1><br>");

tb.append("<table width=285 border=0 bgcolor=000000");
tb.append("<tr><td width=285 align=\"center\">Description</td></tr></table><br>");
tb.append("<table width=285 border=0 bgcolor=000000>");
tb.append("<tr>");
tb.append("<td>");
tb.append(a.getDescription());

if (a.getID() == 20)
{
tb.append("<br><center>");
int killedcount = player.getChampCount();
int neededcount = 100;
tb.append("You have killed: " + killedcount + "/<font color=\"LEVEL\">" + neededcount + "</font></center>");
}
if (a.getID() == 21)
{
tb.append("<br><center>");
int killedcount = player.getChampCount();
int neededcount = 500;
tb.append("You have killed: " + killedcount + "/<font color=\"LEVEL\">" + neededcount + "</font></center>");
}
if (a.getID() == 22)
{
tb.append("<br><center>");
int killedcount = player.getChampCount();
int neededcount = 1000;
tb.append("You have killed: " + killedcount + "/<font color=\"LEVEL\">" + neededcount + "</font></center>");
}
tb.append("</td>");
tb.append("</tr>");
tb.append("</table>");
tb.append("<br><img src=\"L2UI.SquareWhite\" width=300 height=1><br>");
tb.append("<center><button value=\"Back\" action=\"bypass -h npc_%objectId%_showMyAchievements\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></center>");

NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
msg.setHtml(tb.toString());
msg.replace("%objectId%", String.valueOf(this.getObjectId()));

player.sendPacket(msg);
}


Entire code:


Code: [Select]
package com.l2jmobius.gameserver.model.actor.instance;

import java.util.StringTokenizer;

import com.l2jmobius.AchievementEngine.Achievement;
import com.l2jmobius.AchievementEngine.AchievementsManager;
import com.l2jmobius.commons.util.StringUtil;
import com.l2jmobius.gameserver.datatables.sql.AchievementsIconTable;
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jmobius.gameserver.templates.chars.L2NpcTemplate;

/***
 * @author Matim
 * @version 1.0
 */

public class L2AchievementsInstance extends L2FolkInstance
{
public L2AchievementsInstance(int objectId, L2NpcTemplate template)
{
super(objectId, template);
}

@Override
public void onBypassFeedback(L2PcInstance player, String command)
{
if ((player == null) || (player.getLastFolkNPC() == null) || (player.getLastFolkNPC().getObjectId() != this.getObjectId()))
{
return;
}
if (command.startsWith("showMyAchievements"))
{
player.getAchievemntData();
showMyAchievements(player, 1);
}
else if (command.startsWith("showAchievements"))
{
StringTokenizer st = new StringTokenizer(command, " ");
st.nextToken();
int page = Integer.parseInt(st.nextToken());
player.getAchievemntData();
showMyAchievements(player, page);
}
else if (command.startsWith("achievementInfo"))
{
StringTokenizer st = new StringTokenizer(command, " ");
st.nextToken();
int id = Integer.parseInt(st.nextToken());

showAchievementInfo(id, player);
}
else if (command.startsWith("showMainWindow"))
{
showChatWindow(player, 0);
}
else if (command.startsWith("getReward"))
{
StringTokenizer st = new StringTokenizer(command, " ");
st.nextToken();
int id = Integer.parseInt(st.nextToken());
AchievementsManager.getInstance().rewardForAchievement(id, player);
player.saveAchievementData(id);
showMyAchievements(player, 1);

}
else if (command.startsWith("showMyStats"))
{
showMyStatsWindow(player);
}
else if (command.startsWith("showHelpWindow"))
{
showHelpWindow(player);
}
}

@Override
public void showChatWindow(L2PcInstance player, int val)
{
NpcHtmlMessage html = new NpcHtmlMessage(0);
html.setFile("data/html/mods/135026.htm");
html.replace("%objectId%", String.valueOf(this.getObjectId()));
html.replace("%charName%", player.getName());
player.sendPacket(html);
}

private void showMyAchievements(L2PcInstance player, int page)
{
final StringBuilder tb = new StringBuilder(AchievementsManager.getInstance().getAchievementList().size() * 150);
tb.append("<html><title>Achievements Manager</title><body><br>");

tb.append("<center><font color=00ff00>Achievements List</font>:</center><br>");

if (AchievementsManager.getInstance().getAchievementList().isEmpty())
{
tb.append("There are no Achievements created yet!");
}
else
{

int results_per_page = 6;
int myPage = 1;
int i = 0;
int shown = 0;
boolean hasMore = false;

for (Achievement a : AchievementsManager.getInstance().getAchievementList().values())
{

if (shown == results_per_page)
{
hasMore = true;
break;
}

if (myPage != page)
{
i++;
if (i == results_per_page)
{
myPage++;
i = 0;
}
continue;
}

if (shown == results_per_page)
{
hasMore = true;
break;
}

tb.append(((shown % 2) == 0 ? "<table width=300 bgcolor=000000>" : "<table width=300>"));
tb.append("<table width=299 bgcolor=000000><tr>");
tb.append("<tr>");
tb.append("<td width=10 align=right>");
tb.append("<button action=\"\" width=32 height=32 back=" + AchievementsIconTable.getIcon(a.getID()) + " fore=" + AchievementsIconTable.getIcon(a.getID()) + ">");
tb.append("</td>");
tb.append("<td width=100>");
tb.append("<font color=\"LEVEL\">[ " + a.getName() + " ]</font>");
tb.append("<button value=\"Get Info\" action=\"bypass -h npc_%objectId%_achievementInfo " + a.getID() + "\" width=75 height=18 back=\"L2UI_CH3.Btn1_normalOn\" fore=\"L2UI_CH3.Btn1_normalDisable\">");
tb.append("</td>");
tb.append("<td width=100 align=center>");
tb.append(getStatusString(a.getID(), player));
tb.append("</td>");
tb.append("</tr>");
tb.append("</tr></table><img src=L2UI.Squaregray width=300 height=1>");
shown++;

}

tb.append("<br><img src=\"L2UI.SquareWhite\" width=300 height=1><table width=\"100%\" bgcolor=000000><tr>");

if (page > 1)
{
tb.append("<td align=left><button value=\"Previous\" action=\"bypass -h npc_" + getObjectId() + "_showAchievements " + (page - 1) + "\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>");
}
else
{
StringUtil.append(tb, "<td align=left width=70>Previous</td>");
}

tb.append("<td align=center><button value=\"Main Menu\" action=\"bypass -h npc_%objectId%_showMainWindow\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>");

if (hasMore)
{
tb.append("<td align=\"center\"><button value=\"Next\" action=\"bypass -h npc_" + getObjectId() + "_showAchievements " + (page + 1) + "\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>");
}
else
{
StringUtil.append(tb, "<td align=right width=70>Next</td>");
}

tb.append("</tr></table><img src=\"L2UI.SquareWhite\" width=277 height=1>");

}

NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
msg.setHtml(tb.toString());
msg.replace("%objectId%", String.valueOf(this.getObjectId()));

player.sendPacket(msg);
}

private void showAchievementInfo(int achievementID, L2PcInstance player)
{
Achievement a = AchievementsManager.getInstance().getAchievementList().get(achievementID);

StringBuilder tb = new StringBuilder();
tb.append("<html><title>Achievements Manager</title><body>");
tb.append("<img src=\"L2UI.SquareWhite\" width=300 height=1><img src=\"L2UI.SquareBlank\" width=1 height=3>");
tb.append("<center>");
tb.append("<table width=285 border=0 bgcolor=000000>");
tb.append("<tr><td width=270 align=\"center\">" + a.getName() + "</td></tr></table><br>");
tb.append("<center>Status: " + getStatusString(achievementID, player));

if (a.meetAchievementRequirements(player) && !player.getCompletedAchievements().contains(achievementID))
{
tb.append("<button value=\"Get Reward!\" action=\"bypass -h npc_%objectId%_getReward " + a.getID() + "\" width=75 height=21 back=\"L2UI_ch3.BigButton3_over\" fore=\"L2UI_ch3.BigButton3\">");
}

tb.append("<br><img src=\"L2UI.SquareWhite\" width=300 height=1><br>");

tb.append("<table width=285 border=0 bgcolor=000000");
tb.append("<tr><td width=285 align=\"center\">Description</td></tr></table><br>");
tb.append("<table width=285 border=0 bgcolor=000000>");
tb.append("<tr>");
tb.append("<td>");
tb.append(a.getDescription());

if (a.getID() == 20)
{
tb.append("<br><center>");
int killedcount = player.getChampCount();
int neededcount = 100;
tb.append("You have killed: " + killedcount + "/<font color=\"LEVEL\">" + neededcount + "</font></center>");
}
if (a.getID() == 21)
{
tb.append("<br><center>");
int killedcount = player.getChampCount();
int neededcount = 500;
tb.append("You have killed: " + killedcount + "/<font color=\"LEVEL\">" + neededcount + "</font></center>");
}
if (a.getID() == 22)
{
tb.append("<br><center>");
int killedcount = player.getChampCount();
int neededcount = 1000;
tb.append("You have killed: " + killedcount + "/<font color=\"LEVEL\">" + neededcount + "</font></center>");
}
tb.append("</td>");
tb.append("</tr>");
tb.append("</table>");
tb.append("<br><img src=\"L2UI.SquareWhite\" width=300 height=1><br>");
tb.append("<center><button value=\"Back\" action=\"bypass -h npc_%objectId%_showMyAchievements\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></center>");

NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
msg.setHtml(tb.toString());
msg.replace("%objectId%", String.valueOf(this.getObjectId()));

player.sendPacket(msg);
}

private void showMyStatsWindow(L2PcInstance player)
{
StringBuilder tb = new StringBuilder();
tb.append("<html><title>Achievements Manager</title><body><center><br>");
tb.append("Check your <font color=\"LEVEL\">Achievements </font>statistics:");
tb.append("<br><img src=\"L2UI.SquareWhite\" width=300 height=1><br>");

player.getAchievemntData();
int completedCount = player.getCompletedAchievements().size();

tb.append("You have completed: " + completedCount + "/<font color=\"LEVEL\">" + AchievementsManager.getInstance().getAchievementList().size() + "</font>");

tb.append("<br><img src=\"L2UI.SquareWhite\" width=300 height=1><br>");
tb.append("<center><button value=\"Back\" action=\"bypass -h npc_%objectId%_showMainWindow\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></center>");

NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
msg.setHtml(tb.toString());
msg.replace("%objectId%", String.valueOf(this.getObjectId()));

player.sendPacket(msg);
}


private void showHelpWindow(L2PcInstance player)
{
StringBuilder tb = new StringBuilder();
tb.append("<html><title>Achievements Manager</title><body><center><br>");
tb.append("Achievements <font color=\"LEVEL\">Help </font>page:");
tb.append("<br><img src=\"L2UI.SquareWhite\" width=300 height=1><br>");
tb.append("<table width=285 border=0>");
tb.append("<tr>");
tb.append("<td width=285> You can check status of your achievements, receive reward if every condition of achievement is meet, if not you can check which condition is still not meet, by using info button</td>");
tb.append("</tr>");
tb.append("</table>");
tb.append("<br><img src=\"L2UI.SquareWhite\" width=300 height=1><br>");

tb.append("<table width=285 border=0 bgcolor=000000>");
tb.append("<tr>");
tb.append("<td>");

tb.append("<font color=\"FF0000\">Not Completed</font> - achievement requirements not met.<br1>");
tb.append("<font color=\"LEVEL\">Get Reward</font> - you may receive reward, click info.<br1>");
tb.append("<font color=\"5EA82E\">Completed</font> - achievement completed, reward received.");
tb.append("</td>");
tb.append("</tr>");
tb.append("</table>");
tb.append("<br><img src=\"L2UI.SquareWhite\" width=300 height=1><br>");

tb.append("<center><button value=\"Back\" action=\"bypass -h npc_%objectId%_showMainWindow\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></center>");
tb.append("<br><br><br><br><br><br><br><br><br>");
tb.append("<table width=200 border=0 bgcolor=000000>");
tb.append("<tr>");
tb.append("<center>");
tb.append("<td width=200 align=center>Achievements Engine by <font color=LEVEL>MatimĀ®</font></td>");
tb.append("</tr>");
tb.append("</table>");

NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
msg.setHtml(tb.toString());
msg.replace("%objectId%", String.valueOf(this.getObjectId()));

player.sendPacket(msg);
}

private String getStatusString(int achievementID, L2PcInstance player)
{
if (player.getCompletedAchievements().contains(achievementID))
{
return "<font color=\"5EA82E\">Completed</font>";
}
if (AchievementsManager.getInstance().getAchievementList().get(achievementID).meetAchievementRequirements(player))
{
return "<font color=\"LEVEL\">Get Reward</font>";
}
return "<font color=\"FF0000\">Not Completed</font>";
}
}


Online G-hamsteR

  • Viscount
  • *****
    • Posts: 333
I guess this is made for Acis, because there is no L2PCInstance here.

You have to add another parameter to showAchievementInfo(int achievementID, L2PcInstance player) and make it something like this:

Code: [Select]
private void showAchievementInfo(int achievementID, L2PcInstance player, int page)
Then change achievementInfo and also pass the page to send showAchievementInfo(id, player, page);. Below is the default code.

Code: [Select]
StringTokenizer st = new StringTokenizer(command, " ");
st.nextToken();
int id = Integer.parseInt(st.nextToken());

showAchievementInfo(id, player);

Lastly, on showAchievementInfo change the bypass of the back button from action=\"bypass -h npc_%objectId%_showMyAchievements\" to showAchievements to the following:

Code: [Select]
action=\"bypass -h npc_%objectId%_showAchievements "+page+"\"


Online Strelook66

  • Knight
  • ***
    • Posts: 82
Hi,

This i tried but it doesnt work. When i hit "Get Info" the html window closes, and it throws this exception:

"Bad RequestBypassToServer: java.util.NoSuchElementException"