>>初心者スレ120様
if (not tc.Skill[i].Data.Job[tc.Job]) and (not tc.Skill[i].Card) and (not DisableSkillLimit) and ((i<>12) or (tc.Job<>8)) then continue;
でマジシャンの場合を回避したつもりだったのですがだめでしょうか・・・
79: //マグヌス
begin
for j1 := 1 to 7 do begin
for i1 := 1 to 7 do begin
if ((i1 < 3) or (i1 > 5)) and ((j1 < 3) or (j1 > 5)) then Continue;
xy.X := (MPoint.X) -4 + i1;
xy.Y := (MPoint.Y) -4 + j1;
tn := SetSkillUnit(tm, PID, xy, Tick, $84, tl.Data2[MUseLV], tl.Data1[MUseLV] * 1600);
tn.CData := tc;
tn.MUseLV := MUseLV;
end;
end;
DecSP(tc, MSkill, MUseLV);
WFIFOW( 0, $0117);
WFIFOW( 2, MSkill);
WFIFOL( 4, PID);
WFIFOW( 8, 10);
WFIFOW(10, MPoint.X);
WFIFOW(12, MPoint.Y);
WFIFOL(14, 1);
SendBCmd(tm, xy, 18);
SkillProcessType := 0;
end;
と
TfrmMain.NPCAction()の$7f: //ファイアーウォール処理のあとに
$84: //マグヌス
begin
if ts1.view1 = 2 then m := 21
else m := ts1.Data.Element;
if (m mod 20 = 9) or ((ts1.Data.Race = 6) and (m <> 21)) then begin
//ダメージ算出
dmg[0] := tn.CData.MATK1 + Random(tn.CData.MATK2 - tn.CData.MATK1 + 1) * tn.CData.MATKFix div 100;
dmg[0] := dmg[0] * (100 - ts1.Data.MDEF) div 100; //MDEF%
dmg[0] := dmg[0] - ts1.Data.Param[3]; //MDEF-
if dmg[0] < 1 then dmg[0] := 1;
dmg[0] := dmg[0] * ElementTable[tn.CData.Skill[79].Data.Element][29] div 100;
if dmg[0] < 0 then dmg[0] := 0;
//ダメージパケ送信
WFIFOW( 0, $0114);
WFIFOW( 2, 18);
WFIFOL( 4, tn.ID);
WFIFOL( 8, ts1.ID);
WFIFOL(12, Tick);
WFIFOL(16, 0);
WFIFOL(20, ts1.Data.dMotion);
WFIFOW(24, dmg[0]);
WFIFOW(26, 1);
WFIFOW(28, 1);
WFIFOB(30, 4);
SendBCmd(tm, tn.Point, 31);
DamageProcess1(tm, tn.CData, ts1, dmg[0], Tick);
Dec(tn.Count);
if tn.Count = 0 then begin
DelSkillUnit(tm, tn);
end;
end;
end;
でマグヌスが使用できるのですが、わたしの理解不足でファイアーウォールの//ここの処理がうまくいくかどうか謎
のDec(k)以降の意味がよくわからなかったので処理が足りないかもしれません