|
|
源文件中_Interface文件夹下WndField.cpp文件
4 U: v i2 n$ U9 D( ] x搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 M( n& H5 n' i, j( Q X) x$ F
/ f& ?+ o `6 L6 v$ @& O
struct sItem
, _% l' d% ?9 l7 X" _8 U @' Q; c{+ R$ x/ Q% I* f7 s$ o6 Z
DWORD dwId;
7 Q; d, Z. J) |3 XDWORD dwKind2;
0 T0 I5 u3 a4 S% D; g7 o# j$ r2 D% @DWORD dwItemId;
' ~. F- g0 P' l+ G+ k% ^$ ?7 DBYTE nIndex;
: F6 ]! |5 t9 F) J7 GsItem(){
' w% C' p) Q5 p. Z dwId = dwKind2 = dwItemId = nIndex = 0;
" _' W. s, `' l; J/ O}4 J$ o2 l" c( c
bool operator < (const sItem p2)
1 S& F v4 l; q{
5 f) R6 c, @9 B% i0 v8 A6 p if (dwKind2 == p2.dwKind2)( d, O' `1 e, r
{# D' u& w! ?) [2 r, e* Q, s8 j" k
return dwItemId < p2.dwItemId;; F2 [! ~1 z& b# u* G- u( m
}else{
0 ]7 j7 ^( W6 [% S& c return dwKind2 < p2.dwKind2;/ b) p% b$ X/ `
}
7 f6 X3 p7 g) D; @}, C. X4 `9 L- A) c' P! E
};
# V; A4 W. p$ i5 Lclass CInventorySort3 n* u. [4 c- }0 k3 E
{
! R( S1 g n4 P$ B1 ipublic:
& [5 F8 F* k) ~CInventorySort(). d# d0 o3 ~, U- U6 c
{. z7 J8 L( X/ e2 o t
m_dwPos = 0; P$ e% H$ |( G$ }, H0 o; T
}
$ x: c' v! R; ]9 n~CInventorySort(){}( E7 X. ~0 V8 Y6 ~
private:
8 B# m2 l7 d6 H/ x s! K% ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 L, V, Q1 a8 r' r- h
DWORD m_dwPos;
# y5 B3 Y6 s4 P7 m; M! d5 [public:
$ ]" q, p7 D: w/ h0 nvoid Add(BYTE nIndex)
! N# f" x) X6 \% C; ~{
6 k' h0 }3 Y0 E V7 A9 I if (m_dwPos >= MAX_INVENTORY)
; r! i" }0 r: r. ?. r- C! D% e {2 H) z* B7 L) m( k+ F+ n
return;. F2 U/ @* J, r7 X, f" O, K2 N
}
7 x% K( r* Z ~* ? m_Item[m_dwPos].nIndex = nIndex;1 z8 r$ ~+ D! \% P3 l0 F* W
m_Item[m_dwPos].dwId = m_dwPos;5 [# J" k. x0 \
m_dwPos++; u$ N2 U3 Y/ Z; N( ?
}
5 Y0 j; k2 _+ A: ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* A, o8 w5 F, u E
{
: q) b2 J( F5 a9 x3 C1 f for (int i=0;i<MAX_INVENTORY;i++)3 F6 C \9 Y) u g6 T
{
: l |" v$ ^8 ^# G if (m_Item.dwId == dwId)
, C y+ s' [8 G2 q {
5 J! Y/ Y5 d$ j; r; z return m_Item.nIndex;+ I1 p, c* o# ^& a$ v
}, E( ]/ e. D# M/ j2 ]) h
}
5 n1 R! E2 b# ~ B return 255;3 A& h$ x- A; @2 t
}* N/ B2 U) |8 C: F
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; r5 y2 m: W6 ]{
~2 \; U5 S3 Z: H! n+ ` BYTE nTmp = 0;
# L9 ^( ]8 l% r1 U+ N" e, W' I bool bDest = false,bSrc = false;; T% Y9 s% q7 w. P5 Y; R) {
for (int i=0;i<MAX_INVENTORY;i++)
! r/ |- \, Y0 D7 }: D* O {
" e( J! S5 c- t: T9 F9 ^" \ if (dwSrcId == m_Item.dwId)/ k6 ]- E) \1 {$ E, _1 v: j
{4 ^8 ?7 i, F( j. f- }+ A/ A
//id相等 则 改变对应的dest和src
) e# J$ J0 f; P- N* G- A nTmp = m_Item.nIndex;% C3 n7 t6 b& h* |
m_Item.nIndex = dest;, K1 p! Y% J6 O' T/ }* a) P
}* W* a3 _8 K- T9 n
}
% v9 r9 s4 S2 J( v //临时数据保存完毕,交换开始( C* ~$ t+ Y% X2 c" z7 Q c
for (int i=0;i<MAX_INVENTORY;i++)
& f* y4 j$ `, X { W- _% \% ?+ e' t2 p b. }3 o
if (dest == m_Item.nIndex)0 o3 V; q6 d+ ^3 R4 ~* A
{% X: e F5 X6 y
//id相等 则 改变对应的dest和src
" ]5 B- G# h2 G- Z$ B* N m_Item.nIndex = nTmp;5 L/ q6 N6 N6 z1 z
}
" `5 O! A! k$ Y/ m% C; P2 I4 r }$ H8 K0 Y% ?6 n% G& p+ H: R
}
2 O2 ], K, m0 B" {};8 O Y2 U/ b/ U* P
-------------------------------------------------------------------------5 y/ U; w; M/ a s6 w# A8 H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ F% l8 B" t% g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 P } Q% s1 V& t: Q
紧靠其上添加:
6 i; r! K- }% P, E fif( pWndBase == &m_wndMenu ); O+ Y+ F( S6 ]. a! _& n1 L
{; E) s2 O( A, f
switch( nID )9 E* O& p1 b) f* x; T1 Z3 G
{
9 F* |* h7 v" m# L case 2:0 y8 ^* F( \2 q( {3 \
{$ C5 W `) \) n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. l5 |) I& |) P. D3 l; A" O if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' c" u) W1 a& ?& X {0 @) X5 c1 W/ q* C8 q0 [$ z8 ~
break;8 T/ \0 b/ q7 ]. X
}
0 ]# N- c8 l- n- V1 Z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 F- O7 K+ J; `6 y
{
. e! h7 j' J" R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 C% U1 c0 V5 z
if( !pItemElem )
. Q7 U% ], n; d) i6 F continue;
- e; A- t; u; ]; H0 O/ s1 O7 l if(pItemElem->GetExtra() > 0)
- W5 \% c% r0 O f$ a continue;
V, u8 }( @' [: u if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 ?6 H5 c, |2 q continue;
) K( u! [% O% Z0 B h if( g_pPlayer->IsUsing( pItemElem ) )
3 F4 M1 q; R9 V6 v* Z6 ~3 h4 e& X# b continue;
. h8 ^% o; v0 m2 i& Q- {2 _+ M4 i if( pItemElem->IsUndestructable() == TRUE )
+ p1 N* e( b. d6 V# G6 ^* ` {
7 C9 \( @; q/ s y- S) b% e1 D6 v; w5 ~% ^ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- I3 f* o7 E4 W* ?
continue;
; q: ]; Y: g8 E. t! ` }$ j3 ?+ m( |% N6 c5 U( M4 Q
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) ?2 I. Z% u% V! L4 ^3 U }+ E# G6 q& O/ G' J, N. e6 O5 Q
break;
! x" g& |/ c1 q2 B( g3 { }8 g) ?. C1 S- }1 Q; l; G5 T
case 1:
4 d% u, J3 @8 I' a& E/ ?. y2 J {* M: K( v1 @$ d" L, E3 S
//整理背包 ~3 Y# t, k# h+ Y7 g' _
//////////////////////////////////////////////////////////////////////////
2 }3 h$ }2 \9 o' ` //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ V! u- W- I' ^+ v$ t! a1 f4 b$ [ //////////////////////////////////////////////////////////////////////////
- Q3 Z" @3 r1 U" a //////////////////////////////////////////////////////////////////////////
- U' C w/ _$ N0 u& w1 j9 \: G) t CInventorySort* pInvSort = new CInventorySort;, ^0 r0 C5 C' C3 B- D
vector <sItem> vItem;8 P: R# y0 O+ \; A+ F
vItem.resize(MAX_INVENTORY);//初始化大小
+ @0 s. z. U2 P) w. k //////////////////////////////////////////////////////////////////////////
t$ _9 f m+ H6 E //填充数据8 A0 o/ @/ J2 u* ~
for (int i=0;i<MAX_INVENTORY;i++)
) H& O5 G; \/ q* @' C {; ]0 C+ r4 `0 y* ^) c' {5 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 g" ^5 t/ W* i
if (!pItemElem)
+ C/ i m# {! w2 F {+ v; M1 P: G0 D7 U4 h0 B z
vItem.dwKind2 = 0xffffffff;! \( T5 _! W7 u" h- |
vItem.dwItemId = 0xffffffff;$ D- ^9 ~2 W4 y# x# E5 i
vItem.nIndex = i;
9 s( z( J' w$ B }else {
5 i6 e8 Q: Y2 _# [% C ItemProp* pProp = pItemElem->GetProp();
& `3 o, R. O7 ?* y( i) Y. a% x vItem.dwKind2 = pProp->dwItemKind2;1 u5 S- x' G- @, a, O
vItem.dwItemId = pItemElem->m_dwItemId; V. k4 I$ o) L3 c* N
vItem.nIndex = i;# w2 f; W7 y9 v6 ?
}, N$ a, A! ?% F- l h- H: k% R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 e/ L: |2 `7 b+ q9 Q) z }
8 o, p: F8 u( V& \4 [ //////////////////////////////////////////////////////////////////////////
! R: @$ Y8 h9 x0 \' Y/ \( G- D; e sort(vItem.begin(),vItem.end());//排序/ _3 F# |7 a, |$ `1 M
//////////////////////////////////////////////////////////////////////////4 c& c8 K) u9 M+ x5 P: b0 b1 T
//交换
$ V$ S) P' H) x6 U0 k) H6 X# W for (size_t i=0;i<vItem.size();i++)
; J+ n* x( p, } {
2 M% ?8 i. r# R X; { //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- r! Z" t9 ^4 Y+ H# | Y pInvSort->Add(vItem.nIndex);
/ Z, M7 z9 g% M/ M. i }
; u# B A$ K% D% ^- `3 G BYTE nDestPos = 0;
. e+ g, j0 O$ U0 P for (int i=0;i<MAX_INVENTORY;i++)4 L" C: N/ e" x6 ~2 \# i/ b4 D
{
4 l+ _/ F7 g/ M. f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 O- `; H# w0 G' ]0 Q9 L# _$ H if (pItemElem)
9 F* m3 F {0 K1 u5 \ n# R {% u5 B0 K/ F! Z* M! z
if (IsUsingItem(pItemElem))* N# e8 m, \/ [8 d; Z* C3 S7 s
{5 E; ^$ A! M- C4 U& y
//这个位置无法放
, v5 q5 ?; M# M; H5 S nDestPos++;
& U$ H5 O( [0 _' m/ U$ ~ }4 y5 s, L2 u9 A) o5 ^
}
( n/ V1 n9 d; x3 @ BYTE nSrc = pInvSort->GetItemSrc(i);3 \) T; }/ _7 ~) V
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 ], W$ H6 V1 Z# E5 u if (pItemElem)5 j: J( W7 O* Z. Z
{
1 I3 J- R9 p2 X if (IsUsingItem(pItemElem))5 N- F% V$ N4 u$ u7 a# l: {; L
{8 y7 S( N0 w, }" Q3 R
//这个道具无法移动,跳过
+ V) w6 O% p. k( b, D8 y8 A continue;5 X3 V2 [; S; {+ Y6 q
}! W: r9 ~- y$ Q
}else{
* |( x' E+ e4 ^ //空位置 不用动. y; V1 I" I0 C6 ?/ W! [( z, r
continue;: n5 t) p B( N, ^5 r
}. @$ I) S- [, p% `& x/ a7 i
//////////////////////////////////////////////////////////////////////////
# U: B; n0 |% X1 ^0 ^, X$ R9 {$ q //开始移动
& V3 U, M* D( g if (nSrc == nDestPos)
* _# T0 I; H! B# s {
! T7 ~) e: K. F0 `# V' r; u //原地不动8 H, l V% \8 k+ E/ U* s
nDestPos++;
! V7 X% _+ ~) W4 g5 {3 H continue;
& Z, G1 E* Z# N5 E5 o2 h& w }
* F' C6 b" X' ?- \5 m pInvSort->MoveItem(i,nDestPos);7 E; w( j! g% e9 [# I6 ]2 K
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ L9 V2 d+ P* V1 M Sleep(5);
% n D/ e& q; s' Q# h1 I) ? //Error("移动 - %d->%d",nSrc,nDestPos);& {( V7 E7 k) _# |
nDestPos++;- ^ h, R( q% g# P
}
j: [: j( k) k& y //取第一个元素的信息
4 H5 [9 k | ~' C" R% N% j* l+ C& i /*9 w' T# d* F0 p
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& c0 c1 s+ Q0 {5 u3 u8 _+ z& s" u4 ~ {9 W7 k7 m6 v+ u2 j- ^0 A) q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 b- \, ?# J0 `" U4 O- v% g7 U% T
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" L1 ^9 ?! m F; A
}3 q: {8 D8 i$ j+ j t2 d
*/
& o- S3 A8 t& i! D //////////////////////////////////////////////////////////////////////////# Q* X9 W/ P* H: ~* }: G P3 i
break;8 D7 U1 o7 A8 s3 g( }2 q
}: y4 E, q; N" f+ ?
}
, G# M) S! _7 J9 D& f}% E& N- M. L! B
m_wndMenu.SetVisible(FALSE);3 c0 `% Z% y2 [: u
& f. n; z/ G1 \/ t- U/ F* @ R: C
--------------------------------------------------------------------------------------------------------. ^0 q9 _$ r5 S
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 n4 P4 [- ?) }3 y3 Q2 z$ {{' r; t0 j! n3 r
BaseMouseCursor();. o% `4 p" K G3 q2 z
}) @9 k: V3 v- A) T" W9 F
在其下添加:
# }4 K3 q/ m; K( C0 Ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 o( |5 t. [6 |. k( j4 Q* i j3 w. _4 G{
7 H0 h% V" {2 T: ^2 }5 [1 gm_wndMenu.DeleteAllMenu();$ o; ]% o i. \1 D. l5 O
m_wndMenu.CreateMenu(this);$ p* v& N, j2 y7 n& @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' T; K% A r, Y8 P) s$ z
9 S/ A ?6 V2 n* V& C: Z m# G8 Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* ?2 n; K. Y, H4 n- P{4 C& a9 Z2 d \ e3 g
//P以上级别才可以删除所有道具/ Y) H$ R9 [; ^: j- T% l
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ E0 @3 Q8 t& E
}2 X H% V3 h0 `* l4 j% G$ ~
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
F6 _5 m' G7 x& F2 tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* N* e2 V, u/ H* s( p5 a8 C
m_wndMenu.SetFocus();
1 @1 w) l/ n' D$ |, M. e2 F0 N}
( m) S! I% Q' T1 X+ |------------------------------------------------------------------------------------------------------------
) w# t; ^4 o, u/ E*************************
: z* X% ` ^; T* X( ^5 {0 m9 }WndField.h文件+ R4 o) t2 J; [. i) a" ^
*************************
4 M) ]- c' R# P) g7 X+ [2 s搜索:BOOL m_bReport;
) m+ o( W3 I2 T5 \其后添加:; T7 G2 p+ M8 f. A; L; m- `. x
CWndMenu m_wndMenu;
/ S ^' u6 ]9 E v( i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; C; x% ]6 I) v/ Y8 P- E0 D其后添加:0 U# @& m4 ~* j6 {+ R
virtual void OnRButtonUp(UINT nFlags, CPoint point);4 |2 S( G; g: x; N/ L5 ^
) @, G. o* P0 S) c' B) i3 k/ n
# N4 [, V$ W/ n% x9 O! \ |
|