[share][j2se]Сохранене цвета ника и титула.
Смысл кода простой один метод грузит цвет ника другой сохраняет. Все изменение в файле L2Player.java для Rebillion, L2PcInstance.java для других
Для Rebillion
{
ThreadConnection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
FiltredPreparedStatement statement = con.prepareStatement("SELECT name_color,title_color FROM character_color WHERE obj_id=?");
statement.setInt(1, getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
setNameColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("name_color")).toString()).intValue());
setTitleColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("title_color")).toString()).intValue());
}
DatabaseUtils.closeDatabaseCSR(con,statement,rset);
}
catch (Exception e)
{
_log.warning("could not restore colors: "+e);
}
}
private void storeColor()
{
ThreadConnection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
FiltredPreparedStatement statement = con.prepareStatement("UPDATE character_color SET name_color=?,title_color=? WHERE obj_id=?");
statement.setString(1, Integer.toHexString(getNameColor()).toUpperCase());
statement.setString(2, Integer.toHexString(getTitleColor()).toUpperCase());
statement.setInt(3, getObjectId());
statement.execute();
DatabaseUtils.closeDatabaseCS(con,statement);
}
catch (Exception e)
{
_log.warning("could not store colors: "+e);
}
}
Для других
{
java.sql.Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT name_color,title_color FROM character_color WHERE obj_id=?");
statement.setInt(1, getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
setNameColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("name_color")).toString()).intValue());
getAppearance().setTitleColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("title_color")).toString()).intValue());
}
DatabaseUtils.closeDatabaseCSR(con,statement,rset);
}
catch (Exception e)
{
_log.warning("could not restore colors: "+e);
}
finally
{
try{ con.close(); statement.close(); rset.close();}
catch(SQLException e) {}
}
}
private void storeColor()
{
java.sql.Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE character_color SET name_color=?,title_color=? WHERE obj_id=?");
statement.setString(1, Integer.toHexString(getAppearance().getNameColor()).toUpperCase());
statement.setString(2, Integer.toHexString(getAppearance().getTitleColor()).toUpperCase());
statement.setInt(3, getObjectId());
statement.execute();
}
catch (Exception e)
{
_log.warning("could not store colors: "+e);
}
finally
{
try{ con.close(); statement.close(); rset.close();}
catch(SQLException e) {}
}
}
Потом нати строчки где пишется в метод restore() по другом player.restoreColor();
И в методе store() пишем storeColor();
SQL
obj_id decimal(11,0) NOT NULL default '0',
name_color CHAR(6) NOT NULL DEFAULT 'FFFFFF',
title_color CHAR(6) NOT NULL DEFAULT 'FFFF77',
PRIMARY KEY (obj_Id)
);
P.S. для не знающих ядра л2ж сервера просьба не писать что и зачем. Большая просьба добавить эти методы в сборку л2жБасе шары
О ищо в метод createDB пишем
Для Rebillion
statement = con.prepareStatement("INSERT INTO character_color (obj_id,name_color,title_color) VALUES (?,?,?)");
statement.setInt(1,getObjectId());
statement.setString(2, Integer.toHexString(getNameColor()).toUpperCase());
statement.setString(3, Integer.toHexString(getTitleColor()).toUpperCase());
statement.executeUpdate();
Для других
statement = con.prepareStatement("INSERT INTO character_color (obj_id,name_color,title_color) VALUES (?,?,?)");
statement.setInt(1,getObjectId());
statement.setString(2, Integer.toHexString(getAppearance().getNameColor()).toUpperCase());
statement.setString(3, Integer.toHexString(getAppearance().getTitleColor()).toUpperCase());
statement.executeUpdate();
solovec: Лан , на досуге поковыряюсь попробую под эму сделать ) Тока тыкните мне пальцем де в L2PcInstance метод CreateDB а то чёт поиск по файлу не решает :)
Имя файла: L2PcInstance.java
Фаил в котором надо правтить лежит тут:
java\net\sf\l2j\gameserver\model\actor\instance
Отерываем его и жмем Ctrl+F
Вводим: CreateDB
и лично у мну нашло на линиях 712 и 5281.
На линие 5281 читаем синтаксис и добавляем то что вам нужно.
[INFO] Compilation failure
C:\l2emu\L2EmuProject-Game\src\main\java\net\l2emuproject\gameserver\model\actor
\instance\L2PcInstance.java:[1069,46] ')' expected
C:\l2emu\L2EmuProject-Game\src\main\java\net\l2emuproject\gameserver\model\actor
\instance\L2PcInstance.java:[1069,50] illegal start of expression
вот сама строка
setNameColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("name_color")).toString()).intValue());
Пытался сделать так:
getAppearance().setNameColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("name_color")).toString()).intValue());
Storm2k: [INFO] Compilation failure
C:\l2emu\L2EmuProject-Game\src\main\java\net\l2emuproject\gameserver\model\actor
\instance\L2PcInstance.java:[1069,46] ')' expected
C:\l2emu\L2EmuProject-Game\src\main\java\net\l2emuproject\gameserver\model\actor
\instance\L2PcInstance.java:[1069,50] illegal start of expression
вот сама строка
setNameColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("name_color")).toString()).intValue());
Пытался сделать так:
getAppearance().setNameColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("name_color")).toString()).intValue());
читай внимательнее тут под Ребу и л2ж так что смотри.
<<<NEW VERSION>>>
можно немного модифицировать код и получится как на оффе цвет ника.
{
ThreadConnection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
FiltredPreparedStatement statement = con.prepareStatement("SELECT name_color,title_color FROM character_color WHERE obj_id=?");
statement.setInt(1, getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
setNameColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("name_color")).toString()).intValue());
setTitleColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("title_color")).toString()).intValue());
}
DatabaseUtils.closeDatabaseCSR(con,statement,rset);
}
catch (SQLException e)
{
setNameColor(0xFFFFFF);
setTitleColor(0xFFFF77);
}
}
private void storeColor()
{
if(getNameColor() == 0xFFFFFF && getTitleColor() == 0xFFFF77)
return;
ThreadConnection con = null;
FiltredPreparedStatement statement=null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("UPDATE character_color SET name_color=?,title_color=? WHERE obj_id=?");
statement.setString(1, Integer.toHexString(getNameColor()).toUpperCase());
statement.setString(2, Integer.toHexString(getTitleColor()).toUpperCase());
statement.setInt(3, getObjectId());
statement.execute();
DatabaseUtils.closeDatabaseCS(con,statement);
}
catch (SQLException e)
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("INSERT INTO character_color(obj_id, name_color, title_color) VALUES (?,?,?)");
statement.setInt(1, getObjectId());
statement.setString(2, Integer.toHexString(getNameColor()).toUpperCase());
statement.setString(3, Integer.toHexString(getTitleColor()).toUpperCase());
statement.execute();
DatabaseUtils.closeDatabaseCS(con,statement);
}
}
делайте на другие серваки у мну нет времени. Это под ребу.(могу и ошибится).
Терь в нем лагу нет что только для созданых персонахов но и терь и для старых.
Теперь в метод createDb() ничего не пишем.
Смысл типа оффа - если есть в таблице перс то берет с него а если нет то стандартные значение.[size="7"][/size]
если ошибся в синтаксе MySQL то извеняйте я занимаюсь пока с PostgeSQL и с мускулом редко встречаюсь.
Это сырой вариант подправляйте
Под Emu, но думаю, различий немного
import sys
import time
from com.l2emu.gameserver.model.actor.instance import L2PcInstance
from com.l2emu.gameserver.datatables import PcColorTable;
from com.l2emu import L2DatabaseFactory;
from com.l2emu.gameserver.model.quest import State
from com.l2emu.gameserver.model.quest import QuestState
from com.l2emu.gameserver.model.quest.jython import QuestJython as JQuest
#
#========================================
# DO NOT TOUCH THIS
#========================================
QuestId = 9000
QuestName = "ColorManager"
QuestDesc = "custom"
qn = "q"+str(QuestId)+"_"+str(QuestName)
#========================================
StartNpc = 33344
ItemId = 4037
ItemQty = 1
MinLevel = 1
MaxLevel = 85
#========================================
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onAdvEvent(Self,event,npc,player):
text = "noaction.htm"
st = player.getQuestState(qn)
if not st : return text
if (player.getLevel() < MinLevel) or (player.getLevel() > MaxLevel) : return "charlevel.htm"
#if st.getQuestItemsCount(ItemId) < ItemQty : return "nomoney.htm"
if event == "N_DarkBlue" :
nameColor = "660000"
if event == "N_Blue" :
nameColor = "FF0000"
elif event == "N_Rose" :
nameColor = "CC33FF"
elif event == "N_Cyan" :
nameColor = "FF00CC"
elif event == "N_Bordo" :
nameColor = "330066"
elif event == "N_Magenta" :
nameColor = "FF00FF"
elif event == "N_Yellow" :
nameColor = "00FFFF"
elif event == "N_Orange" :
nameColor = "0066FF"
elif event == "N_Gray" :
nameColor = "808080"
elif event == "N_Black" :
nameColor = "000000"
elif event == "N_White" :
nameColor = "FFFFFF"
nameColor = int(nameColor,16)
initTime=int(time.time())*1000
PcColorTable.getInstance().add(player, nameColor, initTime, 0)
text = "done.htm"
return text
def onTalk (Self,npc,player):
st = player.getQuestState(qn)
if not st :
st = self.newQuestState(player)
return "1.htm"
def onFirstTalk (Self,npc,player):
st = getQuestState(qn)
if not st : return "Invalid quest state"
QUEST = Quest(QuestId,qn,QuestDesc)
QUEST.addStartNpc(StartNpc)
QUEST.addTalkId(StartNpc)
print "Loaded: "+qn
не работает. даю чару цвет он делает релог и опять ник белый
Uphill: не работает. даю чару цвет он делает релог и опять ник белый
значит ты невызываешь в нужных местах данные методы
Если нужно то вот скомпилиненный мною сервак Lineage II Gracia Final rev.6775 последняя стабильная сборка Final от команды L2jserver в ней уже реализовано и цветные ники и встроенный ГМшоп в комунити.Если кому будет нужно выложу в шару Lineage II Gracia Epilogue от команды L2jserver в ней будет всё то же что и в Final.
Вот ссылка на тему где есть небольшое описание по этой сборке + пару плюшек в виде Баффера с анимацией баффов и ГлобалГК.
_http://la2base.ru/forum/index.php?showtopic=56217&st=0&gopid=373280&#entry373280
Лучший игровой сервер - Земля: карта всего одна,но на 6 миллиардов игроков,читеров нет,админ терпеливый,но если уж забанит...
— Уважаемый
не работало вот почему. надо было в базу засунуть -
-- Table structure for `character_color` --
-- ----------------------------------------
DROP TABLE IF EXISTS `character_color`;
CREATE TABLE `character_color` (
`charId` decimal(11,0) NOT NULL DEFAULT '0',
`name_color` char(6) NOT NULL DEFAULT 'FFFFFF',
`title_color` char(6) NOT NULL DEFAULT 'FFFF77',
PRIMARY KEY (`charId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-------------------------------------------
Помогите плиз дописать чтобы цвета вписывало в таблицу "character_color"
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 = "7900_Namecolor"
NPC=[90000]
QuestId = 7900
QuestName = "Namecolor"
QuestDesc = "custom"
InitialHtml = "1.htm"
APIGA = 9143
APIGA_KOL = 300
print "Loaded Custom: 7900 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(APIGA) > 299:
st.takeItems(APIGA,APIGA_KOL)
st.getPlayer().getAppearance().setNameColor(0x009900)
st.getPlayer().broadcastUserInfo();
return "1.htm"
if st.getQuestItemsCount(APIGA) <= 299:
return "Announcements: No Enought GA To Select Color!"
st.exitQuest(0)
if event == "2":
if st.getQuestItemsCount(APIGA) > 299:
st.takeItems(APIGA,APIGA_KOL)
st.getPlayer().getAppearance().setNameColor(0xff7f00)
st.getPlayer().broadcastUserInfo();
return "1.htm"
if st.getQuestItemsCount(APIGA) <= 299:
return "Announcements: No Enought GA To Select Color!"
if event == "3":
if st.getQuestItemsCount(APIGA) > 299:
st.takeItems(APIGA,APIGA_KOL)
st.getPlayer().getAppearance().setNameColor(0x333333)
st.getPlayer().broadcastUserInfo();
return "1.htm"
if st.getQuestItemsCount(APIGA) <= 299:
return "Announcements: No Enought GA To Select Color!"
if event == "4":
if st.getQuestItemsCount(APIGA) > 299:
st.takeItems(APIGA,APIGA_KOL)
st.getPlayer().getAppearance().setNameColor(0x00ffff)
st.getPlayer().broadcastUserInfo();
return "1.htm"
if st.getQuestItemsCount(APIGA) <= 299:
return "Announcements: No Enought GA To Select Color!"
if event == "5":
if st.getQuestItemsCount(APIGA) > 299:
st.takeItems(APIGA,APIGA_KOL)
st.getPlayer().getAppearance().setNameColor(0x660066)
st.getPlayer().broadcastUserInfo();
return "1.htm"
if st.getQuestItemsCount(APIGA) <= 299:
return "Announcements: No Enought GA To Select Color!"
if event == "6":
if st.getQuestItemsCount(APIGA) > 299:
st.takeItems(APIGA,APIGA_KOL)
st.getPlayer().getAppearance().setNameColor(0x0099ff)
st.getPlayer().broadcastUserInfo();
return "1.htm"
if st.getQuestItemsCount(APIGA) <= 299:
return "Announcements: No Enought GA To Select Color!"
if event == "7":
if st.getQuestItemsCount(APIGA) > 299:
st.takeItems(APIGA,APIGA_KOL)
st.getPlayer().getAppearance().setNameColor(0x70db93)
st.getPlayer().broadcastUserInfo();
return "1.htm"
if st.getQuestItemsCount(APIGA) <= 299:
return "Announcements: No Enought GA To Select Color!"
if event == "8":
if st.getQuestItemsCount(APIGA) > 299:
st.takeItems(APIGA,APIGA_KOL)
st.getPlayer().getAppearance().setNameColor(0x9f9f9f)
st.getPlayer().broadcastUserInfo();
return "1.htm"
if st.getQuestItemsCount(APIGA) <= 299:
return "Announcements: No Enought GA To Select Color!"
if event == "9":
if st.getQuestItemsCount(APIGA) > 299:
st.takeItems(APIGA,APIGA_KOL)
st.getPlayer().getAppearance().setNameColor(0xffff00)
st.getPlayer().broadcastUserInfo();
return "1.htm"
if st.getQuestItemsCount(APIGA) <= 299:
return "Announcements: No Enought GA To Select Color!"
def onTalk (self,npc,player):
st = player.getQuestState(qn)
htmltext = "<html><head><body><center>Spasibo Vam</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)
блин, забыл вставить код который у меня был, скомпилил....
теперь пытаюсь поставить и не работает ничего...
L2PcInstance.java
2. // Character Transformation SQL String Definitions:
3. private static final String SELECT_CHAR_TRANSFORM = "SELECT transform_id FROM characters WHERE charId=?";
4. private static final String UPDATE_CHAR_TRANSFORM = "UPDATE characters SET transform_id=? WHERE charId=?";
5.
6. + // Character Color System by VISTALL
7. + private static final String INSERT_CHAR_COLOR = "INSERT INTO character_color(charId, name_color, title_color) VALUES (?,?,?)";
8. + private static final String SELECT_CHAR_COLOR = "SELECT * FROM character_color WHERE charId=?";
9. + private static final String UPDATE_CHAR_COLOR = "UPDATE character_color SET name_color=?, title_color=? WHERE charId=?";
10.
11. =====================================
12.
13. case L2PcInstance.STORE_PRIVATE_MANUFACTURE:
14. activeChar.sendPacket(new RecipeShopMsg(this));
15. break;
16. }
17. }
18.
19. + /**
20. + * method fo restore colors from database
21. + * and insert if in database if not exists
22. + * @author VISTALL
23. + */
24. + public void restoreColor()
25. + {
26. + Connection con = null;
27. + PreparedStatement statement = null;
28. + ResultSet rset = null;
29. + try
30. + {
31. + con = L2DatabaseFactory.getInstance().getConnection();
32. + statement = con.prepareStatement(SELECT_CHAR_COLOR);
33. + statement.setInt(1, getObjectId());
34. + rset = statement.executeQuery();
35. +
36. + if (rset.next())
37. + {
38. + getAppearance().setNameColor(Integer.decode((new +StringBuilder()).append("0x").append(rset.getString("name_color")).toString()).intValue());
39. + getAppearance().setTitleColor(Integer.decode((new +StringBuilder()).append("0x").append(rset.getString("title_color")).toString()).intValue());
40. + }
41. + else
42. + {
43. + con = L2DatabaseFactory.getInstance().getConnection();
44. + statement = con.prepareStatement(INSERT_CHAR_COLOR);
45. + statement.setInt(1, getObjectId());
46. + statement.setString(2, Integer.toHexString(getAppearance().getNameColor()).toUpperCase());
47. + statement.setString(3, Integer.toHexString(getAppearance().getTitleColor()).toUpperCase());
48. + statement.execute();
49. + }
50. + }
51. + catch (Exception e)
52. + {
53. + _log.warning("could not restore colors: "+e);
54. + }
55. + finally
56. + {
57. + try{ con.close(); statement.close(); rset.close();}
58. +
59. + catch(SQLException e) {}
60. + }
61. + }
62. +
63. + /**
64. + * Store colors
65. + * @author VISTALL
66. + */
67. + private void storeColor()
68. + {
69. +
70. + Connection con = null;
71. + PreparedStatement statement = null;
72. + try
73. + {
74. + con = L2DatabaseFactory.getInstance().getConnection();
75. + statement = con.prepareStatement(UPDATE_CHAR_COLOR);
76. + statement.setString(1, Integer.toHexString(getAppearance().getNameColor()).toUpperCase());
77. + statement.setString(2, Integer.toHexString(getAppearance().getTitleColor()).toUpperCase());
78. + statement.setInt(3, getObjectId());
79. + statement.execute();
80. + }
81. + catch (Exception e)
82. + {
83. + _log.warning("could not store colors: "+e);
84. + e.printStackTrace();
85. + }
86. + finally
87. + {
88. + try
89. + {
90. + con.close(); statement.close();
91. + }
92. + catch(SQLException e) {}
93. + }
94. + }
правильно?
делал как в первом примере, т.е. с createDB, сборка Archid interlud, косяк в том цвет то он дает, но при релоге не подгружает его на чара, ниже код
{
java.sql.Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT name_color,title_color FROM character_color WHERE obj_id=?");
statement.setInt(1, getObjectId());
ResultSet rset = statement.executeQuery();
while (rset.next())
{
getAppearance().setNameColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("name_color")).toString()).intValue());
getAppearance().setTitleColor(Integer.decode((new StringBuilder()).append("0x").append(rset.getString("title_color")).toString()).intValue());
}
rset.close();
statement.close();
}
catch (Exception e)
{
_log.warning("could not restore colors: "+e);
}
finally
{
try{ con.close(); }
catch(SQLException e) {}
}
}
private void storeColor()
{
java.sql.Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE character_color SET name_color=?,title_color=? WHERE obj_id=?");
statement.setString(1, Integer.toHexString(getAppearance().getNameColor()).toUpperCase());
statement.setString(2, Integer.toHexString(getAppearance().getTitleColor()).toUpperCase());
statement.setInt(3, getObjectId());
statement.execute();
statement.close();
}
catch (Exception e)
{
_log.warning("could not store colors: "+e);
}
finally
{
try { con.close(); } catch (SQLException e) {}
}
}
переменную storeColor(); вписал как показанно ниже:
{
//update client coords, if these look like true
if (isInsideRadius(getClientX(), getClientY(), 1000, true))
setXYZ(getClientX(), getClientY(), getClientZ());
storeCharBase();
storeCharSub();
storeEffect();
storeRecipeBook();
storeColor();
}
в чем косяк... непонимаю...





