Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
После рестарта пропадают временные скиллы
#1
Всем привет!
Решил стащить с пв систему Skill Of Balance
Все отлично, скиллы выдает в чате пишет когда истекает срок скилла, но после рестарта (какой бы рестарт не делал, уже и пробовал //restart 360, все равно пропадают временные скиллы, в бд значение не меняется и не удаляется!
Мб кто знает в чем может быть проблема?
Сборка Lucera первая.

Вот что я занес в ServerData

Код ServerData.java
Ненависть врага - высшая награда! (с)
Ответ
#2
Может быть включена защита - проверки на "левые" скилы? Smile
Ответ
#3
MrShyr Написал:Может быть включена защита - проверки на "левые" скилы? Smile

А вот это я и не подумал:redlol:... Спасибо Сейчас проверю)
Вообще не должно это мешать т.е я админом проверяю)

Добавлено через 6 минут
Добавил в список исключения для проверки, не помоглоSad

Добавлено через 1 час 47 минут
Из-за этого не может исчезать?
Делалось методом тыка, при покупке скилла в БД нормально заносится всё, делаю релог тоже все отлично,именно после рестарта исчезает.

PHP код:
<?php 
con
= L2DatabaseFactory.getInstance().getConnection();
st = con.prepareStatement("REPLACE INTO `z_donate_skills` (`char_id`, `class_id`, `skill_id`, `skill_lvl`, `expire`) VALUES (?, ?, ?, ?, ?)");
st.setInt(1, charId);
st.setInt(2, cls);
st.setInt(3, id);
st.setInt(4, lvl);
st.setLong(5, expire);
st.execute();
} catch (
Exception e) {
_log.error("ServerData [ERROR]: addDonateSkill() ->" + e);
} finally {
try {
con.close();
st.close();
} catch (
SQLException ex) {
java.util.logging.Logger.getLogger(ServerData.clas s.getName()).log(Level.SEVERE, null, ex);
}
}
Ненависть врага - высшая награда! (с)
Ответ
#4
если защита удаляет скилы, то ето видно в логах, а скилы при старте сервера подгружает ? просто в етом скрипте не видно как скрипт даеть ети самые скилы...
Ответ
#5
Это только то, что относится к БД. т.е я думаю косяк именно тут)

еще кстати метод нашел

PHP код:
<?php 
private void cacheSoldSkills()
{
Connection con = null;
PreparedStatement st = null;
ResultSet rs = null;
try {
con = L2DatabaseFactory.getInstance().getConnection();
con.setTransactionIsolation(1);

st = con.prepareStatement("DELETE FROM z_donate_skills WHERE expire > ? AND expire < ?");
st.setInt(1, 1);
st.setLong(2, System.currentTimeMillis());
st.execute();
st.close();

FastTable dst = new FastTable();
st = con.prepareStatement("SELECT char_id, class_id, skill_id, skill_lvl, expire FROM `z_donate_skills`");
rs = st.executeQuery();
while (
rs.next()) {
int charId = rs.getInt("char_id");
int classId = rs.getInt("class_id");
int skillId = rs.getInt("skill_id");
int skillLvl = rs.getInt("skill_lvl");
long expire = rs.getLong("expire");
DonateSkill ds = new DonateSkill(classId, skillId, skillLvl, expire);
if (
_cachedSkills.get(Integer.valueOf(charId)) == null) {
dst.clear();
dst.add(ds);
_cachedSkills.put(Integer.valueOf(charId), dst);
} else {
((
FastTable)_cachedSkills.get(Integer.valueOf(charId))).add(ds);
}
}
} catch (
Exception e) {
_log.warn("CustomServerData: cacheDonateSkills() error: " + e);
} finally {
try {
con.close();
st.close();
rs.close();
} catch(
SQLException e) {
_log.error("AddDonateSkill: ERROR",e);
}
}
}
Ненависть врага - высшая награда! (с)
Ответ
#6
Injection Написал:А вот это я и не подумал:redlol:... Спасибо Сейчас проверю)
Вообще не должно это мешать т.е я админом проверяю)

Добавлено через 6 минут
Добавил в список исключения для проверки, не помоглоSad

Добавлено через 1 час 47 минут
Из-за этого не может исчезать?
Делалось методом тыка, при покупке скилла в БД нормально заносится всё, делаю релог тоже все отлично,именно после рестарта исчезает.

PHP код:
<?php 
con
= L2DatabaseFactory.getInstance().getConnection();
st = con.prepareStatement("REPLACE INTO `z_donate_skills` (`char_id`, `class_id`, `skill_id`, `skill_lvl`, `expire`) VALUES (?, ?, ?, ?, ?)");
st.setInt(1, charId);
st.setInt(2, cls);
st.setInt(3, id);
st.setInt(4, lvl);
st.setLong(5, expire);
st.execute();
} catch (
Exception e) {
_log.error("ServerData [ERROR]: addDonateSkill() ->" + e);
} finally {
try {
con.close();
st.close();
} catch (
SQLException ex) {
java.util.logging.Logger.getLogger(ServerData.clas s.getName()).log(Level.SEVERE, null, ex);
}
}

как задается переменная expire, может она делится на 1000? если да то и при DELETE нужно уменьшать на 1000.
Ответ
#7
Mifesto Написал:как задается переменная expire, может она делится на 1000? если да то и при DELETE нужно уменьшать на 1000.

Это идет где выдача скиллов, 2 уровня их, - 1 уровень (2 недели) 2 уровень (1 месяц).
PHP код:
<?php 
long expire
= TimeUnit.DAYS.toMillis(15L);
if (
period == 2) {
expire *= 2L;
}

Это же код ServerData, где собственно все связанное с бд
PHP код:
<?php 
public static class DonateSkill
{
public
int cls;
public
int id;
public
int lvl;
public
long expire;
public
int priceId;
public
int priceCount;
public
String priceName;
public
String icon;
public
String info;

public
DonateSkill(int cls, int id, int lvl, long expire)
{
this.cls = cls;
this.id = id;
this.lvl = lvl;
this.expire = expire;
}

public
DonateSkill(int cls, int id, int lvl, long expire, int priceId, int priceCount, String priceName, String icon, String info) {
this.cls = cls;
this.id = id;
this.lvl = lvl;
this.expire = expire;
this.priceId = priceId;
this.priceCount = priceCount;
this.priceName = priceName;
this.icon = icon;
this.info = info;
}
}

мозг кипит, а сердце просит :redlol:
Ненависть врага - высшая награда! (с)
Ответ
#8
вот тут и ошибка, нужно делать:
Код:
long expire = TimeUnit.DAYS.toMillis(15L);
if (period == 2)
   expire *= 2L;
expire += System.currentTimeMillis();

т.е. к этим 15 или 30 дням добавляем текущее время.

П.С. Сложно помочь когда видишь только огрызки.
Ответ
#9
Mifesto Написал:вот тут и ошибка, нужно делать:
Код:
long expire = TimeUnit.DAYS.toMillis(15L);
if (period == 2)
   expire *= 2L;
expire += System.currentTimeMillis();

т.е. к этим 15 или 30 дням добавляем текущее время.

П.С. Сложно помочь когда видишь только огрызки.

Слышал такое) спасибо но не помоглоSad
Выложу полный код, мб кто найдет косяк..
Покупаю скилл,скилл даётся,делаю релог все ок,пишет скилл до: и т.д, все значения в z_donate_skills забрасываются, но после рестрта скилл пропадает, не пишет до какого числа сервис и тд, в бд все сотается так же как и было до рестрта ничего не исчезает и не меняется, в общем как мне кажется и не считывает с БД значения после РРа, если кто допетрит отпишитесь пожалуйста:Olen':

L2DonateInstance

ServerData

L2PcInstance
Ненависть врага - высшая награда! (с)
Ответ
#10
а можно полный L2PcInstance?
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Скиллы трансформации Eternal12 6 2,221 02-23-2019, 01:25 PM
Последний пост: Gaikotsu
  Не видит класс после замены пула SoniPro 2 1,891 10-14-2015, 09:21 PM
Последний пост: SoniPro
  Таблица результатов после Эвента KateKate7912 10 3,130 04-21-2015, 01:11 AM
Последний пост: Ro_0TT
  Исчезновение бафа после срабатывания тригера L2J 2 1,444 08-11-2014, 08:40 PM
Последний пост: L2J
  Неуязвимость после телепорта L2J 8 2,356 05-11-2014, 04:04 PM
Последний пост: SouthBridge
  Скиллы gre4ka 6 2,582 02-06-2014, 02:16 PM
Последний пост: finfan
  запуск действия после атаки energy 4 1,443 11-30-2013, 10:21 PM
Последний пост: energy
  Задержка после выполнения команды. L2J 21 4,748 06-25-2013, 11:48 PM
Последний пост: KID
  Хиро до рестарта bybs 3 1,610 01-03-2013, 02:09 AM
Последний пост: orionpvp
  Как сделать атаку после скилла revlon 6 1,749 09-27-2012, 07:49 PM
Последний пост: revlon

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)