Сообщений: 32
Тем: 5
Зарегистрирован: Jul 2012
Репутация:
0
Опять же всем привет!) Трабла у меня такая: в конфиге включил автоизучение скиллов, перезагрузил сервер, скиллы учатся, НО, например, если я качнусь с 39lvl по 50lvl и возьму вторую профу, то скилы, которые должны появиться после второй профы и на 50lvl - не учатся автоматически. Мне нужно, чтобы скиллы учились автоматом.
ЗЫ. Профа берется В Community / Сборка Maddev Epilogue
Сообщений: 327
Тем: 9
Зарегистрирован: Apr 2012
Репутация:
1,457
Известная проблема, подними уровень до 51 или сделай релог.
Если такое не устраивает - перепиши кусок системы...
Сообщений: 5,670
Тем: 145
Зарегистрирован: Nov 2008
Репутация:
33,771
После взятия профы добавить вызов метода updateSkillList().
Сообщений: 32
Тем: 5
Зарегистрирован: Jul 2012
Репутация:
0
[STIGMATED];219135 Написал:После взятия профы добавить вызов метод updateSkillList().
Если не трудно, то подскажите как.
Сообщений: 5,670
Тем: 145
Зарегистрирован: Nov 2008
Репутация:
33,771
Отследите путь взятия профы в класс L2Player и там поставьте updateSkillList().
Под рукой нет исходников фени, не согу точнее подсказать.
Сообщений: 32
Тем: 5
Зарегистрирован: Jul 2012
Репутация:
0
Вот код ClassBBSManager.java, думаю где-то здесь:
код
Код: package l2p.gameserver.communitybbs.Manager;
import javolution.text.TextBuilder;
import l2p.Config;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.base.ClassId;
import l2p.gameserver.model.items.L2ItemInstance;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.tables.ItemTable;
import l2p.gameserver.templates.L2Item;
import l2p.util.Files;
import l2p.util.Util;
import java.util.StringTokenizer;
public class ClassBBSManager extends BaseBBSManager
{
private static ClassBBSManager _Instance = null;
public static ClassBBSManager getInstance()
{
if(_Instance == null)
{
_Instance = new ClassBBSManager();
}
return _Instance;
}
@Override
public void parsecmd(String command, L2Player activeChar)
{
ClassId classId = activeChar.getClassId();
int jobLevel = classId.getLevel();
int level = activeChar.getLevel();
TextBuilder html = new TextBuilder("");
html.append("<br>");
html.append("<table width=600>");
html.append("<tr><td>");
if(Config.ALLOW_CLASS_MASTERS_LIST.isEmpty() || !Config.ALLOW_CLASS_MASTERS_LIST.contains(jobLevel))
{
jobLevel = 4;
}
if((level >= 20 && jobLevel == 1 || level >= 40 && jobLevel == 2 || level >= 76 && jobLevel == 3) && Config.ALLOW_CLASS_MASTERS_LIST.contains(jobLevel))
{
L2Item item = ItemTable.getInstance().getTemplate(Config.CLASS_MASTERS_PRICE_ITEM);
html.append("Вы должны заплатить: <font color=\"LEVEL\">");
html.append(Util.formatAdena(Config.CLASS_MASTERS_PRICE_LIST[jobLevel])).append("</font> <font color=\"LEVEL\">").append(item.getName()).append("</font> для смены профессии<br>");
html.append("<center><table width=600><tr>");
for(ClassId cid : ClassId.values())
{
if(cid == ClassId.inspector)
{
continue;
}
if(cid.childOf(classId) && cid.level() == classId.level() + 1)
{
html.append("<td><center><button value=\"").append(cid.name()).append("\" action=\"bypass -h _bbsclass;change_class;").append(cid.getId()).append(";").append(Config.CLASS_MASTERS_PRICE_LIST[jobLevel]).append("\" width=150 height=25 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_CT1.Button_DF\"></center></td>");
}
}
html.append("</tr></table></center>");
html.append("</td>");
html.append("</tr>");
html.append("</table>");
}
else
{
switch(jobLevel)
{
case 1:
html.append("Приветствую <font color=F2C202>").append(activeChar.getName()).append("</font> ваша текущая профессия <font color=F2C202>").append(activeChar.getClassId().name()).append("</font><br>");
html.append("Для того чтобы сменить вашу профессию вы должны достичь: <font color=F2C202>20-го уровня</font><br>");
html.append("Для активации сабклассов вы должны достичь <font color=F2C202>76-го уровня</font><br>");
html.append("Чтобы стать дворянином вы должны прокачать сабкласс до <font color=F2C202>76-го уровня</font><br>");
break;
case 2:
html.append("Приветствую <font color=F2C202>").append(activeChar.getName()).append("</font> ваша текущая профессия <font color=F2C202>").append(activeChar.getClassId().name()).append("</font><br>");
html.append("Для того чтобы сменить вашу профессию вы должны достичь: <font color=F2C202>40-го уровня</font><br>");
html.append("Для активации сабклассов вы должны достичь <font color=F2C202>76-го уровня</font><br>");
html.append("Чтобы стать дворянином вы должны прокачать сабкласс до <font color=F2C202>76-го уровня</font><br>");
break;
case 3:
html.append("Приветствую <font color=F2C202>").append(activeChar.getName()).append("</font> ваша текущая профессия <font color=F2C202>").append(activeChar.getClassId().name()).append("</font><br>");
html.append("Для того чтобы сменить вашу профессию вы должны достичь: <font color=F2C202>76-го уровня</font><br>");
html.append("Для активации сабклассов вы должны достичь <font color=F2C202>76-го уровня</font><br>");
html.append("Чтобы стать дворянином вы должны прокачать сабкласс до <font color=F2C202>76-го уровня</font><br>");
break;
case 4:
html.append("Приветствую <font color=F2C202>").append(activeChar.getName()).append("</font> ваша текущая профессия <font color=F2C202>").append(activeChar.getClassId().name()).append("</font><br>");
html.append("Для вас больше нет доступных профессий, либо Класс мастер в данный момент недоступен.<br>");
if(level >= 76)
{
html.append("Вы достигли <font color=F2C202>76-го уровня</font> активация сабклассов теперь доступна<br>");
if(!activeChar.isNoble())
{
html.append("Вы можете получить дворянство. Посетите раздел 'Магазин'.<br>");
}
else
{
html.append("Вы уже дворянин. Получение дворянства более не доступно.<br>");
}
}
break;
}
}
String content = Files.read("data/html/CommunityBoardPVP/80.htm");
content = content.replace("%classmaster%", html.toString());
separateAndSend(content, activeChar);
if(command.startsWith("_bbsclass;change_class;"))
{
StringTokenizer st = new StringTokenizer(command, ";");
st.nextToken();
st.nextToken();
short val = Short.parseShort(st.nextToken());
int price = Integer.parseInt(st.nextToken());
L2Item item = ItemTable.getInstance().getTemplate(Config.CLASS_MASTERS_PRICE_ITEM);
L2ItemInstance pay = activeChar.getInventory().getItemByItemId(item.getItemId());
if(pay != null && pay.getCount() >= price)
{
activeChar.getInventory().destroyItem(pay, (long) price, true);
changeClass(activeChar, val);
parsecmd("_bbsclass;", activeChar);
}
else if(Config.CLASS_MASTERS_PRICE_ITEM == 57)
{
activeChar.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ADENA));
}
else
{
activeChar.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ADENA));
}
}
}
private void changeClass(L2Player player, int val)
{
if(player.getClassId().getLevel() == 3)
{
player.sendPacket(Msg.YOU_HAVE_COMPLETED_THE_QUEST_FOR_3RD_OCCUPATION_CHANGE_AND_MOVED_TO_ANOTHER_CLASS_CONGRATULATIONS); // для 3 профы
}
else
{
player.sendPacket(Msg.CONGRATULATIONS_YOU_HAVE_TRANSFERRED_TO_A_NEW_CLASS);
} // для 1 и 2 профы
player.setClassId(val, false);
player.broadcastUserInfo(true);
}
@Override
public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2Player activeChar)
{}
}
Сообщений: 5,670
Тем: 145
Зарегистрирован: Nov 2008
Репутация:
33,771
Идите в метод setClassId в классе L2Player и ставьте апдейтскиллист.
Сообщений: 4,694
Тем: 85
Зарегистрирован: Mar 2009
Репутация:
23,364
Код: package l2p.gameserver.communitybbs.Manager;
import javolution.text.TextBuilder;
import l2p.Config;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.base.ClassId;
import l2p.gameserver.model.items.L2ItemInstance;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.tables.ItemTable;
import l2p.gameserver.templates.L2Item;
import l2p.util.Files;
import l2p.util.Util;
import java.util.StringTokenizer;
public class ClassBBSManager extends BaseBBSManager
{
private static ClassBBSManager _Instance = null;
public static ClassBBSManager getInstance()
{
if(_Instance == null)
{
_Instance = new ClassBBSManager();
}
return _Instance;
}
@Override
public void parsecmd(String command, L2Player activeChar)
{
ClassId classId = activeChar.getClassId();
int jobLevel = classId.getLevel();
int level = activeChar.getLevel();
TextBuilder html = new TextBuilder("");
html.append("<br>");
html.append("<table width=600>");
html.append("<tr><td>");
if(Config.ALLOW_CLASS_MASTERS_LIST.isEmpty() || !Config.ALLOW_CLASS_MASTERS_LIST.contains(jobLevel))
{
jobLevel = 4;
}
if((level >= 20 && jobLevel == 1 || level >= 40 && jobLevel == 2 || level >= 76 && jobLevel == 3) && Config.ALLOW_CLASS_MASTERS_LIST.contains(jobLevel))
{
L2Item item = ItemTable.getInstance().getTemplate(Config.CLASS_MASTERS_PRICE_ITEM);
html.append("Вы должны заплатить: <font color=\"LEVEL\">");
html.append(Util.formatAdena(Config.CLASS_MASTERS_PRICE_LIST[jobLevel])).append("</font> <font color=\"LEVEL\">").append(item.getName()).append("</font> для смены профессии<br>");
html.append("<center><table width=600><tr>");
for(ClassId cid : ClassId.values())
{
if(cid == ClassId.inspector)
{
continue;
}
if(cid.childOf(classId) && cid.level() == classId.level() + 1)
{
html.append("<td><center><button value=\"").append(cid.name()).append("\" action=\"bypass -h _bbsclass;change_class;").append(cid.getId()).append(";").append(Config.CLASS_MASTERS_PRICE_LIST[jobLevel]).append("\" width=150 height=25 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_CT1.Button_DF\"></center></td>");
}
}
html.append("</tr></table></center>");
html.append("</td>");
html.append("</tr>");
html.append("</table>");
}
else
{
switch(jobLevel)
{
case 1:
html.append("Приветствую <font color=F2C202>").append(activeChar.getName()).append("</font> ваша текущая профессия <font color=F2C202>").append(activeChar.getClassId().name()).append("</font><br>");
html.append("Для того чтобы сменить вашу профессию вы должны достичь: <font color=F2C202>20-го уровня</font><br>");
html.append("Для активации сабклассов вы должны достичь <font color=F2C202>76-го уровня</font><br>");
html.append("Чтобы стать дворянином вы должны прокачать сабкласс до <font color=F2C202>76-го уровня</font><br>");
break;
case 2:
html.append("Приветствую <font color=F2C202>").append(activeChar.getName()).append("</font> ваша текущая профессия <font color=F2C202>").append(activeChar.getClassId().name()).append("</font><br>");
html.append("Для того чтобы сменить вашу профессию вы должны достичь: <font color=F2C202>40-го уровня</font><br>");
html.append("Для активации сабклассов вы должны достичь <font color=F2C202>76-го уровня</font><br>");
html.append("Чтобы стать дворянином вы должны прокачать сабкласс до <font color=F2C202>76-го уровня</font><br>");
break;
case 3:
html.append("Приветствую <font color=F2C202>").append(activeChar.getName()).append("</font> ваша текущая профессия <font color=F2C202>").append(activeChar.getClassId().name()).append("</font><br>");
html.append("Для того чтобы сменить вашу профессию вы должны достичь: <font color=F2C202>76-го уровня</font><br>");
html.append("Для активации сабклассов вы должны достичь <font color=F2C202>76-го уровня</font><br>");
html.append("Чтобы стать дворянином вы должны прокачать сабкласс до <font color=F2C202>76-го уровня</font><br>");
break;
case 4:
html.append("Приветствую <font color=F2C202>").append(activeChar.getName()).append("</font> ваша текущая профессия <font color=F2C202>").append(activeChar.getClassId().name()).append("</font><br>");
html.append("Для вас больше нет доступных профессий, либо Класс мастер в данный момент недоступен.<br>");
if(level >= 76)
{
html.append("Вы достигли <font color=F2C202>76-го уровня</font> активация сабклассов теперь доступна<br>");
if(!activeChar.isNoble())
{
html.append("Вы можете получить дворянство. Посетите раздел 'Магазин'.<br>");
}
else
{
html.append("Вы уже дворянин. Получение дворянства более не доступно.<br>");
}
}
break;
}
}
String content = Files.read("data/html/CommunityBoardPVP/80.htm");
content = content.replace("%classmaster%", html.toString());
separateAndSend(content, activeChar);
if(command.startsWith("_bbsclass;change_class;"))
{
StringTokenizer st = new StringTokenizer(command, ";");
st.nextToken();
st.nextToken();
short val = Short.parseShort(st.nextToken());
int price = Integer.parseInt(st.nextToken());
L2Item item = ItemTable.getInstance().getTemplate(Config.CLASS_MASTERS_PRICE_ITEM);
L2ItemInstance pay = activeChar.getInventory().getItemByItemId(item.getItemId());
if(pay != null && pay.getCount() >= price)
{
activeChar.getInventory().destroyItem(pay, (long) price, true);
changeClass(activeChar, val);
parsecmd("_bbsclass;", activeChar);
}
else if(Config.CLASS_MASTERS_PRICE_ITEM == 57)
{
activeChar.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ADENA));
}
else
{
activeChar.sendPacket(new SystemMessage(SystemMessage.YOU_DO_NOT_HAVE_ENOUGH_ADENA));
}
}
}
private void changeClass(L2Player player, int val)
{
if(player.getClassId().getLevel() == 3)
{
player.sendPacket(Msg.YOU_HAVE_COMPLETED_THE_QUEST_FOR_3RD_OCCUPATION_CHANGE_AND_MOVED_TO_ANOTHER_CLASS_CONGRATULATIONS); // для 3 профы
}
else
{
player.sendPacket(Msg.CONGRATULATIONS_YOU_HAVE_TRANSFERRED_TO_A_NEW_CLASS);
} // для 1 и 2 профы
player.setClassId(val, false);
player.broadcastUserInfo(true);
[color=Red]player.updateSkillList();[/color]
}
@Override
public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2Player activeChar)
{}
}
Fortuna - non penis, in manus non recipe.
Сообщений: 32
Тем: 5
Зарегистрирован: Jul 2012
Репутация:
0
Ashe, не компилится:
Код: Compile:
[delete] Deleting directory d:\dev\eclipse_core_2\L2md\build2
[mkdir] Created dir: d:\dev\eclipse_core_2\L2md\build2
[mkdir] Created dir: d:\dev\eclipse_core_2\L2md\build2\classes
[javac] Compiling 1622 source files to d:\dev\eclipse_core_2\L2md\build2\classes
[javac] d:\dev\eclipse_core_2\L2md\source\l2p\gameserver\communitybbs\Manager\ClassBBSManager.java:147: cannot find symbol
[javac] symbol : method updateSkillList()
[javac] location: class l2p.gameserver.model.L2Player
[javac] player.updateSkillList();
[javac] ^
[javac] 1 error
BUILD FAILED
d:\dev\eclipse_core_2\L2md\OnlyCore.xml:31: Compile failed; see the compiler error output for details.
Total time: 59 seconds
Сообщений: 4,694
Тем: 85
Зарегистрирован: Mar 2009
Репутация:
23,364
Так и думал. С методом промахнулись, так что смотрите сами.
Fortuna - non penis, in manus non recipe.
|