⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svclass.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      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 + -