|
|
源文件中_Interface文件夹下WndField.cpp文件
1 u/ Y! {7 O N i' \; i# a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 X& \% D3 u* `! o. G# {
/ S* b! h* @3 `6 A, Xstruct sItem
8 O# F( H* ]% f" ^7 ^3 A{9 g. q: z3 f1 g+ b, L
DWORD dwId;; u& P/ w2 l+ k8 t# V0 B) b
DWORD dwKind2;3 B9 E6 h& Y3 L1 ?
DWORD dwItemId;
1 C6 f2 |0 c7 A5 y3 w, ]7 MBYTE nIndex;# u+ `# D3 |+ r" E" j+ }6 _& V
sItem(){ L2 B- v$ e5 `) J! P, ^
dwId = dwKind2 = dwItemId = nIndex = 0;
, D; C( [1 n9 q# i5 [% b- w# B0 T2 m}
& V5 o/ W$ P2 g3 n; I$ bbool operator < (const sItem p2)
8 ^/ Y1 Y9 q" ?{' S* g. L5 e! R
if (dwKind2 == p2.dwKind2)* L4 S! Y& `. ~( t
{3 w! x. K8 `' R- Y% t
return dwItemId < p2.dwItemId;
3 t) }/ P, X* f% w% l E }else{" [; y. K8 }: q+ T
return dwKind2 < p2.dwKind2;) Q/ w2 ~; `8 y& p3 E3 x9 X
}: y K9 a. _. E) {% X( t+ `
}
6 k2 ]% n# s. N: L8 n};9 b( z% R. K3 s( q$ g+ s+ x4 C' X6 @
class CInventorySort
A7 t) G. j; A. h( R1 ^, X; }" G{5 m: t& n$ x1 M) T& P
public:
% e, r9 ]- n9 }- M" C3 r, W: ACInventorySort()! k% l" ]1 A7 L4 g! p) b# ]
{) Y2 m( a0 g+ H4 Y$ Y
m_dwPos = 0;
3 ? F+ v0 G1 {) q+ q \1 a) a/ |1 A}& A$ t/ l$ k0 n7 g* a E4 p
~CInventorySort(){}3 n& T$ w! y6 q0 x+ d
private:
7 H' U/ E( g5 Z$ _; fsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 s) U; }9 H+ j2 Y9 m/ ~) i' lDWORD m_dwPos;
' Y& T. S9 _( B; ^" Spublic:% L; h5 q6 p: a# X
void Add(BYTE nIndex)
$ _/ Y* ^3 i: t/ s{6 t' H3 e7 ^1 ~7 P
if (m_dwPos >= MAX_INVENTORY)$ ]& m+ p `# Q5 } C
{0 b1 x, c4 K6 I( u1 j
return;' @% u3 E* X- Q6 r
}* {) O1 ^! {/ N: D
m_Item[m_dwPos].nIndex = nIndex;; ^5 `" z( d7 v! a/ Y- v! o' M
m_Item[m_dwPos].dwId = m_dwPos;
' k3 {8 r+ r5 V4 p6 y8 O$ o. d m_dwPos++;- t+ O- s) K/ s9 @& r- N+ q( L. g
}
# p J3 |+ l D9 QBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 ]5 N1 d6 ]2 r0 n
{" p: c8 x6 H0 t, h
for (int i=0;i<MAX_INVENTORY;i++)& [- _! E' e/ \8 w, O L* |
{
7 @" g+ S) j2 j& |$ w! g; F0 e! d if (m_Item.dwId == dwId)1 U+ [* P$ F% {3 m6 B1 J$ U
{
0 q4 L2 }9 l8 F2 n! @ return m_Item.nIndex;; p: `4 n- @0 U- b- T! W
}! L1 z4 d' [3 Q; W5 Z0 l' R
}
7 `" c. \& Q+ D3 W return 255;
0 `: g3 q) i) c}
. R# ]2 ~! h, k+ X$ Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; A) d( p8 o2 u3 s* y6 [( y7 l{
" N. T! R9 Y, h, t( f u BYTE nTmp = 0;% M2 c9 u8 h3 @% o. X# }
bool bDest = false,bSrc = false; T( t5 j& ]: B2 [% ?
for (int i=0;i<MAX_INVENTORY;i++)+ t( B8 a* N4 T5 y
{
7 [: x3 T. b; R* Q if (dwSrcId == m_Item.dwId)- `- F$ T, X& ]3 P% X
{
- {- C2 U, C( q4 a. u //id相等 则 改变对应的dest和src
1 i9 |9 e$ r* R$ [) q4 f' D nTmp = m_Item.nIndex;
' P; x6 B4 c! G) f4 @( m" S) A# k m_Item.nIndex = dest;& S4 ]1 {& y2 L9 `3 C; M
}8 Z3 E9 E( X( a( j9 N5 A
}
) L6 r& [0 F( y/ F //临时数据保存完毕,交换开始
" W4 y/ ?5 X* T) k& f for (int i=0;i<MAX_INVENTORY;i++)
* `5 j' n D2 O0 p {
0 Y, U0 e$ V7 i" c if (dest == m_Item.nIndex)& U4 P% E7 L* s( y) E3 ~
{
; l5 b, ^; [4 r5 A$ u //id相等 则 改变对应的dest和src
- m, D s0 H/ g3 N9 c8 k m_Item.nIndex = nTmp;( ~- `. A- Q; O
}
1 X; r# @: E- K* }% J* ] }+ x0 O5 X, d5 u- B6 O
}7 O- s2 W; C, @7 p) e' V- x, U( U
};; @/ l" ~ j* k7 m" J1 J; U; p
-------------------------------------------------------------------------
4 n0 h- q/ i/ v& c. _0 G: r& M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ r! Q% G1 O0 R' @: v$ A7 E! L5 n6 W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) h* `) U% q" V/ ^$ e紧靠其上添加:
; m) Y [' K$ h G$ S* k2 Aif( pWndBase == &m_wndMenu )
3 N! k5 R% K9 W% S{
) f5 d; [8 o8 g9 I9 A2 ~' \ switch( nID )
7 b$ k# \" G/ Z* g/ h6 O {0 u2 q9 k% C' P$ S
case 2:
# f! ]; c% _3 ` {
0 d2 p+ N$ `7 u0 d) q( g% X- n, j0 @ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 C5 Z) ~+ Q5 W3 c
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): y/ w5 ]( ?* I6 @( L3 ^1 M% m
{
: I7 i& `6 N5 U t break;0 E" k4 H F1 j5 k& A
}
0 N Q( l7 ^! G- z5 F6 k. X for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 Y1 J# k' z5 t, T2 m {- J" G5 w1 d# V' K. f$ E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( y% [6 F4 M( W if( !pItemElem )
/ y: P7 S( E1 I( z8 _- a1 Y continue;1 @( U* [0 B1 b3 [8 u- i
if(pItemElem->GetExtra() > 0)+ ]" E7 i5 C2 R8 U& j
continue;( y; \5 ~2 y; p3 G. E3 H
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 J8 V: G9 s6 V+ i% f c! k; d( X continue;; g7 W; u+ s: }+ U: Y/ |9 F' o
if( g_pPlayer->IsUsing( pItemElem ) )4 o L, j5 k, j& |) Q
continue;
9 n# W) ~) r1 s/ N* l4 ]$ a, J: ^+ E$ { if( pItemElem->IsUndestructable() == TRUE )9 H1 H" U8 H3 c& K; j! x
{
. z% v9 r6 T1 V4 Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( j# A" @+ Y( B- M3 z continue;
& ?- Z9 C B8 c, q4 l+ e8 C }
% [9 c+ E+ u5 B* Z# L g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: |; C/ k, n! ]* c& B% Y5 { }
# Q, d2 t$ {) Y& Q! S9 ? break;* R# L' m: g! h6 F8 u
}% x' T1 Z% }0 D# D. g# W! _
case 1:
7 E2 G, [3 z1 H" _ L {
3 S* q* y1 u# g" f% T //整理背包
6 K( p* r7 z1 B8 b //////////////////////////////////////////////////////////////////////////
5 W6 v% x& |/ j: N) L2 m' F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 E4 S" y% Q2 l- q! W* ]' b //////////////////////////////////////////////////////////////////////////
1 q# c+ N+ T# p/ v //////////////////////////////////////////////////////////////////////////
- [$ ^8 m7 F- H+ x CInventorySort* pInvSort = new CInventorySort;/ t- ^ K* L0 X5 b, ^
vector <sItem> vItem;
7 i- \7 u8 \8 B" F vItem.resize(MAX_INVENTORY);//初始化大小# Z2 z8 Q/ G* Q
//////////////////////////////////////////////////////////////////////////
, b# E% f& \3 C2 ^. L; m; ] //填充数据
; C$ |* H3 _9 I( Z9 i for (int i=0;i<MAX_INVENTORY;i++)" u/ i% W* l. n; a7 `# |* w
{, p% B/ e I. u' s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, B. Y) W6 T ~3 l9 ]
if (!pItemElem)$ e5 U0 P0 N0 C7 L0 A. a, S
{
4 h; s+ a; J; _- w/ m0 Y vItem.dwKind2 = 0xffffffff;
1 C) r, C6 \+ k3 z& T+ J/ G vItem.dwItemId = 0xffffffff;) P7 G; h9 p: ^8 n
vItem.nIndex = i;& |6 X- R, V: i8 ^7 Z: o
}else {1 T, g8 C `5 \, i' C: n' ~4 c$ J
ItemProp* pProp = pItemElem->GetProp();
, t8 c3 `% }9 D* L) h vItem.dwKind2 = pProp->dwItemKind2;* K. I, q. h+ w2 U, k1 ~
vItem.dwItemId = pItemElem->m_dwItemId;
& q9 y* Y. T1 J% p; Y* U vItem.nIndex = i;
% }- F3 R; e( d! e' w$ P; s }
8 D& C% Z; O" z( s //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; h, O# s" Z9 l0 ~# `9 l
}
+ k7 t: c5 _/ @" G# A4 h, ?( g) M /////////////////////////////////////////////////////////////////////////// V. @2 b; C3 Y, ^/ N3 _+ w2 h" k
sort(vItem.begin(),vItem.end());//排序3 n- O; f7 F* H _' M+ Z/ Z; U+ I
//////////////////////////////////////////////////////////////////////////
+ y1 E& e- n! Q3 w& {7 h- [- v' p h //交换
' S- m- i2 f- m for (size_t i=0;i<vItem.size();i++)
- h- ]8 \ \ d; D {
1 ~' D0 x( T0 Y8 h5 b //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 @! {& C3 x4 Y+ {1 M& G
pInvSort->Add(vItem.nIndex);
0 v7 b* p0 m4 v8 K4 m }
/ U5 ]/ }& w, p; |2 ?3 i BYTE nDestPos = 0;1 f2 e& t" R, ?, Q$ Y1 e
for (int i=0;i<MAX_INVENTORY;i++)! p3 K# G$ i5 U
{
) q8 N& t* c' B( a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. F& L+ z7 q7 V( i8 j" |" ^( N
if (pItemElem)- E: C$ U: [' _+ C; c# H
{. S: r( ?7 Z" p9 _9 T) j* K+ }$ e
if (IsUsingItem(pItemElem))
" R9 F3 ^: z7 G {
" `) ]- [6 |9 n* A& ~. t+ } //这个位置无法放
$ ^* O& `- U5 a: B: t0 B. K nDestPos++;
% Z5 Q; S3 R" x+ r! a4 S' P4 ^ }
' X5 L) v/ ^, r& z; r }0 J+ q+ R% z. K% K9 {* L
BYTE nSrc = pInvSort->GetItemSrc(i);& q; u9 k! X7 W6 w: |/ q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" l7 i+ E& G# i$ \
if (pItemElem)
- F7 r0 e( [3 D P3 |& R- [ {
( \9 T4 U% t7 t$ _% `* q9 o if (IsUsingItem(pItemElem))
' ]0 H9 C; \& F* v1 J" q8 Z {
, Z- Q* {& E! @. x) b7 n //这个道具无法移动,跳过% [7 K5 {2 B7 n' ^
continue;6 t4 O" `6 h9 M
}
9 S; _1 e' U) X2 u( l& S }else{. h/ ~ m$ w2 S2 g7 s9 k& T, _ o( o
//空位置 不用动9 P5 O* m: U3 Z
continue;& |2 }. K$ F# M8 S7 B
}9 N5 E/ L# V2 e, |6 W5 v/ t) E
//////////////////////////////////////////////////////////////////////////
6 E- [- `5 z+ v$ ^ //开始移动
! Y: E6 v( n( P6 i" J- s9 y, e if (nSrc == nDestPos)
. L7 P6 f) E4 L# O. F {
3 w- h+ x' E- K* |' T //原地不动
5 L2 j' K$ P/ d+ [5 m nDestPos++;
; ]7 _; V S* E$ } continue;
1 B+ `0 T- Y0 N( g' d) R }
' v$ s- d: [5 O( N- Z" g& N- z4 b/ g pInvSort->MoveItem(i,nDestPos);
: q* D5 S2 _! X g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ z, O( I1 l. |' V, ~, g2 F Sleep(5);
/ U* W3 {5 T {+ Q! P //Error("移动 - %d->%d",nSrc,nDestPos);- e" v6 w" Y( y' n2 I6 l( u) m
nDestPos++;
$ D6 z- |- q1 ^ }! Q: S; m7 D0 f8 v& M. a
//取第一个元素的信息
6 j1 _5 _( z, V$ d o /*
; \- w( w3 b/ d7 l2 U4 d if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- E* S* T# p) R; m! C# n/ M {
/ Q0 b" j! K7 y! ~, B2 d' K! d Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; J; k" s0 r: h* i% V- C/ n
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
# Z" a) y) [ i0 s/ b }" O3 o/ E ^. @
*/$ g% C' w, E, C1 h: s7 n m
//////////////////////////////////////////////////////////////////////////1 W; ^: R9 C2 T+ \! Z
break;
/ ?1 I R/ \' H; b2 O( l' T9 w }3 ^" a3 r o; x5 e N8 }
}
! S2 y4 C% t1 i2 _2 E* `: m}. b7 y9 f2 _5 `4 D
m_wndMenu.SetVisible(FALSE);
7 ?! g8 p6 T3 _$ d) _( p# R, D6 y5 j- z2 Y \
--------------------------------------------------------------------------------------------------------
) h$ ]6 `% O3 M" r" [! p8 h" p9 \, R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 |* K! Z8 h; h# R
{
& o+ `5 J+ x% p4 t) n/ cBaseMouseCursor();& x4 J/ f1 M* w: D* A- C1 T
}
! P" B0 [/ D% A* b' n在其下添加:
, O4 H- R# ?8 i, kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" w) d, S+ n4 N0 t4 {! k/ P$ A# l2 }{' E8 p3 K6 j4 v
m_wndMenu.DeleteAllMenu();
2 j7 T1 J. ]: w0 V: B: d3 ~m_wndMenu.CreateMenu(this);
* |4 H, N0 G; a& Vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 |; {: K, G1 A3 w, s- `9 Y; ~" u" q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! H+ x0 k |, p1 r/ ]{8 d. r, n0 X; }1 U; }. i9 |
//P以上级别才可以删除所有道具7 P/ e- Z) `- ?: q7 q$ F7 `) `
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 Q- ~' c! Q% g4 h! Z}0 i+ {9 n' E$ ^& W Z- q+ g& K3 d
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 f8 P* d! Q% am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" B" O1 z. \4 h: o, E6 C* S+ xm_wndMenu.SetFocus();, n9 A7 r( r9 @* n7 V0 R
}
$ v4 J i: z c; D4 K------------------------------------------------------------------------------------------------------------' G$ I1 y2 G3 m; u* v
*************************
: m2 O- P9 P# k; k' ?4 f' Y2 iWndField.h文件
" j9 x' f, M5 v# T8 c' D" b8 z*************************
3 U$ B" q1 d$ x' l6 ^/ H( N2 u( m搜索:BOOL m_bReport;, e, D, Q; m" W' A3 Q* R
其后添加:
; S( Y ^# W4 o: gCWndMenu m_wndMenu;# Y0 E& M- Z4 g0 s# O& N+ R
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: S9 t+ Q2 T2 d1 A# N! l其后添加:
* _7 P o& [" u* {/ j2 B0 G9 Wvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ _ f! R% R( m
4 k/ \) ^+ E( A6 B P/ L# z: n, b$ L( {2 a% G
|
|