|
|
源文件中_Interface文件夹下WndField.cpp文件
3 R3 m& `! V3 J( G9 n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" @, I/ c7 }, g& V/ J d) F! A( j, Q- \2 y
struct sItem
* e# C* V) `3 V+ F% A{
" z1 q& Z9 _/ gDWORD dwId;" V# X" m! e0 T; H
DWORD dwKind2;
6 R1 y6 N, Y5 I/ ]DWORD dwItemId;
, y# `. T/ \3 \2 S) b5 yBYTE nIndex;
' Q7 W5 v& t7 W1 x& PsItem(){
6 A8 c4 ?/ C: `% U" t dwId = dwKind2 = dwItemId = nIndex = 0;* ~; M* [. o# o5 i( T# y
}
0 Q6 j1 x7 u5 I0 }) [6 o k; I% m0 Dbool operator < (const sItem p2)
4 i$ I( O( d$ e/ p0 X! U{3 K7 J& B8 Y. w- \3 X4 d) ^
if (dwKind2 == p2.dwKind2)
$ g- i5 Q+ D+ I+ v s" l {* s) I! F# u3 S; g& _1 K2 Q5 v! i" w
return dwItemId < p2.dwItemId;
; u( W. O& D5 ?' J2 z% Y' S }else{
/ _/ u/ M2 L+ c0 { I: \ return dwKind2 < p2.dwKind2;
' B2 k; z. M7 Z1 z4 \ }$ @& a- f( F3 P. ~8 }1 A4 `$ a7 z3 b
}
! F; M2 E F- ~8 ^- Y# j/ K! F};; o& ]) C& k; O- ?' I
class CInventorySort
, n3 S# X, `4 M T# T" J* r, W{5 d* q/ ~# j6 P2 G: @1 Q; f8 L4 i
public:8 u4 }. x* v$ _* W d) n# d( H
CInventorySort()
: _4 A- _/ `- b5 c! h' Q{
6 t% n5 |: q* K m_dwPos = 0;' o$ D: c8 u, y' b# n4 X
}$ @, t! N3 x# @, g) f2 ?/ D# q. f
~CInventorySort(){}
4 d3 _, Q5 j9 V2 g6 xprivate:
6 K: P; Z, n( f7 l. S/ _5 SsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 x+ _. ^( m2 K& e3 wDWORD m_dwPos;6 F3 ]1 R. E$ O) L% c* c
public:
7 {0 q j; {1 ~- {# ~9 l# ivoid Add(BYTE nIndex)
/ r" Q$ R0 K# Z/ Y2 X$ A6 C" ~1 S{
' Y/ X7 X8 q7 a1 r if (m_dwPos >= MAX_INVENTORY)* G. @; Y5 c/ N/ T. C& q
{8 d. O& M7 E# w8 e' K4 }
return;
- f+ e- E0 O3 O7 @ }
2 a. c* V# x/ c# V* J, } m_Item[m_dwPos].nIndex = nIndex;1 Q! r$ V* _0 H/ p* I
m_Item[m_dwPos].dwId = m_dwPos;
9 \1 S# J1 N: l7 ~ m_dwPos++;9 c& ]) m4 y0 w0 Y+ {+ x C
}, z- B1 [8 d- T; ?: o: F
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' x$ }6 Q) A8 L# ~9 e{7 Z" D8 N. i: u4 F; |6 p
for (int i=0;i<MAX_INVENTORY;i++)
' r3 ~6 m r/ V( o* z) Q2 e0 K {
$ Y( R- f; I h( A; M8 C8 ] if (m_Item.dwId == dwId)* @( b$ H& `$ O' T+ n4 S+ ^
{
! Z: C+ V! A! D, {! \ return m_Item.nIndex;
% s! p G" n3 o" a* m }
6 d" X+ [6 h& t: p8 Y' [2 [& G }
/ y5 s1 g" z2 l) H" V- B return 255;1 U: f% P5 M0 {. p
}
" \' K* l- T* h( N7 g( {, n* K* Y0 y9 h0 Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, n4 ~# C* `/ t- _5 r5 x( Q$ i{5 q' I/ y; V8 F6 j0 K
BYTE nTmp = 0;
$ J& V! C8 L% u2 w# t) h7 z' L bool bDest = false,bSrc = false;
0 c& q0 s( X: b for (int i=0;i<MAX_INVENTORY;i++)
* h* U; @0 W [) P/ Y1 y {
* Z' Q b8 ~2 ` if (dwSrcId == m_Item.dwId)" }* {) Y5 J0 P2 E4 h) j
{# N- ]1 {0 D4 l' E2 B, O% ?( d5 A
//id相等 则 改变对应的dest和src: I& J2 W3 i" u* E8 ~
nTmp = m_Item.nIndex;) Z; t6 h' j6 R
m_Item.nIndex = dest;
* r5 r# ?$ {; N2 M# Y0 @ }
1 L# R/ R0 m) M$ S5 e }# E4 }! k% l1 `4 s9 H) _$ d
//临时数据保存完毕,交换开始
- A2 l5 n- Q9 E: ?; y+ [8 G' R* { for (int i=0;i<MAX_INVENTORY;i++)1 L+ d8 B1 \/ N
{
$ J8 @( G) K9 ~6 a1 o' @ if (dest == m_Item.nIndex): c0 o6 V7 p& j4 ^4 `, z
{
/ E. g _9 } T/ x$ E+ }3 r5 _. ?4 R" _ //id相等 则 改变对应的dest和src+ j4 {9 d4 H+ i) o5 o3 G
m_Item.nIndex = nTmp;: K( G K+ c/ U9 o1 w
}
) ^; X4 W7 n8 {* Z }& w2 e' l* T2 N2 {! d2 t
}$ Y: @( f. D W) R% A( v. _- o
};4 I8 b. \: n1 K$ R9 _ R/ T: j
-------------------------------------------------------------------------
5 O* Q" M2 V& [. ^) S; Q ?: K依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ k2 g5 f( N/ B. \搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 O3 t; z/ T E% |1 K J" s" h4 H& r
紧靠其上添加:' A" H" E9 q0 C2 k6 a3 i
if( pWndBase == &m_wndMenu )
8 }. G' [ E0 T3 a{
) ]! |& v! B# \6 H switch( nID )
7 X3 T* k6 h+ W7 B' f4 n {
2 a( a+ S- V. O2 T case 2:) w& ?+ L f# d5 a8 C, H9 O
{
6 `6 N, P4 p4 P6 u6 Y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 ` }) w# S) t3 }8 e* H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ @- o, _% v, T; B+ m* |& T; y) {: ~
{
5 f& U5 V! Y4 d, b" F; C3 t8 F4 R, w break;1 u& k; ?3 M6 o# h6 t h
}3 X1 e! r) X: c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 _' F6 C+ b5 ], U9 M$ T( t
{
" O v0 s6 @* T& S, _7 p. l3 b1 d3 C5 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, {. R1 K- G8 |- ? if( !pItemElem )/ M. I2 z$ \8 O* Q$ `/ n) f
continue;
) l k* S! A: ~2 P if(pItemElem->GetExtra() > 0)9 N3 H2 l1 M- {
continue;
" F) X8 n% ^% W7 P7 k if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; `- C; o: N K* H3 [* } continue;
T* R- w2 h2 y, s: M) t9 [* E8 b if( g_pPlayer->IsUsing( pItemElem ) )3 E) f: c1 f1 g0 o# j
continue;
) M" {7 k) H" T7 i; z7 f4 c if( pItemElem->IsUndestructable() == TRUE )
% ]3 q- d% b9 h. i {/ J1 _+ V1 N$ d( g0 U& d6 J0 D
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 K/ l7 s# |" G& p continue;
) ~ M$ C; U5 n# m# Z& V }
5 r( Y# T! J: k$ J2 A g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- }; t$ S. Q* R. b }
( v8 U. f) D) T. a3 x$ h break;- b: E- V7 s# c1 T
}1 e9 e- z* w# b- q" N
case 1:# u3 D8 f# F$ I" f3 z
{
% h% ~& `. d* @3 i6 } //整理背包. Y. n |! Z1 _5 V6 m
//////////////////////////////////////////////////////////////////////////
* j/ c0 k" d# S; x$ J //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );' W* o5 v: ]( g
//////////////////////////////////////////////////////////////////////////2 U. W* N( ^# X
//////////////////////////////////////////////////////////////////////////
( W8 E" Q' }% |: G" }$ r CInventorySort* pInvSort = new CInventorySort;/ `+ M" N. A; ^6 l
vector <sItem> vItem;4 ?, R5 e5 g5 E! i2 D/ W; ~0 d
vItem.resize(MAX_INVENTORY);//初始化大小: i! h( X. M$ c* o7 p
//////////////////////////////////////////////////////////////////////////% [- ?5 D i# O! ^7 L0 e; V5 j1 C
//填充数据/ ]) u5 |; P4 A5 a' ^
for (int i=0;i<MAX_INVENTORY;i++)
" p% r6 H) t" ?9 b {& Y/ U( S8 S( w5 R+ J+ T' y7 p; T2 M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# d) [& F8 e0 v& _1 S5 }% ~ V
if (!pItemElem)
2 `7 J! n. u( g' B- \6 G0 | {. x, J4 W5 ? W' N& Y
vItem.dwKind2 = 0xffffffff;
4 c# C- X) q2 [# _ vItem.dwItemId = 0xffffffff;
! S/ H5 ^* {& J: v$ c% q- g+ ~- V6 j vItem.nIndex = i;+ Y+ h$ k/ d) P6 R+ a% [
}else {
( J. p' C& j4 H; i8 l* G! a* U ItemProp* pProp = pItemElem->GetProp();5 A" u0 L w# T O
vItem.dwKind2 = pProp->dwItemKind2;8 `% R# n/ e3 f' \3 o% q+ t
vItem.dwItemId = pItemElem->m_dwItemId;
2 Y; L8 k( f5 n5 F/ Z, T6 z vItem.nIndex = i;$ x, I: V/ g4 D( ]7 H
}: d' I# C/ u. o6 t }0 j
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; a! g* U h, g' ~- c+ H }
: p" q- I9 y8 O8 w9 }% a, `0 h1 J: X //////////////////////////////////////////////////////////////////////////& h' R9 Q# f. G' ^6 R
sort(vItem.begin(),vItem.end());//排序
# I |2 [9 z! f //////////////////////////////////////////////////////////////////////////0 F" M. T( e8 x$ K6 A
//交换
7 J0 m* O5 Y5 F2 [8 N for (size_t i=0;i<vItem.size();i++)/ t4 T! ?' @3 a1 C; K$ F2 R
{! k5 C2 n5 q- k# R
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# K0 @1 E4 w1 U B# P
pInvSort->Add(vItem.nIndex);5 ]6 t, ?! s- e0 P }: G. }
}8 J! k! `" R5 r5 j R0 b [1 Z
BYTE nDestPos = 0;$ d* d0 k! u% ^6 i* C/ g z
for (int i=0;i<MAX_INVENTORY;i++)
) K6 E( \$ D5 p3 L/ I {, C6 _1 X) I$ ]* g6 _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' p3 _5 z7 H- H
if (pItemElem)* r. C) F0 Q$ ?& }0 O
{( ]9 u: [: J L1 _2 w5 O9 y' i
if (IsUsingItem(pItemElem))
( U/ z7 f& P1 ]; C: P {1 s" S1 q$ y6 b/ z+ u3 u$ S( z
//这个位置无法放8 ] M) k; w. Z0 \5 q t2 ^
nDestPos++;
8 {4 g$ O0 C p S9 u, g }
7 N \+ h, h! A; g7 i# @ }) C3 j c3 l3 K& y9 a$ f! r
BYTE nSrc = pInvSort->GetItemSrc(i);
2 I) Z! @4 `; b$ \! Z+ U2 L pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; N4 c2 b- ^/ Q; u4 z% L* Y! ]3 C
if (pItemElem)
0 V+ q5 w H3 N3 \ {
! h6 q, y3 m6 ^. {0 s& Z8 A if (IsUsingItem(pItemElem))' m$ d$ E7 B! A/ R
{! V+ x6 L2 [ I" ?# ]9 h
//这个道具无法移动,跳过# V, M7 O" f2 i& m/ C
continue;
X+ E8 F, q4 G( T, [2 ]# r0 B) N }
3 @2 ^8 {# p$ F4 C }else{
5 I* ^2 E4 F1 I# l //空位置 不用动
' ]3 g3 }0 R O6 E continue;. E5 r" v" N( V4 g/ ^; n
}" Q7 }( Y g: N! G4 G+ _4 [# t
//////////////////////////////////////////////////////////////////////////
5 ?' t$ k# j5 f5 m# g //开始移动: V; X" f' X9 m& T. ~) y
if (nSrc == nDestPos)5 {8 i# G5 y3 b! q0 z# F1 m
{( ^- v) X! y9 \8 t# Z& P' O
//原地不动
" y* M" I2 w. {/ q3 O; V7 d" A2 F nDestPos++;
; p1 s( _( Q* x$ B) {" k7 y9 B7 j6 v continue;: ~0 `9 _6 A& O8 k; X G/ Z$ A
}
# N, G2 u# o& _ N" | } pInvSort->MoveItem(i,nDestPos);
( o0 U" L3 x- s' `- n6 K g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 d! m9 R2 p1 Y* I
Sleep(5);
) d: U! w9 ]; P1 G //Error("移动 - %d->%d",nSrc,nDestPos);
. e& `: X; V. J* l& } nDestPos++;& w% V/ X+ ~! C( w% [9 C$ y7 X
}# g7 g1 m. `* K
//取第一个元素的信息( b0 Y# V! b* |" _
/*4 e- B* h- r4 d
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): X, [. K3 d* M# b& h8 |5 F
{- l3 W! i J" c/ G
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 v; h0 r' S8 q3 ^& h' I8 } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 `' ~# ^1 P& A' V' ~4 {+ I. H }, W* V$ l( T+ f
*/
+ B/ y/ V5 M8 d, W' i3 i //////////////////////////////////////////////////////////////////////////
. g x. M" j3 y0 z break;
1 t" }4 S, N, T }
- B$ m# s% k4 f! d6 N }
! K8 d r$ E1 D4 G}- s0 [3 A% ]! l" }' I6 ^
m_wndMenu.SetVisible(FALSE);
2 f1 D8 t0 C4 c& D0 k2 k4 \+ w: W& E# O9 D
--------------------------------------------------------------------------------------------------------
' ], S- P' G; [( |* A搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# s6 O! }4 F5 \{
/ ^. W3 l- @2 A- c( ?: V. `8 PBaseMouseCursor();2 c, E! k' n6 }6 c L
} f* r% c% O) ?" w
在其下添加:
R* c4 c( l% v& {void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! i9 y+ r9 V& R- o{
0 C& X `$ i [* J4 b pm_wndMenu.DeleteAllMenu();+ Y' k0 E1 r- g! D' `
m_wndMenu.CreateMenu(this);
8 Y0 V, R( u+ z/ T, gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ Y5 k( }4 p$ N: m0 V# r. o8 J- D
9 U( l0 k& Z) _) f2 Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ |2 V+ p" s! B$ Q& c4 @. F; M: S+ z
{. F/ a" b) v v* R7 \# g
//P以上级别才可以删除所有道具; z2 G. ~! }( a4 S/ E, c! J; v/ k3 R: {
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 l) v1 T) {: T9 x}. B# n& x' \4 V" D- J; h" R b
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, x5 y% X( _% t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ F z$ I+ u" v- i0 J
m_wndMenu.SetFocus();
3 J# G: S( e( i& f5 e8 Q$ k$ r}5 n# c8 q/ A2 x
------------------------------------------------------------------------------------------------------------
* o" L+ W& o0 d5 h1 h; ~8 C* K*************************
* z% [: F/ ~# w) X& k1 VWndField.h文件
" U' J) ~8 T* |5 g" |& e*************************6 `7 K3 @! @0 E* Q5 I
搜索:BOOL m_bReport;
1 T7 R1 ?$ ]% ?3 q其后添加:8 y) F! x" t) S) `0 P6 {8 z" ?
CWndMenu m_wndMenu;+ e0 Y" M4 U) J
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* d2 Z/ E( Y; q2 Y* r) u其后添加:0 y: x0 h6 M5 k( D- u+ P: U! J
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# D0 U, z J. D& R% d$ U. z. e7 W* t1 P; y' B; V
. Y: A1 O2 o) K% A! U2 R* ]
|
|