|
|
源文件中_Interface文件夹下WndField.cpp文件( s4 z, m8 P L( h7 k3 x
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& P% A9 e8 h. \ \( G% i1 q& i( f" [
struct sItem# G6 Z. E/ d; b1 Y W0 R8 s3 t
{4 t5 K/ }1 o5 O/ d2 m
DWORD dwId;
, Z; w$ E5 p" b$ ^# `7 ?: ]2 V( ZDWORD dwKind2;
$ m8 S1 t5 ^) `, g& d: HDWORD dwItemId;5 a8 j" V9 W) V, P
BYTE nIndex;! ?( \. B- _6 c* E+ h
sItem(){) b, r3 I- i6 G; s D& M& W2 D
dwId = dwKind2 = dwItemId = nIndex = 0;5 w/ V+ l) T. Q1 a! T9 W
}
: ^* b" Y* f* V1 p2 Y+ ~) H: Ibool operator < (const sItem p2)
5 w: z: ~' Y! w! K) G5 U{! P; s/ s+ K& B1 `/ f
if (dwKind2 == p2.dwKind2)4 _' ~: l* D ^4 i
{
1 V b+ q) k1 k% }, q) |; E return dwItemId < p2.dwItemId;
, M# |" u) j# S2 `6 F9 r }else{
9 j- ~1 K7 c7 ?# Z return dwKind2 < p2.dwKind2;+ n9 D+ l/ Z4 Z* L7 a
}8 }3 A4 r a$ n) x ^/ [3 U
}6 m; ~; c A# q: v
};
& W$ k3 |7 g1 \" C fclass CInventorySort
1 i% d! l& O, a$ W, f @3 H% n{8 f) s/ b. D- I3 @3 B$ [9 e( W
public:) \, \2 Z0 D( a* `( ^& ]* p
CInventorySort()# @4 X( F# q" H4 W- J; V
{+ n q8 z) o7 x& G. J6 C _/ V# W
m_dwPos = 0;
. x9 s p: z+ z" e}7 N+ A6 q: G) \- C
~CInventorySort(){}
% Z0 k7 |. n5 m% l6 a4 Bprivate:4 e5 ?# d6 ~, m! y3 M$ K. k, m
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 E8 R/ |) g! Q/ r* O S7 HDWORD m_dwPos;
# ~, o# ~5 w8 f" i M/ xpublic:
& T/ F' S: B0 X! Z7 vvoid Add(BYTE nIndex)
- [7 G4 }' v0 F" e" ]+ t, F8 X{/ @' x$ K; b5 [8 h+ `. U8 q- ]
if (m_dwPos >= MAX_INVENTORY)
- q( e v7 m& b5 B* V {
7 |6 r: ]3 A+ g! J* y return;
0 s- S/ h, y* D& {$ |0 l& j) V }
" z# {4 k2 q! J7 T m_Item[m_dwPos].nIndex = nIndex;
; A$ [9 f# f. G, c0 w' F9 Y3 ^ m_Item[m_dwPos].dwId = m_dwPos;
$ f4 Q8 y" I: i+ C# {3 w1 t m_dwPos++;
7 h4 z) i' H) B0 d4 ?9 G}+ }- i! V. ^! k1 ^
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 T. t8 O! t3 \) w9 w; n
{
( t6 `+ i" o' A: }" N. ~% x: O for (int i=0;i<MAX_INVENTORY;i++)
$ o. T9 M5 a( W; V D. z2 o {
- y4 s& n2 \5 Z; ~0 V6 e$ @ if (m_Item.dwId == dwId)* w/ b( `5 u: {. r3 _4 t* q5 X# {
{
8 W5 j1 R% ?7 C* l W0 W return m_Item.nIndex;
0 W7 p7 w! p; e+ S }3 L R3 H2 V# Z. k! n
}6 O* T# i8 z' D
return 255;
1 x& F' S1 ` [}
; i/ \- {- F( i3 nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ V8 z( w4 u% M8 y _* l{
0 L4 y( k( D7 x+ M% W BYTE nTmp = 0;; x N8 j5 @* I2 o
bool bDest = false,bSrc = false;/ C" X' o4 c. O
for (int i=0;i<MAX_INVENTORY;i++)
! F# F7 d. K1 g1 n {
* Z! C$ b1 E c* v0 g% h' | if (dwSrcId == m_Item.dwId)
& P7 h$ U2 y5 e6 B4 a3 v8 U {' M( u) f$ Q' e0 c" S1 Y L
//id相等 则 改变对应的dest和src, l9 e. ?* U5 k, ~8 Q T- L
nTmp = m_Item.nIndex;
3 @ f* ? n$ Z! `# u m_Item.nIndex = dest;3 f3 |( d( N6 _) R0 L( i' M
}" u7 \% \9 D( t6 m# G& O
}
" M* O1 G4 f* V# ~" B //临时数据保存完毕,交换开始1 K) ~* o0 {! J6 a+ [8 l
for (int i=0;i<MAX_INVENTORY;i++)
5 k; I$ Z4 z# s1 o3 n {$ W" C1 P# s4 a
if (dest == m_Item.nIndex)
: g2 `. B3 i- p. V x8 m {
/ z- F/ d* [, m8 { //id相等 则 改变对应的dest和src
1 r; I o% f! e; a& Z, {9 X4 Y m_Item.nIndex = nTmp;
' X! |& Q: H$ c' p; C# W }
" _+ C% r, Q7 Y/ x }/ p5 e7 k7 H- J
}
0 d0 @$ h7 o! s5 ^$ h4 `};
! L! D0 F" t1 A4 L3 e% ]1 o" N2 G! M-------------------------------------------------------------------------2 E, w; ~- Z2 H% n- l1 J
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 _4 D/ u- ^8 p$ |9 Q6 P搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& \/ J Z) u6 D" k
紧靠其上添加:3 R( w! M5 e- y5 W: I; F/ n1 D
if( pWndBase == &m_wndMenu ) X7 L" e% T' j$ B4 U7 J7 e
{
; X* I2 v9 v9 y9 ]* A5 s switch( nID )5 O3 u( Z- l3 D9 x8 v- g
{; m0 }. Q \8 F2 M0 V8 B; F( p
case 2:
* o: S8 x8 B/ ^6 t, | {& c- c, x7 ~3 I* D X q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 y' z1 |/ }& L; P+ j. \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# e" H- G' @7 P4 i9 k3 Z- m+ ^$ e
{
3 F2 w1 V8 V7 K0 w break;
( M1 V% ?6 X) X `0 I. j+ } }
9 b2 F: ?' v. B for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& i1 P& v) B9 Y: D4 |6 |+ Y) w, b
{
% F. m2 V7 C Z. g7 ~- H: e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" \( i9 S4 h9 D8 ?' M5 v% f+ r if( !pItemElem )! _+ q% J6 H, F( u# _5 O4 Y: i
continue;
; ~4 b: d" a/ s8 h if(pItemElem->GetExtra() > 0)
5 J: K6 w$ C9 \+ Y8 y continue;
0 L! r* {6 j& j% q1 v if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * Q* ^6 Q8 B3 t1 e( F
continue;
# H. n% r' t+ h* M) C if( g_pPlayer->IsUsing( pItemElem ) )
5 U# O+ H$ n) e' s; I$ g; l% ^; E continue;
$ x( U: s1 ^$ F, B if( pItemElem->IsUndestructable() == TRUE )
) g. I8 I1 K3 T {
3 I) R! K( s8 w2 j; w8 V g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ G0 P: k$ f1 t) f continue;3 ^( F4 W. C4 V$ z
}
% o# ^, o5 e7 M M7 U g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 G/ P5 |, d7 L0 N& L8 t0 T K
}- t4 ^, d: @9 m' b) g7 S
break;
) n9 M/ w0 m( I" t }
" R g9 h0 P$ M' x% P, \ B, @7 N case 1:
2 ]3 t5 V2 t! U$ _6 R* H! B {* i h) k5 `( s1 b' H4 l# U
//整理背包
, k5 e8 m/ G7 b6 e2 ?" H' C" ` //////////////////////////////////////////////////////////////////////////2 [. x; e- `2 B
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 e! ]% |# _# k" z3 ]+ ? //////////////////////////////////////////////////////////////////////////
% N8 u9 Z$ X; N9 |, R //////////////////////////////////////////////////////////////////////////
" r9 n% n5 d8 k$ ^ CInventorySort* pInvSort = new CInventorySort;
* d# F& t B4 b& H& [% P vector <sItem> vItem;% E$ {) w' \4 F7 ~ P+ p
vItem.resize(MAX_INVENTORY);//初始化大小3 h1 F: a. Z1 X6 P! ?
//////////////////////////////////////////////////////////////////////////2 p% W2 ^* c2 I' w8 N5 Y, u* q
//填充数据
" {; g4 h* P& S- W6 C8 W% X for (int i=0;i<MAX_INVENTORY;i++)
# \* }7 u5 a* I' u {
# u0 O5 _, {" P8 n k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" S6 d6 |) g2 S1 ^ F/ J/ _
if (!pItemElem)4 w$ s6 _" u! S) h' d$ Z9 Q
{2 K1 r7 J0 f7 T* R
vItem.dwKind2 = 0xffffffff;
$ G' K1 Y/ o5 x1 g! t( H( X/ t1 w vItem.dwItemId = 0xffffffff;/ j0 p3 I7 p* q3 A
vItem.nIndex = i;/ \, ]' v0 V9 d; \; Q' k. g! b
}else {6 m/ }8 p2 h! R3 V6 e
ItemProp* pProp = pItemElem->GetProp();8 ^; |. P0 u+ z+ I
vItem.dwKind2 = pProp->dwItemKind2;
. e( B T: ?& M3 v, _ vItem.dwItemId = pItemElem->m_dwItemId;
9 G) {( q& X9 i, E' S& q5 o4 d vItem.nIndex = i;
$ N( [' q, C$ ?! E% W }
* E p: L; y8 W X$ Y% w5 C //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 \% D/ C$ F3 [9 s9 m) e
}
% r; F0 K$ V& l6 F //////////////////////////////////////////////////////////////////////////3 [" {+ Y7 @( v2 |. Q& W
sort(vItem.begin(),vItem.end());//排序
- T+ N0 ], t+ t1 y1 q$ y: |, T _ //////////////////////////////////////////////////////////////////////////- m: ^" T/ o( s5 f: s2 s1 ^2 P# b6 Z7 ?
//交换
) T$ B+ W7 L) q9 x for (size_t i=0;i<vItem.size();i++)
0 e1 T" R% S$ x( s& t* O {' {# b8 b/ @! ~6 t
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 M; \3 z# D7 w1 Y# X; N6 E7 L
pInvSort->Add(vItem.nIndex);
( m4 n- I# x. f; w, r6 ~2 j, n+ d }
6 q3 m- [2 X" F9 ? BYTE nDestPos = 0; u% s: g& c; w* C" g
for (int i=0;i<MAX_INVENTORY;i++)
0 _$ t$ f; y7 d {
' l+ G' o+ ]' k0 n" p2 P8 d1 k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; |+ C# _2 J3 N5 e" u% V9 t! U3 l
if (pItemElem)3 V" f% A# g' |1 v; V4 H1 g# h
{* i+ |0 x+ H. K: X0 o
if (IsUsingItem(pItemElem))* ]- Y& d* | o( O1 c8 q: g% R7 s# I
{4 E' w, [+ G# q
//这个位置无法放
* v, n, e+ x6 a nDestPos++;
9 b9 @3 t; O$ D3 X) k, C% ~ }+ K' `" o' C# U6 s6 z5 f" I" K
}
) y4 Y% }" K6 R8 ^7 a1 g BYTE nSrc = pInvSort->GetItemSrc(i);
+ S* e* E) h. Y7 R pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# V/ m2 O2 B9 j* R! _. _ if (pItemElem)
: N- J, R8 L$ y( d {4 y B/ n0 u$ S# E2 t: X
if (IsUsingItem(pItemElem))& |# ~) }" k$ Z8 r9 f
{
5 E% a' e H2 g: E //这个道具无法移动,跳过
- C" E0 | O' [, V5 R' |7 _% s W continue;
- U" d. p7 y* | }, Y1 o8 j8 _$ I% L, I) `" w" x
}else{: r _' ]8 s+ p! ^' c
//空位置 不用动( n5 P9 d0 s0 C# B3 @/ j s
continue;
- K9 L/ n" u& A$ k- B }
8 W; n/ r* j, \1 d7 J: z8 T //////////////////////////////////////////////////////////////////////////
. Q; |8 r1 v0 [ //开始移动
: e! @6 A7 K' E/ ` t if (nSrc == nDestPos)
! F' n" {+ N( ^ {
2 ~) K/ G9 q: r1 l* V7 T //原地不动
* w. j9 r0 Z1 W3 L2 W; Z nDestPos++;" l3 q# G5 I8 a. w1 y
continue;3 c8 R9 T8 K$ g9 p8 N( q0 p5 T2 J
}
4 s+ k+ g$ B4 |2 Y. N. ~ pInvSort->MoveItem(i,nDestPos);2 }/ h$ C# r) }! L" k. |( a4 g( g- ?
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% H9 F' r( l5 C3 C5 [
Sleep(5);
* [; e, _5 D0 u+ P7 R; o& [2 E //Error("移动 - %d->%d",nSrc,nDestPos);$ `; V5 S/ Q! M2 d
nDestPos++;
4 Y0 @ Q; j! s Q/ Y7 U }
7 k) r" x& E: z! C0 R+ C //取第一个元素的信息
" W* c8 J& w8 f% Y /*/ m3 X. H6 {- P9 k) y9 _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 V4 @1 b/ K& A5 H3 M
{
" z% `& x7 b& f5 z; A) Z, ?. [ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 }9 L y0 K. B5 w
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; J; [* H8 Z3 w2 {2 P4 w/ k9 u4 u/ F }4 ~7 ^4 _& {$ D$ a! n+ r' J2 a( e
*/
. S J/ V0 W5 |, k8 K/ S //////////////////////////////////////////////////////////////////////////
3 [) z/ |) W4 a/ M break;8 F2 q- ~3 ]& |3 D. P7 [3 t+ q
}" ?# R$ y K- \7 _/ R" V( [
}
- u- }3 U' g: W+ }+ w2 y* x}
" K7 B0 e& l5 {6 O8 L% p. T1 Sm_wndMenu.SetVisible(FALSE);$ y" l8 H& {2 c# P( _
V# N+ y3 O, G F8 ^+ {5 [7 b% \--------------------------------------------------------------------------------------------------------4 C. J2 v$ x6 t# p* g# O) h
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 Z2 z+ I2 a$ u" c
{
( {+ F& z7 K( \. YBaseMouseCursor();
9 O& W! C8 {+ M/ ~2 u. d' d# V}+ z, S7 C1 d& v* I
在其下添加:& G% g- \+ {3 X6 P
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ r5 l: Y4 _0 c. p4 X{2 d% I: A4 d0 v% r6 g6 i9 N
m_wndMenu.DeleteAllMenu();5 N8 D, X' k% }; j* K3 e& J0 G. Y
m_wndMenu.CreateMenu(this);
4 Y' }! @4 ~4 e3 u2 \m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 u' T6 B7 S$ g, e! Z3 p
2 A1 G, D, z* o5 R: C% Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) a2 a# a8 |, J' I
{- ^6 u: Q0 i* T* j* ]* J0 [; L+ S' ?
//P以上级别才可以删除所有道具/ j, g" ~" C! O) a$ R; C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- F+ p' h& p) W2 v" L4 n
}
, p) K1 H& [% B7 f* I! b0 o* |m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ ?* G" c; F! v( y5 Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ k) b* [* e) v: ^8 V$ qm_wndMenu.SetFocus();; G; S. F$ r7 g. f, y: p) X
}
6 Q; |) x2 M3 b------------------------------------------------------------------------------------------------------------8 i5 |8 c, n8 ?0 ]$ k; u/ h [6 t
*************************
) t( [* w2 N! K* Q2 z: {WndField.h文件) ~4 M: o2 n" o3 z) o/ S: w
*************************
/ v. I0 w4 W1 Z* {2 x% k搜索:BOOL m_bReport;
H( ]3 N, @. f8 U) [- J7 x1 |其后添加:6 L0 M; N- p Z! l2 ?6 }) e
CWndMenu m_wndMenu;
3 i; a6 V2 r0 |- ]! {! ~# f搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
0 n) @+ M$ B- U4 A7 E* M& K其后添加:. X9 n. D. b. ]- c. n
virtual void OnRButtonUp(UINT nFlags, CPoint point);8 C- v6 j8 H' E
/ J7 o" B! m( r/ a4 H9 O3 j( ?1 @: g+ h0 G, P
|
|