スキル習得時に発動する効果 - roratorio-hub/ratorio GitHub Wiki

りんりんニャンカーベルのようにスキル習得時に発動する効果は *.dat.js ファイルだけを編集しても実現出来ない
item.dat.jscard.dat.js を適切に追加したうえで foot.js または chara.js に個別のロジックを書く必要がある
このページではりんりんニャンカーベルを例に、スキル習得時に発動する効果の実装方法を説明する

アイテムの基本データ登録

item.dat.jsに基本的なアイテムデータを登録する
ポイントはコード199でスキル習得時効果を指定すること
これにより習得スキル(装備効果用)チェック欄の対象スキルが有効になる
対象スキルのIDはskill.dat.jsから拾うこと

[
    5051    # アイテムID
    ,52     # 下段
    ,201    # サモナー系装備可能
    ,0      # DEF 0
    ,0      # 武器レベル 0
    ,0      # Slot 0
    ,10     # 重量 10
    ,100    # Lv制限 100
    ,"りんりんニャンカーベル"
    ,"リンリンニヤンカアヘル"
    ,"[海の魂]Lv1習得時、[マグロシールド]の固定詠唱時間 - 1秒<br>[のどを鳴らす]の習得Lvが1上がる度に追加でMaxHP + 3%"
    ,91     # ヒール系スキル使用時HP回復量+%
    ,10         # 10
    ,199    # スキル習得時効果
    ,919        # 海の魂
    ,199    # スキル習得時効果
    ,917        # のどを鳴らす
    ,0      # EOF
]

また、理由は後述するがアイテムIDを定数化しておくと良い

ITEM_ID_RINRIN_NYAN_KABERU = 5051;

キャラクタの能力変化を定義

キャラクタの以下の能力変化は chara.js で定義する

  • 防御属性
  • ATK+
  • MaxHP+
  • MaxHP+%
  • MaxSP+
  • MaxSP+%
  • 除算DEF+
  • 除算DEF+%
  • 除算MDEF+
  • 除算MDEF+%
  • HIT+

それぞれに異なるfunctionが定義されているので該当部分を見つけ出し
既に記されている別の能力を参考に新しいロジックを実装する

今回はりんりんニャンカーベル[のどを鳴らす]の習得Lvが1上がる度に追加でMaxHP + 3%を実装するので
function GetStatusModifyMaxHpUp() の末尾に以下のロジックを追記する

//----------------------------------------------------------------
// 「りんりんニャンカーベル」の、スキル習得による効果
//----------------------------------------------------------------
if ((itemCount = EquipNumSearch(ITEM_ID_RINRIN_NYAN_KABERU)) > 0) {		// りんりんニャンカーベル装備中
	val += 3 * LearnedSkillSearch(SKILL_ID_NODOWO_NARASU) * itemCount;	// のどを鳴らすが1上がる度に3%
}

item.dat.jsITEM_ID_RINRIN_NYAN_KABERUを定義したほうが良い理由はこのため
同様にトリガーとなるスキルにもスキルID定数が定義されているはず(されてないなら定義しましょう)
これで、りんりんニャンカーベルを装備してのどを鳴らすを1上げる度にMaxHPが3%増加する効果が実装出来た

スキルの性能変化を定義

スキルの以下の性能変化は foot.js で定義する

  • 詠唱時間-%
  • 詠唱時間-秒
  • 固定詠唱時間-%
  • 固定詠唱時間-秒
  • 強制詠唱時間-% (強制ってなに?)
  • 強制詠唱時間-秒
  • クールタイム-秒
  • 消費SP-%
  • 消費SP-

それぞれに異なるfunctionが定義されているので該当部分を見つけ出し
既に記されている別の能力を参考に新しいロジックを実装する

今回はりんりんニャンカーベル[海の魂]Lv1習得時、[マグロシールド]の固定詠唱時間 - 1秒を実装するので
function GetCastFixOfSkillForCastTimeFixed() の末尾に以下のロジックを追記する

//----------------------------------------------------------------
// 「りんりんにゃんカーベル」の、「マグロシールド」短縮
//----------------------------------------------------------------
if (skillId == SKILL_ID_MAGURO_SHIELD) {					// マグロシールドを評価するとき
	if ((eqpnum = EquipNumSearch(ITEM_ID_RINRIN_NYAN_KABERU)) > 0) {	// りんりんニャンカーベル装備中で
		if (LearnedSkillSearch(SKILL_ID_UMINO_TAMASHI) >= 1) {		// 海の魂Lv1習得していれば
			castfix -= 1000 * eqpnum;				// 固定詠唱 1000 ms 短縮
		}
	}
}

アイテムIDとスキルIDはそれぞれitem.dat.jsとskill.dat.jsから定数をメモして持ってくること