Skill Engine: secrets and descriptive information の続き

以前書いた
L2Jフォーラムの和訳に挑戦しようシリーズ 第2弾 | なにかあるのかな?
http://matchmaker.jugem.jp/?eid=405
の続きです。

前回確かにto be continued で終わってはいたけど、ちょっとスキル発動の手順おっかけてたらどんだけ続いとんねんwww
L2Jフォーラムに書いてあるトピがあるのかもですけど、とりあえず我流で調べたところまで。

スタックトレースの表現ってどうしたらいいんだろ
L2PcInstance.useMagic()→
L2CharacterAI.setIntention()→
L2CharacterAI.onIntentionCast() で、
{
changeIntention(AI_INTENTION_CAST, skill, target); // AbstractAIで宣言されてて、たいしたことはしてない
notifyEvent(CtrlEvent.EVT_THINK, null); // この関数はEVT_THINKが送られたらなにもしない
}

changeIntentionでskillを引数にとってるけど、特に何かしてるわけではないんですよね。ここで足どりが途絶える。

んで、どっからかともなく、L2PlayerAI.onEvtThink()がコールされる。
関数名とかから推測するだに、Skillhandlerかなにかでイベント監視をしててnotifyEvent()したとこでどっかがonEvtThink()してくれる、と信じてます。

そこでgetIntantion()==AI_INTENTION_CASTなんで、thinkcast()がコールされる。
そっから
L2Charactor.docast()から
L2Charactor.begincast()
MagicUseTaskのRunnableが起動
1.onMagicLaunchedTimer(_targets, _skill, _coolTime, false, _simultaneously);
2.onMagicHitTimer(_targets, _skill, _coolTime, false, _simultaneously);
3.onMagicFinalizer(_skill, _targets[0], _simultaneously);
の順に起動

とまあ、ここまでくればサーバー内部の処理はほとんど終了
でもこの3つの関数は詠唱時間の計算とかがメインなんですよね。
例えばバフの場合、どこで効果を乗せたりするんだ?と思ってソース洗い直してたら、
onMagicHitTimer()の中で、callSkill()
callskill(){
handler.useSkill(this, skill, targets);
}
をはっけーん
SkillHandlerが40種類ぐらいあるから、このうちのどれかがバフなのかな?
とりあえず今日はここまでー