Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Работа со скриптами (https://forum.zone-game.info/forumdisplay.php?f=37)
-   -   После рестарта пропадают временные скиллы (https://forum.zone-game.info/showthread.php?t=29923)

Injection 05.07.2013 20:51

После рестарта пропадают временные скиллы
 
Всем привет!
Решил стащить с пв систему Skill Of Balance
Все отлично, скиллы выдает в чате пишет когда истекает срок скилла, но после рестарта (какой бы рестарт не делал, уже и пробовал //restart 360, все равно пропадают временные скиллы, в бд значение не меняется и не удаляется!
Мб кто знает в чем может быть проблема?
Сборка Lucera первая.

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

Код ServerData.java:
Свернуть ↑Развернуть ↓

MrShyr 05.07.2013 20:55

Re: После рестарта пропадают временные скиллы
 
Может быть включена защита - проверки на "левые" скилы? :)

Injection 05.07.2013 20:56

Re: После рестарта пропадают временные скиллы
 
Цитата:

Сообщение от MrShyr (Сообщение 309378)
Может быть включена защита - проверки на "левые" скилы? :)

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

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

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

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(1charId);
st.setInt(2cls);
st.setInt(3id);
st.setInt(4lvl);
st.setLong(5expire);
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.SEVEREnullex);
}



APKO 05.07.2013 23:31

Re: После рестарта пропадают временные скиллы
 
если защита удаляет скилы, то ето видно в логах, а скилы при старте сервера подгружает ? просто в етом скрипте не видно как скрипт даеть ети самые скилы...

Injection 06.07.2013 00:09

Re: После рестарта пропадают временные скиллы
 
Это только то, что относится к БД. т.е я думаю косяк именно тут)

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

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(11);
      
st.setLong(2System.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(classIdskillIdskillLvlexpire);
        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);
            }
    }
  } 


Mifesto 06.07.2013 00:13

Re: После рестарта пропадают временные скиллы
 
Цитата:

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

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

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

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(1charId);
st.setInt(2cls);
st.setInt(3id);
st.setInt(4lvl);
st.setLong(5expire);
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.SEVEREnullex);
}



как задается переменная expire, может она делится на 1000? если да то и при DELETE нужно уменьшать на 1000.

Injection 06.07.2013 00:22

Re: После рестарта пропадают временные скиллы
 
Цитата:

Сообщение от Mifesto (Сообщение 309397)
как задается переменная expire, может она делится на 1000? если да то и при DELETE нужно уменьшать на 1000.

Это идет где выдача скиллов, 2 уровня их, - 1 уровень (2 недели) 2 уровень (1 месяц).
PHP код:

    long expire TimeUnit.DAYS.toMillis(15L);
    if (
period == 2) {
      
expire *= 2L;
    } 

Это же код ServerData, где собственно все связанное с бд
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 clsint idint lvllong expire)
    {
      
this.cls cls;
      
this.id id;
      
this.lvl lvl;
      
this.expire expire;
    }

    public 
DonateSkill(int clsint idint lvllong expireint priceIdint priceCountString priceNameString iconString 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:

Mifesto 06.07.2013 00:52

Re: После рестарта пропадают временные скиллы
 
вот тут и ошибка, нужно делать:
Код:

long expire = TimeUnit.DAYS.toMillis(15L);
if (period == 2)
  expire *= 2L;
expire += System.currentTimeMillis();

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

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

Injection 06.07.2013 02:54

Re: После рестарта пропадают временные скиллы
 
Цитата:

Сообщение от Mifesto (Сообщение 309403)
вот тут и ошибка, нужно делать:
Код:

long expire = TimeUnit.DAYS.toMillis(15L);
if (period == 2)
  expire *= 2L;
expire += System.currentTimeMillis();

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

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

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

L2DonateInstance:
Свернуть ↑Развернуть ↓


ServerData:
Свернуть ↑Развернуть ↓


L2PcInstance:
Свернуть ↑Развернуть ↓

Mifesto 06.07.2013 03:31

Re: После рестарта пропадают временные скиллы
 
а можно полный L2PcInstance?


Текущее время: 23:00. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot