?? objhero.pas
字號(hào):
end;
function THeroObject.FindTogetherMagic: pTUserMagic;
begin
Result := FindMagic(GetTogetherUseSpell);
end;
function THeroObject.GetTogetherUseSpell: Integer;
begin
Result := 0;
if m_Master = nil then Exit;
case m_Master.m_btJob of
0: begin
case m_btJob of
0: Result := 60;
1: Result := 62;
2: Result := 61;
end;
end;
1: begin
case m_btJob of
0: Result := 62;
1: Result := 65;
2: Result := 64;
end;
end;
2: begin
case m_btJob of
0: Result := 61;
1: Result := 64;
2: Result := 63;
end;
end;
end;
end;
procedure THeroObject.ClientQueryBagItems();
var
I: Integer;
Item: pTStdItem;
sSENDMSG: string;
ClientItem: TClientItem;
StdItem: TStdItem;
UserItem: pTUserItem;
sUserItemName: string;
begin
sSENDMSG := '';
for I := 0 to m_ItemList.Count - 1 do begin
UserItem := m_ItemList.Items[I];
Item := UserEngine.GetStdItem(UserItem.wIndex);
if Item <> nil then begin
StdItem := Item^;
ItemUnit.GetItemAddValue(UserItem, StdItem);
Move(StdItem, ClientItem.s, SizeOf(TStdItem));
//取自定義物品名稱
sUserItemName := '';
if UserItem.btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(UserItem.MakeIndex, UserItem.wIndex);
if sUserItemName <> '' then
ClientItem.s.Name := sUserItemName;
ClientItem.Dura := UserItem.Dura;
ClientItem.DuraMax := UserItem.DuraMax;
ClientItem.MakeIndex := UserItem.MakeIndex;
if StdItem.StdMode = 50 then begin
ClientItem.s.Name := ClientItem.s.Name + ' #' + IntToStr(UserItem.Dura);
end;
sSENDMSG := sSENDMSG + EncodeBuffer(@ClientItem, SizeOf(TClientItem)) + '/';
end;
end;
if sSENDMSG <> '' then begin
m_DefMsg := MakeDefaultMsg(SM_HEROBAGITEMS, Integer(m_Master), 0, 0, m_ItemList.Count);
SendSocket(@m_DefMsg, sSENDMSG);
end;
end;
procedure THeroObject.GetBagItemCount;
var
I: Integer;
nOldBagCount: Integer;
begin
nOldBagCount := m_nItemBagCount;
for I := High(g_Config.nHeroBagItemCount) downto Low(g_Config.nHeroBagItemCount) do begin
if m_Abil.Level >= g_Config.nHeroBagItemCount[I] then begin
case I of
0: m_nItemBagCount := 20;
1: m_nItemBagCount := 30;
2: m_nItemBagCount := 35;
3: m_nItemBagCount := 40;
end;
Break;
end;
end;
if nOldBagCount <> m_nItemBagCount then begin
SendMsg(m_Master, RM_QUERYHEROBAGCOUNT, 0, m_nItemBagCount, 0, 0, '');
end;
end;
function THeroObject.AddItemToBag(UserItem: pTUserItem): Boolean;
begin
Result := False;
if m_Master = nil then Exit;
if m_ItemList.Count < m_nItemBagCount then begin
m_ItemList.Add(UserItem);
WeightChanged();
Result := True;
end;
end;
procedure THeroObject.SendUseMagic();
var
I: Integer;
sSENDMSG: string;
UserMagic: pTUserMagic;
ClientMagic: TClientMagic;
begin
sSENDMSG := '';
for I := 0 to m_MagicList.Count - 1 do begin
UserMagic := m_MagicList.Items[I];
if UserMagic <> nil then begin
ClientMagic.Key := Chr(UserMagic.btKey);
ClientMagic.Level := UserMagic.btLevel;
ClientMagic.CurTrain := UserMagic.nTranPoint;
ClientMagic.Def := UserMagic.MagicInfo^;
sSENDMSG := sSENDMSG + EncodeBuffer(@ClientMagic, SizeOf(TClientMagic)) + '/';
end;
end;
if sSENDMSG <> '' then begin
m_DefMsg := MakeDefaultMsg(SM_HEROSENDMYMAGIC, 0, 0, 0, m_MagicList.Count);
SendSocket(@m_DefMsg, sSENDMSG);
end;
end;
procedure THeroObject.SendUseitems();
var
I: Integer;
Item: pTStdItem;
sSENDMSG: string;
ClientItem: TClientItem;
StdItem: TStdItem;
sUserItemName: string;
begin
sSENDMSG := '';
for I := Low(THumanUseItems) to High(THumanUseItems) do begin
if m_UseItems[I].wIndex > 0 then begin
//sItemNewName:=GetItemName(m_UseItems[i].MakeIndex);
Item := UserEngine.GetStdItem(m_UseItems[I].wIndex);
if Item <> nil then begin
StdItem := Item^;
ItemUnit.GetItemAddValue(@m_UseItems[I], StdItem);
Move(StdItem, ClientItem.s, SizeOf(TStdItem));
//取自定義物品名稱
sUserItemName := '';
if m_UseItems[I].btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(m_UseItems[I].MakeIndex, m_UseItems[I].wIndex);
if sUserItemName <> '' then
ClientItem.s.Name := sUserItemName;
ClientItem.Dura := m_UseItems[I].Dura;
ClientItem.DuraMax := m_UseItems[I].DuraMax;
ClientItem.MakeIndex := m_UseItems[I].MakeIndex;
sSENDMSG := sSENDMSG + IntToStr(I) + '/' + EncodeBuffer(@ClientItem, SizeOf(TClientItem)) + '/';
end;
end;
end;
if sSENDMSG <> '' then begin
m_DefMsg := MakeDefaultMsg(SM_SENDHEROUSEITEMS, 0, 0, 0, 0);
SendSocket(@m_DefMsg, sSENDMSG);
end;
end;
procedure THeroObject.SendChangeItems(nWhere1, nWhere2: Integer; UserItem1, UserItem2: pTUserItem);
var
StdItem1: pTStdItem;
StdItem2: pTStdItem;
StdItem80: TStdItem;
ClientItem: TClientItem;
sUserItemName: string;
sSendText: string;
begin
sSendText := '';
if UserItem1 <> nil then begin
StdItem1 := UserEngine.GetStdItem(UserItem1.wIndex);
if StdItem1 <> nil then begin
StdItem80 := StdItem1^;
ItemUnit.GetItemAddValue(@UserItem1, StdItem80);
Move(StdItem80, ClientItem.s, SizeOf(TStdItem));
//取自定義物品名稱
sUserItemName := '';
if UserItem1.btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(UserItem1.MakeIndex, UserItem1.wIndex);
if sUserItemName <> '' then
ClientItem.s.Name := sUserItemName;
ClientItem.MakeIndex := UserItem1.MakeIndex;
ClientItem.Dura := UserItem1.Dura;
ClientItem.DuraMax := UserItem1.DuraMax;
if StdItem1.StdMode = 50 then begin
ClientItem.s.Name := ClientItem.s.Name + ' #' + IntToStr(UserItem1.Dura);
end;
sSendText := '0/' + IntToStr(nWhere1) + '/' + EncodeBuffer(@ClientItem, SizeOf(TClientItem)) + '/';
end;
end;
if UserItem2 <> nil then begin
StdItem2 := UserEngine.GetStdItem(UserItem2.wIndex);
if StdItem2 <> nil then begin
StdItem2 := UserEngine.GetStdItem(UserItem2.wIndex);
StdItem80 := StdItem2^;
ItemUnit.GetItemAddValue(@UserItem2, StdItem80);
Move(StdItem80, ClientItem.s, SizeOf(TStdItem));
//取自定義物品名稱
sUserItemName := '';
if UserItem2.btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(UserItem2.MakeIndex, UserItem2.wIndex);
if sUserItemName <> '' then
ClientItem.s.Name := sUserItemName;
ClientItem.MakeIndex := UserItem2.MakeIndex;
ClientItem.Dura := UserItem2.Dura;
ClientItem.DuraMax := UserItem2.DuraMax;
if StdItem2.StdMode = 50 then begin
ClientItem.s.Name := ClientItem.s.Name + ' #' + IntToStr(UserItem2.Dura);
end;
if sSendText = '' then begin
sSendText := '1/' + IntToStr(nWhere2) + '/' + EncodeBuffer(@ClientItem, SizeOf(TClientItem)) + '/';
end else begin
sSendText := sSendText + '1/' + IntToStr(nWhere2) + '/' + EncodeBuffer(@ClientItem, SizeOf(TClientItem)) + '/';
end;
end;
end;
if sSendText <> '' then begin
m_DefMsg := MakeDefaultMsg(SM_HEROCHANGEITEM, Integer(m_Master), 0, 0, 0);
SendSocket(@m_DefMsg, sSendText);
end;
end;
procedure THeroObject.SendDelItemList(ItemList: TStringList);
var
I: Integer;
s10: string;
begin
s10 := '';
for I := 0 to ItemList.Count - 1 do begin
s10 := s10 + ItemList.Strings[I] + '/' + IntToStr(Integer(ItemList.Objects[I])) + '/';
end;
m_DefMsg := MakeDefaultMsg(SM_HERODELITEMS, 0, 0, 0, ItemList.Count);
SendSocket(@m_DefMsg, EncodeString(s10));
end;
procedure THeroObject.SendDelItems(UserItem: pTUserItem);
var
StdItem: pTStdItem;
StdItem80: TStdItem;
ClientItem: TClientItem;
sUserItemName: string;
begin
StdItem := UserEngine.GetStdItem(UserItem.wIndex);
if StdItem <> nil then begin
StdItem80 := StdItem^;
ItemUnit.GetItemAddValue(@UserItem, StdItem80);
Move(StdItem80, ClientItem.s, SizeOf(TStdItem));
//取自定義物品名稱
sUserItemName := '';
if UserItem.btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(UserItem.MakeIndex, UserItem.wIndex);
if sUserItemName <> '' then
ClientItem.s.Name := sUserItemName;
ClientItem.MakeIndex := UserItem.MakeIndex;
ClientItem.Dura := UserItem.Dura;
ClientItem.DuraMax := UserItem.DuraMax;
if StdItem.StdMode = 50 then begin
ClientItem.s.Name := ClientItem.s.Name + ' #' + IntToStr(UserItem.Dura);
end;
m_DefMsg := MakeDefaultMsg(SM_HERODELITEM, Integer(m_Master), 0, 0, 1);
SendSocket(@m_DefMsg, EncodeBuffer(@ClientItem, SizeOf(TClientItem)));
end;
end;
procedure THeroObject.SendAddItem(UserItem: pTUserItem);
var
pStdItem: pTStdItem;
StdItem: TStdItem;
ClientItem: TClientItem;
sUserItemName: string;
begin
pStdItem := UserEngine.GetStdItem(UserItem.wIndex);
if pStdItem = nil then Exit;
StdItem := pStdItem^;
ItemUnit.GetItemAddValue(UserItem, StdItem);
Move(StdItem, ClientItem.s, SizeOf(TStdItem));
//取自定義物品名稱
sUserItemName := '';
if UserItem.btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(UserItem.MakeIndex, UserItem.wIndex);
if sUserItemName <> '' then
ClientItem.s.Name := sUserItemName;
ClientItem.MakeIndex := UserItem.MakeIndex;
ClientItem.Dura := UserItem.Dura;
ClientItem.DuraMax := UserItem.DuraMax;
if StdItem.StdMode = 50 then begin
ClientItem.s.Name := ClientItem.s.Name + ' #' + IntToStr(UserItem.Dura);
end;
if StdItem.StdMode in [15, 19, 20, 21, 22, 23, 24, 26] then begin
if UserItem.btValue[8] = 0 then ClientItem.s.Shape := 0
else ClientItem.s.Shape := 130;
end;
m_DefMsg := MakeDefaultMsg(SM_HEROADDITEM, Integer(m_Master), 0, 0, 1);
SendSocket(@m_DefMsg, EncodeBuffer(@ClientItem, SizeOf(TClientItem)));
end;
procedure THeroObject.SendUpdateItem(UserItem: pTUserItem);
var
StdItem: pTStdItem;
StdItem80: TStdItem;
ClientItem: TClientItem;
OClientItem: TOClientItem;
sUserItemName: string;
begin
StdItem := UserEngine.GetStdItem(UserItem.wIndex);
if StdItem <> nil then begin
StdItem80 := StdItem^;
ItemUnit.GetItemAddValue(UserItem, StdItem80);
ClientItem.s := StdItem80;
//取自定義物品名稱
sUserItemName := '';
if UserItem.btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(UserItem.MakeIndex, UserItem.wIndex);
if sUserItemName <> '' then
ClientItem.s.Name := sUserItemName;
ClientItem.MakeIndex := UserItem.MakeIndex;
ClientItem.Dura := UserItem.Dura;
ClientItem.DuraMax := UserItem.DuraMax;
if StdItem.StdMode = 50 then begin
ClientItem.s.Name := ClientItem.s.Name + ' #' + IntToStr(UserItem.Dura);
end;
m_DefMsg := MakeDefaultMsg(SM_HEROUPDATEITEM, Integer(Self), 0, 0, 1);
SendSocket(@m_DefMsg, EncodeBuffer(@ClientItem, SizeOf(TClientItem)));
end;
end;
function THeroObject.GetShowName(): string;
begin
Result := m_sCharName;
end;
procedure THeroObject.ItemDamageRevivalRing();
var
I: Integer;
pSItem: pTStdItem;
nDura, tDura: Integer;
HeroObject: THeroObject;
begin
for I := Low(THumanUseItems) to High(THumanUseItems) do begin
if m_UseItems[I].wIndex > 0 then begin
pSItem := UserEngine.GetStdItem(m_UseItems[I].wIndex);
if pSItem <> nil then begin
// if (i = U_RINGR) or (i = U_RINGL) then begin
if (pSItem.Shape in [114, 160, 161, 162]) or (((I = U_WEAPON) or (I = U_RIGHTHAND)) and (pSItem.AniCount in [114, 160, 161, 162])) then begin
nDura := m_UseItems[I].Dura;
tDura := Round(nDura / 1000 {1.03});
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -