>>122
ごめんなさい、ただdieとaliveを利用しただけでしたので・・・><
他のスキルも無駄があると思いますのでどなたか直していただけるとうれしいです
あぷろだ2にskill_dbをアップしたのですが、おそらくWeiss033のものよりも古いものを使用していますので、
プリーストのところだけ使用してください
common.pas
SendCSkillList()
{修正}
if (not tc.Skill[i].Data.Job[tc.Job]) and (not tc.Skill[i].Card) and (not DisableSkillLimit) then continue;
if ((290 < i) and (i < 304)) then Continue;
{修正ココまで}
のところを
{修正}
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;
if ((290 < i) and (i < 304)) then Continue;
{修正ココまで}
にして
{アイテム製造修正ココまで}
のすぐあとに
if (tc.Job = 8) and (i = 12) then begin
tc.Skill[i].Data.ReqSkill[0] := 68;
tc.Skill[i].Data.ReqLV[0] := 4;
tc.Skill[i].Data.ReqSkill[1] :=70;
tc.Skill[i].Data.ReqLV[1] := 3;
end;
とすることでプリーストでSWが使用できます。
>>初心者スレ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)以降の意味がよくわからなかったので処理が足りないかもしれません
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;
これだと画面端でやるとサーバとまると思います
if (xy.X < 0) or (xy.X >= tm.Size.X) or (xy.Y < 0) or (xy.Y >= tm.Size.Y) then continue;
こんな感じで範囲外への設置を回避しないとだめです
for j1 := 1 to 8 do begin
for i1 := 1 to 8 do begin
if((i1 < 3) or (i1 > 6)) and ((j1 < 3) or <j1 > 6)) then continue;
if(xy.X < 0) or (xy.X >= tm.Size.X) or (xy.Y < 0) or (xy.Y >= tm.Size.Y) then continue;
xy.X := (tc.MPoint.X) -4 + i1;
xy.Y := (tc.MPoint.Y) -4 + j1;
ワナを使用して1セルにたくさんのモンスターがいるときに攻撃をしていると
無限ループに入ってしまうようなのですが、原因がちょっとわかっていません><
わたしが確認したのはアングルスネアでですが、どなたか修正してくださるとうれしいです
$91: //AS
begin
if tn.Count > 0 then begin
for i1 := -1 to 1 do begin
for j1 := -1 to 1 do begin
c := 0;
while (c >= 0) and (c < tm.Block[tn.Point.X div 8 + i1][tn.Point.Y div 8 + j1].Mob.Count) do begin
ts1 := tm.Block[tn.Point.X div 8 + i1][tn.Point.Y div 8 + j1].Mob.Objects[c] as TMob;
if (ts1 = nil) then begin
Inc(c);
continue;
end;
if (abs(ts1.Point.X - tn.Point.X) < 2) and (abs(ts1.Point.Y - tn.Point.Y) < 2) then begin
tc1 := tn.CData;
if (ts1.Stat1 <> 5) then begin
ts1.nStat := 5;
ts1.BodyTick := Tick + tc1.aMotion;
end;
tn.Count := 0;
tn.Tick := Tick;
ts1.Point := tn.Point;
WFIFOW(0, $0088);
WFIFOL(2, ts1.ID);
WFIFOW(6, ts1.Point.X);
WFIFOW(8, ts1.Point.Y);
SendBCmd(tm, ts1.Point, 10);
end;
inc(c);
end;
end;
end;
if tn.Count = 0 then begin
DelSkillUnit(tm, tn);
end;
end;
end;
でアングルスネアが使用できます
あと、
DamageCalc1()の最後の方の状態1処理を
if ((ts.Stat1 = 2) or (ts.Stat1 = 4)) then begin
DamageProcess1()の最初のところの状態1処理を
if ((ts.Stat1 = 2) or (ts.Stat1 = 4)) and isBreak then begin
その下の方DebugOut.Lines.Add('(*゚∀゚)ノチンチコーレ!');の上を
else if (ts.pcnt <> 0) and (ts.Stat1 <> 5) then begin
cmdStartClick()の//状態1では行動不可のところを
if (ts.Stat1 <> 0) and (ts.Stat1 <> 5) then Continue;
if ts.Stat1 <> 5 then MobAI(tm,ts,Tick) else pcnt := 0;
としてください