|
|
源文件中_Interface文件夹下WndField.cpp文件
1 r6 P0 N1 h8 s! s, @0 \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 `3 P* L7 A( E. u4 n2 ?4 x0 {4 `6 ^" z+ J; {0 G6 {( T" U1 n
struct sItem8 t" s7 }: b1 N! H4 g
{' Q# `3 E0 a: e
DWORD dwId;* T/ A8 |. s+ P" t
DWORD dwKind2;9 ?8 P) O! O- V5 C: T
DWORD dwItemId;
, K7 K! ?( e! z5 P; `BYTE nIndex;5 k! u6 G" Y- J8 r$ V7 a
sItem(){9 E3 A3 p: d' ~: Q9 A* K& u
dwId = dwKind2 = dwItemId = nIndex = 0;% j1 T( E1 ~3 [) X. t
} q# Q2 T7 E' S! p3 ?+ u
bool operator < (const sItem p2) T2 y/ M; H% E# q6 p
{
; {" C3 @" F3 |* [9 w/ X* h if (dwKind2 == p2.dwKind2)
6 ^: O1 d& h2 Y. ~5 l* U+ W {
6 |# K' _& e; e) q return dwItemId < p2.dwItemId;
, G# i9 \' ?) {% h: q1 o }else{4 m) D# J) ?* y9 f/ O! F
return dwKind2 < p2.dwKind2;7 g& D; f7 a. T! G e" s" ?" @
}/ E/ D' L- k2 |. p! W& Z0 p
}) M# t3 N, V8 O# I8 _$ h
};
0 @1 K8 q0 `0 H9 ?class CInventorySort
! h4 M* j* q# ?! D q{. U# g0 B% x7 i# A
public:0 h- x7 j8 F2 W$ Q* F9 @2 W
CInventorySort(): Z; a8 j5 C3 |, |( M# g
{
; I0 \, z# u$ \: l m_dwPos = 0;
& q9 B. ?% n$ G5 t/ Q}. q, h0 k0 e4 Q. C& F: B
~CInventorySort(){}
$ T/ Q8 y v1 I, A) W' Bprivate:
/ ~. C; O6 W5 v `+ i. D' h3 K4 |sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 ?& U- `+ l/ b; X) ?: |6 a
DWORD m_dwPos;( \7 N1 ]9 X. _* c
public:8 C8 Q, r3 U7 a: U3 t- d5 C
void Add(BYTE nIndex)* |. q( e: D7 U3 c! o
{0 l9 N- ?& V2 v0 k% p) B& f
if (m_dwPos >= MAX_INVENTORY)
3 d/ a; G3 d0 g* G1 j" E: G {
! B; L7 L9 U, _- v return;! w5 ^( D: w% `% }: I; u
}
# Y9 Q2 _- v7 Q& [' d m_Item[m_dwPos].nIndex = nIndex;
! A# R: D9 w4 J% V8 Y m_Item[m_dwPos].dwId = m_dwPos;
1 L a" m4 F3 e m_dwPos++; W) D8 r& ^/ c$ y D: B
}' H/ Q) [/ D4 | r7 m! X; L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 z! n" S e/ H; o! g$ |{
7 Z o: M$ I! W8 x for (int i=0;i<MAX_INVENTORY;i++)
6 r$ t/ L; ^+ N8 Z; f {0 |! W3 H5 A' w# h, e3 E" ^5 j {% P
if (m_Item.dwId == dwId)
+ q4 \) r) {: k- |$ o: o {
' ?0 `# }4 M; y: Y) Z: H return m_Item.nIndex;# T1 D- x f. ?1 S3 M
}
$ H$ W w+ T$ T& l }
( V8 ]+ H: |+ j' h r2 p return 255;
. ~4 M% n6 F, M& I( ^}5 S' K, D$ ]& ]8 T2 a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: G7 J, K) p$ W) v5 _
{
- W# z8 q' }/ L+ E% ?; w BYTE nTmp = 0;
/ V3 b7 l' [% i9 E- { bool bDest = false,bSrc = false;5 `0 M4 `$ j: Y. y
for (int i=0;i<MAX_INVENTORY;i++)$ R0 L# |0 q% Q) w# a, _+ Z
{
# V g7 T. \ F) O$ ]3 ]2 ]- W if (dwSrcId == m_Item.dwId) h5 O% ~$ r/ Z& G. K
{) L( @* c1 z p7 D! G
//id相等 则 改变对应的dest和src+ ]3 v/ W* Z7 a- t$ `
nTmp = m_Item.nIndex;* X5 }+ a: l6 W$ v, Z2 `
m_Item.nIndex = dest;
( f; d2 O8 t! R/ D( I( D$ U }
0 _& \+ j% w5 e1 s* A7 L/ H }
$ G, P/ { K) g M //临时数据保存完毕,交换开始* K! O5 X3 C) v" d! b
for (int i=0;i<MAX_INVENTORY;i++)
* B5 L8 t6 D1 ~; \* O5 a# u {& a+ T+ h' l. G' c
if (dest == m_Item.nIndex)3 `4 v+ D3 c/ Z s
{
5 G. G- W' e L7 K9 c& U" W# D //id相等 则 改变对应的dest和src
. L0 c' [* ^: R/ ] m_Item.nIndex = nTmp;
, `% g x z% V. I }
( U5 y" _0 E, }7 g& O4 ^1 W9 ` W } u" a6 P+ H( U
}
: l* G o8 o0 l2 s# K};# T4 V0 I1 h: P4 r3 M+ R
-------------------------------------------------------------------------8 R( }8 P) c2 U: G5 {. N! y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 Y8 [# @& e4 H搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) P/ b% ]* y, [" l紧靠其上添加:! S! E3 F$ J) W1 i% i( S
if( pWndBase == &m_wndMenu )
* O, @- X( E/ o3 s+ ~* Q{
2 Q1 D7 A S+ X# [' O; o switch( nID )
( J `% |- b: ?) u+ T: b {
" g8 l+ p$ x% f case 2:. S; q1 i0 ]0 K0 {3 O% R* r1 R+ p* Q/ J
{1 |- t+ Y0 E: K R V
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 y2 k0 U7 {' i
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
A- Z7 J- |% T. R2 `# O) T {" T6 Y1 b# x2 c1 Z: S4 _! V1 G
break;3 l; }9 G2 D: y! s7 B4 P
}
! ~* b( x, w/ N; ]. l) h for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, L3 ]% X8 a; B, i, U+ v9 S {+ M- u3 t# s! X$ R; F0 B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 e4 o( a2 D. r1 q* b5 `9 ` if( !pItemElem )
2 J: Q, z8 z2 C4 P$ }5 B% v continue;
4 l/ r/ j9 T, m; Y1 v1 ?' b/ g' O if(pItemElem->GetExtra() > 0)
% r1 h. P/ C* f' a7 z continue;3 k2 V& }% \4 B& t* }
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 U) k5 ?* p- J8 q* m
continue;
3 h; x7 v1 x, Z# k if( g_pPlayer->IsUsing( pItemElem ) )
/ J/ p! f3 ]0 Q9 \ continue;
7 \+ b2 z# d" e' V( r/ S2 r4 s! K if( pItemElem->IsUndestructable() == TRUE )# u4 U% D3 N) n; G, z% o
{
! P0 I: Y5 t4 [ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ C1 n9 ?4 V0 J0 q
continue;
) l \7 ^! X( b' O8 W' a }
) a1 }0 h% @! U: @, L$ ] g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 t5 S, O1 Y* S8 n& p# {2 W6 j5 Q* | }+ y5 I) O* _1 q# b) j# s4 l
break;
0 u2 `" G, ]' T+ O/ Q! @9 K }0 e/ x& }; e& _% ^8 l: l
case 1:
! ~, ]! z# l# n {
# L( x$ x5 W6 N& `. n6 _! x1 c) h4 f //整理背包
- u6 t; ^3 G+ q Z //////////////////////////////////////////////////////////////////////////4 d. i9 G. h$ u* [- w2 c
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 P; f9 F& X3 r/ T7 X2 } //////////////////////////////////////////////////////////////////////////) b7 @ e' K0 j2 t9 P, s. F
//////////////////////////////////////////////////////////////////////////% N, v1 a* J% [1 c; U' U
CInventorySort* pInvSort = new CInventorySort;2 |; ]4 \+ e- D
vector <sItem> vItem;
1 P( ^8 H. e& m( w vItem.resize(MAX_INVENTORY);//初始化大小
- @) w4 @: `) P( r! k //////////////////////////////////////////////////////////////////////////- F# m; L- m$ ^. i8 B; i' [
//填充数据
# m7 P, R V N0 }) ~# J; @$ A! p for (int i=0;i<MAX_INVENTORY;i++)
' D- Q& w: m5 g {
4 O, v; F2 {* a0 W: I8 ?* { CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 V/ ]' g3 z5 x C
if (!pItemElem)
0 Y3 Q) o0 s, b6 A/ G& [' X {
; L" s' c' H+ d" P2 {: W6 D vItem.dwKind2 = 0xffffffff;& o/ Y) s0 u# J+ G* f! X5 s
vItem.dwItemId = 0xffffffff;0 B, \8 ~; E; t z3 \7 Q& `4 a
vItem.nIndex = i;
J7 A% ]% C! [7 M, K; u) i Y }else {
3 G( L: E* Z: D% k1 h ItemProp* pProp = pItemElem->GetProp();& q" {$ C2 r+ C: x. O" Z. y w8 n c Q
vItem.dwKind2 = pProp->dwItemKind2;
& Q+ \: C! G/ W vItem.dwItemId = pItemElem->m_dwItemId;3 `* F$ v- a* E3 v4 d* p9 x' b% |
vItem.nIndex = i;
0 P3 {* C0 E/ l2 [ }& `& ]5 a2 w' E v( a
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. n' h5 |+ A) A$ f5 q# q) \ | }
$ J; W) G, \- e3 `4 x //////////////////////////////////////////////////////////////////////////& H4 ` W/ R& }+ ]$ }- m
sort(vItem.begin(),vItem.end());//排序
7 ?, Y5 Q4 n; N/ F& F //////////////////////////////////////////////////////////////////////////
2 Y* Q$ I% J( ^" t //交换
4 e# Y) D$ `% Z for (size_t i=0;i<vItem.size();i++)7 f% f+ `* c2 _2 R8 u
{
$ m* G) J) z9 O' Q D //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 v( H3 Z) Y2 h pInvSort->Add(vItem.nIndex);
1 S' T9 _0 {) r- F2 j V }
4 ~4 D) M: E+ y7 q: I; ~ BYTE nDestPos = 0;/ z5 k1 ?& x, E" M
for (int i=0;i<MAX_INVENTORY;i++)7 T l W, E7 q9 W
{
0 z+ Y5 ^' M: O; n" o& T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ K. A- Z! q# P3 m# t6 D if (pItemElem)1 G9 X. v/ u, z
{
* w5 W* M0 g9 Z- Q if (IsUsingItem(pItemElem))" w8 K( }. M- D8 x1 _* s
{
& e0 c; w6 H6 R+ g //这个位置无法放- C' w @5 u9 ?1 H7 Y
nDestPos++;6 s/ y+ Z0 @! D# V v; q0 l2 n# V
}: ]/ t4 U6 i; o; ~9 ^( E$ ~
}, }, A: a( j S1 Q+ R; ~: E( V. z
BYTE nSrc = pInvSort->GetItemSrc(i);
' ?6 p. |3 g/ L2 S pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 a4 w* L0 w- N$ M6 \7 j
if (pItemElem)
4 S9 c+ y6 o. H. k {. C: \ G+ W# m1 r3 p- R% Z& R- x
if (IsUsingItem(pItemElem))
- \) B! R( U. ^4 y {
* f8 O9 M: ~7 E1 \9 [" W: L8 j9 j+ q //这个道具无法移动,跳过
3 F$ }: S5 A. S$ a continue;
2 g# }8 i0 k$ q, w( W0 k }
q5 Y1 {3 C& _9 C9 L }else{
, x; t m! ]* ?# ]+ U4 }* B# x C //空位置 不用动 F! o* s0 ~7 o2 m/ r" p0 Z$ d
continue;
7 c1 p7 K- F6 |# B; ?1 V( F: x }- y* u+ j2 l. a4 S) u
//////////////////////////////////////////////////////////////////////////
) h. r( v5 ?0 S0 |; I3 ~" N& e0 a //开始移动" a j( M9 ?5 P% |
if (nSrc == nDestPos)
: M% C0 \4 p& V6 B* | g5 G y4 ^( i T {
! ?( v+ w: A5 t! k //原地不动4 Z+ o! I" t9 y: L) ?
nDestPos++;) U7 F" a K6 r5 q/ @
continue;
: t. n& x. G: W, Z }
4 ~+ k7 ]+ h( o& v8 Z pInvSort->MoveItem(i,nDestPos);
0 t4 [! ^) ^. M8 [7 r g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ I5 l' M: o8 g% H" {0 A
Sleep(5);
3 p( G- V+ r( w* j- F; v3 A/ _ //Error("移动 - %d->%d",nSrc,nDestPos);
4 x k( w. k# X1 W nDestPos++; V; q% n5 e- B u
}+ M3 X) Q, k1 g0 O# G; E
//取第一个元素的信息- @; B7 A, h: q& l1 S( p; B
/*
z% l H0 t6 ~8 V if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% b( s3 K; a! ^3 C3 N+ m, N) h
{4 f" h* R% p* B6 M8 i7 @6 I& P
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
i( i$ \3 O. t7 c: | g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) d' ]7 m/ X+ n- t# {+ }7 S# E }
# s4 O' y" I4 R3 y% J */2 L9 K3 ]% w* U) R" K, |4 K& ?
//////////////////////////////////////////////////////////////////////////* l7 a; F s1 a, u. f
break;
# l- O" B/ }* D8 o* y E% a9 b }
2 p' X9 j4 c" t7 p5 p } 5 q& A* D( m) d: W, Z! v
}7 `, Q7 g$ t) R: d
m_wndMenu.SetVisible(FALSE);
6 ~0 D- d% L7 s3 i2 t! R5 g& ~0 g) A& Y1 d$ t
--------------------------------------------------------------------------------------------------------
. m' e% k$ k- |1 h* N4 p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: b0 w" m# M4 i- g6 a g% s9 r{+ m* R# i) j2 \9 q& S2 u
BaseMouseCursor();
% e- L9 C+ @. L3 e2 h}: b; \- S! y/ |$ I
在其下添加:0 D- c/ L3 t- n( P! r
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' Y" ~. j* g8 O5 i5 @' ^: f{: s* }$ V9 J/ X& u0 u% M4 s! m+ R
m_wndMenu.DeleteAllMenu();+ P3 D, x* y8 [" d8 ]
m_wndMenu.CreateMenu(this);
! x1 ~5 T o; Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" s' X" J# D: @# n
& |& t: x, h, s+ }if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- Z$ S; F( H- M6 ?{3 k! p* W+ V3 s$ }5 \
//P以上级别才可以删除所有道具$ b }( `# c( p) F
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( I- n3 {5 B5 V* w8 l% d
}3 M2 V! z8 M4 ~# ]: h4 p
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" w: r4 s& ]; ]. ?# v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- i1 T. t4 `: o5 ]
m_wndMenu.SetFocus();
: x# e w+ g- c! M; s, l, f}
$ A- L* P* {8 Z% \------------------------------------------------------------------------------------------------------------
( I2 h0 N* o& A0 }- y/ L, \; a*************************
, Z( W/ @4 L2 u3 p/ M; h# ZWndField.h文件
9 L4 [8 ^. f9 m*************************" Y4 P6 Z' b: o: w7 t
搜索:BOOL m_bReport;+ H& v& E# X4 M& e
其后添加:
9 F' I1 _ @3 `2 B( g* }! XCWndMenu m_wndMenu;
$ [9 b( Q* s2 x1 I n* H3 T2 B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ v" a5 \1 }* a% `5 _. V' _2 ? y其后添加:/ l: ~# z' ]% e/ O) m
virtual void OnRButtonUp(UINT nFlags, CPoint point);& G. C7 f- z) n* B/ v5 H, z
* w8 @. n3 f; j8 J6 E$ f$ x
9 ~# D6 v9 d; B3 X. G D
|
|