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

📄 svclass.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 5 页
字号:
   INI_GUILD_WOMAN_SHAPE : integer = 30;
   INI_GUILD_WOMAN_ANIMATE : integer = 12;



   INI_DEF_WRESTLING   : string;
   INI_DEF_FENCING     : string;
   INI_DEF_SWORDSHIP   : string;
   INI_DEF_HAMMERING   : string;
   INI_DEF_SPEARING    : string;
   INI_DEF_BOWING      : string;
   INI_DEF_THROWING    : string;
   INI_DEF_RUNNING     : string;
   INI_DEF_BREATHNG    : string;
   INI_DEF_PROTECTING  : string;

   INI_NORTH     : string;
   INI_NORTHEAST : string;
   INI_EAST      : string;
   INI_EASTSOUTH : string;
   INI_SOUTH     : string;
   INI_SOUTHWEST : string;
   INI_WEST      : string;
   INI_WESTNORTH : string;

   INI_HIDEPAPER_DELAY : Integer = 15;

   INI_MAGIC_DIV_VALUE  : integer = 10;
   INI_ADD_DAMAGE       : integer = 40;
   INI_MUL_ATTACKSPEED  : integer = 10;
   INI_MUL_AVOID           : integer = 6;
   INI_MUL_RECOVERY        : integer = 10;
   INI_MUL_DAMAGEBODY      : integer = 23;
   INI_MUL_DAMAGEHEAD      : integer = 17;
   INI_MUL_DAMAGEARM       : integer = 17;
   INI_MUL_DAMAGELEG       : integer = 17;
   INI_MUL_ARMORBODY       : integer = 7;
   INI_MUL_ARMORHEAD       : integer = 7;
   INI_MUL_ARMORARM        : integer = 7;
   INI_MUL_ARMORLEG        : integer = 7;

   INI_MUL_EVENTENERGY     : integer = 20;
   INI_MUL_EVENTINPOWER    : integer = 22;
   INI_MUL_EVENTOUTPOWER   : integer = 22;
   INI_MUL_EVENTMAGIC      : integer = 10;
   INI_MUL_EVENTLIFE       : integer = 8;

   INI_MUL_5SECENERGY      : integer = 20;
   INI_MUL_5SECINPOWER     : integer = 14;
   INI_MUL_5SECOUTPOWER    : integer = 14;
   INI_MUL_5SECMAGIC       : integer = 9;
   INI_MUL_5SECLIFE        : integer = 8;


   INI_SKILL_DIV_DAMAGE    : integer = 5000;
   INI_SKILL_DIV_ARMOR     : integer = 5000;
   INI_SKILL_DIV_ATTACKSPEED : integer = 25000;
   INI_SKILL_DIV_EVENT     : integer = 5000;

function  GetItemDataInfo (var aItemData: TItemData): string;
function  GetMagicDataInfo (var aMagicData: TMagicData): string;
procedure GatherLifeData (var BaseLifeData, aLifeData: TLifeData);
procedure CheckLifeData (var BaseLifeData: TLifeData);

implementation

uses
   uuser, uconnect, uGroup;

function  GetMagicDataInfo (var aMagicData: TMagicData): string;
begin
   Result := '';
   if aMagicData.rName[0] = 0 then exit;
   with aMagicData.rcLifeData do begin
      Result := format ('%s  荐访饭骇: %s', [StrPas (@aMagicData.rName), Get10000To100 (aMagicData.rcSkillLevel)]) + #13;

      if (AttackSpeed <> 0) or (Recovery <> 0) or (Avoid <> 0) then
         Result := Result + format ('傍拜加档: %d   磊技焊沥: %d   雀乔: %d', [AttackSpeed, Recovery, Avoid]) + #13;
      if DamageBody <> 0 then
         Result := Result + format ('颇鲍仿: %d/%d/%d/%d',[DamageBody, DamageHead, DamageArm, DamageLeg]) + #13;
      if ArmorBody <> 0 then
         Result := Result + format ('规绢仿: %d/%d/%d/%d',[ArmorBody, ArmorHead, ArmorArm, ArmorLeg]) + #13;
   end;
{
   Result := '';
   if aMagicData.rName[0] = 0 then exit;
   with aMagicData do begin
      Result := format ('%s  荐访饭骇: %s', [StrPas (@rName), Get10000To100 (rcSkillLevel)]) + #13;

      if (rLifeData.AttackSpeed <> 0) or (rLifeData.Recovery <> 0) or (rLifeData.Avoid <> 0) then
         Result := Result + format ('傍拜加档: %d   磊技焊沥: %d   雀乔: %d', [rLifeData.AttackSpeed, rLifeData.Recovery, rLifeData.Avoid]) + #13;
      if rLifeData.DamageBody <> 0 then
         Result := Result + format ('颇鲍仿: %d/%d/%d/%d',[rLifeData.DamageBody+rLifeData.damagebody*rcSkillLevel div INI_SKILL_DIV_DAMAGE, rLifeData.DamageHead, rLifeData.DamageArm, rLifeData.DamageLeg]) + #13;
      if rLifeData.ArmorBody <> 0 then
         Result := Result + format ('规绢仿: %d/%d/%d/%d',[rLifeData.ArmorBody, rLifeData.ArmorHead, rLifeData.ArmorArm, rLifeData.ArmorLeg]) + #13;
   end;
}
end;

function  GetItemDataInfo (var aItemData: TItemData): string;
begin
   Result := '';
   if aItemData.rName[0] = 0 then exit;
   with aItemData do begin
      Result := format ('%s  啊拜: %d', [StrPas (@rName), rPrice]) + #13;
      if rDurability <> 0 then
         Result := Result + format ('郴备己: %d/%d',[rCurDurability, rDurability]) + #13;
   end;
   with aItemData.rLifeData do begin
      if (AttackSpeed <> 0) or (Recovery <> 0) or (Avoid <> 0) then
         Result := Result + format ('傍拜加档: %d   磊技焊沥: %d   雀乔: %d', [-AttackSpeed, -Recovery, Avoid]) + #13;
      if (DamageBody <> 0) or (DamageHead <> 0) or (DamageArm <> 0) or (DamageLeg <> 0) then
         Result := Result + format ('颇鲍仿: %d/%d/%d/%d',[DamageBody, DamageHead, DamageArm, DamageLeg]) + #13;
      if (ArmorBody <> 0) or (ArmorHead <> 0) or (ArmorArm <> 0) or (ArmorLeg <> 0) then
         Result := Result + format ('规绢仿: %d/%d/%d/%d',[ArmorBody, ArmorHead, ArmorArm, ArmorLeg]) + #13;
   end;
end;

procedure GatherLifeData (var BaseLifeData, aLifeData: TLifeData);
begin
   BaseLifeData.DamageBody     := BaseLifeData.DamageBody     + aLifeData.damageBody;
   BaseLifeData.DamageHead     := BaseLifeData.DamageHead     + aLifeData.damageHead;
   BaseLifeData.DamageArm      := BaseLifeData.DamageArm      + aLifeData.damageArm;
   BaseLifeData.DamageLeg      := BaseLifeData.DamageLeg      + aLifeData.damageLeg;
   BaseLifeData.AttackSpeed    := BaseLifeData.AttackSpeed    + aLifeData.AttackSpeed;
   BaseLifeData.avoid          := BaseLifeData.avoid          + aLifeData.avoid;
   BaseLifeData.recovery       := BaseLifeData.recovery       + aLifeData.recovery;
   BaseLifeData.armorBody      := BaseLifeData.armorBody      + aLifeData.armorBody;
   BaseLifeData.armorhead      := BaseLifeData.armorHead      + aLifeData.armorHead;
   BaseLifeData.armorArm       := BaseLifeData.armorArm       + aLifeData.armorArm;
   BaseLifeData.armorLeg       := BaseLifeData.armorLeg       + aLifeData.armorLeg;
end;

procedure CheckLifeData (var BaseLifeData: TLifeData);
begin
   if BaseLifeData.damageBody < 0 then BaseLifeData.DamageBody := 0;
   if BaseLifeData.DamageHead < 0 then BaseLifeData.DamageHead := 0;
   if BaseLifeData.DamageArm  < 0 then BaseLifeData.DamageArm := 0;
   if BaseLifeData.DamageLeg  < 0 then BaseLifeData.DamageLeg := 0;

   if BaseLifeData.AttackSpeed < 0 then BaseLifeData.AttackSpeed := 0;
   if BaseLifeData.avoid       < 0 then BaseLifeData.avoid       := 0;
   if BaseLifeData.recovery    < 0 then BaseLifeData.recovery    := 0;

   if BaseLifeData.ArmorBody < 0 then BaseLifeData.ArmorBody := 0;
   if BaseLifeData.ArmorHead < 0 then BaseLifeData.ArmorHead := 0;
   if BaseLifeData.ArmorArm  < 0 then BaseLifeData.ArmorArm := 0;
   if BaseLifeData.ArmorLeg  < 0 then BaseLifeData.ArmorLeg := 0;
end;

{
procedure LoadCreateMonster (aFileName: string; List : TList);
var
   i : integer;
   iname : string;
   pd : PTCreateMonsterData;
   CreateMonster : TUserStringDb;
begin
   for i := 0 to List.Count -1 do dispose (List[i]);   // 辆丰甫 肋给窃...
   List.Clear;

   CreateMonster := TUserStringDb.Create;
   CreateMonster.LoadFromFile (aFileName);

   for i := 0 to CreateMonster.Count -1 do begin
      iname := CreateMonster.GetIndexName (i);
      new (pd);
      FillChar (pd^, sizeof(TCreateMonsterData), 0);

      pd^.index := i;
      pd^.mName := CreateMonster.GetFieldValueString (iname, 'MonsterName');
      pd^.CurCount := 0;
      pd^.Count := CreateMonster.GetFieldValueInteger (iname, 'Count');
      pd^.x := CreateMonster.GetFieldValueInteger (iname, 'X');
      pd^.y := CreateMonster.GetFieldValueInteger (iname, 'Y');
      pd^.width := CreateMonster.GetFieldValueInteger (iname, 'Width');
      pd^.Member := CreateMonster.GetFieldValueString (iName, 'Member');
      List.Add (pd);
   end;
   CreateMonster.Free;
end;

procedure LoadCreateNpc (aFileName: string; List : TList);
var
   i : integer;
   iname : string;
   pd : PTCreateNpcData;
   CreateNpc : TUserStringDb;
begin
   for i := 0 to List.Count -1 do dispose (List[i]); // 辆丰甫 肋给窃...
   List.Clear;

   CreateNpc := TUserStringDb.Create;
   CreateNpc.LoadFromFile (aFileName);

   for i := 0 to CreateNpc.Count -1 do begin
      iname := CreateNpc.GetIndexName (i);
      new (pd);
      FillChar (pd^, sizeof(TCreateNpcData), 0);

      pd^.index := i;
      pd^.mName := CreateNpc.GetFieldValueString (iname, 'NpcName');
      pd^.CurCount := 0;
      pd^.Count := CreateNpc.GetFieldValueInteger (iname, 'Count');
      pd^.x := CreateNpc.GetFieldValueInteger (iname, 'X');
      pd^.y := CreateNpc.GetFieldValueInteger (iname, 'Y');
      pd^.width := CreateNpc.GetFieldValueInteger (iname, 'Width');
      pd^.BookName := CreateNpc.GetFieldValueString (iname, 'BookName');      
      List.Add (pd);
   end;
   CreateNpc.Free;
end;

procedure LoadCreateGate (aFileName: string; List : TList);
var
   i, j : integer;
   iname : string;
   pd : PTCreateGateData;
   CreateGate : TUserStringDb;
   ItemData : TItemData;
   srcstr, tokenstr : String;
begin
   if not FileExists (aFileName) then exit;

   for i := 0 to List.Count -1 do dispose (List[i]); // 辆丰甫 肋给窃...
   List.Clear;

   CreateGate := TUserStringDb.Create;
   CreateGate.LoadFromFile (aFileName);

   for i := 0 to CreateGate.Count -1 do begin
      iname := CreateGate.GetIndexName (i);
      new (pd);
      FillChar (pd^, sizeof(TCreateGateData), 0);
      pd^.index := i;
      pd^.mName := CreateGate.GetFieldValueString (iname, 'GateName');
      pd^.x := CreateGate.GetFieldValueInteger (iname, 'X');
      pd^.y := CreateGate.GetFieldValueInteger (iname, 'Y');
      pd^.targetx := CreateGate.GetFieldValueInteger (iname, 'TX');
      pd^.targety := CreateGate.GetFieldValueInteger (iname, 'TY');
      pd^.ejectx := CreateGate.GetFieldValueInteger (iname, 'EX');
      pd^.ejecty := CreateGate.GetFieldValueInteger (iname, 'EY');
      pd^.targetserverid := CreateGate.GetFieldValueInteger (iname, 'ServerId');
      pd^.shape := CreateGate.GetFieldValueInteger (iname, 'Shape');
      pd^.Width := CreateGate.GetFieldValueInteger (iname, 'Width');

      pd^.NeedAge := CreateGate.GetFieldValueInteger (iname, 'NeedAge');
      pd^.AgeNeedItem := CreateGate.GetFieldValueInteger (iname, 'AgeNeedItem');

      srcstr := CreateGate.GetFieldValueString (iname, 'NeedItem');
      if srcstr <> '' then begin
         for j := 0 to 5 - 1 do begin
            srcstr := GetValidStr3 (srcstr, tokenstr, ':');
            if tokenstr = '' then break;
            ItemClass.GetItemData (tokenstr, ItemData);
            if ItemData.rName[0] <> 0 then begin
               srcstr := GetValidStr3 (srcstr, tokenstr, ':');
               ItemData.rCount := _StrToInt (tokenstr);
               pd^.NeedItem[j].rName := StrPas (@ItemData.rName);
               pd^.NeedItem[j].rCount := ItemData.rCount;
            end;
         end;
      end;

      pd^.Quest := CreateGate.GetFieldValueInteger (iname, 'Quest');
      pd^.QuestNotice := CreateGate.GetFieldValueString (iname, 'QuestNotice');

      pd^.RegenInterval := CreateGate.GetFieldValueInteger (iName, 'RegenInterval');
      pd^.ActiveInterval := CreateGate.GetFieldValueInteger (iName, 'ActiveInterval');

      pd^.EjectNotice := CreateGate.GetFieldValueString (iname, 'EjectNotice');

      List.Add (pd);
   end;
   CreateGate.Free;
end;
}

procedure LoadCreateItem (aFileName: string; List : TList);
begin
end;

{
procedure LoadCreateDynamicObject (aFileName : String; List : TList);
var
   i, j, iRandomCount : integer;
   iName, ObjectName, ItemName, mStr, sStr : string;
   DynamicObjectData : TDynamicObjectData;
   pd : PTCreateDynamicObjectData;
   CreateDynamicObject : TUserStringDb;
   MagicData : TMagicData;
   ItemData : TItemData;
   MonsterData : TMonsterData;
   NpcData : TNpcData;
begin
   if not FileExists (aFileName) then exit;

   for i := 0 to List.Count - 1 do begin
      Dispose (List[i]);
   end;
   List.Clear;

   CreateDynamicObject := TUserStringDb.Create;
   CreateDynamicObject.LoadFromFile (aFileName);

   for i := 0 to CreateDynamicObject.Count -1 do begin
      iName := CreateDynamicObject.GetIndexName (i);
      ObjectName := CreateDynamicObject.GetFieldValueString (iName, 'Name');
      FillChar (DynamicObjectData, SizeOf (DynamicObjectData), 0);
      DynamicObjectClass.GetDynamicObjectData (ObjectName, DynamicObjectData);
      if DynamicObjectData.rName <> '' then begin
         New (pd);
         FillChar (pd^, sizeof(TCreateDynamicObjectData), 0);
         pd^.rBasicData := DynamicObjectData;
         pd^.rState := CreateDynamicObject.GetFieldValueInteger (iname, 'State');
         pd^.rRegenInterval := CreateDynamicObject.GetFieldValueInteger (iname, 'RegenInterval');
         pd^.rLife := CreateDynamicObject.GetFieldValueInteger (iname, 'Life');
         pd^.rNeedAge := CreateDynamicObject.GetFieldValueInteger (iname, 'NeedAge');

         // pd^.rNeedSkill
         mStr := CreateDynamicObject.GetFieldValueString (iname, 'NeedSkill');
         for j := 0 to 5 - 1 do begin
            if mStr = '' then break;
            mStr := GetValidStr3 (mStr, sStr, ':');
            if sStr <> '' then begin
               MagicClass.GetMagicData (sStr, MagicData, 0);
               if MagicData.rname[0] <> 0 then begin
                  pd^.rNeedSkill[j].rName := StrPas (@MagicData.rName);
                  mStr := GetValidStr3 (mStr, sStr, ':');
                  pd^.rNeedSkill[j].rLevel := _StrToInt (sStr);
               end;
            end;
         end;
         // pd^.rNeedItem
         mStr := CreateDynamicObject.GetFieldValueString (iname, 'NeedItem');
         for j := 0 to 5 - 1 do begin
            if mStr = '' then break;
            mStr := GetValidStr3 (mStr, sStr, ':');
            if sStr <> '' then begin
               ItemClass.GetItemData (sStr, ItemData);
               if ItemData.rname[0] <> 0 then begin
                  pd^.rNeedItem[j].rName := StrPas (@ItemData.rName);
                  mStr := GetValidStr3 (mStr, sStr, ':');
                  pd^.rNeedItem[j].rCount := _StrToInt (sStr);
               end;
            end;
         end;
         // pd^.rGiveItem
         mStr := CreateDynamicObject.GetFieldValueString (iname, 'GiveItem');
         for j := 0 to 5 - 1 do begin
            if mStr = '' then break;
            mStr := GetValidStr3 (mStr, sStr, ':');
            if sStr <> '' then begin
               ItemClass.GetItemData (sStr, ItemData);
               if ItemData.rName[0] <> 0 then begin
                  pd^.rGiveItem[j].rName := StrPas (@ItemData.rName);
                  mStr := GetValidStr3 (mStr, sStr, ':');
                  pd^.rGiveItem[j].rCount := _StrToInt (sStr);
                  mStr := GetValidStr3 (mStr, sStr, ':');
                  iRandomCount := _StrToInt (sStr);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -