|
源文件中_Interface文件夹下WndField.cpp文件
) m3 Y4 J& U4 w- P8 Q* F% e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 @9 y2 d9 k. F
# g: ]0 e6 @8 _4 X& Ystruct sItem: y" H* @ s' i
{% w" v/ ]& N0 j4 c; S1 z
DWORD dwId;. _4 i; \# W, d9 }0 `% }0 j/ t
DWORD dwKind2;- w1 p4 A+ z5 _) F3 b/ W3 _# O2 s
DWORD dwItemId;* Y3 D& I# S& l) n
BYTE nIndex;' N# T, y" I% X7 a7 `
sItem(){; B9 Y1 Z% R" C- w D& y2 W
dwId = dwKind2 = dwItemId = nIndex = 0;9 D0 N0 p8 C- W$ U
}: |) o( d5 x: k& K$ D
bool operator < (const sItem p2)2 b/ H$ X. h* E) k: @
{
; U5 D2 b4 E) b if (dwKind2 == p2.dwKind2)
7 L( R# m9 n' V& c V8 e {
8 Z% A- p; {" e/ i9 A$ c9 P return dwItemId < p2.dwItemId;
! G7 B' i% N) l7 R3 } }else{ K, c8 q8 M& {, ^; C
return dwKind2 < p2.dwKind2;, ^" z5 T" g* e6 v4 S
}
4 g" |! {% P7 g$ q6 z/ ^}8 Z8 E$ N+ A) g# l' T9 d" k
};# A% n! f B, `! w, j% a
class CInventorySort9 F. \/ `" G" t, Q- q
{
- v# y% U2 T. ^3 N7 K6 Vpublic:9 p& \3 x$ d5 \
CInventorySort()
3 v2 j# c5 a# S, R; Y+ J) O{3 I3 N+ M2 Q. b
m_dwPos = 0;
( a7 A- A7 e2 N# p3 h8 U3 ]3 Z9 D( L/ G; F}
) s7 D. v! {4 Q' T3 P9 f" O~CInventorySort(){}
! h* p) g" D9 dprivate:4 o6 q0 x! n! y2 C# _
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' l4 u9 ~& T) |DWORD m_dwPos;
+ R' g5 L' e3 Z. {) m3 t. Kpublic:/ c! m; e6 x( k# n0 F
void Add(BYTE nIndex). f, D4 q5 G3 N3 b( s
{9 f* r0 H2 H# w7 e6 U
if (m_dwPos >= MAX_INVENTORY)1 @7 D- S( {7 g T, D
{
2 j$ U8 }+ [9 |+ N$ H* o return;
+ q9 b: X$ b7 y$ _% D }
" u( k o& H0 r' s+ f. K0 o m_Item[m_dwPos].nIndex = nIndex;& g% d9 v% e/ w, D. M/ V/ q
m_Item[m_dwPos].dwId = m_dwPos;; y4 u' X ~6 ?9 U' [- {1 }" H
m_dwPos++;
7 N1 s( U1 }, a! \! A}
4 q$ R$ ?- a X3 _# {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 p6 S: h6 e8 D5 h; T{
: a b. F5 _' q* j: j for (int i=0;i<MAX_INVENTORY;i++)9 o5 [; G) ^+ K+ Y! J' @1 {* C
{
' n2 X0 i% f, n+ M9 X if (m_Item.dwId == dwId)
: m0 v& }% ]$ J6 r7 u& g- S9 x# h {; d6 x' P" {8 |& x' C! X
return m_Item.nIndex;
% H7 _0 ?, N1 E% o& I# T( q }
7 q j5 N* M" L4 V' V }: C, k7 b4 O8 m+ v. K" g# B$ L
return 255;
9 g) h7 e/ H2 M# H1 \$ r}
! {. B. ]/ N" ?& I h1 |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& D7 Q& F4 ^0 h1 ^0 x
{3 g. K9 f; m% _6 Z
BYTE nTmp = 0;
; a. b- _5 q% b Q bool bDest = false,bSrc = false;' R7 r& g: z- r* f5 v2 b% Y
for (int i=0;i<MAX_INVENTORY;i++)4 a: L; L& O2 R8 _' t$ B; @/ g {% B
{
, A' S% \' g0 Y6 R3 l if (dwSrcId == m_Item.dwId)! }# m/ I) ^ ~; i8 s$ {
{
/ D, G% c+ u3 S {( ^, f. m //id相等 则 改变对应的dest和src- K; I7 w, k1 p3 F
nTmp = m_Item.nIndex;
2 v$ h7 z3 R- }% }* e& g4 i m_Item.nIndex = dest;5 E+ {% Y5 C0 y1 U' Q$ v
}
( h+ u* @% f0 a/ q9 i3 O% z k }
9 s5 M* w- j: A! R8 |% W //临时数据保存完毕,交换开始
& b) V6 i2 a7 j' J. \8 a0 a for (int i=0;i<MAX_INVENTORY;i++)3 F( O! s8 R4 B5 Y2 s
{
; p ]' J% u- O8 f- v, u if (dest == m_Item.nIndex)
6 D1 v( [" b9 O9 B- S9 n' S {
3 |6 G/ E& X0 w. I1 l //id相等 则 改变对应的dest和src# f: Q( h& |: |6 O
m_Item.nIndex = nTmp;$ b: C3 F$ H1 [7 E1 p( \) m
}
`7 u" v. x5 k/ N6 c7 n! a8 l1 A2 G/ J }% U2 F1 e& o8 S5 |0 j' @1 V# S
}
( u! e- d* d1 ?- M- W- {- u};
: S* r$ k* N( s6 y! G6 E/ `. t-------------------------------------------------------------------------4 [, L! Z. t3 t3 m" D. Q E( v% v
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 u+ e& F& P+ W& }& M( `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 K) ]+ d( @3 o' u. @+ t0 ^
紧靠其上添加:
5 A- o9 k8 V. r3 ]: r5 ^, wif( pWndBase == &m_wndMenu )1 o) Q( u/ X m9 J6 A" w
{
1 \% R! b7 l! k" E8 r2 f% x R' ~ switch( nID )4 T/ y5 m& w$ L, b. a4 H3 u
{6 j3 R, H5 H$ v K0 a, L+ e( {
case 2:
4 M$ m, S0 a: u' a; H {
2 r3 Q1 `1 l5 d: Y9 A4 W //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& J, q+ X8 O* I, G/ p0 o9 y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: L, K8 \- R% f3 } {' r. o; I8 a$ I5 n( v# p
break;$ `; J; r2 s Y% C
}! S) [ F5 [ ]$ O8 q) i0 d
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, Y2 z$ h/ y% l V/ c" c" t {3 H. i j& d6 f- O) @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ F! Z" z0 {1 F' u$ o
if( !pItemElem )
: ?2 S4 ^: @% |" O; l: w& H0 { continue;
% q" o D' U: `( m3 |; X( I* M if(pItemElem->GetExtra() > 0)6 [" G! A# V+ ^" v! M# q
continue;/ }# C0 z4 B( {& m
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 b9 {8 X6 a5 n continue;% D( T6 O: ?/ y2 E5 p+ v
if( g_pPlayer->IsUsing( pItemElem ) )
5 N1 B0 m6 o6 J# T/ v7 | continue;: q: |: T7 K. M
if( pItemElem->IsUndestructable() == TRUE )/ O4 M8 n; O' [& V$ U# Z- c
{
/ l" O5 ?# P3 w) o3 I& G g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# { e% d, K4 c/ [: ^3 V continue;3 y- W/ V- C" n- r o9 s: z3 S
}" u+ L! `; j6 {- ]4 U8 z1 \
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& K8 [" }' @. B" f D }
/ V: ]9 A2 @. [2 U1 ?' v5 q break;
! M# @* y4 W3 | }# o. i% \) p8 N8 U, ~
case 1:
4 J3 H. i, a9 a( h {. y8 i& \. o7 i, s/ ]
//整理背包$ M8 ~; a$ Z1 u( H8 {1 c
//////////////////////////////////////////////////////////////////////////
; V& U- Q0 C# b$ P //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 R( b6 w8 z5 ]9 S; S( w
//////////////////////////////////////////////////////////////////////////
( Z; s1 b' |4 ]; h& a //////////////////////////////////////////////////////////////////////////# g9 r2 w( h0 s# A2 A& C
CInventorySort* pInvSort = new CInventorySort;
% ^0 b& X8 ?! r: w6 L, A; f5 O vector <sItem> vItem;
. P: l" E) c6 V7 o! M- h/ w' Y8 q vItem.resize(MAX_INVENTORY);//初始化大小* S5 O5 f3 X* d( T2 J D4 ?7 y
//////////////////////////////////////////////////////////////////////////
2 U! s: g8 }* s) c% `1 h8 A" u //填充数据
3 o1 p9 ]6 u* z8 G for (int i=0;i<MAX_INVENTORY;i++)$ }9 o, }. U( C& [) Y/ j
{
. }. A3 n7 y) |. Y1 X3 y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' _3 Y5 ]) X! y+ x% d3 j7 [ if (!pItemElem)7 q# _, z" S' q2 N- D
{6 x4 K, `7 V% p2 n
vItem.dwKind2 = 0xffffffff;% C9 T* |% I% \. h1 o3 Q( a
vItem.dwItemId = 0xffffffff;
( Z( m: c, k9 M! z; K [ vItem.nIndex = i;
& G f9 s: l. K7 x5 L }else {
: I& O' r2 \6 ]! \" `" \+ W ItemProp* pProp = pItemElem->GetProp();
Z. h1 _/ U0 U }' Q+ b vItem.dwKind2 = pProp->dwItemKind2;
0 _6 x" f6 U _ r' t# b5 X0 f vItem.dwItemId = pItemElem->m_dwItemId;
h: |4 U. n/ u- T: P& H vItem.nIndex = i;
9 G5 }9 p" w! O8 P2 j }
- m8 T0 \. x. t4 Q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 ^* ?0 ~6 \9 U) |+ W( F' {/ K
}, I( L! k- g/ K- n1 Y0 S
//////////////////////////////////////////////////////////////////////////
" r1 S/ u# ~+ V) @: S sort(vItem.begin(),vItem.end());//排序) |8 ]/ T$ ^+ X3 y! U+ K
//////////////////////////////////////////////////////////////////////////
( N& J! f4 @+ F2 j //交换* {0 T$ a: Z2 @% E, V' k( }
for (size_t i=0;i<vItem.size();i++)
6 ]$ e' N2 ^. ?& G5 Y" m& J- l {
, y3 M6 s: _0 o3 D' [ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ i+ t O) J8 z pInvSort->Add(vItem.nIndex);
( n: B! v9 ^3 U: o }$ j {4 Z6 P) d6 k0 v, f4 \
BYTE nDestPos = 0;: D ~ N$ I6 t) s' q% k# ~
for (int i=0;i<MAX_INVENTORY;i++)
5 g E4 x9 o+ @+ i0 l8 L: W {2 ]. @% R/ U; ?7 @& j5 |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- J' l- r3 J. Y: e$ S3 z. N+ [) A
if (pItemElem)
/ J2 s% g6 @9 j& \; ?( B {
2 X, V' J; w) J if (IsUsingItem(pItemElem))
0 ~; e, P% i; w; h6 v i {) ^6 x/ J1 u) f( [8 e* k4 z
//这个位置无法放
* c4 v, H# p H8 {+ [: } nDestPos++;
% N) H* \( o6 o+ b: M }1 a0 A! H9 u/ A, U* |* z3 M
}+ O# i; D0 Y/ T" r# L* X
BYTE nSrc = pInvSort->GetItemSrc(i);4 a/ N6 t: _- {/ I0 G! O
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' W; G9 l7 {1 J
if (pItemElem)
6 o6 \9 ]6 D2 w+ Q {; F" t. f8 ~4 ~, _7 ~. \. f! d
if (IsUsingItem(pItemElem))
) A* l5 ^1 m# b {
% x4 S: C$ l7 m7 T( Z7 Y //这个道具无法移动,跳过
, K B/ l8 \% q: I! |2 R5 | continue;
! N1 S7 E# V$ g) ]& d }* A. _/ l1 c! I1 E. K4 b) A, B- H& n6 [
}else{9 V# @! q; l% K% K2 _3 f
//空位置 不用动
6 G' N4 I1 S) a2 {2 ?9 v continue;" I4 S, Z" ?8 v$ J, P
}9 l3 a9 w: Z, C% R6 n8 |( }9 f9 B
//////////////////////////////////////////////////////////////////////////
5 g9 A7 r* {3 t: U //开始移动
' t& r2 R; h$ X$ P if (nSrc == nDestPos)
# t+ N; d0 V+ _2 f$ s& n {+ K9 `5 ~+ ~9 m; W( P$ O* ?: R
//原地不动/ f. N! Z& M' G4 ~
nDestPos++;
' Q3 a) ^" `$ Y1 z. z7 V# B continue;6 K- g* `7 O. h ~4 p6 \. v
}( n% P: ^- b D6 t# v8 a/ }; e
pInvSort->MoveItem(i,nDestPos);7 X- A7 n' j" X# w/ i' a
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 |8 o' J; A5 Q4 s. [$ h
Sleep(5);3 }8 L' V) t ]5 ~- X
//Error("移动 - %d->%d",nSrc,nDestPos);9 h" X9 k. \: a0 c1 D
nDestPos++;
3 u& F+ s0 Q F: Y. Q7 k }6 m) f, J6 Y. l- ~/ h
//取第一个元素的信息
" `3 M5 ~, b4 ^, {9 F9 u0 {, m0 Z /*
w) s c6 ]/ D' v. r! l if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) U4 M' q; l7 s1 G
{
2 y8 S2 u8 g/ w E" Q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" j' `3 g4 M" O* L0 Z m2 H2 X
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* h9 \( G" i6 S5 l& T# _
}$ y0 U, V6 Z% e/ ~. J
*/" W6 x0 n. }5 \) l& `
//////////////////////////////////////////////////////////////////////////; E4 V9 r9 t2 q! v
break;* X6 u) {9 ]7 d) ` b9 H
}
1 K* `, U ^. ] k: [! C$ b } 6 P( F# M O2 `" z9 B( T
}
4 D; l1 m) g# Z/ k3 P# U0 ~! C lm_wndMenu.SetVisible(FALSE);
5 @& _; G9 E, y: O4 B% F
$ B' I9 E% ?: V B--------------------------------------------------------------------------------------------------------
7 L! c' h$ N, s g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ C. n, } H: K4 o. H! c* b- E. W{/ d% T' X. M. H
BaseMouseCursor();& o# y4 c% q$ K+ v8 ?
}1 V3 G8 ?% o, `
在其下添加:
, o- c3 a! h S: I: Pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
/ I, \: L+ h/ x2 \4 B3 X{# f8 \* a! c- L2 P) \% A C
m_wndMenu.DeleteAllMenu();
% V$ o ]) m/ d* J2 ^4 u9 |2 P8 Im_wndMenu.CreateMenu(this);/ v3 p$ C$ Z9 D: x7 W4 n. ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 _* k t4 E# ~# m/ c% B
' {' U. M1 z* e4 G
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( C! x) E1 E# a) C: a E" |{2 h a A! Z5 R) o
//P以上级别才可以删除所有道具
0 Z. [" s( I: x6 q* A3 R m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. G# ^1 r5 e) E}% B! E* n. ^4 W" m* }$ u4 f- r6 s4 z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ V# l6 y; P+ A$ n) m
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' o O" o) x! n Lm_wndMenu.SetFocus();
9 a8 C; H7 } E% P* R! i3 _}
% c* P9 N) q( ]! p' q% X4 A------------------------------------------------------------------------------------------------------------
% }) n% k, Z1 ~8 U( f*************************
8 f5 ]8 s W) IWndField.h文件
0 r4 h( I! J5 \*************************/ V N+ T) n% }4 x; M' M
搜索:BOOL m_bReport;
( v" H5 s: I1 m' l其后添加:
0 {! @% q. S S- cCWndMenu m_wndMenu;7 G. I1 c; M0 h8 k6 g4 s$ s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, \; r6 B. A$ x- G7 q" ?& n: ^其后添加:
; t2 e9 g3 ^: R: \7 wvirtual void OnRButtonUp(UINT nFlags, CPoint point);0 T/ J6 J' m3 D; r' [% Z) b
3 f8 P+ W: k) ]0 k4 d4 G" D9 I; k' f0 R4 `
|
|