📄 uusersub.pas
字号:
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 + -