- Хроники
- Master Class
- Исходники
- Присутствуют
- Сборка
- L2J_Mobius_12.3_Superion
Всем Привет.
В общем помог человек написал код.
Спасибо ему огромное.
Я закинул файл ColorChangeBoard.java по пути
Потом скомпилировал сборку.
Все прошло без ошибок.
В комюнити в ini прописал
Так же добавил в navigation.html
Но что то еще нужно сделать а я не понимаю
[Character: ad[268513734] - Account: ad - IP: 127.0.0.1] sent not handled RequestBypassToServer: [_bbcolorchange]
Прошу помощи или указать на ошибку.
Вообще в ту сторону двигаю?
В общем помог человек написал код.
Код:
Java:
package handlers.communityboard.custom;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.cache.HtmCache;
import org.l2jmobius.gameserver.handler.CommunityBoardHandler;
import org.l2jmobius.gameserver.handler.IParseBoardHandler;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.network.serverpackets.ShowBoard;
public class TitleNameBoard implements IParseBoardHandler {
private static final String[] COMMANDS = {
"_bbschangename",
"_bbschangetitle",
"_bbschangenamecolor",
"_bbschangetitlecolor"
};
@Override
public String[] getCommandList() {
return COMMANDS;
}
@Override
public boolean onCommand(String command, Player player) {
String lang = player.getLang() != null ? player.getLang() : Config.MULTILANG_DEFAULT;
String htmlPrefix = lang.equals("en") ? "data/html/" : "data/lang/" + lang + "/data/html/";
// ---------- Change Name ----------
if (command.equals("_bbschangename")) {
sendHtml(player, htmlPrefix + "CommunityBoard/Custom/services/changename.html");
return true;
} else if (command.startsWith("_bbschangename ")) {
String newName = command.substring(15).trim();
if (newName.isEmpty()) { player.sendMessage("Enter new name."); return false; }
if (newName.length() < 3 || newName.length() > 16) { player.sendMessage("Name must be 3-16 characters."); return false; }
if (isNameTaken(newName, player.getObjectId())) { player.sendMessage("Name already taken."); return false; }
if (updateNameInDatabase(player.getObjectId(), newName)) {
player.setName(newName);
player.broadcastUserInfo();
player.sendMessage("Your name has been changed to " + newName + ".");
} else {
player.sendMessage("Error changing name.");
}
player.sendPacket(new ShowBoard());
return true;
}
// ---------- Change Title ----------
if (command.equals("_bbschangetitle")) {
sendHtml(player, htmlPrefix + "CommunityBoard/Custom/services/changetitle.html");
return true;
} else if (command.startsWith("_bbschangetitle ")) {
String newTitle = command.substring(15).trim();
if (newTitle.length() > 16) { player.sendMessage("Title cannot exceed 16 characters."); return false; }
if (updateTitleInDatabase(player.getObjectId(), newTitle)) {
player.setTitle(newTitle);
player.broadcastUserInfo();
player.sendMessage("Your title has been changed to: " + newTitle + ".");
} else {
player.sendMessage("Error changing title.");
}
player.sendPacket(new ShowBoard());
return true;
}
// ---------- Name Color ----------
if (command.equals("_bbschangenamecolor")) {
sendHtml(player, htmlPrefix + "CommunityBoard/Custom/services/changenamecolor.html");
return true;
} else if (command.startsWith("_bbschangenamecolor ")) {
String colorCode = command.substring(20).trim().replace("#","");
try {
int rgb = Integer.parseInt(colorCode, 16);
int bgr = rgbToBgr(rgb); // конвертируем RGB → BGR
player.getAppearance().setNameColor(bgr); // клиент видит правильный цвет
saveColorToDB(player.getObjectId(), bgr, true); // сохраняем в БД
player.broadcastUserInfo();
} catch (Exception e) {
player.sendMessage("Invalid color format.");
}
sendHtml(player, htmlPrefix + "CommunityBoard/Custom/services/changenamecolor.html");
return true;
}
// ---------- Title Color ----------
if (command.equals("_bbschangetitlecolor")) {
sendHtml(player, htmlPrefix + "CommunityBoard/Custom/services/changetitlecolor.html");
return true;
} else if (command.startsWith("_bbschangetitlecolor ")) {
String colorCode = command.substring(21).trim().replace("#","");
try {
int rgb = Integer.parseInt(colorCode, 16);
int bgr = rgbToBgr(rgb);
player.getAppearance().setTitleColor(bgr);
saveColorToDB(player.getObjectId(), bgr, false);
player.broadcastUserInfo();
} catch (Exception e) {
player.sendMessage("Invalid color format.");
}
sendHtml(player, htmlPrefix + "CommunityBoard/custom/services/changetitlecolor.html");
return true;
}
return false;
}
private void sendHtml(Player player, String path) {
String html = HtmCache.getInstance().getHtm(player, path);
CommunityBoardHandler.separateAndSend(html, player);
}
private boolean isNameTaken(String name, int objectId) {
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT charId FROM characters WHERE LOWER(char_name)=LOWER(?) AND charId<>?")) {
ps.setString(1, name);
ps.setInt(2, objectId);
try (ResultSet rs = ps.executeQuery()) { return rs.next(); }
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private boolean updateNameInDatabase(int objectId, String newName) {
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("UPDATE characters SET char_name=? WHERE charId=?")) {
ps.setString(1, newName);
ps.setInt(2, objectId);
return ps.executeUpdate() > 0;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private boolean updateTitleInDatabase(int objectId, String newTitle) {
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("UPDATE characters SET title=? WHERE charId=?")) {
ps.setString(1, newTitle);
ps.setInt(2, objectId);
return ps.executeUpdate() > 0;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private void saveColorToDB(int objectId, int bgr, boolean isName) {
String column = isName ? "name_color" : "title_color";
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("UPDATE characters SET " + column + "=? WHERE charId=?")) {
ps.setInt(1, bgr);
ps.setInt(2, objectId);
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
private int rgbToBgr(int rgb) {
int r = (rgb >> 16) & 0xFF;
int g = (rgb >> 8) & 0xFF;
int b = rgb & 0xFF;
return (b << 16) | (g << 8) | r;
}
}
Я закинул файл ColorChangeBoard.java по пути
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
/
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
/
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
/
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
/
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
/
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
Потом скомпилировал сборку.
Все прошло без ошибок.
В комюнити в ini прописал
Код:
# Enable/Disable nickname/title color change service
ColorChangeService = true
# Item ID used for payment
ColorChangeItemId = 57
# Amount of item required
ColorChangeItemAmount = 1000
ColorChangeColors = 00FF00,FF9900,000000,00FFFF,000080,87CEFA,98FF98,808080,FFFF00,FFC0CB
ColorChangeColorNames = Зелёный,Оранжевый,Чёрный,Бирюзовый,Темно-синий,Голубой,Мятный,Серый,Жёлтый,Розовый
Код:
<tr>
<td><button value="ColorChange" action="bypass _bbcolorchange" width=200 height=30 back="L2UI_CT1.OlympiadWnd_DF_Reward_Down" fore="L2UI_CT1.OlympiadWnd_DF_Reward"></td>
</tr>
[Character: ad[268513734] - Account: ad - IP: 127.0.0.1] sent not handled RequestBypassToServer: [_bbcolorchange]
Прошу помощи или указать на ошибку.
Вообще в ту сторону двигаю?