📄 svclass.pas
字号:
aRetStr := '';
iName := StrPas (@MagicData.rName);
if iName = '' then begin
aRetStr := '巩颇公傍疙阑 涝仿窍瘤 臼疽嚼聪促';
exit;
end;
if (Length (iName) < 4) or (Length (iName) > 10) then begin
aRetStr := '巩颇公傍疙篮 茄臂2磊 捞惑 5磊 捞窍父 啊瓷钦聪促';
exit;
end;
if not isFullHangul (iName) or not isGrammarID (iName) then begin
aRetStr := '荤侩且 荐 绝绰 巩颇公傍疙涝聪促';
exit;
end;
for i := 0 to RejectNameList.Count - 1 do begin
if Pos (RejectNameList.Strings [i], iName) > 0 then begin
aRetStr := '荤侩且 荐 绝绰 巩颇公傍疙涝聪促';
exit;
end;
end;
MagicClass.GetMagicData (iName, tmpMagicData, 1000);
if tmpMagicData.rName [0] <> 0 then begin
aRetStr := '捞固 粮犁窍绰 公傍疙涝聪促';
exit;
end;
Case MagicData.rMagicType of
MAGICTYPE_WRESTLING,
MAGICTYPE_FENCING,
MAGICTYPE_SWORDSHIP,
MAGICTYPE_HAMMERING,
MAGICTYPE_SPEARING :
begin
end;
Else begin
aRetStr := '公傍狼 辆幅啊 肋给 登菌嚼聪促';
exit;
end;
end;
if (MagicData.rLifeData.AttackSpeed < 1) or (MagicData.rLifeData.AttackSpeed > 99) then begin
aRetStr := '傍拜加档绰 1-99狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rLifeData.DamageBody < 1) or (MagicData.rLifeData.DamageBody > 99) then begin
aRetStr := '个烹颇鲍仿篮 1-99狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rLifeData.Recovery < 1) or (MagicData.rLifeData.Recovery > 99) then begin
aRetStr := '磊技焊沥篮 1-99狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rLifeData.Avoid < 1) or (MagicData.rLifeData.Avoid > 99) then begin
aRetStr := '雀乔绰 1-99狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rLifeData.DamageHead < 10) or (MagicData.rLifeData.DamageHead > 70) then begin
aRetStr := '赣府傍拜篮 10-70狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rLifeData.DamageArm < 10) or (MagicData.rLifeData.DamageArm > 70) then begin
aRetStr := '迫傍拜篮 10-70狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rLifeData.DamageLeg < 10) or (MagicData.rLifeData.DamageLeg > 70) then begin
aRetStr := '促府傍拜篮 10-70狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rLifeData.ArmorBody < 10) or (MagicData.rLifeData.ArmorBody > 70) then begin
aRetStr := '个烹规绢绰 10-70狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rLifeData.ArmorHead < 10) or (MagicData.rLifeData.ArmorHead > 70) then begin
aRetStr := '赣府规绢绰 10-70狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rLifeData.ArmorArm < 10) or (MagicData.rLifeData.ArmorArm > 70) then begin
aRetStr := '迫规绢绰 10-70狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rLifeData.ArmorLeg < 10) or (MagicData.rLifeData.ArmorLeg > 70) then begin
aRetStr := '促府规绢绰 10-70狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rEventDecOutPower < 5) or (MagicData.rEventDecOutPower > 35) then begin
aRetStr := '寇傍家葛绰 5-35狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rEventDecInPower < 5) or (MagicData.rEventDecInPower > 35) then begin
aRetStr := '郴傍家葛绰 5-35狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rEventDecMagic < 5) or (MagicData.rEventDecMagic > 35) then begin
aRetStr := '公傍家葛绰 5-35狼 蔼父 倾侩邓聪促';
exit;
end;
if (MagicData.rEventDecLife < 5) or (MagicData.rEventDecLife > 35) then begin
aRetStr := '劝仿家葛绰 5-35狼 蔼父 倾侩邓聪促';
exit;
end;
if MagicData.rLifeData.AttackSpeed + MagicData.rLifeData.DamageBody <> 100 then begin
aRetStr := '傍拜加档客 个烹颇鲍仿狼 钦篮 100捞绢具父 钦聪促';
exit;
end;
if MagicData.rLifeData.Recovery + MagicData.rLifeData.Avoid <> 100 then begin
aRetStr := '磊技焊沥苞 雀乔狼 钦篮 100捞绢具父 钦聪促';
exit;
end;
if MagicData.rLifeData.DamageHead + MagicData.rLifeData.DamageArm +
MagicData.rLifeData.DamageLeg + MagicData.rLifeData.ArmorBody +
MagicData.rLifeData.ArmorHead + MagicData.rLifeData.ArmorArm +
MagicData.rLifeData.ArmorLeg <> 228 then begin
aRetStr := '(赣府,迫,促府)颇鲍仿 + (个烹,赣府,迫,促府)规绢仿狼 钦篮 228捞绢具父 钦聪促';
exit;
end;
if MagicData.rEventDecInPower + MagicData.rEventDecOutPower +
MagicData.rEventDecMagic + MagicData.rEventDecLife <> 80 then begin
aRetStr := '郴傍 + 寇傍 + 公傍 + 劝仿(家葛樊)狼 钦篮 80捞绢具父 钦聪促';
exit;
end;
Result := true;
end;
procedure TMagicClass.CompactGuildMagic;
var
i : Integer;
MagicName, GuildName : String;
GuildObject : TGuildObject;
begin
if MagicForGuildDB.Count = 0 then exit;
for i := MagicForGuildDB.Count - 1 downto 0 do begin
MagicName := MagicForGuildDb.GetIndexName (i);
if MagicName = '' then continue;
GuildName := MagicForGuildDB.GetFieldValueString (MagicName, 'GuildName');
GuildObject := GuildList.GetGuildObjectByMagicName (MagicName);
if GuildObject = nil then begin
MagicForGuildDB.DeleteName (MagicName);
end else begin
MagicForGuildDB.SetFieldValueString (MagicName, 'GuildName', GuildObject.GuildName);
end;
end;
MagicForGuildDB.SaveToFile ('.\MagicForGuild.SDB');
ReloadFromFile;
end;
function TMagicClass.AddGuildMagic (var aMagicData : TMagicData; aGuildName : String) : Boolean;
var
iName : String;
iType, iSoundStrike, iSoundSwing : Integer;
MagicData : TMagicData;
begin
Result := false;
iName := StrPas (@aMagicData.rName);
MagicForGuildDB.AddName (iName);
FillChar (MagicData, SizeOf (TMagicData), 0);
iType := aMagicData.rMagicType;
Case iType of
MAGICTYPE_WRESTLING :
begin
GetMagicData ('公疙鼻过', MagicData, 100);
end;
MAGICTYPE_FENCING :
begin
GetMagicData ('公疙八过', MagicData, 100);
end;
MAGICTYPE_SWORDSHIP :
begin
GetMagicData ('公疙档过', MagicData, 100);
end;
MAGICTYPE_HAMMERING :
begin
GetMagicData ('公疙硼过', MagicData, 100);
end;
MAGICTYPE_SPEARING :
begin
GetMagicData ('公疙芒贱', MagicData, 100);
end;
end;
if MagicData.rname [0] = 0 then exit;
iSoundSwing := MagicData.rSoundSwing.rWavNumber;
iSoundStrike := MagicData.rSoundStrike.rWavNumber;
MagicForGuildDB.SetFieldValueString (iName, 'SoundEvent', '');
MagicForGuildDB.SetFieldValueString (iName, 'SoundStrike', IntToStr (iSoundStrike));
MagicForGuildDB.SetFieldValueString (iName, 'SoundSwing', IntToStr (iSoundSwing));
MagicForGuildDB.SetFieldValueString (iName, 'SoundStart', '');
MagicForGuildDB.SetFieldValueString (iName, 'SoundEnd', '');
MagicForGuildDB.SetFieldValueInteger (iName, 'Shape', aMagicData.rShape);
MagicForGuildDB.SetFieldValueInteger (iName, 'MagicType', aMagicData.rMagicType);
MagicForGuildDB.SetFieldValueInteger (iName, 'Function', 0);
MagicForGuildDB.SetFieldValueInteger (iName, 'AttackSpeed', aMagicData.rLifeData.AttackSpeed);
MagicForGuildDB.SetFieldValueInteger (iName, 'Recovery', aMagicData.rLifeData.Recovery);
MagicForGuildDB.SetFieldValueInteger (iName, 'Avoid', aMagicData.rLifeData.Avoid);
MagicForGuildDB.SetFieldValueInteger (iName, 'DamageBody', aMagicData.rLifeData.DamageBody);
MagicForGuildDB.SetFieldValueInteger (iName, 'DamageHead', aMagicData.rLifeData.DamageHead);
MagicForGuildDB.SetFieldValueInteger (iName, 'DamageArm', aMagicData.rLifeData.DamageArm);
MagicForGuildDB.SetFieldValueInteger (iName, 'DamageLeg', aMagicData.rLifeData.DamageLeg);
MagicForGuildDB.SetFieldValueInteger (iName, 'ArmorBody', aMagicData.rLifeData.ArmorBody);
MagicForGuildDB.SetFieldValueInteger (iName, 'ArmorHead', aMagicData.rLifeData.ArmorHead);
MagicForGuildDB.SetFieldValueInteger (iName, 'ArmorArm', aMagicData.rLifeData.ArmorArm);
MagicForGuildDB.SetFieldValueInteger (iName, 'ArmorLeg', aMagicData.rLifeData.ArmorLeg);
MagicForGuildDB.SetFieldValueInteger (iName, 'eEnergy', aMagicData.rEventDecEnergy);
MagicForGuildDB.SetFieldValueInteger (iName, 'eInPower', aMagicData.rEventDecInPower);
MagicForGuildDB.SetFieldValueInteger (iName, 'eOutPower', aMagicData.rEventDecOutPower);
MagicForGuildDB.SetFieldValueInteger (iName, 'eMagic', aMagicData.rEventDecMagic);
MagicForGuildDB.SetFieldValueInteger (iName, 'eLife', aMagicData.rEventDecLife);
MagicForGuildDB.SetFieldValueString (iName, 'GuildName', aGuildName);
MagicForGuildDB.SetFieldValueInteger (iName, 'kEnergy', 10);
MagicForGuildDB.SetFieldValueInteger (iName, 'kInPower', 10);
MagicForGuildDB.SetFieldValueInteger (iName, 'kOutPower', 10);
MagicForGuildDB.SetFieldValueInteger (iName, 'kMagic', 10);
MagicForGuildDB.SetFieldValueInteger (iName, 'kLife', 10);
MagicForGuildDB.SaveToFile ('.\MagicForGuild.SDB');
ReloadFromFile;
Result := true;
end;
// TMagicParamClass
constructor TMagicParamClass.Create;
begin
DataList := TList.Create;
KeyClass := TStringKeyClass.Create;
LoadFromFile ('.\Init\MagicParam.SDB');
end;
destructor TMagicParamClass.Destroy;
begin
Clear;
KeyClass.Free;
DataList.Free;
inherited Destroy;
end;
procedure TMagicParamClass.Clear;
var
i : Integer;
pd : PTMagicParamData;
begin
for i := 0 to DataList.Count - 1 do begin
pd := DataList.Items [i];
Dispose (pd);
end;
DataList.Clear;
KeyClass.Clear;
end;
function TMagicParamClass.LoadFromFile (aFileName : String) : Boolean;
var
i, j : Integer;
iName : String;
pd : PTMagicParamData;
DB : TUserStringDB;
begin
Result := false;
if not FileExists (aFileName) then exit;
DB := TUserStringDB.Create;
DB.LoadFromFile (aFileName);
for i := 0 to DB.Count - 1 do begin
iName := DB.GetIndexName (i);
if iName = '' then continue;
New (pd);
FillChar (pd^, SizeOf (TMagicParamData), 0);
pd^.ObjectName := DB.GetFieldValueString (iName, 'ObjectName');
pd^.MagicName := DB.GetFieldValueString (iName, 'MagicName');
for j := 0 to 5 - 1 do begin
pd^.NameParam [j] := DB.GetFieldValueString (iName, 'NameParam' + IntToStr (j + 1));
end;
for j := 0 to 5 - 1 do begin
pd^.NumberParam [j] := DB.GetFieldValueInteger (iName, 'NumberParam' + IntToStr (j + 1));
end;
KeyClass.Insert (pd^.ObjectName + pd^.MagicName, pd);
DataList.Add (pd);
end;
DB.Free;
Result := true;
end;
function TMagicParamClass.GetMagicParamData (aObjectName, aMagicName : String;var aMagicParamData : TMagicParamData): Boolean;
var
pd : PTMagicParamData;
begin
Result := false;
pd := KeyClass.Select (aObjectName + aMagicName);
if pd = nil then begin
FillChar (aMagicParamData, SizeOf (TMagicParamData), 0);
exit;
end;
Move (pd^, aMagicParamData, SizeOf (TMagicParamData));
Result := true;
end;
{
const
MAGIC_DIV_VALUE = 10;
ADD_DAMAGE = 40;
MUL_ATTACKSPEED = 10;
MUL_AVOID = 6;
MUL_RECOVERY = 10;
MUL_DAMAGEBODY = 23;
MUL_DAMAGEHEAD = 17;
MUL_DAMAGEARM = 17;
MUL_DAMAGELEG = 17;
MUL_ARMORBODY = 7;
MUL_ARMORHEAD = 7;
MUL_ARMORARM = 7;
MUL_ARMORLEG = 7;
MUL_EVENTENERGY = 20;
MUL_EVENTINPOWER = 22;
MUL_EVENTOUTPOWER = 22;
MUL_EVENTMAGIC = 10;
MUL_EVENTLIFE = 8;
MUL_5SECENERGY = 20;
MUL_5SECINPOWER = 14;
MUL_5SECOUTPOWER = 14;
MUL_5SECMAGIC = 9;
MUL_5SECLIFE = 8;
}
function TMagicClass.LoadMagicData (aMagicName: string; var MagicData: TMagicData; aDb: TUserStringDb): Boolean;
begin
Result := FALSE;
FillChar (MagicData, sizeof(MagicData), 0);
if aDb.GetDbString (aMagicName) = '' then exit;
with MagicData do begin
StrPCopy (@rname, aMagicName);
// rPercent := 10;
StrToEffectData (rSoundEvent, aDb.GetFieldValueString (aMagicName, 'SoundEvent'));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -