|
|
源文件中_Interface文件夹下WndField.cpp文件3 i: M/ r q. Y- d- O, V/ c/ N- C" f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 T1 L+ O' \8 u; \( E8 A8 Q! j/ ~* X) I- A: G- l- i" Y. T) r5 I% @9 c
struct sItem2 p2 E9 |9 ]2 g, W1 {' E% F
{3 e$ M7 g; Q2 v: U; V. b) [
DWORD dwId;+ X% ?$ V9 k1 x" J' k% j
DWORD dwKind2;) W0 g% s7 D4 `8 y% u! B- r. _
DWORD dwItemId; y" q6 c4 x4 ^( K N0 L# _
BYTE nIndex;! g- C" s! Q9 w: G* f0 I5 I
sItem(){1 R/ J5 H' f- S" I& b
dwId = dwKind2 = dwItemId = nIndex = 0;
- ]6 p% i J6 d5 S& x& r. h}- s% C1 O$ G% T% e; ?7 E
bool operator < (const sItem p2)/ E" K+ X, R( B1 s
{
# T! A8 @! D* s$ Y2 L if (dwKind2 == p2.dwKind2)
8 c: T6 i' {8 {& J0 Y9 a6 w. j0 ^ {
7 \) V1 y) W6 c4 D return dwItemId < p2.dwItemId;* z% Z2 \) G! i
}else{4 M; V0 P/ r& i* L% q( {6 t- e
return dwKind2 < p2.dwKind2;: ?, d" ?6 B8 V
}
$ t0 }5 d0 N; Y/ ?" F% {}3 M$ c9 T7 h+ T) m+ Q, f0 L) e
};4 w- L& T) q' m u) o
class CInventorySort
! g% S# |% M2 ^) Q) V% T{
! G/ s0 v: R' `public:
, x. o( M1 j0 X5 H p8 Y2 XCInventorySort()
* s. o# t) _: ^' H/ q0 \% q7 B; K{
& [/ ]$ q' V+ y$ L. e* ] m_dwPos = 0;6 [- t Z% T' R. X
}% z+ m3 D- N% D8 c0 g, X: g+ f( B
~CInventorySort(){}
$ q! }* b- e6 G% b4 kprivate:
A+ r2 C& |, S5 _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 W# ^' X* Q' X7 p3 c
DWORD m_dwPos;! k H) Y: N2 Z
public:9 d% a1 y& W1 ?; R: x- \/ E4 u* t
void Add(BYTE nIndex)2 _, U9 X) N0 [
{
! J9 Q1 g% d/ A8 s0 a3 C5 `6 X if (m_dwPos >= MAX_INVENTORY)
! i- t5 J) {$ _7 i7 K {, b& I# g1 N9 o6 v4 X `
return;
4 D4 B7 U" P( d* E }
% a3 Z o/ P) u$ q m_Item[m_dwPos].nIndex = nIndex;, y3 _! ~5 h! k# i
m_Item[m_dwPos].dwId = m_dwPos;' c/ [5 n% j& `
m_dwPos++;
0 a+ Y( z5 @- O( T2 E( N+ { ?}3 ^8 E+ H7 a' n2 l
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. D/ ]7 R9 A( j, G; p7 G# [9 n{5 p2 J+ _8 f. v1 S' |* l, j
for (int i=0;i<MAX_INVENTORY;i++)
, t4 d' H _3 M& h6 S4 f {
9 P5 V5 h8 Y% o* E* h* n y" F if (m_Item.dwId == dwId)
. B* y1 v- b5 [0 Q% E {
7 {" N0 `. T& h) ^' z i3 d+ V$ `9 a7 l return m_Item.nIndex;2 J5 ]3 u! Y# L/ m: w2 p9 w" V" \
}
3 t& x4 {! J/ \6 X" q6 y7 F }9 V: s( K( ?6 K! d7 }
return 255;
# K$ F; k0 L% O) G: V4 l}3 j, l) _- x2 e
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) O; H6 U' S4 ~* x: w/ o1 J# T& o9 o: r{7 _; h) n0 @' s* k
BYTE nTmp = 0;; o( N. J5 R* N$ `/ x1 u# O- c
bool bDest = false,bSrc = false;; c7 {7 N; x) x7 d
for (int i=0;i<MAX_INVENTORY;i++)
1 s4 g S: G+ E) e l: @3 ` {
& }/ m4 n. q9 _! R if (dwSrcId == m_Item.dwId)& d8 N# z! Z* G
{
v5 p [9 ^6 R+ l8 B! ` r //id相等 则 改变对应的dest和src0 N0 Y0 t8 n* x# w( }9 h* E2 {
nTmp = m_Item.nIndex;
' j3 c6 [9 Z& _% G- y# j" I' X m_Item.nIndex = dest;
4 ~% `8 H; u& ]9 r& \2 p }
5 g8 w' Q( l# |/ {! S1 q }7 n N5 P7 y* x) V4 P- e& ]
//临时数据保存完毕,交换开始
2 }8 n) H0 W, n. x# h! |( X for (int i=0;i<MAX_INVENTORY;i++)+ C, I6 M8 S, a6 A; }* P
{: _7 O2 r" e3 P
if (dest == m_Item.nIndex)2 [6 U7 A h9 u3 s# G9 x
{1 ]% A$ o2 }) c1 z
//id相等 则 改变对应的dest和src. H& a& o$ R: E9 c
m_Item.nIndex = nTmp;
$ D8 i. R: [& [( e$ j+ z. L }
; d4 G4 [' }. Q/ ]: b- ` }5 `- o+ L( a$ D0 P9 E c: Z- `
}
8 h5 }# ^7 A' r+ B2 I5 Y/ }" H};
) M, o. }, a; L% q% b0 k% f( B2 M-------------------------------------------------------------------------9 r) q3 J# j* L; i
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 X! c& h6 x% G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 z y* K2 e& h; Z! y2 `* M
紧靠其上添加:! _. l( Q5 [7 r; @5 @( H
if( pWndBase == &m_wndMenu )
2 q5 A% P2 D( Z/ ?{. c/ e* h# W7 W$ J# W, S
switch( nID )* k; j$ \. ?- z! R; E2 e
{1 Q5 f j0 T% f; ~( u% n& o
case 2:
8 y' v6 z: P6 F! n6 A+ x, ~+ l, Y) X4 K" | {, Q* U3 t) q! Z. R0 M6 R! j
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 q) ?( U/ P) n) o. J) v1 f" y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 u4 S9 C! o( X, [7 B' f( M" W
{' X! `% i1 s, B( P
break;1 O7 F4 ~/ C; ]+ N2 W$ P* r1 R# x
}7 u! N# ]1 K4 A; d: }1 {) T) f0 Q! U1 k
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). @$ G- a6 p$ n7 L/ S+ T8 P* e
{; v2 G- v) u7 r2 e1 F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 _: F% h) x4 q# X- Q if( !pItemElem )
5 ]# f* w! j$ W5 ]( s. Y# s n; z3 u continue;
* I) ?+ M+ J* { if(pItemElem->GetExtra() > 0)9 _* d" S0 G D" H% v) `' _
continue;0 d% C l$ V" V3 a/ v0 d i) l
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 s, \ ~/ ~' M _8 G continue;$ V9 q0 @! P! ^. _
if( g_pPlayer->IsUsing( pItemElem ) )
" p$ {% l+ F" C% P6 D/ z- M continue;
2 N4 a7 h" ]# h o8 a& D% | if( pItemElem->IsUndestructable() == TRUE )
$ C$ _/ ?6 x, I e* D8 q2 S {! k( V* U; d7 W a5 p7 H- f* `, k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% x4 h; B8 M: _% K8 z( f
continue;
# E; q2 D. i* G0 _# K9 D }
, w2 A# i9 e0 `' h8 p/ d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 C9 u% e, Z6 G* f9 q }
4 }+ R9 J" o2 N) H break;
* x5 h0 b( |; P" p }# K- B2 ?+ c, B9 ~
case 1:8 c% ~- ?* C- m& w3 G
{$ {1 U! I- S- B. M1 t: F
//整理背包' C: E7 H; t1 ]2 b; R0 j9 q
//////////////////////////////////////////////////////////////////////////, G* d! a$ E! f( e
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 j9 S# M; G3 V4 \ //////////////////////////////////////////////////////////////////////////: l- X- ?$ a: ~/ [" T' I t
//////////////////////////////////////////////////////////////////////////
, s6 a$ l, G+ M7 B! c CInventorySort* pInvSort = new CInventorySort;
' Y+ k6 l( w2 @4 i vector <sItem> vItem;
E7 Y$ d( o: `/ Y/ P4 w vItem.resize(MAX_INVENTORY);//初始化大小
7 R$ u7 n; P" K/ N) h* q //////////////////////////////////////////////////////////////////////////$ ?. X, |1 w0 c, X6 C
//填充数据: l/ B. p: B5 `& P/ w; p: |5 ?
for (int i=0;i<MAX_INVENTORY;i++)% n1 S0 ]) j* h Z' _( s% r
{
4 z% `" O5 w2 Y5 u, I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 h7 Y# N$ n) Y' u# w2 i if (!pItemElem)" j$ m5 ] n& `. p, ]9 M5 g# ]
{; s7 h; o1 m, l% U# b# S' F9 i3 F
vItem.dwKind2 = 0xffffffff;
' K* I' n- ~- b% m vItem.dwItemId = 0xffffffff;' Z' V5 f u6 U. b0 \ c
vItem.nIndex = i;. } c. z( E' A% C" u8 _9 v& z
}else {
" |6 _: C" a: U( X, t- S+ O2 R ItemProp* pProp = pItemElem->GetProp();
! f, w& {2 ?4 V' v/ Q vItem.dwKind2 = pProp->dwItemKind2;% |2 _/ K0 X1 \, x$ w
vItem.dwItemId = pItemElem->m_dwItemId;" J [4 A) u$ Y# a+ p' M
vItem.nIndex = i;
5 j: d; I1 K3 T }
2 K# {6 ~8 F9 x3 v3 b0 w$ L* q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ Q- y3 x" R. t5 y
}
: x' a4 t6 D9 }+ j# g5 ` W, v( c/ f# g //////////////////////////////////////////////////////////////////////////, b4 W, F& u ~& S# ^2 N" |
sort(vItem.begin(),vItem.end());//排序. F5 Q' Z3 [+ P" Y; z
//////////////////////////////////////////////////////////////////////////
P p1 Q' z) d+ k3 _5 r3 V //交换8 g1 s, O# u% p" ^& x3 `: P
for (size_t i=0;i<vItem.size();i++)
6 w5 W" @' I; Z6 B5 f8 `3 \ {" r6 F/ E- r M) a
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( h; m2 _6 p9 Z- {1 F. k \& g+ u" f
pInvSort->Add(vItem.nIndex);
$ A, N; N+ a2 M7 q% F9 p2 d( Y/ W P }/ K. B7 T4 C9 ?& I6 \1 P6 f
BYTE nDestPos = 0;: m( G/ r; Y6 I+ k- X
for (int i=0;i<MAX_INVENTORY;i++)
8 w* u5 c' y- K: s$ g% l {
( A2 [- f' U. w! |$ }& m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
u& }/ A0 w% p if (pItemElem)& x( D' v& @6 j5 ]
{
& r$ M6 \* J3 e/ J C% X if (IsUsingItem(pItemElem))
. n9 F" v" e$ q1 Q" i; D2 r {; `- D" G9 `7 u- `% W* @$ n5 F& q
//这个位置无法放
7 F. [1 U3 b! @ nDestPos++;
* H1 _% G/ U# ?. |. U7 W1 g7 g4 m7 [" C }
8 r2 Q+ P* u* l! j }0 o1 F' P; d; R+ x, g
BYTE nSrc = pInvSort->GetItemSrc(i);: P4 [" D0 |8 |( R' m
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 r, n1 w. n4 X; A
if (pItemElem): o: @' Z$ [3 u7 ?/ ^- H: X
{
) y5 x! k* q. [: r* }+ Q if (IsUsingItem(pItemElem))2 A! g o5 Y" {/ V4 g
{$ E. o% J9 N. T' L( c! U
//这个道具无法移动,跳过- O) i+ J( t% h, g2 N
continue;. j3 j) P( e2 d6 I) j
}
, D6 t8 Z: e1 S! H }else{
. T& x# [! n" `0 d4 X //空位置 不用动
0 r e, g7 ~/ `# \) s' G; J; | continue;$ ]: D: U, m3 f4 }# x% i, C0 I
}
2 a+ B7 N9 e5 g& i& s //////////////////////////////////////////////////////////////////////////
& l* X, K ?# `$ { //开始移动; h* Q5 n3 k' k2 i2 I5 {
if (nSrc == nDestPos)! k- ?7 U7 q5 ~) E Q
{
) d7 h0 \' V X9 j v" E- [ //原地不动( u* L% N& P& D) S- v2 n8 a9 O
nDestPos++;0 b( z. R [1 z) \8 C9 O2 U
continue;' z4 _5 q$ A# |; a# W) \+ y
}
4 w8 D1 o+ Q0 T" J& g pInvSort->MoveItem(i,nDestPos);! e! n+ R" I4 n# G, ^' b H( N
g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 B6 c$ u; X- T1 k" a0 L! q5 i) c
Sleep(5);
Y% G1 ^: b! l; h //Error("移动 - %d->%d",nSrc,nDestPos);
- g8 W5 v, L1 I2 n7 b# t nDestPos++;; P8 F1 P. D) u* X: B
}0 Z7 z0 k; |) y* \7 x/ D" z# }
//取第一个元素的信息& @& s" \) r2 U5 c! g
/*
6 y- S9 b. D6 R0 \4 @) b" h if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. l0 b9 [" b8 Q# F {+ _3 i: o% G' k, k8 z# p/ S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 M9 [5 K4 M8 u" [2 k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 U+ C9 ?) }% E! p l8 o6 j) w% \
}
" L7 `( P8 p8 L' P; r" q! t/ [ */
8 L0 D# p1 q+ P" @/ J //////////////////////////////////////////////////////////////////////////
' ?, I3 H9 w5 ]# i$ {6 O2 Q break;$ b3 s# E+ e* L3 o, r/ i3 H# _, O
}, A6 n8 {* A3 A: q/ C$ W$ |
} " o! ]! o/ |+ G, P, X
}& |1 J" c% I0 Z6 x4 m! {1 A
m_wndMenu.SetVisible(FALSE);5 u# L/ Z0 d2 W0 |
4 t$ ^3 _- Z4 W7 T, q/ e7 t1 V6 @--------------------------------------------------------------------------------------------------------
8 k6 `1 o0 y/ y) m$ Q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: G' `2 f. M) d{4 I# ~: h- |% E+ r+ p: u
BaseMouseCursor();
1 h) S; T5 y* w$ _9 Q}: O& e$ n: N0 ~3 F$ g7 v
在其下添加:
) U/ w* o* \% Avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# r' B8 N8 t# A$ I/ ^' q{
. L# z o5 U8 cm_wndMenu.DeleteAllMenu();/ h9 U! b" R9 Q
m_wndMenu.CreateMenu(this);
6 _& }2 L2 C0 c" A% mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! z, g# c) I0 m/ B
% M6 U" b4 W8 f, L- O* _if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ W$ Q4 s" |6 l{$ M$ W1 }9 `5 x( v% {) C
//P以上级别才可以删除所有道具
% O. i0 x @& _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( Y5 @# _9 T: v
}
! R3 X' ]; f$ V3 ?) A% A, Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 j' E7 Q' k" }, f- L( N2 ]3 ]% Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 s+ {" F5 G( x; y' S# ]
m_wndMenu.SetFocus();
, Y6 I; l1 \; i( ?5 v8 @; N}% ?& C5 i. o$ L! f [) `8 v0 P1 s
------------------------------------------------------------------------------------------------------------
/ u u( T7 B' y; d4 t*************************
- z2 K4 f# r+ @8 `WndField.h文件- [9 v4 k% h3 P& t2 }0 S( D
************************** x4 y0 T p" E/ G* Z/ \5 n
搜索:BOOL m_bReport;
9 X# |( i1 I) k, |其后添加:) l2 ]9 J. e% d1 g7 {/ F# i
CWndMenu m_wndMenu;" y9 g6 ^7 A7 N! J
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 X6 U/ ]" K6 X7 ~3 P
其后添加:7 H# c' H) r# G8 R" ^1 R
virtual void OnRButtonUp(UINT nFlags, CPoint point); h6 j; Q, q- N- b* Q8 y
7 w @' y. V! ?3 ^
' D9 ^* ?: P! V( r) `/ K! y1 v |
|