L2JMobius
Public Development => Shares/Contributions => Topic started by: Deving on May 27, 2025, 04:53:26 AM
-
I’d like to share my contribution to the community. I’ve added several services to the Community Board: Class Master, Subclass Master, a server statistics display service, and a name/title color customization service. It’s my small way of giving back.
I will post new services here: https://gitea.com/Debug/ShadowCraftCore
https://pastebin.com/hU2n5jNf
-
Hey friend, I compiled it from your Git, but it's giving an error when creating a character.
[27/05 12:39:34] Could not insert char data: Parameter index out of range (39 > number of parameters, which is 38).
java.sql.SQLException: Parameter index out of range (39 > number of parameters, which is 38).
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:81)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:55)
at com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1482)
at com.mysql.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1497)
at com.mysql.cj.jdbc.ClientPreparedStatement.setLong(ClientPreparedStatement.java:1780)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setLong(HikariProxyPreparedStatement.java)
at org.l2jmobius.gameserver.model.actor.Player.createDb(Player.java:6899)
at org.l2jmobius.gameserver.model.actor.Player.create(Player.java:1019)
at org.l2jmobius.gameserver.network.clientpackets.CharacterCreate.runImpl(CharacterCreate.java:237)
at org.l2jmobius.gameserver.network.clientpackets.ClientPacket.run(ClientPacket.java:57)
at org.l2jmobius.commons.network.PacketExecutor$PacketRunnable.run(PacketExecutor.java:74)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1095)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:619)
at java.base/java.lang.Thread.run(Thread.java:1447)
[27/05 12:39:34] Client: [Account: mateus95 - IP: 127.0.0.1] - Failed running: CharacterCreate ; Cannot invoke "org.l2jmobius.gameserver.model.actor.Player.getMaxHp()" because "newChar" is null
[27/05 12:39:34] java.lang.NullPointerException: Cannot invoke "org.l2jmobius.gameserver.model.actor.Player.getMaxHp()" because "newChar" is null
at org.l2jmobius.gameserver.network.clientpackets.CharacterCreate.runImpl(CharacterCreate.java:241)
at org.l2jmobius.gameserver.network.clientpackets.ClientPacket.run(ClientPacket.java:57)
at org.l2jmobius.commons.network.PacketExecutor$PacketRunnable.run(PacketExecutor.java:74)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1095)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:619)
at java.base/java.lang.Thread.run(Thread.java:1447)
-
Fixed bug with number of parameters in createDb()
From 9839c9798d115b945ceb937c7cb46d62c4faeb51 Mon Sep 17 00:00:00 2001
From: Debug <[email protected]>
Date: Wed, 28 May 2025 20:01:30 +0300
Subject: [PATCH] no message
---
java/org/l2jmobius/gameserver/model/actor/Player.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/java/org/l2jmobius/gameserver/model/actor/Player.java b/java/org/l2jmobius/gameserver/model/actor/Player.java
index 60106e88..c4ec2bf4 100644
--- a/java/org/l2jmobius/gameserver/model/actor/Player.java
+++ b/java/org/l2jmobius/gameserver/model/actor/Player.java
@@ -377,7 +377,7 @@ public class Player extends Playable
private static final String DELETE_ITEM_REUSE_SAVE = "DELETE FROM character_item_reuse_save WHERE charId=?";
// Character Character SQL String Definitions:
- private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,charId,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,fame,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,title_color,name_color,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,newbie,nobless,power_grade,createDate,lastAccess) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+ private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,charId,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,fame,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,title_color,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,newbie,nobless,power_grade,createDate,lastAccess) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,fame=?,pvpkills=?,pkkills=?,clanid=?,race=?,classid=?,deletetime=?,title=?,title_color=?,name_color=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,newbie=?,nobless=?,power_grade=?,subpledge=?,lvl_joined_academy=?,apprentice=?,sponsor=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,bookmarkslot=?,vitality_points=?,language=?,faction=?,pccafe_points=? WHERE charId=?";
private static final String RESTORE_CHARACTER = "SELECT * FROM characters WHERE charId=?";
--
2.46.0.windows.1
Thanks for your vigilance
-
I’d like to share my contribution to the community. I’ve added several services to the Community Board: Class Master, Subclass Master, a server statistics display service, and a name/title color customization service. It’s my small way of giving back.
I will post new services here: https://gitea.com/Debug/ShadowCraftCore
https://pastebin.com/hU2n5jNf
Add Nobles
From d2ecbcceda778f264c3d69c29e5ccfa4820674a6 Mon Sep 17 00:00:00 2001
From: Debug <[email protected]>
Date: Tue, 27 May 2025 20:55:33 +0300
Subject: [PATCH] Added the ability to obtain nobleman status through the
community board
---
dist/game/config/Custom/CommunityBoard.ini | 12 ++
.../CommunityBoard/Custom/navigation.html | 4 +
.../handlers/communityboard/HomeBoard.java | 11 +-
.../handlers/communityboard/NoblessBoard.java | 105 ++++++++++++++++++
java/org/l2jmobius/Config.java | 8 ++
5 files changed, 138 insertions(+), 2 deletions(-)
create mode 100644 dist/game/data/scripts/handlers/communityboard/NoblessBoard.java
diff --git a/dist/game/config/Custom/CommunityBoard.ini b/dist/game/config/Custom/CommunityBoard.ini
index 7a8f2ff0..b3118fc1 100644
--- a/dist/game/config/Custom/CommunityBoard.ini
+++ b/dist/game/config/Custom/CommunityBoard.ini
@@ -40,6 +40,18 @@ ColorChangeColors = 00FF00,FF9900,000000,00FFFF,000080,87CEFA,98FF98,808080,FFFF
ColorChangeColorNames = Зелёный,Оранжевый,Чёрный,Бирюзовый,Темно-синий,Голубой,Мятный,Серый,Жёлтый,Розовый
+# Enables or disables Noblesse service via Community Board
+NoblesseService = true
+
+# Item ID required to obtain Noblesse status
+NoblesseItemId = 57
+
+# Number of items required for Noblesse
+NoblesseItemCount = 100000000
+
+# Tiara item ID granted upon becoming Noblesse
+NoblesseTiaraId = 7694
+
# Currency used by the Community Board (itemId).
# Default: 57 (Adena)
CommunityCurrencyId = 57
diff --git a/dist/game/data/html/CommunityBoard/Custom/navigation.html b/dist/game/data/html/CommunityBoard/Custom/navigation.html
index 7832fa44..fa59773a 100644
--- a/dist/game/data/html/CommunityBoard/Custom/navigation.html
+++ b/dist/game/data/html/CommunityBoard/Custom/navigation.html
@@ -35,4 +35,8 @@
<tr>
<td><button value="Top" action="bypass _bbstopboard" width=200 height=30 back="L2UI_CT1.OlympiadWnd_DF_Reward_Down" fore="L2UI_CT1.OlympiadWnd_DF_Reward"></td>
</tr>
+<tr>
+<td>
+ <button value="BuyNobless" action="bypass _bbspurchase_noblesse" width=200 height=30 back="L2UI_CT1.OlympiadWnd_DF_Reward_Down" fore="L2UI_CT1.OlympiadWnd_DF_Reward">
+</td>
</table>
\ No newline at end of file
diff --git a/dist/game/data/scripts/handlers/communityboard/HomeBoard.java b/dist/game/data/scripts/handlers/communityboard/HomeBoard.java
index 4249a880..aa142c43 100644
--- a/dist/game/data/scripts/handlers/communityboard/HomeBoard.java
+++ b/dist/game/data/scripts/handlers/communityboard/HomeBoard.java
@@ -58,7 +58,7 @@ import org.l2jmobius.gameserver.network.serverpackets.ShowBoard;
/**
* Home board.
- * @author Zoey76, Mobius
+ * @author Zoey76, Mobius. Druid
*/
public class HomeBoard implements IParseBoardHandler
{
@@ -69,6 +69,7 @@ public class HomeBoard implements IParseBoardHandler
private final TopBoard topBoard = new TopBoard();
private final SubClassMasterBoard subClassMasterBoard = new SubClassMasterBoard();
private final ColorChangeBoard colorChangeBoard = new ColorChangeBoard();
+ private final NoblessBoard noblessBoard = new NoblessBoard();
private static final String[] COMMANDS =
{
@@ -103,7 +104,7 @@ public class HomeBoard implements IParseBoardHandler
};
private static final Predicate<Player> KARMA_CHECK = player -> Config.COMMUNITYBOARD_KARMA_DISABLED && (player.getKarma() > 0);
-
+
[member=79]override[/member]
public String[] getCommunityBoardCommands()
{
@@ -114,6 +115,7 @@ public class HomeBoard implements IParseBoardHandler
commands.addAll(Arrays.asList(topBoard.getCommunityBoardCommands()));
commands.addAll(Arrays.asList(subClassMasterBoard.getCommunityBoardCommands()));
commands.addAll(Arrays.asList(colorChangeBoard.getCommunityBoardCommands()));
+ commands.addAll(Arrays.asList(noblessBoard.getCommunityBoardCommands()));
return commands.stream().filter(Objects::nonNull).toArray(String[]::new);
}
@@ -173,6 +175,11 @@ public class HomeBoard implements IParseBoardHandler
return colorChangeBoard.parseCommunityBoardCommand(command, player);
}
+ if (command.startsWith("_bbspurchase_noblesse"))
+ {
+ return noblessBoard.parseCommunityBoardCommand(command, player);
+ }
+
else if (command.startsWith("_bbstop;"))
{
final String customPath = Config.CUSTOM_CB_ENABLED ? "Custom/" : "";
diff --git a/dist/game/data/scripts/handlers/communityboard/NoblessBoard.java b/dist/game/data/scripts/handlers/communityboard/NoblessBoard.java
new file mode 100644
index 00000000..8586b18c
--- /dev/null
+++ b/dist/game/data/scripts/handlers/communityboard/NoblessBoard.java
@@ -0,0 +1,105 @@
+package handlers.communityboard;
+
+import org.l2jmobius.Config;
+import org.l2jmobius.gameserver.data.xml.ItemData;
+import org.l2jmobius.gameserver.handler.IParseBoardHandler;
+import org.l2jmobius.gameserver.handler.CommunityBoardHandler;
+import org.l2jmobius.gameserver.model.actor.Player;
+import org.l2jmobius.gameserver.model.item.ItemTemplate;
+import org.l2jmobius.gameserver.model.item.enums.ItemProcessType;
+import org.l2jmobius.gameserver.model.item.instance.Item;
+import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
+
+/**
+ * @author Debug
+ */
+
+public class NoblessBoard implements IParseBoardHandler
+{
+ private static final String[] COMMANDS = {
+ "_bbspurchase_noblesse",
+ "_bbspurchase_noblesse_yes"
+ };
+
+ // Настройки
+ final int ITEM_ID = Config.NOBLESSE_ITEM_ID;
+ final long ITEM_COUNT = Config.NOBLESSE_ITEM_COUNT;
+ final int TIARA_ID = Config.NOBLESSE_TIARA_ID;
+
+ [member=79]override[/member]
+ public String[] getCommunityBoardCommands()
+ {
+ return COMMANDS;
+ }
+
+ [member=79]override[/member]
+ public boolean parseCommunityBoardCommand(String command, Player player)
+ {
+ if (!Config.NOBLESSE_SERVICE)
+ {
+ CommunityBoardHandler.separateAndSend("<html><body><center><br><font color=FF0000>Сервис дворянства отключён</font><br></center></body></html>", player);
+ return false;
+ }
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("<html><body><center>");
+
+ if (command.equals("_bbspurchase_noblesse"))
+ {
+ sb.append("<br><font color=LEVEL>Вы хотите стать дворянином?</font><br><br>");
+ sb.append("Стоимость: <font color=LEVEL>").append(String.format("%,d", ITEM_COUNT)).append("</font> аден.<br><br>");
+ sb.append("<table><tr>");
+ sb.append("<td><button value=\"Да\" action=\"bypass _bbspurchase_noblesse_yes\" width=80 height=25 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_CT1.Button_DF\"></td>");
+ sb.append("<td><button value=\"Нет\" action=\"bypass _bbshome\" width=80 height=25 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_CT1.Button_DF\"></td>");
+ sb.append("</tr></table>");
+ }
+ else if (command.equals("_bbspurchase_noblesse_yes"))
+ {
+ sb.append("<br><font color=LEVEL>Покупка Дворянства</font><br><br>");
+
+ if (player.isNoble())
+ {
+ sb.append("Вы уже являетесь дворянином.<br>");
+ }
+ else
+ {
+ long playerCount = player.getInventory().getInventoryItemCount(ITEM_ID, -1);
+ if (playerCount >= ITEM_COUNT)
+ {
+ Item destroyed = player.getInventory().destroyItemByItemId(ItemProcessType.FEE, ITEM_ID, ITEM_COUNT, player, null);
+
+ if (destroyed != null)
+ {
+ player.setNoble(true);
+ player.broadcastPacket(new MagicSkillUse(player, 5103, 1, 0, 0));
+ player.addItem(ItemProcessType.REWARD, TIARA_ID, 1, player, true);
+ player.broadcastUserInfo();
+
+ ItemTemplate item = ItemData.getInstance().getTemplate(ITEM_ID);
+ String itemName = (item != null) ? item.getName() : ("ID: " + ITEM_ID);
+ player.sendMessage("Вы стали дворянином за " + String.format("%,d", ITEM_COUNT) + " " + itemName + ".");
+
+ sb.append("<font color=LEVEL>Поздравляем! Вы стали дворянином!</font><br>");
+ }
+ else
+ {
+ sb.append("<font color=FF0000>Ошибка при списании средств.</font><br>");
+ player.sendMessage("Ошибка при списании средств.");
+ }
+ }
+ else
+ {
+ sb.append("У вас недостаточно средств.<br>Необходимо: <font color=LEVEL>")
+ .append(String.format("%,d", ITEM_COUNT))
+ .append("</font> аден.<br>");
+ player.sendMessage("Недостаточно адены. Требуется " + String.format("%,d", ITEM_COUNT) + " аден.");
+ }
+ }
+ sb.append("<br><button value=\"Назад\" action=\"bypass _bbshome\" width=80 height=25 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_CT1.Button_DF\">");
+ }
+
+ sb.append("</center></body></html>");
+ CommunityBoardHandler.separateAndSend(sb.toString(), player);
+ return true;
+ }
+}
diff --git a/java/org/l2jmobius/Config.java b/java/org/l2jmobius/Config.java
index 2c1f7768..68679a04 100644
--- a/java/org/l2jmobius/Config.java
+++ b/java/org/l2jmobius/Config.java
@@ -1190,6 +1190,10 @@ public class Config
public static long COLOR_CHANGE_ITEM_AMOUNT;
public static String[] COLOR_CHANGE_COLORS;
public static String[] COLOR_CHANGE_COLOR_NAMES;
+ public static boolean NOBLESSE_SERVICE;
+ public static int NOBLESSE_ITEM_ID;
+ public static long NOBLESSE_ITEM_COUNT;
+ public static int NOBLESSE_TIARA_ID;
public static int COMMUNITYBOARD_CURRENCY;
public static boolean COMMUNITYBOARD_ENABLE_MULTISELLS;
public static boolean COMMUNITYBOARD_ENABLE_TELEPORTS;
@@ -3047,6 +3051,10 @@ public class Config
COLOR_CHANGE_ITEM_AMOUNT = communityBoardConfig.getInt("ColorChangeItemAmount", 100000);
COLOR_CHANGE_COLORS = communityBoardConfig.getString("ColorChangeColors", "").split(",");
COLOR_CHANGE_COLOR_NAMES = communityBoardConfig.getString("ColorChangeColorNames", "").split(",");
+ NOBLESSE_SERVICE = communityBoardConfig.getBoolean("NoblesseService", false);
+ NOBLESSE_ITEM_ID = communityBoardConfig.getInt("NoblesseItemId", 57);
+ NOBLESSE_ITEM_COUNT = communityBoardConfig.getInt("NoblesseItemCount", 100000000);
+ NOBLESSE_TIARA_ID = communityBoardConfig.getInt("NoblesseTiaraId", 7694);
COMMUNITYBOARD_CURRENCY = communityBoardConfig.getInt("CommunityCurrencyId", 57);
COMMUNITYBOARD_ENABLE_MULTISELLS = communityBoardConfig.getBoolean("CommunityEnableMultisells", true);
COMMUNITYBOARD_ENABLE_TELEPORTS = communityBoardConfig.getBoolean("CommunityEnableTeleports", true);
--
2.46.0.windows.1
-
update add new services end partial fix premium
https://gitea.com/Debug/ShadowCraftCore
-
add custum services visual change of armor (DressMY) =))