|
|
源文件中_Interface文件夹下WndField.cpp文件
; Q; s$ i' F1 ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
x6 C5 \3 r- Z* O3 }# @( d
* R F& \3 R" j8 J1 N' _. G# e! ^struct sItem
/ `) P l8 b6 b* K5 }$ G{6 V r# Y+ I$ W) v
DWORD dwId;
7 y# M; m7 g. v* n0 K: qDWORD dwKind2;. \, T# i* Q& D6 P m8 W8 \
DWORD dwItemId;
3 }8 H9 m; G( u. r- eBYTE nIndex;' e1 b. v4 @6 E: ]1 ]0 b
sItem(){
8 t! A& q9 l2 h8 I2 L dwId = dwKind2 = dwItemId = nIndex = 0;
1 N3 J9 b8 C! Z6 T}6 J1 r; ^* D- H- t8 H0 e$ h3 l
bool operator < (const sItem p2)
7 T4 h+ S5 }+ c{
' |# k# X. P, q6 k6 f1 N if (dwKind2 == p2.dwKind2)
4 Y; f% Z" \" f. O: r {
4 X4 |$ J3 ?2 s1 H* F9 I$ Y return dwItemId < p2.dwItemId;
9 n8 g3 C0 S4 H& s }else{ H, ?, ?4 {- L2 C' w3 y
return dwKind2 < p2.dwKind2;
9 b6 b/ f0 T% P( c8 S, Y; A& _ }6 r& |" u. m4 h! @, S5 ~9 _2 Y6 ^5 a
}( ]) @7 o) V2 r: N) T
};3 |. u+ E& i6 i; r
class CInventorySort: Z4 x2 @+ n" e' V* m t
{; g" l" ~- s5 n
public:# I E* M. L& S- i9 G* U/ ?
CInventorySort()) G3 c* v0 Z& g. _- I; ?3 C; ^
{
& v+ n% r- Z8 t) V$ L4 \ m_dwPos = 0;
& f. g C) r3 y& e1 M2 ?0 b}# v q7 t2 f; A$ b1 h7 ?
~CInventorySort(){}1 f3 _0 j3 Y7 v) o& K C- v
private:
# B" K$ ]: {2 j5 LsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! O7 v, \8 M6 _ \3 a, ?# \7 ?
DWORD m_dwPos;7 H3 J @, k) U' ~9 t( k
public:
3 E* }. [4 H% O5 Z+ c7 X. `7 fvoid Add(BYTE nIndex)
* [ g+ A+ Q% c{
8 L% L) W# W, E% K7 X$ Q3 z if (m_dwPos >= MAX_INVENTORY)
% Z, _" d% j# _' z {. Z- L$ l$ Q. \* U5 M1 F
return;
4 k* w" T% U |+ Y: M( | }
, r6 c% v4 K/ f3 k m_Item[m_dwPos].nIndex = nIndex;
2 T. o& E! _# t8 X t6 u m_Item[m_dwPos].dwId = m_dwPos;
; y1 ~. g- z u; K m_dwPos++;
$ m+ q7 i1 u, T" D}. T( y1 v$ Y1 ~ q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 x3 h7 V+ l' M! X* \
{
" p# c9 s& J( D4 g, t% V for (int i=0;i<MAX_INVENTORY;i++)* p( z$ w3 |+ p& U8 s
{
8 ~' a3 C1 w' K9 Q g! i if (m_Item.dwId == dwId)$ g- D" |- n! }2 I' i% z
{
8 T2 D' }7 a4 g+ a+ Z4 B8 z return m_Item.nIndex;. G t8 A5 Y; p2 o, |
}1 `" v+ j% A! R6 q; b3 z
}& O& q, d# }) F# O
return 255;
7 d& D5 A+ E( b6 z' Y$ E9 z}
- b1 B8 r5 ] H& {void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& x' A8 W" U9 `4 l. k3 k: o{
! y9 q4 a/ N7 I- n% b BYTE nTmp = 0;! d9 ^4 x' f2 d. G3 U" q
bool bDest = false,bSrc = false;. y1 u; f8 U1 ~) }# w
for (int i=0;i<MAX_INVENTORY;i++)' w, B1 U' E" O) J# i$ G6 h2 `
{
+ s$ o i# |3 M* |' q if (dwSrcId == m_Item.dwId)
1 p2 F* K& @! ?9 v; z; Z( v' Y9 v {! Y' J, W4 T. B+ C2 V4 b- l' B
//id相等 则 改变对应的dest和src! {9 J. g2 ~" @; U$ R
nTmp = m_Item.nIndex;' P) e5 Z) \5 O( A; T) C) z2 z
m_Item.nIndex = dest;
9 E# h. Q0 Z- D, B, X3 D }6 ~) u5 v# ?0 K2 _1 F' d
}
]: _. r) e3 T8 ^! o) H9 Q //临时数据保存完毕,交换开始% E+ E% \4 b/ w% i7 H
for (int i=0;i<MAX_INVENTORY;i++)7 n; R9 J$ n' |; Y7 G& g
{6 g* N4 C/ e& r9 V
if (dest == m_Item.nIndex)
; V4 [! K( ~7 s" r8 i0 Y {) l, W$ t% B: D% F
//id相等 则 改变对应的dest和src/ \& T$ u% _1 x! ~
m_Item.nIndex = nTmp;7 R: n. B* J" h& [6 S* {+ C
} O5 P& k) s+ |+ k4 J
}
. w* \+ o4 X, Z$ t0 L; t}
0 [" H9 `( z$ j};% A; u8 A% p3 B+ s% y! g n6 Z
-------------------------------------------------------------------------
; O* e! d2 b) J: m! r依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 y* i% W( z/ e3 J$ g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); R$ z4 |& k$ y$ r. Y) ], ?4 f, L
紧靠其上添加:% q3 Z, h) V: ~6 [
if( pWndBase == &m_wndMenu ). Y0 l: ^) p( _$ Q% x
{
( O3 C/ P- m: W5 z switch( nID )- O2 i7 P) M* l2 r
{' m/ l' [5 F9 ? s/ {0 x) j9 T
case 2:/ L( S, D9 @3 Y4 A: ~- e; H# ?
{5 M7 n! G s9 f* F& Z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* E* p E) g8 m2 h: ^. q# K
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ e, Z0 G! a+ a6 q {/ A8 `+ E K9 `4 J
break;: d. I" I1 z8 Q w7 X. w3 J8 t
}* h, T' b0 E) G! d) J
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! c& D3 Q7 u! J {6 ?7 i: S2 ` G% O/ p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* q/ E9 S6 ?1 F% }/ n% F3 A if( !pItemElem )# K0 ~! O, {5 |. D4 r
continue;: x3 F8 K/ c: p- u2 Y) q" A
if(pItemElem->GetExtra() > 0)
g. z# G. T, ?: D; C continue;$ L: Y1 A" w7 k- h. G, z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) Z4 q4 E- [3 \1 ?. n5 D7 i1 r continue;" ^3 i# C5 ^9 Z4 X6 Q
if( g_pPlayer->IsUsing( pItemElem ) )
7 x* s+ E2 c! C continue;. q4 t. ]+ I, X9 N
if( pItemElem->IsUndestructable() == TRUE )
3 y8 V& E! l+ W* q {
* W/ w" F" J- C& y" } g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: a& X+ [% y5 b: l, X6 F( U. s- L
continue;' e9 j+ _1 ?: G7 c4 |
}6 t& J2 o% k3 m; m$ b
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* Z, ~6 o- g# f( O }
* U8 t0 d, o5 y! i" ~8 E! u break;
5 ~, A: ?0 @2 q! R& \) u1 l }5 X4 b0 V; V& ?1 g+ n( Z8 j3 [6 ~
case 1:% Q3 M4 D# U9 E, ?. U+ x
{4 V9 m" ]5 h/ v6 m, G
//整理背包
: H0 D5 G) _, S/ G' V3 [ //////////////////////////////////////////////////////////////////////////
& @; a/ g0 w0 u1 ?2 s5 y3 \" I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 N- D! x) A9 c //////////////////////////////////////////////////////////////////////////
+ _3 ^1 o ?" C7 T4 T0 R) D/ J //////////////////////////////////////////////////////////////////////////" E5 c2 V8 _3 @( h& F" ?# B; T
CInventorySort* pInvSort = new CInventorySort;% ]( M: q, K, \3 t
vector <sItem> vItem;) M5 Z# U* [6 a9 y2 |' O
vItem.resize(MAX_INVENTORY);//初始化大小
( |) ?, d, O; u: G8 A! K) h //////////////////////////////////////////////////////////////////////////
8 m1 p# Q- y2 q/ E9 z; v //填充数据
$ k4 }% M! s# L0 t! U* [' O, d for (int i=0;i<MAX_INVENTORY;i++)
9 f4 @. U& M3 c {5 R" K- k; J2 }, f! q$ J9 k7 P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: D9 s8 u/ U- S! ^: ^% S; [) u if (!pItemElem)
5 P3 [- s9 A4 T' F8 }' Y" {& [2 ]4 l {) z. O" u( H4 L8 X f3 Y; y
vItem.dwKind2 = 0xffffffff;; N8 L: W7 d) I4 L$ U0 O
vItem.dwItemId = 0xffffffff;. b# K) i7 U/ p. l
vItem.nIndex = i;
4 q' L: N. l; \% ^6 P }else {# a& \7 B3 @2 L; ^' a) ]/ W
ItemProp* pProp = pItemElem->GetProp();
! f% `& {" g5 N vItem.dwKind2 = pProp->dwItemKind2;( c' g) V% `, z7 z
vItem.dwItemId = pItemElem->m_dwItemId;
) P% j' G* @5 E5 S0 \ vItem.nIndex = i;
3 u+ h; P1 ~$ ?# {% Z$ l7 O( q, l }
8 b' Y/ i$ A L3 Z; _8 o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. [$ g8 K( N: ?6 p/ Z# @" O( J
}$ }) I! T2 q3 \; k3 J* q
//////////////////////////////////////////////////////////////////////////
, Z1 e, `$ s6 K7 E0 P sort(vItem.begin(),vItem.end());//排序& r- Y4 X' {2 b9 `4 _: y, o- I
//////////////////////////////////////////////////////////////////////////
& O8 {! k3 z; h //交换
. |, F% h8 X" G* w2 W for (size_t i=0;i<vItem.size();i++)
4 d2 ~3 i- B$ X {
$ ]& E) [9 s4 y6 A3 f //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; `: l9 g: w6 m0 e/ P! Q pInvSort->Add(vItem.nIndex);
3 E& l" B+ ^: d4 r }) ?+ T* i4 B- d8 ?# {7 N, ~
BYTE nDestPos = 0;0 r- d4 p5 a) g8 E( T
for (int i=0;i<MAX_INVENTORY;i++)( M+ I, W8 r% ?7 F! T
{* {2 f6 m/ O+ T3 q0 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' [* K- A! a5 Z: H7 t6 P# W if (pItemElem)* d; t$ ?+ H$ k, Z! w
{. ]0 o2 V* j( S+ r# ^" M3 f, C
if (IsUsingItem(pItemElem))5 F) U2 _3 y- w( o! W3 m6 N* ~
{
; Z/ O( |( @2 e9 p* S //这个位置无法放
2 t% g6 O2 J* l" o nDestPos++;
, }6 j! V- F8 r' N }
9 W* b4 F! G. m" J* x" X6 l }
# d# C: ], ^0 q+ N6 t BYTE nSrc = pInvSort->GetItemSrc(i);
7 K1 `3 \5 t' l" T pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- p9 E! H3 y+ B9 f3 S5 w
if (pItemElem)
& K2 S2 E, X! ] ` {: x9 N8 c; g; `: F$ D: c
if (IsUsingItem(pItemElem)). l+ r& z5 Q, E' o6 a
{
: I2 \) p; G s- b& A //这个道具无法移动,跳过5 F9 |' C% Y" D: E
continue;
* J+ ~. K Q% g+ l6 x* V7 }* Q }
' a: j4 e/ u9 d% b }else{0 ~1 Q* I& f) l0 E
//空位置 不用动
: T5 p7 h- Z/ P9 ? continue;6 d! z: r: `. z8 ^1 S9 h
}
2 \# A7 k3 Y* o. g% x/ } //////////////////////////////////////////////////////////////////////////# W$ H/ @9 ]& T
//开始移动 N7 A4 a* f6 i$ q; o
if (nSrc == nDestPos)
% u7 A, @* T5 l4 c4 } {* h7 K0 O8 [8 I
//原地不动# V: S5 S5 B1 ^* P+ s7 f0 K
nDestPos++;
7 r4 a0 I2 h+ Z- @- e" v% s( V) ] continue;' [5 A: D" q' x8 b" [* Q
}7 T4 n6 G7 j; S7 ]+ z" N3 m' z& C
pInvSort->MoveItem(i,nDestPos);
* m: I- F3 D9 K2 X- W g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: g; ~$ b8 m! C! `' l8 K Sleep(5);
? u& h, E6 m. B. c5 X, |1 ~ //Error("移动 - %d->%d",nSrc,nDestPos);
9 w9 D- m. U0 K; l3 k) I8 z nDestPos++;
/ ?2 Q1 \- V7 Z9 ^ }
+ @9 ]3 T3 p* w) e% G6 u2 O/ X //取第一个元素的信息
# d! J0 u' `# _, B' ^0 D4 ~ /*8 T5 w: _% k( i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 ~- m( r; A7 Q( Q! X4 L& {
{+ [* k4 ?- n' M; g" D( C6 W" T
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( h: R/ s8 O. ^$ l6 M3 w' \/ g g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 J6 G+ @4 Q2 l4 ~( H
}
% C, W: j7 V4 P" v4 i */
- ]* f. B& M3 l% b //////////////////////////////////////////////////////////////////////////, q2 h8 z7 _' o; x+ q. E
break;4 f, Y9 w) q& V' v+ Q: u3 d
}
! S1 @ s' V; c4 T }
9 Z; d2 q" w9 ~2 X/ B7 |}$ J5 x& E: _2 x1 {) A8 z) y
m_wndMenu.SetVisible(FALSE);
/ r- y) [, s6 m5 z% e5 w2 o- I2 ~1 z. |% H
--------------------------------------------------------------------------------------------------------
, t1 f X& r4 H- V9 t3 x. \& o, R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) g- g; O2 u' T& o3 _
{: b' w9 h* h( U/ G r J: ^1 `
BaseMouseCursor();
4 |8 }+ n+ L. q8 U a}
# X4 C: A" O! A8 c- d0 _在其下添加:9 K) P7 @4 f0 r
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ w) G: r7 \, P9 k- _{4 ^# @% t2 j- w. }( [8 A k4 q
m_wndMenu.DeleteAllMenu();
" \2 D0 Q& I8 C. Hm_wndMenu.CreateMenu(this);
2 U* w F8 ^# K' Y* p5 G9 N9 ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, `$ l# d' Y2 G+ \$ F$ [
& \6 r0 |# E1 h% |0 H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 y9 f2 ]5 A5 @$ v" M1 X
{! Z, U' O! ~, u3 V! }$ ^# e
//P以上级别才可以删除所有道具
0 ?5 r# I4 A: a& w3 o8 b0 N m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 q& W# L/ Q$ Q* G' {% R' J6 `+ @4 \
}" E" t: A" _$ V0 W9 \) }
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ N0 H P# V0 j- l9 {2 gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* }8 M0 f% ]' }! s5 p) Hm_wndMenu.SetFocus();
* L3 W* s0 ~3 |7 d0 J& K2 ^}
) z" K2 Y# u8 q7 v( E$ @2 L------------------------------------------------------------------------------------------------------------* ^& K7 p; s/ g% o
*************************# \% i7 K; m; Y5 E5 {
WndField.h文件. `$ m. p9 H% U! G( g0 Z; |8 |0 f
*************************
) E, b# [6 g* |2 a: Y& A搜索:BOOL m_bReport;
% |# y) X6 g& t T: k其后添加:
`2 f S; {9 J- A5 hCWndMenu m_wndMenu;
; @2 g& e; n2 D3 x. H' b搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" R! j3 `7 `1 ^; a1 ]3 v其后添加:
# _1 ?! o# C, S" c8 A6 h7 [; Avirtual void OnRButtonUp(UINT nFlags, CPoint point);
7 I8 v, o( o6 y$ l0 y9 J9 p
; G# t7 ~2 S3 U/ c6 E- F- _# ]' {: x# G; e+ [- [0 r9 [
|
|