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

📄 itmunit.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  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 + -