|
源文件中_Interface文件夹下WndField.cpp文件0 V; ~# i$ v( m2 m) R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 w$ } S l! m; B( V2 v* L" a) P7 P4 D5 Q
struct sItem
3 I3 N* P+ q- E{
$ S: e+ A! j# u. q8 G/ ^# r0 u, ~DWORD dwId;5 b( H! W; B* e% S1 O5 w' k
DWORD dwKind2;
6 u; Y0 w3 C1 t( @DWORD dwItemId;
7 }9 q4 ~ c" p6 l2 i JBYTE nIndex;
* e U# \! Q4 O; Y( XsItem(){+ \2 P U$ w. S) B9 @- N1 x1 `
dwId = dwKind2 = dwItemId = nIndex = 0;; F+ G% ^% G7 h* R! E
}9 X0 O2 T6 \3 R' g: o% y
bool operator < (const sItem p2)' I; b# W3 H [' I6 u: \' Z k2 a9 U
{( e7 K. ?) V& d
if (dwKind2 == p2.dwKind2)
$ C" Q6 }1 S% X2 ]8 n# m {1 ]7 D- ]2 a; W6 S7 x& A( V
return dwItemId < p2.dwItemId;
" [# P; B# k T( X3 g7 z }else{
, V1 E! r, Q0 s7 Y0 A. I return dwKind2 < p2.dwKind2;- h0 P( G6 ], N0 t0 k
}
1 e$ z. \8 c! c, |9 c}% p8 y) o+ x r
};
! W8 J( K" W; X: X- x9 k$ O. `class CInventorySort+ p3 M2 Y t& E
{. }& E m+ N7 h# A% ~4 Q
public:
0 \6 q! A, K% JCInventorySort()
# t5 b$ {. w9 j7 R& @6 J" s( e{
9 c5 @; D, n; ], l m_dwPos = 0;5 i' i: }5 D1 g. {5 @1 D
}
' ], `0 I+ z8 e~CInventorySort(){}
* E1 H8 Y! u8 E' C. _, j& U1 Tprivate:9 f* p, r' v2 i$ e) ]0 \7 F4 T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: [6 Q; x. x# g/ b* C8 h" A
DWORD m_dwPos;
- @) y7 N2 U; G0 R" C Cpublic:1 S" c# L1 ?5 t- d# i
void Add(BYTE nIndex)' ?% R+ ^$ m+ I; d! V/ `
{
y9 W: k# G( G" @; U7 w if (m_dwPos >= MAX_INVENTORY)
# D9 E s1 T# j3 q3 i- n5 m {# K/ C* Y/ F$ O# @+ l
return;" Z' j3 _, `: Y
}. u6 ~! R. m8 y! H! ?- ~
m_Item[m_dwPos].nIndex = nIndex;/ x i( s+ w% h9 l$ {& b L! X2 G, e
m_Item[m_dwPos].dwId = m_dwPos;
' t/ w7 D9 j0 @* }; B/ V m_dwPos++;
' b9 E/ m9 E2 Z' F: v) p9 k}5 W: R: Q9 e7 y2 b- X& g2 s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 U- l) @$ {& n# s1 w. o{
( w4 y& h u0 s- { for (int i=0;i<MAX_INVENTORY;i++)
. C# c6 I8 p P+ H. o {
' n* [' [1 k7 K8 [- @6 l if (m_Item.dwId == dwId)9 I* ~. n( e O6 Z
{
4 d, w7 [: K7 L/ B6 N return m_Item.nIndex;7 V8 y" ~, M% t6 C2 Q2 y
}
/ @& k- L! w9 w1 p9 l5 h) C# U }
2 [: f8 b) {6 t) k1 _ return 255;( J. Y5 B+ s$ S `
}
% I7 c: B; w9 W! v* ]0 D4 ]void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 J2 J. ^2 ?# q4 U
{- ]9 V# H# x# o1 s5 _/ l! H2 p: t) P
BYTE nTmp = 0;9 O& t y3 }' p$ j
bool bDest = false,bSrc = false;* }( y( M% Y# O [! n. L0 X. @
for (int i=0;i<MAX_INVENTORY;i++)
; C! ]0 F6 m; z {. j/ X1 Q& Z1 l0 q8 r1 j0 K
if (dwSrcId == m_Item.dwId)$ S. L" ]4 [% q& {8 r
{
; J' b& h' U( @( L! V //id相等 则 改变对应的dest和src
- M: ^$ m% @; N: u nTmp = m_Item.nIndex;: @/ l$ {4 Z" ~1 F Y
m_Item.nIndex = dest;
: v; J" n/ \3 j9 Y+ u }. q4 j5 q5 y) T3 w
}+ K0 H5 R- ]9 W; K+ O; B
//临时数据保存完毕,交换开始
5 O9 A$ \/ T9 k( m/ s, c' c for (int i=0;i<MAX_INVENTORY;i++)) D: H5 b5 u' ?. C2 A3 T
{
0 P; w2 b5 M' {% A3 t; {5 L if (dest == m_Item.nIndex); N& u. m9 t8 S+ v, i" z: M
{
7 B! V0 O( B$ Y9 ?$ f# X) L) X //id相等 则 改变对应的dest和src: S8 ^4 O7 c0 |2 r, p' |
m_Item.nIndex = nTmp;
0 Y$ H$ d, Z4 Z8 `+ J1 o* g }
0 w+ R* [* n9 b6 Y) p# y( b" L }
: \, x; V7 ^3 u1 D}) m! S, ^1 n2 B& m# n3 q- k7 @ f
};
6 E3 A' z6 w2 \" t3 m-------------------------------------------------------------------------
+ A. w: _, [1 ~, c/ f5 S! b0 c依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" o8 x7 D9 v; l: X; N/ R2 C
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); c: f6 x5 ~. Q" a
紧靠其上添加:
* h3 ^# |8 J w# D/ @* Uif( pWndBase == &m_wndMenu )
5 O5 E5 f& I0 D' g/ W{
( V4 m, @/ {+ A4 Q switch( nID )
4 b2 d! V/ c0 p- u" Z; r2 E {
0 c7 v6 H, c t- H- f; o case 2:
4 v7 s6 h& a& ^# `8 S# n {' z7 |% y% y# J
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* x0 h, u! O9 Y, @0 j/ H5 z/ M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ ], a9 G( k; E+ U( }; F
{
) ]- D- ~% d( n4 R2 j5 U break;# P/ A% c. F& A
}5 c% Y- x- Y4 n3 d* E) ~3 Q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& `! U! \& C; \0 D& e: `5 B; p {% P1 N+ N/ f# c2 j4 H3 S; A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; h+ N' L$ V" s. A8 M7 l( | if( !pItemElem )& Z0 _# d+ G; O4 T" w
continue;
1 l1 I( }6 ~5 T0 X7 b if(pItemElem->GetExtra() > 0)- K0 S8 Q& o! x( H" T
continue;
& M* ~6 B/ `7 c- X5 D5 s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
y! g/ F/ r, J5 j- |' c continue;- f4 Z/ k6 O. [, `
if( g_pPlayer->IsUsing( pItemElem ) )% }; v5 q/ [& \$ j4 r1 i1 ]: r2 ~3 ^
continue;
0 S$ Z! a' M% y if( pItemElem->IsUndestructable() == TRUE ), T. l5 I4 `2 C
{5 E: Z7 R/ x. K2 t
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ S& d6 q8 q5 M. D5 `; A* P continue;1 V- q! C" Z1 h" U: w, q
}! y R+ ~6 T4 J, m2 g
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! g0 h. w1 [2 B7 B: |9 g, F }
6 F8 M% l2 l" _0 I. m C. F5 g break;$ L6 C; Z! M% M% }
}
$ _+ {7 Q+ M5 x0 p; z" T case 1: D4 x. i- A) G; o9 G7 w9 {
{
M) t3 w8 z' g, U$ D9 F' v //整理背包$ T4 Q3 P2 h3 i1 ^. {/ g
//////////////////////////////////////////////////////////////////////////
5 q, J. j! ]2 d) i! g7 q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 W7 r, y5 N5 M/ r8 \ u* j& x //////////////////////////////////////////////////////////////////////////
4 A: e' C4 z' W9 u9 p | //////////////////////////////////////////////////////////////////////////
% b: H+ L W4 Y. _ CInventorySort* pInvSort = new CInventorySort;
- \, ]( r2 Q+ ]- F2 X6 _7 \ vector <sItem> vItem;
. b/ X, e- b _4 }/ E vItem.resize(MAX_INVENTORY);//初始化大小7 d) `" ]5 a4 O1 _
////////////////////////////////////////////////////////////////////////// g: O8 Z- K- h6 A# ~. ^* _
//填充数据
+ R9 e0 O9 J* e; K- U m! s* K for (int i=0;i<MAX_INVENTORY;i++)
+ b( {; D, `' M0 \5 r/ @& ] {( b# |/ q" m) D; g/ r' |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 \* U3 H" o, f: X" U' t
if (!pItemElem)
8 v. T/ z7 X; K0 n3 i$ r" A {
: I& l6 K' R9 ^) r- R% F/ O vItem.dwKind2 = 0xffffffff;
. J% p2 k$ i1 ?1 E vItem.dwItemId = 0xffffffff;
\6 S1 |8 Y7 H% p$ I vItem.nIndex = i;# o7 H7 B# U5 T( W3 {5 z
}else {
* A% i6 N0 S. h/ M ItemProp* pProp = pItemElem->GetProp();4 c: g u. z; a) a/ ?# m/ y4 A
vItem.dwKind2 = pProp->dwItemKind2;
. v. A* ~6 w" x2 C& W/ A vItem.dwItemId = pItemElem->m_dwItemId;9 W" u0 r3 K- H
vItem.nIndex = i;" b- R8 [3 w) x6 R) _
}
8 s' q2 u# Z% p, C9 I& g% N //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( m& m8 i2 E, r# x$ ?! ]& s- N }
( j% o& D- j9 i B2 w. `1 z //////////////////////////////////////////////////////////////////////////0 w% j2 r7 |$ N& F- [. b
sort(vItem.begin(),vItem.end());//排序
: {* S' a% V; c. J; |3 O) } //////////////////////////////////////////////////////////////////////////
0 o1 x/ \ C* N //交换
$ Y0 G0 b: K/ v4 V- h P+ | for (size_t i=0;i<vItem.size();i++)5 C4 J- \& \4 J$ E1 ?
{
4 T' ?4 {0 u) D- v' o- h+ X //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( F K8 c& I/ D pInvSort->Add(vItem.nIndex);
% Y5 x$ `5 M0 m _9 N }
D2 j K2 J4 { Q% z3 ` BYTE nDestPos = 0;
! {4 z F. g4 q5 l. U for (int i=0;i<MAX_INVENTORY;i++)
8 f: M8 {" K: R1 X+ K/ h {4 L( V- Q+ u7 f( \+ Q! ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' h- k' ?$ k0 B/ v C2 d% v4 i
if (pItemElem)3 `2 b8 Z: b% n" x* F6 Q; E2 v
{
- I. n6 X- }& c7 s8 ^' t4 O" d if (IsUsingItem(pItemElem))
' h* k. _2 n- Y: X t6 V: E# m {
6 \* v/ S, r9 ^ //这个位置无法放" f6 R! N$ }! \- f0 T
nDestPos++;
4 k* X8 L% _( S0 O* M( `0 x }/ q4 f! y6 m$ W, y4 S9 M+ r( b8 h
}
$ y# m) N0 k5 h' H8 A BYTE nSrc = pInvSort->GetItemSrc(i); q; u8 u5 @( S7 W4 c! P9 t! ^8 s
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" e5 t( y% ~8 ]! l* l: ]# g
if (pItemElem), {( E9 {# r0 b) {# M# I
{
0 z2 O$ R2 w1 t9 R if (IsUsingItem(pItemElem))" q0 O4 n; R/ S/ d. {6 q, N' ~
{7 Z4 P$ L! A: S; R8 g7 N! T
//这个道具无法移动,跳过
' b/ B1 A8 g4 M, n2 t+ ]! \ continue;
) _& O# K$ q7 p3 Y, I }
" Q5 y# Q _8 ~$ {, @; r }else{6 r& r& [4 E3 v, z1 b+ N
//空位置 不用动
- I' N# L1 R0 x1 Z2 B continue;
6 z8 N% @- o1 b }
5 h9 x2 @$ s- c/ H //////////////////////////////////////////////////////////////////////////$ Q0 F- c2 P* q7 Z- `" R8 j* `; h
//开始移动
8 g: b% _- X3 O3 p if (nSrc == nDestPos): u$ B5 n$ d' u- F8 ~8 Z& f
{: I5 H @$ x: i0 o+ N6 m+ K
//原地不动
$ H$ ?' J( ?2 r3 w0 B1 D, h nDestPos++; C' s- |- `7 P y
continue;
( k' t$ G3 y, ^ }) ^! }8 _0 }; d; ^9 W, G8 P
pInvSort->MoveItem(i,nDestPos);4 C/ v! X, q) `
g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 ~) J5 N- @2 _/ K& X+ s6 |
Sleep(5);
% C7 m( v* h9 C B5 U //Error("移动 - %d->%d",nSrc,nDestPos);
1 t& U5 B: d3 [& |9 @& E, A& c nDestPos++;
/ i: I2 {$ f) l0 U% d1 U }
1 v5 m4 r- E7 f. `$ Y( H3 O4 ^8 ~ //取第一个元素的信息( @" Q* N# ?+ u+ x1 p: I
/*
# K& T3 R6 C# x. k" _% }2 T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) }6 N8 j/ `* X. V
{
! a5 S t. B) e% [ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( s7 b) n7 T& ^: j3 H! \) O/ L
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 O2 Q3 G! P5 R: D& o9 C3 m2 u
}1 {" D5 l6 c1 ]" H+ v" j& \" o! z
*/" {( F7 h G8 Z( T( \5 s
//////////////////////////////////////////////////////////////////////////
" {; J% G8 H5 x9 k" F" w, l break;
6 L' {# x+ O) q9 y4 W }
8 }4 k8 R- R) L9 @' ?8 g9 h }
) ~ K/ h, e, o' t8 D) r( o}; f/ \' x2 t& Q# W3 d7 e. j; b
m_wndMenu.SetVisible(FALSE);
& N; X" c# J ]0 k7 z* `% T* _3 v+ N7 @3 V
--------------------------------------------------------------------------------------------------------
: _1 H5 i/ K* T4 K+ X1 ~6 P+ O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 u. Z: m' I' T. ?# q% }1 H( t{
2 {8 {8 K/ g C# u BBaseMouseCursor();
+ Q M" c* S! n; c( Z. I7 \ ]}0 s0 w& e3 t" [; l
在其下添加:5 T1 w, d* Q ]
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 y9 y5 W0 s+ t2 E* ^3 t' V) E{
1 B1 n. Y( f \m_wndMenu.DeleteAllMenu();/ r: Q& w8 f8 y* A7 P! ~
m_wndMenu.CreateMenu(this);4 n9 ~# `% {+ Q8 P! [
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" r6 [" l- _8 e% E5 K
2 L4 g/ r/ e1 c+ M8 W. o! q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 j- J8 f7 a0 W+ c) ~( F8 _
{
6 b O8 y0 s. \ [ //P以上级别才可以删除所有道具2 j0 _7 L8 Y% R1 q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. U, Q2 | F1 \1 |$ M+ e}
, A1 b6 X& c# |1 L1 vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 Q) O# { z( _" |- Z+ em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( _! _5 ]) z' l, ?* w; u& V1 ^% P" wm_wndMenu.SetFocus();+ N9 q; e( K& q, ]; g) C
}2 [5 v" q7 ~3 H" y% ^' ` U
------------------------------------------------------------------------------------------------------------
8 S& C) J+ i' B8 Q: P4 C' p*************************
; ?4 Y' ]; S8 R$ n0 T! n+ \$ T- I+ VWndField.h文件/ a+ L, v c" _$ T! Q, v
*************************
8 M! x' z7 H `7 R4 q搜索:BOOL m_bReport;
% N; c* P% C8 I# r* y; t7 [3 p0 i- O其后添加:
7 @4 @: [% l* jCWndMenu m_wndMenu;8 O! x5 x$ a+ A6 C1 _/ c* I
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 y2 E& t$ s8 Z# r, N z其后添加:. Z7 c N m7 x( M8 D' I( I( }
virtual void OnRButtonUp(UINT nFlags, CPoint point);" w8 }) R4 c4 Z# V; c- I. `
. b; h3 D4 l! R. x- b1 P7 N6 T, W( G
( U% W" L: i* t4 [ |
|