📄 itmunit.pas
字号:
n10 := {GetRandomRange(4,3) + GetRandomRange(4,8) + }
GetRandomRange(g_Config.nUnknowRingDCAddValueMaxLimit {6},
g_Config.nUnknowRingDCAddRate {20});
if n10 > 0 then
UserItem.btValue[2] := n10;
Inc(n14, n10);
n10 := {GetRandomRange(4,3) + GetRandomRange(4,8) + }
GetRandomRange(g_Config.nUnknowRingMCAddValueMaxLimit {6},
g_Config.nUnknowRingMCAddRate {20});
if n10 > 0 then
UserItem.btValue[3] := n10;
Inc(n14, n10);
n10 := {GetRandomRange(4,3) + GetRandomRange(4,8) + }
GetRandomRange(g_Config.nUnknowRingSCAddValueMaxLimit {6},
g_Config.nUnknowRingSCAddRate {20});
if n10 > 0 then
UserItem.btValue[4] := n10;
Inc(n14, n10);
n10 := GetRandomRange(6, 30);
if n10 > 0 then
begin
nC := (n10 + 1) * 1000;
UserItem.DuraMax := _MIN(65000, UserItem.DuraMax + nC);
UserItem.Dura := _MIN(65000, UserItem.Dura + nC);
end;
if Random(30) = 0 then
UserItem.btValue[7] := 1;
UserItem.btValue[8] := 1;
if n14 >= 3 then
begin
if UserItem.btValue[2] >= 3 then
begin
UserItem.btValue[5] := 1;
UserItem.btValue[6] := UserItem.btValue[2] * 3 + 25;
exit;
end;
if UserItem.btValue[3] >= 3 then
begin
UserItem.btValue[5] := 2;
UserItem.btValue[6] := UserItem.btValue[3] * 2 + 18;
exit;
end;
if UserItem.btValue[4] >= 3 then
begin
UserItem.btValue[5] := 3;
UserItem.btValue[6] := UserItem.btValue[4] * 2 + 18;
exit;
end;
UserItem.btValue[6] := n14 * 2 + 18;
end;
end;
procedure TItemUnit.UnknowNecklace(UserItem: pTUserItem); //00495704 神秘腰带
var
nC, n10, n14 : Integer;
begin
n10 := {GetRandomRange(3,5) + }
GetRandomRange(g_Config.nUnknowNecklaceACAddValueMaxLimit {5},
g_Config.nUnknowNecklaceACAddRate {20});
if n10 > 0 then
UserItem.btValue[0] := n10;
n14 := n10;
n10 := {GetRandomRange(3,5) + }
GetRandomRange(g_Config.nUnknowNecklaceMACAddValueMaxLimit {5},
g_Config.nUnknowNecklaceMACAddRate {20});
if n10 > 0 then
UserItem.btValue[1] := n10;
Inc(n14, n10);
n10 := {GetRandomRange(3,15) + }
GetRandomRange(g_Config.nUnknowNecklaceDCAddValueMaxLimit {5},
g_Config.nUnknowNecklaceDCAddRate {30});
if n10 > 0 then
UserItem.btValue[2] := n10;
Inc(n14, n10);
n10 := {GetRandomRange(3,15) + }
GetRandomRange(g_Config.nUnknowNecklaceMCAddValueMaxLimit {5},
g_Config.nUnknowNecklaceMCAddRate {30});
if n10 > 0 then
UserItem.btValue[3] := n10;
Inc(n14, n10);
n10 := {GetRandomRange(3,15) + }
GetRandomRange(g_Config.nUnknowNecklaceSCAddValueMaxLimit {5},
g_Config.nUnknowNecklaceSCAddRate {30});
if n10 > 0 then
UserItem.btValue[4] := n10;
Inc(n14, n10);
n10 := GetRandomRange(6, 30);
if n10 > 0 then
begin
nC := (n10 + 1) * 1000;
UserItem.DuraMax := _MIN(65000, UserItem.DuraMax + nC);
UserItem.Dura := _MIN(65000, UserItem.Dura + nC);
end;
if Random(30) = 0 then
UserItem.btValue[7] := 1;
UserItem.btValue[8] := 1;
if n14 >= 2 then
begin
if UserItem.btValue[0] >= 3 then
begin
UserItem.btValue[5] := 1;
UserItem.btValue[6] := UserItem.btValue[0] * 3 + 25;
exit;
end;
if UserItem.btValue[2] >= 2 then
begin
UserItem.btValue[5] := 1;
UserItem.btValue[6] := UserItem.btValue[2] * 3 + 30;
exit;
end;
if UserItem.btValue[3] >= 2 then
begin
UserItem.btValue[5] := 2;
UserItem.btValue[6] := UserItem.btValue[3] * 2 + 20;
exit;
end;
if UserItem.btValue[4] >= 2 then
begin
UserItem.btValue[5] := 3;
UserItem.btValue[6] := UserItem.btValue[4] * 2 + 20;
exit;
end;
UserItem.btValue[6] := n14 * 2 + 18;
end;
end;
procedure TItemUnit.GetItemAddValue(UserItem: pTUserItem; var StdItem:
TStdItem);
//00495974
var
btvalue:array[0..13] of integer;
i,ii:Integer;
a,b:word;
begin
for i:=0 to 13 do
btvalue[i]:=0;
//获得加星属性
if (UserItem.btValue[11]>0)and(UserItem.btValue[11]<=10) then
begin
for ii:=0 to UserItem.btValue[11]-1 do
Begin
for i:=0 to 4 do
btvalue[i]:=btvalue[i]+Makelong(GetBit(Useritem.btvalue[14+ii*6+i],1),GetBit(Useritem.btvalue[14+ii*6+i],0));
btvalue[5]:=btvalue[5]+Useritem.btvalue[14+ii*6+5];
End;
end;
case StdItem.StdMode of
5, 6:
begin //004959D6
StdItem.DC := MakeLong(LoWord(StdItem.DC)+GetBit(UserItem.btValue[0],0), HiWord(StdItem.DC) +
GetBit(UserItem.btValue[0],1));
StdItem.MC := MakeLong(LoWord(StdItem.MC)+GetBit(UserItem.btValue[1],0), HiWord(StdItem.MC) +
GetBit(UserItem.btValue[1],1));
StdItem.SC := MakeLong(LoWord(StdItem.SC)+GetBit(UserItem.btValue[2],0), HiWord(StdItem.SC) +
GetBit(UserItem.btValue[2],1));
StdItem.AC := MakeLong(LoWord(StdItem.AC) + UserItem.btValue[3],HiWord(StdItem.AC) + UserItem.btValue[5]);
StdItem.MAC := MakeLong(LoWord(StdItem.MAC) + UserItem.btValue[4],HiWord(StdItem.MAC) + UserItem.btValue[6]);
StdItem.AC := MakeLong(LoWord(StdItem.AC)+LoWord(btValue[0] ), HiWord(StdItem.AC) +
HiWord(btValue[0]));
StdItem.MAC := MakeLong(LoWord(StdItem.MAC)+LoWord(btValue[1]), HiWord(StdItem.MAC) +
HiWord(btValue[1]));
StdItem.DC := MakeLong(LoWord(StdItem.DC)+LoWord(btValue[2]), HiWord(StdItem.DC) +
HiWord(btValue[2]));
StdItem.MC := MakeLong(LoWord(StdItem.MC)+LoWord(btValue[3]), HiWord(StdItem.MC) +
HiWord(btValue[3]));
StdItem.SC := MakeLong(LoWord(StdItem.SC)+LoWord(btValue[4]), HiWord(StdItem.SC) +
HiWord(btValue[4]));
if Byte(UserItem.btValue[7] - 1) < 10 then
begin //神圣
StdItem.Source := UserItem.btValue[7]+ btvalue[5];
end;
if UserItem.btValue[10] <> 0 then
StdItem.Reserved := StdItem.Reserved or 1;
end;
10, 11:
begin
StdItem.AC := MakeLong(LoWord(StdItem.AC)+GetBit(UserItem.btValue[0],0), HiWord(StdItem.AC)
+GetBit(UserItem.btValue[0],1));
StdItem.MAC := MakeLong(LoWord(StdItem.MAC)+GetBit(UserItem.btValue[1],0), HiWord(StdItem.MAC) +GetBit(UserItem.btValue[1],1));
StdItem.DC := MakeLong(LoWord(StdItem.DC)+GetBit(UserItem.btValue[2],0), HiWord(StdItem.DC) +
GetBit(UserItem.btValue[2],1));
StdItem.MC := MakeLong(LoWord(StdItem.MC)+GetBit(UserItem.btValue[3],0), HiWord(StdItem.MC) +
GetBit(UserItem.btValue[3],1));
StdItem.SC := MakeLong(LoWord(StdItem.SC)+GetBit(UserItem.btValue[4],0), HiWord(StdItem.SC) +
GetBit(UserItem.btValue[4],1));
StdItem.AC := MakeLong(LoWord(StdItem.AC)+LoWord(btValue[0] ), HiWord(StdItem.AC) +
HiWord(btValue[0]));
StdItem.MAC := MakeLong(LoWord(StdItem.MAC)+LoWord(btValue[1]), HiWord(StdItem.MAC) +
HiWord(btValue[1]));
StdItem.DC := MakeLong(LoWord(StdItem.DC)+LoWord(btValue[2]), HiWord(StdItem.DC) +
HiWord(btValue[2]));
StdItem.MC := MakeLong(LoWord(StdItem.MC)+LoWord(btValue[3]), HiWord(StdItem.MC) +
HiWord(btValue[3]));
StdItem.SC := MakeLong(LoWord(StdItem.SC)+LoWord(btValue[4]), HiWord(StdItem.SC) +
HiWord(btValue[4]));
end;
15, 19, 20, 21, 22, 23, 24, 26, 51, 52, 53, 54, 62, 63, 64:
begin
StdItem.AC := MakeLong(LoWord(StdItem.AC)+GetBit(UserItem.btValue[0],0), HiWord(StdItem.AC)
+GetBit(UserItem.btValue[0],1));
StdItem.MAC := MakeLong(LoWord(StdItem.MAC)+GetBit(UserItem.btValue[1],0), HiWord(StdItem.MAC) +GetBit(UserItem.btValue[1],1));
StdItem.DC := MakeLong(LoWord(StdItem.DC)+GetBit(UserItem.btValue[2],0), HiWord(StdItem.DC) +
GetBit(UserItem.btValue[2],1));
StdItem.MC := MakeLong(LoWord(StdItem.MC)+GetBit(UserItem.btValue[3],0), HiWord(StdItem.MC) +
GetBit(UserItem.btValue[3],1));
StdItem.SC := MakeLong(LoWord(StdItem.SC)+GetBit(UserItem.btValue[4],0), HiWord(StdItem.SC) +
GetBit(UserItem.btValue[4],1));
StdItem.AC := MakeLong(LoWord(StdItem.AC)+LoWord(btValue[0] ), HiWord(StdItem.AC) +
HiWord(btValue[0]));
StdItem.MAC := MakeLong(LoWord(StdItem.MAC)+LoWord(btValue[1]), HiWord(StdItem.MAC) +
HiWord(btValue[1]));
StdItem.DC := MakeLong(LoWord(StdItem.DC)+LoWord(btValue[2]), HiWord(StdItem.DC) +
HiWord(btValue[2]));
StdItem.MC := MakeLong(LoWord(StdItem.MC)+LoWord(btValue[3]), HiWord(StdItem.MC) +
HiWord(btValue[3]));
StdItem.SC := MakeLong(LoWord(StdItem.SC)+LoWord(btValue[4]), HiWord(StdItem.SC) +
HiWord(btValue[4]));
if btValue[5] > 0 then
begin
StdItem.Need := btValue[5];
end;
if btValue[6] > 0 then
begin
StdItem.NeedLevel := btValue[6];
end;
end;
end;
if (UserItem.btValue[9]>0) or(UserItem.btValue[11]>0) then
StdItem.Price:=0;
if UserItem.btValue[9]>0 then
Begin
StdItem.Price:=(UserItem.btValue[9] and ($07));
StdItem.Price:=StdItem.Price shl 29;
End;
if UserItem.btValue[11]>0 then
Begin
i:=UserItem.btValue[11] and $0F;
i:=i shl 25;
StdItem.Price:=StdItem.Price or i;
End;
if UserItem.Exp>$FFFFFF then
begin
i:=Useritem.Exp div 10000;
StdItem.Price:=(StdItem.Price or $01000000) or i ;
End
else
StdItem.Price:=StdItem.Price or Useritem.Exp ;
end;
function TItemUnit.GetCustomItemName(nMakeIndex,
nItemIndex: Integer): string;
var
i : Integer;
ItemName : pTItemName;
begin
Result := '';
m_ItemNameList.Lock;
try
for i := 0 to m_ItemNameList.Count - 1 do
begin
ItemName := m_ItemNameList.Items[i];
if (ItemName.nMakeIndex = nMakeIndex) and (ItemName.nItemIndex =
nItemIndex) then
begin
Result := ItemName.sItemName;
break;
end;
end;
finally
m_ItemNameList.UnLock;
end;
end;
function TItemUnit.AddCustomItemName(nMakeIndex, nItemIndex: Integer;
sItemName: string): Boolean;
var
i : Integer;
ItemName : pTItemName;
begin
Result := False;
m_ItemNameList.Lock;
try
for i := 0 to m_ItemNameList.Count - 1 do
begin
ItemName := m_ItemNameList.Items[i];
if (ItemName.nMakeIndex = nMakeIndex) and (ItemName.nItemIndex =
nItemIndex) then
begin
exit;
end;
end;
New(ItemName);
ItemName.nMakeIndex := nMakeIndex;
ItemName.nItemIndex := nItemIndex;
ItemName.sItemName := sItemName;
m_ItemNameList.Add(ItemName);
Result := True;
finally
m_ItemNameList.UnLock;
end;
end;
function TItemUnit.DelCustomItemName(nMakeIndex, nItemIndex: Integer): Boolean;
var
i : Integer;
ItemName : pTItemName;
begin
Result := False;
m_ItemNameList.Lock;
try
for i := 0 to m_ItemNameList.Count - 1 do
begin
ItemName := m_ItemNameList.Items[i];
if (ItemName.nMakeIndex = nMakeIndex) and (ItemName.nItemIndex =
nItemIndex) then
begin
DisPose(ItemName);
m_ItemNameList.Delete(i);
Result := True;
exit;
end;
end;
finally
m_ItemNameList.UnLock;
end;
end;
function TItemUnit.LoadCustomItemName: Boolean;
var
i : Integer;
LoadList : TStringList;
sFileName : string;
sLineText : string;
sMakeIndex : string;
sItemIndex : string;
nMakeIndex : Integer;
nItemIndex : Integer;
sItemName : string;
ItemName : pTItemName;
begin
Result := False;
sFileName := g_Config.sEnvirDir + 'ItemNameList.txt';
LoadList := TStringList.Create;
if FileExists(sFileName) then
begin
m_ItemNameList.Lock;
try
m_ItemNameList.Clear;
LoadList.LoadFromFile(sFileName);
for i := 0 to LoadList.Count - 1 do
begin
sLineText := Trim(LoadList.Strings[i]);
sLineText := GetValidStr3(sLineText, sMakeIndex, [' ', #9]);
sLineText := GetValidStr3(sLineText, sItemIndex, [' ', #9]);
sLineText := GetValidStr3(sLineText, sItemName, [' ', #9]);
nMakeIndex := Str_ToInt(sMakeIndex, -1);
nItemIndex := Str_ToInt(sItemIndex, -1);
if (nMakeIndex >= 0) and (nItemIndex >= 0) then
begin
New(ItemName);
ItemName.nMakeIndex := nMakeIndex;
ItemName.nItemIndex := nItemIndex;
ItemName.sItemName := sItemName;
m_ItemNameList.Add(ItemName);
end;
end;
Result := True;
finally
m_ItemNameList.UnLock;
end;
end
else
begin
LoadList.SaveToFile(sFileName);
end;
LoadList.Free;
end;
function TItemUnit.SaveCustomItemName: Boolean;
var
i : Integer;
SaveList : TStringList;
sFileName : string;
ItemName : pTItemName;
begin
sFileName := g_Config.sEnvirDir + 'ItemNameList.txt';
SaveList := TStringList.Create;
m_ItemNameList.Lock;
try
for i := 0 to m_ItemNameList.Count - 1 do
begin
ItemName := m_ItemNameList.Items[i];
SaveList.Add(IntToStr(ItemName.nMakeIndex) + #9 +
IntToStr(ItemName.nItemIndex) + #9 + ItemName.sItemName);
end;
finally
m_ItemNameList.UnLock;
end;
SaveList.SaveToFile(sFileName);
SaveList.Free;
Result := True;
end;
procedure TItemUnit.Lock;
begin
m_ItemNameList.Lock;
end;
procedure TItemUnit.UnLock;
begin
m_ItemNameList.UnLock;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -