|
|
源文件中_Interface文件夹下WndField.cpp文件) D% {# }, F' E( U1 \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# r5 t! o% c5 ^( h6 J
* i. t0 H3 {" _4 o& w- T
struct sItem
3 |0 F4 } `7 d{+ [2 Y0 h6 G: L$ w
DWORD dwId;& i9 }) I/ h7 l; T) F2 ^
DWORD dwKind2;4 ?4 @+ q& y# X( v4 g8 B
DWORD dwItemId;
$ G7 h) t0 ^; {; m5 L! dBYTE nIndex;
" E* r1 d. `$ v. t: E$ N; F3 e" J ^sItem(){- L) Z" A1 Q6 z0 u& ?" b
dwId = dwKind2 = dwItemId = nIndex = 0;( ?& n: y! N/ f7 K; Y3 s& e+ R
}3 \6 l3 u* D8 u2 W* T
bool operator < (const sItem p2)3 F' G$ h9 }& L! @( x# S7 h
{9 e! f" m9 G6 z, z' V* X& m
if (dwKind2 == p2.dwKind2), D" J3 u# v6 I n7 F5 C2 s1 f: d
{
) H7 k" x; X$ l, k return dwItemId < p2.dwItemId;
/ i" g1 ?" n b }else{' a# m8 h9 p) J7 e$ y; A8 l3 q
return dwKind2 < p2.dwKind2;4 H* j' B& T, E2 \5 J! k
}
5 a- Z& m7 d9 y, i- X: v+ ~}
6 T2 p. w+ S$ B) J};8 u" V& P, v% [, Q4 L) o; q
class CInventorySort& _2 l0 j2 u; W" z/ l
{' i4 k P* s$ D' N& c8 n
public:8 m( p% o* r; t0 w O% L# o: W
CInventorySort()
7 V6 w& s% F) H5 K6 g N{; e4 r9 ]" @0 t1 B4 r' I, T$ |. E
m_dwPos = 0;
7 ?( s6 x ^" U}) Y. A/ r% g7 |! p
~CInventorySort(){}) R, M8 _9 z: _' }2 H5 c2 i _6 }$ q
private:. m* B* |% H+ |: Z7 ?9 I, o
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 R; L- F: ?% Z2 {
DWORD m_dwPos;/ a y/ E) ]) c/ e/ ^' c
public:3 D, ^4 h3 `9 F) G9 _4 D! s) p
void Add(BYTE nIndex)
6 V" p' w0 b8 s% w6 G{
3 l3 l" q/ c0 u7 Q2 F if (m_dwPos >= MAX_INVENTORY)
2 ?- v8 b3 L' O {$ ~' n7 e3 ]# `' @/ |; @
return;
2 r- H, i0 l; Y( N }$ m+ x1 |/ k! w! m' ~
m_Item[m_dwPos].nIndex = nIndex;% P3 f* s) O- C9 G) M
m_Item[m_dwPos].dwId = m_dwPos;
; G& p) ` Z- E2 ]' n. T m_dwPos++;/ y" G6 ]/ I. o$ @( X1 {; x6 X
}9 e3 z# \! p2 s X1 L5 {+ z; e3 q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" B/ ]% K. S' K{
+ I& L9 v" S' @1 E9 _ for (int i=0;i<MAX_INVENTORY;i++)
' q# r, e1 m8 G7 V5 c {
, l2 y. P2 c% _' K# \8 X if (m_Item.dwId == dwId)) t7 V( c N8 K2 V
{
& E) g& [3 i! d* [1 Q return m_Item.nIndex;
/ W+ l# K: T( u7 P" G }& M# L* w: [* R8 a7 B4 D& V& M
}
" ]; d& y) y; @' w. W6 f return 255;" i* K/ r! T. R- t
}
* z# j' }$ ]7 @$ i. [5 mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ d8 q* ~2 ^, n% J
{
: u7 K* B% L2 F( w5 ? BYTE nTmp = 0;+ n7 w7 o" {3 q1 y- f) g+ d: o3 S
bool bDest = false,bSrc = false;
0 j1 H9 Z8 n2 p- r% r for (int i=0;i<MAX_INVENTORY;i++)
3 `9 D I2 n8 ^( h/ }5 u {' h# d1 z/ L' Y# b% g
if (dwSrcId == m_Item.dwId)* s( F4 I8 D. }" J/ `$ A& G
{
7 ~3 O" O0 I6 v$ o+ ] //id相等 则 改变对应的dest和src3 @; {: P5 ~; x" Z2 k
nTmp = m_Item.nIndex;
( D( x7 R: G% E3 ^ m_Item.nIndex = dest;/ u/ \; [4 h$ T1 b
}9 M m, j( ]% H' N5 D' R
} k( }% m+ I+ T, Y' e( y2 F
//临时数据保存完毕,交换开始, N! M% C1 n! a4 u$ {8 k/ S @
for (int i=0;i<MAX_INVENTORY;i++)
2 E1 a% y7 V0 {: j, R( B1 j6 I {
6 d, X# F x$ A! c1 ?5 _3 { if (dest == m_Item.nIndex)% g5 R/ L! d+ D
{
1 ?- x/ Q3 T6 B& ] //id相等 则 改变对应的dest和src: `" S% [ I' [% H
m_Item.nIndex = nTmp;6 l4 y/ N. J, M6 X
}
% W) w% V! U* n: N6 R }
9 N5 {% g5 M* \}0 J6 z: N& @- R( z# a' I
};
% |# ~4 J. M7 }% L3 J, H9 u-------------------------------------------------------------------------
i. z0 H' g; j& @, q- s# G依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 `" q$ |) ^& E搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 w' z0 D8 v- O6 v) J8 I' @0 B紧靠其上添加:1 O2 x) g4 T: H7 C1 z% g( }
if( pWndBase == &m_wndMenu )
5 z8 K* r5 ]+ V0 f0 \{
}, z% h4 q' X) U F switch( nID ), c+ U$ }1 _0 \0 u! `, S9 J
{$ T; y/ Z8 a! y8 ] q4 q/ L
case 2:
/ Y# J# h7 G$ d# W* M0 t. [. | {
5 a4 ~# m4 ~. k3 }; W //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) `0 ^9 }2 l% E: z0 ^3 B$ k7 O if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 u& @# w$ o2 y# W {
" i/ K1 Y, |* c, A break;
3 k+ ?8 N. b1 V% U } }
9 ^5 q3 B+ }9 T" Z2 @" b- x, i for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; g% w* H0 J9 I% e# m/ X% U( s2 w {3 I" J/ [" s4 z7 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 I. \3 w& N( A6 O if( !pItemElem )7 @/ u& u3 `7 P% _
continue;
- S( ?$ g1 }2 ` if(pItemElem->GetExtra() > 0)1 i; K/ j4 ?% `
continue;2 g l% X% J; Q5 m: m3 i1 H S+ T
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) G0 G+ C$ N/ L9 C' ~: h
continue;
1 L# O1 G' `" q8 E" F if( g_pPlayer->IsUsing( pItemElem ) )% K! s1 j$ ~6 g6 l2 J' R: ]0 a& S
continue;$ U# |* Q; \- E
if( pItemElem->IsUndestructable() == TRUE )$ s9 O- |/ F' B2 s
{) l+ f! w# a" Y" E5 {9 z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* [$ j$ [# f) M h
continue;0 j+ B/ S ]* e z5 S
}
9 l+ v! ^# T$ ~6 v% X9 N- v3 ~ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: }. h* k2 E1 j! T
}, q7 B* G/ M8 E) `2 |
break;
6 x7 s# h( g( i3 ^" b8 w }3 q0 b7 l. M* G' X1 l7 K
case 1:
. v% L* b% x1 U. a {* V5 [' y* R- W b7 q
//整理背包
1 U, |& O6 j% \" O7 L //////////////////////////////////////////////////////////////////////////
' G( W6 ]. _: C" a2 I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ O- A' P& n% ~; o1 s* _5 I
//////////////////////////////////////////////////////////////////////////
5 f; Y1 O" S& } //////////////////////////////////////////////////////////////////////////
6 l' n1 O5 U$ w CInventorySort* pInvSort = new CInventorySort;5 {1 }, ?$ ]+ g* g$ t
vector <sItem> vItem;2 \6 _- ^9 V; [3 m l
vItem.resize(MAX_INVENTORY);//初始化大小
% A+ M, j7 D) Q3 ^ //////////////////////////////////////////////////////////////////////////1 k0 J- g! G$ _( W: [ U1 @
//填充数据. S* G; M; M0 [; Z) s% M8 V
for (int i=0;i<MAX_INVENTORY;i++)! S) I! D# q D3 O6 n5 M
{& Q6 h% h' ~. P5 o/ W! ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) A' v' C/ Z! y6 D. ]
if (!pItemElem)
3 L: E. H' {6 V7 ` r {
! b; _6 r9 a5 x vItem.dwKind2 = 0xffffffff;- ^: g! W* G+ g( Y2 ~% o0 l& }
vItem.dwItemId = 0xffffffff;
8 R0 ^7 l- R$ z" T% X" }& _ vItem.nIndex = i;+ ~" e+ d* P: H/ G" x/ ~
}else {0 p) {8 Q* v" u+ B }5 t8 J5 i: C2 f
ItemProp* pProp = pItemElem->GetProp();9 Q" @; t# B6 N+ m
vItem.dwKind2 = pProp->dwItemKind2;8 W8 m; y; T: q! E/ b
vItem.dwItemId = pItemElem->m_dwItemId;
( Q- f$ |3 y4 U5 G+ i$ Y( ?, H vItem.nIndex = i;! ]: q4 ]/ |' V$ o+ ?
}6 @" |6 X7 Q% P% k& ^4 U( t3 \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 [8 W: u+ G3 W# D0 L! ?) ` }2 {' F' r* E0 w# z
//////////////////////////////////////////////////////////////////////////& y, x1 d6 }5 `5 O" q
sort(vItem.begin(),vItem.end());//排序8 J. H" v% s( [5 _1 k2 N+ T" d8 n
//////////////////////////////////////////////////////////////////////////+ |( \3 [7 l) \6 h% p8 [$ B
//交换
3 Z3 S4 K: P P, s& k for (size_t i=0;i<vItem.size();i++)* [" E5 P* X: V6 x* H, l8 x: d# B) v. @
{# O4 d* \; \- G* C# }
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# i. v- D; _9 R3 x. _9 k2 W pInvSort->Add(vItem.nIndex);
5 X4 q) w% I7 U, v9 e G }7 _9 D+ _ d! S) ?
BYTE nDestPos = 0;
3 z1 `: V+ m2 E& @& m! U0 B for (int i=0;i<MAX_INVENTORY;i++)/ C# u& y7 q6 x+ n
{5 f9 X8 i! t2 e A Q# K6 i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 M# G1 o1 e1 U! T' z% q
if (pItemElem)
; t6 @7 G' @5 ]3 e( c {
G/ X5 B& X) W5 B+ {) m) K if (IsUsingItem(pItemElem))0 j0 n5 r5 U/ N4 `
{# u- ?0 V$ ^3 R3 E* K
//这个位置无法放
. ]" g7 ~7 `" g nDestPos++;8 [* u0 Q' Q; H5 d( J# \
}
4 M" @; w2 H: k- j8 H }
- O, M$ h6 Z2 B BYTE nSrc = pInvSort->GetItemSrc(i);
8 D9 s6 v' b9 \, f1 w# c pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 h1 L. |" d1 o& v# G if (pItemElem)" x% I2 Y' y( g$ y2 n: X( Y
{
7 k% K9 C4 G9 [5 s6 ^6 k0 ` if (IsUsingItem(pItemElem))- G. t4 b$ |! h4 o9 a9 k
{
' k' G/ v$ d% [7 C //这个道具无法移动,跳过) E+ X# Z' C- E: D) |: V# `
continue;
9 A5 ~% K2 X4 b) n }
. Y* v& L6 S) Y C3 l& V4 o1 ?/ q" N }else{
$ Y9 A2 d) ~& M# G# H2 Y4 d4 e e //空位置 不用动
0 Y+ f% N8 ^: ]. E! v continue;
2 k+ f) p8 }8 k3 e/ u8 C }) o5 I$ h8 z$ Z9 m; z
//////////////////////////////////////////////////////////////////////////
; U {1 M" q7 g5 J, S //开始移动
. d% Y8 y6 F9 A" } if (nSrc == nDestPos)9 J3 D& h% z, B& P6 c
{
9 w! ]! F) ~3 g8 J //原地不动6 a& w" n) j8 j( r
nDestPos++;
! S$ _2 p; X% |2 e) g# p# n continue;
; D, d1 t. b% y0 c3 }0 a& n6 Y }
5 Q& |0 E: S+ {" T8 r0 `* c pInvSort->MoveItem(i,nDestPos);
& s9 y, J4 x7 Y! o6 X& n5 A g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 z' t$ Z) k2 Y5 \! m7 t- R. m& H
Sleep(5);* e4 H) f& G( [, x$ v! }
//Error("移动 - %d->%d",nSrc,nDestPos);0 @8 @! p6 S e7 w# Z; `
nDestPos++;
3 T% X% _" P/ d/ R' N }
. }" x% D% Q+ c) v" ~ //取第一个元素的信息" d7 [* F7 q+ J" I
/*& Q. \, j( i' @0 v: \% z4 K" S# ]9 [
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& Z: {$ j7 u7 `' a3 h/ J- V {
* z' D& L j+ b. N, Z* x, H Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 @# K" j+ v3 z! p g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); {+ [8 A- H; Y: a/ f# p/ r/ l
}9 G. C% i0 n8 U3 x% H- i
*/
. E2 T/ M* R) `7 F' E! S //////////////////////////////////////////////////////////////////////////
$ M) E# O4 U0 d/ C% P" c, a/ O) o break;! }( {1 \9 I) j: @: l# f7 }4 d+ U" d
}
# D! O! I: i5 Q r, s7 P% w } + `1 ~& F* d2 a" c3 ~! g6 x
}: V# p* A1 O& J! o3 ^6 n
m_wndMenu.SetVisible(FALSE);& B& S4 v, z. Z" D a* }' \! f2 }2 |
. D7 F% R) o7 U1 i
--------------------------------------------------------------------------------------------------------
% I. v9 }, g; r: U3 e搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 k5 |8 X) r- W' b/ f' u4 z; C{
% l, |, d0 ~9 W) B7 nBaseMouseCursor();
! e7 { A+ V' i}( q5 D) h' ]; [% Y, e V
在其下添加:
7 {7 v5 @: \2 o1 Vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; k8 X9 F! ~% Q# o7 {5 p/ H6 D{
% e5 `9 @. v4 J) Km_wndMenu.DeleteAllMenu();
* M. A+ w+ u" C, H4 ~m_wndMenu.CreateMenu(this);
( z$ _0 u J! E' Y! C# l9 ?, im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 z$ ^1 K9 y& R! @) s
3 B, j$ q8 @. }8 {$ I9 H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 T1 _: b8 p* e7 }+ N- e; H! S4 E* D{
5 F; D5 A' ]- z! \+ L //P以上级别才可以删除所有道具8 j* s/ L1 k8 I& F4 W
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ Y1 z2 M. c) e$ W" Q: i}
3 v1 s) F- o, x Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 G& k# F2 y, bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 p) Y* g3 B/ V4 nm_wndMenu.SetFocus();
: V3 h0 f* }. ]- R a}% |# S( K2 X+ ~ W0 d( [
------------------------------------------------------------------------------------------------------------8 ^* n1 I# J1 x; r9 V/ |+ P4 d3 {
*************************( ^6 e& {/ t9 ^( _. g$ ~) |9 U
WndField.h文件" u& c- G! F# D( K w" Y; J
*************************5 f8 Y6 i) ?1 d8 g) `0 m" s! \
搜索:BOOL m_bReport;
: n2 H. q: y+ O! {. B# G其后添加:8 |# K9 k2 |7 t2 I: ?* \6 o
CWndMenu m_wndMenu;- y, P* D# ]3 {
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ f: R; S1 ~+ H' J. o, A4 ~1 ^9 m
其后添加:
' D3 }9 b- U' p4 f! t n1 fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
. }! Y7 ^' b, D n; m
3 Q7 c( |2 Q# e9 O r" I& E* a3 Q# C [0 r5 e, `
|
|