Сообщений: 77
Тем: 15
Зарегистрирован: Mar 2013
Репутация:
151
Ув. Кодеры/Знатоки, вот есть код (который по идеи должен персонажу выдавать N кол-во очков олимпиады, но он не работает, мб кто-то подскажет что и как)
Код
Код: else if(args[0].equals("noblese123")) {
if(!player.isNoble())
return "Вы не нублесс";
if(!checkMoney(player, _reload_pts)) // Проверяем Деньги
return "Вам необходимо иметь 5 Coin of Luck!";
try {
Class<?> clazz = Class.forName("ru.catssoftware.gameserver.model.olympiad.Olympiad"); //путь до класса Olympiad, вставьте свой
Method method1 = clazz.getDeclaredMethod("getNobleStats", int.class);
Method method2 = clazz.getDeclaredMethod("updateNobleStats", int.class, StatsSet.class);
method1.setAccessible(true);
method2.setAccessible(true);
StatsSet noble_char = (StatsSet) method1.invoke(clazz, player.getObjectId());
noble_char.set("olympiad_points", 1337);
method2.invoke(clazz, player.getObjectId(), noble_char);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return "У Вас 18 очков, удачи! Пропишите /olympiadstat";
}
При выполнение этого кода, выскакивает вот такой еррор:
Ошибка получается в 352 строка. Вот она - noble_char.set("olympiad_points", 1337);
Сборка - luc2
Сообщений: 320
Тем: 24
Зарегистрирован: Sep 2010
Репутация:
817
Bend3r Написал:Ув. Кодеры/Знатоки, вот есть код (который по идеи должен персонажу выдавать N кол-во очков олимпиады, но он не работает, мб кто-то подскажет что и как)
Код
Код: else if(args[0].equals("noblese123")) {
if(!player.isNoble())
return "Вы не нублесс";
if(!checkMoney(player, _reload_pts)) // Проверяем Деньги
return "Вам необходимо иметь 5 Coin of Luck!";
try {
Class<?> clazz = Class.forName("ru.catssoftware.gameserver.model.olympiad.Olympiad"); //путь до класса Olympiad, вставьте свой
Method method1 = clazz.getDeclaredMethod("getNobleStats", int.class);
Method method2 = clazz.getDeclaredMethod("updateNobleStats", int.class, StatsSet.class);
method1.setAccessible(true);
method2.setAccessible(true);
StatsSet noble_char = (StatsSet) method1.invoke(clazz, player.getObjectId());
noble_char.set("olympiad_points", 1337);
method2.invoke(clazz, player.getObjectId(), noble_char);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return "У Вас 18 очков, удачи! Пропишите /olympiadstat";
}
При выполнение этого кода, выскакивает вот такой еррор:
Ошибка получается в 352 строка. Вот она - noble_char.set("olympiad_points", 1337);
Сборка - luc2
Это указание выполнено? Путь до класса правильный?
[SRC="java"]Class<?> clazz = Class.forName("ru.catssoftware.gameserver.model.olympiad.Olympiad"); //путь до класса Olympiad, вставьте свой
[/SRC]
Студия L2dev.su. Сборки Lindvior, Epilogue. ICQ 1817070. Skype wowan.sm
Сообщений: 77
Тем: 15
Зарегистрирован: Mar 2013
Репутация:
151
Сообщений: 1,485
Тем: 12
Зарегистрирован: Mar 2010
Репутация:
2,994
В классе напрямую использовать метод не судьба? Надо через определение класса и метода only?
Сообщений: 77
Тем: 15
Зарегистрирован: Mar 2013
Репутация:
151
Visor Написал:В классе напрямую использовать метод не судьба? Надо через определение класса и метода only? Не все так просто.
Код: protected static synchronized void updateNobleStats(int playerId, StatsSet stats)
{
_nobles.remove(playerId);
_nobles.put(playerId, stats);
}
Сообщений: 32
Тем: 3
Зарегистрирован: Jan 2014
Репутация:
72
08-23-2014, 10:25 PM
(Сообщение последний раз редактировалось: 08-23-2014, 10:27 PM Dolwin.)
Цитата:_nobles.remove(playerId);
_nobles.put(playerId, stats);
:em::dd:
Ех.. В любом случаи - спасибо Л2 за то, что научила меня кодить)
Добавлено через 1 минуту
Покажите содержимое метода getNobleStats,
у Вас
StatsSet noble_char = (StatsSet) method1.invoke(clazz, player.getObjectId());
вернул null
Сообщений: 77
Тем: 15
Зарегистрирован: Mar 2013
Репутация:
151
private static Map<Integer, StatsSet> _nobles = new FastMap<Integer, StatsSet>();
Код: protected static StatsSet getNobleStats(int playerId)
{
return _nobles.get(playerId);
}
Сообщений: 32
Тем: 3
Зарегистрирован: Jan 2014
Репутация:
72
Bend3r Написал:Не все так просто.
Код: protected static synchronized void updateNobleStats(int playerId, StatsSet stats)
{
_nobles.remove(playerId);
_nobles.put(playerId, stats);
}
А в чем проблема вызвать напрямую?)
Типа Olympiad.getNobleStats(id)
Сообщений: 77
Тем: 15
Зарегистрирован: Mar 2013
Репутация:
151
08-23-2014, 10:32 PM
(Сообщение последний раз редактировалось: 08-23-2014, 10:34 PM Bend3r.)
Вообще я в java код плохо понимаю. Создать прототип класса Olympiad, я не могу т.к "public final class Olympiad". И вообще мне этот когда писал один человек с этого форума за 600 рублей, но он не работает и человек молчит.
Добавлено через 1 минуту
Если кто-то хочет помочь мне с кодом и заработать на пиво то пишите.
icq - 596502
Сообщений: 466
Тем: 10
Зарегистрирован: Dec 2012
Репутация:
398
08-23-2014, 10:41 PM
(Сообщение последний раз редактировалось: 08-23-2014, 10:55 PM Daan Raven.)
Если не ошибаюсь, вызов Class<?> clazz = Class.forName("blablabla"); используется классов, которые компилируются и загружаются в память при запуске гса. То есть, если класс находится в скомпилированной сборке в виде скомпилированного класса (тобишь в jar-файлах) - используется обычный import, если же класс находится в виде исходника (в основном по пути gameserver/data/scripts/..), то используется создание объекта Class<?>.
Добавлено через 9 минут
Как-то так в общем:
[src='java']
import ... тут всякие импорты
import ru.catssoftware.gameserver.model.olympiad.Olympiad;
... какой-то код
else if(args[0].equals("noblese123")) {
if(!player.isNoble())
return "Вы не нублесс";
if(!checkMoney(player, _reload_pts)) // Проверяем Деньги
return "Вам необходимо иметь 5 Coin of Luck!";
Olympiad oly;
StatsSet noble_char = (StatsSet) oly.getNobleStats(player.getObjectId);
noble_char.set("olympiad_points", 1337);
oly.updateNobleStats(player.getObjectId(), noble_char);
return "У Вас 18 очков, удачи! Пропишите /olympiadstat";
}
[/src]
|