L2JMobius

Classic Interlude Interlude skilldata and more

eeVaa · 10 · 2711

Offline eeVaa

  • Vassal
  • *
    • Posts: 4
Hi everyone, it is known that the Classic Interlude project was not meant to be "Interlude with better graphics", but I'm sure that many of us see it that way. I have been gathering information about the Interlude skilldata for a while, because as you may well know, it was never leaked, so it is all about going back and reading posts from 2006-07 in different forums and "databases" availables here and there.

I will share server and client modifications made during this time, and I hope it can be useful for some of you.

Server modifications
Skills' descriptions were the only thing not modified because it would be pointless to do it.

L2J_Mobius_Classic_Interlude\dist\game\data\stats\skills

00000-00099.xml
00100-00199.xml
00200-00299.xml
00300-00399.xml
00400-00499.xml
01000-01099.xml
01100-01199.xml   Updated 21/10
01200-01299.xml
01300-01399.xml   Updated 21/10   
01400-01499.xml

04000-04099.xml (cubics)
04100-04199.xml (cubics)
04500-04599.xml (cubics)

TO DO: - Find better information about how skill enchantment option "Power" affects skills like Aggression, Aura of Hate, Arrest and Shackle.
             - Skills that require Seed of Fire/Water/Wind need to be improved, a new effect may be needed.

L2J_Mobius_Classic_Interlude\dist\game\data\stats\cubics

cubic-01.xml
cubic-02.xml
cubic-03.xml
cubic-04.xml
cubic-05.xml
cubic-06.xml
cubic-07.xml
cubic-08.xml
cubic-09.xml


L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/stat/CreatureStat.java

To adapt the new reuseDelay change this:
Code: [Select]
public int getReuseTime(Skill skill)
{
if (skill.isStaticReuse() || skill.isStatic())
{
return skill.getReuseDelay();
}

// Interlude adjustment.
// final int speedModifier = 333f / (skill.isMagic() ? _creature.getMAtkSpd() : _creature.getPAtkSpd());
// return (int) (skill.getReuseDelay() * getReuseTypeValue(skill.getMagicType()) * speedModifier);

return (int) (skill.getReuseDelay() * getReuseTypeValue(skill.getMagicType()));
}

to this:
Code: [Select]
public int getReuseTime(Skill skill)
{
    if (skill.isStaticReuse() || skill.isStatic())
    {
        return skill.getReuseDelay();
    }
 
    final float speedModifier = (skill.isMagic() ? 333f : 300f) / (skill.isMagic() ? _creature.getMAtkSpd() : _creature.getPAtkSpd());
    return (int) (skill.getReuseDelay() * getReuseTypeValue(skill.getMagicType()) * speedModifier);
}


L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/skill/SkillCaster.java

To fix the issue of toggles not consuming mana when being activated change this:
Code: [Select]
@Override
public void run()
{
final boolean instantCast = (_castingType == SkillCastingType.SIMULTANEOUS) || _skill.isAbnormalInstant() || _skill.isWithoutAction() || _skill.isToggle();

// Skills with instant cast are never launched.
if (instantCast)
{
triggerCast(_caster.get(), _target.get(), _skill, _item, false);
return;
}

long nextTaskDelay = 0;
boolean hasNextPhase = false;
switch (_phase++)
{
case 0: // Start skill casting.
{
hasNextPhase = startCasting();
nextTaskDelay = _hitTime;
break;
}
case 1: // Launch the skill.
{
hasNextPhase = launchSkill();
nextTaskDelay = _cancelTime;
break;
}
case 2: // Finish launching and apply effects.
{
hasNextPhase = finishSkill();
nextTaskDelay = _coolTime;
break;
}
}

// Reschedule next task if we have such.
if (hasNextPhase)
{
_task = ThreadPool.schedule(this, nextTaskDelay);
}
else
{
// Stop casting if there is no next phase.
stopCasting(false);
}
}

to this:
Code: [Select]
@Override
public void run()
{
final boolean instantCast = (_castingType == SkillCastingType.SIMULTANEOUS) || _skill.isAbnormalInstant() || _skill.isWithoutAction();

// Skills with instant cast are never launched.
if (instantCast)
{
triggerCast(_caster.get(), _target.get(), _skill, _item, false);
return;
}

long nextTaskDelay = 0;
boolean hasNextPhase = false;
switch (_phase++)
{
case 0: // Start skill casting.
{
hasNextPhase = startCasting();
nextTaskDelay = _hitTime;

break;
}
case 1: // Launch the skill.
{
hasNextPhase = launchSkill();
nextTaskDelay = _skill.isToggle() ? 0 : _cancelTime;
break;
}
case 2: // Finish launching and apply effects.
{
hasNextPhase = finishSkill();
nextTaskDelay = _coolTime;
break;
}
}

// Reschedule next task if we have such.
if (hasNextPhase)
{
_task = ThreadPool.schedule(this, nextTaskDelay);
}
else
{
// Stop casting if there is no next phase.
stopCasting(false);
}
}


L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/Summon.java

To fix the problem of Necromancer's summons not working change this:
Code: [Select]
if (!effected.isPlayer())
{
return;
}

final Player player = effected.getActingPlayer();

to this:
Code: [Select]
if (!effector.isPlayer())
{
return;
}

final Player player = effector.getActingPlayer();


L2J_Mobius_Classic_Interlude/dist/game/data/skillTrees/2ndClass/ElvenElder.xml

Add missing skill Major Heal lvl 11 to Elven Elders
Code: [Select]
<skill skillId="1401" skillLevel="11" skillName="Major Heal" levelUpSp="1100000" getLevel="74" />

Client modifications

MSConditionData_Classic
Skillgrp_Classic
SkillName_Classic-eu


I will post the sources I used if I get the permission to do it, as I said, it includes posts from different forums.




Online Mobius

  • Distinguished King
  • *****
    • Posts: 17788
Please provide your client data changes as txt.
I do not want to remove 75% of existing skill data.

Also when you change texts L2GameDataName changes.


Offline eeVaa

  • Vassal
  • *
    • Posts: 4
Please provide your client data changes as txt.
I do not want to remove 75% of existing skill data.

Also when you change texts L2GameDataName changes.

Client changes links updated, now as txt.



Offline eeVaa

  • Vassal
  • *
    • Posts: 4
Try to use necro summon's :D

Hi, sorry for the delay.
To fix the issue a subtle change is needed in the Summon effect handler.
I also added the missing condition and effect "ConsumeBody" to the skills 1129 (Summon Reanimated Man), 1154 (Summon Corrupted Man) and 1334 (Summon Cursed Man).
Both changes are now updated in the main post.



Offline Naker

  • Elder
  • ****
    • Posts: 180
Hi, sorry for the delay.
To fix the issue a subtle change is needed in the Summon effect handler.
I also added the missing condition and effect "ConsumeBody" to the skills 1129 (Summon Reanimated Man), 1154 (Summon Corrupted Man) and 1334 (Summon Cursed Man).
Both changes are now updated in the main post.
Almost done you need to make a small change on consumbody and set as startEffects


Offline eeVaa

  • Vassal
  • *
    • Posts: 4
Almost done you need to make a small change on consumbody and set as startEffects

Hi again, yeah, i saw this in the CT0 project
Code: [Select]
if (skill.hasEffects(EffectScope.START))
{
DecayTaskManager.getInstance().cancel(effected);
ThreadPool.schedule(() -> effected.onDecay(), Formulas.calcAtkSpd(effector, skill, skill.getHitTime() + skill.getCoolTime()));
}
and even modified it a bit to not fuck skills like Corpse Burst after changing from instant to onStart, but I couldn't make it work. I will keep trying on the weekend when I have a little more time.
Anyways, thanks for your feedback!


Offline Naker

  • Elder
  • ****
    • Posts: 180
Hi again, yeah, i saw this in the CT0 project
Code: [Select]
if (skill.hasEffects(EffectScope.START))
{
DecayTaskManager.getInstance().cancel(effected);
ThreadPool.schedule(() -> effected.onDecay(), Formulas.calcAtkSpd(effector, skill, skill.getHitTime() + skill.getCoolTime()));
}
and even modified it a bit to not fuck skills like Corpse Burst after changing from instant to onStart, but I couldn't make it work. I will keep trying on the weekend when I have a little more time.
Anyways, thanks for your feedback!
You can make a new clase for the effect of consumbody for necro summon skill. Also need some adjustments on the cast NPC_BODY cuz if body disappear only the visual cast is cuted the skill still going true


Offline Podpyvas

  • Vassal
  • *
    • Posts: 4
Hi everyone, it is known that the Classic Interlude project was not meant to be "Interlude with better graphics", but I'm sure that many of us see it that way. I have been gathering information about the Interlude skilldata for a while, because as you may well know, it was never leaked, so it is all about going back and reading posts from 2006-07 in different forums and "databases" availables here and there.

I will share server and client modifications made during this time, and I hope it can be useful for some of you.

Server modifications
Skills' descriptions were the only thing not modified because it would be pointless to do it.

L2J_Mobius_Classic_Interlude\dist\game\data\stats\skills

00000-00099.xml
00100-00199.xml
00200-00299.xml
00300-00399.xml
00400-00499.xml
01000-01099.xml
01100-01199.xml   Updated 21/10
01200-01299.xml
01300-01399.xml   Updated 21/10   
01400-01499.xml

04000-04099.xml (cubics)
04100-04199.xml (cubics)
04500-04599.xml (cubics)

TO DO: - Find better information about how skill enchantment option "Power" affects skills like Aggression, Aura of Hate, Arrest and Shackle.
             - Skills that require Seed of Fire/Water/Wind need to be improved, a new effect may be needed.

L2J_Mobius_Classic_Interlude\dist\game\data\stats\cubics

cubic-01.xml
cubic-02.xml
cubic-03.xml
cubic-04.xml
cubic-05.xml
cubic-06.xml
cubic-07.xml
cubic-08.xml
cubic-09.xml


L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/actor/stat/CreatureStat.java

To adapt the new reuseDelay change this:
Code: [Select]
public int getReuseTime(Skill skill)
{
if (skill.isStaticReuse() || skill.isStatic())
{
return skill.getReuseDelay();
}

// Interlude adjustment.
// final int speedModifier = 333f / (skill.isMagic() ? _creature.getMAtkSpd() : _creature.getPAtkSpd());
// return (int) (skill.getReuseDelay() * getReuseTypeValue(skill.getMagicType()) * speedModifier);

return (int) (skill.getReuseDelay() * getReuseTypeValue(skill.getMagicType()));
}

to this:
Code: [Select]
public int getReuseTime(Skill skill)
{
    if (skill.isStaticReuse() || skill.isStatic())
    {
        return skill.getReuseDelay();
    }
 
    final float speedModifier = (skill.isMagic() ? 333f : 300f) / (skill.isMagic() ? _creature.getMAtkSpd() : _creature.getPAtkSpd());
    return (int) (skill.getReuseDelay() * getReuseTypeValue(skill.getMagicType()) * speedModifier);
}


L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/skill/SkillCaster.java

To fix the issue of toggles not consuming mana when being activated change this:
Code: [Select]
[member=79]override[/member]
public void run()
{
final boolean instantCast = (_castingType == SkillCastingType.SIMULTANEOUS) || _skill.isAbnormalInstant() || _skill.isWithoutAction() || _skill.isToggle();

// Skills with instant cast are never launched.
if (instantCast)
{
triggerCast(_caster.get(), _target.get(), _skill, _item, false);
return;
}

long nextTaskDelay = 0;
boolean hasNextPhase = false;
switch (_phase++)
{
case 0: // Start skill casting.
{
hasNextPhase = startCasting();
nextTaskDelay = _hitTime;
break;
}
case 1: // Launch the skill.
{
hasNextPhase = launchSkill();
nextTaskDelay = _cancelTime;
break;
}
case 2: // Finish launching and apply effects.
{
hasNextPhase = finishSkill();
nextTaskDelay = _coolTime;
break;
}
}

// Reschedule next task if we have such.
if (hasNextPhase)
{
_task = ThreadPool.schedule(this, nextTaskDelay);
}
else
{
// Stop casting if there is no next phase.
stopCasting(false);
}
}

to this:
Code: [Select]
[member=79]override[/member]
public void run()
{
final boolean instantCast = (_castingType == SkillCastingType.SIMULTANEOUS) || _skill.isAbnormalInstant() || _skill.isWithoutAction();

// Skills with instant cast are never launched.
if (instantCast)
{
triggerCast(_caster.get(), _target.get(), _skill, _item, false);
return;
}

long nextTaskDelay = 0;
boolean hasNextPhase = false;
switch (_phase++)
{
case 0: // Start skill casting.
{
hasNextPhase = startCasting();
nextTaskDelay = _hitTime;

break;
}
case 1: // Launch the skill.
{
hasNextPhase = launchSkill();
nextTaskDelay = _skill.isToggle() ? 0 : _cancelTime;
break;
}
case 2: // Finish launching and apply effects.
{
hasNextPhase = finishSkill();
nextTaskDelay = _coolTime;
break;
}
}

// Reschedule next task if we have such.
if (hasNextPhase)
{
_task = ThreadPool.schedule(this, nextTaskDelay);
}
else
{
// Stop casting if there is no next phase.
stopCasting(false);
}
}


L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/effecthandlers/Summon.java

To fix the problem of Necromancer's summons not working change this:
Code: [Select]
if (!effected.isPlayer())
{
return;
}

final Player player = effected.getActingPlayer();

to this:
Code: [Select]
if (!effector.isPlayer())
{
return;
}

final Player player = effector.getActingPlayer();


L2J_Mobius_Classic_Interlude/dist/game/data/skillTrees/2ndClass/ElvenElder.xml

Add missing skill Major Heal lvl 11 to Elven Elders
Code: [Select]
<skill skillId="1401" skillLevel="11" skillName="Major Heal" levelUpSp="1100000" getLevel="74" />

Client modifications

MSConditionData_Classic
Skillgrp_Classic
SkillName_Classic-eu


I will post the sources I used if I get the permission to do it, as I said, it includes posts from different forums.

How I can modificate Skillnames? Is there a ready-made file to download?


Offline Sonti

  • Vassal
  • *
    • Posts: 1