|
|
源文件中_Interface文件夹下WndField.cpp文件
: Z! r4 C6 [; V1 j( O! ~3 p搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 |! [2 V( n9 q u
; a4 W! G) Y, y$ f7 kstruct sItem
) \0 b6 b3 } G8 z( ]) M{5 I* l7 T' ^+ s$ n
DWORD dwId;* v' c7 u1 {$ M9 p* W7 ]" O) [
DWORD dwKind2;
. u. s1 H: u m! kDWORD dwItemId;
: c5 w& }5 n: IBYTE nIndex;. [7 p( p$ p5 c" X5 S
sItem(){7 z! T7 q1 L5 S0 p. S/ c
dwId = dwKind2 = dwItemId = nIndex = 0;. O# I% x1 t' J' t/ x7 g
}
0 y. G/ R! ]8 ~7 l! wbool operator < (const sItem p2)
- E# i; H. Y3 m9 H7 n3 ?) n& [( ?" K{5 _' C& I) s ~+ m
if (dwKind2 == p2.dwKind2). ]/ i! e# q, U7 U/ q& A
{8 F( a- z) y0 B' K
return dwItemId < p2.dwItemId;
) P$ R" _: H3 A/ y8 s }else{9 @. [* r3 I! k# s" ~8 U# n( m( z' b
return dwKind2 < p2.dwKind2;
) R0 w- \* ~# _5 |* h }
- W$ }2 D' C5 o, ~9 q}4 ~1 \; A" t" t, v& Q4 ^
};
- e( Q, O9 }# w0 I( F' [class CInventorySort/ S) O' {2 s U2 \3 x% ^
{9 H* W& V1 M2 |9 K' [, ~5 J& D
public:
5 W' D0 K# C( KCInventorySort()0 w% t# i- p3 O1 }
{: ?) W, \2 ~5 ^* Z& L/ ~
m_dwPos = 0;
; g/ j7 k+ r& s) \1 A ~ j}
8 g& p3 a5 R; `' r~CInventorySort(){}
" f" _3 z7 |. D' ?) Dprivate:
2 O; ?5 T/ n- QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 A4 e5 E# l1 w% I$ K. p8 R) k
DWORD m_dwPos;! S& ^: Q. f6 e0 l9 h
public:
; Y5 ^$ _1 f+ Gvoid Add(BYTE nIndex)8 i- D1 X& e7 B9 Z" o& u
{
$ s# i" p0 m/ u/ n7 n/ o- _ if (m_dwPos >= MAX_INVENTORY)+ A' W7 [9 d( S( ~) a" H: i. J
{9 c3 w& A7 ~% {& g: b9 [
return;
. I( B* s0 c6 A2 a# R4 c } L' `7 m' D& p' Q1 I
m_Item[m_dwPos].nIndex = nIndex;% G/ O3 H7 l1 ~+ z7 z: l
m_Item[m_dwPos].dwId = m_dwPos;
: B3 `/ k) U! ]/ }. j7 O2 ]9 v+ ] m_dwPos++;9 h0 i( n0 k3 c- @* p
}* H" g0 b+ Q4 D" p' r
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. n# ~" s4 r& z- w- M9 ]( X{9 S4 @- S! ^. W9 b
for (int i=0;i<MAX_INVENTORY;i++)
; n4 N# m& {+ g* ? {
" U$ C& E: a6 a F. n$ n$ l" _( f$ I8 ~ if (m_Item.dwId == dwId)% W& y2 X9 |+ _% I1 T
{. L, i y4 u" x/ r
return m_Item.nIndex;# `& q! v* P. _/ ~+ D9 ^
}
; A. h" K K3 R) t }2 B4 F8 U, ^ e. F
return 255;
7 `/ y3 a3 @/ O8 f! n- ]}: \% `. H' h9 S/ P8 M5 F% t( @5 q3 ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 d, M6 X0 w9 F3 Q6 n* K
{
* @ D1 ^3 Q' Y7 S! w1 R BYTE nTmp = 0;
* B: V1 y& } M: N. a bool bDest = false,bSrc = false;
* Z" @% W; C% \, H- z for (int i=0;i<MAX_INVENTORY;i++)
' r7 s5 w/ p6 P9 Q {7 @5 [( K: j0 Q% s$ h% {8 {
if (dwSrcId == m_Item.dwId). p+ K1 E" g+ H6 n6 N9 @
{
* [9 \; z' q/ b$ i" p- J //id相等 则 改变对应的dest和src
5 J1 q; H/ g6 Z5 W7 R# H nTmp = m_Item.nIndex;
1 c, e' [3 x- o) |) k& E& s m_Item.nIndex = dest;/ B# M3 Y3 S. Y( Q" C8 z" c) x
}
- {0 a' W8 g5 M' }/ D) k8 X }
0 k. k' B1 _" C) J/ H' k/ A //临时数据保存完毕,交换开始
. R O* B/ i7 o$ ~+ V/ {5 J for (int i=0;i<MAX_INVENTORY;i++)
9 D: V' f! H$ D$ v! t- T {/ c8 \1 I7 r. l3 ]
if (dest == m_Item.nIndex)
2 O0 A4 U+ h3 H {
& c& u$ l ]5 w //id相等 则 改变对应的dest和src7 M7 j7 |: [* s2 b# Z
m_Item.nIndex = nTmp;/ n+ P- a; L( R1 I8 I6 u
}
3 e" K' x, g3 N4 T3 [/ P. c: O }
1 i$ J0 o% Q1 p( e}! S6 o; R" ^% m" e* J" K3 n
};
8 V# F( Z/ g7 a* n: t- q% Q% I T-------------------------------------------------------------------------
( l* \ [6 `" D; u- H( E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! i$ C8 h. F7 { J9 T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 n3 V r( i) D% c4 u4 _
紧靠其上添加:
, B, C9 U7 @! U' }# Q& B- N/ nif( pWndBase == &m_wndMenu )
) q _8 E; n6 k7 f, v' v, i9 D) a{
6 A/ `7 l% ?. g( c, s1 w$ m switch( nID ); M$ n# z8 u* M. s! O
{. m2 b% i+ c1 `7 Y) t2 o) t) e8 P
case 2:
' v+ s5 F( {( I9 e6 V% @ {' O! A) w" ]6 N
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* P; [; w+ C/ g* _( c* c+ m0 y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 }- }/ q6 h0 n* Q9 f/ ~
{
( E. T; b4 w! S4 w7 X2 d9 g break;
- p1 }( T* i' ^" K4 Y! a; D: ` }
# ]$ `/ `5 S* x# T for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 D" l) g* I" t6 A* p {8 d# N5 @/ L$ t0 Y6 [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 w5 j- L. u7 c. } if( !pItemElem )
2 o+ u1 u K* F4 r) ^4 @ continue;4 D9 c' Z, Y6 U% C3 @
if(pItemElem->GetExtra() > 0)
/ g. ]- D+ d& g! N" i! {0 m( q continue;
3 J4 l& g8 X; g# V }) u/ { if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) X, c* i/ O0 O8 e% {
continue;6 f7 h# Q1 a4 I7 z
if( g_pPlayer->IsUsing( pItemElem ) )
1 p+ B3 j! I* y$ E5 H4 H$ C3 ^0 i continue;' u& ~! g0 f, U [. G. R* r! ]
if( pItemElem->IsUndestructable() == TRUE )
. t8 X: B; y6 ]( a {
5 Y$ a% Y( ~; B/ [+ k) b _* u g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- `) x6 t2 r4 k, M8 s- p continue;
" v6 |9 |) ^( V4 j6 X# ~0 p }9 N% o- U7 G& r/ r: p9 a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: j s. J K$ ~% {
} v, | ?# l7 Q1 _
break;9 l7 z4 ]5 D; m' K$ {8 \& ^
}
$ N4 l5 a4 k5 J! f( O& }; Q3 p7 ` case 1:7 l* l) E9 Z) r, S& q' r- k
{' j5 `! T, w! v$ }
//整理背包7 D* H; l3 N, |
//////////////////////////////////////////////////////////////////////////* H x: R6 k/ c8 N9 Q1 t
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 d1 A9 Z3 v, D j) ? //////////////////////////////////////////////////////////////////////////& _# t; C; I+ i3 e7 E# N7 ]; c
/////////////////////////////////////////////////////////////////////////// |3 [! o+ n: P4 e; b0 d, @
CInventorySort* pInvSort = new CInventorySort;
. B: R3 v' ]. y2 P6 G vector <sItem> vItem;' q8 N" G T" J/ N. ~7 x/ A
vItem.resize(MAX_INVENTORY);//初始化大小+ r& ?) @0 u( S+ W+ F) A' m
//////////////////////////////////////////////////////////////////////////
" {7 h4 R0 _+ j$ b# k6 p //填充数据
( F& l1 P& _ S1 t0 @ for (int i=0;i<MAX_INVENTORY;i++)0 t p8 i5 E1 G: |2 t* E
{
! P1 c9 p* O* r$ w! ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 _; w! _4 _5 B1 _. \6 a/ k! X if (!pItemElem)
8 q# Q! X9 l8 U8 A3 v/ a, R$ b {
& e! S; ^' b; A+ ^2 f* \% q8 W vItem.dwKind2 = 0xffffffff;
" }. B7 `! x _* i vItem.dwItemId = 0xffffffff;
3 c- p( `8 p( o vItem.nIndex = i;
8 u, O- f6 ^9 D; l }else {; I& V" V o L: @
ItemProp* pProp = pItemElem->GetProp();
$ l7 l) D8 D4 p1 w& T) |1 @) ^0 C" G. i vItem.dwKind2 = pProp->dwItemKind2;
, ^: M3 O8 I7 p) [3 I vItem.dwItemId = pItemElem->m_dwItemId;
/ T$ o6 L) h m r( h! J, `; h vItem.nIndex = i;- y g. [. W0 A5 F) m
}# k( x6 i7 R( a* `5 L
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); k2 G4 X# E9 d9 h% j' o
}
$ Q! K! N/ T+ H! K; m% w5 y //////////////////////////////////////////////////////////////////////////
5 r3 f6 }6 B6 s- K sort(vItem.begin(),vItem.end());//排序( W8 r! f) L! m2 x) Y* o. q
//////////////////////////////////////////////////////////////////////////
# L# U" r2 u5 L' s2 Y0 f8 D* v- y //交换
: P) r. e0 [/ \0 z6 n3 b, ^% } for (size_t i=0;i<vItem.size();i++). }7 { X" L) o3 I
{
, Q e3 r6 a" I5 m: O8 \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 s W4 L" \' M4 v5 U( g5 Q- f, h
pInvSort->Add(vItem.nIndex);
* C' w- Z! h: q9 `; [8 }6 }9 B }8 Y ^, u: [/ _1 N% _
BYTE nDestPos = 0;
8 p h8 p4 ~- j8 X for (int i=0;i<MAX_INVENTORY;i++), D; o+ e7 h) Z7 L2 K
{1 I8 h3 d8 @- v6 U4 F% W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; I# ^6 _$ N, ]$ p) P
if (pItemElem)
& P6 N( x* L3 J f3 o/ T5 p {
6 i P5 B' `6 s: E( V6 R" I8 @ if (IsUsingItem(pItemElem))1 z* v8 I0 O) s# w
{6 S" g- z! _! }2 H1 J. p$ ?1 `9 p1 g
//这个位置无法放
. k9 A3 q" C$ m8 U3 K' P nDestPos++;
. I: |0 g9 u1 v/ R3 O$ F$ { f2 r }- ?% n1 x' {! u: O
}" M2 U( B- [3 `6 T2 j
BYTE nSrc = pInvSort->GetItemSrc(i);
' i* Z- w( S$ v- A$ x4 v( h pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! |0 h+ Z6 y9 ]5 r4 @) E
if (pItemElem)
* `' {( t1 q2 ] s" P {
9 J0 u0 O+ ^$ N, k# b if (IsUsingItem(pItemElem))& r) Y* H8 p; P9 @" C
{
- D8 I) H; S1 g v' D8 y9 c; B2 q //这个道具无法移动,跳过; V- p0 S$ L; G$ g2 a; g
continue;
) K6 A7 l9 y( @4 o; Y9 C* M; h! I }( Z0 }. o3 ~% c. K; M8 p
}else{
. ?; K7 W/ k3 {6 ^/ h' L5 { //空位置 不用动3 P3 m# o* Z3 l4 p6 g) O. r
continue;
& g n4 M6 s5 i% g/ h0 }# Y }6 Y* a! }; o ]: H, }& x" D
//////////////////////////////////////////////////////////////////////////- N6 b# f3 D8 |0 r
//开始移动
/ k2 L6 @$ {# \5 \8 X if (nSrc == nDestPos)
6 }0 T" d9 q; [% f5 F, _4 ?; F {
4 _ N+ r% D' z7 Q: y4 H% o0 w //原地不动
; V! K/ d1 e% f4 R( M. F8 o! K9 p nDestPos++;
& O M0 b) {# t4 R, J( I continue;! a, @9 }" w, y
}7 c! H0 [/ x, r0 ^8 P- p
pInvSort->MoveItem(i,nDestPos);8 c+ p8 Y2 `2 R
g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 M" F) r- ]0 A" L# k# N8 O$ ?
Sleep(5);5 n" X, T* H" z& E
//Error("移动 - %d->%d",nSrc,nDestPos);" W: E$ Q0 E: E: i" V4 V) |
nDestPos++;, `, T+ P& _: U# e; H
}
) W9 v2 h1 h, |) [ //取第一个元素的信息% U; @' F8 u: }7 p* v: t+ T# d
/*" x- @. b' h+ Q# v0 x
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ ~/ x+ N7 d2 J1 E
{
" |; b. b- P7 f/ P Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 {' _1 k7 K4 G, ]5 \
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 y/ r+ a3 v+ o* K& A3 w
}
. W7 g' x4 u5 ]# U1 ]3 {$ j */
2 a5 c! J' R0 c- n$ D //////////////////////////////////////////////////////////////////////////2 Y, V) `) m9 u1 R7 y8 Q5 }8 K) I
break;
+ D7 ~ t, U, E }9 A$ {) w+ k2 D
}
' X7 H# {: [% E8 n6 i}1 c- K6 E' r, G- {) ~
m_wndMenu.SetVisible(FALSE);
4 x3 U s) x& ^# ^2 {: a: c" l' u: c$ ? z' h
--------------------------------------------------------------------------------------------------------
3 J* O; k9 ?4 a; R( F搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ D* L+ X* ^# ?7 }) I! R% S/ {{
& k6 W" A) }5 Y( P4 O: y- RBaseMouseCursor();
$ l+ l& Z3 @3 M: w}8 `7 D. |3 [, R; G% b
在其下添加:
0 ^' A& T" d" c8 a* cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 Q$ ]0 G# c9 w+ z# T
{
3 d( U( L% |; n0 F3 F) u' fm_wndMenu.DeleteAllMenu();
5 m1 P& u P" [+ R& ~m_wndMenu.CreateMenu(this);
2 r3 r6 d$ A0 \/ {2 |m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 E( o, o1 ~) S0 Q. j$ M
6 v, D4 i; _0 t: b/ p0 ]! ]/ L& Cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' S$ i; T/ c/ G+ x2 o{
- g: ?) N& z! L' c) x' J/ P //P以上级别才可以删除所有道具9 W7 O+ r$ L( X
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* j9 X- D0 h9 U, M8 X c}
2 G% I( j3 l8 s6 g. zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 E7 E$ b' X$ \) ^8 p) C/ ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 J: H% _5 o" o8 e( Y% F4 F4 l
m_wndMenu.SetFocus();
. U" X5 {, z4 _! Q/ Y/ p- x}
# l. x% r( ^7 N: D$ N------------------------------------------------------------------------------------------------------------
: V+ o1 S F* h*************************: m' B5 Z. U* b" V0 l2 H3 E) W
WndField.h文件
/ K5 L5 I- Z& `* a" Q7 s*************************
& K9 U' Q; {8 }0 ~# d/ z搜索:BOOL m_bReport;
: P% i6 ^9 c( u( z其后添加:
' X7 Y* ?' [% H& d: x9 _! ]2 [CWndMenu m_wndMenu;. m! m1 u, E9 l
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* g! }2 c1 |; A- H/ y
其后添加:6 _ e; Z% Z$ l6 B# S* f% d M+ ?2 b, A
virtual void OnRButtonUp(UINT nFlags, CPoint point);8 u* v9 I% e7 g* y) f" l6 Z6 y
" a/ ?, L2 z& p/ J1 O
# e* N9 P# y( }# p3 C; \) n# `# w
|
|