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

📄 uusersub.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 5 页
字号:
   str := StrPas (@aCharData^.WearItemArr[4].Name) + ':' + IntToStr(aCharData^.WearItemArr[4].Color) + ':' + IntToStr(aCharData^.WearItemArr[4].Count);
   ItemClass.GetWearItemData (str, WearItemArr[ARR_DOWNUNDERWEAR]);
   str := StrPas (@aCharData^.WearItemArr[2].Name) + ':' + IntToStr(aCharData^.WearItemArr[2].Color) + ':' + IntToStr(aCharData^.WearItemArr[2].Count);
   ItemClass.GetWearItemData (str, WearItemArr[ARR_UPUNDERWEAR]);
   str := StrPas (@aCharData^.WearItemArr[6].Name) + ':' + IntToStr(aCharData^.WearItemArr[6].Color) + ':' + IntToStr(aCharData^.WearItemArr[6].Count);
   ItemClass.GetWearItemData (str, WearItemArr[ARR_SHOES]);
   str := StrPas (@aCharData^.WearItemArr[3].Name) + ':' + IntToStr(aCharData^.WearItemArr[3].Color) + ':' + IntToStr(aCharData^.WearItemArr[3].Count);
   ItemClass.GetWearItemData (str, WearItemArr[ARR_UPOVERWEAR]);
   str := StrPas (@aCharData^.WearItemArr[5].Name) + ':' + IntToStr(aCharData^.WearItemArr[5].Color) + ':' + IntToStr(aCharData^.WearItemArr[5].Count);
   ItemClass.GetWearItemData (str, WearItemArr[ARR_GLOVES]);
   str := StrPas (@aCharData^.WearItemArr[0].Name) + ':' + IntToStr(aCharData^.WearItemArr[0].Color) + ':' + IntToStr(aCharData^.WearItemArr[0].Count);
   ItemClass.GetWearItemData (str, WearItemArr[ARR_HAIR]);
   str := StrPas (@aCharData^.WearItemArr[1].Name) + ':' + IntToStr(aCharData^.WearItemArr[1].Color) + ':' + IntToStr(aCharData^.WearItemArr[1].Count);
   ItemClass.GetWearItemData (str, WearItemArr[ARR_CAP]);
   str := StrPas (@aCharData^.WearItemArr[7].Name) + ':' + IntToStr(aCharData^.WearItemArr[7].Color) + ':' + IntToStr(aCharData^.WearItemArr[7].Count);
   ItemClass.GetWearItemData (str, WearItemArr[ARR_WEAPON]);

   WearFeature.rrace := RACE_HUMAN;
   WearFeature.rFeaturestate := wfs_normal;
   WearFeature.rNameColor := WinRGB (25, 25, 25);
   WearFeature.rTeamColor := 0;

   for i := ARR_GLOVES to ARR_WEAPON do begin
      if WearItemArr[i].rName[0] <> 0 then begin
         WearFeature.rArr [i*2] := WearItemArr[i].rWearShape;
         WearFeature.rArr [i*2+1] := WearItemArr[i].rColor;

         if WearItemArr [6].rKind = ITEM_KIND_WEARITEM2 then begin
            if (i = 2) or (i = 4) then continue;
         end;
         FSendClass.SendWearItem (i, WearItemArr[i]);
      end;
   end;
   SetLifeData;
end;

procedure TWearItemClass.SaveToSdb (aCharData : PTDBRecord);
var
   str, rdstr : String;
begin
   str := ItemClass.GetWearItemString (WearItemArr[ARR_DOWNUNDERWEAR]);
   str := GetValidStr3 (str, rdstr, ':');
   StrPCopy (@aCharData^.WearItemArr[4].Name, rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[4].Color := _StrToInt (rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[4].Count := _StrToInt (rdstr);

   str := ItemClass.GetWearItemString (WearItemArr[ARR_UPUNDERWEAR]);
   str := GetValidStr3 (str, rdstr, ':');
   StrPCopy (@aCharData^.WearItemArr[2].Name, rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[2].Color := _StrToInt (rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[2].Count := _StrToInt (rdstr);

   str := ItemClass.GetWearItemString (WearItemArr[ARR_SHOES]);
   str := GetValidStr3 (str, rdstr, ':');
   StrPCopy (@aCharData^.WearItemArr[6].Name, rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[6].Color := _StrToInt (rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[6].Count := _StrToInt (rdstr);

   str := ItemClass.GetWearItemString (WearItemArr[ARR_UPOVERWEAR]);
   str := GetValidStr3 (str, rdstr, ':');
   StrPCopy (@aCharData^.WearItemArr[3].Name, rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[3].Color := _StrToInt (rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[3].Count := _StrToInt (rdstr);

   str := ItemClass.GetWearItemString (WearItemArr[ARR_GLOVES]);
   str := GetValidStr3 (str, rdstr, ':');
   StrPCopy (@aCharData^.WearItemArr[5].Name, rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[5].Color := _StrToInt (rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[5].Count := _StrToInt (rdstr);

   str := ItemClass.GetWearItemString (WearItemArr[ARR_HAIR]);
   str := GetValidStr3 (str, rdstr, ':');
   StrPCopy (@aCharData^.WearItemArr[0].Name, rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[0].Color := _StrToInt (rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[0].Count := _StrToInt (rdstr);

   str := ItemClass.GetWearItemString (WearItemArr[ARR_CAP]);
   str := GetValidStr3 (str, rdstr, ':');
   StrPCopy (@aCharData^.WearItemArr[1].Name, rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[1].Color := _StrToInt (rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[1].Count := _StrToInt (rdstr);

   str := ItemClass.GetWearItemString (WearItemArr[ARR_WEAPON]);
   str := GetValidStr3 (str, rdstr, ':');
   StrPCopy (@aCharData^.WearItemArr[7].Name, rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[7].Color := _StrToInt (rdstr);
   str := GetValidStr3 (str, rdstr, ':');
   aCharData^.WearItemArr[7].Count := _StrToInt (rdstr);
end;

function TWearItemClass.GetFeature : TFeature;
var
   i : integer;
begin
   WearFeature.rrace := RACE_HUMAN;
   for i := ARR_GLOVES to ARR_WEAPON do begin
      WearFeature.rArr [i*2] := WearItemArr[i].rWearShape;
      WearFeature.rArr [i*2+1] := WearItemArr[i].rColor;
      if WearItemArr[6].rKind = ITEM_KIND_WEARITEM2 then begin
         if (i = 2) or (i = 4) then begin
            WearFeature.rArr [i*2] := 0;
            WearFeature.rArr [i*2+1] := 0;
         end;
      end;
   end;

   if WearFeature.rArr [ARR_GLOVES*2] <> 0 then begin
      WearFeature.rArr [5*2] := WearItemArr[ARR_GLOVES].rWearShape;
      WearFeature.rArr [5*2+1] := WearItemArr[ARR_GLOVES].rColor;
   end;

   case WearItemArr[ARR_WEAPON].rHitMotion of
      0 : WearFeature.rhitmotion := AM_HIT;
      1 : WearFeature.rhitmotion := AM_HIT1;
      2 : WearFeature.rhitmotion := AM_HIT2;
      3 : WearFeature.rhitmotion := AM_HIT3;
      4 : WearFeature.rhitmotion := AM_HIT4;
      5 : WearFeature.rhitmotion := AM_HIT5;
      6 : WearFeature.rhitmotion := AM_HIT6;
   end;

   Result := WearFeature;
end;

function  TWearItemClass.GetWeaponType : Integer;
begin
   if WearItemArr[ARR_WEAPON].rName[0] = 0 then begin
      Result := MAGICTYPE_WRESTLING;
      exit;
   end;

   Result := WearItemArr[ARR_WEAPON].rHitType;
end;

function  TWearItemClass.ViewItem (akey: integer; aItemData: PTItemData): Boolean;
begin
   Result := FALSE;
   if boLocked = true then exit;
   if (akey < ARR_BODY) or (akey > ARR_WEAPON) then begin
      FillChar (aItemData^, sizeof(TItemData), 0);
      exit;
   end;
   if WearItemArr[akey].rName[0] = 0 then begin
      FillChar (aItemData^, sizeof(TItemData), 0);
      exit;
   end;
   Move (WearItemArr[akey], aItemData^, SizeOf (TItemData));
   Result := TRUE;
end;

function  TWearItemClass.AddItem  (aItemData: PTItemData): Boolean;
var
   ItemData : TItemData;
begin
   Result := FALSE;
   if boLocked = true then exit;
   if WearItemArr[aItemData^.rWearArr].rName[0] <> 0 then exit;
   if aItemData^.rName[0] = 0 then exit;
   if (aItemData^.rKind <> ITEM_KIND_WEARITEM) and (aItemData^.rKind <> ITEM_KIND_WEARITEM2) then exit;

   case aItemData^.rSex of
      0:;
      1: if not WearFeature.rboMan then exit;
      2: if WearFeature.rboMan then exit;
   end;

   Move (aItemData^, WearItemArr[aItemData^.rWearArr], SizeOf (TItemData));
   WearItemArr[aItemData^.rWearArr].rCount := 1;

   if (aItemData^.rWearArr = 6) and (aItemData^.rKind = ITEM_KIND_WEARITEM2) then begin
      FillChar (ItemData, SizeOf (TItemData), 0);
      FSendClass.SendWearItem (2, ItemData);
      FSendClass.SendWearItem (4, ItemData);
      FSendClass.SendWearItem (aItemData^.rWearArr, aItemData^);
   end else if (aItemData^.rWearArr = 2) or (aItemData^.rWearArr = 4) then begin
      if WearItemArr [6].rKind <> ITEM_KIND_WEARITEM2 then begin
         FSendClass.SendWearItem (aItemData^.rWearArr, aItemData^);
      end;
   end else begin
      FSendClass.SendWearItem (aItemData^.rWearArr, aItemData^);
   end;
   ReQuestPlaySoundNumber := aItemData^.rSoundEvent.rWavNumber;

   SetLifeData;
   Result := TRUE;
end;

function  TWearItemClass.ChangeItem  (var aItemData: TItemData; var aOldItemData : TItemData): Boolean;
var
   ItemData : TItemData;
begin
   Result := FALSE;

   if boLocked = true then exit;
   if aItemData.rName[0] = 0 then exit;
   if (aItemData.rKind <> ITEM_KIND_WEARITEM) and (aItemData.rKind <> ITEM_KIND_WEARITEM2) then exit;

   case aItemData.rSex of
      0:;
      1: if not WearFeature.rboMan then exit;
      2: if WearFeature.rboMan then exit;
   end;

   if WearItemArr[aItemData.rWearArr].rName[0] = 0 then begin
      FillChar (aOldItemData, SizeOf (TItemData), 0);
   end else begin
      Move (WearItemArr[aItemData.rWearArr], aOldItemData, SizeOf (TItemData));
      FillChar (WearItemArr[aItemDAta.rWearArr], SizeOf (TItemData), 0);
      aOldItemData.rCount := 1;
   end;

   Move (aItemData, WearItemArr[aItemData.rWearArr], SizeOf (TItemData));
   WearItemArr[aItemData.rWearArr].rCount := 1;

   if (aItemData.rWearArr = 6) and (aItemData.rKind = ITEM_KIND_WEARITEM2) then begin
      FillChar (ItemData, SizeOf (TItemData), 0);
      FSendClass.SendWearItem (2, ItemData);
      FSendClass.SendWearItem (4, ItemData);
      FSendClass.SendWearItem (aItemData.rWearArr, aItemData);
   end else if (aItemData.rWearArr = 2) or (aItemData.rWearArr = 4) then begin
      if WearItemArr [6].rKind <> ITEM_KIND_WEARITEM2 then begin
         FSendClass.SendWearItem (aItemData.rWearArr, aItemData);
      end;
   end else begin
      FSendClass.SendWearItem (aItemData.rWearArr, aItemData);
   end;
   ReQuestPlaySoundNumber := aItemData.rSoundEvent.rWavNumber;

   SetLifeData;

   Result := TRUE;
end;

procedure TWearItemClass.DeleteKeyItem (akey: integer);
begin
   if boLocked = true then exit;
   if (akey < ARR_BODY) or (akey > ARR_WEAPON) then exit;

   if (aKey = 6) and (WearItemArr[aKey].rKind = ITEM_KIND_WEARITEM2) then begin
      FSendClass.SendWearItem (2, WearItemArr[2]);
      FSendClass.SendWearItem (4, WearItemArr[4]);
   end;
   FillChar (WearItemArr[akey], sizeof(TItemData), 0);
   FSendClass.SendWearItem (akey, WearItemArr[akey]);
   SetLifeData;
end;

procedure TWearItemClass.SetFeatureState (aFeatureState: TFeatureState);
begin
   WearFeature.rfeaturestate := aFeatureState;
end;

procedure TWearItemClass.SetHiddenState (aHiddenState : THiddenState);
begin
   FBasicObject.BasicData.Feature.rHideState := aHiddenState;
   WearFeature.rHideState := aHiddenState;
end;

procedure TWearItemClass.SetActionState (aActionState : TActionState);
begin
   FBasicObject.BasicData.Feature.rActionState := aActionState;
   WearFeature.rActionState := aActionState;
end;

function TWearItemClass.GetHiddenState : THiddenState;
begin
   Result := WearFeature.rHideState;
end;

function TWearItemClass.GetActionState : TActionState;
begin
   Result := WearFeature.rActionState;
end;

///////////////////////////////////
//         THaveMagicClass
///////////////////////////////////

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

destructor THaveMagicClass.Destroy;
begin
   inherited destroy;
end;

procedure THaveMagicClass.SetLifeData;
   procedure AddLifeData (p: PTMagicData);
   begin
      if p = nil then exit;
      HaveMagicLifeData.DamageBody      := HaveMagicLifeData.DamageBody      + p^.rLifeData.damageBody + p^.rLifeData.damageBody * p^.rcSkillLevel div INI_SKILL_DIV_DAMAGE;
      HaveMagicLifeData.DamageHead      := HaveMagicLifeData.DamageHead      + p^.rLifeData.damageHead + p^.rLifeData.damageHead * p^.rcSkillLevel div INI_SKILL_DIV_DAMAGE;
      HaveMagicLifeData.DamageArm       := HaveMagicLifeData.DamageArm       + p^.rLifeData.damageArm  + p^.rLifeData.damageArm  * p^.rcSkillLevel div INI_SKILL_DIV_DAMAGE;
      HaveMagicLifeData.DamageLeg       := HaveMagicLifeData.DamageLeg       + p^.rLifeData.damageLeg  + p^.rLifeData.damageLeg  * p^.rcSkillLevel div INI_SKILL_DIV_DAMAGE;
      HaveMagicLifeData.AttackSpeed     := HaveMagicLifeData.AttackSpeed     + p^.rLifeData.AttackSpeed - p^.rLifeData.AttackSpeed * p^.rcSkillLevel div INI_SKILL_DIV_ATTACKSPEED;
      HaveMagicLifeData.avoid           := HaveMagicLifeData.avoid           + p^.rLifeData.avoid;
      HaveMagicLifeData.recovery        := HaveMagicLifeData.recovery        + p^.rLifeData.recovery;
      HaveMagicLifeData.armorBody       := HaveMagicLifeData.armorBody       + p^.rLifeData.armorBody + p^.rLifeData.armorBody * p^.rcSkillLevel div INI_SKILL_DIV_ARMOR;
      HaveMagicLifeData.armorHead       := HaveMagicLifeData.armorHead       + p^.rLifeData.armorHead + p^.rLifeData.armorHead * p^.rcSkillLevel div INI_SKILL_DIV_ARMOR;
      HaveMagicLifeData.armorArm        := HaveMagicLifeData.armorArm        + p^.rLifeData.armorArm  + p^.rLifeData.armorArm  * p^.rcSkillLevel div INI_SKILL_DIV_ARMOR;
      HaveMagicLifeData.armorLeg        := HaveMagicLifeData.armorLeg        + p^.rLifeData.armorLeg  + p^.rLifeData.armorLeg  * p^.rcSkillLevel div INI_SKILL_DIV_ARMOR;
   end;
var
   str : string;
begin
   FillChar (HaveMagicLifeData, sizeof(TLifeData), 0);

   AddLifeData (pCurAttackMagic);
   if pCurAttackMagic <> nil then begin
      HaveMagicLifeData.damageBody := HaveMagicLifeData.damageBody + HaveMagicLifeData.DamageBody * MagicClass.GetSkillDamageBody (pCurAttackMagic^.rcSkillLevel) div 100;
      HaveMagicLifeData.damageHead := HaveMagicLifeData.damageHead;
      HaveMagicLifeData.damageArm  := HaveMagicLifeData.damageArm;
      HaveMagicLifeData.damageLeg  := HaveMagicLifeData.damageLeg;
   end;

   AddLifeData (pCurBreathngMagic);
   AddLifeData (pCurRunningMagic);
   AddLifeData (pCurProtectingMagic);
   if pCurProtectingMagic <> nil then begin
      HaveMagicLifeData.ArmorBody := HaveMagicLifeData.ArmorBody + HaveMagicLifeData.ArmorBody * MagicClass.GetSkillArmorBody (pCurProtectingMagic^.rcSkillLevel) div 100;
   end;

   AddLifeData (pCurEctMagic);

//   if pCurAttackMagic <> nil then                               // 寇傍捞 鼻过颇鲍俊 康氢
//   if pCurattackMagic.rMagicType = MAGICTYPE_WRESTLING then
//      HaveMagicLifeData.damage := HaveMagicLifeData.Damage + FAttribClass.CurOutPower div 100;

   str := '';
   if pCurAttackMagic <> nil then str := str + StrPas (@pCurAttackMagic^.rName) + ',';
   if pCurBreathngMagic <> nil then str := str + Str

⌨️ 快捷键说明

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