|
|
源文件中_Interface文件夹下WndField.cpp文件
" E* G) A" V/ |7 w# o4 U2 K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 t9 Y! }) Y# T# l/ T7 B1 O
% Z; z$ L! T% T3 Y) w9 G
struct sItem
* i- j# U9 e: u, R- j0 k4 ?* C{
5 c- b; P" v1 W8 y7 M- R6 YDWORD dwId;
1 K F" ~5 U% V% FDWORD dwKind2;0 e1 _/ J8 m- s3 k6 [) M
DWORD dwItemId;
% o* s9 P6 t8 F. ^BYTE nIndex;* h( u4 V" B3 }
sItem(){# D2 K5 g! O3 f4 s- l |$ B/ D
dwId = dwKind2 = dwItemId = nIndex = 0;' R: S( y4 |, R2 w8 {
}
0 x6 `7 S7 u# k$ H6 ybool operator < (const sItem p2)# w; u% K1 I' b4 t: M6 ?. ]* L3 {
{5 G# d5 Q* S) y8 b" S, _; B0 Z& P; m
if (dwKind2 == p2.dwKind2)8 S$ a) z6 C! g1 q* j" \0 n0 ?
{
. S) i8 K2 c' d V' L9 { return dwItemId < p2.dwItemId;1 w$ `0 Y% ], v
}else{2 \3 ~: p* }, u% s3 r
return dwKind2 < p2.dwKind2;+ J; O$ |+ R+ C
}
% R2 Y( U. v: i: O}
8 f) g6 M6 R- r4 C7 G* t5 W" S};" n1 i- w. k: h; D8 Z
class CInventorySort ]* z) e. K# Q" T! R: Z
{7 K' x+ |( C# l. B
public:
5 k+ u G8 |0 W6 rCInventorySort()
J3 V# g% `( h' E- I. s2 ^{! C, k2 w: `% h. c7 Q5 d( P' r
m_dwPos = 0;
& k s- S" M5 X# m/ o( i}4 V9 o- }: F" U# R1 ?4 t
~CInventorySort(){}
; c2 ^& [( P$ d6 l! P6 ]: C ?private:
. k7 j+ _' c' b0 L. b$ d. hsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! A! a. l+ N! k b; wDWORD m_dwPos;
: C2 H2 U4 ] |5 `3 t" fpublic:* b. t) ^. R# B/ O' j' t
void Add(BYTE nIndex)
* S6 b/ s: f$ Y a7 T/ B" ^& V{1 w, i8 Q& ^2 } S& B& r
if (m_dwPos >= MAX_INVENTORY)
+ T" `* p& P& e9 E7 o) j# K {& W- q; B, T' i
return;
2 u. e' W9 w# J) b }
3 R. r K0 _+ o m_Item[m_dwPos].nIndex = nIndex;
3 l* d9 A! j: [- R m_Item[m_dwPos].dwId = m_dwPos;/ W3 ~) b. K+ N. Y
m_dwPos++;# I( y" N+ R& n% Z3 y4 N
}
8 Z% I2 ?; p. F9 J Z# k- tBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: P' r( O5 l. x1 a& V* P8 s( D |{( g4 J S ^/ F- |8 ^3 s9 L
for (int i=0;i<MAX_INVENTORY;i++)5 ^, I+ t4 c c# P8 g
{
' b; ~9 m: Y' T+ n( | if (m_Item.dwId == dwId)
' ]; m0 w3 b5 f {2 }$ L4 P8 m/ d6 \
return m_Item.nIndex;
b6 K8 w9 |# S! C- M( h# c) b }1 l8 \8 o, c. S% {; b
}$ X* w9 x# S5 L# K. d. ^! ] w
return 255;
# m' Z5 A* a! G6 b}
$ Q* X& v+ e1 N+ Z- A$ F. C& Jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
( y( ~4 ^# O6 A# g$ b( D! e{- W+ {, Z/ j3 J7 H3 G6 Z
BYTE nTmp = 0;
. S1 b7 u8 a# Q bool bDest = false,bSrc = false;1 p# S1 }0 s# e) B& p
for (int i=0;i<MAX_INVENTORY;i++)3 A- W5 Q; G: c
{8 F! k! A5 x, u3 l) p$ p1 U( Q
if (dwSrcId == m_Item.dwId)
8 N7 w9 i' K( Z5 d- w {
. i. c. J: Y$ E U+ x- | //id相等 则 改变对应的dest和src
# v, }7 ]- c, Q. C4 C& { nTmp = m_Item.nIndex;
& X- y6 M( a) Q6 D m_Item.nIndex = dest;. u \6 W. G9 [3 U; ^) L
}
( j9 |# Z" B1 ^; g, t }
L2 W: e# {9 F/ q) y- m- y //临时数据保存完毕,交换开始, J0 L0 @2 f( |' d. i/ i/ O% s
for (int i=0;i<MAX_INVENTORY;i++)" F% l! t8 m! X0 \4 C
{! M7 O4 Z6 e2 z$ q/ C
if (dest == m_Item.nIndex)
. H; [( K6 x" x3 ]- W7 [ {$ }) J/ I( f1 F) |
//id相等 则 改变对应的dest和src
" h$ L; \$ [2 Z( \ m_Item.nIndex = nTmp;
* t, F+ }8 K( P8 j, l6 ? }
" b' j" `, e h; l8 h5 T1 s' x0 T8 W }
) X7 ]' ~, l3 l5 D}
0 c- {4 i6 Y: P6 g" \& Z6 T* O};- w# h( k$ k- E9 c
-------------------------------------------------------------------------1 C" ~& R8 I- K8 e5 r: ^
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 Q# d- H M# _) T
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% u! S. }0 q$ G; ?$ b6 m; i1 y
紧靠其上添加:
$ @0 h) t% x9 j- Y) f" ?: e' e3 M+ Tif( pWndBase == &m_wndMenu )
% y9 s8 B7 L& D" i( r{
) n! D- d& v" k" k switch( nID )
4 r% j, i5 _' E {0 P) S" {% u) C, [
case 2:
* G/ v, Z1 F1 v5 i) Q8 C3 v* x$ u _ {: {9 }8 n, G, s x+ M! U) D/ X( D
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: {5 u! h/ C& e9 ~/ \/ H1 b if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 l% q, N9 a0 g" \, Z2 c$ L$ @ {) r* |, ]* B. H6 ^1 r0 |
break;: P6 D! H1 @# d; N4 |' E
}' _9 _" n }5 l
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& m8 W! ^: N* q) D* F. q
{
& T* E+ G; w' E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 w4 I& `% u/ A* Q0 Y$ N' s z; d1 _
if( !pItemElem )
. Y9 d4 q1 m9 E8 G. A2 h" N continue;
- }( h' z/ H B+ E- R if(pItemElem->GetExtra() > 0)( E+ b/ C* k) i1 o
continue;2 r0 ]9 u4 F+ D
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: l. D5 Q6 I1 U* H/ v( N! r1 ~7 V continue;/ ~3 J. z3 v; A; P# _
if( g_pPlayer->IsUsing( pItemElem ) )
6 N3 q/ D. V4 R0 L continue;* C7 {2 n, \( s" A; m/ M
if( pItemElem->IsUndestructable() == TRUE )% {3 d' F' _9 B5 T( z# Z
{* o" n" W! @3 x' F' Z; E) |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& ?; M, ] [ ^3 f: v continue;
8 b0 J' w$ d- a9 H! N( a6 G }
, w' l ^( O/ X$ \- z0 X g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 z' d! `" W, s# D } D Z# A4 ]6 J8 M/ e# f' ?
break;% r1 k6 e7 X5 a' ]4 k. W
}
7 P- n% i! n8 b8 L' p `' c5 r* K case 1:
, _5 i5 g6 M0 {, j( ?4 L: c- t {( ?2 q- C6 x E: @' O# h3 P
//整理背包1 k4 V1 W" p+ s0 k6 T0 E( j& \" ~
//////////////////////////////////////////////////////////////////////////) H N9 T5 d$ R1 z& |: n' { H
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! d& n) o' L( }2 w$ a3 q //////////////////////////////////////////////////////////////////////////
+ o) |% |. v8 V2 H T //////////////////////////////////////////////////////////////////////////" ]0 D. Z _ {* k W
CInventorySort* pInvSort = new CInventorySort;" B+ K+ I3 y& i4 d% }
vector <sItem> vItem;
4 S" x* j. x# Y* N vItem.resize(MAX_INVENTORY);//初始化大小
! L. r, d7 Q! ?7 |3 @5 p //////////////////////////////////////////////////////////////////////////+ z1 y e6 x! l6 I; C! a& N# V
//填充数据
t9 n4 T: m* T1 w8 U) X8 f for (int i=0;i<MAX_INVENTORY;i++)
t; ?+ z: P; c1 W+ c {
) C% x9 j) u3 x" O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. {. l: T8 {- @# v. ]0 l8 @9 q if (!pItemElem)
/ p1 L3 [) y" w& C/ `' r. T. g {
' n# I# ]; U; u0 u* \1 O, S; M vItem.dwKind2 = 0xffffffff;
* @* A" g5 X# V( b; U vItem.dwItemId = 0xffffffff;7 f* D: P$ O7 n$ |, _
vItem.nIndex = i;9 S( L ]) S2 L6 }$ E
}else {6 H$ [1 H3 V. t
ItemProp* pProp = pItemElem->GetProp();! ? e& R* \2 J; t
vItem.dwKind2 = pProp->dwItemKind2;
; e' f- @" i& v. L( |; w: Q+ W# p vItem.dwItemId = pItemElem->m_dwItemId;- B3 ^6 N8 b9 p( R) ?/ E4 n& E
vItem.nIndex = i;( f) S: b. ]" L
}. t% ~' q1 Z2 |; e
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# L. ]/ h% T- Q. P: m }
& q/ \( S7 i0 H& z //////////////////////////////////////////////////////////////////////////2 H# z& o" i; S/ N& b5 S+ \! k
sort(vItem.begin(),vItem.end());//排序. X" v2 y( O$ ?# F! y. O) x; V
//////////////////////////////////////////////////////////////////////////: Z7 t9 Y+ h) d; }% G
//交换
$ ?0 W; N" j8 |: G for (size_t i=0;i<vItem.size();i++)
1 z; f1 q3 F$ w( }) \ {" \# M M& V2 n+ D# v6 F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ W1 i! W2 [5 v# y1 e pInvSort->Add(vItem.nIndex);
8 A8 V" d+ X% P9 m }, I% O/ j6 R, c9 P3 k
BYTE nDestPos = 0;; I2 H- |0 M7 n$ d1 a! T! s/ B
for (int i=0;i<MAX_INVENTORY;i++)& ]/ Z- j1 t" C
{2 ?/ ~3 d) l4 f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 c7 M2 g, ~9 `( r8 m9 n; D if (pItemElem)
- i( a& h: i+ y4 k* h {( D0 N+ j, B* [ s: m
if (IsUsingItem(pItemElem)) ]' J. D7 u( I0 [7 J
{
0 ^: |' ?$ j7 `/ i //这个位置无法放( K0 ]# i2 z& M
nDestPos++;
/ d! Y% g: }6 V$ j% t+ n }" w" |. q% m2 Y8 i2 L
}5 S# L1 T i* g+ z1 K, D& c
BYTE nSrc = pInvSort->GetItemSrc(i);
' t2 f0 X* T0 N) E, O; m pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' G7 r0 v$ l' w3 \% \3 C5 t if (pItemElem)1 `' P1 K. n' g6 R; A# o* G7 Y6 {
{
1 n. u6 ?; F, t; _ if (IsUsingItem(pItemElem))
: R! ]6 M# ` ^: c M {. P, E5 x2 F" h9 N: J
//这个道具无法移动,跳过+ U1 M5 h7 \ |% b% B
continue;2 B; X5 X% j/ J4 O8 f: k0 C
}2 r9 i# O. s8 m3 U" z( |# v
}else{
$ w N& {- p5 Q/ l //空位置 不用动' |, I2 {, o5 P7 U
continue;
8 D3 N1 Q' v- u' D }
0 o3 u( d; d0 ~$ b6 ^* R; N //////////////////////////////////////////////////////////////////////////0 d( S" }* T6 w2 ~9 `) S0 o
//开始移动/ V/ B! ^7 p- C9 @( R
if (nSrc == nDestPos)8 @) }& `/ D( P" |& T# M6 f
{
2 F/ w; J/ q& y5 `8 Y //原地不动
( k# f% d7 j6 m3 k n0 Y; Q( u nDestPos++;
! N9 {; a+ s8 O* C/ H continue;
2 b$ ]. c/ ^& o2 i8 v0 H }9 l' v i7 q' T' {8 R
pInvSort->MoveItem(i,nDestPos);. F/ q# m9 Y, I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' o0 b, a+ J" P8 ?$ O Sleep(5);
% A( l: e1 t# q9 }& p //Error("移动 - %d->%d",nSrc,nDestPos);
/ n, R' x: s( D* h% g4 V- o nDestPos++;
6 J$ H' ]) y- i7 F) Q+ | }
2 c4 F7 ?( f+ u! p, _1 l1 B& b: ^- d //取第一个元素的信息
% k3 a2 k5 ?; P+ l! \ /*
# {3 V3 q( G; x if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 Z5 U* x4 O+ O/ e" c: p2 q! h/ K
{
( o+ W7 s! U+ y7 S3 T Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# b8 A* X& O. W+ L. K: W g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 ~. Y9 T+ E' t. z s- ^ }1 h/ e7 }/ x- k9 m% K
*/' ?/ @% C) q4 ~, A* q
//////////////////////////////////////////////////////////////////////////+ s5 x0 A1 g0 Z! D
break;8 T. D. ?5 `" _2 v, W, o
}- N( B2 v" n" p5 T1 N
}
& C8 G" @1 m6 p2 L6 m7 p: ]}: y: i: u" e# l; b9 M4 C7 N
m_wndMenu.SetVisible(FALSE);
) G# F+ k* ]9 Y1 g& z, T
1 x, g' ~) m4 G" C& H--------------------------------------------------------------------------------------------------------
1 C) ]8 T# b6 o: u, E5 b( ?搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 {0 \/ k& a) r3 D- O+ H: }5 t
{
3 m5 {9 C% R3 c8 ?; K, W8 DBaseMouseCursor();
4 {. D( j! W+ A# f9 e}- u. y1 v( L, E2 `9 N( @
在其下添加:+ `) ~" O% U( V* A; Z- C: R( |
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) Z4 Z3 h# i G# r: P{
7 G& B, v+ @- k9 V+ y8 nm_wndMenu.DeleteAllMenu();
: x; ]2 O6 ^* v+ Fm_wndMenu.CreateMenu(this);
4 V) _3 _% n$ Z8 } [* M# em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% P9 g( o4 a$ F1 T x! ^( ~6 |
* l* s, J( [6 f& }if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* x0 v) H |3 }& V, u% N+ G) ?5 R{
: o; C$ m* \+ y8 U //P以上级别才可以删除所有道具
0 t3 b1 ^7 e" R' }( D* V) _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 d& l. U/ V8 {: q$ j7 y; _) L' ~: L}
7 i- ?, ~; d* W' nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 e) ?5 H' b6 z Y4 ?: P( Nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" A u# `3 J0 Y& e& @m_wndMenu.SetFocus(); t" w* V9 @9 f) o/ ?: Z
}
" D1 [0 g/ j$ y* o$ m3 k- I3 v------------------------------------------------------------------------------------------------------------
2 w% q/ [* A$ |3 s4 x*************************; K* ^- A( Y5 J. B0 d2 G! ?9 A1 W+ j
WndField.h文件
1 f+ a) B# S6 ~6 P*************************
" H8 N+ A; \. k搜索:BOOL m_bReport;# C7 g2 H* J' ^; X4 F
其后添加:" q( s7 A) C4 i7 [- i
CWndMenu m_wndMenu;+ p! U1 N& x, b5 X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" N% L' h5 b" ^* v4 x
其后添加:
& {& I) n, w; j) X' t |virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 k$ j( t+ K( b( A1 k5 J- K7 q1 R
% a8 e* L- \* w* _+ O |
|