03-25-2012, 08:25 AM
Создаю новую ветку скилов, похожую на Fishing_skill_trees.
1) Сделал L2AttributeSkillLearn.java, внес туда это:
2) в SkillTreeTable.java внес это:
3) Создал новый инстанс аля вот
4) Создал attribute_skill_trees.sql
5) Создал .xml с новыми скилами/атрибутами
6) Создал html
Подхожу к тренеру, скил есть, все в ажуре, пытаюсь его изучить и мне выводится сообщение:
из RequestAquireSkill.java
В чем я оплошал? где мои кривые грабли не грабили?
1) Сделал L2AttributeSkillLearn.java, внес туда это:
Код:
public final class L2AttributeSkillLearn
{
// these two build the primary key
private final int _id;
private final int _level;
// not needed, just for easier debug
private final String _name;
private final int _spCost;
private final int _minLevel;
private final int _costid;
private final int _costcount;
public L2AttributeSkillLearn(int id, int lvl, int minLvl, String name, int cost, int costid, int costcount)
{
_id = id;
_level = lvl;
_minLevel = minLvl;
_name = name.intern();
_spCost = cost;
_costid = costid;
_costcount = costcount;
}
/**
* @return Returns the id.
*/
public int getId()
{
return _id;
}
/**
* @return Returns the level.
*/
public int getLevel()
{
return _level;
}
/**
* @return Returns the minLevel.
*/
public int getMinLevel()
{
return _minLevel;
}
/**
* @return Returns the name.
*/
public String getName()
{
return _name;
}
/**
* @return Returns the spCost.
*/
public int getSpCost()
{
return _spCost;
}
public int getIdCost()
{
return _costid;
}
public int getCostCount()
{
return _costcount;
}
}
2) в SkillTreeTable.java внес это:
Код:
int count6 = 0;
try
{
_attributeSkillTrees = new FastList<L2AttributeSkillLearn>();
PreparedStatement statement = con.prepareStatement("SELECT skill_id, level, name, min_level, sp, itemid, count FROM attribute_skill_trees ORDER BY skill_id, level");
ResultSet skilltree5 = statement.executeQuery();
int prevSkillId = -1;
while (skilltree5.next())
{
int id = skilltree5.getInt("skill_id");
int lvl = skilltree5.getInt("level");
String name = skilltree5.getString("name");
int minLvl = skilltree5.getInt("min_level");
int cost = skilltree5.getInt("sp");
int itemId = skilltree5.getInt("itemId");
int itemCount = skilltree5.getInt("count");
if (prevSkillId != id)
prevSkillId = id;
L2AttributeSkillLearn skill = new L2AttributeSkillLearn(id, lvl, minLvl, name, cost, itemId, itemCount);
_attributeSkillTrees.add(skill);
}
skilltree5.close();
statement.close();
count6 = _attributeSkillTrees.size();
}
catch(Exception e)
{
_log.severe("Error while creating attribute skill table"+" "+ e);
}
3) Создал новый инстанс аля вот
Код:
public class L2MasterInstance extends L2FolkInstance
{
/**
* @param objectId
* @param template
*/
public L2MasterInstance(int objectId, L2NpcTemplate template)
{
super(objectId, template);
}
@Override
public String getHtmlPath(int npcId, int val)
{
String pom = "";
if (val == 0)
pom = "" + npcId;
else
pom = npcId + "-" + val;
return "data/html/attribute/" + pom + ".htm";
}
private void showBuyWindow(L2PcInstance player, int val)
{
double taxRate = 0;
if (getIsInTown()) taxRate = getCastle().getTaxRate();
player.tempInvetoryDisable();
if (Config.DEBUG) _log.fine("Showing buylist");
L2TradeList list = TradeController.getInstance().getBuyList(val);
if (list != null && list.getNpcId().equals(String.valueOf(getNpcId())))
{
BuyList bl = new BuyList(list, player.getAdena(), taxRate);
player.sendPacket(bl);
}
else
{
_log.warning("possible client hacker: " + player.getName()
+ " attempting to buy from GM shop! < Ban him!");
_log.warning("buylist id:" + val);
}
player.sendPacket(new ActionFailed());
}
private void showSellWindow(L2PcInstance player)
{
if (Config.DEBUG) _log.fine("Showing selllist");
player.sendPacket(new SellList(player));
if (Config.DEBUG) _log.fine("Showing sell window");
player.sendPacket(new ActionFailed());
}
@Override
public void onBypassFeedback(L2PcInstance player, String command)
{
if (command.startsWith("AttributeSkillList"))
{
player.setSkillLearningClassId(player.getClassId());
showAttributeSkillList(player);
}
StringTokenizer st = new StringTokenizer(command, " ");
String command2 = st.nextToken();
if (command2.equalsIgnoreCase("Buy"))
{
if (st.countTokens() < 1) return;
int val = Integer.parseInt(st.nextToken());
showBuyWindow(player, val);
}
else if (command2.equalsIgnoreCase("Sell"))
{
showSellWindow(player);
}
else
{
super.onBypassFeedback(player, command);
}
}
public void showAttributeSkillList(L2PcInstance player)
{
L2AttributeSkillLearn[] skills = SkillTreeTable.getInstance().getAvailableAttributeSkills(player);
AquireSkillList asl = new AquireSkillList(AquireSkillList.skillType.Fishing);
int counts = 0;
for (L2AttributeSkillLearn s : skills)
{
L2Skill sk = SkillTable.getInstance().getInfo(s.getId(), s.getLevel());
if (sk == null)
continue;
counts++;
asl.addSkill(s.getId(), s.getLevel(), s.getLevel(), s.getSpCost(), 1);
}
if (counts == 0)
{
NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
int minlevel = SkillTreeTable.getInstance().getMinLevelForNewSkill(player);
if (minlevel > 0)
{
// No more skills to learn, come back when you level.
SystemMessage sm = new SystemMessage(SystemMessageId.DO_NOT_HAVE_FURTHER_SKILLS_TO_LEARN);
sm.addNumber(minlevel);
player.sendPacket(sm);
}
else
{
TextBuilder sb = new TextBuilder();
sb.append("<html><head><body>");
sb.append("Вы изучили все атрибуты.<br>");
sb.append("</body></html>");
html.setHtml(sb.toString());
player.sendPacket(html);
}
}
else
{
player.sendPacket(asl);
}
player.sendPacket(new ActionFailed());
}
}
4) Создал attribute_skill_trees.sql
5) Создал .xml с новыми скилами/атрибутами
6) Создал html
Подхожу к тренеру, скил есть, все в ажуре, пытаюсь его изучить и мне выводится сообщение:
Код:
if(counts == 0)
{
player.sendMessage("Нельзя изучить");
return;
}
из RequestAquireSkill.java
В чем я оплошал? где мои кривые грабли не грабили?