したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

【Weiss】技術的なスレ

7877:2003/03/25(火) 23:12 ID:es7aACOs
ファイアーボール作ってみました。
ようやく上手く行ったです(´ヮ`;)

17://Fire Ball
begin

if MTargetType = 1 then begin
MMode := 0;
goto ExitSkill; //PK不可
end;
ts := AData;
if (ts = nil) or (ts.HP = 0) then begin
MMode := 0;
goto ExitSkill;
end;
//if tm.Mob.IndexOf(IntToStr(tc.MTarget)) = -1 then goto ExitSkill;
//射程チェック
if (abs(tc.Point.X - ts.Point.X) > tl.Range) or (abs(tc.Point.Y - ts.Point.Y) > tl.Range) then begin
if MTick + 500 < Tick then MMode := 0;
goto ExitSkill;
end;
pcnt := 0;
//ダメージ算出
dmg[0] := MATK1 + Random(MATK2 - MATK1 + 1) * MATKFix div 100 * tl.Data1[tc.MUseLV] div 100;
dmg[0] := dmg[0] * ElementTable[tl.Element][ts.Data.Element] div 100;

if dmg[0] < 0 then dmg[0] := 0; //魔法攻撃での回復は未実装
//パケ送信
SendCSkillAtk(tm, tc, ts, Tick, dmg[0], 1);
SkillProcessType := 1;
xy := ts.Point;
//ダメージ算出2
for j1 := xy.Y div 8 - 2 to xy.Y div 8 + 2 do begin
for i1 := xy.X div 8 - 2 to xy.X div 8 + 2 do begin
//for k1 := 0 to tm.Block[i1][j1].Mob.Count - 1 do begin
k1 := 0;
while (k1 >= 0) and (k1 < tm.Block[i1][j1].Mob.Count) do begin
ts1 := tm.Block[i1][j1].Mob.Objects[k1] as TMob;
if (ts <> ts1) and (abs(ts1.Point.X - xy.X) <= 2) and (abs(ts1.Point.Y - xy.Y) <= 2) then begin
dmg[0] := MATK1 + Random(MATK2 - MATK1 + 1) * MATKFix div 100 * tl.Data1[tc.MUseLV] div 100;
dmg[0] := dmg[0] * ElementTable[tl.Element][ts.Data.Element] div 100;

if dmg[0] < 0 then dmg[0] := 0; //魔法攻撃での回復は未実装
SendCSkillAtk(tm, tc, ts1, Tick, dmg[0], 1,2);
//ダメージ処理
DamageProcess1(tm, tc, ts1, dmg[0], Tick);
end;
Inc(k1);
end;
end;
end;
end;
ソース見てて思ったんですが、敵のMDEF計算してませんね。
そこでDamageCalcの魔法版みたいな関数を一個作って実効MATKの決定やMDEF処理を
その間数でまとめてやるとソースもすっきりして良いかなと思ったのですがどうでしょうか・・・。
とりあえず適当に作ってみようかな・・・。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板