//#コマンド追加
//stat作成BLv:1-99 JLv:1-50 Stat:1-199 100以上は非推奨
end else if Copy(str, 1, 5) = 'stat ' then begin
sl := TStringList.Create;
sl.DelimitedText := Copy(str, 6, 256);
if sl.Count = 2 then begin
Val(sl.Strings[0], i, k);
if k = 0 then begin
Val(sl.Strings[1], j, k);
if k = 0 then begin
if (i>=0)and(i<=5)and(j>=1)and(j<=199) then begin
tc.ParamBase[i]:=j;
WFIFOW(0, $00bc);
WFIFOW(2, 13 + i);
WFIFOB(4, 1);
WFIFOB(5, 0);
Socket.SendBuf(buf, 6);
CalcStat(tc);
SendCStat(tc);
end else if (i=6)and(j>=0)and(j<=99) then begin
//ベースレベルアップ
tc.BaseLV:=j;
tc.BaseNextEXP:=0;
tc.BaseNextEXP:=ExpTable[0][tc.BaseLV];
CalcStat(tc);
SendCStat1(tc, 0, $000b, tc.BaseLV);
tc.HP := tc.MaxHP;
tc.SP := tc.MaxSP;
WFIFOW( 0, $019b);
WFIFOL( 2, tc.PID);
WFIFOL( 6, 0);
SendBCmd(tm, tc.Point, 10);
SendCStat(tc);
end else if (i=7)and(j>=0)and(j<=50) then begin
if (tc.Job=0)and(j>10) then begin
j:=10;
end;
//ジョブレベルアップ
tc.JobLV:=j;
tc.JobEXP:=0;
tc.JobNextEXP:=ExpTable[(tc.Job + 5) div 6 + 1][tc.JobLV];
CalcStat(tc);
SendCStat1(tc, 0, $0037, tc.JobLV);
WFIFOW( 0, $019b);
WFIFOL( 2, tc.PID);
WFIFOL( 6, 1);
SendBCmd(tm, tc.Point, 10);
SendCStat(tc);
end;
end;
end;
end;
sl.Free();
//rich作成お金1G-1
end else if Copy(str, 1, 4) = 'rich' then begin
tc.Zeny:=999999999;
WFIFOW(0, $00b1);
WFIFOW(2, $0014);
WFIFOL(4, tc.Zeny);
Socket.SendBuf(buf, 8);
with tb do begin
ID := StrToInt(sl.Strings[0]);
Name := sl.Strings[1];
JName := sl.Strings[2];
LV := StrToInt(sl.Strings[3]);
HP := StrToInt(sl.Strings[4]) * EnemyHPMultiplier div 10;
SP := StrToInt(sl.Strings[5]);
EXP := StrToInt(sl.Strings[6]);
JEXP := StrToInt(sl.Strings[7]);
Range1 := StrToInt(sl.Strings[8]);
ATK1 := StrToInt(sl.Strings[9]) * EnemyATKMultiplier div 10;
ATK2 := StrToInt(sl.Strings[10]) * EnemyATKMultiplier div 10;
DEF := StrToInt(sl.Strings[11]) + EnemyDEFAdd;
MDEF := StrToInt(sl.Strings[12]);
for j := 0 to 5 do Param[j] := StrToInt(sl.Strings[13+j]);
Param[2] := Param[2] * EnemyVitMultiplier div 10;
Range2 := StrToInt(sl.Strings[19]);
Range3 := StrToInt(sl.Strings[20]);
Scale := StrToInt(sl.Strings[21]);
Race := StrToInt(sl.Strings[22]);
Element := StrToInt(sl.Strings[23]);
Mode := StrToInt(sl.Strings[24]);
Speed := StrToInt(sl.Strings[25]) * 10 div EnemyMSpeedMultiplier;
ADelay := StrToInt(sl.Strings[26]) * 10 div EnemyASPDMultiplier;
aMotion := StrToInt(sl.Strings[27]);
dMotion := StrToInt(sl.Strings[28]);
for j := 0 to 7 do begin
Drop[j].ID := StrToInt(sl.Strings[29+j*2]);
Drop[j].Per := StrToInt(sl.Strings[30+j*2]);
k := ItemDB.IndexOf(IntToStr(Drop[j].ID));
if k <> -1 then begin
Drop[j].Data := ItemDB.Objects[k] as TItemDB;
end else begin
k := ItemDB.IndexOf('512');
Drop[j].Data := ItemDB.Objects[k] as TItemDB;
Drop[j].ID := 512;
Drop[j].Per := 0;
end;
end;
Item1 := StrToInt(sl.Strings[45]);
Item2 := StrToInt(sl.Strings[46]);
MEXP := StrToInt(sl.Strings[47]);
MEXPPer := StrToInt(sl.Strings[48]);
for j := 0 to 2 do begin
MVPItem[j].ID := StrToInt(sl.Strings[49+j*2]);
MVPItem[j].Per := StrToInt(sl.Strings[50+j*2]);
end;
if sl.IndexOfName('EnemyHPMultiplier') <> -1 then begin
EnemyHPMultiplier := StrToInt(sl.Values['EnemyHPMultiplier']);
end else begin
EnemyHPMultiplier := 10;
end;
if sl.IndexOfName('EnemyATKMultiplier') <> -1 then begin
EnemyATKMultiplier := StrToInt(sl.Values['EnemyATKMultiplier']);
end else begin
EnemyATKMultiplier := 10;
end;
if sl.IndexOfName('EnemyVitMultiplier') <> -1 then begin
EnemyVitMultiplier := StrToInt(sl.Values['EnemyVitMultiplier']);
end else begin
EnemyVitMultiplier := 10;
end;
if sl.IndexOfName('EnemyMSpeedMultiplier') <> -1 then begin
EnemyMSpeedMultiplier := StrToInt(sl.Values['EnemyMSpeedMultiplier']);
end else begin
EnemyMSpeedMultiplier := 10;
end;
if sl.IndexOfName('EnemyASPDMultiplier') <> -1 then begin
EnemyASPDMultiplier := StrToInt(sl.Values['EnemyASPDMultiplier']);
end else begin
EnemyASPDMultiplier := 10;
end;
if sl.IndexOfName('EnemyDEFAdd') <> -1 then begin
EnemyDEFAdd := StrToInt(sl.Values['EnemyDEFAdd']);
end else begin
EnemyDEFAdd := 0;
end;
if sl.IndexOfName('EnemyHitAdd') <> -1 then begin
EnemyHitAdd := StrToInt(sl.Values['EnemyHitAdd']);
end else begin
EnemyHitAdd := 0;
end;
if sl.IndexOfName('EnemyFleeAdd') <> -1 then begin
EnemyFleeAdd := StrToInt(sl.Values['EnemyFleeAdd']);
end else begin
EnemyFleeAdd := 0;
end;
↑Mainのini読んでるところ
にそれぞれ書き換えor追記してください
Multi〜は10がデフォ値 Addは0がデフォ値、マイナス値書いたときのでのエラーはしるか('A`)
Vitはオークロードのせいかちょっと増やすだけですぐエラりますが、仕様です(´ヮ`;)