|
|
源文件中_Interface文件夹下WndField.cpp文件6 j( Y4 H7 c7 }8 ?3 C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ n0 t$ O0 L [* i; d9 |& N
" ?8 H7 ^: J v( y5 O. G9 h
struct sItem
: f) t0 \+ R# L* m, Z+ g{
5 P1 e! h, q, EDWORD dwId;4 P4 p" E% O" A0 [; F& \
DWORD dwKind2;' n. J5 n/ ~' F- b
DWORD dwItemId;* U7 C4 {! T- q0 Q; P8 J9 }
BYTE nIndex;1 i0 N% n0 a" W: o
sItem(){1 h* h( q4 J* b# z1 p' A
dwId = dwKind2 = dwItemId = nIndex = 0;7 E0 w4 C. b; F5 ?+ c [& u- D
} {+ V; v# @, m- k
bool operator < (const sItem p2)# c$ T- Y2 q9 r/ S8 H
{
; G( ~+ f* c8 d" D) P if (dwKind2 == p2.dwKind2)) f0 z K6 _9 d
{5 V' n2 p8 P: U2 m; d
return dwItemId < p2.dwItemId;
+ B$ f! F0 d; y) q+ s$ r0 g }else{
1 U# O3 @+ V6 ]# S3 G return dwKind2 < p2.dwKind2;+ G; s" k) v1 F
}
# @* O4 Y- X ^) f6 n}
9 L' J# I* T) v: k$ K- p};/ \5 d" z; I7 j1 q- }& u
class CInventorySort
* f3 M% h# _4 c8 H4 B{+ I: B5 s ^/ T0 z5 @
public:% q* s4 E. Y* i% D) f% K
CInventorySort()
% ]7 ^. p; U7 [/ n, j$ z{, H! n, c% e( A) k/ ^" J
m_dwPos = 0;- a6 z- ]$ U7 d$ u* O
}
5 A! Q, g. d4 J/ J2 t~CInventorySort(){}6 d4 w% v" {& S0 _, @
private:
" _# Y8 A5 @: |% usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 L5 B2 d* r8 g. }+ m8 H+ [ fDWORD m_dwPos;8 i3 E5 `# E- q4 G
public:
7 M, E( Q D9 x, Z; {1 Bvoid Add(BYTE nIndex)
9 m0 c1 Z; Z5 y% @& V4 h{ K5 l6 j6 }: q2 G
if (m_dwPos >= MAX_INVENTORY)7 a2 A% R# t7 p0 Y
{
% ^# L, m r$ |: C( c1 K return;0 q( b& J1 g( o: I* C. N# R2 U
}
* \2 |/ E5 e, ]/ ~- t. P' o m_Item[m_dwPos].nIndex = nIndex;
" P0 S$ [- A9 [4 x' E/ z m_Item[m_dwPos].dwId = m_dwPos;: u; Z9 n3 C# G2 v6 S# j" Y- Q
m_dwPos++;! N& Z( p( s$ ?3 {
}
* p8 m8 Y. s# {6 |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' B6 Z; N4 P+ }( _
{
7 T: h( J: A, x1 W5 @- x+ r for (int i=0;i<MAX_INVENTORY;i++)7 @ R! o* t& `6 c9 l- L1 R
{. T' Z1 z, i& e! W7 {/ t
if (m_Item.dwId == dwId)) u1 V4 t- ~& a; u3 Z
{# T ]" p5 K: E/ u0 C
return m_Item.nIndex;
" j& c& K" y# G( [: M- a# L }
3 Q$ Q) y1 x8 Q }
) B5 i7 t- H d6 ~* Q return 255;
8 h5 |# M* o: _; r2 g& b8 Y. c+ V; k}2 _ P# |& y4 C9 \. V& w' u
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. h6 a! C; r+ \{
, P9 i7 B; d5 u; ^3 I BYTE nTmp = 0;4 g# X( B2 C2 }% ]. P3 e- I
bool bDest = false,bSrc = false;
, `/ g# G0 b7 b6 o& Z( R for (int i=0;i<MAX_INVENTORY;i++)$ Y5 X2 a0 d4 z5 W: F4 C$ c1 Y% Y
{- l- L! C1 d! `+ e$ \
if (dwSrcId == m_Item.dwId)9 v5 A: ~7 w. N* N9 l. m# Y! ^
{# p+ S+ A7 G4 l
//id相等 则 改变对应的dest和src/ @; l5 m3 {+ g% m, |' n
nTmp = m_Item.nIndex;. S) i L# L* D9 K9 g) {9 V' o
m_Item.nIndex = dest;% t; Q/ L7 b/ M2 V5 Q6 \
}
! F) Z e5 [+ n% z3 I }
! E9 V% a) [3 |, | //临时数据保存完毕,交换开始; c7 g3 n, H' r; R+ h
for (int i=0;i<MAX_INVENTORY;i++): d' V8 ?/ Q- P. Q' t& A
{: j4 b( O# X- C: B1 H
if (dest == m_Item.nIndex)
0 @0 W9 h0 t3 V( ~" q E {
) o+ _9 A; G( r: L //id相等 则 改变对应的dest和src; q$ x! m1 U) h6 h2 y9 Z' V! X
m_Item.nIndex = nTmp;
7 S- F# R% @' b8 H* Z. O. x% x }
! W% u2 R! b Q2 w/ x) s }
% p- m, \7 G/ [$ i}2 A2 y& V- m4 R- q2 l8 k, [+ x: [
};. j; A) }& [: w" G
-------------------------------------------------------------------------
L# ]( p- {5 p+ g$ M6 O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: y1 J- c7 u. ^1 j3 X8 F7 ]搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 s0 `( K. P/ r) v8 `1 a紧靠其上添加:
9 l, S7 G1 p. v* q1 hif( pWndBase == &m_wndMenu )3 R8 \, a4 ]% J1 _) @1 i, s# }( M
{; { J! U& V1 E1 l$ D
switch( nID )2 I# `9 A- s P% j2 O
{3 h$ ?7 E8 K% |) _/ Q
case 2:
, \* _- T; B; m, C% Z; [$ p! j" O, D; a {: B& Y0 [( B( P) D" \
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* ? h0 E/ D8 Y5 B
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% ?0 E3 T0 g; @& Z {
9 y% S4 V4 m: Z. k/ ^6 k( v break;# [. P' X0 A" j
}) K; @) O+ i6 O: @" w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" n' o; I( L8 _/ m* ?0 D
{
0 o9 c8 F. D6 ~' O) `- C1 V; I) N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* U5 M# e: L1 z. ~. |' o
if( !pItemElem )
7 _4 ]5 F7 O& b5 I2 B X5 B continue;
9 u: [2 k. m: S3 M# e3 R if(pItemElem->GetExtra() > 0)
! T; L% l2 D1 O5 ^) g1 \ continue;2 e% j; X% s. ~* F' R
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ {6 O2 F$ X/ Y8 B continue;' J7 A( w: h3 ^) ~3 \; t
if( g_pPlayer->IsUsing( pItemElem ) )* K% k' r% W; _, K$ h/ n. ~2 z
continue;
/ E8 C6 o- y h+ O! S- {7 U if( pItemElem->IsUndestructable() == TRUE )
9 R) |$ n; P: C% s {- q p/ ~, O1 D! ~, g0 @- s' F& z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
P$ o9 B' d5 k6 `" q) } continue;
1 n1 ^ O8 W5 l' l. `# Z" r/ a* [ }
1 Y2 C; i9 Y; |+ r' f g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 W2 e; e& @! I/ ?8 U: z Q9 R }
6 @6 F" C. z- W9 @1 b break;
1 I& j6 R5 {% M) F# L @0 ? }- [$ J; b7 v# _* J" y
case 1:
; S8 {) A1 Q( o- o6 ]$ Q {% k" _; N L# }. \7 F2 D5 f# J& |/ H
//整理背包2 d+ F# ^6 o+ u' Q
//////////////////////////////////////////////////////////////////////////2 c t% E+ S! V/ O! X* e
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& } Q% A l# m2 _ v6 K0 a
//////////////////////////////////////////////////////////////////////////+ k! {# o# b( J* Z$ ~- R: B- G; C
//////////////////////////////////////////////////////////////////////////- g* U' K" w/ X
CInventorySort* pInvSort = new CInventorySort;
1 o9 q$ V9 e: R3 d" n4 m vector <sItem> vItem;
/ r. }7 Q( O; M. k3 Q% S vItem.resize(MAX_INVENTORY);//初始化大小
8 E6 i! R; {7 Z/ Y" K0 s( l, k //////////////////////////////////////////////////////////////////////////
( ^: {0 M# F3 u9 l1 D, W: l //填充数据" I% N4 }+ {* |" b8 y' D+ q
for (int i=0;i<MAX_INVENTORY;i++)6 L+ y& W, H' i8 N
{& w$ q% S# e( ~5 t: u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: X' T+ T! z# c" K if (!pItemElem)
6 V' v: r$ k& C; K% w( j( T5 U {0 s" K0 Q$ r1 q0 t- P
vItem.dwKind2 = 0xffffffff;, o8 U" Z, B, T0 u$ y4 W% K8 t
vItem.dwItemId = 0xffffffff;9 x+ l. h/ I* W5 a2 E
vItem.nIndex = i;
4 _) k' r( D/ s% k3 E# q }else {' y- \4 [$ C# Q: N
ItemProp* pProp = pItemElem->GetProp();
1 @0 C' O9 `4 }. p vItem.dwKind2 = pProp->dwItemKind2;' M5 k7 C$ S' n* ^0 ^) u" D0 O
vItem.dwItemId = pItemElem->m_dwItemId;3 F+ X: t: U! y1 @
vItem.nIndex = i;
! b6 H N! o* u0 v5 o }# D9 {, K' D1 o' [+ a0 Y# J5 T5 u
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- |- O* i, m) G9 x8 C
}
( [' {$ h- Y- i //////////////////////////////////////////////////////////////////////////* F1 H, M9 F. }3 b
sort(vItem.begin(),vItem.end());//排序3 a5 J& y( ?5 L; D1 A5 }. W! z
//////////////////////////////////////////////////////////////////////////9 O. W2 D5 \( |
//交换
3 \4 W0 X4 I% a) S0 F$ Z for (size_t i=0;i<vItem.size();i++)1 y1 b* t% y. ^
{
: y3 U/ `! ^6 G& B4 y4 R //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- L, t) P0 w t
pInvSort->Add(vItem.nIndex);- z. t' K$ L$ Y0 U& o% X3 P6 h) i
}
1 w6 \ h5 B8 k$ @2 y4 S& i BYTE nDestPos = 0;( l0 e6 Z* G( f" w
for (int i=0;i<MAX_INVENTORY;i++)
1 Z( r! ]; n) R4 Z+ s6 ?7 c {
/ v- t8 v% L, A: Y5 J9 g* o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 ?* n1 z7 @* }
if (pItemElem)
7 H1 W. I6 E2 p( R' z- E% r- _9 } G' e {
: G$ h8 t' S* H- R& l if (IsUsingItem(pItemElem))
" `6 M$ ~ c( x& z$ { {/ N* H: d8 h$ s: C/ ]+ b
//这个位置无法放, k3 V( l+ H7 ]/ d5 s5 D1 Y2 I3 x0 V
nDestPos++;1 ?# V) T/ f0 p3 V4 M: V6 E% X5 `3 }
}6 ]2 T) |5 k% g! O! v9 m7 H2 h! M) y4 j
}
+ d7 L! U3 w9 [! F' C- c BYTE nSrc = pInvSort->GetItemSrc(i);& b- F u# _7 b8 q$ A1 ]" \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# O i6 k# Y* X( K1 Y8 T" n3 v
if (pItemElem)3 d' q9 D, |* x; n. {! ~
{
- h8 \ Y" Y6 S. h% l1 c K if (IsUsingItem(pItemElem))
. w# {' p* {* Z% m' V {
& | Q8 }9 a& x) b& h' o //这个道具无法移动,跳过; Q( I) N) z3 X j) ^4 E
continue;) N7 o/ y: b5 t W. B6 A' a
}" e _7 Q; e; c* L( S
}else{
( K5 Y7 A2 } `$ x I //空位置 不用动: @% K9 l$ D1 ^; [' K6 Y* @
continue;
9 L+ o6 s0 `% l6 T/ W: l }
* ]- T' W1 N- R' e //////////////////////////////////////////////////////////////////////////
/ {3 S0 W+ ^- r! `5 w k //开始移动
) v$ @- J$ M; v if (nSrc == nDestPos). `9 y2 ^# J& t2 J8 \" @
{
8 \* @& Z5 H( G2 u( B3 l. @7 B P //原地不动
, i1 C) P0 r- B& o5 K' E nDestPos++;; c' d8 o' o4 b: f+ q9 t
continue;
$ f8 K. S& Y5 a }
7 f- {2 r7 z4 H: Y! `# t pInvSort->MoveItem(i,nDestPos);
& q" R9 ]3 K( W/ W g_DPlay.SendMoveItem(0,nSrc,nDestPos);! O# F1 x6 A. G; t8 }( Q# m
Sleep(5);* e I( X0 H8 ~! r6 g' s4 o9 n
//Error("移动 - %d->%d",nSrc,nDestPos);
( ]0 [9 v3 F' K1 C nDestPos++;
$ t: g4 q" A/ g% h h( l }
2 w: `' s7 h; e6 \1 d& h //取第一个元素的信息
- |' B+ |/ J& k! W* y /*
4 Z6 b/ Y, C" K8 r- C! e1 a" i6 a( d if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 K% f3 @- i; G {6 ]+ \# p. g: Q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) N! k: Z2 ]- j- A4 ~ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. h: H- h/ f" E }) s6 A# v7 _- |9 H( a
*/
8 p9 c. w5 M- E2 z- Y4 @1 a& |+ n, I //////////////////////////////////////////////////////////////////////////
7 A8 G4 k& C, S+ [# G, M$ X9 H break;
1 Z0 L5 }. C1 u- n) J! a( ?# R6 N }
2 f0 G% U' F# h. T( _, E: } } 5 u2 ] [' ?; [$ k* C+ B
}; D, H' d' {: ?/ W$ X& q }
m_wndMenu.SetVisible(FALSE);! c) v- Z1 ]2 k+ j% N Q" a
1 K6 g9 t: M" Q8 o& m
--------------------------------------------------------------------------------------------------------
! X o3 i$ L0 w" ~+ j6 i9 D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" u: T4 p6 [8 b8 F4 A{& A( t, l2 X- Q |5 J
BaseMouseCursor();
& I( p8 @ C% r4 d9 T( @}5 v" }; }2 m) ]2 }2 u. a1 \; F
在其下添加:5 H$ h9 ]. I& [6 h1 _: \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 T; q% D# W* s% L2 W
{
n7 k0 f6 b) A: a! L' em_wndMenu.DeleteAllMenu();
. P/ R% C, i# q6 f0 vm_wndMenu.CreateMenu(this);
# W( v& c4 T0 bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 C, `. V3 Y# }3 y( ]% ]$ G
! u5 r9 o+ B2 h! R/ Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; K# f/ Q4 `) R Y! N! L$ `{' K( D# @8 u8 W& _
//P以上级别才可以删除所有道具$ a- N5 v4 E" \8 }9 i$ w
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# d9 v$ y. ~7 k3 A( I3 C8 U
}
9 O& Q _5 N! f/ tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" g1 E0 o, O8 i( b: k
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, i: v/ v! e) H! U' _+ Z3 k
m_wndMenu.SetFocus();
- g- J' z5 ^9 U: ]9 I: I}
% G9 M0 Z, [' w9 J4 R L1 |6 T------------------------------------------------------------------------------------------------------------
/ a+ g0 o5 ?$ X$ i7 X*************************
2 E. }' e- N) f/ }; G0 `, f _ w/ zWndField.h文件; y; V' m6 s/ m9 K% D- r7 y! H
*************************
& L- n8 v( F( V# q7 z0 d搜索:BOOL m_bReport;$ g, h) V5 a/ q, H: D/ \
其后添加:+ d+ Q) U, ` l* M& i+ v
CWndMenu m_wndMenu;5 ~ R4 ]+ m9 Z% Y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; R0 [" N4 _9 v& c6 z6 P
其后添加:
8 g+ j3 o$ G8 D$ ?3 X: uvirtual void OnRButtonUp(UINT nFlags, CPoint point);3 t' T; D: b+ Z8 n2 [
4 ?4 F% l8 t$ O/ `8 I8 w1 a. X
/ f8 f" P+ ~6 f% ^6 d' {4 e* ^ |
|