|
|
源文件中_Interface文件夹下WndField.cpp文件9 d' t( d% d, _" a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! @% K5 Q" o" `
$ O! `# c0 \1 R( t5 |: j7 y' D% Mstruct sItem4 j7 w Z7 n! a: }
{
6 ^2 L5 a4 j, K6 v9 w: GDWORD dwId;
' y0 D$ J( ]5 I2 X. rDWORD dwKind2;! H, w/ I4 N8 t3 @( I1 v: L8 _: a
DWORD dwItemId;% m6 _! P4 B% R' g' G
BYTE nIndex;
$ e8 n, @. q; `1 M! qsItem(){
4 j2 e/ R$ G. _1 \; ` dwId = dwKind2 = dwItemId = nIndex = 0;- r( F: r- Z7 N1 I" Q g
}, [( Z N8 k5 `5 a3 p! U
bool operator < (const sItem p2)) }( u. R; k. ~( j) x1 u0 d
{: ?: \" T) F' W! H! S0 t! e
if (dwKind2 == p2.dwKind2)
/ \/ S/ N+ `! m6 d2 R {$ B) G& A, `7 C/ k
return dwItemId < p2.dwItemId;; h/ ]: K: g7 S3 H* m( Q
}else{3 C' [- \6 x5 H# O. h
return dwKind2 < p2.dwKind2;/ N8 b0 _5 P! ]1 B7 U* x9 Y
}
G6 a" p/ a3 n0 n, L}
+ P: a" e9 R# \& [1 Z0 B2 U};- [; @! U8 n' c; B
class CInventorySort
: W: w0 j/ ?0 h- ]{
d" t! P1 F, n9 u6 b9 F( ]* O6 lpublic:; \) U6 E! d6 i/ X' g; V
CInventorySort()
* A. Q8 w/ ?- V% p# u; P" A% A{: p5 S* n1 O3 S" K9 t7 Q( a2 o
m_dwPos = 0;4 o( s2 J# W$ L1 M# N: M) z
}; J$ A9 @( p1 }7 B
~CInventorySort(){}
7 x" ~# j- o# g1 ?private:
3 `* p- {, a5 s2 usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 z; Q% _. i* \7 _# E5 [* \' ]
DWORD m_dwPos;
! h: ~3 L2 @4 F) c- r epublic:
7 w& L5 ^- i+ f4 [% J6 p( S4 ovoid Add(BYTE nIndex)9 ?. M7 m1 r" B9 O% r" S$ |9 A
{
2 h1 Z( z) s7 [2 W if (m_dwPos >= MAX_INVENTORY)
! u% p9 I. ?; F8 i9 `- m$ y7 M' o% d {
5 I _/ ~, m, L% D/ @1 O. }+ B return;
0 F) {0 e, B) C4 j0 p9 D2 M( C. T }6 }# r6 E; j, ^! l# H5 t- ^
m_Item[m_dwPos].nIndex = nIndex;
& R/ \$ F( z& p# _5 c5 o; Z m_Item[m_dwPos].dwId = m_dwPos;$ @1 n0 T2 v3 E: ?3 r
m_dwPos++;
$ {8 y$ ?( n8 h4 |* t, E" Z}. [: o' q! z% j) A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* j( b1 M5 V7 w; s9 U
{
8 m: D4 k) k" R" J5 t2 I; s for (int i=0;i<MAX_INVENTORY;i++)
) S. X: f% p, y, p# D8 d# p$ x {
6 ?0 ?0 f+ N1 s, g! \ if (m_Item.dwId == dwId)
5 s+ i- M2 x7 m4 s% }9 S6 ?1 l. D {
. N5 G, K5 t. a return m_Item.nIndex;0 t5 i( A# ?/ C% T$ b( Z+ ?
}$ @: c) j3 ]$ I. x& ?9 }
}
5 }5 x( E3 q7 j" y/ i; p$ g. t return 255;# o( |" h6 G' \ X# w2 Q0 Z
}
W+ O5 Y+ t. v6 C avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& X% r# a/ p+ R9 u D/ j: N+ j
{
" P; y7 G- H l9 @% g- Y BYTE nTmp = 0;- l& g, V" p# y
bool bDest = false,bSrc = false;
$ i9 [: h) v& g. c0 T0 S: q; A: k for (int i=0;i<MAX_INVENTORY;i++)0 L- l3 j' H: U# l" e$ e8 k% n
{
9 Z. L, P$ p1 w. N' U9 K if (dwSrcId == m_Item.dwId)
: J- x" g) G2 I. e( ` {
2 ?4 [+ E' h- e' x$ f& D //id相等 则 改变对应的dest和src
$ p1 J! B4 f3 O. V7 k nTmp = m_Item.nIndex;
; j v" \! Z, Z. S" N m_Item.nIndex = dest;& D6 F) {# u+ |& p, `
}7 p6 y0 P. J7 C, h, R
}5 P/ K5 n2 k x6 ~4 L' ^
//临时数据保存完毕,交换开始& z- N8 w) k- B1 U, u% K3 w$ j$ ]- T
for (int i=0;i<MAX_INVENTORY;i++)/ p' m. n+ A8 F2 P: Y
{
1 L' e: o2 A9 N+ f8 b2 x# Y1 b if (dest == m_Item.nIndex)
( |9 C1 u9 {% |, c {
0 ?0 b! {* R$ U; H0 ?. Z" r //id相等 则 改变对应的dest和src
$ s5 E1 ^5 f* h6 t% b m_Item.nIndex = nTmp;6 a% l0 _: W" {0 }5 \4 @, Q
}
/ ]2 Q# D$ A {9 P }
9 D" z: g2 h* C* }" {% B$ n}
; V" D0 [, t" v5 S7 A. r; I( Y};
1 s/ ]) v5 u/ b) o) T-------------------------------------------------------------------------
% o( M. M" J, h2 Z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; u7 K) f3 z- R( X搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); n& Z& G0 f: r# t$ Z/ j S( n
紧靠其上添加:0 ]: g+ I+ e7 V" \% L) @, Q
if( pWndBase == &m_wndMenu )
5 _& @: T; Q6 D% t8 U6 w0 X{
" S3 w5 C/ ~9 M switch( nID )
' p% J4 x: @2 T* d8 O4 Y {
" X7 n. ^* W9 ]/ e9 [* |% @ case 2:7 X" }) C. r2 p; n
{
/ J3 w5 V) N! ^# h J* M; B' w; L; X //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" C: M/ m, R# R, b& J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" x. q$ Q7 a" a( ~& M' O
{+ G% m( k4 ?' Y2 ?5 s$ o. t$ h) z
break;
0 S. w: f3 t7 Y }2 s& `7 r5 E" G" o" Z4 ?% Y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 W5 a, G0 [* r/ j8 w- W! \
{
! D. P7 T' O+ O# Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" D0 @% F* F% T7 s
if( !pItemElem )) W* Z% q$ B5 n. ?0 Q b
continue;
& M2 T. B# k: ]3 J3 P. H if(pItemElem->GetExtra() > 0)
' Q7 b. |# a3 ^; ?7 U7 ] continue;
1 V- Z. N% {5 G; K8 @1 b7 l- R if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ C' i: e" U5 ` continue;
/ x+ K( ^; W* m- h/ p/ j if( g_pPlayer->IsUsing( pItemElem ) )7 a T8 {* i# H( G
continue;
0 f, Z4 M9 [- f: X( b if( pItemElem->IsUndestructable() == TRUE ): f9 {) }6 F) d3 R8 h
{
: a# V# `) k; q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ T5 C. v' I7 j. y' ^/ B- ^ continue;7 x, k6 ~* C$ F5 e
}
+ m1 \ U: x8 q0 }/ M* r- i4 d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% Z; z1 l, E8 M
}9 O* w6 s' k' `/ s7 i* y9 p4 t! X
break;) U' P# S4 S4 |4 i% G
}
1 M- \: Q; O6 | case 1:
5 g' k! w5 V+ F; H1 r; j) O9 u {% [! M3 J0 ~/ N8 ?3 [4 v
//整理背包 ~4 ~$ L8 @, e. p E
//////////////////////////////////////////////////////////////////////////3 m$ P9 C; r$ ?1 s, H7 q/ ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 X" b/ \- p6 F0 Y9 W
//////////////////////////////////////////////////////////////////////////% g. k+ y' u5 [) w$ L) f
//////////////////////////////////////////////////////////////////////////
6 D6 M6 D4 v, `* d: K4 N+ K' _ CInventorySort* pInvSort = new CInventorySort;
/ I `) a3 r( y% G vector <sItem> vItem;
9 q7 ~# T' g6 a6 H; e# m vItem.resize(MAX_INVENTORY);//初始化大小
3 b# g3 b: I1 e. N //////////////////////////////////////////////////////////////////////////
) l7 k* ?$ W$ B- R; K& N //填充数据
- F# W+ d& ^4 f# P for (int i=0;i<MAX_INVENTORY;i++)6 \ n! X4 W. X
{1 c* m( g% g( w; l7 \" k' e2 S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: N& r# Y# y* J5 a; [ if (!pItemElem)" h( K- U( ]6 g# f; M$ Z7 {
{
5 Y v2 E; v& x! Z vItem.dwKind2 = 0xffffffff;
" z4 g; H( m$ L, i vItem.dwItemId = 0xffffffff;( b. v$ U1 I+ ~3 N+ a
vItem.nIndex = i;) `: Y3 H7 y" ~" |. L, ~
}else {2 M( I$ o2 M2 {: r5 D2 M2 r# n
ItemProp* pProp = pItemElem->GetProp();7 I0 Y+ Q& Z5 l) m" h
vItem.dwKind2 = pProp->dwItemKind2;
) m2 s. e$ R" P$ L! Y; P6 U vItem.dwItemId = pItemElem->m_dwItemId;
. S+ N6 K5 w1 w vItem.nIndex = i;# V" N" q p) K% ?8 q
}
5 W3 b1 ^: o. E8 ?0 F //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& i1 ~: T9 Z3 a- ~2 v' K }+ f9 G' d8 F$ s) I
//////////////////////////////////////////////////////////////////////////- s' G/ N" }5 g
sort(vItem.begin(),vItem.end());//排序
7 w2 S' O2 d. J //////////////////////////////////////////////////////////////////////////
$ S) @% q M( _ //交换7 P1 E- U! K8 j" O& m( P- C. r
for (size_t i=0;i<vItem.size();i++)0 s! |! z6 |: U( R: |
{
; L3 V! J5 f4 _7 J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, ?& k% C! R; S
pInvSort->Add(vItem.nIndex);" v F6 v Y! S1 A* g: `
}, F$ a: ]+ m( d9 \) B
BYTE nDestPos = 0;
3 l- K" p e# P for (int i=0;i<MAX_INVENTORY;i++)& j# s9 ~4 i8 M1 t+ S/ K5 A
{8 p& K! }$ E+ V- y# q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
[2 E6 ^: D6 |0 ` if (pItemElem)* T' S- F2 l# h/ r
{
8 ]5 O' o8 P# O, n4 x" T if (IsUsingItem(pItemElem)); Q2 G( t2 O# r2 T
{
8 F( v# i" ^2 {' v //这个位置无法放% H. P+ N4 F' d6 P0 i2 W' Z
nDestPos++;/ w: A" D) J) K6 z8 w. Q: f
}; K& z1 y6 }4 ?. o7 e4 ^
}' m4 W) D Y1 P+ i5 y& l7 @
BYTE nSrc = pInvSort->GetItemSrc(i);1 Q: j. ^" i3 |" n: I. C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; X# ]+ @( ~: j4 H x% c" J" H
if (pItemElem)
; }# V5 X' }) [+ T& a {
' w2 j5 Q6 Y1 y8 I L if (IsUsingItem(pItemElem))
( Z* t8 F$ {1 {9 e/ t, @" l {1 _3 d/ o5 [5 ~
//这个道具无法移动,跳过
. f. ?9 Z; o/ d% y( @ continue;
- ~# g6 L; L, \+ w. J9 V: i. T }% l; X3 c4 n# U1 d
}else{ ], W y1 t0 P% g
//空位置 不用动+ D% {- t0 K8 K0 R% [3 c2 c; [
continue;$ `. b2 o' c$ Z; j8 z3 t
}
3 Q/ _. {' S; L! x. w- v" ~ //////////////////////////////////////////////////////////////////////////( p" P2 L0 H8 k
//开始移动! l/ d l; [2 N
if (nSrc == nDestPos)
8 X; C$ l8 B- e: ~6 u6 ?! Y% x {
5 V/ E% c0 V" T5 S- Y //原地不动
- ^# {4 {, ?7 v E8 x0 a5 m2 o nDestPos++;
* l- h" E% d! I3 z/ ~ continue;
+ Q7 X) A- f. A1 @$ x/ |9 O/ u& B }2 p9 Q& K0 {/ L
pInvSort->MoveItem(i,nDestPos);% {& G1 O5 A" T9 h9 k& Y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 Y+ I. H; |4 _! M1 P4 L7 L
Sleep(5);) H' D" O) j) y- M* t- |
//Error("移动 - %d->%d",nSrc,nDestPos);
8 b/ G6 ]4 L9 w nDestPos++;# v6 j5 A2 ?; I. D4 U5 R9 p' X
}5 V. V& Y+ {, `) d6 n# D: j
//取第一个元素的信息& s0 M1 l" E' y" h$ s1 |
/*- o7 o" A' V& ]: i% |8 S+ [2 ~1 J
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: {# q1 d2 w" e* S% |: P3 L {
4 T) p5 S v x/ H9 w. L; } u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" [8 v6 J% n8 j! V4 j( ~; N5 U3 } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' B5 ~; }, R- S7 l5 \$ [# m
}
% c8 R1 s( _! J0 n0 \ */! e3 o/ u+ y3 G R; d$ ^
//////////////////////////////////////////////////////////////////////////# M3 t6 `4 c+ S6 ?3 t
break;
4 k0 y4 t% F4 n% U/ F }
* K. y2 \. }9 q5 U8 ]: C } % ~! J0 i% i& e5 G/ \, D5 p4 ~
}
# p2 ^/ Q5 j, E9 V5 lm_wndMenu.SetVisible(FALSE);- y f& Y9 [! s8 r( _+ ^# k% f
; K4 @7 Q- Q+ X
--------------------------------------------------------------------------------------------------------* V8 h# j8 q' L% H+ ]) {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# d8 z2 _+ ~8 a4 _; O{: F$ T3 D# _% |6 @* c- f% ~7 y
BaseMouseCursor();
+ b+ q+ g" y( e- W& {! [4 ~$ k}& D: M' {/ f* m" r; ?
在其下添加:
0 p9 r% C3 ^2 avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ ^/ u1 |9 [9 C n: ^{
) P2 f3 Z- J$ ?5 F& c8 h1 Z2 v& ~! P5 Gm_wndMenu.DeleteAllMenu();
+ K$ v) a% f. ?' sm_wndMenu.CreateMenu(this);
7 Y$ c" D& ]/ Y7 N- E/ k6 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); q, H" K+ B% f
' O( D ?$ h" \4 U8 P* I6 U: v, L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
[5 P% [- k9 d/ a7 I- J- y8 a% A{
$ E8 m2 c& \) _+ l4 A5 n //P以上级别才可以删除所有道具6 [% @. u% F9 T* t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( j+ p. T# C' j+ X8 M# |1 s% e* b' B}
% T9 w8 C% @2 F8 Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 n; v9 \% q8 ^
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& s" i/ o( R2 x0 U' @6 G. E$ Y
m_wndMenu.SetFocus();
/ w3 _1 d2 U6 p& d \}/ P2 n/ B. Q) g' J2 D/ f0 l! G8 H
------------------------------------------------------------------------------------------------------------% p2 j {4 o! {, u* i& d& B( S
*************************$ U* A6 z; _" B1 L
WndField.h文件6 i( ?4 u4 \& [1 i3 r6 `
*************************
% T$ j ^4 w0 S2 }% y0 p' p! U5 g搜索:BOOL m_bReport;2 o' Q; G5 v. B6 p; ^+ j
其后添加:
0 f) V6 V6 a hCWndMenu m_wndMenu;& {- Q7 f% k! M& O8 Z! _2 t6 B% f
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; G5 v1 }) \, n% d其后添加:( {, Q7 x3 p! K$ N
virtual void OnRButtonUp(UINT nFlags, CPoint point);
' ?$ \. f0 s& i# x+ E5 _3 x
) A; X9 z& r/ c1 _0 Q' t
$ v3 \0 u0 }) V |
|