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

📄 svclass.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 5 页
字号:
   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.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);
   {
   str := GetValidStr3 (str, rdstr, ':');
   iper := _StrToInt (rdstr);
   }

   if GetItemData (iName, ItemData) = FALSE then exit;

   // 扁粮狼 iper 绰 玫盒啦捞菌绰单 捞巴阑 MonsterRandomCount 抛捞喉阑 捞侩秦辑
   // 犬伏阑 沥窃. rper绰 0俊辑 30 鳖瘤狼 箭磊捞绢具 凳.
   // 0 = 1/1 = 100%,          30= 1/1000000000 = ??
   {
   if (iper > 30) or (iper < 0)  then begin
      FillChar(ItemData, sizeof(TItemData),0);
      exit;
   end;
   rcount := MonsterRandomCount[iper];
   if Random (rcount) <> 0 then begin
      FillChar(ItemData, sizeof(TItemData),0);
      exit;
   end;
   }

//   if (iper <> 0) and (Random (1000) > iper) then begin FillChar(ItemData, sizeof(TItemData),0); exit; end;
   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 ('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 : integer;
   iName : String;
   StrDB : TUserStringDb;
   pd : PTDynamicObjectData;
begin
   Clear;

   StrDB := nil;
   pd := nil;
   try
      StrDB := TUserStringDb.Create;
      StrDB.LoadFromFile (aName);
      for i := 0 to StrDb.Count - 1 do begin
         iName := StrDb.GetIndexName (i);
         New (pd);

         pd^.rName := StrDB.GetFieldValueString (iName, 'NAME');
         pd^.rKind := StrDB.GetFieldValueInteger (iName, 'KIND');
         pd^.rShape := StrDB.GetFieldValueInteger (iName, 'SHAPE');
         StrToEffectData (pd^.rSoundEvent, StrDB.GetFieldValueString (iName, 'SOUNDEVENT'));
         StrToEffectData (pd^.rSoundSpecial, StrDB.GetFieldValueString (iName, 'SOUNDSPECIAL'));
         pd^.rComment := StrDB.GetFieldValueString (iName, 'COMMENT');

         DataList.Add (pd);
         AnsIndexClass.Insert (Integer(pd), iName);
      end;
      StrDb.Free;
   except
      if StrDb <> nil then StrDb.Free;
      if pd <> nil then Dispose (pd);
   end;
end;
}
const
   ITEMDRUG_DIV_VALUE            = 10;

   ITEMDRUG_MUL_EVENTENERGY      = 10;
   ITEMDRUG_MUL_EVENTINPOWER     = 10;
   ITEMDRUG_MUL_EVENTOUTPOWER    = 10;
   ITEMDRUG_MUL_EVENTMAGIC       = 10;
   ITEMDRUG_MUL_EVENTLIFE        = 15;
   ITEMDRUG_MUL_EVENTHEADLIFE    = 15;
   ITEMDRUG_MUL_EVENTARMLIFE     = 15;
   ITEMDRUG_MUL_EVENTLEGLIFE     = 15;
   
///////////////////////////////////
//         TItemDrugClass
///////////////////////////////////
constructor TItemDrugClass.Create;
begin
   ItemDrugDb := TUserStringDb.Create;
   DataList := TList.Create;
   AnsIndexClass := TAnsIndexClass.Create ('ItemDrugClass', 20, TRUE);
   ReLoadFromFile;
end;

destructor  TItemDrugClass.Destroy;
begin
   Clear;
   AnsIndexClass.Free;
   DataList.Free;
   ItemDrugDb.Free;
   inherited Destroy;
end;

procedure TItemDrugClass.Clear;
var i : integer;
begin
   for i := 0 to DataList.Count -1 do dispose (DataList[i]);
   DataList.Clear;
   AnsIndexClass.Clear;
end;

procedure TItemDrugClass.ReLoadFromFile;
var
   i : integer;
   iname : string;
   pid : PTItemDrugData;
begin
   Clear;
   ItemDrugDb.LoadFromFile ('itemDrug.sdb');
   for i := 0 to ItemDrugDb.Count -1 do begin
      iname := ItemDrugDb.GetIndexName (i);
      new (pid);
      LoadItemDrugData (iname, pid^);
      DataList.Add (pid);
      AnsIndexClass.Insert (Integer(pid), iname);
   end;
end;

function  TItemDrugClass.LoadItemDrugData (aItemDrugName: string; var ItemDrugData: TItemDrugData): Boolean;
begin
   Result := FALSE;
   FillChar (ItemDrugData, sizeof(ItemDrugData), 0);
   if ItemDrugDb.GetDbString (aItemDrugName) = '' then exit;

   StrPCopy (@ItemDrugData.rname, aItemDrugName);
   ItemDrugData.rEventEnergy   := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eEnergy')   * ITEMDRUG_MUL_EVENTENERGY   div ITEMDRUG_DIV_VALUE;
   ItemDrugData.rEventInPower  := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eInPower')  * ITEMDRUG_MUL_EVENTINPOWER  div ITEMDRUG_DIV_VALUE;
   ItemDrugData.rEventOutPower := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eOutPower') * ITEMDRUG_MUL_EVENTOUTPOWER div ITEMDRUG_DIV_VALUE;
   ItemDrugData.rEventMagic    := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eMagic')    * ITEMDRUG_MUL_EVENTMAGIC    div ITEMDRUG_DIV_VALUE;
   ItemDrugData.rEventLife     := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eLife')     * ITEMDRUG_MUL_EVENTLIFE     div ITEMDRUG_DIV_VALUE;
   ItemDrugData.rEventHeadLife := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eHeadLife') * ITEMDRUG_MUL_EVENTHEADLIFE div ITEMDRUG_DIV_VALUE;
   ItemDrugData.rEventArmLife  := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eArmLife')  * ITEMDRUG_MUL_EVENTARMLIFE  div ITEMDRUG_DIV_VALUE;
   ItemDrugData.rEventLegLife  := ItemDrugDb.GetFieldValueinteger (aItemDrugName, 'eLegLife')  * ITEMDRUG_MUL_EVENTLEGLIFE  div ITEMDRUG_DIV_VALUE;
   Result := TRUE;
end;

function    TItemDrugClass.GetItemDrugData (aItemDrugName: string; var ItemDrugData: TItemDrugData): Boolean;
var
   n : integer;
begin
   Result := FALSE;

   n := AnsIndexClass.Select (aItemDrugName);
   if (n = 0) or (n = -1) then begin
      FillChar (ItemDrugData, sizeof(ItemDrugData), 0);
      exit;
   end;
   ItemDrugData := PTItemDrugData (n)^;
   ItemDrugData.rUsedCount := 0;
   Result := TRUE;
end;


///////////////////////////////////
//         TMonsterClass
///////////////////////////////////
constructor TMonsterClass.Create;
begin
   MonsterDb := TUserStringDb.Create;
   DataList := TList.Create;
   AnsIndexClass := TAnsIndexClass.Create ('Monster', 20, TRUE);
   ReLoadFromFile;
end;

destructor TMonsterClass.Destroy;
begin
   Clear;
   AnsIndexClass.Free;
   DataList.Free;
   MonsterDb.Free;
   inherited Destroy;
end;

procedure TMonsterClass.Clear;
var i : integer;
begin
   for i := 0 to DataList.Count -1 do dispose (DataList[i]);
   DataList.Clear;
   AnsIndexClass.Clear;
end;

function  TMonsterClass.LoadMonsterData (aMonsterName: string; var MonsterData: TMonsterData): Boolean;
var
   i, iCount, iRandomCount : Integer;
   str, mName, mCount, mSkill: String;
begin
   Result := FALSE;
   FillChar (MonsterData, sizeof(MonsterData), 0);
   if MonsterDb.GetDbString (aMonsterName) = '' then exit;

   StrPCopy (@MonsterData.rname, aMonsterName);
   StrToEffectData (MonsterData.rSoundNormal, MonsterDb.GetFieldValueString (aMonsterName, 'SoundNormal'));
   StrToEffectData (MonsterData.rSoundAttack, MonsterDb.GetFieldValueString (aMonsterName, 'SoundAttack'));
   StrToEffectData (MonsterData.rSoundDie, MonsterDb.GetFieldValueString (aMonsterName, 'SoundDie'));
   StrToEffectData (MonsterData.rSoundStructed, MonsterDb.GetFieldValueString (aMonsterName, 'SoundStructed'));

   MonsterData.rAnimate := MonsterDb.GetFieldValueinteger (aMonsterName, 'Animate');
   MonsterData.rWalkSpeed := MonsterDb.GetFieldValueinteger (aMonsterName, 'WalkSpeed');
   MonsterData.rShape := MonsterDb.GetFieldValueinteger (aMonsterName, 'Shape');
   MonsterData.rdamage := MonsterDb.GetFieldValueinteger (aMonsterName, 'Damage');
   MonsterData.rAttackSpeed := MonsterDb.GetFieldValueinteger (aMonsterName, 'AttackSpeed');
   MonsterData.ravoid := MonsterDb.GetFieldValueinteger (aMonsterName, 'Avoid');
   MonsterData.rrecovery := MonsterDb.GetFieldValueinteger (aMonsterName, 'Recovery');
   MonsterData.rspendlife := MonsterDb.GetFieldV

⌨️ 快捷键说明

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