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

Временная Зона После Камалоки

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

Добрый вечер.

Подскажите пожалуйста возможно ли убрать временную зону (5 минут после выхода из камалоки)?

 

<reuse resetReuse="* * * * *" setUponEntry="false" sharedReuseGroup="1"/>

 

Отката инста нет. Но приходится после выхода ждать 5 минут,что бы войти опять.

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

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


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

если честно, вообще не пойму как связано задание крон/шедулед с тем, что Вы написали

это задача выполняемая ежеминутно, и, наверное, проверка на состояние инстанс зоны

 

Вам нужно в инстансменеджере искать (в ядре) значения

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

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


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

<list>
<!-- Gludio Castle Town: NPC Bathis (Level 23) -->
<instance id="57" name="Kamaloka, Hall of the Abyss" maxChannels="10" collapseIfEmpty="10" timelimit="30" dispelBuffs="false">
<collapse on-party-dismiss="true" timer="60"/>
<level min="18" max="28"/>
<party min="2" max="6"/>
<return loc="-13930 123748 -3120"/>
<teleport loc="-88995 -220764 -7900"/>
<remove itemId="0" count="0" necessary="false"/>
<give itemId="0" count="0"/>
<quest id="0"/>
<reuse resetReuse="* * * * *" setUponEntry="false" sharedReuseGroup="1"/>
<add_parameters>
<param name="tele_device_loc" value="-89000 -220065 -7888"/>
</add_parameters>
<spawns>
<!-- Tomlan Kamos -->
<spawn mobId="18554" type="loc">
<coords loc="-88798 -219878 -7900 -7900"/>
<coords loc="-88798 -220278 -7900 -7900"/>
<coords loc="-89198 -220278 -7900 -7900"/>
<coords loc="-89198 -219878 -7900 -7900"/>
</spawn>
</spawns>
</instance>
</list>

 

Это xml инстанса самой камалоки.

А где искать эту "проверка на состояние инстанс зоны" я не знаю.

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


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

InstantZoneParser.java

Но там я ни чего не увидел про время ожидания повторного входа.

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


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

InstantZoneHolder.java

 

package l2ft.gameserver.data.xml.holder;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import l2ft.commons.data.xml.AbstractHolder;
import l2ft.commons.time.cron.SchedulingPattern;
import l2ft.gameserver.model.Player;
import l2ft.gameserver.templates.InstantZone;
import org.napile.primitive.maps.IntObjectMap;
import org.napile.primitive.maps.impl.HashIntObjectMap;

public class InstantZoneHolder extends AbstractHolder
{
private static final InstantZoneHolder _instance = new InstantZoneHolder();
private IntObjectMap _zones = new HashIntObjectMap();

public static InstantZoneHolder getInstance()
{
return _instance;
}

public void addInstantZone(InstantZone zone)
{
_zones.put(zone.getId(), zone);
}

public InstantZone getInstantZone(int id)
{
return _zones.get(id);
}

private SchedulingPattern getResetReuseById(int id)
{
InstantZone zone = getInstantZone(id);
return zone == null ? null : zone.getResetReuse();
}

public int getMinutesToNextEntrance(int id, Player player)
{
SchedulingPattern resetReuse = getResetReuseById(id);
if(resetReuse == null)
return 0;

Long time = null;
if(getSharedReuseInstanceIds(id) != null && !getSharedReuseInstanceIds(id).isEmpty())
{
List reuses = new ArrayList();
for(int i : getSharedReuseInstanceIds(id))
if(player.getInstanceReuse(i) != null)
reuses.add(player.getInstanceReuse(i));
if(!reuses.isEmpty())
{
Collections.sort(reuses);
time = reuses.get(reuses.size() - 1);
}
}
else
time = player.getInstanceReuse(id);
if(time == null)
return 0;
[color=#ff0000]return (int) Math.max((resetReuse.next(time) - System.currentTimeMillis()) / 60000L, 0);[/color]
}


public List getSharedReuseInstanceIds(int id)
{
if(getInstantZone(id).getSharedReuseGroup() < 1)
return null;
List sharedInstanceIds = new ArrayList();
for(InstantZone iz : _zones.values())
if(iz.getSharedReuseGroup() > 0 && getInstantZone(id).getSharedReuseGroup() > 0 && iz.getSharedReuseGroup() == getInstantZone(id).getSharedReuseGroup())
sharedInstanceIds.add(iz.getId());
return sharedInstanceIds;
}

public List getSharedReuseInstanceIdsByGroup(int groupId)
{
if(groupId < 1)
return null;
List sharedInstanceIds = new ArrayList();
for(InstantZone iz : _zones.values())
if(iz.getSharedReuseGroup() > 0 && iz.getSharedReuseGroup() == groupId)
sharedInstanceIds.add(iz.getId());
return sharedInstanceIds;
}

@Override
public int size()
{
return _zones.size();
}

@Override
public void clear()
{
_zones.clear();
}
}

 

То,что выделено красным это и есть то,что мне нужно?

Если да то подскажите что значит 60000L

Есть ли какой то конвертор времени?

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


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

60000 если это в милсекундах то это 1 минута но не как ни 5(

 

Помогите разобраться пожалуйста

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


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

холдер просто парсит значения из xml файлов, он никак не связан с тем, что ты ищешь

у тебя во всех зонах так или в какой-то конкретной?

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


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

Ну на HF стандартно 5 минут по идее после инста.

Ну я по 3 камам бегал после каждой нужно было ждать,а я хочу убрать это время ожидания.

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


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

return (int) Math.max((resetReuse.next(time) - System.currentTimeMillis()) / 60000L, 0);[/color

То есть если я изменю значение 60000L ну скажем на 1 то у меня ни чего не изменится да?

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


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

InstantZoneHolder.java и InstantZoneParser.java

нашёл эти два файлы какой из них может мне помочь?

Я просто уже всё перерыл.

Подскажите как убрать это чёртово время после выхода из инста,что бы можно было сразу в инст входить.

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


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

System.currentTimeMillis()) / 60000L, 0);

Не помогло

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

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


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

Что ни кто не знает где в исходах можно править время отката после инста?

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


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

Что ни кто не знает где в исходах можно править время отката после инста?

300000

ищи это значение в ядре (можешь даже поиск по файлам всем юзать, с вероятностью в 99% ты найдешь это значение и не одно, дальше только прочесть название класса и понять для чего он

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


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

ThreadPoolManager.java

 

scheduleAtFixedRate(new RunnableImpl()

{

@Override

public void runImpl()

{

_scheduledExecutor.purge();

_executor.purge();

}

}, 300000L, 300000L);

}

 

Это оно?

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

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


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

package l2ft.gameserver;

 

import java.util.concurrent.LinkedBlockingQueue;

import java.util.concurrent.ScheduledFuture;

import java.util.concurrent.ScheduledThreadPoolExecutor;

import java.util.concurrent.ThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

 

import l2ft.commons.threading.LoggingRejectedExecutionHandler;

import l2ft.commons.threading.PriorityThreadFactory;

import l2ft.commons.threading.RunnableImpl;

import l2ft.commons.threading.RunnableStatsWrapper;

 

public class ThreadPoolManager

{

private static final long MAX_DELAY = TimeUnit.NANOSECONDS.toMillis(Long.MAX_VALUE - System.nanoTime()) / 2;

 

private static final ThreadPoolManager _instance = new ThreadPoolManager();

 

public static ThreadPoolManager getInstance()

{

return _instance;

}

 

private final ScheduledThreadPoolExecutor _scheduledExecutor;

private final ThreadPoolExecutor _executor;

 

private boolean _shutdown;

 

private ThreadPoolManager()

{

_scheduledExecutor = new ScheduledThreadPoolExecutor(Config.SCHEDULED_THREAD_POOL_SIZE, new PriorityThreadFactory("ScheduledThreadPool", Thread.NORM_PRIORITY), new LoggingRejectedExecutionHandler());

_executor = new ThreadPoolExecutor(Config.EXECUTOR_THREAD_POOL_SIZE, Integer.MAX_VALUE, 5L, TimeUnit.SECONDS, new LinkedBlockingQueue(), new PriorityThreadFactory("ThreadPoolExecutor", Thread.NORM_PRIORITY), new LoggingRejectedExecutionHandler());

 

//Очистка каждые 5 минут

scheduleAtFixedRate(new RunnableImpl()

{

@Override

public void runImpl()

{

_scheduledExecutor.purge();

_executor.purge();

}

}, 300000L, 300000L);

}

 

private long validate(long delay)

{

return Math.max(0, Math.min(MAX_DELAY, delay));

}

 

public boolean isShutdown()

{

return _shutdown;

}

 

public Runnable wrap(Runnable r)

{

return Config.ENABLE_RUNNABLE_STATS ? RunnableStatsWrapper.wrap® : r;

}

 

public ScheduledFutureschedule(Runnable r, long delay)

{

return _scheduledExecutor.schedule(wrap®, validate(delay), TimeUnit.MILLISECONDS);

}

 

public ScheduledFuturescheduleAtFixedRate(Runnable r, long initial, long delay)

{

return _scheduledExecutor.scheduleAtFixedRate(wrap®, validate(initial), validate(delay), TimeUnit.MILLISECONDS);

}

 

public ScheduledFuturescheduleAtFixedDelay(Runnable r, long initial, long delay)

{

return _scheduledExecutor.scheduleWithFixedDelay(wrap®, validate(initial), validate(delay), TimeUnit.MILLISECONDS);

}

 

public void execute(Runnable r)

{

_executor.execute(wrap®);

}

 

public void shutdown() throws InterruptedException

{

_shutdown = true;

try

{

_scheduledExecutor.shutdown();

_scheduledExecutor.awaitTermination(10, TimeUnit.SECONDS);

}

finally

{

_executor.shutdown();

_executor.awaitTermination(1, TimeUnit.MINUTES);

}

}

 

public CharSequence getStats()

{

StringBuilder list = new StringBuilder();

 

list.append("ScheduledThreadPool\n");

list.append("=================================================\n");

list.append("\tgetActiveCount: ...... ").append(_scheduledExecutor.getActiveCount()).append("\n");

list.append("\tgetCorePoolSize: ..... ").append(_scheduledExecutor.getCorePoolSize()).append("\n");

list.append("\tgetPoolSize: ......... ").append(_scheduledExecutor.getPoolSize()).append("\n");

list.append("\tgetLargestPoolSize: .. ").append(_scheduledExecutor.getLargestPoolSize()).append("\n");

list.append("\tgetMaximumPoolSize: .. ").append(_scheduledExecutor.getMaximumPoolSize()).append("\n");

list.append("\tgetCompletedTaskCount: ").append(_scheduledExecutor.getCompletedTaskCount()).append("\n");

list.append("\tgetQueuedTaskCount: .. ").append(_scheduledExecutor.getQueue().size()).append("\n");

list.append("\tgetTaskCount: ........ ").append(_scheduledExecutor.getTaskCount()).append("\n");

list.append("ThreadPoolExecutor\n");

list.append("=================================================\n");

list.append("\tgetActiveCount: ...... ").append(_executor.getActiveCount()).append("\n");

list.append("\tgetCorePoolSize: ..... ").append(_executor.getCorePoolSize()).append("\n");

list.append("\tgetPoolSize: ......... ").append(_executor.getPoolSize()).append("\n");

list.append("\tgetLargestPoolSize: .. ").append(_executor.getLargestPoolSize()).append("\n");

list.append("\tgetMaximumPoolSize: .. ").append(_executor.getMaximumPoolSize()).append("\n");

list.append("\tgetCompletedTaskCount: ").append(_executor.getCompletedTaskCount()).append("\n");

list.append("\tgetQueuedTaskCount: .. ").append(_executor.getQueue().size()).append("\n");

list.append("\tgetTaskCount: ........ ").append(_executor.getTaskCount()).append("\n");

 

return list;

}

}

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

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


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

Это же элементарно! Удивительно, что за столько времени никто не смог помочь:

 

java\l2ft\gameserver\model\instances\ReflectionBossInstance.java

 

private final static int COLLAPSE_AFTER_DEATH_TIME = 0;

 

Жду спасибо :)

  • Upvote 1

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


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

Но так все равно будет отображаться сообщение: "Временная зона будет закрыта..."

 

Так что:

 

java\l2ft\gameserver\model\entity\Reflection.java

 

Удаляем:

if(message)
  for(Player pl : getPlayers())
   if(pl != null)
 pl.sendPacket(new SystemMessage(SystemMessage.THIS_DUNGEON_WILL_EXPIRE_IN_S1_MINUTES).addNumber(timeInMinutes));

  • Upvote 1

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


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

А если нужно сделать 10 или 20 секунд?

private final static int COLLAPSE_AFTER_DEATH_TIME = 5; // 5 мин

Если ставлю 0.2 не компилит.

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


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

а кто сказал про 5? Если память при мне, то задается время в милисекундах, соответственно 5 минут 60 * 5 * 1000.

  • Upvote 1

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


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

А если нужно сделать 10 или 20 секунд?

private final static int COLLAPSE_AFTER_DEATH_TIME = 5; // 5 мин

Если ставлю 0.2 не компилит.

 

В Reflection.java (путь до файла давал в предыдущих сообщениях) в public void clearReflection(int timeInMinutes, boolean message) меняем следующее:

 

startCollapseTimer(timeInMinutes * 60 * 1000L);

 

Здесь идет умножение того числа на 60 и на 1000. То есть перевод из минут в милисекунды. То есть если Вам нужно сделать, например 20 сек, ставите COLLAPSE_AFTER_DEATH_TIME = 1, а startCollapseTimer(timeInMinutes * 20 * 1000L);

Изменено пользователем BORDIR
  • Upvote 1

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


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

Фактически если нужно меньше минуты, то меняете startCollapseTimer(timeInMinutes * 20 * 1000L); на нужное. Это и будут секунды.

Изменено пользователем BORDIR
  • Upvote 1

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


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

А вообще правильнее все это вынести в конфиг на будущее :) И переменную COLLAPSE_AFTER_DEATH_TIME сделать либо с плавающей точкой, либо изначально значение в секундах.

 

Но если это на один раз - то это Вам не обязательно (хотя не люблю халтуру)

 

Если есть необходимость - могу помочь вынести в конфиг со всеми удобствами, раз уже занялся :)

Изменено пользователем BORDIR
  • Upvote 1

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


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

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

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

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

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

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

Войти

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

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

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

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

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