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

Счетчик Отката Инстанса

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

Собственно сабж. Занялся проработкой отображения времени отката инстанса.

 

Сделал всё, кроме отображения корректного времени отката.

 

По коду как то так:

 

Player.java

 

public Map<Integer, Long> getAllInstanceTimes(int playerObjId)
{
 if (!_playerInstanceTimes.containsKey(Integer.valueOf(playerObjId)))
 {
  loadInstanceReuses();
 }
 return _playerInstanceTimes.get(Integer.valueOf(playerObjId));
}

 

public Map<Integer, Long> getInstanceReuses()
{
 return _instancesReuses;
}
private void loadInstanceReuses()
{
 Connection con = null;
 PreparedStatement offline = null;
 ResultSet rs = null;
 try
 {
  con = DatabaseFactory.getInstance().getConnection();
  offline = con.prepareStatement("SELECT * FROM character_instances WHERE obj_id = ?");
  offline.setInt(1, getObjectId());
  rs = offline.executeQuery();
  while(rs.next())
  {
   int id = rs.getInt("id");
   long reuse = rs.getLong("reuse");
   _instancesReuses.put(id, reuse);
  }
 }
 catch(Exception e)
 {
  _log.error("", e);
 }
 finally
 {
  DbUtils.closeQuietly(con, offline, rs);
 }
}

 

Далее, получив данные из таблицы, к примеру

205,1378764709154

 

где 205 - id, 1378764709154 - reuse

 

Пишем это дело в пакет.

 

public class ExInzoneWaitingInfo extends L2GameServerPacket
{
private static final Logger _log = LoggerFactory.getLogger(ExInzoneWaitingInfo.class);
private int _currentInzoneID = -1;
private int _StoryId;
private long _storyReuse;
Map<Integer, Integer> _instanceTimes;
private int instRe;
private int thisRef;



public ExInzoneWaitingInfo(Player player)
{
_instanceTimes = new FastMap<Integer, Integer>();
if(player.getActiveReflection() == null)
{
thisRef = 0;
}
else
{
thisRef = player.getActiveReflection().getInstancedZoneId();
}
player.getAllInstanceTimes(player.getObjectId());
Map<Integer,Long> maps = player.getInstanceReuses();
for(int instanceId : maps.keySet())
{
int remainingTime = (int)((((Long)maps.get(Integer.valueOf(instanceId))).longValue() - System.currentTimeMillis()) / 1000L);
_log.info("Current reuse : "+ ((Long)maps.get(Integer.valueOf(instanceId)).longValue()));
_instanceTimes.put(Integer.valueOf(instanceId), Integer.valueOf(remainingTime));
}
}

@Override
protected void writeImpl()
{
writeD(thisRef); //Обозначаем Текущий инстанс
writeD(_instanceTimes.size());
for(int instanceId : _instanceTimes.keySet())
{
//instReenter = (int) instRe;
writeD(instanceId); //Недоступное подземелье
writeD(((Integer)_instanceTimes.get(Integer.valueOf(instanceId))).intValue()); //Откат
}
}
}

 

При этом, получаем

remainingTime

< 0

 

Что в принципе неправильно. Где я накосячил, подскажите пожалуйста.

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


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

На корню не правильно.

package ru.ljts.gameserver.network.lineage.serverpackets;
import java.util.Iterator;
import java.util.Map;
import javolution.util.FastMap;
import ru.ljts.gameserver.data.xml.holder.InstantZoneHolder;
import ru.ljts.gameserver.model.Player;
/**
* @author KilRoy
*/
public class ExInZoneWaitingInfo extends L2GameServerPacket
{
private int instanceZoneId = -1;
private Map<Integer, Integer> collapseInstanceTime;
public ExInZoneWaitingInfo(Player player)
{
 collapseInstanceTime = new FastMap<Integer, Integer>();
 if(player.getActiveReflection() != null)
  instanceZoneId = player.getActiveReflection().getInstancedZoneId();
 for(int i : player.getInstanceReuses().keySet())
 {
  int timeToCollapse = InstantZoneHolder.getInstance().getMinutesToNextEntrance(i, player);
  if(timeToCollapse > 0)
   collapseInstanceTime.put(i, timeToCollapse * 60);
 }
}
@Override
protected void writeImpl()
{
 writeFe(getClass());
 writeD(instanceZoneId);
 writeD(collapseInstanceTime.size());
 for(Iterator<Integer> i = collapseInstanceTime.keySet().iterator(); i.hasNext()
 {
  int currentInstanceId = i.next().intValue();
  writeD(currentInstanceId);
  writeD((collapseInstanceTime.get(currentInstanceId)));
 }
}
}

  • Upvote 1

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


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

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

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

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

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

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

Войти

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

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

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

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

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