####################### # Custom Color Manager ####################### # Включение CmAllow=true # Цвета титулов в формате BGR через запятую CmTitle=0 # Цвета ников в формате BGR через запятую CmNick=0 вот скрипт в ядре Spoiler: L2CustomColorManagerInstance.java package net.sf.l2j.gameserver.model.actor.instance; import java.util.StringTokenizer; import net.sf.l2j.Config; import net.sf.l2j.gameserver.network.SystemMessageId; import net.sf.l2j.gameserver.templates.L2NpcTemplate; import net.sf.l2j.gameserver.serverpackets.SystemMessage; public class L2CustomColorManagerInstance extends L2NpcInstance { public L2CustomColorManagerInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } public void onBypassFeedback(L2PcInstance player, String command) { if (!Config.CM_ALLOW) return; StringTokenizer st = new StringTokenizer(command, " "); String actualCommand = st.nextToken(); if (actualCommand.equalsIgnoreCase("change_color_title")) { String colorId = st.nextToken(); if (Config.LIST_COLOR_TITLE.contains(colorId)) { if (!player.destroyItemByItemId("ChangeColorTitle", Config.CHANGE_COLOR_TITLE_ITEMID, Config.CHANGE_COLOR_TITLE_CONSUME, this, false)) { player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS)); return; } player.getAppearance().setTitleColor(Integer.decode("0x" + colorId)); player.broadcastUserInfo(); player.store(); player.sendMessage("Enjoy your new colour."); return; } } else if (actualCommand.equalsIgnoreCase("change_color_nick")) { String colorId = st.nextToken(); if (Config.LIST_COLOR_NICK.contains(colorId)) { if (!player.destroyItemByItemId("ChangeColorNick", Config.CHANGE_COLOR_NICK_ITEMID, Config.CHANGE_COLOR_NICK_CONSUME, this, false)) { player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS)); return; } player.getAppearance().setNameColor(Integer.decode("0x" + colorId)); player.broadcastUserInfo(); player.store(); player.sendMessage("Enjoy your new colour."); return; } } return; } @Override public boolean isMovementDisabled() { return true; } }
Коды цветов можно посмотреть тут . # Цвета титулов в формате BGR через запятую CmTitle=FF0000,000000,0000FF Ну а прописывать в таком формате
NickColorChangeList = 00FF00;00DD00;7FFF00;8A2BE2;A52A2A;DEB887;5F9EA0;DC143C;9932CC;696969;4B0082;E6E6FA; TitleColorChangeList = 00FF00;00DD00;7FFF00;8A2BE2;A52A2A;DEB887;5F9EA0;DC143C;9932CC;696969;4B0082;E6E6FA;
Делайте вариации, если есть исходник смотрите код. Ибо других вариантов быть не может, пробуйте 00255 - это красный цвет в формате BGR 255255255 - это черный цвет BGR 25500 - это синий
Spoiler: конфыг ####################### # Four Sepulchers ####################### TimeOfAttack = 50 TimeOfCoolDown = 5 TimeOfEntry = 3 TimeOfWarmUp = 2 NumberOfNecessaryPartyMembers = 4 ####################### # 7 печатей ####################### # Правила 7 печатей. # Для вступление в воина Рассвета требуется что бы игрок находится в замке союзного клана. AltRequireCastleForDawn = False # Определение получения в собственность замка кланом или альянсом. AltRequireClanCastle = False ####################### # Оффлайн трейд и крафт ####################### # Включить или выключить оффлайн трейд\крафт # Включить -> true, Выключить -> false OfflineTradeEnable = true # Разрешить оффлайн крафт? # Включить -> true, Выключить -> false OfflineCraftEnable = true ####################### # Custom Color Manager ####################### # Включение CmAllow=true # Цвета титулов в формате BGR через запятую CmTitle=0x009900,0xff7f00 # Цвета ников в формате BGR через запятую CmNick=0x009900,0xff7f00 # ItemId вещи требуемая для покраски титула ChangeColorTitleItemId=57 # ItemId вещи требуемая для покраски имени ChangeColorNickItemId=57 # Количнство вещей требуемых для покраски титула ChangeColorTitleConsume=1000 # Количнство вещей требуемых для покраски имени ChangeColorNickConsume=1000 ####################### # Правила фестиваля ####################### # Минимальное количество игроков для участия в фестивале Семи Печатей. AltFestivalMinPlayer = 5 # Максимальный вклад в игрока в течение фестиваля AltMaxPlayerContrib = 1000000 # Время старта фестиваля. # По умолчанию : 2 минуты AltFestivalManagerStart = 120000 # Длительность фестиваля. # По умолчанию : 18 минут AltFestivalLength = 1080000 # Длина цикла Фестиваля. # По умолчанию : 38 минут (20 минут ожидания, + время фестиваля) AltFestivalCycleLength = 2280000 # Начальный спаун фестиваля. # По умолчанию : 2 минуты AltFestivalFirstSpawn = 120000 # Начальная подготовка Фестиваля. # По умолчанию : 5 минут AltFestivalFirstSwarm = 300000 # Следующиий спаун Фестиваля. # По умолчанию : 9 минут AltFestivalSecondSpawn = 540000 # Следующая подготовка Фестиваля. # По умолчанию : 12 минут AltFestivalSecondSwarm = 720000 # Спаун сундуков. # По умолчанию : 15 минут AltFestivalChestspawn = 900000 ####################### # Дименшен рифт ####################### # Минимальный размер группы для входа в Dimension Rift. Min = 2, Max = 9. # Если во время участия в Dimension Rift, группа станет меньше минимума, то # все члены группы будут телепортированы в зал ожидания. RiftMinPartySize = 5 # Максимально разрешенное количество "прыжков" между комнатами. # В конце группа будет телепортирована в зал ожидания. MaxRiftJumps = 4 # Время ожидания в микросекундах после входа группы в комнату до тех пор пока начнут спавниться мобы. В C4 было: 10s RiftSpawnDelay = 10000 # Время, между автоматическими прыжками (в секундах) AutoJumpsDelayMin = 480 AutoJumpsDelayMax = 600 # Время для пребывания в комнате босса BossRoomTimeMultiply = 1.5 # Стоимость (исчисляется в fragment-dimension), для того, чтобы войти в ущелье, каждый член группы должен иметь это количество RecruitCost = 18 SoldierCost = 21 OfficerCost = 24 CaptainCost = 27 CommanderCost = 30 HeroCost = 33 ############################################## # PC Bang Points система ############################################## # Включить или выключить эвент PcCafeEvent=True # Минимальный уровень с которого начинают начисляться очки PcCafeMinLevel=0 # Минимальное добавляемое кол-во очков игроку PcCafeScoreMin=45 # Максимальное добавляемое кол-во очков игроку PcCafeScoreMax=150 # Шанс получить двойное количество очков PcCafeScoreDouble=15 # Интервал перед тем как добавить. Каждые 5 минут PcCafeInterval=300 ####################### # Олимпиада ####################### # Время начала олимпиады. По умолчанию в 18 часов AltOlyStartTime = 18 # Время окончания олимпиады, По умолчанию в 00 часов. AltOlyMin = 00 # Период Соревнований, По умолчанию 6 часов. # Если уставновлено другое время то прибавляем еще 10 минут. AltOlyCPeriod = 21600000 # Время боя, по умолчанию 6 минут. AltOlyBattle = 360000 # Время оэидания боя, по умолчанию 10 минут. AltOlyBWait = 600000 # Время первого ожидания, по умолчанию 5 минут. AltOlyIWait = 300000 # Неделя олимпиады, по умолчанию 1 неделя. AltOlyWPeriod = 604800000 # Ратификация олимпиады, по умолчанию 24 часа. AltOlyVPeriod = 86400000 # Минимум участников для начала матчей для классовых и бесклассовых соревнований. По умолчанию 5 и 9. AltOlyClassedParticipants = 5 AltOlyNonClassedParticipants = 9 # Награда за выигранный бой для классовых и бесклассовых матчей. # По умолчанию 6651(Gate Pass) AltOlyBattleRewItem = 6651 # По умолчанию 50 штук выигравшему AltOlyClassedRewItemCount = 50 # По умолчанию 30 штук выигравшему AltOlyNonClassedRewItemCount = 30 # Награда по окончанию олимпиады # Минимум очков для обмена nobless gate pass, По умолчанию 50 AltOlyMinPointForExchange = 50 # ItemId награды, По умолчанию 6651(Gate Pass) AltOlyCompRewItem = 6651 # Рейт для обмена очков на награду, По умолчанию 1 очко * 1000 AltOlyGPPerPoint = 1000 # Очки дворянства, которые будут выданы героям. По умолчанию 300 AltOlyHeroPoints = 300 # Список запрещенных вещей на олимпиаде (например. 1,200,350) AltOlyRestrictedItems = 0 ####################### # Манор ####################### # Включить манор AllowManor = True # Время обновления манора во время осады, по умолчанию 8 часов вечера (20) AltManorRefreshTime = 20 # Время обновления манора, по умолчанию каждый час. AltManorRefreshMin = 00 # Время подтверждения манора во время осады, по умолчанию в 6 часов утра. AltManorApproveTime = 6 # Время подтверждения манора, по умолчанию каждый час. AltManorApproveMin = 00 # Перерыв, по умолчанию 6 минут. AltManorMaintenancePeriod = 360000 # Способ сохранения. True - сохранять в базу после каждого действия; по умолчанию False AltManorSaveAllActions = True # Сохранение статуса манора(если только AltManorSaveAllActions=false), по умолчанию каждые 2 часа AltManorSavePeriodRate = 2 ####################### # Свадьбы ####################### #True разрешает свадьбы AllowWedding=True #Стоимость свадьбы в Adenaх WeddingPrice=250000000 #Наказывать игроков за измену к их супругам? Да = True, Нет = False WeddingPunishInfidelity=True #Женатые могут телепортироваться друг к другу? да - True, нет - False WeddingTeleport=True #Цена телепортации в Adenaх WeddingTeleportPrice=50000 #Время телепортации (в секундах) WeddingTeleportDuration=60 #Разрешается ли гомосятина и лесби на сервере Да = True, Нет = False WeddingAllowSameSex=True #Требуется ли свадебная одежда при бракосочетаниях Да = True, Нет = False WeddingFormalWear=True #Цена развода в % от стоимости свадьбы WeddingDivorceCosts=20 # Включить цвет ников у женатых ColorWeddingName = False # Установка цвета ников женатых разного пола WeddingNameColor = 62FFFF # цвет ников однополых супругов мужского пола # внимание !!! ник однополого супруга смениться на этот # только при в ходе в игру его супруга WeddingNameGeyColor = FA0000 # цвет ников однополых супругов женского пола # внимание !!! ник однополого супруга смениться на этот # только при в ходе в игру его супруга WeddingNameLizColor = FA70FA ####################### # Team vs. Team Event ####################### # Включение TvTEventEnabled = true # Время между эвентами (в минутах, 300 = 5 часов) TvTEventInterval = 300 # Время на регистрацию (в минутах) до старта эвента. TvTEventParticipationTime = 60 # продолжительность эвента TvTEventRunningTime = 20 # Эвентовый нпц (создаем любого нпц с типом L2TvTEventNpc по умолчанию создан 70010) TvTEventParticipationNpcId = 70010 # Координаты появления эвентового нпц TvTEventParticipationNpcCoordinates = 83425,148585,-3406 # Минимальное и максимальное количество персонажей в команде TvTEventMinPlayersInTeams = 1 TvTEventMaxPlayersInTeams = 20 # Минимальные и максимальные уровни игроков для участия TvTEventMinPlayerLevel = 1 TvTEventMaxPlayerLevel = 80 # Время для телепорта игроков на эвент (в секундах) TvTEventRespawnTeleportDelay = 10 TvTEventStartLeaveTeleportDelay = 10 # Первая команда (название, стартовые координаты x,y,z) TvTEventTeam1Name = Team1 TvTEventTeam1Coordinates = 148695,46725,-3414 # Вторая команда (название, стартовые координаты x,y,z) TvTEventTeam2Name = Team2 TvTEventTeam2Coordinates = 149999,46728,-3414 # Награда для выигравшей команды # itemId,amount;itemId,amount;itemId,amount;... TvTEventReward = 57,100000;6673,1000 # Правила эвента TvTEventTargetTeamMembersAllowed = true TvTEventScrollsAllowed = false TvTEventPotionsAllowed = false TvTEventSummonByItemAllowed = false # id's дверей который будут открываться/закрываться при старте/окончании # пример.: 1;2;3;4;5;6 TvTDoorsToOpen = TvTDoorsToClose = # Давать призы обоим командам при ничьей TvTRewardTeamTie = false # Настройки случайного спауна игроков на ТвТ эвенте # Значения задаются относительно координат прописанных в TvTEventTeam1Coordinates и TvTEventTeam2Coordinates # минимум по оси X TvTRndSpawnXMin=-0 # максимум по оси X TvTRndSpawnXMax=0 # минимум по оси Y TvTRndSpawnYMin=-0 # максимум по оси Y TvTRndSpawnYMax=0 # насколько выше спаунить игроков по оси Z TvTSpawnZ=0 ####################### # CTF Event ####################### # CTFEvenTeams=NO|BALANCE|SHUFFLE # NO: без команд. # BALANCE: Игрок присоединяется при регистрации к той команде где меньше людей. # SHUFFLE: Распределение игроков по командам производится при телепортировании. CTFEvenTeams=SHUFFLE # Смогут ли обычные игроки выделять участников эвента? CTFAllowInterference=true # Рарешить суммон итемы на эвенте? CTFAllowSummon=False # Удалять все баффы при старте эвента? CTFOnStartRemoveAllEffects=True # Убирать суммонов при старте эвента? CTFOnStartUnsummonPet=True # Полностью восстанавливать hp/mp/cp при респауне? CTFReviveRecovery=true # Настройки случайного спауна игроков на CTF эвенте # Значения задаются относительно координат прописанных в ctf_teams.sql # минимум по оси X CTFRndSpawnXMin=-0 # максимум по оси X CTFRndSpawnXMax=0 # минимум по оси Y CTFRndSpawnYMin=-0 # максимум по оси Y CTFRndSpawnYMax=0 # насколько выше спаунить игроков по оси Z CTFSpawnZ=0
Сразу бы так. # Цвета титулов в формате BGR через запятую CmTitle=0xff0000,0x000000,0x0000ff перед каждым цветом добавляйте 0x - это означает, что далее идет число в формате HEX (шестнадцетиричное)
или как етот переделать под титул Spoiler: скрипт import sys from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance from net.sf.l2j.gameserver.model.actor.appearance import PcAppearance from net.sf.l2j.gameserver.model.quest import State from net.sf.l2j.gameserver.model.quest import QuestState from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest qn = "7800_Namecolor" NPC=[50000] QuestId = 7800 QuestName = "Namecolor" QuestDesc = "custom" InitialHtml = "1.htm" print "Loaded Custom: 7001 Namecolor" class Quest (JQuest) : def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) def onEvent(self,event,st) : htmltext = event if event == "1": if st.getQuestItemsCount(57) > 250000: st.takeItems(57,250000) st.getPlayer().getAppearance().setNameColor(0x009900) st.getPlayer().broadcastUserInfo(); return "1.htm" if st.getQuestItemsCount(57) <= 250000: return "Announcements: No Enought Adena To Select Color!" st.exitQuest(0) if event == "2": if st.getQuestItemsCount(57) > 250000: st.takeItems(57,250000) st.getPlayer().getAppearance().setNameColor(0xff7f00) st.getPlayer().broadcastUserInfo(); return "1.htm" if st.getQuestItemsCount(57) <= 250000: return "Announcements: No Enought Adena To Select Color!" if event == "3": if st.getQuestItemsCount(57) > 250000: st.takeItems(57,250000) st.getPlayer().getAppearance().setNameColor(0xff00ff) st.getPlayer().broadcastUserInfo(); return "1.htm" if st.getQuestItemsCount(57) <= 250000: return "Announcements: No Enought Adena To Select Color!" if event == "4": if st.getQuestItemsCount(57) > 250000: st.takeItems(57,250000) st.getPlayer().getAppearance().setNameColor(0x00ffff) st.getPlayer().broadcastUserInfo(); return "1.htm" if st.getQuestItemsCount(57) <= 250000: return "Announcements: No Enought Adena To Select Color!" if event == "5": if st.getQuestItemsCount(57) > 250000: st.takeItems(57,250000) st.getPlayer().getAppearance().setNameColor(0x0000ff) st.getPlayer().broadcastUserInfo(); return "1.htm" if st.getQuestItemsCount(57) <= 250000: return "Announcements: No Enought Adena To Select Color!" if event == "6": if st.getQuestItemsCount(57) > 250000: st.takeItems(57,250000) st.getPlayer().getAppearance().setNameColor(0x0099ff) st.getPlayer().broadcastUserInfo(); return "1.htm" if st.getQuestItemsCount(57) <= 250000: return "Announcements: No Enought Adena To Select Color!" if event == "7": if st.getQuestItemsCount(57) > 250000: st.takeItems(57,250000) st.getPlayer().getAppearance().setNameColor(0x70db93) st.getPlayer().broadcastUserInfo(); return "1.htm" if st.getQuestItemsCount(57) <= 250000: return "Announcements: No Enought Adena To Select Color!" if event == "8": if st.getQuestItemsCount(57) > 250000: st.takeItems(57,250000) st.getPlayer().getAppearance().setNameColor(0x9f9f9f) st.getPlayer().broadcastUserInfo(); return "1.htm" if st.getQuestItemsCount(57) <= 250000: return "Announcements: No Enought Adena To Select Color!" if event == "9": if st.getQuestItemsCount(57) > 250000: st.takeItems(57,250000) st.getPlayer().getAppearance().setNameColor(0xffff00) st.getPlayer().broadcastUserInfo(); return "1.htm" if st.getQuestItemsCount(57) <= 250000: return "Announcements: No Enought Adena To Select Color!" def onTalk (self,npc,player): st = player.getQuestState(qn) htmltext = "<html><head><body><center>Nao tenho nada para dizer agora.</center></body></html>" st.setState(State.STARTED) return InitialHtml QUEST = Quest(QuestId,str(QuestId) + "_" + QuestName,QuestDesc) for npcId in NPC: QUEST.addStartNpc(npcId) QUEST.addTalkId(npcId)