Перейти к содержанию
Авторизация  
GUSTAVO

Сохранение схем бафов через бафер в альт б L2JPS (Основа L2JServer)

Рекомендуемые сообщения

Всем привет! Помогите решить проблему. Имеется бафер и сохранение бафов. Сохранение бафов идет в базу данных.

Суть проблемы: Не сохраняются комбо бафы, нашел причину - у комбо бафов в хмл прописаны по 2 эффекта (если делаю 1 эффект в хмл то все нормально сохраняет). 

Сохранение бафов в бд идет не понятно для меня как (рис 1).

Вот кусок кода из исходов на сохранение:

 



private void SAVE(L2PcInstance activeChar, boolean petbuff)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement stat = con.prepareStatement("SELECT COUNT(*) FROM community_skillsave WHERE charId=?;");
stat.setInt(1, activeChar.getObjectId());
ResultSet rset = stat.executeQuery();
rset.next();
String allbuff = "";
if (!petbuff)
{
L2Effect skill[] = activeChar.getAllEffectsCB();
boolean flag = true;
int arr$[][] = allskillid_1;
int len$ = arr$.length;
for (int i$ = 0; i$ < len$; i$++)
{
int aSkillid[] = arr$[i$];
for (int j = 0; j < skill.length; j++)
{
if (aSkillid[0] == skill[j].getId())
{
allbuff = (new StringBuilder()).append(allbuff).append(1).toString();
flag = false;
}
if ((j == (skill.length - 1)) && flag)
{
allbuff = (new StringBuilder()).append(allbuff).append(0).toString();
}
}
flag = true;
}

if (rset.getInt(1) == 0)
{
PreparedStatement statement1 = con.prepareStatement("INSERT INTO community_skillsave (charId,skills) values (?,?)");
statement1.setInt(1, activeChar.getObjectId());
statement1.setString(2, allbuff);
statement1.execute();
statement1.close();
activeChar.sendMessage("\u0412\u0430\u0448\u0430 \u0441\u0445\u0435\u043C\u0430 \u0431\u0430\u0444\u043E\u0432 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430!");
}
else
{
PreparedStatement statement = con.prepareStatement("UPDATE community_skillsave SET skills=? WHERE charId=?;");
statement.setString(1, allbuff);
statement.setInt(2, activeChar.getObjectId());
statement.execute();
statement.close();
activeChar.sendMessage("\u0412\u0430\u0448\u0430 \u0441\u0445\u0435\u043C\u0430 \u0431\u0430\u0444\u043E\u0432 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430!");
}
}
else
{
L2Effect skill[] = activeChar.getSummon().getAllEffectsCB();
boolean flag = true;
int arr$[][] = allskillid_1;
int len$ = arr$.length;
for (int i$ = 0; i$ < len$; i$++)
{
int aSkillid[] = arr$[i$];
for (int j = 0; j < skill.length; j++)
{
if (aSkillid[0] == skill[j].getId())
{
allbuff = (new StringBuilder()).append(allbuff).append(1).toString();
flag = false;
}
if ((j == (skill.length - 1)) && flag)
{
allbuff = (new StringBuilder()).append(allbuff).append(0).toString();
}
}
flag = true;
}

if (rset.getInt(1) == 0)
{
PreparedStatement statement1 = con.prepareStatement("INSERT INTO community_skillsave (charId,pet) values (?,?)");
statement1.setInt(1, activeChar.getObjectId());
statement1.setString(2, allbuff);
statement1.execute();

statement1.close();
activeChar.sendMessage("\u0412\u0430\u0448\u0430 \u0441\u0445\u0435\u043C\u0430 \u0431\u0430\u0444\u043E\u0432 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430!");
}
else
{
PreparedStatement statement = con.prepareStatement("UPDATE community_skillsave SET pet=? WHERE charId=?;");
statement.setString(1, allbuff);
statement.setInt(2, activeChar.getObjectId());
statement.execute();
statement.close();
activeChar.sendMessage("\u0412\u0430\u0448\u0430 \u0441\u0445\u0435\u043C\u0430 \u0431\u0430\u0444\u043E\u0432 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430!");
}
}
rset.close();
stat.close();
}
catch (Exception ignored)
{
try
{
if (con != null)
{
con.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
try
{
if (con != null)
{
con.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}

 

Вот исходник восстановления:

private void BUFF(L2PcInstance activeChar, boolean petbuff)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT * FROM community_skillsave WHERE charId=?;");
statement.setInt(1, activeChar.getObjectId());
ResultSet rcln = statement.executeQuery();
rcln.next();
if (!petbuff)
{
char allskills[] = rcln.getString(2).toCharArray();
if (allskills.length == allskillid_1.length)
{
for (int i = 0; i < allskillid_1.length; i++)
{
if (allskills == '1')
{
if (Config.BUFF_COST)
{
if (activeChar.destroyItemByItemId(null, allskillid_1[3], allskillid_1[2], activeChar, true))
{
int skilllevel = SkillTable.getInstance().getMaxLevel(allskillid_1[0]);
L2Skill skill = SkillTable.getInstance().getInfo(allskillid_1[0], skilllevel);
skill.getEffects(activeChar, activeChar);
activeChar.getLevel();
}
else
{
activeChar.sendMessage("You don't have adena for using service.");
}
}
else
{
int skilllevel = SkillTable.getInstance().getMaxLevel(allskillid_1[0]);
L2Skill skill = SkillTable.getInstance().getInfo(allskillid_1[0], skilllevel);
skill.getEffects(activeChar, activeChar);
}
}
}

}
}
else
{
char petskills[] = rcln.getString(3).toCharArray();
if (petskills.length == allskillid_1.length)
{
for (int i = 0; i < allskillid_1.length; i++)
{
if (petskills != '1')
{
continue;
}
if (Config.BUFF_COST)
{
if (activeChar.destroyItemByItemId(null, allskillid_1[3], allskillid_1[2], activeChar, true))
{
int skilllevel = SkillTable.getInstance().getMaxLevel(allskillid_1[0]);
L2Skill skill = SkillTable.getInstance().getInfo(allskillid_1[0], skilllevel);
skill.getEffects(activeChar.getSummon(), activeChar.getSummon());
}
else
{
activeChar.sendMessage("You don't have adena for using service.");
}
}
else
{
int skilllevel = SkillTable.getInstance().getMaxLevel(allskillid_1[0]);
L2Skill skill = SkillTable.getInstance().getInfo(allskillid_1[0], skilllevel);
skill.getEffects(activeChar.getSummon(), activeChar.getSummon());
}
}

}
}
rcln.close();
statement.close();
}
catch (Exception ignored)
{
try
{
if (con != null)
{
con.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}

}
try
{
if (con != null)
{
con.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}


}

 

Помогите, пожалуйста, решить это дело!

Может можно поправить как то код чтоб сохранение шло не в 0 и 1, а skill_id1,lvl;skill_id2,lvl; и тд.. 

P.S. В  java я очень далекий новичок, но читать код более мение могу))

post-22657-0-99111700-1479744391_thumb.jpg

Изменено пользователем akcent

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты


private void SAVE(L2PcInstance activeChar, boolean petbuff, String name)
{
try (Connection con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement stat = con.prepareStatement("SELECT COUNT(*) FROM community_skillsave WHERE charId=? AND name=?;"))
{
stat.setInt(1, activeChar.getObjectId());
stat.setString(2, name);
ResultSet rset = stat.executeQuery();
rset.next();
String allbuff = "";
int id = 0;
CharEffectList skill = activeChar.getEffectList();
boolean flag = true;
int arr$[][] = allskillid_1;
int len$ = arr$.length;
for (int i$ = 0; i$ < len$; i$++)
{
int aSkillid[] = arr$[i$];
for (int j = 0; j < skill.getEffects().size(); j++)
{
if ((skill.getBuffInfoBySkillId(aSkillid[0]) != null) && (id != aSkillid[0]))
{
allbuff = (new StringBuilder()).append(allbuff).append(1).toString();
flag = false;
id = aSkillid[0];
}
if ((j == (skill.getEffects().size() - 1)) && flag)
{
allbuff = (new StringBuilder()).append(allbuff).append(0).toString();
}
}
flag = true;
}

if (rset.getInt(1) == 0)
{
PreparedStatement statement1 = con.prepareStatement("INSERT INTO community_skillsave (charId,name,skills) values (?,?,?)");
statement1.setInt(1, activeChar.getObjectId());
statement1.setString(2, name);
statement1.setString(3, allbuff);
statement1.execute();
statement1.close();
}
else
{
activeChar.sendMessage("Input error. This name is not available!");
}

rset.close();
stat.close();
}
catch (SQLException e)
{
}
}


private void BUFF(L2PcInstance activeChar, boolean petbuff, String name)
{
try (Connection con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT * FROM community_skillsave WHERE charId=? AND name=?;"))
{
statement.setInt(1, activeChar.getObjectId());
statement.setString(2, name);
ResultSet rcln = statement.executeQuery();
rcln.next();
boolean again = false;
int id[] = new int[allskillid_1.length - 1];
char allskills[] = rcln.getString(3).toCharArray();
if (allskills.length == allskillid_1.length)
{
for (int i = 0; i < allskillid_1.length; i++)
{
if (allskills[i] == '1')
{
int skilllevel = SkillData.getInstance().getMaxLevel(allskillid_1[i][0]);
Skill skill = SkillData.getInstance().getSkill(allskillid_1[i][0], skilllevel);
for (int j = 0; j < i; j++)
{
if (allskillid_1[i][0] != id[j])
{
again = false;
}
else
{
again = true;
break;
}
}
id[i] = allskillid_1[i][0];
if (again)
{
continue;
}
if (Config.MANI_BUFF && (MIN_FREE_LVL < activeChar.getLevel()))
{
if (activeChar.destroyItemByItemId(null, allskillid_1[i][3], allskillid_1[i][2], activeChar, true))
{
if (!petbuff)
{
skill.applyEffects(activeChar, activeChar, true, BUFFTIME);
}
else if (petbuff && activeChar.hasSummon())
{
skill.applyEffects(activeChar.getSummon(), activeChar.getSummon(), true, BUFFTIME);
}
else
{
activeChar.sendMessage("You have not summon!");
}
}
else
{
activeChar.sendPacket(new ExShowScreenMessage("Sorry, not item!!", 3000));
}
}
else
{
if (!petbuff)
{
skill.applyEffects(activeChar, activeChar, true, BUFFTIME);
}
else if (petbuff && activeChar.hasSummon())
{
skill.applyEffects(activeChar.getSummon(), activeChar.getSummon(), true, BUFFTIME);
}
else
{
activeChar.sendMessage("You have not summon!");
}
}
}
}

}
rcln.close();
statement.close();
}
catch (SQLException e)
{
}
}
Изменено пользователем zGosu
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если не понятно, то эти строчки - твой фикс:

							if (allskillid_1[i][0] != id[j])
							{
								again = false;
							}
							else
							{
								again = true;
								break;
							}
						}
						id[i] = allskillid_1[i][0];
						if (again)
						{
							continue;
						}
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое! Помог zGosu!

Сохранения работали, оказывается восстановление не работало как надо, вот код:

private void BUFF(L2PcInstance activeChar, boolean petbuff)


{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT * FROM community_skillsave WHERE charId=?;");
statement.setInt(1, activeChar.getObjectId());
ResultSet rcln = statement.executeQuery();
rcln.next();
if (!petbuff)
{
char allskills[] = rcln.getString(2).toCharArray();
if (allskills.length == allskillid_1.length)
{
for (int i = 0; i < allskillid_1.length; i++)
{
if (allskills == '1')
{
int skilllevel = SkillTable.getInstance().getMaxLevel(allskillid_1[0]);
L2Skill skill = SkillTable.getInstance().getInfo(allskillid_1[0], skilllevel);

if (Config.BUFF_COST)
{
if (activeChar.destroyItemByItemId(null, allskillid_1[3], allskillid_1[2], activeChar, true))
{
skill.getEffects(activeChar, activeChar);
activeChar.getLevel();
}
else
{
activeChar.sendMessage("You don't have adena for using service.");
}
}
else
{
skill.getEffects(activeChar, activeChar);
}
}
}

}
}
else
{
char petskills[] = rcln.getString(3).toCharArray();
if (petskills.length == allskillid_1.length)
{
for (int i = 0; i < allskillid_1.length; i++)
{
int skilllevel = SkillTable.getInstance().getMaxLevel(allskillid_1[0]);
L2Skill skill = SkillTable.getInstance().getInfo(allskillid_1[0], skilllevel);

if (petskills != '1')
{
continue;
}
if (Config.BUFF_COST)
{
if (activeChar.destroyItemByItemId(null, allskillid_1[3], allskillid_1[2], activeChar, true))
{
skill.getEffects(activeChar.getSummon(), activeChar.getSummon());
}
else
{
activeChar.sendMessage("You don't have adena for using service.");
}
}
else
{
skill.getEffects(activeChar.getSummon(), activeChar.getSummon());
}
}

}
}
rcln.close();
statement.close();
}
catch (Exception ignored)
{
try
{
if (con != null)
{
con.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}

}
try
{
if (con != null)
{
con.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...