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

📄 svclass.pas

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

                  RandomClass.AddData (pd^.rGiveItem[j].rName, ObjectName, iRandomCount);                  
               end;
            end;
         end;
         // pd^.rDropItem
         mStr := CreateDynamicObject.GetFieldValueString (iname, 'DropItem');
         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^.rDropItem[j].rName := StrPas (@ItemData.rName);
                  mStr := GetValidStr3 (mStr, sStr, ':');
                  pd^.rDropItem[j].rCount := _StrToInt (sStr);
                  mStr := GetValidStr3 (mStr, sStr, ':');
                  iRandomCount := _StrToInt (sStr);
                  if iRandomCount <= 0 then iRandomCount := 1;

                  RandomClass.AddData (pd^.rDropItem[j].rName, ObjectName, iRandomCount);
               end;
            end;
         end;

         // pd^.rDropMop
         mStr := CreateDynamicObject.GetFieldValueString (iname, 'DropMop');
         for j := 0 to 5 - 1 do begin
            if mStr = '' then break;
            mStr := GetValidStr3 (mStr, sStr, ':');
            if sStr <> '' then begin
               MonsterClass.LoadMonsterData (sStr, MonsterData);
               if MonsterData.rName[0] <> 0 then begin
                  pd^.rDropMop[j].rName := StrPas (@MonsterData.rName);
                  mStr := GetValidStr3 (mStr, sStr, ':');
                  pd^.rDropMop[j].rCount := _StrToInt (sStr);
               end;
            end;
         end;

         // pd^.rCallNpc
         mStr := CreateDynamicObject.GetFieldValueString (iname, 'CallNpc');
         for j := 0 to 5 - 1 do begin
            if mStr = '' then break;
            mStr := GetValidStr3 (mStr, sStr, ':');
            if sStr <> '' then begin
               NpcClass.GetNpcData (sStr, @NpcData);
               if NpcData.rName[0] <> 0 then begin
                  pd^.rCallNpc[j].rName := StrPas (@NpcData.rName);
                  mStr := GetValidStr3 (mStr, sStr, ':');
                  pd^.rCallNpc[j].rCount := _StrToInt (sStr);
               end;
            end;
         end;

         mStr := CreateDynamicObject.GetFieldValueString (iname, 'X');
         for j := 0 to 5 - 1 do begin
            mStr := GetValidStr3 (mStr, sStr, ':');
            if sStr = '' then break;
            pd^.rX[j] := _StrToInt (sStr);
         end;
         mStr := CreateDynamicObject.GetFieldValueString (iname, 'Y');
         for j := 0 to 5 - 1 do begin
            mStr := GetValidStr3 (mStr, sStr, ':');
            if sStr = '' then break;
            pd^.rY[j] := _StrToInt (sStr);
         end;
         List.Add (pd);
      end;
   end;
   CreateDynamicObject.Free;
end;

procedure LoadCreateGuild (aFileName: string; List : TList);
var
   i, j: integer;
   str, rdstr : string;
   iname : string;
   pd : PTCreateGuildData;
   CreateGuildDb : TUserStringDb;
begin
   if not FileExists (aFileName) then exit;
   
   for i := 0 to List.Count -1 do dispose (List[i]);  // 辆丰甫 肋给窃...
   List.Clear;

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

   for j := 0 to CreateGuildDb.Count -1 do begin
      iname := CreateGuildDb.GetIndexName (j);
      new (pd); FillChar (pd^, sizeof(TCreateGuildData), 0);
      pd^.index := j;
      pd^.mName := iname;
      pd^.x := CreateGuildDb.GetFieldValueInteger (iname, 'X');
      pd^.y := CreateGuildDb.GetFieldValueInteger (iname, 'Y');
      pd^.Sysop := CreateGuildDb.GetFieldValueString (iname, 'Sysop');
      pd^.SubSysop0 := CreateGuildDb.GetFieldValueString (iname, 'SubSysop0');
      pd^.SubSysop1 := CreateGuildDb.GetFieldValueString (iname, 'SubSysop1');
      pd^.SubSysop2 := CreateGuildDb.GetFieldValueString (iname, 'SubSysop2');
      pd^.Durability := CreateGuildDb.GetFieldValueInteger (iname, 'Durability');
      pd^.GuildMagic := CreateGuildDb.GetFieldValueString (iname, 'GuildMagic');
      pd^.MakeDate := CreateGuildDb.GetFieldValueString (iname, 'MakeDate');
      pd^.MagicExp := CreateGuildDb.GetFieldValueInteger (iname, 'MagicExp');

      for i := 0 to 5-1 do begin
         str := CreateGuildDb.GetFieldValueString (iname, 'Npc'+IntToStr(i));
         str := GetValidStr3 (str, rdstr, ':');
         pd^.GuildNpcDataArr[i].rName := rdstr;
         str := GetValidStr3 (str, rdstr, ':');
         pd^.GuildNpcDataArr[i].rx := _StrtoInt (rdstr);
         str := GetValidStr3 (str, rdstr, ':');
         pd^.GuildNpcDataArr[i].ry := _StrtoInt (rdstr);
         pd^.GuildNpcDataArr[i].rIndex := i;
      end;

      List.Add (pd);
   end;
   CreateGuildDb.Free;
end;

procedure SaveCreateGuild (aFileName: string; List : TList);
var
   i, j : integer;
   str: string;
   pd : PTCreateGuildData;
   CreateGuildDb : TUserStringDb;
begin
   CreateGuildDb := TUserStringDb.Create;
   CreateGuildDb.LoadFromFile (aFileName);
   for i := 0 to CreateGuildDb.count -1 do
      CreateGuildDb.DeleteName ( CreateGuildDb.GetIndexName(0));

//   CreateGuildDb.SetDbFields ('Name,X,Y,Sysop,SubSysop0,SubSysop1,SubSysop2,Durability,GuildMagic,MakeDate,MagicExp');
//   林籍捞 酒聪搁 俊矾巢... (SetDbFields 捞饶俊... free 俊辑 俊矾巢.

   for j := 0 to List.Count -1 do begin
      pd := List[j];
      CreateGuildDb.AddName (pd^.mName);
      CreateGuildDb.SetFieldValueInteger (pd^.mName, 'X', pd^.x);
      CreateGuildDb.SetFieldValueInteger (pd^.mName, 'Y', pd^.y);
      CreateGuildDb.SetFieldValueString (pd^.mName, 'Sysop', pd^.Sysop);
      CreateGuildDb.SetFieldValueString (pd^.mName, 'SubSysop0', pd^.SubSysop0);
      CreateGuildDb.SetFieldValueString (pd^.mName, 'SubSysop1', pd^.SubSysop1);
      CreateGuildDb.SetFieldValueString (pd^.mName, 'SubSysop2', pd^.SubSysop2);
      CreateGuildDb.SetFieldValueInteger (pd^.mName, 'Durability', pd^.Durability);
      CreateGuildDb.SetFieldValueString (pd^.mName, 'GuildMagic', pd^.GuildMagic);
      CreateGuildDb.SetFieldValueString (pd^.mName, 'MakeDate', pd^.MakeDate);
      CreateGuildDb.SetFieldValueInteger (pd^.mName, 'MagicExp', pd^.MagicExp);

      for i := 0 to 5-1 do begin
         str := pd^.GuildNpcDataArr[i].rName + ':';
         str := str + IntToStr (pd^.GuildNpcDataArr[i].rx) + ':';
         str := str + IntToStr (pd^.GuildNpcDataArr[i].ry) + ':';
         if pd^.GuildNpcDataArr[i].rName = '' then str := '';
         CreateGuildDb.SetFieldValueString (pd^.mName, 'Npc'+IntToStr(i), str);
      end;
   end;
   CreateGuildDb.SaveToFile (aFileName);
   CreateGuildDb.Free;
end;
}

function  GetServerIdPointer (aServerId, atype: integer): Pointer;
begin
   Result := nil;
end;

procedure StrToEffectData (var effectdata: TEffectData; astr: string);
var
   str, rdstr : string;
begin
   str := astr;
   str := GetValidStr3 (str, rdstr, ':');
   effectdata.rWavNumber := _StrToInt (rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   effectdata.rPercent := _StrToInt (rdstr);
end;

///////////////////////////////////
//         TRandomClass
///////////////////////////////////

constructor TRandomClass.Create;
begin
   DataList := nil;
   DataList := TList.Create;
end;

destructor TRandomClass.Destroy;
begin
   Clear;
   if DataList <> nil then DataList.Free;
end;

procedure TRandomClass.Clear;
var
   i : Integer;
   pd : PTRandomData;
begin
   for i := 0 to DataList.Count - 1 do begin
      pd := DataList.Items[i];
      if pd <> nil then Dispose (pd);
   end;
   DataList.Clear;
end;

procedure TRandomClass.AddData (aItemName, aObjName : String; aCount : Integer);
var
   pd : PTRandomData;
begin
   if (aItemName = '') or (aObjName = '') then exit;

   New (pd);
   pd^.rItemName := aItemName;
   pd^.rObjName := aObjName;
   if aCount < 1 then pd^.rCount := 1
   else pd^.rCount := aCount;
   pd^.rIndex := Random (pd^.rCount);
   pd^.rCurIndex := 0;

   DataList.Add (pd);
end;

function  TRandomClass.GetChance (aItemName, aObjName : String) : Boolean;
var
   i : Integer;
   pd : PTRandomData;
begin
   Result := true;
   for i := 0 to DataList.Count - 1 do begin
      pd := DataList.Items [i];
      if pd <> nil then begin
         if pd^.rItemName = aItemName then begin
            if pd^.rObjName = aObjName then begin
               Result := false;
               if pd^.rCurIndex = pd^.rIndex then Result := true;
               
               Inc (pd^.rCurIndex);
               if pd^.rCurIndex >= pd^.rCount then begin
                  pd^.rCurIndex := 0;
                  pd^.rIndex := Random (pd^.rCount);
               end;
               exit;
            end;
         end;
      end;
   end;
end;

///////////////////////////////////
//         TSysopClass
///////////////////////////////////

constructor TSysopClass.Create;
begin
   SysopDb := TUserStringDb.Create;
   ReLoadFromFile;
end;

destructor TSysopClass.Destroy;
begin
   SysopDb.Free;
   inherited destroy;
end;

procedure  TSysopClass.ReLoadFromFile;
begin
   if FileExists ('sysop.sdb') then
      SysopDb.LoadFromFile ('sysop.sdb');
end;

function   TSysopClass.GetSysopScope (aName: string): integer;
begin
   if SysopDb.Count > 0 then Result := SysopDb.GetFieldValueInteger (aName, 'SysopScope')
   else Result := 0;
end;

///////////////////////////////////
//         TMagicClass
///////////////////////////////////


constructor TMagicClass.Create;
begin
   DataList := TList.Create;
   AnsIndexClass := TAnsIndexClass.Create ('MagicClass', 20, TRUE);
   MagicDb := TUserStringDb.Create;
   MagicForGuildDb := TUserStringDb.Create;
   ReLoadFromFile;
end;

destructor TMagicClass.Destroy;
begin
   Clear;
   MagicForGuildDb.Free;
   MagicDb.Free;
   DataList.Free;
   AnsIndexClass.Free;
   inherited destroy;
end;

procedure TMagicClass.Clear;
var i : integer;
begin
   FillChar (SkillAddDamageArr, sizeof(SkillAddDamageArr) , 0);
   FillChar (SkillAddArmorArr, sizeof(SkillAddArmorArr), 0);
   for i := 0 to DataList.Count -1 do dispose (DataList[i]);
   DataList.Clear;
   AnsIndexClass.Clear;
end;

procedure TMagicClass.Calculate_cLifeData (pMagicData: PTMagicData);
begin
   if pMagicData = nil then exit;
   if pMagicData^.rName[0] = 0 then exit;

   with pMagicData^ do begin
      rcLifeData.DamageBody   := rLifeData.damageBody  + rLifeData.damageBody * rcSkillLevel div INI_SKILL_DIV_DAMAGE;
      rcLifeData.DamageHead   := rLifeData.DamageHead  + rLifeData.damageHead * rcSkillLevel div INI_SKILL_DIV_DAMAGE;
      rcLifeData.DamageArm    := rLifeData.DamageArm   + rLifeData.damageArm  * rcSkillLevel div INI_SKILL_DIV_DAMAGE;
      rcLifeData.DamageLeg    := rLifeData.DamageLeg   + rLifeData.damageLeg  * rcSkillLevel div INI_SKILL_DIV_DAMAGE;
      rcLifeData.AttackSpeed  := rLifeData.AttackSpeed - rLifeData.AttackSpeed * rcSkillLevel div INI_SKILL_DIV_ATTACKSPEED;
      rcLifeData.avoid        := rLifeData.avoid   ;//    + rLifeData.avoid;
      rcLifeData.recovery     := rLifeData.recovery;//    + rLifeData.recovery;
      rcLifeData.armorBody    := rLifeData.armorBody   + rLifeData.armorBody * rcSkillLevel div INI_SKILL_DIV_ARMOR;
      rcLifeData.armorHead    := rLifeData.armorHead   + rLifeData.armorHead * rcSkillLevel div INI_SKILL_DIV_ARMOR;
      rcLifeData.armorArm     := rLifeData.armorArm    + rLifeData.armorArm  * rcSkillLevel div INI_SKILL_DIV_ARMOR;
      rcLifeData.armorLeg     := rLifeData.armorLeg    + rLifeData.armorLeg  * rcSkillLevel div INI_SKILL_DIV_ARMOR;
   end;

   with pMagicData^ do begin
      rcLifeData.Damagebody := rcLifeData.Damagebody + rcLifeData.DamageBody * MagicClass.GetSkillDamageBody (rcSkillLevel) div 100;
      if rMagicType = MAGICTYPE_PROTECTING then
         rcLifeData.Armorbody := rcLifeData.Armorbody + rcLifeData.ArmorBody * MagicClass.GetSkillArmorBody (rcSkillLevel) div 100;
   end;
end;

procedure TMagicClass.ReLoadFromFile;
var
   i, idx, sn, en : integer;
   iname, mname : string;
   pmd : PTMagicData;
   TempDb : TUserStringDb;
begin
   Clear;
   TempDb := TUserStringDb.Create;
   TempDb.LoadFromFile ('adddamage.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
         SkillAddDamageArr[i].rdamagebody := TempDb.GetFieldValueInteger (iname,'DamageBody');
         SkillAddDamageArr[i].rdamagehead := TempDb.GetFieldValueInteger (iname,'DamageHead');
         SkillAddDamageArr[i].rdamagearm := TempDb.GetFieldValueInteger (iname,'DamageArm');
         SkillAddDamageArr[i].rdamageleg := TempDb.GetFieldValueInteger (iname,'DamageLeg');

⌨️ 快捷键说明

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