📄 svclass.pas
字号:
end;
end;
TempDb.Free;
// 2000.10.05 眠啊规绢仿 AddArmor.sdb 颇老狼 肺靛
TempDb := TUserStringDb.Create;
TempDb.LoadFromFile ('addarmor.sdb');
for idx := 0 to TempDb.Count -1 do begin
iname := TempDb.GetIndexName (idx);
sn := TempDb.GetFieldValueInteger (iname,'StartSkill');
en := TempDb.GetFieldValueInteger (iname,'EndSkill');
if sn <= 0 then sn := 0;
if en >= 10000 then en := 10000;
for i := sn to en do begin
SkillAddArmorArr[i].rarmorbody := TempDb.GetFieldValueInteger (iname,'ArmorBody');
SkillAddArmorArr[i].rarmorhead := TempDb.GetFieldValueInteger (iname,'ArmorHead');
SkillAddArmorArr[i].rarmorarm := TempDb.GetFieldValueInteger (iname,'ArmorArm');
SkillAddArmorArr[i].rarmorleg := TempDb.GetFieldValueInteger (iname,'ArmorLeg');
end;
end;
TempDb.Free;
MagicDb.LoadFromFile ('magic.sdb');
MagicForGuildDb.LoadFromFile ('magicforguild.sdb');
for i := 0 to MagicDb.Count -1 do begin
mname := MagicDb.GetIndexName (i);
new (pmd);
LoadMagicData (mname, pmd^, MagicDb);
DataList.Add (pmd);
AnsIndexClass.Insert (Integer(pmd), mname);
end;
for i := 0 to MagicForGuildDb.Count -1 do begin
mname := MagicForGuildDb.GetIndexName (i);
new (pmd);
LoadMagicData (mname, pmd^, MagicForGuildDb);
pmd^.rGuildMagictype := 1;
DataList.Add (pmd);
AnsIndexClass.Insert (Integer(pmd), mname);
end;
end;
function TMagicClass.GetSkillDamageBody (askill: integer): integer;
begin
Result := 0;
if (askill <= 0) or (askill >= 10000) then exit;
Result := SkillAddDamageArr[askill].rdamagebody;
end;
function TMagicClass.GetSkillDamageHead (askill: integer): integer;
begin
Result := 0;
if (askill <= 0) or (askill >= 10000) then exit;
Result := SkillAddDamageArr[askill].rdamagehead;
end;
function TMagicClass.GetSkillDamageArm (askill: integer): integer;
begin
Result := 0;
if (askill <= 0) or (askill >= 10000) then exit;
Result := SkillAddDamageArr[askill].rdamagearm;
end;
function TMagicClass.GetSkillDamageLeg (askill: integer): integer;
begin
Result := 0;
if (askill <= 0) or (askill >= 10000) then exit;
Result := SkillAddDamageArr[askill].rdamageleg;
end;
// 2000.10.05 个 眠啊规绢仿 备窍绰 Method
function TMagicClass.GetSkillArmorBody (askill: integer): integer;
begin
Result := 0;
if (askill <= 0) or (askill >= 10000) then exit;
Result := SkillAddArmorArr[askill].rarmorbody;
end;
// 2000.10.05 赣府 眠啊规绢仿 备窍绰 Method
function TMagicClass.GetSkillArmorHead (askill: integer): integer;
begin
Result := 0;
if (askill <= 0) or (askill >= 10000) then exit;
Result := SkillAddArmorArr[askill].rarmorhead;
end;
// 2000.10.05 迫 眠啊规绢仿 备窍绰 Method
function TMagicClass.GetSkillArmorArm (askill: integer): integer;
begin
Result := 0;
if (askill <= 0) or (askill >= 10000) then exit;
Result := SkillAddArmorArr[askill].rarmorarm;
end;
// 2000.10.05 促府 眠啊规绢仿 备窍绰 Method
function TMagicClass.GetSkillArmorLeg (askill: integer): integer;
begin
Result := 0;
if (askill <= 0) or (askill >= 10000) then exit;
Result := SkillAddArmorArr[askill].rarmorleg;
end;
function TMagicClass.GetMagicData (aMagicName: string; var MagicData: TMagicData; aexp: integer): Boolean;
var
n : integer;
begin
Result := FALSE;
n := AnsIndexClass.Select (aMagicName);
if (n = 0) or (n = -1) then begin
FillChar (MagicData, sizeof(MagicData), 0);
exit;
end;
MagicData := PTMagicData (n)^;
MagicData.rSkillExp := aexp;
MagicData.rcSkillLevel := GetLevel (aexp);
Result := TRUE;
end;
{
procedure TMagicClass.CompactGuildMagic;
var
i : Integer;
MagicName, GuildName : String;
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');
if GuildList.GetGuildServerID (GuildName) = -1 then begin
MagicForGuildDB.DeleteName (MagicName);
end;
end;
MagicForGuildDB.SaveToFile ('MagicForGuild.SDB');
ReloadFromFile;
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'));
StrToEffectData (rSoundStrike, aDb.GetFieldValueString (aMagicName, 'SoundStrike'));
StrToEffectData (rSoundSwing, aDb.GetFieldValueString (aMagicName, 'SoundSwing'));
StrToEffectData (rSoundStart, aDb.GetFieldValueString (aMagicName, 'SoundStart'));
StrToEffectData (rSoundEnd, aDb.GetFieldValueString (aMagicName, 'SoundEnd'));
rBowImage := aDb.GetFieldValueinteger (aMagicName, 'BowImage');
rBowSpeed := aDb.GetFieldValueinteger (aMagicName, 'BowSpeed');
rShape := aDb.GetFieldValueinteger (aMagicName, 'Shape');
rMagicType := aDb.GetFieldValueinteger (aMagicName, 'MagicType');
rFunction := aDb.GetFieldValueinteger (aMagicName, 'Function');
// rGoodChar := aDb.GetFieldValueinteger (aMagicName, 'GoodChar');
// rBadChar := aDb.GetFieldValueinteger (aMagicName, 'BadChar');
if aDb.GetFieldValueinteger (aMagicName, 'AttackSpeed') <> 0 then
rLifeData.AttackSpeed := (120 - aDb.GetFieldValueinteger (aMagicName, 'AttackSpeed') ) * INI_MUL_ATTACKSPEED div INI_MAGIC_DIV_VALUE;
if aDb.GetFieldValueinteger (aMagicName, 'Recovery') <> 0 then
rLifeData.recovery := (120 - aDb.GetFieldValueinteger (aMagicName, 'Recovery') ) * INI_MUL_RECOVERY div INI_MAGIC_DIV_VALUE;
if aDb.GetFieldValueinteger (aMagicName, 'Avoid') <> 0 then
rLifeData.avoid := aDb.GetFieldValueinteger (aMagicName, 'Avoid') * INI_MUL_AVOID div INI_MAGIC_DIV_VALUE;
if aDb.GetFieldValueinteger (aMagicName, 'DamageBody') <> 0 then
rLifeData.damageBody := (aDb.GetFieldValueinteger (aMagicName, 'DamageBody')+INI_ADD_DAMAGE) * INI_MUL_DAMAGEBODY div INI_MAGIC_DIV_VALUE;
if aDb.GetFieldValueinteger (aMagicName, 'DamageHead') <> 0 then
rLifeData.damageHead := (aDb.GetFieldValueinteger (aMagicName, 'DamageHead')+INI_ADD_DAMAGE) * INI_MUL_DAMAGEHEAD div INI_MAGIC_DIV_VALUE;
if aDb.GetFieldValueinteger (aMagicName, 'DamageArm') <> 0 then
rLifeData.damageArm := (aDb.GetFieldValueinteger (aMagicName, 'DamageArm')+INI_ADD_DAMAGE) * INI_MUL_DAMAGEARM div INI_MAGIC_DIV_VALUE;
if aDb.GetFieldValueinteger (aMagicName, 'DamageLeg') <> 0 then
rLifeData.damageLeg := (aDb.GetFieldValueinteger (aMagicName, 'DamageLeg')+INI_ADD_DAMAGE) * INI_MUL_DAMAGELEG div INI_MAGIC_DIV_VALUE;
rLifeData.armorBody := aDb.GetFieldValueinteger (aMagicName, 'ArmorBody') * INI_MUL_ARMORBODY div INI_MAGIC_DIV_VALUE;
rLifeData.armorHead := aDb.GetFieldValueinteger (aMagicName, 'ArmorHead') * INI_MUL_ARMORHEAD div INI_MAGIC_DIV_VALUE;
rLifeData.armorArm := aDb.GetFieldValueinteger (aMagicName, 'ArmorArm') * INI_MUL_ARMORARM div INI_MAGIC_DIV_VALUE;
rLifeData.armorLeg := aDb.GetFieldValueinteger (aMagicName, 'ArmorLeg') * INI_MUL_ARMORLEG div INI_MAGIC_DIV_VALUE;
rEventDecEnergy := aDb.GetFieldValueinteger (aMagicName, 'eEnergy') * INI_MUL_EVENTENERGY div INI_MAGIC_DIV_VALUE;
rEventDecInPower:= aDb.GetFieldValueinteger (aMagicName, 'eInPower') * INI_MUL_EVENTINPOWER div INI_MAGIC_DIV_VALUE;
rEventDecOutPower:= aDb.GetFieldValueinteger (aMagicName, 'eOutPower') * INI_MUL_EVENTOUTPOWER div INI_MAGIC_DIV_VALUE;
rEventDecMagic := aDb.GetFieldValueinteger (aMagicName, 'eMagic') * INI_MUL_EVENTMAGIC div INI_MAGIC_DIV_VALUE;
rEventDecLife := aDb.GetFieldValueinteger (aMagicName, 'eLife') * INI_MUL_EVENTLIFE div INI_MAGIC_DIV_VALUE;
rEventBreathngEnergy := aDb.GetFieldValueinteger (aMagicName, 'eEnergy');
rEventBreathngInPower:= aDb.GetFieldValueinteger (aMagicName, 'eInPower');
rEventBreathngOutPower:= aDb.GetFieldValueinteger (aMagicName, 'eOutPower');
rEventBreathngMagic := aDb.GetFieldValueinteger (aMagicName, 'eMagic');
rEventBreathngLife := aDb.GetFieldValueinteger (aMagicName, 'eLife');
r5SecDecEnergy := aDb.GetFieldValueinteger (aMagicName, '5Energy') * INI_MUL_5SECENERGY div INI_MAGIC_DIV_VALUE;
r5SecDecInPower:= aDb.GetFieldValueinteger (aMagicName, '5InPower') * INI_MUL_5SECINPOWER div INI_MAGIC_DIV_VALUE;
r5SecDecOutPower:= aDb.GetFieldValueinteger (aMagicName, '5OutPower') * INI_MUL_5SECOUTPOWER div INI_MAGIC_DIV_VALUE;
r5SecDecMagic := aDb.GetFieldValueinteger (aMagicName, '5Magic') * INI_MUL_5SECMAGIC div INI_MAGIC_DIV_VALUE;
r5SecDecLife := aDb.GetFieldValueinteger (aMagicName, '5Life') * INI_MUL_5SECLIFE div INI_MAGIC_DIV_VALUE;
rKeepEnergy := aDb.GetFieldValueinteger (aMagicName, 'kEnergy') * 10;
rKeepInPower:= aDb.GetFieldValueinteger (aMagicName, 'kInPower') * 10;
rKeepOutPower:= aDb.GetFieldValueinteger (aMagicName, 'kOutPower') * 10;
rKeepMagic := aDb.GetFieldValueinteger (aMagicName, 'kMagic') * 10;
rKeepLife := aDb.GetFieldValueinteger (aMagicName, 'kLife') * 10;
end;
Result := TRUE;
end;
function TMagicClass.GetHaveMagicData (astr: string; var MagicData: TMagicData): Boolean;
var
str, rdstr, amagicname: string;
sexp :integer;
begin
Result := FALSE;
str := astr;
str := GetValidStr3 (str, amagicname, ':');
str := GetValidStr3 (str, rdstr, ':');
sexp := _StrToInt (rdstr);
if GetMagicData (amagicname, MagicData, sexp) = FALSE then exit;
Result := TRUE;
end;
function TMagicClass.GetHaveMagicString (var MagicData: TMagicData): string;
begin
Result := StrPas (@MagicData.rName) + ':' + IntToStr(MagicData.rSkillExp)+':';
end;
///////////////////////////////////
// TItemClass
///////////////////////////////////
constructor TItemClass.Create;
begin
{
n := 1;
for i := 0 to 30 do begin
MonsterRandomCount[i] := n;
n := n * 2;
end;
}
ItemDb := TUserStringDb.Create;
DataList := TList.Create;
AnsIndexClass := TAnsIndexClass.Create ('ItemClass', 20, TRUE);
ReLoadFromFile;
end;
destructor TItemClass.Destroy;
begin
Clear;
AnsIndexClass.Free;
DataList.Free;
ItemDb.Free;
inherited Destroy;
end;
procedure TItemClass.Clear;
var i : integer;
begin
for i := 0 to DataList.Count -1 do dispose (DataList[i]);
DataList.Clear;
AnsIndexClass.Clear;
end;
procedure TItemClass.ReLoadFromFile;
var
i : integer;
iName : string;
pid : PTItemData;
begin
Clear;
ItemDb.LoadFromFile ('item.sdb');
for i := 0 to ItemDb.Count -1 do begin
iName := ItemDb.GetIndexName (i);
New (pid);
LoadItemData (iName, pid^);
{
rCount := ItemDB.GetFieldValueInteger (iName, 'RandomCount');
if rCount > 1 then begin
RandomClass.AddData (iName, rCount);
end;
}
DataList.Add (pid);
AnsIndexClass.Insert (Integer(pid), iname);
end;
end;
function TItemClass.LoadItemData (aItemName: string; var ItemData: TItemData): Boolean;
begin
Result := FALSE;
FillChar (ItemData, sizeof(ItemData), 0);
if ItemDb.GetDbString (aItemName) = '' then exit;
StrPCopy (@ItemData.rname, aItemName);
StrToEffectData (ItemData.rSoundEvent, ItemDb.GetFieldValueString (aItemName, 'SoundEvent'));
StrToEffectData (ItemData.rSoundDrop, ItemDb.GetFieldValueString (aItemName, 'SoundDrop'));
Itemdata.rLifeData.DamageBody := ItemDb.GetFieldValueinteger (aItemName, 'DamageBody');
Itemdata.rLifeData.DamageHead := ItemDb.GetFieldValueinteger (aItemName, 'DamageHead');
Itemdata.rLifeData.DamageArm := ItemDb.GetFieldValueinteger (aItemName, 'DamageArm');
Itemdata.rLifeData.DamageLeg := ItemDb.GetFieldValueinteger (aItemName, 'DamageLeg');
Itemdata.rLifeData.ArmorBody := ItemDb.GetFieldValueinteger (aItemName, 'ArmorBody');
Itemdata.rLifeData.ArmorHead := ItemDb.GetFieldValueinteger (aItemName, 'ArmorHead');
Itemdata.rLifeData.ArmorArm := ItemDb.GetFieldValueinteger (aItemName, 'ArmorArm');
Itemdata.rLifeData.ArmorLeg := ItemDb.GetFieldValueinteger (aItemName, 'ArmorLeg');
Itemdata.rLifeData.AttackSpeed := 0 - ItemDb.GetFieldValueinteger (aItemName, 'AttackSpeed');
Itemdata.rLifeData.Recovery := 0 - ItemDb.GetFieldValueinteger (aItemName, 'Recovery');
Itemdata.rLifeData.Avoid := ItemDb.GetFieldValueinteger (aItemName, 'Avoid');
Itemdata.rDurability := ItemDb.GetFieldValueinteger (aItemName, 'Durability');
Itemdata.rCurDurability := Itemdata.rDurability;
ItemData.rWearArr := ItemDb.GetFieldValueinteger (aItemName, 'WearPos');
ItemData.rWearShape := ItemDb.GetFieldValueinteger (aItemName, 'WearShape');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -