|
|
源文件中_Interface文件夹下WndField.cpp文件
; j) l6 H1 }' O, X搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 d0 g- S; P5 b' m* D
1 w& c5 s9 z& V+ J; s% c1 rstruct sItem5 f" y8 C. `% j
{* D i% e4 l0 c$ y1 I# l& D
DWORD dwId;1 K2 X- m# a: T- K% ?$ ]# ^
DWORD dwKind2;
# k: i/ i) Y3 `& e3 e- |DWORD dwItemId;
, Y8 c! x' A, O' _3 IBYTE nIndex;2 j7 O2 i& x* _ ^% ?- e
sItem(){
4 H1 I4 T6 { w" u. H% Y dwId = dwKind2 = dwItemId = nIndex = 0;, Y; R( y% i- z/ q/ G) |
}
5 G, m' \* e2 r4 S" Ybool operator < (const sItem p2)' E. B/ i, a* `1 ]9 r! H
{+ n! Y* C. |) g$ v) A
if (dwKind2 == p2.dwKind2)+ T. t+ n8 D2 P: R+ T$ V
{
: i2 s, h1 e6 p4 o2 d return dwItemId < p2.dwItemId;- }7 f0 p2 v( X
}else{
- B$ a5 I+ d* ?' G( L return dwKind2 < p2.dwKind2;+ C' N5 T8 Z$ W, d3 ? {
}) d$ E0 E. e9 u! j
}5 A6 e" w A1 `3 H- ]8 z/ U
};- N7 e0 g+ S* p0 o. |% b& H
class CInventorySort
( v2 L; G, K O5 Q{
. T4 Z$ a4 E! {) u G" _public:
8 |. g/ K9 J6 y! P* o1 kCInventorySort()
% c7 ~* y2 b( K; A# G9 K9 m6 z{
2 t( }: O* s' j; V% l: S m_dwPos = 0;8 x1 c1 N: j" [) _- B: N
}
" i" D2 k7 K$ `( F5 X4 D~CInventorySort(){}
, V: z$ n2 ?+ m! Oprivate:
4 w2 R+ M7 P1 J) V# EsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
C( V! U& L5 ZDWORD m_dwPos; m% }. {* r2 K
public:
0 S% Y+ w) [0 x1 |void Add(BYTE nIndex)
! r: c# _/ C) [( Y{. W! L0 [4 {& W* P$ k% ]
if (m_dwPos >= MAX_INVENTORY). p6 k5 E3 b* Z# p2 U9 P9 i1 [
{
6 `6 s( u4 Q/ B1 x0 _+ q! w0 p return;4 ^7 f0 W; T% c2 s
}
8 k1 X, H4 V0 Z m_Item[m_dwPos].nIndex = nIndex;
- Q, _6 @5 \6 ?7 S4 L+ \$ O m_Item[m_dwPos].dwId = m_dwPos;
% e/ O: w' n# y1 \2 ^ m_dwPos++;
) v8 I% c' q8 K/ T8 I}
p& I9 k1 A6 ?0 {/ {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ V. L0 i- X# T0 ~( I2 y
{
7 h$ p4 p$ z: Y, Q% P for (int i=0;i<MAX_INVENTORY;i++)
# P% c' B1 @! M8 o& P' ?, N {7 H/ C5 z- E8 Q) F* j
if (m_Item.dwId == dwId)1 ~# |. m; |% Y. G1 s
{+ G* u& t! o4 o( B8 x) C
return m_Item.nIndex;
4 E0 Y1 I; `% m* D- u6 t }
+ t Q( w2 |9 m" _ q5 r. P }% U6 X( l! [7 z9 \2 A
return 255; j- o* f. E i! U2 g/ n! X
}
9 n3 n# F* B6 M2 rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 R8 a+ p$ ]2 ^1 G1 @" C; ?* A
{
/ _, v- h9 v+ r* h+ j9 p$ L BYTE nTmp = 0;
& A2 H* @6 S( ~# Q9 L& A' a bool bDest = false,bSrc = false;
8 t+ @( p0 h/ X$ B' @ for (int i=0;i<MAX_INVENTORY;i++)
" r5 E0 Z$ o: P3 f* w# ~; | {+ f( J6 d( x v2 n) t
if (dwSrcId == m_Item.dwId)7 W! ^+ h- N4 L3 r: F. ~
{! S8 b% p9 t- B2 g- c
//id相等 则 改变对应的dest和src
7 N: o; E- |6 Z, F nTmp = m_Item.nIndex;
! n1 [2 C* e: @ m_Item.nIndex = dest;
* z. P* D; t1 F$ A1 P, y }; O) l" z$ r9 }/ x E# N
}
+ x- I' j& h5 i* Z5 R //临时数据保存完毕,交换开始8 E+ V7 O' F1 f9 g* U
for (int i=0;i<MAX_INVENTORY;i++)& D- o3 n7 T. S0 Y
{& @0 y. U3 i& M
if (dest == m_Item.nIndex)
* W/ Z' r6 x9 b$ ?1 m: C: p {
* P" g3 L0 Q/ o! n8 F //id相等 则 改变对应的dest和src7 ~5 j. Z* f7 l3 q
m_Item.nIndex = nTmp;
' G" k+ e1 D5 I; O }
& X5 X) D! Y8 G: o) [9 Z8 |' D }
. F+ n4 r* M3 B4 | |9 D" W}
) w' | G4 W* p c6 |4 k4 W};' i7 K4 ~8 i! w, b" D
-------------------------------------------------------------------------2 y6 p3 F, u q' `7 ~
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# A/ V7 l8 |" Z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( ^7 ?" z9 U( h2 h4 B6 N紧靠其上添加:" U8 S7 B1 }! T) t
if( pWndBase == &m_wndMenu )
% R4 x. G. j2 w+ J' _$ j{
5 m# c$ @" G6 r8 @! B2 `& Y9 I switch( nID )
$ @: _) b" N' I {7 j% ^5 z9 r3 |0 @
case 2:( ]7 v. w* Q" f3 Q. w
{
7 \; D+ \& _; |# w# i* f6 s a //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& s. j5 w* R% [ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# @* [& o$ ^% c1 ^/ J {
r) A" e: j& G: V5 U( F6 f break;9 ?# I2 p1 Q, |4 u) m/ X
}9 T9 Y1 c5 r9 P# T6 m+ P
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, V* G- S2 ]3 ^1 A: E9 B {7 g0 R' w9 T( m' S9 K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 C( |1 e5 E+ @ if( !pItemElem )
7 Y8 O6 B6 B7 y continue;/ I. T" n, _3 b9 @" y7 N" `
if(pItemElem->GetExtra() > 0)
+ `7 `( v5 e5 }1 r0 {& O( k3 t; \ continue;! W& {5 X- R- |5 L1 h
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# C9 d# i) O4 `9 K7 O- Z continue;( |' N1 D% v/ `; h
if( g_pPlayer->IsUsing( pItemElem ) )5 n/ j; S1 p. G- k; a' N" K
continue;6 G# u* k* ~+ D/ T/ F
if( pItemElem->IsUndestructable() == TRUE ); N* i, N: s( G" I
{) ?1 c* u( |7 V
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ u: Q* m0 |; @7 G3 O
continue;. _: C# S9 j& A
} _4 e$ F6 g; E' h7 B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) b) D. e8 {( ^/ T/ e' g# ?( e
}
7 A6 o" |$ y; K6 n; N: @4 F) y break;: [/ J' ~+ V. ~# [; C
}
' Z- \3 M4 { p4 M case 1:
0 `+ f& z3 [* {' _. l" O, ~ {
% i, I w' F, X& r8 y! r) l //整理背包9 Y: C3 k$ I; ]1 s9 ~4 \
//////////////////////////////////////////////////////////////////////////
& x; z- f6 {1 n- q* | //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* {, u- `- h/ X8 c6 g) Y8 h //////////////////////////////////////////////////////////////////////////; B6 f U! S4 n1 T5 r. `
//////////////////////////////////////////////////////////////////////////
/ J4 _- j( Y' C! g- Z& R ` CInventorySort* pInvSort = new CInventorySort;
9 {/ ^/ E6 K F vector <sItem> vItem;' o6 w6 `8 H# d8 x$ C% o! Y* P
vItem.resize(MAX_INVENTORY);//初始化大小
$ l/ D. |7 t4 y! Z; B- v //////////////////////////////////////////////////////////////////////////
# k7 I& k c7 b; w: B; p) j5 S //填充数据
( Z1 M' o q! H) t7 `; ^; e9 v, o for (int i=0;i<MAX_INVENTORY;i++)+ a* Y6 I4 ]& V' L
{, l6 q: M! O6 B6 ~7 S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 U# w6 A4 {4 \% F! b$ B
if (!pItemElem): B- U# K3 Z5 ?. \9 _" q m3 F- U
{
7 H, {% @# N8 h2 F5 j" L, L vItem.dwKind2 = 0xffffffff;
+ O X8 ~( k- {+ A7 t8 d+ o) U* ? vItem.dwItemId = 0xffffffff;
- r% F$ Q( o4 o; n" ]- a! ? vItem.nIndex = i;
4 [6 i: W& M, Q v }else {. o& z; o9 [- x z3 m- _# R
ItemProp* pProp = pItemElem->GetProp();; E$ g1 E. J V. ~: C7 N- w: q6 |5 M
vItem.dwKind2 = pProp->dwItemKind2;. P% F4 D/ \& _0 x
vItem.dwItemId = pItemElem->m_dwItemId;
& c3 j) e9 [' k* G vItem.nIndex = i;
# d$ {% R0 D3 ?% o) F }
2 P& c( E+ i) a8 U8 @; B1 G //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 R% d0 u" Z W, ]* o' c( D* k0 m( j }
- L2 I1 h7 E! I! n0 n //////////////////////////////////////////////////////////////////////////
6 V' J8 T J% [# ~4 S sort(vItem.begin(),vItem.end());//排序
7 _6 d r+ F$ b //////////////////////////////////////////////////////////////////////////3 u" H* B$ W* y( l
//交换
7 T# `% ]; S5 _9 Q: D1 N! H for (size_t i=0;i<vItem.size();i++)1 ^: M6 R" o, J
{9 N/ h3 C2 Y! u: T( a# U
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& ^6 Q8 D# w0 O- C* h% l
pInvSort->Add(vItem.nIndex);7 Y7 P& g% P' U1 G
}
6 Z" o! i- N$ C" C2 `! V+ w Z BYTE nDestPos = 0;
) G. n) Y' |7 k0 o6 @ for (int i=0;i<MAX_INVENTORY;i++)
2 a. k/ j) ~- S- _/ [- C y8 H4 P {9 E Q8 ?/ b" x9 T2 u) R8 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# ` }! j# F) s4 L; U if (pItemElem)- h8 g$ `) o0 {$ j7 e
{
4 q* h% g# J" f& s if (IsUsingItem(pItemElem))0 R0 s9 n3 Q5 a4 m6 s
{
$ p1 `. y& Z$ e: V( F6 g //这个位置无法放0 [6 i3 k0 ^1 M, [. `% T
nDestPos++;
0 C; f) e7 A' ]2 k5 y# ^ }' H% c' X+ D7 }# G
}
1 `+ r0 z0 a1 ]3 K BYTE nSrc = pInvSort->GetItemSrc(i);
# h @3 Q1 C3 w6 W& W9 D) S1 F pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
; @4 W% C8 ~8 ^ z1 p2 E* M8 d( p if (pItemElem)
0 }% ~: N& r7 G/ ]- \: F {
; i% L9 N3 g: M) ^/ z6 }8 [ if (IsUsingItem(pItemElem))
* U. }1 T- C( v0 x* e4 n; F {9 m7 y3 l+ Z: B5 B! k
//这个道具无法移动,跳过- N: \( X K a9 c3 a
continue;
; n% B5 s1 I. y2 d) C }
# ]- g: O4 t) F5 G& o' y }else{; m+ i* r! u) Y/ Q
//空位置 不用动. \4 k" b8 q- b4 ~
continue;* X4 k" @% @9 [, P7 k# ~* n
}* F5 }2 i/ B5 W1 |( z3 A+ p
//////////////////////////////////////////////////////////////////////////! q# q6 T6 S: t8 X; N4 K7 Y
//开始移动: X: `% g( T" c9 w& h
if (nSrc == nDestPos)
% ?% N3 ?1 ?: ^- w* @" M {
" w* l z0 c2 J //原地不动- Q' u+ f: ^* ~1 t" O6 B* v7 `
nDestPos++;( V; O; [$ }: c
continue;
. d: l8 t% G% J/ {# M8 K9 B( p3 g }
1 N: T$ F" D: t9 | pInvSort->MoveItem(i,nDestPos);
: a$ R1 r1 i2 X O g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 c# C) C6 ^% [; J y- [
Sleep(5);/ }$ ~2 h; `& j
//Error("移动 - %d->%d",nSrc,nDestPos);
4 `7 w1 D$ O i3 }3 F; @; A nDestPos++;( R/ Z2 x$ N0 f. X+ ^8 r/ ~
}7 B. v' n! n# O* t
//取第一个元素的信息9 ^* s+ {! l5 M
/*
4 x6 f5 W9 n, U! D- g if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 e0 d; {$ `& ~% h
{
8 \- S$ m: x8 T Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, g& C5 r6 j- e1 F, v g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 ? {" I: L2 W' j
}6 U- y0 F7 h! G2 ~
*/
/ f2 V6 D/ q4 i P //////////////////////////////////////////////////////////////////////////0 d8 C6 @% ^ J# V
break;
4 y9 `/ X1 w8 Y b/ n$ _ }
7 ^" K5 k, T- M, Z } 9 \. D0 z( y, r S0 S, l0 l1 R8 s
}( D' m( w! y2 C
m_wndMenu.SetVisible(FALSE);
/ _7 I- P8 r" w/ O1 P) \# c: J; \" n- v/ v; w( r
--------------------------------------------------------------------------------------------------------
: ?% j1 b+ x! w. w5 N* g* q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) J& m/ g5 r+ n# n8 h
{
- z, n- I; V, S7 L/ X' JBaseMouseCursor();
; p0 ^: G" q( _, T' P}) T( H- W/ L$ q7 O
在其下添加:$ @4 B, A: b& Q0 ?
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 j1 X: q( e% R( |- ^, a# E- Z{0 b- p: b$ x! S; A9 T U* y
m_wndMenu.DeleteAllMenu();
. ]' ]0 w# A T! d+ Jm_wndMenu.CreateMenu(this);
! ?- F- x6 ~5 ]" F) a% o& bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( S: S# ?8 M. p1 h2 R9 x
/ k! p) P' t* Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( i+ Y& k+ H7 Y9 @6 Y3 K{) ^- R, M6 {0 F$ G
//P以上级别才可以删除所有道具
+ M& s9 K4 z g9 O& k7 c m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 C, Z0 Z0 M4 i% w
}/ R1 R( e! w4 F* @1 z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ a% x4 R: y. ]( _' Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& j6 T( C0 z/ ?* b: zm_wndMenu.SetFocus();
9 y0 M+ t. f5 m u8 L$ C T}
' p1 a4 u8 R2 X z0 ?------------------------------------------------------------------------------------------------------------
* L' G4 Y v) _# o$ r*************************, P4 |2 T# V- O! s9 e
WndField.h文件
9 E+ L1 P* ~' B1 A$ `( I( |% _*************************
% T& f: }' |3 Q2 n搜索:BOOL m_bReport;# C0 m3 q% \4 Q, X8 G
其后添加:
1 c1 ?- l w4 QCWndMenu m_wndMenu;2 K, a1 P# V- {0 o8 i
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! I0 z4 H- p! F4 r9 f
其后添加:' U: E- E! x! e. I2 E) O0 |3 w- E
virtual void OnRButtonUp(UINT nFlags, CPoint point);
x2 ?& O6 r# s+ H- b/ Y" v5 \5 v( O# b3 Z8 G2 ^
$ h$ l5 C8 ?- j# M; h! s$ p* N
|
|