📄 svclass.pas
字号:
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');
rBowType := aDb.GetFieldValueinteger (aMagicName, 'BowType');
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
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, rCount : integer;
iName : string;
pid : PTItemData;
begin
Clear;
if not FileExists ('.\Init\Item.SDB') then exit;
ItemDb.LoadFromFile ('.\Init\Item.SDB');
for i := 0 to ItemDb.Count -1 do begin
iName := ItemDb.GetIndexName (i);
New (pid);
LoadItemData (iName, pid^);
DataList.Add (pid);
AnsIndexClass.Insert (Integer(pid), iname);
end;
end;
function TItemClass.LoadItemData (aItemName: string; var ItemData: TItemData): Boolean;
var
Str : String;
begin
Result := FALSE;
FillChar (ItemData, sizeof(ItemData), 0);
if ItemDb.GetDbString (aItemName) = '' then exit;
StrPCopy (@ItemData.rname, aItemName);
Str := ItemDB.GetFieldValueString (aItemName, 'ViewName');
StrPCopy (@ItemData.rViewName, Str);
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');
ItemData.rShape := ItemDb.GetFieldValueinteger (aItemName, 'Shape');
ItemData.rActionImage := ItemDb.GetFieldValueInteger (aItemName, 'ActionImage');
ItemData.rHitMotion := ItemDb.GetFieldValueinteger (aItemName, 'HitMotion');
ItemData.rHitType := ItemDb.GetFieldValueinteger (aItemName, 'HitType');
ItemData.rKind := ItemDb.GetFieldValueinteger (aItemName, 'Kind');
ItemData.rColor := ItemDb.GetFieldValueinteger (aItemName, 'Color');
ItemData.rBoDouble := ItemDb.GetFieldValueBoolean (aItemName, 'boDouble');
ItemData.rBoColoring := ItemDb.GetFieldValueBoolean (aItemName, 'boColoring');
ItemData.rPrice := ItemDb.GetFieldValueInteger (aItemName, 'Price');
ItemData.rNeedGrade := ItemDb.GetFieldValueInteger (aItemName, 'NeedGrade');
ItemData.rSex := ItemDb.GetFieldValueInteger (aItemName, 'Sex');
ItemData.rNameParam[0] := ItemDb.GetFieldValueString (aItemName, 'NameParam1');
ItemData.rNameParam[1] := ItemDb.GetFieldValueString (aItemName, 'NameParam2');
ItemData.rServerId := ItemDb.GetFieldValueInteger (aItemName, 'ServerId');
ItemData.rx := ItemDb.GetFieldValueInteger (aItemName, 'X');
ItemData.ry := ItemDb.GetFieldValueInteger (aItemName, 'Y');
ItemData.rCount := 1;
Result := TRUE;
end;
function TItemClass.GetItemData (aItemName: string; var ItemData: TItemData): Boolean;
var
n : integer;
begin
Result := FALSE;
n := AnsIndexClass.Select (aItemName);
if (n = 0) or (n = -1) then begin
FillChar (ItemData, sizeof(ItemData), 0);
exit;
end;
ItemData := PTItemData (n)^;
Result := TRUE;
end;
function TItemClass.GetCheckItemData (aObjName : String; aCheckItem : TCheckItem; var ItemData: TItemData): Boolean;
var
n : integer;
begin
Result := FALSE;
n := AnsIndexClass.Select (aCheckItem.rName);
if (n = 0) or (n = -1) then begin
FillChar (ItemData, sizeof(ItemData), 0);
exit;
end;
if RandomClass.GetChance (aCheckItem.rName, aObjName) = false then begin
FillChar (ItemData, sizeof(ItemData), 0);
exit;
end;
ItemData := PTItemData (n)^;
ItemData.rCount := aCheckItem.rCount;
Result := TRUE;
end;
function TItemClass.GetChanceItemData (aStr, aObjName: string; var ItemData: TItemData): Boolean;
var
str, rdstr, iname : string;
icolor, icnt : integer;
boChance : Boolean;
begin
Result := FALSE;
str := astr;
str := GetValidStr3 (str, iname, ':');
str := GetValidStr3 (str, rdstr, ':');
icolor := _StrToInt (rdstr);
str := GetValidStr3 (str, rdstr, ':');
icnt := _StrToInt (rdstr);
if GetItemData (iName, ItemData) = FALSE then exit;
boChance := RandomClass.GetChance (iName, aObjName);
if boChance = false then begin
FillChar(ItemData, sizeof(TItemData),0);
exit;
end else begin
ItemData.rColor := iColor;
ItemData.rCount := iCnt;
end;
Result := TRUE;
end;
function TItemClass.GetWearItemData (astr: string; var ItemData: TItemData): Boolean;
var
str, rdstr, iname : string;
icolor, icnt :integer;
begin
Result := FALSE;
str := astr;
str := GetValidStr3 (str, iname, ':');
str := GetValidStr3 (str, rdstr, ':');
icolor := _StrToInt (rdstr);
str := GetValidStr3 (str, rdstr, ':');
icnt := _StrToInt (rdstr);
if GetItemData (iname, ItemData) = FALSE then exit;
ItemData.rColor := icolor;
ItemData.rCount := icnt;
Result := TRUE;
end;
function TItemClass.GetWearItemString (var ItemData: TItemData): string;
begin
Result := StrPas (@ItemData.rName) + ':' + IntToStr(ItemData.rcolor)+':'+IntToStr(ItemData.rCount) + ':';
end;
///////////////////////////////
// TDynamicObjectClass
///////////////////////////////
constructor TDynamicObjectClass.Create;
begin
DataList := TList.Create;
AnsIndexClass := TAnsIndexClass.Create ('DynamicItemClass', 20, TRUE);
LoadFromFile ('.\Init\DynamicObject.Sdb');
end;
destructor TDynamicObjectClass.Destroy;
begin
Clear;
AnsIndexClass.Free;
DataList.Free;
inherited Destroy;
end;
procedure TDynamicObjectClass.Clear;
var
i : integer;
begin
for i := 0 to DataList.Count - 1 do begin
Dispose (DataList[i]);
end;
DataList.Clear;
AnsIndexClass.Clear;
end;
function TDynamicObjectClass.GetDynamicObjectData (aObjectName: String; var aObjectData: TDynamicObjectData): Boolean;
var
n : integer;
begin
Result := FALSE;
n := AnsIndexClass.Select (aObjectName);
if (n = 0) or (n = -1) then begin
FillChar (aObjectData, sizeof(TDynamicObjectData), 0);
exit;
end;
aObjectData := PTDynamicObjectData (n)^;
Result := TRUE;
end;
procedure TDynamicObjectClass.LoadFromFile (aName : String);
var
i, j : integer;
iName, Str, rdStr : String;
xx, yy : Word;
StrDB : TUserStringDb;
pd : PTDynamicObjectData;
begin
Clear;
if not FileExists (aName) then exit;
StrDB := TUserStringDb.Create;
StrDB.LoadFromFile (aName);
for i := 0 to StrDb.Count - 1 do begin
iName := StrDb.GetIndexName (i);
if iName = '' then continue;
New (pd);
FillChar (pd^, SizeOf (TDynamicObjectData), 0);
pd^.rName := StrDB.GetFieldValueString (iName, 'Name');
pd^.rViewName := StrDB.GetFieldValueString (iName, 'ViewName');
pd^.rKind := StrDB.GetFieldValueInteger (iName, 'Kind');
pd^.rShape := StrDB.GetFieldValueInteger (iName, 'Shape');
pd^.rLife := StrDB.GetFieldValueInteger (iName, 'Life');
for j := 0 to 3 - 1 do begin
pd^.rSStep[j] := StrDB.GetFieldValueInteger (iName, 'S
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -