random casting speed h5 jts.

  • Автор темы Автор темы Hitcher
  • Дата начала Дата начала

Hitcher

Знаменитый
Местный
Старожил I степени
Сообщения
224
Розыгрыши
0
Репутация
13
Реакции
26
Баллы
1 295
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
JTS
Здравствуйте Дорогие, Знающие! Будьте так любезны, подсказать какая механика предусмотрена для внесения небольшого рандома в скорости каста. Оно прям заметно что первый выстрел шустрый - затем с подтормозкой кастует. На интере такого не было.
 
именно само время произношения рандомится или же просто даже после окончания реюза скилла не всегда можно повторно его начать кастовать?
если второе, то это скорее всего просто нормально работающая поддержка skill_cool_time в скиллах
 
именно само время произношения рандомится или же просто даже после окончания реюза скилла не всегда можно повторно его начать кастовать?
если второе, то это скорее всего просто нормально работающая поддержка skill_cool_time в скиллах
именно само время произношения рандомится.

[CAST_SPEED] Skill: Hurricane (ID: 1239) | Cast Time: 784ms | MAtkSpd: 1071 | BaseAttackSpeed: 300.0
[CAST_SPEED] Skill: Hurricane (ID: 1239) | Cast Time: 1120ms | MAtkSpd: 1071 | BaseAttackSpeed: 300.0
 
Последнее редактирование:
ну тогда хз, по идее ничего не должно влиять, ну кроме шотов.
так что вспоминай чего ты там в коде менял, если менял.
 
ну тогда хз, по идее ничего не должно влиять, ну кроме шотов.
так что вспоминай чего ты там в коде менял, если менял.
Если я правильно помню там формула CastTime есть
CastTime = skill_hit_time / (mSpd/333) / SS
SS
- Blessed Spirit Shot - если включены = 1.5, если нет = 1
mSpd - скорость маг атаки чара
skill_hit_time - в skilldata.txt

Что-то такое для маг скилов
Сообщение объединено:
Из-за округления то в меньшую то в большую сторону не большой разброс может быть
 
Благодарю за Ваш фидбек, действительно - фокус внимания необходимо держать вокруг SpiritShot и кулдауна. Симптом: при зажатом скиле - время каста Hurricane (ID: 1239) колебалось между 784ms и 1120ms при идентичных статах (MAtkSpd: 1071, BaseAttackSpeed: 300). - заряд от соски происходил частично - урон повышался, но скорость каста рандомилась. (Кстати, такая же беда есть и на птсе h5.)
Главная идея: время кулдауна соски считать от начала каста, а не от момента расхода соски.

Итоговые ии правки:
Java:
Файл 1:
Player.java
1. Добавлено поле для хранения времени последнего каста

private long _shotDischargeTimeStamp = 0;
private long _lastCastBeginTime = 0;  // <-- НОВОЕ
------------------------------------------------
2. Изменена логика canChargeShot()

// СТАЛО:
public boolean canChargeShot() {
    // Если _lastCastBeginTime = 0, значит это первый каст после входа/shotsReady() - всегда разрешаем
    if (_lastCastBeginTime == 0) {
        return true;
    }
    final long currentTime = System.currentTimeMillis();
    final long timeSinceLastCast = currentTime - _lastCastBeginTime;  // <-- От начала каста, а не от расхода
    final boolean canCharge = timeSinceLastCast >= AllSettingsConfig.ALT_SHOT_CORRECTION;
    if (AllSettingsConfig.CAST_SPEED_DEBUG_ENABLED) {
        System.out.println("[CAST_SPEED_SS_COOLDOWN] Player: " + getName() + " | ObjectId: " + getObjectId() + " | TimeSinceLastCastBegin: " + timeSinceLastCast + "ms | Required: " + AllSettingsConfig.ALT_SHOT_CORRECTION + "ms | CanCharge: " + canCharge);
    }
    return canCharge;
}
--------------------------------------------------
3. Добавлен метод setLastCastBeginTime()


public void setLastCastBeginTime(long time) {
    _lastCastBeginTime = time;
}
---------------------------------------------------
4. Обновлён shotsReady() для сброса обоих таймеров


public void shotsReady() {
    _shotDischargeTimeStamp = 0;
    _lastCastBeginTime = 0;  // <-- НОВОЕ
}
------------------------------------------------
Файл 2:
Creature.java
1. Удалено обновление _lastCastBeginTime до проверки
(Сначала проверка, потом применение, потом обновление для следующего каста)

2. Упрощена логика применения SpiritShot

// СТАЛО (без ограничения по regular):
final int chargedSpiritShot = getChargedSpiritShot();
final boolean canCharge = !isPlayer() || getPlayer().canChargeShot();
final boolean isMagicSkill = skill.isMagic();
final boolean isSkillPermanent = skill.isSkillTimePermanent();

final boolean spiritShotApplied = isMagicSkill && !isSkillPermanent
        && canCharge
        && chargedSpiritShot > 0;

if (AllSettingsConfig.CAST_SPEED_DEBUG_ENABLED || skill.getId() == 1239) {
    System.out.println("[CAST_SPEED_SS_CHECK] Skill: " + skill.getName() + " (ID: " + skill.getId() + ") | ObjectId: " + getObjectId() + " | isMagic: " + isMagicSkill + " | IsPermanent: " + isSkillPermanent + " | ChargedSpiritShot: " + chargedSpiritShot + " | CanCharge: " + canCharge + " | Applied: " + spiritShotApplied);
}

if (spiritShotApplied) {
    int beforeSs = skillTime;
    skillTime = (int) (0.70 * skillTime);
    System.out.println("[CAST_SPEED_SPIRITSHOT] Skill: " + skill.getName() + " (ID: " + skill.getId() + ") | BeforeSS: " + beforeSs + "ms | AfterSS: " + skillTime + "ms | SpiritShotLevel: " + chargedSpiritShot);
}

// Обновляем время последнего каста ДЛЯ СЛЕДУЮЩИХ проверок
if (isPlayer()) {
    getPlayer().setLastCastBeginTime(System.currentTimeMillis());
}

без сосок:
[CAST_SPEED_DETAILED] Skill: Hurricane (ID: 1239) | TYPE:CASTTIME|MAGIC | BaseHitTime: 4000ms | BaseAttackSpeed: 300 | CurrentMAtkSpd: 1071 | Multiplier: 0,280112 | Result: 1120ms | Formula: 4000 * 300 / 1071
[CAST_SPEED_SS_CHECK] Skill: Hurricane (ID: 1239) | ObjectId: 1555 | isMagic: true | IsPermanent: false | ChargedSpiritShot: 0 | CanCharge: true | Applied: false
[CAST_SPEED_FINAL] Skill: Hurricane (ID: 1239) | Level: 6 | BaseHitTime: 4000ms | IsPermanent: false | FinalCastTime: 1120ms | MAtkSpd: 1071 | BaseAttackSpeed: 300.0 | ActiveEffects: 31 |
[CAST_SPEED_SS_CONSUMED] Player: Veronika | ObjectId: 1555 | PreviousCharge: 0 | NewCharge: NONE | TimeStamp: 1781415400362
[CAST_SPEED_DETAILED] Skill: Hurricane (ID: 1239) | TYPE:COOLTIME|MAGIC | BaseHitTime: 0ms | BaseAttackSpeed: 300 | CurrentMAtkSpd: 1071 | Multiplier: 0,280112 | Result: 0ms | Formula: 0 * 300 / 1071
----------------------------------------------------------------------
с сосками :
[CAST_SPEED_DETAILED] Skill: Hurricane (ID: 1239) | TYPE:CASTTIME|MAGIC | BaseHitTime: 4000ms | BaseAttackSpeed: 300 | CurrentMAtkSpd: 1071 | Multiplier: 0,280112 | Result: 1120ms | Formula: 4000 * 300 / 1071
[CAST_SPEED_SS_COOLDOWN] Player: Veronika | ObjectId: 1555 | TimeSinceLastCastBegin: 829ms | Required: 100ms | CanCharge: true
[CAST_SPEED_SS_CHECK] Skill: Hurricane (ID: 1239) | ObjectId: 1555 | isMagic: true | IsPermanent: false | ChargedSpiritShot: 2 | CanCharge: true | Applied: true
[CAST_SPEED_SPIRITSHOT] Skill: Hurricane (ID: 1239) | BeforeSS: 1120ms | AfterSS: 784ms | SpiritShotLevel: 2
[CAST_SPEED_FINAL] Skill: Hurricane (ID: 1239) | Level: 6 | BaseHitTime: 4000ms | IsPermanent: false | FinalCastTime: 784ms | MAtkSpd: 1071 | BaseAttackSpeed: 300.0 | ActiveEffects: 31 |
[CAST_SPEED_SS_CONSUMED] Player: Veronika | ObjectId: 1555 | PreviousCharge: 2 | NewCharge: NONE | TimeStamp: 1781415444130
[CAST_SPEED_DETAILED] Skill: Hurricane (ID: 1239) | TYPE:COOLTIME|MAGIC | BaseHitTime: 0ms | BaseAttackSpeed: 300 | CurrentMAtkSpd: 1071 | Multiplier: 0,280112 | Result: 0ms | Formula: 0 * 300 / 1071
 
Последнее редактирование:
заряд от соски происходил частично - урон повышался, но скорость каста рандомилась
даже звучит странно :)
влияние шотов или есть или его нет, а не как-то там "частично"
 
Там вроде достаточно изменить конфиг
Код:
# На оффсервере второй каст, следующий сразу после первого (например, из очереди) не получает бонус к скорости каста от спиритшотов
# Иногда это явление называют "лагом сосок". Значение по умолчанию 100 (0.1 секунды).
AltSpiritShotDischargeCorrection = 0
 
Вопрос только нафига надо было такое поведение воспроизводить?
Чисто чтоб было похоже на работу в офф сервере?
Даже не смотря на то что это по сути баг, из-за особенностей работы офф сервера.
 
Вопрос только нафига надо было такое поведение воспроизводить?
Чисто чтоб было похоже на работу в офф сервере?
Даже не смотря на то что это по сути баг, из-за особенностей работы офф сервера.
что б было каг на птсе)

Там вроде достаточно изменить конфиг
Код:
# На оффсервере второй каст, следующий сразу после первого (например, из очереди) не получает бонус к скорости каста от спиритшотов
# Иногда это явление называют "лагом сосок". Значение по умолчанию 100 (0.1 секунды).
AltSpiritShotDischargeCorrection = 0
Во дела, даже не подумал об этом) спасибо за подсказку! Буду по чаще в конфиги заглядывать.
 
Вопрос только нафига надо было такое поведение воспроизводить?
Чисто чтоб было похоже на работу в офф сервере?
Даже не смотря на то что это по сути баг, из-за особенностей работы офф сервера.
Да, вот только в птс это скорее было из-за задержки между сервером и клиентом, и срабатывало не всегда, а в овере/лостах это прям жестко прописали в серверсайде. Зачем не понятно.
 
Да, вот только в птс это скорее было из-за задержки между сервером и клиентом
скорее из-за задержек в общении между основным сервером и кэшедом.
я так понимаю там очередное использование шотов блокируется/блокировалось, пока от кэшеда не придет подтверждение что количество шотов успешно изменилось/апдейтнулось в бд.
 
Назад
Сверху Снизу