Space 206 Опубликовано 22 июня, 2013 Всем привет. Настроил все эвенты в конфиге Team vs Team, CTF и др. но не нашёл настройку GvG Эвента. Настройка в ядре? Или я ошибаюсь? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
guruw 34 Опубликовано 22 июня, 2013 Всем привет. Настроил все эвенты в конфиге Team vs Team, CTF и др. но не нашёл настройку GvG Эвента. Настройка в ядре? Или я ошибаюсь? сборка Trasken? скорее всего конфиг ГвГ выведен в event.ini (или что то подобное) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Space 206 Опубликовано 22 июня, 2013 Да сборка Trasken Tauti. Увы нету в конфиге. # ------------------------------------------------------------------------------------------------------------------- # Coffer Of Shadows # ------------------------------------------------------------------------------------------------------------------- # Рейт на цену сундучков (по умолчанию для х1 - 50к) CofferOfShadowsPriceRate = 1. # Рейт на награды, вещественное число (раньше было эквивалентно RateDropItems) CofferOfShadowsRewardRate = 1. # ------------------------------------------------------------------------------------------------------------------- # Мастер заточки # ------------------------------------------------------------------------------------------------------------------- # Шанс заточки Staff of Master Yogi MasterYogiEnchantChance = 66 # Максимальная заточка Staff of Master Yogi MasterYogiEnchantMaxWeapon = 28 # Безопасная заточка Staff of Master Yogi MasterYogiSafeEnchant = 3 # ------------------------------------------------------------------------------------------------------------------- # April Fool's # ------------------------------------------------------------------------------------------------------------------- # Шанс дропа веспер хербов (по умолчанию 50 - 5%) AprilFollsDropChance = 50 # ------------------------------------------------------------------------------------------------------------------- # Последний герой # ------------------------------------------------------------------------------------------------------------------- # Включен ли эвент LastHeroEnabled=true # Награда - ID вещи LastHero_bonus_id = 4037 # Количество вещей за каждого убитого # Если число не целое, то при выдаче награды производится округление в большую сторону. LastHero_bonus_count = 1. # Домножать на лвл убитого? LastHero_rate = True # Количество вещей, получаемых выжившим(ми) чаром(ами) по окончании эвента LastHero_bonus_count_final = 5. # Домножать на лвл награждаемого? LastHero_rate_final = True # Время до старта LastHero_time = 10 # Шанс запуска, проверяется каждый час LastHero_ChanceToStart = 20 # ------------------------------------------------------------------------------------------------------------------- # Команда против команды # ------------------------------------------------------------------------------------------------------------------- # Включен ли эвент TvTEnabled=true # ID вещи за каждого убитого TvT_bonus_id = 4037 # Количество вещи за каждого убитого # Если число не целое, то при выдаче награды производится округление в большую сторону. TvT_bonus_count = 2. # Домножать на лвл чара? TvT_rate = true # Время до старта TvT_time = 10 # Шанс запуска, проверяется каждый час TvT_ChanceToStart = 20 # ------------------------------------------------------------------------------------------------------------------- # Захват флага # ------------------------------------------------------------------------------------------------------------------- # Включен ли эвент CtFEnabled=true # ID вещи за каждого убитого CtF_bonus_id = 57 # Количество вещи за каждого убитого # Если число не целое, то при выдаче награды производится округление в большую сторону. CtF_bonus_count = 1. # Домножать на лвл чара? CtF_rate = false # Время до старта CtF_time = 5 # Шанс запуска, проверяется каждый час CtF_ChanceToStart = 15 # ------------------------------------------------------------------------------------------------------------------- # Эвент с тыквами # ------------------------------------------------------------------------------------------------------------------- # Шанс дропа пыльцы TFH_POLLEN_CHANCE = 20. # ------------------------------------------------------------------------------------------------------------------- # Медальки # ------------------------------------------------------------------------------------------------------------------- # Шанс дропа простых медалек MEDAL_CHANCE = 10. # Щанс дропа сверкающих медалек GLITTMEDAL_CHANCE = 0.1 # ------------------------------------------------------------------------------------------------------------------- # День L2 # ------------------------------------------------------------------------------------------------------------------- # Шанс выпадения букв, double, по умолчанию = 1. L2DAY_LETTER_CHANCE = 1. # ------------------------------------------------------------------------------------------------------------------- # День Святого Валентина # ------------------------------------------------------------------------------------------------------------------- # Шанс выпадения сердечек, double, по умолчанию 5. = 5% EVENT_CHANGE_OF_HEART_CHANCE = 5. # ------------------------------------------------------------------------------------------------------------------- # Задания .gettask # ------------------------------------------------------------------------------------------------------------------- BountyHuntersEnabled = false # ------------------------------------------------------------------------------------------------------------------- # Saving Snowman # ------------------------------------------------------------------------------------------------------------------- # Стоимость участия в лотерее, для х1 рекомендуется цена в 50к аден. SavingSnowmanLoteryPrice = 50000 # Вероятность появления санты на санях (целое число) # по умолчанию 2/1000 - санта появляется на каждом 500м мобе. # 1000 - 100% шанс SavingSnowmanRewarderChance = 2 # ------------------------------------------------------------------------------------------------------------------- # 8 Марта # ------------------------------------------------------------------------------------------------------------------- # Шанс дропа частей для крафта (по умолчанию 10 = 1%) March8DropChance = 10. # Рейт стоимости рецептов. По умолчанию: 50к аден для х1 March8PriceRate = 1. # ------------------------------------------------------------------------------------------------------------------- # Trick Of Transmutation # ------------------------------------------------------------------------------------------------------------------- # Шанс дропа ключей с мобов (по умолчанию 10. = 1%) TRICK_OF_TRANS_CHANCE = 10. Где может находится еще настройка? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Space 206 Опубликовано 22 июня, 2013 (изменено) Вот нашёл тут небольшую настройку: D:\server\gameserver\data\scripts\events\GvG файл GvG.java package events.GvG; import instances.GvGInstance; import trs.commons.dbutils.DbUtils; import trs.commons.lang.reference.HardReference; import trs.commons.lang.reference.HardReferences; import trs.commons.threading.RunnableImpl; import trs.commons.util.Rnd; import trs.gameserver.Announcements; import trs.gameserver.ThreadPoolManager; import trs.gameserver.data.xml.holder.InstantZoneHolder; import trs.gameserver.data.xml.holder.ResidenceHolder; import trs.gameserver.database.DatabaseFactory; import trs.gameserver.instancemanager.ServerVariables; import trs.gameserver.model.general.Player; import trs.gameserver.model.base.TeamType; import trs.gameserver.model.entity.olympiad.Olympiad; import trs.gameserver.model.entity.residence.Castle; import trs.gameserver.scripts.Functions; import trs.gameserver.scripts.ScriptFile; import trs.gameserver.templates.InstantZone; import trs.gameserver.utils.Location; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.Calendar; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ScheduledFuture; /** * Глобальный класс предварительного этапа GvG турнира * * @author pchayka */ public class GvG extends Functions implements ScriptFile { private static final Logger _log = LoggerFactory.getLogger(GvG.class); public static final Location TEAM1_LOC = new Location(139736, 145832, -15264); // Team location after teleportation public static final Location TEAM2_LOC = new Location(139736, 139832, -15264); public static final Location RETURN_LOC = new Location(43816, -48232, -822); public static final int[] everydayStartTime = { 21, 30, 00 }; // hh mm ss private static boolean _active = false; private static boolean _isRegistrationActive = false; private static int _minLevel = 1; private static int _maxLevel = 99; private static int _groupsLimit = 100; // Limit of groups can register private static int _minPartyMembers = 2; // self-explanatory private static long regActiveTime = 10 * 60 * 1000L; // Timelimit for registration private static ScheduledFuture<?> _globalTask; private static ScheduledFuture<?> _regTask; private static ScheduledFuture<?> _countdownTask1; private static ScheduledFuture<?> _countdownTask2; private static ScheduledFuture<?> _countdownTask3; private static List<HardReference<Player>> leaderList = new CopyOnWriteArrayList<HardReference<Player>>(); public static class RegTask extends RunnableImpl { @Override public void runImpl() throws Exception { prepare(); } } public static class Countdown extends RunnableImpl { int _timer; public Countdown(int timer) { _timer = timer; } @Override public void runImpl() throws Exception { Announcements.getInstance().announceToAll("GvG: До конца приема заявок на турнир осталось " + Integer.toString(_timer) + " мин."); } } @Override public void onLoad() { _log.info("Loaded Event: GvG"); initTimer(); } @Override public void onReload() { } @Override public void onShutdown() { } private static void initTimer() { long day = 24 * 60 * 60 * 1000L; Calendar ci = Calendar.getInstance(); ci.set(Calendar.HOUR_OF_DAY, everydayStartTime[0]); ci.set(Calendar.MINUTE, everydayStartTime[1]); ci.set(Calendar.SECOND, everydayStartTime[2]); long delay = ci.getTimeInMillis() - System.currentTimeMillis(); if (delay < 0) { delay = delay + day; } if (_globalTask != null) { _globalTask.cancel(true); } _globalTask = ThreadPoolManager.getInstance().scheduleAtFixedRate(new Launch(), delay, day); } public static class Launch extends RunnableImpl { @Override public void runImpl() { activateEvent(); } } private static boolean canBeStarted() { for (Castle c : ResidenceHolder.getInstance().getResidenceList(Castle.class)) { if ((c.getSiegeEvent() != null) && c.getSiegeEvent().isInProgress()) { return false; } } return true; } private static boolean isActive() { return _active; } public static void activateEvent() { if (!isActive() && canBeStarted()) { _regTask = ThreadPoolManager.getInstance().schedule(new RegTask(), regActiveTime); if (regActiveTime > 2 * 60 * 1000L) // display countdown announcements only when timelimit for registration is more than 3 mins { if (regActiveTime > 5 * 60 * 1000L) { _countdownTask3 = ThreadPoolManager.getInstance().schedule(new Countdown(5), regActiveTime - 300 * 1000); } _countdownTask1 = ThreadPoolManager.getInstance().schedule(new Countdown(2), regActiveTime - 120 * 1000); _countdownTask2 = ThreadPoolManager.getInstance().schedule(new Countdown(1), regActiveTime - 60 * 1000); } ServerVariables.set("GvG", "on"); _log.info("Event 'GvG' activated."); Announcements.getInstance().announceToAll("Регистрация на GvG турнир началась! Community Board(Alt+ -> Эвенты -> GvG (регистрация группы, описание)"); Announcements.getInstance().announceToAll("Заявки принимаются в течение " + regActiveTime / 60000 + " минут"); _active = true; _isRegistrationActive = true; } } /** * Cancels the event during registration time */ public static void deactivateEvent() { if (isActive()) { stopTimers(); ServerVariables.unset("GvG"); _log.info("Event 'GvG' canceled."); Announcements.getInstance().announceToAll("GvG: Турнир отменен"); _active = false; _isRegistrationActive = false; leaderList.clear(); } } /** * Shows groups and their leaders who's currently in registration list */ public void showStats() { Player player = getSelf(); if (!player.getPlayerAccess().IsEventGm) { return; } if (!isActive()) { player.sendMessage("GvG event is not launched"); return; } StringBuilder string = new StringBuilder(); String refresh = "<button value=\"Refresh\" action=\"bypass -h scripts_events.GvG.GvG:showStats\" width=60 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; String start = "<button value=\"Start Now\" action=\"bypass -h scripts_events.GvG.GvG:startNow\" width=60 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"; int i = 0; if (!leaderList.isEmpty()) { for (Player leader : HardReferences.unwrap(leaderList)) { if (!leader.isInParty()) { continue; } string.append("*").append(leader.getName()).append("*").append(" | group members: ").append(leader.getParty().getMemberCount()).append("\n\n"); i++; } show("There are " + i + " group leaders who registered for the event:\n\n" + string + "\n\n" + refresh + "\n\n" + start, player, null); } else { show("There are no participants at the time\n\n" + refresh, player, null); } } public void startNow() { Player player = getSelf(); if (!player.getPlayerAccess().IsEventGm) { return; } if (!isActive() || !canBeStarted()) { player.sendMessage("GvG event is not launched"); return; } prepare(); } /** * Handles the group applications and apply restrictions */ public void addGroup() { Player player = getSelf(); if (player == null) { return; } if (!_isRegistrationActive) { player.sendMessage("GvG турнир неактивен."); return; } if (leaderList.contains(player.getRef())) { player.sendMessage("Вы уже зарегистрировались на GvG турнир"); return; } if (!player.isInParty()) { player.sendMessage("Вы не состоите в группе и не можете подать заявку"); return; } if (!player.getParty().isLeader(player)) { player.sendMessage("Только лидер группы может подать заявку"); return; } if (player.getParty().isInCommandChannel()) { player.sendMessage("Чтобы участвовать в турнире вы должны покинуть Командный Канал"); return; } if (leaderList.size() >= _groupsLimit) { player.sendMessage("Достигнут лимит количества групп для участия в турнире. Заявка отклонена"); return; } List<Player> party = player.getParty().getPartyMembers(); String[] abuseReason = { "не находится в игре", "не находится в группе", "состоит в неполной группе. Минимальное кол-во членов группы - 6.", "не является лидером группы, подававшей заявку", "не соответствует требованиям уровней для турнира", "использует ездовое животное, что противоречит требованиям турнира", "находится в дуэли, что противоречит требованиям турнира", "принимает участие в другом эвенте, что противоречит требованиям турнира", "находится в списке ожидания Олимпиады или принимает участие в ней", "находится в состоянии телепортации, что противоречит требованиям турнира", "находится в Dimensional Rift, что противоречит требованиям турнира", "обладает Проклятым Оружием, что противоречит требованиям турнира", "не находится в мирной зоне", "находится в режиме обозревания", }; for (Player eachmember : party) { int abuseId = checkPlayer(eachmember, false); if (abuseId != 0) { player.sendMessage("Игрок " + eachmember.getName() + " " + abuseReason[abuseId - 1]); return; } } leaderList.add(player.getRef()); player.getParty().broadcastMessageToPartyMembers("Ваша группа внесена в список ожидания. Пожалуйста, не регистрируйтесь в других ивентах и не участвуйте в дуэлях до начала турнира. Полный список требований турнира в Community Board (Alt+ "); } private static void stopTimers() { if (_regTask != null) { _regTask.cancel(false); _regTask = null; } if (_countdownTask1 != null) { _countdownTask1.cancel(false); _countdownTask1 = null; } if (_countdownTask2 != null) { _countdownTask2.cancel(false); _countdownTask2 = null; } if (_countdownTask3 != null) { _countdownTask3.cancel(false); _countdownTask3 = null; } } private static void prepare() { checkPlayers(); shuffleGroups(); if (isActive()) { stopTimers(); ServerVariables.unset("GvG"); _active = false; _isRegistrationActive = false; } if (leaderList.size() < 2) { leaderList.clear(); Announcements.getInstance().announceToAll("GvG: Турнир отменен из-за недостатка участников"); return; } Announcements.getInstance().announceToAll("GvG: Прием заявок завершен. Запуск турнира."); start(); } /** * @param player * @param doCheckLeadership * @return Handles all limits for every group member. Called 2 times: when * registering group and before sending it to the instance */ private static int checkPlayer(Player player, boolean doCheckLeadership) { if (!player.isOnline()) { return 1; } if (!player.isInParty()) { return 2; } if (doCheckLeadership && ((player.getParty() == null) || !player.getParty().isLeader(player))) { return 4; } if ((player.getParty() == null) || (player.getParty().getMemberCount() < _minPartyMembers)) { return 3; } if ((player.getLevel() < _minLevel) || (player.getLevel() > _maxLevel)) { return 5; } if (player.isMounted()) { return 6; } if (player.isInDuel()) { return 7; } if (player.getTeam() != TeamType.NONE) { return 8; } if ((player.getOlympiadGame() != null) || Olympiad.isRegistered(player)) { return 9; } if (player.isTeleporting()) { return 10; } if (player.getParty().isInDimensionalRift()) { return 11; } if (player.isCursedWeaponEquipped()) { return 12; } if (!player.isInPeaceZone()) { return 13; } if (player.isInObserverMode()) { return 14; } return 0; } /** * @return Shuffles groups to separate them in two lists of equals size */ private static void shuffleGroups() { if (leaderList.size() % 2 != 0) // If there are odd quantity of groups in the list we should remove one of them to make it even { int rndindex = Rnd.get(leaderList.size()); Player expelled = leaderList.remove(rndindex).get(); if (expelled != null) { expelled.sendMessage("При формировании списка участников турнира ваша группа была отсеяна. Приносим извинения, попробуйте в следующий раз."); } } // Перемешиваем список for (int i = 0; i < leaderList.size(); i++) { int rndindex = Rnd.get(leaderList.size()); leaderList.set(i, leaderList.set(rndindex, leaderList.get(i))); } } private static void checkPlayers() { for (Player player : HardReferences.unwrap(leaderList)) { if (checkPlayer(player, true) != 0) { leaderList.remove(player.getRef()); continue; } for (Player partymember : player.getParty().getPartyMembers()) { if (checkPlayer(partymember, false) != 0) { player.sendMessage("Ваша группа была дисквалифицирована и снята с участия в турнире так как один или более членов группы нарушил условия участия"); leaderList.remove(player.getRef()); break; } } } } public static void updateWinner(Player winner) { Connection con = null; PreparedStatement statement = null; try { con = DatabaseFactory.getInstance().getConnection(); statement = con.prepareStatement("INSERT INTO event_data(charId, score) VALUES (?,1) ON DUPLICATE KEY UPDATE score=score+1"); statement.setInt(1, winner.getObjectId()); statement.execute(); } catch (Exception e) { e.printStackTrace(); } finally { DbUtils.closeQuietly(con, statement); } } private static void start() { int instancedZoneId = 504; InstantZone iz = InstantZoneHolder.getInstance().getInstantZone(instancedZoneId); if (iz == null) { _log.warn("GvG: InstanceZone : " + instancedZoneId + " not found!"); return; } for (int i = 0; i < leaderList.size(); i += 2) { Player team1Leader = leaderList.get(i).get(); Player team2Leader = leaderList.get(i + 1).get(); GvGInstance r = new GvGInstance(); r.setTeam1(team1Leader.getParty()); r.setTeam2(team2Leader.getParty()); r.init(iz); r.setReturnLoc(GvG.RETURN_LOC); for (Player member : team1Leader.getParty().getPartyMembers()) { Functions.unRide(member); Functions.unSummonPet(member, true); member.setTransformation(0); member.setInstanceReuse(instancedZoneId, System.currentTimeMillis()); member.dispelBuffs(); member.teleToLocation(Location.findPointToStay(GvG.TEAM1_LOC, 0, 150, r.getGeoIndex()), r); } for (Player member : team2Leader.getParty().getPartyMembers()) { Functions.unRide(member); Functions.unSummonPet(member, true); member.setTransformation(0); member.setInstanceReuse(instancedZoneId, System.currentTimeMillis()); member.dispelBuffs(); member.teleToLocation(Location.findPointToStay(GvG.TEAM2_LOC, 0, 150, r.getGeoIndex()), r); } r.start(); } leaderList.clear(); _log.info("GvG: Event started successfuly."); } } Мне нужно изменить приз. ID валюты и количество.... Изменено 22 июня, 2013 пользователем Space Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Jumper 551 Опубликовано 22 июня, 2013 возможно настройка приза в БД Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BrainEater 217 Опубликовано 22 июня, 2013 (изменено) сэр, вас не смущает /** * Глобальный класс [color=#ff0000]предварительного[/color] этапа GvG турнира * * @author pchayka */ Изменено 22 июня, 2013 пользователем BrainEater 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Space 206 Опубликовано 22 июня, 2013 возможно настройка приза в БД Увы нету сэр, вас не смущает /** * Глобальный класс [color=#ff0000]предварительного[/color] этапа GvG турнира * * @author pchayka */ а что меня должно смущать? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BrainEater 217 Опубликовано 22 июня, 2013 настройка ПРЕДВАРИТЕЛЬНОГО этапа, то бишь регистрации. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BrainEater 217 Опубликовано 22 июня, 2013 (изменено) Сам же эвент, вроде в инстансах лежит. import instances.GvGInstance; Изменено 22 июня, 2013 пользователем BrainEater 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Space 206 Опубликовано 22 июня, 2013 (изменено) Сам же эвент, вроде в инстансах лежит. <!DOCTYPE list SYSTEM "instances.dtd"> <list> <!-- GvG --> <instance id="504" name="GvG Instance" maxChannels="20" collapseIfEmpty="10" timelimit="30" dispelBuffs="false" respawn="60"> <level min="80" max="85"/> <return loc="43816 -48232 -822"/> <collapse on-party-dismiss="false" timer="60"/> <teleport loc="-23768 -8968 -5412"/> <remove itemId="0" count="0" necessary="false"/> <give itemId="0" count="0"/> <quest id="0"/> <reuse resetReuse="* * * * *" setUponEntry="true" sharedReuseGroup="0"/> <geodata map="24_22"/> <spawns/> <doors> <door id="24220030" opened="true"/> <door id="24220031" opened="true"/> <door id="24220032" opened="true"/> <door id="24220033" opened="true"/> <door id="24220034" opened="true"/> <door id="24220035" opened="true"/> <door id="24220036" opened="true"/> <door id="24220037" opened="true"/> <door id="24220038" opened="true"/> <door id="24220035" opened="true"/> <door id="24220039" opened="true"/> <door id="24220040" opened="true"/> <door id="24220041" opened="true"/> <door id="24220042"/> <door id="24220043" opened="true"/> <door id="24220044" opened="true"/> <door id="24220045" opened="true"/> <door id="24220046" opened="true"/> <door id="24220047" opened="true"/> <door id="24220048" opened="true"/> <door id="24220049" opened="true"/> <door id="24220050" opened="true"/> <door id="24220060" opened="true"/> </doors> <zones> <zone name="[gvg_battle_zone]" active="true"/> <zone name="[gvg_1_peace]" active="true"/> <zone name="[gvg_2_peace]" active="true"/> </zones> </instance> </list> <give itemId="0" count="0"/> Это приз? Или я ошибся? Изменено 22 июня, 2013 пользователем Space Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BrainEater 217 Опубликовано 22 июня, 2013 private void reward(Party party) { for (Player member : party.getPartyMembers()) { member.sendMessage("Ваша группа выиграла GvG турнир, лидер группы добавлен в рейтинг победителей."); member.setFame(member.getFame() + 500, "GvG"); // fame Functions.addItem(member, 13067, 30); // Fantasy Isle Coin } } 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Space 206 Опубликовано 22 июня, 2013 private void reward(Party party) { for (Player member : party.getPartyMembers()) { member.sendMessage("Ваша группа выиграла GvG турнир, лидер группы добавлен в рейтинг победителей."); member.setFame(member.getFame() + 500, "GvG"); // fame Functions.addItem(member, 13067, 30); // Fantasy Isle Coin } } Это где? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BrainEater 217 Опубликовано 22 июня, 2013 /** * Инстанс для GvG турнира * * @author pchayka */ public class GvGInstance поиск по слову reward 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Space 206 Опубликовано 22 июня, 2013 D:\server\gameserver\data\scripts\events\GvG.java Здесь? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BrainEater 217 Опубликовано 22 июня, 2013 dist\gameserver\data\scripts\instances 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Space 206 Опубликовано 22 июня, 2013 dist\gameserver\data\scripts\instances Спасибо BrainEater нашёл настройку private void reward(Party party) { for (Player member : party.getPartyMembers()) { member.sendMessage("Ваша группа выиграла GvG турнир, лидер группы добавлен в рейтинг победителей."); member.setFame(member.getFame() + 500, "GvG"); // fame Functions.addItem(member, 13067, 30); // Fantasy Isle Coin } } +++ накидал. Большое спасибо Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты