|
|
源文件中_Interface文件夹下WndField.cpp文件 Y3 d( ^* Z. _/ p3 R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); m6 ^8 }4 I! w; u' V8 z9 h8 z
) ^, j3 S1 k/ z* n1 l$ |
struct sItem
- j) R: c' _$ X, C{0 ^/ ?3 d6 C1 z! E3 C+ P) V9 V
DWORD dwId;
6 y" H9 v( R$ i, x" sDWORD dwKind2;" P9 U; `. j, _0 U. f, P
DWORD dwItemId;
+ E5 C8 I4 y8 O5 @* F0 F% jBYTE nIndex;
5 o' U6 R/ p. e0 r$ p0 e4 ZsItem(){
; y' b! {" Y! E5 j! w dwId = dwKind2 = dwItemId = nIndex = 0;
5 {: X1 V) e, X" U: s ^* h) S& R2 K* M}; f$ y, k: W9 a) q
bool operator < (const sItem p2)
: f$ a7 V. l1 L/ [, \, z3 P{( N5 ~0 o; j8 c9 }" e$ |. C; {, b
if (dwKind2 == p2.dwKind2)
! Q7 a$ [+ H$ [! H) ? u( c {
6 h5 [ w% i4 {: I6 y. R; B6 _ return dwItemId < p2.dwItemId;
+ Y d: t2 \/ j( `, [( j- c: d1 b% p }else{; n' T: X2 L: Z) W4 p% ^" M
return dwKind2 < p2.dwKind2;; B) |% Q8 q, [: D5 [9 p
}
% ~8 [0 N6 Z$ H7 q. C}! U( x6 y. D" ]6 b) h
};
+ B2 ?- w7 o$ F. jclass CInventorySort. h4 ?0 C% l1 \4 |* q7 O' } |4 k
{; _) o. x o+ n# d, y' {
public:: }3 Z' ?/ ^+ k f4 h8 Z) v% N* G2 {
CInventorySort()
( {& X$ r. {9 z( k{8 X- z: O7 G2 D& c N% Z+ J! _
m_dwPos = 0;% o+ n8 S( \" K2 ~' ~
}: k. b2 F I. ~ Y! R1 N3 `! R
~CInventorySort(){}
3 S. o/ S8 A* v# c& H+ H4 Y |5 v$ iprivate:. N3 C2 m* e# P& Y M2 h. f
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: e9 k _0 c9 x
DWORD m_dwPos;6 \' M, f8 l, v) m i+ f: d
public:6 Q% _" N: Y1 ]/ `4 q- E. Q' g, }, U4 F
void Add(BYTE nIndex)
5 O" y" z3 X1 |3 D{
5 t0 u8 C! l; `+ @ if (m_dwPos >= MAX_INVENTORY)% X9 J6 A/ ?8 H5 D0 }
{
6 m) H- [ F, V; [) {9 C; j return;
% Y$ ^1 ]3 B3 q8 g }. g/ M3 Z, K1 |7 @
m_Item[m_dwPos].nIndex = nIndex;
& l6 V5 h+ |' T m_Item[m_dwPos].dwId = m_dwPos;$ C& D+ J4 }( q" n7 q! }; b
m_dwPos++;
! [! z' X% F5 {9 f* d$ T}
: [ D3 I8 i! ]: `" xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 K9 C( k* S2 m/ _4 V{
x: G0 S1 Z/ M O# f for (int i=0;i<MAX_INVENTORY;i++)+ O4 b/ W' u+ o8 v( K# ]2 h6 O S
{ _+ b8 j B- o$ s; d
if (m_Item.dwId == dwId)3 ~! |4 F: }# z$ |* d7 ~9 R; P" i
{; Y0 K9 Y) I5 M0 x9 w t6 n" R
return m_Item.nIndex;
7 U. z" z: x* c. D1 K, u! x7 K6 l }5 @+ s# S" z" g- p; s3 O" J
}: \+ W9 l) ~4 C8 d" ]& L
return 255;
% k4 z0 N, p! M. ]! W; ~}
" e* y: z* B! O$ i! cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 R* T5 ^9 q; V{
5 P! c, A6 K9 u. V BYTE nTmp = 0;7 a' [9 \' Z, n6 ]7 w& c
bool bDest = false,bSrc = false;/ M7 p! C7 Z; d3 H
for (int i=0;i<MAX_INVENTORY;i++); }8 y, H: D& v$ n
{
. h8 r4 r3 m" F; l" H; G M4 j if (dwSrcId == m_Item.dwId)) w9 m2 i) M: j f1 p- R
{6 Q) p- d% t0 G9 f$ r% \' l p, k
//id相等 则 改变对应的dest和src$ V; n) j! d, U9 w) c' X
nTmp = m_Item.nIndex;
1 l4 ]1 B& `9 t9 e8 t4 N8 b) g m_Item.nIndex = dest;+ [! o. m. y8 x, a1 a. l5 p) l1 N, z
}; G- h( f$ X# }& Y5 B- Q: F
}
0 g- w8 N4 [+ b" M, I: { //临时数据保存完毕,交换开始
& ]5 V9 V g0 @& j for (int i=0;i<MAX_INVENTORY;i++)3 S# O' F: Z" q) s' C
{# ]) ^9 X0 [* ?
if (dest == m_Item.nIndex)' t; Y+ f4 m( `) l7 R
{% q) V- W+ i; ^$ o4 c
//id相等 则 改变对应的dest和src
0 U( s$ U& K! z% r. @; H m_Item.nIndex = nTmp;
: Q) D8 w& w6 }; p6 ]1 H0 f }. B- p% _1 d8 {, U8 V5 ^- I
}( d' u" v' u9 {3 Q0 M+ D8 L$ o
}# X* _0 q8 f/ Q" e5 d" j; p
};
: u8 d0 t: B; ]! y8 N7 q-------------------------------------------------------------------------
) X; }4 e1 B9 q. C( t依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) G1 S5 J3 p, m6 x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
$ L/ f8 d2 C* A6 g' j紧靠其上添加:
. {& K; L4 E- qif( pWndBase == &m_wndMenu )& r) M. n( d1 [/ O! w! C
{
) ?" A% Y7 n! [. V9 k" w# c3 [ switch( nID )2 @, m! w2 q% e. ?
{7 ~: ]2 N2 v2 [, r s. O- _$ q
case 2:
. p. Y- B6 X- m6 w: ` {8 L! \' f$ {: Y" K8 u
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ v5 W; @% \! s4 e$ @9 f! q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# i+ C) W f3 d, o
{
- {- W0 f! Y4 `# d5 z( H$ N* x break;$ p' C5 O. c% K
}
5 M# D- r7 X, x1 \+ }# o for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ F7 }1 ?/ Q A4 ^
{
: o/ c, l- ?9 K! s' l/ p2 L, P8 J+ W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 f7 @( r2 f7 S3 z
if( !pItemElem )
$ @4 z' a o8 l( o U continue;
: w: P1 ^' O" l3 Z6 { if(pItemElem->GetExtra() > 0)
+ r$ h$ Y# @7 O0 N# O2 f continue;: b- Z' y& e$ D+ H; ?
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# Z. b9 ^3 f4 K3 x continue;; `( ?. Y& z9 G* `
if( g_pPlayer->IsUsing( pItemElem ) )1 W S: r; m- B+ j
continue;
3 v7 S, J. k. a% T" W8 J5 _ if( pItemElem->IsUndestructable() == TRUE )7 u7 C) g$ V0 Y" u! M6 n2 @: l1 x
{3 B3 U; i- I8 d$ |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 Y7 b* \$ V+ u" N continue;8 C5 X: |. P5 [" w8 b1 J
}
" O- F! V7 z/ ]; s8 w1 S g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; l, v. F3 |/ d" P }
0 a) } K8 f! H* J J3 U5 I5 I break;8 \7 h1 N1 b8 Q4 i4 Z2 ]& b
}& R S" Y. s: B: E0 y! |
case 1:
6 i, j. Y4 \7 l {+ T, e T/ |/ z: ^
//整理背包
3 x+ \0 ?8 j' i //////////////////////////////////////////////////////////////////////////
5 t4 f0 E2 \. Y+ K( c( q, W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, G: ^) g& } V' k, e //////////////////////////////////////////////////////////////////////////
- \4 X, G& r3 h( d/ n2 M //////////////////////////////////////////////////////////////////////////
, R! W1 T8 ~5 ? CInventorySort* pInvSort = new CInventorySort;( g/ [2 c6 ^' q! R4 q
vector <sItem> vItem;
( [$ [" Z: w' x9 x vItem.resize(MAX_INVENTORY);//初始化大小
+ p8 ?. N6 t6 U/ s8 w) l //////////////////////////////////////////////////////////////////////////5 Z3 Q$ u, e- I1 c9 m3 [ [
//填充数据
# q& d+ @/ h1 {" y2 [- J for (int i=0;i<MAX_INVENTORY;i++)7 _# h3 y) ]8 t- a
{
) r8 p2 d* D( G8 h2 f( U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. y& I; o A% p, I6 z3 N* M: d4 { if (!pItemElem)8 T8 Q' }9 m! t5 U# K
{0 |* g4 `" {$ r" `1 G C
vItem.dwKind2 = 0xffffffff;
7 x7 w4 { `, L! f J: p) V vItem.dwItemId = 0xffffffff;
9 T+ |! G6 o# f) j2 o5 _ vItem.nIndex = i;5 i8 c2 }: T- H- L( I
}else {/ e9 h) w; H- Q9 ?! S
ItemProp* pProp = pItemElem->GetProp();
1 G7 _; k7 ~: D7 H7 Q vItem.dwKind2 = pProp->dwItemKind2;3 f, d1 j+ e- h) {9 h
vItem.dwItemId = pItemElem->m_dwItemId;& U. I3 j5 L) C, N7 o
vItem.nIndex = i;
% \; y, V$ O d' z }
+ e" o- w) Y o, A! L //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. V$ S/ I3 B, J7 m* Y. Z; ~
}9 V& U3 s# v2 X3 z, a+ h7 [) T% R
//////////////////////////////////////////////////////////////////////////& \- ]" e6 K3 w2 w6 p
sort(vItem.begin(),vItem.end());//排序6 o) U6 Z" J5 `4 p0 n
//////////////////////////////////////////////////////////////////////////8 \% ~) t7 U6 K8 q. q
//交换 g: ^9 n u4 r5 R6 |4 F' h
for (size_t i=0;i<vItem.size();i++) d" f" F0 ?+ I# K6 ]4 l5 @
{, E- [$ o5 y% G# e
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! K6 R5 X# Y4 T8 z
pInvSort->Add(vItem.nIndex);* @9 S7 ]' i! I/ U. A2 M1 L {6 r+ x
}+ t3 B, \' M) k+ s% }6 O- R# F
BYTE nDestPos = 0;! p' g* e4 s3 {3 L' q
for (int i=0;i<MAX_INVENTORY;i++)0 |* ]. D* s+ x* ]. D- S9 r
{& K- S8 G8 Z) Q2 p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 J' R$ P- ]% T0 N' n) } if (pItemElem)
4 K- N1 d, f2 W: r {
7 j1 X- c" ~# b0 l S/ g- F2 j if (IsUsingItem(pItemElem))5 l3 [# s; e- t% ?0 G) G
{; M+ n* w/ S; T1 @* C8 L
//这个位置无法放
) z! l3 { ~) u' ]/ k5 L nDestPos++;
* b$ ^2 ], |7 q l! W: Z) P }
7 S) G* L& b6 p0 I& I }
# L4 G' Z. n" k9 V# d1 s& `, M5 c BYTE nSrc = pInvSort->GetItemSrc(i);4 m/ S% y+ f+ q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 ]4 B% q: c8 ?* i- y \1 A if (pItemElem). z- q1 L( Z1 g3 V% k
{
. n. t y: A) p7 O5 P% `. ~6 ] if (IsUsingItem(pItemElem))
$ d% ?9 D' z( Z% ]$ j {0 H* H# h" J& o: j$ E9 B
//这个道具无法移动,跳过4 V, r$ T. w$ u* z2 h7 f; y
continue;+ t1 Z7 |$ h* p! b5 L h o
} h( h- r7 q! j3 b, V9 l$ x7 e
}else{* y' {# c& D0 ~8 h: t3 W, b
//空位置 不用动
1 {7 s" E- S# i4 W continue;5 Y2 o/ O" H4 a9 e8 o
}
4 _5 j; z7 L. n+ o) Z, s( a //////////////////////////////////////////////////////////////////////////' S4 K8 e# e$ ~
//开始移动
2 c. m+ X0 W2 Q$ Y) f1 I& ` if (nSrc == nDestPos)% g' i& l1 U% {2 }" u; b8 p8 g( F
{$ M* C& k! N0 z) a2 f
//原地不动
$ b( h3 Q. g& W i# o nDestPos++;* @5 H7 M+ g" ?3 |9 V
continue;9 i% q2 L$ R5 F9 d* G, U; \
}
. b6 J. G1 y" h/ ?! w( [6 p% e1 U pInvSort->MoveItem(i,nDestPos);
" e b# \. W8 M8 w g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 x, d6 O3 G1 Q Sleep(5);! f) ]3 X8 Q9 {$ e7 e4 I5 Y
//Error("移动 - %d->%d",nSrc,nDestPos);
7 h2 G* U+ D* l/ W nDestPos++;# K+ P! l5 K+ }% Y I t
}( h! h, R" i% e& c7 v! q
//取第一个元素的信息/ ~% o. {4 t" T1 k5 e
/*
+ I% E0 |+ T4 o( z; D if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
5 A. G* Y, S% R6 O' @! [$ V1 ] {
( \; d- h( E% S+ O2 G" v2 _ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 H# D6 Q% F# a6 o$ l g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: m$ w8 ? f: b4 s* N
}5 R( ]% H, ~& L9 k3 Z
*/
& T/ y; c2 t3 |" J5 o //////////////////////////////////////////////////////////////////////////$ `# [0 ~# a( F2 Y( \+ o$ J
break;# t" \- n% C$ I& l
}
. W) F. T Y. R8 V5 S, M. Y }
. h3 }* J0 f8 u" q& F' e}7 d' @, b& o2 n( R* e3 A
m_wndMenu.SetVisible(FALSE);* @1 ?) q; m7 u' U2 s& n
; k; k7 U+ v7 V6 W; z: `+ X4 }9 y7 P--------------------------------------------------------------------------------------------------------
7 V: I. G1 M+ u$ Y" }6 {搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' X9 P* _2 J6 ~. e( n{3 U+ ^4 H! I- R% n# T# c Y; G
BaseMouseCursor();
% Y+ T/ a7 q( v: n% l* O9 o. B& {}, R: R8 x. y% n) {/ m
在其下添加:
1 M, O* D) _1 k0 d5 x3 F7 G, i% Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 q( ]5 V. @4 Y0 Q7 t& O" F{
# m. U; B* k2 h6 z R2 wm_wndMenu.DeleteAllMenu();
1 ] o$ O. j; wm_wndMenu.CreateMenu(this);
) p8 p: B! H- `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! P5 u7 z e+ v4 V6 |
H1 X) y2 v: R8 x- w; |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" Z5 v# H/ h$ M4 G/ ?( g
{1 X9 t$ W6 o% f" r+ F' A. T
//P以上级别才可以删除所有道具( ^2 u4 p" G, D E D# D7 t8 |8 q9 n" ?
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 y5 f$ [0 Q! Y8 U& H; w}, n) R1 j! i- U0 T% f
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* ]. i8 q, T4 j& n9 [" p& y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 d( k) h8 t! G7 Q
m_wndMenu.SetFocus();
! A- ]( z8 L& a}
. d9 L( F5 a# p% k------------------------------------------------------------------------------------------------------------# U7 ~- F2 G3 \2 F( c1 \
*************************7 R+ `2 b! n' S4 c% i8 G
WndField.h文件
) H- A. ~# f: f*************************
! [& |- }# B1 [; d& N1 y4 {$ x搜索:BOOL m_bReport;
+ k" b( o' a8 h2 k! k3 [, z其后添加:) f1 B+ T) N- e2 j1 d+ ] u, Y
CWndMenu m_wndMenu;
' V8 N& t5 ?1 T- Y# y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 r# ^% D4 Q5 S! B: h# V其后添加:
5 v$ d0 Y$ D2 a3 c% X+ N% J/ A' qvirtual void OnRButtonUp(UINT nFlags, CPoint point);. q- @* |; U ^/ \: `4 }$ Z
5 J6 k' V* U4 \8 ]- i/ h6 N3 N
# z8 n9 ~5 S8 U6 M! { |
|