|
|
源文件中_Interface文件夹下WndField.cpp文件0 `( B+ ^+ d/ H' K/ i8 E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 z! V" n6 E+ R, p9 Z& X3 I) A, u5 O& [# c
struct sItem
5 I% R2 f! o' U6 ~; u{4 z6 @8 p( \) w! M$ \
DWORD dwId;
/ U& A) m6 K3 b! ]DWORD dwKind2;- t/ C' `; G) r; o
DWORD dwItemId;* E0 h4 c1 d D& S4 [7 m3 b; m2 q! l
BYTE nIndex;' F5 e l {! X! a( Z: x0 o
sItem(){- A, W2 L9 E: q( n2 }
dwId = dwKind2 = dwItemId = nIndex = 0;
* K% h3 Y# _6 d2 q* d}) W, T2 k1 \) H/ i6 s/ [' A
bool operator < (const sItem p2)
& h9 G d1 k/ e{
1 A- ^ |6 @$ l% z/ ?6 H Z0 A/ J if (dwKind2 == p2.dwKind2)0 g. h2 q) d7 |; u
{
# W8 M" {" |5 \# H. w& a! b return dwItemId < p2.dwItemId;- e) {+ J- C* j8 s0 u4 E5 N% u
}else{2 [/ e- T$ e r n
return dwKind2 < p2.dwKind2;
6 [7 U) k2 i; p, y/ Y2 d }) M" i- ?0 A% |# T
}
/ {. y5 l) l2 @0 x$ b5 W7 l& j/ ]* B};
0 v% Q- k6 ~# K# s1 r: b- [class CInventorySort
* U7 K' t7 b3 H{7 V. h- ?* {9 Z% l
public:7 p. v, k- ?. f1 ^# E
CInventorySort()
# a6 W+ I" I. A{
/ O3 x/ K$ L4 m m_dwPos = 0;
9 y# l. l( p" s2 i) o" C}/ ^, p9 |0 o. B5 ~
~CInventorySort(){}% n6 U1 \ m* S: r8 q
private:. @- Q; Q$ f3 |6 W( Q: a+ n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 y8 j: {7 ~! q6 g* p RDWORD m_dwPos;2 s2 g% g W: H W; G
public:
& r2 M( |- K, z( jvoid Add(BYTE nIndex)/ o2 Y: R6 g$ x) ], K$ ]
{% u' ] H) C, P8 O. a$ K
if (m_dwPos >= MAX_INVENTORY)6 R: {+ f5 _2 Y3 Z) D5 u$ J
{# G" x& {& R$ v0 l
return;
, g$ K$ f: P! E, d }+ B% W% k- F, E4 H s
m_Item[m_dwPos].nIndex = nIndex;
+ G8 V3 |- S: u% D6 C& h m_Item[m_dwPos].dwId = m_dwPos;, { Z- x3 A" d
m_dwPos++;: Q6 P: h; i+ f( ^" d- M
}
% j( x# ]/ {0 g) gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: c; C& E* P+ T8 F+ t7 j{2 P' t" G- u- e/ w( w. Y8 C5 s5 T
for (int i=0;i<MAX_INVENTORY;i++)
. C6 s1 O& g% k8 q7 b4 Q5 H {& m8 H! f' T0 f) N9 I+ z2 _
if (m_Item.dwId == dwId)
" B' \' f. t- Y( } {
- n L/ I/ w" S8 ^% W return m_Item.nIndex;
$ K& C' f l8 D: ~$ o$ {0 \9 j }1 l% u1 \/ ?9 T M
}
6 z3 W9 |5 j, V% G8 I n return 255;
; V5 R: z* d6 ~}9 I7 S" [( E- Q8 E7 ]
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 _: B$ Z1 J& D{
. t6 X4 w0 t4 U5 G: D1 t8 D BYTE nTmp = 0;- M: p; Z3 ]8 z/ X
bool bDest = false,bSrc = false;
0 _! ^. c3 {# [3 r0 d) } for (int i=0;i<MAX_INVENTORY;i++)
7 t$ ~9 s7 g/ b* [2 D: S# ~+ R {
4 F* f, W G1 p/ x/ J if (dwSrcId == m_Item.dwId)
' {) T2 f& S- M0 W( J I {
! Z$ z( a# J6 Q, B //id相等 则 改变对应的dest和src: H; i6 p- E/ L0 e
nTmp = m_Item.nIndex;: W4 i" M V$ q b7 {6 t
m_Item.nIndex = dest;
3 ~: M' X) S" @ }* V" N/ N+ }( Y
}
3 ~6 k' ^4 n& w0 r0 ~ //临时数据保存完毕,交换开始
5 {& ^; S! M6 `2 g for (int i=0;i<MAX_INVENTORY;i++)
8 }) C7 Y8 Z; G {( N* a7 o3 a: k! O+ M* H
if (dest == m_Item.nIndex)/ U4 z9 \% E2 W. D9 z) @
{" n9 i: n1 J9 y& ]" `; [$ y( L
//id相等 则 改变对应的dest和src( ], E7 h8 M+ h2 [8 E! L2 y
m_Item.nIndex = nTmp;2 _/ |$ M) u) @( ]' ~
}) L% h# {, E0 Z, i# w7 ]" c
}
$ w7 C4 o1 j2 D5 L9 C' l}
. j2 ^" Z( N2 d0 G# R};
4 W+ v; j; i) v2 M-------------------------------------------------------------------------1 j2 ~4 Z, y% G' c1 j6 F
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 I6 i8 l" z/ F, z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 a1 M) h7 r) j4 I8 Z紧靠其上添加:( Z0 Y( G5 M" O* t
if( pWndBase == &m_wndMenu )
, {2 S/ \5 e# ]' |{6 M# j% d/ |" L) U
switch( nID )
. g; p7 v9 _4 H4 M2 ~2 V {
/ \/ j* e7 h% m case 2:7 a; F/ i h5 B. P* F, ^
{
. q5 K: i/ p# ~$ c3 _0 b //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# W5 v$ S; O0 f# @( J8 I7 x2 ?
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 t2 X; t) l+ J' i0 N; D {
1 H& f0 G! [5 k. E0 V; k" \$ t break;
# x+ s; E: Z2 Y+ S }
0 t; w& t0 i2 }* e" X6 ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& Y; S6 B% A# ]* B7 h
{ M- p& s; e q- c7 t/ p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
N7 G. y6 k1 j/ f3 {; S if( !pItemElem )( G4 ~; \% u3 D+ p' b/ r! b
continue;
/ _7 k5 `9 g+ U4 G) D* L if(pItemElem->GetExtra() > 0)& N: v, A) O0 ^1 P! S$ Y
continue;6 h8 G. {- O; s) W$ f& g# ` A; T
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 I$ J* y2 L. Q R! Q: _# I
continue;
1 R: E2 T0 y h8 o if( g_pPlayer->IsUsing( pItemElem ) )2 e" y. {9 z& p# k$ e
continue;
' p5 L; [9 l; U. ] if( pItemElem->IsUndestructable() == TRUE )
- N2 z7 q8 e$ o, d4 C5 t {
- \2 M' R+ l1 t. ?% i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 y9 K. @# o" l7 V+ B" J
continue;
7 \ O9 I8 k7 i }* D: a/ u7 Y& n% n% v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ U, j1 J; e/ L4 H6 f }
) C6 g5 ]: K g; V* ~ break;
1 d. r% V3 O+ t$ U3 _ }
% U5 g% N) u! i% d: E case 1:' k$ o' t* f0 @) d$ e, F
{+ D8 n0 L7 H; H# X' |4 `
//整理背包
) H3 H! q) X3 {% u /////////////////////////////////////////////////////////////////////////// n5 S- n5 n4 ^& Z4 y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' M4 {$ c7 Y) D! X. y$ l* B //////////////////////////////////////////////////////////////////////////. |; O$ }) m; G5 A) Q% f' K
//////////////////////////////////////////////////////////////////////////8 C- c' \# T/ V* f5 \
CInventorySort* pInvSort = new CInventorySort;" j' p" Z8 Y- z$ p
vector <sItem> vItem;
1 l* ] a5 n' X& N+ p* c4 }2 H vItem.resize(MAX_INVENTORY);//初始化大小/ p8 G. \! w/ V
//////////////////////////////////////////////////////////////////////////
* s! G! o/ f" M4 g; N" e. u$ N //填充数据& ?3 b- h; h4 p( x+ G) s# m
for (int i=0;i<MAX_INVENTORY;i++)" L! o) S( w5 b \
{7 h+ l( F1 t$ c' O, I3 g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% W+ m6 L( B) D; @ if (!pItemElem)* K7 R! Y- @5 b7 a
{" j( D6 r! q5 y& P4 k- E
vItem.dwKind2 = 0xffffffff;
$ r: J v6 @. |9 R: L7 P+ ?# X) y vItem.dwItemId = 0xffffffff;
& J% i9 c5 O* a vItem.nIndex = i;
$ i- K+ ~/ |. ~% E }else {
( d; d& ~1 B: F8 E! H, i: ] ItemProp* pProp = pItemElem->GetProp();5 W! X! G2 o8 q2 b; Q
vItem.dwKind2 = pProp->dwItemKind2;
6 {7 m. j6 @. P- ?7 ^ vItem.dwItemId = pItemElem->m_dwItemId;
9 E. [4 A+ v7 ?2 E/ W vItem.nIndex = i;$ I3 Y7 N8 w. D! A/ j
}( _/ _! J9 O, B% Y0 Z" R- {. m1 R6 O) ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 @3 P8 y9 R q. O( Y/ S } g, ?/ [* R/ E3 J
//////////////////////////////////////////////////////////////////////////7 u! f# n/ Q: z( R
sort(vItem.begin(),vItem.end());//排序
& u; Z9 y: I% s! ^3 C) U4 r9 f //////////////////////////////////////////////////////////////////////////
% f( z! R+ Y5 f //交换/ @) ]+ m1 B! B
for (size_t i=0;i<vItem.size();i++)
v# l4 x* ~2 o$ A* w# a* o# { {
" l O) H. M; I2 P0 r //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( j& H J2 F& u7 y6 u/ R pInvSort->Add(vItem.nIndex);# ~9 d- b6 H0 [9 A+ P
}" k! N3 ^, T& p9 Z
BYTE nDestPos = 0;/ Y0 {- N1 j! p" |
for (int i=0;i<MAX_INVENTORY;i++)1 q) [" @1 ~! N1 [1 r/ ?5 \ D. c
{2 _% B/ {7 {/ E2 ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% z3 d5 d2 ~; o2 Q$ I
if (pItemElem)3 [2 l7 m' w) j: y* X
{
- S5 B( P9 Q. e& H [( y" n if (IsUsingItem(pItemElem))) x. R: p. h* _" [) C% {
{
* k0 ?! C" I$ y6 g //这个位置无法放
' u) U& i* s& d0 w" ^ nDestPos++;
9 U' C, g% G1 D8 g" r5 T2 t( v }
$ W8 }; Y9 u. \% D& g$ h: V% a& J1 U8 r }2 G+ S9 u5 k1 [2 N
BYTE nSrc = pInvSort->GetItemSrc(i);, `: I! D- ?1 t, ~7 y" z/ f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 N/ v" ?+ \" J if (pItemElem)
" n U: _3 I6 Y( R; V7 A3 `7 G3 ` {
/ N7 V+ k5 L+ ~/ j; D" z/ j7 S if (IsUsingItem(pItemElem))" n% |- [5 ~* \7 h3 Y) z
{! n) ?, q' I6 \8 i3 R, m
//这个道具无法移动,跳过
0 V2 U: V1 ^" z" |& K/ { continue;6 j- N/ O) c6 n" K1 e; H" o/ F7 A
}; d `' V3 e/ {8 J8 Y: e& _
}else{
1 E: d# V/ q5 _! E //空位置 不用动 `/ v N% f2 n
continue;
& T6 `) i: w+ W6 D1 D }
, t5 k; B( _ Y8 N4 i# a% d //////////////////////////////////////////////////////////////////////////
& l7 ^4 l' a% I5 ? //开始移动# ~2 G& h$ I% C8 m2 U6 `9 c
if (nSrc == nDestPos)
2 i9 _; e& s" g, h {# C+ Z# b. D9 p. o8 W9 Y
//原地不动: V% }4 s/ V' c4 m C1 [9 h
nDestPos++;) X+ F7 B/ j8 `* C
continue;
& o7 |# g2 M$ x' s A- T8 A$ F& y }" l2 ^: z' v5 u; R d0 C
pInvSort->MoveItem(i,nDestPos);
# g' ?. N. d: Z1 \1 l/ J( T; ~. P0 P g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ u: t. \; U3 s* w0 F4 `) ^
Sleep(5);
# S. k3 s3 X5 ] //Error("移动 - %d->%d",nSrc,nDestPos); V G+ ^3 `4 R- x- t
nDestPos++;+ s8 g& a# _: N( g& Z9 h
}8 R7 [5 K! H8 {7 S0 a
//取第一个元素的信息: Q& Y. c8 w* y- l1 Z
/*) B" K+ W/ h* }8 x! m& A1 {
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( K, u5 z2 z7 V9 }
{
8 G# B* Q% Y. v N" B( R Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( ^9 |, P, K% X9 Z" R" }+ S! v g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# z* C8 R0 S; W: m3 I0 b$ V" N
}" v% V; S% v; T' d) M7 q
*/* S6 n Q% Z, z
//////////////////////////////////////////////////////////////////////////* g# M" U1 B2 f9 v- U& h
break;
f+ @5 B- A( s) P- Y }0 F+ ~( Y; L3 s# A) p6 E
}
4 q5 d: K u. z! x; W/ u) D}! R% L% U9 C" h
m_wndMenu.SetVisible(FALSE);
" |, F" }. `0 X$ L. |* M {. x5 d8 K! d0 p
--------------------------------------------------------------------------------------------------------
/ |- k( O- _. {/ S搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), }$ T+ W1 b$ f5 a3 P1 N
{1 o" _+ i6 G5 J+ o* W7 `- v% N) A
BaseMouseCursor();
& J: u1 X( k; Z* B' ~}
% ]0 U, Z9 z, d% t5 h& ~在其下添加:# x" s7 e+ ]( z! g& o$ \$ F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 N: z6 N: v |3 O: n
{
9 A2 I2 z U& j: r8 o3 v( Lm_wndMenu.DeleteAllMenu();) A d& n# S4 Q# [
m_wndMenu.CreateMenu(this);
) o1 G: G$ }* l- j# xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* @0 l% c2 f# a, C( h; {6 T5 ~/ @+ J* z- Y+ U- t3 o: H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- Q% l0 n$ z, R6 K2 w0 \+ W% S
{( L1 @4 b s D/ C, V2 j7 e
//P以上级别才可以删除所有道具
$ S/ ~1 n8 ]% @0 m- J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( r. @. y* @, {
}
5 ~- W! g0 r4 I4 Dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: m+ v6 t, f8 f! P# u) n8 e3 B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: h1 w% g9 i, g1 {1 ~1 R& om_wndMenu.SetFocus();# C2 [# @2 ~5 b# c/ G% W4 v# W
}
2 W5 r$ R5 d! i# X------------------------------------------------------------------------------------------------------------
! {: X8 m! m4 L: n2 F2 i*************************% M+ U: r" J/ V, d+ y
WndField.h文件
' s8 B1 N" B1 T* z, P* E' v/ X* ?*************************
' s/ v# S- g/ z搜索:BOOL m_bReport;
$ U' w7 M x0 N& u9 Y1 ?+ e: O其后添加:6 ?: o7 X& Y1 B
CWndMenu m_wndMenu;
2 i* g0 R$ l( D; C3 k0 y$ h0 X' h搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 U7 z' q/ \" J0 }6 `其后添加:( S% I& h- Z: \* z, k1 r
virtual void OnRButtonUp(UINT nFlags, CPoint point);
! \0 N9 }7 d, J
6 v+ e% R2 o9 y- E6 I7 j
: m3 a* ~. H) U7 g6 ~* G0 S |
|