|
|
源文件中_Interface文件夹下WndField.cpp文件* S z% G+ q1 H& Z: Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 M( N1 @' H+ [+ g: q$ t8 {6 O3 _8 H8 L! l% o
struct sItem
. V Z2 Q) n: O1 Z1 k% `{+ X6 p1 e# L3 f4 P: W/ p
DWORD dwId;' L8 }% }# H A2 e2 S& [) K
DWORD dwKind2;7 C" o. R! P: y2 \* f% I
DWORD dwItemId;! `9 v# z7 a( u( [* c! Q) Y
BYTE nIndex;
: M; I; s5 T6 I/ ^' p: K$ {sItem(){$ ` {/ h7 I4 ^* O! w2 q W* b
dwId = dwKind2 = dwItemId = nIndex = 0;5 Y8 J7 z8 X8 O. u
}
+ j l2 K: w, D* F7 Ebool operator < (const sItem p2)
+ O d# Y/ q: C b3 K3 {{
9 g4 j6 e1 `8 y! |" ^ if (dwKind2 == p2.dwKind2)
7 s/ u3 a% w0 X( T/ o, [" Z {
7 a2 D1 n1 d* C5 \* m return dwItemId < p2.dwItemId; d! L' o5 ?6 H' l) h* k$ E m
}else{2 _ p: h$ a% y/ b" T5 [+ p
return dwKind2 < p2.dwKind2;, M; ^4 \% y7 I) ]$ `
}
7 c" H+ Y& X, S- P( Z- w' \' A}
- N- G j- s" v* G" h) `: \};
7 Y! h6 L2 l1 L4 Kclass CInventorySort
) | P! B9 L0 K6 f l{
/ ?0 d) D/ q/ M8 Q% opublic:, ]: F" |+ k& T9 Q9 s, U0 L' u9 S: r
CInventorySort()5 x( v H8 e# S% I, M/ G0 _3 u4 ]; @
{
* o# p/ S0 s3 x m_dwPos = 0;
, ^. S5 ]0 Q0 D; Z, E9 [4 e}1 r" V) o% o! l) `/ f4 q- Z
~CInventorySort(){}- K( [3 J& j% @7 D
private:
' W. M6 J7 K* }* R* lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: h# |( H$ J5 E E7 f. f" P( CDWORD m_dwPos;' ?- `! a: _1 c# p3 ]' k
public:
: \& J% _+ n g7 n2 Pvoid Add(BYTE nIndex)
" C" A) U( s, o0 U& E/ A7 [' _1 P{$ ~, m3 ?& Y: y" ~
if (m_dwPos >= MAX_INVENTORY)0 Z+ ^1 {6 f6 s- ~
{
~% u6 D. b6 {1 S; t0 ?8 N6 J return;& D) S0 X( s1 c* j, c
}8 D/ m/ q u- Q" |; @* D! q
m_Item[m_dwPos].nIndex = nIndex;2 b& K: z1 E5 [& N6 ^
m_Item[m_dwPos].dwId = m_dwPos;
3 F9 q/ }% |$ A1 U+ i1 D+ u& j5 h m_dwPos++;' ]1 [1 M Y! g" s( v! d: @; C6 Q
}
! Q0 t. m9 a( g1 G, u$ g' pBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: A* G- H- |! @( M: H5 \) M{' ?/ C& P( E$ g, A; e
for (int i=0;i<MAX_INVENTORY;i++)
, o0 u4 j0 I; {7 u- z7 Z {
2 F* E% _1 L* l4 J) g if (m_Item.dwId == dwId)
% ] p+ w6 U. ]* e& s4 q f {
; N; M5 o* e5 ]" ~( C return m_Item.nIndex;' X' x+ Y' s+ J/ K0 p* {
}
, z. b8 s7 }$ u" _) b }
1 s% Z) T9 E% n return 255;
4 y+ y! X8 ?2 B}; m. ]2 ]7 X# O; z& q3 [( }& z$ ]5 Z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" v# v% E; x# Z3 l' k{9 @1 p* ]4 Z; D$ I& @
BYTE nTmp = 0;3 ^* _7 ^" H. r* g/ V: D o
bool bDest = false,bSrc = false;
1 e: q* w4 a- g) m% M for (int i=0;i<MAX_INVENTORY;i++)1 t6 s% t) g+ Z
{
2 d2 y1 e+ J1 V+ D1 \* b if (dwSrcId == m_Item.dwId)
/ `' T4 m; \+ l& q6 K7 J {
7 u( q1 ` o6 w6 \5 ?$ k //id相等 则 改变对应的dest和src6 O* \/ P* `; W$ K! ^: N- x# a
nTmp = m_Item.nIndex;
# P2 }, h2 Y9 F' R m_Item.nIndex = dest;
0 O l$ K2 t1 _& @- a* Q3 m& X }
. }$ j+ [( i6 F6 m% N }
: I' Q# V8 l: Z0 m; j# u //临时数据保存完毕,交换开始) O K. I+ X# n* M% G7 p- Y
for (int i=0;i<MAX_INVENTORY;i++)
8 X: E+ x" m' ?3 n% i0 U {
A3 [" y' i, I+ _1 ?- U+ y3 E6 } if (dest == m_Item.nIndex)
5 L- M* ~% ]: _& M {! a$ J9 Y* U0 C9 B* w' k; S+ M6 l
//id相等 则 改变对应的dest和src( R$ F$ J) r2 g! A4 a7 s
m_Item.nIndex = nTmp;4 Z: w2 d7 \1 U1 k9 q! }
} d' d9 F7 c" @/ v8 t$ N
}/ a# F8 V$ v8 J: W
}
6 n% |; _, c3 ~2 a7 Y};
% c9 u* G2 O1 S% s-------------------------------------------------------------------------7 S5 _/ Z/ J G$ V1 w( v/ {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 [; X9 P7 j7 L& ^ s搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
3 W: P F f+ ?- A0 n紧靠其上添加:
9 O2 N$ z. n% [if( pWndBase == &m_wndMenu )
1 [7 G# e* Y2 e; S2 q{
6 X' S: I7 P6 b. M! { switch( nID )+ A& z4 c& y+ e$ t
{7 p) _/ X% Z% U6 E0 s$ d2 z, B" {
case 2:
( {- Q( J; y( q" A7 K: o) B {
/ o5 k" X' N0 j! H) c d //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 `& L' O. K' J2 w/ T6 |9 i3 E( a* V
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* i) o. J3 J# K8 V3 T* m
{ k G+ y% B; t
break;
' K7 m2 h K% r# O# y7 F! d }
5 j0 P2 e3 A! H7 F* H' Z0 I) L: P0 X+ Z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ `4 z/ |1 \5 e+ }: F: u2 e9 _
{
/ }- X8 G1 R( |0 `& Y6 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ w' o* F# v+ C% A q/ `/ h+ z' u
if( !pItemElem )' p: l0 u% D( X: Y3 M0 g
continue;
o% i3 r- }: K G$ f/ v# t8 S0 ^7 Q if(pItemElem->GetExtra() > 0)
5 Q# G9 s. `" Z% P: J continue;
( P0 c7 }; D: a( k& d if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( c; m+ c* ^) Z: K continue;
" B7 a d) W8 P7 B" R% Q6 l5 k if( g_pPlayer->IsUsing( pItemElem ) )& n) I9 f' k6 E, Q r# h" V
continue;) }$ |3 s4 K! W0 H
if( pItemElem->IsUndestructable() == TRUE )
k& Y( u' ?1 a, K7 U0 M: b {
7 i$ v' I) _& W7 Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# T, X' S2 e0 j
continue;
1 F% S6 Y3 d# C! k }
5 b1 g7 b0 |9 O0 W( X0 | g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; H! I- q4 |6 a- e7 _ }
1 a6 d0 [+ H, v* u% O: \ break;
3 P8 p( Z2 N& H3 m0 \ }: S B. C0 p0 u3 ?- A" K
case 1:
! S+ |; h* j! P' q, J/ m/ r {
5 z0 Y& i3 E( E //整理背包- b# D8 x& u5 w' M& Y5 t+ D' v2 v
//////////////////////////////////////////////////////////////////////////, o2 H& ]& H. a/ b5 S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
$ R) V$ h) m T1 r2 e9 y; Z+ s //////////////////////////////////////////////////////////////////////////
" b3 F( R& o4 i6 } //////////////////////////////////////////////////////////////////////////6 Y# O9 h4 j: g- z6 V- _5 d6 Z
CInventorySort* pInvSort = new CInventorySort;
1 R2 Z4 {, [) M- q3 o vector <sItem> vItem;3 P' C: W' w9 J* _
vItem.resize(MAX_INVENTORY);//初始化大小, m. n9 T8 |3 R1 P3 A
//////////////////////////////////////////////////////////////////////////7 a5 C W1 K" ?/ ^6 v# D& V
//填充数据+ V9 s7 |) O/ w# n6 b+ x9 U
for (int i=0;i<MAX_INVENTORY;i++)7 t' m/ w5 y( O% g( \* ^1 F$ M9 g7 A
{
! Q( D C8 L# O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; ~; A; G8 i& t1 u3 l" m$ k if (!pItemElem)
0 T3 |# R( C, ~ {
8 G0 P5 E, C% V5 Y# ^& z9 @ vItem.dwKind2 = 0xffffffff;
5 C6 k/ {) `1 j4 T8 k, c6 |/ s vItem.dwItemId = 0xffffffff;
! I5 B, O8 y7 K d: V vItem.nIndex = i;) w. @( H8 A) c
}else {
* n- _$ S2 N8 b7 h$ f7 _8 J: O ItemProp* pProp = pItemElem->GetProp();
: S! ?2 w' D: P+ Q6 I1 d8 u vItem.dwKind2 = pProp->dwItemKind2;2 E( V. [, y9 x- U$ v5 P
vItem.dwItemId = pItemElem->m_dwItemId;# j7 L2 p: _- l- `+ y$ n1 j. d
vItem.nIndex = i;
- y# p# x) q. V! | }5 E" ]7 x( W0 W9 B1 Z U7 }$ P
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 o e; m0 ?9 W) ]
}
, T V7 [' v+ } //////////////////////////////////////////////////////////////////////////2 J* y8 i( i# l3 b
sort(vItem.begin(),vItem.end());//排序
# o1 z. w- t/ X z+ x //////////////////////////////////////////////////////////////////////////
. m& r8 [& R0 O4 T4 p //交换8 l* P& j2 Q2 [: c. G& p
for (size_t i=0;i<vItem.size();i++)
' U$ S) D N' H2 w0 z9 y {- e q& G' \' h! a8 C, ^9 H2 h
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) j8 v; p: K* u6 ?! |& J
pInvSort->Add(vItem.nIndex);
. z( v% J; W% S; S }8 D( M/ P7 v9 x$ c1 r
BYTE nDestPos = 0;" J, v+ a3 V! L# Q
for (int i=0;i<MAX_INVENTORY;i++)
( L* c$ i3 s# s. @- | {6 M( q# _9 w) K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ x7 M: y8 r3 G if (pItemElem); H- m; b/ [' N' K' C
{
- r% l7 r/ Q" o J& A if (IsUsingItem(pItemElem))6 q7 I4 x# I) g" j# k3 @, v; f- K
{
6 w' \2 ?, e) X% O% O! \8 _' S3 T" Y //这个位置无法放. U0 j% h, f) r+ @% g7 {
nDestPos++;- q+ f- E% E4 O. P D
}
3 }; U. M; B1 ~6 s. T }
, e3 W/ W! i& @, m7 g1 F BYTE nSrc = pInvSort->GetItemSrc(i);* f! t. L: S4 U% t
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! n/ s9 r7 K) B# ^ R# C
if (pItemElem)
2 p" J: G @: ]- U$ N( k {8 }, `% y/ k) k0 w9 o/ l* _4 m7 q! d7 y
if (IsUsingItem(pItemElem))1 `" }' U$ o7 O$ ~6 c
{
7 z3 k. P3 }. a; o( e //这个道具无法移动,跳过/ i/ F# v+ c: [
continue;) } U% {$ u' y! J2 O' p4 f
}
* U) P' S/ Z; ]# [" H; J: e4 Q' w+ j }else{5 n3 R; \- l( ]* [
//空位置 不用动' D2 H) b8 p, U* K) T# e5 z! d; ~
continue;+ p+ K- m! _0 v+ h- i3 f) q3 |) M' \
}( y; e1 }& Z1 C; O
//////////////////////////////////////////////////////////////////////////" i' S5 L1 D/ v0 }- Z* {
//开始移动9 x& d" B& S% A
if (nSrc == nDestPos)
; J0 E4 @4 A( Y: [( @* X {
* q* g& @ z6 p# A/ Y7 o //原地不动
/ I' K/ G U$ w" g6 ^* N( Z nDestPos++;
, \: w) G- N/ }# v) B( ?' Y* N1 G continue;
, M. {5 {3 D; p8 R2 y }! y5 _, Q+ g7 x8 s9 e
pInvSort->MoveItem(i,nDestPos);
8 z# C9 J/ Y7 W8 ] g_DPlay.SendMoveItem(0,nSrc,nDestPos);- F4 @5 S& ^3 ?6 ?6 \! ]3 a
Sleep(5);* |: r4 E. X" R) R1 t& A3 a7 a3 e
//Error("移动 - %d->%d",nSrc,nDestPos);
" [+ v8 t2 e) ^/ M L g- x nDestPos++;
) h. C, E% q% V5 ]4 k0 u: k( v }
, i) \% ^ V6 l8 {4 ? V& x7 l" X //取第一个元素的信息: a0 H* f8 G1 n+ o, Y
/*( ?$ j: y" A. R2 B9 v" ]+ Q9 @0 \
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: P0 {6 q, R9 q4 \# @ {
) M1 k5 Q4 g9 X9 M* w: { Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; ^6 V) E9 R8 e5 e/ G% t, b7 y0 p( r
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' Z, ?9 k' h( ?* a! `6 `
}0 q8 d4 a9 J! B+ L; i1 y
*/
* Y2 e0 i. ^/ T //////////////////////////////////////////////////////////////////////////
. P/ I1 f0 v% i, L8 C# C3 I6 B break;5 s! d% c8 }( ]) {
}
. }- X, J+ j/ y- j* V } + o% [% C, x7 z& \6 Y+ r9 K
}
' G$ X3 m2 T: _" B" ]; lm_wndMenu.SetVisible(FALSE);
3 u: P( v. N7 k! v3 A! q M
' | c6 J* M# j) T: f& C( B" L--------------------------------------------------------------------------------------------------------
! Z. w1 `; O/ z7 C9 w" ^/ V搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ m9 L: g4 r4 z6 m/ w
{
5 P$ u9 }+ ?$ Y# {# q. T& L8 s8 @/ N; UBaseMouseCursor();
+ X; [( O2 F I" M5 \6 \% G; x}/ { R7 C5 u/ C$ ~
在其下添加:& y! \* `2 E2 d0 T7 j5 d
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 r( D( Y6 V/ J3 k0 d$ I{
! y6 _' s4 [9 y1 @" am_wndMenu.DeleteAllMenu();! o% [& @5 J8 Z8 C
m_wndMenu.CreateMenu(this);4 Q5 ` ^0 v; w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) r6 O( o- [3 Y# _
/ y) h* c) L& e: G3 j/ Eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* q0 }+ L. ^2 o& r1 m, ]! W' M
{3 ]3 I+ ]2 b! g w( \9 V
//P以上级别才可以删除所有道具
9 j) H5 Q7 N* P, i+ C9 r- d m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 i- z8 c X6 p$ w
}0 D$ r1 l3 I% q+ d% q( X/ G
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( P1 @! w+ N1 x! A5 km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% L+ B% R* {4 z* [% p. }
m_wndMenu.SetFocus();& l" j6 m) ~! I. W
}7 G- A8 J/ ~5 U' |9 c
------------------------------------------------------------------------------------------------------------0 l( _& K7 ]- N& R6 e8 f8 T' F7 w
*************************
) N$ d( s1 r) p) v$ ZWndField.h文件
0 q/ E( J! N- Y/ D x' T*************************
/ x4 j+ g7 |. b# Q2 o+ C7 }0 p1 Z搜索:BOOL m_bReport;+ \0 J1 C D$ N6 {
其后添加:
5 P/ n* _) s- Z9 W2 i0 b+ C0 ZCWndMenu m_wndMenu;
( L! O& e, r% q6 F8 E' C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) n% D0 `7 O, m1 ?$ i其后添加:
( ]* ^9 @$ K& w% m& u4 f! L9 J. Nvirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 [9 P" h' N% M. o6 O8 j
' I+ A% T6 q7 |$ y/ f
4 ?/ \0 [9 N3 U" i |
|