|
|
源文件中_Interface文件夹下WndField.cpp文件
& G4 h$ B+ r7 S7 y v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' l$ H% k1 b% L! Q4 s5 u& d6 W
5 M2 R' c4 M4 s3 j- Q! fstruct sItem
) y7 g& Y( a: \0 k" P+ w- v{, Z2 a9 Z/ `0 ~0 r
DWORD dwId;% d7 a! h, J2 |$ g
DWORD dwKind2;) o) a; Y/ y6 X1 L
DWORD dwItemId;
, f- y. ^3 s6 LBYTE nIndex;
2 a4 j7 M+ [7 {: _/ BsItem(){: _3 `1 [' a4 _* u- |
dwId = dwKind2 = dwItemId = nIndex = 0;$ d' \/ a: o* l* \! @
}
& |$ t, y. P( ?' a6 h G" W6 L Obool operator < (const sItem p2); J0 p4 ^) W: T
{" I- b6 @0 C( Q$ u, u% V5 q$ h
if (dwKind2 == p2.dwKind2)
( R0 Q7 Z6 Y ]/ r {
7 ?4 c2 D# n) B( E6 ?) Z return dwItemId < p2.dwItemId;) p) M9 j- i2 t
}else{
1 q- H# i# i+ A9 i2 `1 T return dwKind2 < p2.dwKind2;* \/ n( u& R5 @! j/ @
}* U$ S; Z; _) S$ L& d
}, W. w* \, J5 Y" k% F, ~
};9 b/ K M. b6 u0 c: c
class CInventorySort
- ~8 X, f& }3 ?{
8 Q3 o. e7 e: X- U u5 C8 }public:
( C0 z# ^$ `* j/ u( [: ^: }0 o% \CInventorySort()
1 N) g% w0 K, C8 j. I8 `- |{
7 |2 [1 q2 J5 x9 I m_dwPos = 0;0 @7 n; |* ]1 V& ]0 s( v' P
}
. @4 L6 ]- L! A- W7 v6 @# {~CInventorySort(){}
9 y3 i `% q7 w* T8 \1 Pprivate:
7 F1 k1 H! A# V, jsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( w/ Z) s( }, y( h! v
DWORD m_dwPos;
1 b$ h2 H7 U* ppublic:
) A" U% Y! b8 ^0 r; j9 Vvoid Add(BYTE nIndex)) \5 t. p- Z4 K w1 a) }0 a
{, \1 B# Z8 o) m8 z. I) g2 n
if (m_dwPos >= MAX_INVENTORY)
6 W* I# F" m4 @& e6 ^ {$ X) I9 \8 c) d1 u3 R" t: m
return;
0 b2 k, O3 L: r1 t2 {5 ^ }
- b* x( i, z: [ m_Item[m_dwPos].nIndex = nIndex;' J# f9 L) s* f% t
m_Item[m_dwPos].dwId = m_dwPos;
7 I% j) d( B- u0 _4 R m_dwPos++;
& p8 K3 u5 x1 h4 j, d( \' m}$ A1 N/ C) A9 W7 R6 z+ p
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ S$ T5 q# W1 {5 Q, q
{- d, I$ ]! w( k, F
for (int i=0;i<MAX_INVENTORY;i++)& v& r# x: u8 n- w
{
; P$ I* t: e) P/ H if (m_Item.dwId == dwId)
C' ~9 u' [2 T, ] ] {
6 P' ]) |" f1 T: q, @0 R% {! ^ return m_Item.nIndex;
& o7 f8 U7 L4 s2 V _ }# I6 G% P9 y6 F, P5 F" q9 E) j$ e5 q
}
- e) c4 o+ y, ~: E+ A" | return 255;
, s) u1 _" H% m/ j2 G}& l- l1 f- \1 z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 M8 ~$ }& N0 p" M2 Z8 P{8 h4 V) s) h; A+ i
BYTE nTmp = 0;" B/ |) D, X, @, i( U. k; C
bool bDest = false,bSrc = false;
# S; E( ^4 K; R for (int i=0;i<MAX_INVENTORY;i++)& U" C9 I8 K3 Q B
{
( e8 X; v: o5 ]0 u8 A- g8 }( v if (dwSrcId == m_Item.dwId)7 ^3 v/ E) [/ E3 t3 { b3 T' P
{( L6 d! k$ Y, Z" A
//id相等 则 改变对应的dest和src
( @8 x- H# X: k( { nTmp = m_Item.nIndex;
# S+ \% A9 S. {7 Z' \8 Z- q m_Item.nIndex = dest;& U2 Z8 M( Y2 W8 @* I! P( u
}, W' h+ y5 e; X$ R! [: ^
}
0 d" g4 \& z& Q //临时数据保存完毕,交换开始$ p0 {9 p* s4 O$ c R
for (int i=0;i<MAX_INVENTORY;i++)9 G; u) E" A' x' K+ I9 _# Q4 v
{
7 h7 x0 W5 V0 u+ l) u if (dest == m_Item.nIndex)
# x" \6 D8 y# @9 B {
/ J' B$ [ {- ~; k( U2 @* F //id相等 则 改变对应的dest和src
* j: s! B' X. n& X# t5 M8 V; X! F: E m_Item.nIndex = nTmp;
8 R3 M5 t% k$ y1 Q6 O }
" j* g9 T4 Y/ K1 u' | }) j7 P8 G# S. D' p+ i& L
}8 I' p9 [0 z) J
};* \! t2 z0 z* c6 R- l: s. s+ s3 m- g: E
-------------------------------------------------------------------------: [2 \ U- X9 i3 a+ _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" q" v: `/ C% M- }. D0 M3 e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! j0 W2 M+ _. G$ v# L# Z紧靠其上添加:
& j9 f# w2 Q3 d1 d3 I* gif( pWndBase == &m_wndMenu )
3 P6 E4 g3 R* o+ ]3 z{* G( T8 i; q. Q" e) u" _! S0 ~3 t
switch( nID ), }1 L2 {, `# E5 D/ M
{
. X8 j+ w2 r" ? case 2:
- _3 b0 }& L- ^1 r+ ~ {
! n G8 o. C H" [! t+ }: A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: v8 X+ W3 q, J5 Y6 r% W/ y& L: x# j3 e if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
Q; J6 s: G) q U, k {
$ c: F/ \9 t9 Z/ t" `0 g break;' ]' v7 T( K$ r0 Z
}) U3 F6 s [+ I* B, V
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* i" A4 _) l- y2 L* a {0 A# B* `' c0 @$ f: ], O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 r! ^6 J, P$ t M- h0 t. v- d if( !pItemElem ); g& ?% d$ H$ b& s6 Q% Q* }
continue;
0 x9 c" t f, r* m, i if(pItemElem->GetExtra() > 0)7 R$ j: M+ P/ t: `8 e
continue;; p, w' X( t! ^0 R: Y H9 R5 ^ L
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # x% I+ X( x( j7 N
continue;
, W7 L- I0 N; ]9 Z* f0 K$ U if( g_pPlayer->IsUsing( pItemElem ) )
+ |8 e5 P+ \8 x6 T: r continue;) z* P/ ~4 l8 A" o2 y( y
if( pItemElem->IsUndestructable() == TRUE )- V. Z( g b9 y8 y5 C0 P; O
{
: i) j; m5 @! ?* @2 v: k) g g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# F7 N: v6 w% Z" l. Z: R& J7 c3 i
continue;
" X) i& g9 n% z4 h9 Z! O8 r }
2 `0 Z( w9 _/ G9 A* ~1 b1 i& a g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
4 G# T# k7 Z1 M0 e }2 W2 m. u: G7 p: v5 u" X
break;
/ l+ K0 l# Q9 S }
: z# j( U& I! a% e+ T& b" G case 1:3 w- @, K5 o0 I9 I: M
{
7 w5 i" E+ o, E7 H1 y //整理背包4 |& M) N2 V. N+ M1 D
//////////////////////////////////////////////////////////////////////////
) }5 E& |$ @. R //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ k7 D8 g6 M6 r7 ?# m
//////////////////////////////////////////////////////////////////////////
3 J* w4 o7 r+ S //////////////////////////////////////////////////////////////////////////& [% S. a- ^0 N+ G
CInventorySort* pInvSort = new CInventorySort;
1 X/ \" u0 H# v vector <sItem> vItem;
3 b2 e* L4 l' ~7 q, t vItem.resize(MAX_INVENTORY);//初始化大小
; {& C6 w$ E7 J4 U& {$ v! E$ Z //////////////////////////////////////////////////////////////////////////
" m$ d- r$ m( E4 j //填充数据
1 B- ^2 j+ f) L6 k3 \ for (int i=0;i<MAX_INVENTORY;i++)2 W" f4 H. v# ~" v2 k4 l
{
3 V7 Z' s+ g( X( w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 C: F( K# l* e3 D if (!pItemElem)& [2 z* E+ u) s9 q
{
: g {( C0 p' G9 O0 H2 S vItem.dwKind2 = 0xffffffff;) @! i/ Q9 R/ H u+ m
vItem.dwItemId = 0xffffffff;9 ~# C D7 _# r0 M- ^9 f
vItem.nIndex = i;
O9 h# d1 T" H3 I* e4 [ }else {
# m2 _$ C: D" _3 ~ ItemProp* pProp = pItemElem->GetProp();
4 L7 g, a! O+ O8 {) u( o vItem.dwKind2 = pProp->dwItemKind2;
& e9 p F3 G( Y& l' F# B vItem.dwItemId = pItemElem->m_dwItemId;. h T6 w. T9 } Z$ b, z2 `
vItem.nIndex = i;
/ i: t$ D0 L3 ~$ [$ a h, R }
! B5 u4 k) e0 q; ?9 }8 |& q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ }0 \& ]* H: Z5 v+ ]
}, \/ y& j, Z3 `, ~5 y+ B- V- e* Q* T
//////////////////////////////////////////////////////////////////////////
# x; C/ p9 a1 S# T* N sort(vItem.begin(),vItem.end());//排序
4 K% ?, ]/ a( G; T& `; v, K/ { //////////////////////////////////////////////////////////////////////////+ n/ w- ?6 }! n+ D m; [' b' q' r
//交换
- n; R- o+ u( P* J% j for (size_t i=0;i<vItem.size();i++)
( I. C2 L$ w7 R" O2 ?( i1 S7 T {
3 o& \5 J1 Y% {: Q/ A" t" K //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* p: k! L- d" k, g
pInvSort->Add(vItem.nIndex);8 p" C' P4 t: P/ ]2 g4 V A
}- X6 k, U5 b% p* h. Y! F* E
BYTE nDestPos = 0;8 r$ Y$ F/ u3 `: g- U' B
for (int i=0;i<MAX_INVENTORY;i++)
# A5 G3 v+ u; t {
% @, y% }1 X S$ O; N/ q7 Y% O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) G1 ?8 a$ s. P& O5 W if (pItemElem)
6 E# y7 T9 O7 u( |, K: m4 D6 E {
+ `4 A# y) Y- F2 d8 x+ v; a) X if (IsUsingItem(pItemElem))1 H. C+ N. J. E9 A- W
{
5 i; U$ @! n$ L8 j- E //这个位置无法放( {8 p6 A" U' q+ t" O
nDestPos++;
6 d. R, t. ?- ]' ?0 ~& H }1 y1 _$ U( }2 \$ g7 H
}, n2 t# U& q) L: ]& \
BYTE nSrc = pInvSort->GetItemSrc(i);, I& M) |, N& |" h) g0 T' v. C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ `4 T/ e. A3 r" V2 [, |. `5 p5 C
if (pItemElem)
+ ^/ J8 @5 l& i+ ~" S6 a {
' m; r: B4 y3 C' I5 \ if (IsUsingItem(pItemElem))
; Y5 r/ F8 L, j" p {* |6 e' L' A3 a% F- M2 b4 b) X1 O2 @0 B
//这个道具无法移动,跳过2 t d, M) o. h5 _/ f$ z8 O
continue;
' @6 B2 z$ C' [5 q }6 T* Z8 \# N3 }1 n7 ?% O
}else{
2 |5 J% v% a; Z: G$ t7 \& o //空位置 不用动
$ H+ f0 \1 Z* W! g {6 y4 S- B continue;
" l& J) L( J0 f2 |1 Z. d }
6 @7 @5 Y s7 Z& |" R4 a //////////////////////////////////////////////////////////////////////////. C$ X) |6 `- Z( ~ f: N9 B( W
//开始移动/ h0 Q0 r$ x6 e7 U7 @! p$ J k
if (nSrc == nDestPos)
9 E9 V) [& H! c: K0 m& t {5 r! T5 h- ?7 z- m5 q
//原地不动
2 F4 e8 M- d! B+ B nDestPos++;8 o: Y: d; t1 d
continue;2 l, z7 `+ }3 [& ~) l9 N
}2 U- r0 i) }( q0 `5 S) p
pInvSort->MoveItem(i,nDestPos);- j3 |, g% {3 r3 G6 f* a
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# l5 `. D% x- B3 D q Sleep(5);4 Z9 D5 @% j r; S& Z
//Error("移动 - %d->%d",nSrc,nDestPos);0 \) S! a# N" f" J6 b& ~3 w) ^2 S
nDestPos++;
3 X! j5 H% C3 [ }2 E) `( n( E- a
//取第一个元素的信息9 i5 D% K, U2 o; Y1 P# h
/*
- U0 y# G9 `5 c: Z ^! {- T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 ~) P/ B7 I( I; Y, O0 m/ Y% g
{, ]; G/ J- y- N& u, p
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 E- ?( @9 k# B: @; u1 s0 t. w+ y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 |$ w# }3 h5 x3 u1 L& }/ m' w
}1 ^2 M* Y5 H3 k- Y! y7 L
*/& C. H7 j9 X' G! w$ ]- F; d
//////////////////////////////////////////////////////////////////////////
9 _$ W% c" }- [* d" L break;
- i8 y) D# _! X% q: T* L }) L( A/ Z, ^* V. b1 n6 i
}
; J7 a5 \+ ~8 W. V b/ _3 A% i& x}
% X6 `: W% x, q! |m_wndMenu.SetVisible(FALSE);
6 Q2 E6 I+ s# @8 D8 J: g1 U! w$ S8 n: U
" X/ L- G. z6 b8 c5 ]9 {--------------------------------------------------------------------------------------------------------
( ~/ I1 H4 [" N" O2 {搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) t$ {. a% t Q6 e0 w3 |
{* x- y: A) R9 P8 S
BaseMouseCursor();& [. W* [+ V% x) x) Q
}3 @4 I# Z' C- N% {5 A8 O) _
在其下添加:
! Q* _0 ]- s; V' rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 }& a2 r3 ?. V4 v# z
{
5 E& b3 a! L. s! rm_wndMenu.DeleteAllMenu();
4 y1 v8 s( s3 _# _( \* Tm_wndMenu.CreateMenu(this);
- e; |8 L1 A" }( f- K0 e3 K# rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. R7 H9 C( A2 D. C j' h2 G" E; j1 O, }6 q% z/ {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 G: o$ B ^8 X& t7 U* K{
6 j( J o1 `- r" _ R! n8 d1 Y //P以上级别才可以删除所有道具. u' {: z$ k, g
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ Z/ u8 v# i/ a}
1 a; {, l4 B- y) G4 g4 ^' Dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 T' v1 j% n1 A3 C6 ~+ j, s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. m; @. U+ a/ _- Wm_wndMenu.SetFocus();
7 X# S2 T- R% |7 \1 A}" G* i# k3 ^( w. {) ~5 U- l
------------------------------------------------------------------------------------------------------------8 q# s g" I* e
*************************: Z5 b+ C! k* t* W8 w/ H* A* j- [, |
WndField.h文件4 G% @- l4 N6 j
*************************3 a9 A" A9 d$ G
搜索:BOOL m_bReport;' @/ ^, u3 x8 X" G
其后添加:: ?9 p3 \# Q9 D. T) L
CWndMenu m_wndMenu;6 F. n6 C% J0 f6 s$ J; y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# H5 Q' U9 ]; o其后添加:5 Q/ M. t- W( D: v
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 {' O/ W2 C8 a4 @0 g) [# M) y( H$ m9 t: z: a# w+ B9 S
Z1 J. \5 }4 [, U! |/ u& i/ a |
|