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

📄 uusersub.pas

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

interface

uses
  Windows, SysUtils, Classes, Usersdb, Deftype, AnsUnit,
  AnsImg2, AUtil32, uSendcls, uAnstick, uLevelexp, svClass, AnsStringCls,
  uDBRecordDef, BasicObj;

const
   DRUGARR_SIZE = 3;

type
   TAttribClass = class
   private
     FBasicObject : TBasicObject;
      
     boAddExp : Boolean;   
     boMan : Boolean;

     boSendValues : Boolean;
     boSendBase : Boolean;

     boRevivalFlag : Boolean;
     boEnergyFlag : Boolean;
     boInPowerFlag : Boolean;
     boOutPowerFlag : Boolean;
     boMagicFlag : Boolean;

     FFeatureState : TFeatureState;

     StartTick : integer;
     CheckIncreaseTick : integer;         // 9 檬俊 茄锅
     CheckDrugTick : integer;         // 1 檬俊 茄锅

     FSendClass : TSendClass;
     function  GetCurInPower: integer;
     procedure SetCurInPower (value: integer);
     function  GetCurOutPower: integer;
     procedure SetCurOutPower (value: integer);
     function  GetCurMagic: integer;
     procedure SetCurMagic (value: integer);
     function  GetCurLife: integer;
     procedure SetCurLife (value: integer);
     function  GetMaxLife: integer;

     function  GetCurHeadLife: integer;
     procedure SetCurHeadLife (value: integer);
     function  GetCurArmLife: integer;
     procedure SetCurArmLife (value: integer);
     function  GetCurLegLife: integer;
     procedure SetCurLegLife (value: integer);

     function  CheckRevival: Boolean;
     function  CheckEnegy: Boolean;
     function  CheckInPower: Boolean;
     function  CheckOutPower: Boolean;
     function  CheckMagic: Boolean;

     procedure SetLifeData;
   public
     ItemDrugArr : array [0..DRUGARR_SIZE-1] of TItemDrugData;
     CurAttribData : TCurAttribData;
     AttribData : TAttribData;
     AttribLifeData : TLifeData;

     ReQuestPlaySoundNumber : integer;

     constructor Create (aBasicObject : TBasicObject; aSendClass: TSendClass);
     destructor Destroy; override;
     procedure Update (CurTick : integer);
     function  AddItemDrug (aDrugName: string): Boolean;

     procedure LoadFromSdb (aCharData : PTDBRecord);
     procedure SaveToSdb (aCharData : PTDBRecord);
     procedure Calculate;

     procedure AddAdaptive (aexp: integer);

     property  CurMagic : Integer read GetCurMagic write SetCurMagic;
     property  CurOutPower : Integer read GetCurOutPower write SetCurOutPower;
     property  CurInPower : Integer read GetCurInPower write SetCurInPower;
     property  CurLife : Integer read GetCurLife write SetCurLife;
     property  MaxLife : Integer read GetMaxLife;

     property  CurHeadLife : Integer read GetCurHeadLife write SetCurHeadLife;
     property  CurArmLife : Integer read GetCurArmLife write SetCurArmLife;
     property  CurLegLife : Integer read GetCurLegLife write SetCurLegLife;

     property  FeatureState : TFeatureState write FFeatureState;

     property  SetAddExpFlag : Boolean write boAddExp;
   public
     function GetAge : Integer;
   end;

   THaveMagicClass = class
   private
     FBasicObject : TBasicObject;
      
     boAddExp : Boolean;

     HaveItemType : integer;
     HaveMagicArr : array [0..HAVEMAGICSIZE-1] of TMagicData;

     WalkingCount : integer;

     FpCurAttackMagic     : PTMagicData;
     FpCurBreathngMagic   : PTMagicData;
     FpCurRunningMagic    : PTMagicData;
     FpCurProtectingMagic : PTMagicData;
     FpCurEctMagic : PTMagicData;

     FSendClass : TSendClass;
     FAttribClass : TAttribClass;
     function  boKeepingMagic (pMagicData: PTMagicData): Boolean;
     procedure DecBreathngAttrib (pMagicData: PTMagicData);

     procedure Dec5SecAttrib (pMagicData: PTMagicData);
     procedure DecEventAttrib (pMagicData: PTMagicData);
     procedure SetLifeData;
     procedure FindAndSendMagic (pMagicData: PTMagicData);
   public
     DefaultMagic : array [0..10-1] of TMagicData;
     HaveMagicLifeData : TLifeData;
     ReQuestPlaySoundNumber : integer;
     constructor Create (aBasicObject : TBasicObject; aSendClass: TSendClass; aAttribClass: TAttribClass);
     destructor Destroy; override;
     function   Update (CurTick : integer): integer;

     procedure LoadFromSdb (aCharData : PTDBRecord);
     procedure SaveToSdb (aCharData : PTDBRecord);
     function  ViewMagic (akey: integer; aMagicData: PTMagicData): Boolean;
     function  ViewBasicMagic (akey: integer; aMagicData: PTMagicData): Boolean;
     function  AddMagic  (aMagicData: PTMagicData): Boolean;
     function  DeleteMagic (akey: integer): Boolean;
     function  AddAttackExp ( atype, aexp: integer): integer;
     function  AddProtectExp ( atype, aexp: integer): integer;
     function  AddEctExp ( atype, aexp: integer): integer;

     procedure SetBreathngMagic (aMagic: PTMagicData);
     procedure SetRunningMagic (aMagic: PTMagicData);
     procedure SetProtectingMagic (aMagic: PTMagicData);
     procedure SetEctMagic (aMagic: PTMagicData);
     function  AddWalking: Boolean;

     // function  SetHaveMagicPercent (akey: integer; aper: integer): Boolean;
     // function  SetDefaultMagicPercent (akey: integer; aper: integer): Boolean;
     function  PreSelectBasicMagic (akey, aper: integer; var RetStr: string): Boolean;
     function  SelectBasicMagic (akey, aper: integer; var RetStr: string): integer;
     // function  FindBasicMagic (akey : Integer) : Integer;
     function  SetHaveItemMagicType (atype: integer): integer;
     function  PreSelectHaveMagic (akey, aper: integer; var RetStr: string): Boolean;
     function  SelectHaveMagic (akey, aper: integer; var RetStr: string): integer;
     function  ChangeMagic (asour, adest: integer): Boolean;
     function  ChangeBasicMagic (asour, adest: integer): Boolean;

     function  DecEventMagic (apmagic: PTMagicData): Boolean;

     function  GetUsedMagicList: string;
     function  GetMagicIndex(aMagicName: string): integer;

     function  FindHaveMagicByName (aMagicName : String) : Integer;

     property  pCurAttackMagic: PTMagicData read FpCurAttackMagic;
     property  pCurBreathngMagic: PTMagicData read FpCurBreathngMagic;
     property  pCurRunningMagic: PTMagicData read FpCurRunningMagic;
     property  pCurProtectingMagic: PTMagicData read FpCurProtectingMagic;

     property  pCurEctMagic: PTMagicData read FpCurEctMagic;
     property  SetAddExpFlag : Boolean write boAddExp;
   end;

   TWearItemClass = class
   private
     boLocked : Boolean;
     FBasicObject : TBasicObject;

     WearFeature : TFeature;
     WearItemArr : array [ARR_BODY..ARR_WEAPON] of TItemData;
     FSendClass : TSendClass;
     FAttribClass : TAttribClass;
     procedure SetLifeData;
   public
     WearItemLifeData : TLifeData;
     ReQuestPlaySoundNumber : integer;
     constructor Create (aBasicObject : TBasicObject; aSendClass: TSendClass; aAttribClass: TAttribClass);
     destructor Destroy; override;
     procedure Update (CurTick : integer);

     function  GetFeature : TFeature;
     procedure LoadFromSdb (aCharData : PTDBRecord);
     procedure SaveToSdb (aCharData : PTDBRecord);

     function  ViewItem (akey: integer; aItemData: PTItemData): Boolean;
     function  AddItem  (aItemData: PTItemData): Boolean;
     procedure DeleteKeyItem (akey: integer);
     function  ChangeItem  (var aItemData: TItemData; var aOldItemData : TItemData): Boolean;
     function  GetWeaponType : Integer;

     procedure SetFeatureState (aFeatureState : TFeatureState);
     procedure SetHiddenState (aHiddenState : THiddenState);
     procedure SetActionState (aActionState : TActionState);
     function  GetHiddenState : THiddenState;
     function  GetActionState : TActionState;

     property Locked : Boolean read boLocked write boLocked;
   end;

   THaveItemClass = class
   private
     boLocked : Boolean;

     FUserName : string;
     FSendClass : TSendClass;
     FAttribClass : TAttribClass;
   public
     HaveItemArr : array [0..HAVEITEMSIZE-1] of TItemData;
     ReQuestPlaySoundNumber : integer;
     constructor Create (aSendClass: TSendClass; aAttribClass: TAttribClass);
     destructor Destroy; override;
     procedure Update (CurTick : integer);

     procedure LoadFromSdb (aCharData : PTDBRecord);
     procedure SaveToSdb (aCharData : PTDBRecord);

     procedure CopyFromHaveItemClass (aHaveItemClass : THaveItemClass);
     procedure CopyFromHaveItem (aItemArr : PTItemData);

     function  FreeSpace: integer;

     function  ViewItem (akey: integer; aItemData: PTItemData): Boolean;
     function  FindItem (aItemData : PTItemData): Boolean;
     function  AddItem  (aItemData: PTItemData): Boolean;
     function  AddKeyItem  (akey, aCount : Integer; var aItemData: TItemData): Boolean;
     function  FindKindItem (akind: integer): integer;
     function  FindItemByMagicKind (aKind: integer): integer;
     function  DeletekeyItem (akey, aCount: integer; aItemData : PTItemData): Boolean;
     function  DeleteItem (aItemData: PTItemData): Boolean;
     function  ChangeItem (asour, adest: integer): Boolean;

     procedure DeleteAllItem;

     procedure Refresh;

     property Locked : Boolean read boLocked write boLocked;     
   end;


implementation

uses
   FSockets, svMain, uUser;

function  GetPermitExp (aLevel, addvalue: integer): integer;
var n : integer;
begin
   n := GetLevelMaxExp (aLevel);
   if n > addvalue then n := addvalue;
   Result := n;
end;

function  AddPermitExp (var aLevel, aExp: integer; addvalue: integer): integer;
var n : integer;
begin
   n := GetLevelMaxExp (aLevel) * 3;
   if n > addvalue then n := addvalue;
   inc (aExp, n);
   aLevel := GetLevel (aExp);
   Result := n;

{  // 沥惑
   n := GetLevelMaxExp (aLevel);
   if n > addvalue then n := addvalue;
   inc (aExp, n);
   aLevel := GetLevel (aExp);
   Result := n;
}
{  // 傈何倾侩
   n := GetLevelMaxExp (aLevel);
   if n <> 0 then n := addvalue;
   inc (aExp, n);
   aLevel := GetLevel (aExp);
   Result := n;
}
end;

function Get10000To100 (avalue: integer): string;
var
   n : integer;
   str : string;
begin
   str := InttoStr (avalue div 100) + '.';
   n := avalue mod 100;
   if n >= 10 then str := str + IntToStr (n)
   else str := str + '0'+InttoStr(n);

   Result := str;
end;

function Get10000To120 (avalue: integer): string;
var
   n : integer;
   str : string;
begin
   avalue := avalue * 12 div 10;
   str := InttoStr (avalue div 100) + '.';
   n := avalue mod 100;
   if n >= 10 then str := str + IntToStr (n)
   else str := str + '0'+InttoStr(n);

   Result := str;
end;


///////////////////////////////////
//         TAttribClass
///////////////////////////////////

constructor TAttribClass.Create (aBasicObject : TBasicObject; aSendClass: TSendClass);
begin
   FBasicObject := aBasicObject;
   boAddExp := true;
   ReQuestPlaySoundNumber := 0;
   FSendClass := aSendClass;
end;

destructor TAttribClass.Destroy;
begin
   inherited Destroy;
end;

procedure TAttribClass.SetLifeData;
begin
   FillChar (AttribLifeData, sizeof(TLifeData), 0);
   
   AttribLifeData.damageBody   := 41;
   AttribLifeData.damageHead   := 41;
   AttribLifeData.damageArm    := 41;
   AttribLifeData.damageLeg    := 41;
   AttribLifeData.AttackSpeed  := 70;
   AttribLifeData.avoid        := 25;
   AttribLifeData.recovery     := 50;
   AttribLifeData.armorBody    := 0;
   AttribLifeData.armorHead    := 0;
   AttribLifeData.armorArm     := 0;
   AttribLifeData.armorLeg     := 0;

   TUserObject (FBasicObject).SetLifeData;
end;

function TAttribClass.GetAge : Integer;
begin

⌨️ 快捷键说明

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