|
|
源文件中_Interface文件夹下WndField.cpp文件
1 f+ \2 p; J, b7 t2 A2 O搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- e/ L1 M7 T8 A' B: [9 A
# k$ Y. C2 E- b" A7 N
struct sItem
$ E, ?- F. R4 c5 C; n2 r5 K" J8 p( }{
1 q* t, G9 ^2 C) p$ Q# O& Y- \DWORD dwId;
, P; u" @$ `' ~5 [( B5 }DWORD dwKind2;2 u, @& {: W( c, t$ c! s
DWORD dwItemId;8 ~4 u) ?( j8 b& u# C) H' |$ E" @
BYTE nIndex;& b/ p3 _, d: ]: R2 n4 t
sItem(){
" F. f3 z9 ~3 D) ?- K% Z% _( E dwId = dwKind2 = dwItemId = nIndex = 0;
* E x% w9 v, r% u9 H}
+ g: Z! @; C2 ?! F. q3 ^; Ebool operator < (const sItem p2)4 P( |1 O6 F6 V) I0 _; G% `
{6 Y$ m9 _9 B4 O: Z z: Y7 p' d
if (dwKind2 == p2.dwKind2) t' B; P2 O. {) F
{
1 r5 x4 C% o+ I, f& i6 ?: `( ^ return dwItemId < p2.dwItemId;
- A4 o' [- P/ _ }else{
* B5 X: r1 T0 P+ H& Z1 k7 V return dwKind2 < p2.dwKind2;. y2 l8 |& y: x! I& Q# }. L
}# O( b+ u4 M3 j/ ^$ K4 W# K
}
+ r3 c* x4 ^; U2 n: J};# [5 h! I5 U; j- V9 Y$ `
class CInventorySort2 U9 {& {# k7 ^( Z' g# |# S
{
9 U: Z4 v: p% M) Hpublic:
) U( J$ n6 a) R1 F6 Y% J) A: j+ ACInventorySort()' J7 l7 ]5 x1 B0 k
{
6 m. k3 y u/ y3 o. W e. X; a m_dwPos = 0;* q1 n7 U/ y; m! a2 M
}
2 Z$ {) @! q) c% ?5 `- M) U~CInventorySort(){}" m0 O: t1 b, b* ?' v# @! L1 U
private:
6 G5 q- C0 W) F5 ?3 XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# t0 X, G* I+ b
DWORD m_dwPos;/ m! U T& w+ _ k- G+ r3 d
public:
, n" {8 {, i+ u8 Dvoid Add(BYTE nIndex)
+ [/ [% }; U( t7 A/ n; S, S{5 ^1 Y. }/ ~, q; |# }( ]8 U/ V
if (m_dwPos >= MAX_INVENTORY)
: H! C; w4 Y+ l8 F, M {
# o% S# `* H1 V: t' P7 I/ b6 M/ G return;6 _7 V" Z6 U/ v' `0 |8 k9 d5 F
}
- \ D# h% Q. T- H5 O3 R1 ] m_Item[m_dwPos].nIndex = nIndex;
1 v% Z9 E6 p( _5 N3 o m_Item[m_dwPos].dwId = m_dwPos;
5 L! B% J% |& @7 b9 s. }% C5 y m_dwPos++;
1 N9 _, u4 Q/ P$ y% S- m: K}4 z+ [# |. R5 V% ~
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' }6 j! t K( ~& ]
{
+ J2 U6 U( f0 ] for (int i=0;i<MAX_INVENTORY;i++)" |0 N* O# [- o' v
{
8 \) H* `/ F/ _ if (m_Item.dwId == dwId)
9 n& A* y+ _4 N( a0 d% ]$ m2 m0 c {5 A8 y4 \: y( g5 T4 z, P6 ]) h
return m_Item.nIndex;9 S+ u& j6 }0 p
}- O6 c1 v. \, h4 L2 g
}
. i7 c' _ J! k: e0 O return 255;
' b" W7 ?0 p- ~. a5 T) E* L, R}
' C7 ^/ h& \+ xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- Q- ]- t' Z2 y, n9 [{# G9 W2 {* e: C5 x
BYTE nTmp = 0;
* ^& @; h! `) m8 ]% m/ a) Y! W# A$ F9 U bool bDest = false,bSrc = false;" D, Y- ~$ T8 P9 V
for (int i=0;i<MAX_INVENTORY;i++)
7 K* |: l+ Y9 W& U2 a {8 ^% [ P5 x& O& g5 M$ L/ C- T
if (dwSrcId == m_Item.dwId)
& Q3 g& R5 }$ p& v1 l2 N0 R1 C {
% Y! l+ S+ {0 B& v2 k) l //id相等 则 改变对应的dest和src
& }6 y) b* n) @ p/ q2 C& u nTmp = m_Item.nIndex;
( M& b5 Z' k# d5 C0 W. x m_Item.nIndex = dest;
6 d6 X8 A( b- m% @! B0 @ }
4 ]2 X& G1 z- \5 |. y8 g8 g }
7 K: p: d7 A9 v //临时数据保存完毕,交换开始( M6 \2 S( O+ ^( A7 U" \
for (int i=0;i<MAX_INVENTORY;i++)
. U) f7 `& a! ?% _2 N3 J {8 C7 _1 o/ g, U
if (dest == m_Item.nIndex)/ G6 _: D, R' L+ N
{
D# Q. L% S: l //id相等 则 改变对应的dest和src. m' O; F, N1 e1 J% ?
m_Item.nIndex = nTmp;
" r' V! V& a$ ^1 C T9 P8 I: ^ }
+ \2 [# K/ T$ _) v }
& K0 J# q2 U. F# \}# R8 y; H6 {. J
};
5 t. K- B1 N* v' V, n k-------------------------------------------------------------------------
: M0 V9 y5 C1 y0 e2 g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ s: m9 ?. M- j
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 }; T( m+ A% L8 [% X$ n紧靠其上添加:
6 G9 U, P: b' Zif( pWndBase == &m_wndMenu )& u+ F( H4 g0 K/ d. ~5 u- G+ Q
{
$ x A8 o B! a$ i: g' B5 C switch( nID )$ P% g; Y) i! P R# P& g$ p
{: v% H5 R- D: ^5 K3 Q) P9 d, ?9 C9 h
case 2:
1 |0 v6 h, r7 r" m$ w {
6 S- \* G" t1 V* f7 j0 t* x //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 H; {7 h# ^3 m) i2 I if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 Q p+ [ S8 T7 G {9 v2 Z, `, Y' v" }7 \" c- ^
break;" e- i9 f6 u- F) t5 y, u
}! M/ \+ A% _% U3 M- h
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) G. c" w. M7 Z; `5 w! r
{
& H. Y& o. s& t5 {, m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' I8 A0 y3 N+ j; J; w) m if( !pItemElem )! S* R6 ]5 k- h4 r
continue;
: d8 j8 K- J' d& |) | if(pItemElem->GetExtra() > 0)
+ h$ C! T9 i( m" U' X% [* \ continue;
. M; y& i+ Y6 |. d if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 b: X2 a& l* @4 j7 p+ A continue;% v4 R d2 ^; o
if( g_pPlayer->IsUsing( pItemElem ) )
5 P( i$ F3 T0 [. ^1 A7 w continue;: C5 \3 B" {" n) s7 E- N1 _
if( pItemElem->IsUndestructable() == TRUE ) S( [; C- f# }; Q; h
{
, z- C0 w- G W g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 G8 W+ a3 ]4 ?- Z. v* M continue;+ z! W U- L. K. e. |, |6 w4 ^
}
& A( y4 o5 B" h$ D# O, v g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% P7 o" t2 H7 Z9 i
}
4 N8 W% o8 o5 \. x break;, @" v+ S- L" r
}
+ U4 j0 {8 c2 r. ]+ d0 i3 z case 1:; M6 q% ]6 w$ x+ R7 ?7 Y; L$ w
{7 p8 W5 y' Y) K3 v$ c, k
//整理背包
2 O/ p6 c- F1 D$ A1 R: V+ z //////////////////////////////////////////////////////////////////////////# U) F4 P+ f9 ]6 q* h
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 U, G; E% Q: S8 N9 \1 S& C
/////////////////////////////////////////////////////////////////////////// z! S+ G( f- j. I4 E
//////////////////////////////////////////////////////////////////////////1 b o$ A, f& W, n0 p5 K* _
CInventorySort* pInvSort = new CInventorySort;$ d" I/ }8 F: g4 U& u6 T! K* b
vector <sItem> vItem;
# |2 q$ m7 t6 C/ P! ?$ U vItem.resize(MAX_INVENTORY);//初始化大小7 L# |$ ^! G: L: X
//////////////////////////////////////////////////////////////////////////
# I: [" W1 m- e/ I9 m //填充数据2 l! L. g Y4 c/ c6 q, @
for (int i=0;i<MAX_INVENTORY;i++)" `( t( n3 e' [4 z$ C: F
{' S+ {9 G! k5 [* d3 d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 T* b& k Y$ f4 p4 l
if (!pItemElem), _$ @+ r/ s- A T6 H0 w+ d( u4 ~6 E" a% a
{
: l p: Z, e# {) G vItem.dwKind2 = 0xffffffff;
$ E% @( ?4 I0 C# j- t# q vItem.dwItemId = 0xffffffff;
5 A* q0 a' s, A+ s! g9 R. ~# A vItem.nIndex = i;+ E; H3 c9 e# u! d* P
}else {
. n' E: I" i% h9 t ItemProp* pProp = pItemElem->GetProp();
; I3 J8 O3 N* I; { vItem.dwKind2 = pProp->dwItemKind2;
: w# V7 v2 W6 E: o' N, J0 X( ? vItem.dwItemId = pItemElem->m_dwItemId;
: a" Y' K* F( ^5 B( D& c( I& ? vItem.nIndex = i;* M7 T' C7 z- R+ M- Y( ~
}
0 ~- e/ d k U E( | //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: e) ~ J. O. Y& C }
) y5 T6 U9 s1 m6 y4 H //////////////////////////////////////////////////////////////////////////) E$ l& o9 S4 N/ A0 t
sort(vItem.begin(),vItem.end());//排序: _* l8 I1 d2 r6 S7 ?
//////////////////////////////////////////////////////////////////////////+ J2 Y( b3 O2 P5 k" U. `$ b
//交换6 Q/ g3 V, s! i/ k( f! L- L
for (size_t i=0;i<vItem.size();i++)
( E0 b. _5 _, z {
4 A6 |+ U- Q d0 g' t6 ~* i //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. l9 A( f; D- ~3 } pInvSort->Add(vItem.nIndex);
2 m1 p* o7 }4 u4 `& |8 X, q# L$ h }% T, z2 Q4 x5 }; d
BYTE nDestPos = 0;
0 \# j3 J6 B; _+ Q( y6 W- e3 M) y' E7 q for (int i=0;i<MAX_INVENTORY;i++)& K- Q9 A% y8 B9 C" ^
{
, _3 n( m. ^ t! d, D# U$ o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 @% K& [! r& q, z: F if (pItemElem)
# M2 z1 X( h4 O2 _ {3 j# Q% x# u) ~+ H- H, I# X# Q
if (IsUsingItem(pItemElem))
3 Y, Y& E9 m6 J4 [ {* }" s5 k+ L/ x: J
//这个位置无法放
& {! P; D0 `3 M4 d nDestPos++; D. j# M4 U; R* K$ r' |
}
2 Q; f2 W" S' m }
; b3 f7 S; f* R BYTE nSrc = pInvSort->GetItemSrc(i);1 D( D* Q& _8 }4 R" U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) y. t. P2 }1 F% @/ S if (pItemElem)( K1 b, m5 i' U7 I
{
: |% u4 _, \7 E' |, D if (IsUsingItem(pItemElem))
7 X3 J% P Z% a. J {
+ P' M2 V/ u$ N7 i, a //这个道具无法移动,跳过
- }7 p7 x6 H$ p+ k, v0 ~# s) y continue;
, A8 r! M3 x+ w- ]) K0 |/ d8 v }5 J8 V4 k+ V* G5 y2 G# P
}else{
* o9 ?. P+ J0 {2 O. G& ? //空位置 不用动- A9 d6 c U# z* m0 e
continue;9 m$ \7 J/ Q) D" Y
}8 G( y) a5 _$ M% m: E8 m% v
//////////////////////////////////////////////////////////////////////////! }( R# z! k) O% F( Z7 ^
//开始移动, y/ j! R# j9 \, j0 `( S
if (nSrc == nDestPos)8 q% Z2 w! V6 [1 x4 K8 D4 ~
{" B! ^# q; |7 N7 u
//原地不动
/ q( E- f+ t6 Q nDestPos++;* A3 X# F& t% D, K* z) }
continue;3 {' v9 J0 ^3 g; m$ w! c! f) b, @
}
, l+ k& ?) ]5 N! ~ pInvSort->MoveItem(i,nDestPos);
$ n( K, e5 n) R3 l8 P7 ~ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 o. J2 P: _4 h Sleep(5);
+ M. C# O% K6 q* j, ` //Error("移动 - %d->%d",nSrc,nDestPos);
$ D$ t }" e8 }/ d9 p4 g nDestPos++;
7 K% Y# u8 V% X }5 N! N$ ]& P: F: G7 }
//取第一个元素的信息
) _% W4 C* n5 @: K( Q- p6 v /*7 b/ {. Z$ E* O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ P6 Z1 D; T9 K9 b) N2 U
{' ^( B" u/ [( u* S7 l9 `6 M5 q) L
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 S' x& O6 b" n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 ?3 @% S2 ~7 [! f+ n2 p0 j }
# y0 p6 u; ?5 n8 P; U */
8 }" c4 V& C& d4 r h ////////////////////////////////////////////////////////////////////////// n2 c+ v, c6 P$ Y7 _1 c5 D
break;
" v2 l+ x9 x% i" E) k" j+ X }
; N7 d6 ~7 L3 B( o, w } 8 K1 V: n7 V9 e( @$ K( l2 Y
}
; l' e6 C: z3 N' wm_wndMenu.SetVisible(FALSE); B# r9 j1 m# c% k: R% m# U
- V" Q# x a- T3 }- a
--------------------------------------------------------------------------------------------------------
( _- Q+ g( b4 M0 T) A+ V# F搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 c! S7 R: G+ N( m9 m8 r' }+ x; L; g{, g- X6 n1 ]4 R/ M. J7 ], ^$ p) ^
BaseMouseCursor();
5 D% r1 |0 ^9 u4 s}
, O7 T' f( B; ?7 e7 B/ e在其下添加:
4 W+ X9 D r/ Z) j; bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! w! b" U3 A" g1 a/ g: N
{$ G) N8 }( [6 w( b5 R3 L1 o; A
m_wndMenu.DeleteAllMenu();% U8 I5 H: u x' z. L
m_wndMenu.CreateMenu(this);( r6 @6 u+ X/ C7 ?* @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ |! |" ]5 k+ u+ x/ p9 r% F
9 u5 K" q# p2 X/ C* C; i8 ~+ ~! Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& M# F$ Y% R1 e1 v; X{
- F+ s4 g/ l* J+ h4 d3 ]/ z6 P //P以上级别才可以删除所有道具( L; Y0 G7 ~7 ?: h- c% }1 U
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 G6 f# w, e0 K$ N4 }* E}
' `0 @* O7 }4 \; i2 Z h0 D: v2 Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* ?) J5 i& ?0 ]. h9 G
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; h7 l" S, x# ?6 E) R0 Z: e rm_wndMenu.SetFocus();' D" L! U. A5 W" ^: v
}: T$ J$ b$ \# V
------------------------------------------------------------------------------------------------------------. i8 D0 i5 x6 H+ `6 d5 q. o- g# A3 G7 ]7 Q. U
*************************
7 m% T4 e; @) C4 n; O' dWndField.h文件
" @' k) z2 p8 E' s*************************0 }1 ]: M+ _2 o, T% k
搜索:BOOL m_bReport;4 c2 z- G9 V# z( a3 p ^
其后添加:
7 F7 L, @2 t) tCWndMenu m_wndMenu;
# q: n( p, _" ~( \* X7 T3 v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- c4 ?& ?+ B6 ?9 j$ r
其后添加:
( O* N6 V+ W8 h) A. V7 \virtual void OnRButtonUp(UINT nFlags, CPoint point);
) S5 Z7 o- F) ~0 h2 w$ i2 S
4 H7 `9 m- `" c8 o0 A7 _# Q4 u* h0 m- w* n, t
|
|