|
|
源文件中_Interface文件夹下WndField.cpp文件
8 M2 U3 h2 ~$ _! d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" q) | V7 s+ F7 n0 n; g8 p
, h7 [; O) g. G; c/ R+ ?. _
struct sItem4 u) v: [/ b! y7 k
{9 N6 i* h: ^* s8 t
DWORD dwId;/ |- I' z* Q: e
DWORD dwKind2;0 ?2 z# l$ C2 _# n# e& t
DWORD dwItemId;
5 B5 o) E# [9 K& O3 g2 k" p5 NBYTE nIndex;
" F) s2 {1 M: C5 z, {sItem(){
) u" u: E* [5 i9 T dwId = dwKind2 = dwItemId = nIndex = 0;
, ^9 p1 N& q. m/ @$ m}
% Q, g) n& m8 v7 Z1 l/ a( Abool operator < (const sItem p2)7 O, f; r+ W( s1 R; e& \/ x
{
; v% Z7 q, N- o( d if (dwKind2 == p2.dwKind2)! P8 c; X$ r* n+ `, N1 [. P6 O
{$ u. L' i" @9 @ O
return dwItemId < p2.dwItemId;
, Y& e9 r( O$ E+ f- @3 X }else{% S7 Q0 T& _& i( M* `. p4 O4 h8 B
return dwKind2 < p2.dwKind2;, `4 h! l) ?3 w& o3 `* F: p4 G
}( S: z1 q6 D4 J) G
}
, T+ A% D: ^5 u. x# c};: o3 n( r& s! w
class CInventorySort
, k, S# j% O Q. o" ~{' _! e+ G x& C
public:/ V8 B: @4 a( d! U- i) s$ v
CInventorySort()
- S* f5 M0 d- j) q1 n6 c9 y2 u{
0 N; m7 S4 U0 I' d+ r( |/ }6 {, Y m_dwPos = 0;2 T; B& S! O+ p
}: i! u$ _: p$ \! Y( `4 S9 R* ?
~CInventorySort(){}/ c5 x3 W5 _2 a# r0 g5 R
private:" s6 m) ~8 h$ I! E# Q1 m
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 Q" a: @, J4 k2 c4 H- b; h" l- qDWORD m_dwPos;4 L% a; r5 c C0 o
public:
% J# L7 K" w& `% u& Ovoid Add(BYTE nIndex)
' F; U0 V& s6 H, P/ t `{0 ?4 n% K' A, }4 }* o$ F( t1 E
if (m_dwPos >= MAX_INVENTORY)
& W. J/ V9 c! N% f4 f {& g8 k: D/ D" G+ }7 L) M- f8 g
return; t3 z- W8 G: j' X% J Z- t
}; h5 t. `/ e- t y2 P7 P
m_Item[m_dwPos].nIndex = nIndex;
7 B, K% ^' j# @8 {: Q- G m_Item[m_dwPos].dwId = m_dwPos;
' \/ W4 V; N8 P8 I; J- V m_dwPos++;
/ n: t4 r/ _! j6 \}7 j7 N( J4 p7 G1 u' u& o
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( D& @" t8 n3 \9 q
{( S8 ~, Z4 r8 V" A
for (int i=0;i<MAX_INVENTORY;i++)
' Y/ Q! V6 \4 ^2 X6 ~: F$ ?! V {
6 \4 t. e6 v3 t if (m_Item.dwId == dwId)% g. A$ M( p; t) H( p7 S2 L" b
{
( Q$ G! v8 ^( L. [ return m_Item.nIndex;$ k' [6 |5 F+ A7 W" ?- n
}
) A; ` \ R1 D6 m& ` }
" \$ S# B: X2 Q N; y) l D return 255;
0 `7 d9 q) w4 _/ J; ~}
D* d" Z( S6 g. evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: J/ C0 o: s w% z# ~{ m/ l6 `$ x- j d8 G# x& L
BYTE nTmp = 0;% y9 \; j; e- b' n4 Q! I. T
bool bDest = false,bSrc = false;9 k B% |6 l; f$ E7 L1 R) z( u
for (int i=0;i<MAX_INVENTORY;i++)( w9 p3 |9 R9 _, y8 B( I7 o+ t
{- H3 u: r L, M/ R
if (dwSrcId == m_Item.dwId)' m" Y n$ J5 M
{
: c) b: t" l, k. V5 y" W1 F //id相等 则 改变对应的dest和src9 u* c1 t q: e4 L9 d1 F1 c
nTmp = m_Item.nIndex;
) n' I6 x7 o+ Q' X1 M' H0 r m_Item.nIndex = dest;" x" M: k4 a( T3 g
}
8 x4 B% _/ j5 q2 M8 \- y }0 _4 |% e5 ^9 A: X; e" n, f7 E N
//临时数据保存完毕,交换开始
* S, w4 f. L0 ]# n$ N for (int i=0;i<MAX_INVENTORY;i++)
- c* n- S& @, x ^) X {
! y3 ?+ z9 A) r. T, B( K5 @/ i if (dest == m_Item.nIndex): d2 O6 }$ P) Q, s# l- e t
{9 R' B+ R" W- e/ Q- H2 o: w1 a2 m! A
//id相等 则 改变对应的dest和src$ r& ?+ x P* j/ ]5 y
m_Item.nIndex = nTmp;
. f1 g$ b0 U0 C7 E/ L. ^ }
3 V. B! z- D3 R$ I2 n0 [1 ? }
4 [6 o0 @6 O2 V6 ]4 B) G Q}7 r( o' k0 F! ^( L' B: @- v* Q9 w+ J
};
5 [$ [' Z# O6 g$ v0 ]-------------------------------------------------------------------------6 P: o# S/ }: l3 @7 i
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% Z3 [) u3 o& j; i& k$ T
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 [- i- d5 ?4 ~+ Z7 A( p紧靠其上添加:8 \$ a h- L, f9 Z$ ?+ q- ~
if( pWndBase == &m_wndMenu )
0 {6 S6 z8 W0 U/ z9 ]/ a{9 X4 o+ c& C! k7 x0 s
switch( nID )
' A7 x" L& }9 y! I0 v. T {
! ^' O) V' [8 D' V+ {* v' M case 2:. b- T4 G0 h1 E
{
$ Q1 i8 G( O2 n2 @ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' v, _. e( N+ n% H) R4 H1 S: q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ u2 @3 y6 a" ~/ a6 T( f* L
{( N4 y5 h/ d1 {/ E
break;
% z" J. m+ N2 a2 @* U) A# T9 V; r3 c }! ~2 T2 V0 X' d3 Z% C
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* F* l; M/ C# P z5 l( A {3 f5 `& v4 n, `6 d% Z1 s/ [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 t* f" W0 f0 F& t% e' K9 w
if( !pItemElem )5 i4 A: t) K" u
continue;
3 O" f: u2 k5 D4 ~+ f6 e if(pItemElem->GetExtra() > 0)% F2 T+ I0 d" g0 d' r
continue;$ i. l, S6 R: m1 N* ?
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
# o4 I+ h2 v3 h' J3 J8 y& i5 r: N$ h continue;5 D3 g: {2 s4 b
if( g_pPlayer->IsUsing( pItemElem ) )% r: G9 O1 _' j$ g, |' A- j
continue;
# n9 z) N8 N; t9 U5 I if( pItemElem->IsUndestructable() == TRUE ). m/ }1 l9 c; a- Y
{% Y; g U/ q7 R0 L6 J# Y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );- U- m: R1 m2 L( a; b0 J5 g
continue;
6 V- N7 Z; C @9 N }
' o* v n9 R: k `* Y: ` g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; X4 R! p* d& w' |* n/ o" ?
}4 z) y4 l* e/ T" t1 N# O
break;
, C+ a* K4 a5 N+ Y, b3 w }
; z" Y3 b2 |$ n( ? case 1:: o( E- f B. o& U3 u6 z, |$ @- G f: Q
{2 E4 N- {, Q% @3 ` f) D
//整理背包
# g3 L# V4 J2 F+ a+ U. C" x //////////////////////////////////////////////////////////////////////////
' k1 d p0 @3 R/ l* \- i //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 b& e- ?, K: k4 c. F( Y //////////////////////////////////////////////////////////////////////////
. v! y" n1 |' j2 _ //////////////////////////////////////////////////////////////////////////3 m. G! u- \- A6 {: _, d* g
CInventorySort* pInvSort = new CInventorySort;
( f% F% `( ~$ ]: d4 R vector <sItem> vItem;
, t$ [; J, Y' v vItem.resize(MAX_INVENTORY);//初始化大小* E% y& H; t8 K
//////////////////////////////////////////////////////////////////////////7 X% P4 k2 T( N/ h5 o U5 z0 H0 s6 _
//填充数据, ?2 S* | }5 C* u7 ~5 V. u( e
for (int i=0;i<MAX_INVENTORY;i++)# C, X. a4 H# q' m' ~
{- {8 I( J7 c9 R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! e- |/ L% Q% g/ [ _! S' s# l! Q if (!pItemElem)
2 f5 c9 o" h% R$ L* W {/ D' E, F2 _' ^* M
vItem.dwKind2 = 0xffffffff;
' J6 K! @ [4 ]- h* w* {2 R$ { vItem.dwItemId = 0xffffffff;; U0 D4 O6 I# U
vItem.nIndex = i;
% T, |/ K+ B. H& N" p }else {
1 z8 K7 T* r5 l+ R" r/ Z' C ItemProp* pProp = pItemElem->GetProp();
; H* _7 z5 \ m1 y3 k) f1 B vItem.dwKind2 = pProp->dwItemKind2;6 U8 Q% z4 m: B ~; U1 P. b
vItem.dwItemId = pItemElem->m_dwItemId;
, d K2 O& F% }" |, J# L+ E5 Q vItem.nIndex = i;
& W1 M% r& _& c% G1 D6 E" G; |4 _ }% v4 \7 m6 Z, {+ E3 Q+ f7 C
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) o n& N8 e0 t: W4 e% u }
+ {; s! V- V( @0 N8 Y0 } //////////////////////////////////////////////////////////////////////////9 H1 G; _7 _' M) {" Q
sort(vItem.begin(),vItem.end());//排序
& ~9 o! Y- Y& I% t/ J+ H# x9 e //////////////////////////////////////////////////////////////////////////
3 s3 T7 ^1 p# e7 x& g. P //交换0 V; S! |+ h1 }) h0 P1 i
for (size_t i=0;i<vItem.size();i++)
1 Q- N! g$ D, i! N7 N; v! i6 j {6 m& N9 [# N: U. G( z ~$ ]- l
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) v" c* h9 g0 s- M) e5 X' H
pInvSort->Add(vItem.nIndex);5 [8 V u, {- B! ]0 L4 [
}5 Q+ q* U$ P! r8 W
BYTE nDestPos = 0;
. b5 {' e. `8 l4 T" q7 P for (int i=0;i<MAX_INVENTORY;i++)
# `4 |) W. }* `2 x* i( k, b {$ x8 `0 `1 C7 H/ W1 ~$ Y* ` h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. W- r9 R. ^8 u) I ]7 Y8 @. Z! I9 X
if (pItemElem)5 @$ Y- C2 t0 O! L
{
' a w( E, H* X if (IsUsingItem(pItemElem))
1 @" V4 P. t$ e* \/ u6 c3 X {
' {/ J. y7 c# X3 R# v5 y //这个位置无法放
$ X. e+ f2 e1 o nDestPos++;
$ ^8 c5 a# B2 n# F2 t; K- F }
/ B& ? H; f; O( R- Y8 } }
: @- w- f' v+ R/ Z# h3 G BYTE nSrc = pInvSort->GetItemSrc(i);
2 H+ z' Y; R( s% @ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 O# k4 K; M( X" k* M) j if (pItemElem)' e: C' o- l) z; q& A: O2 ], C
{0 R% D, A( c. y6 T1 A+ D* c/ O! I
if (IsUsingItem(pItemElem))
9 N: z6 x7 l# @* p- u {) h" \9 t ^! R8 F- P! d
//这个道具无法移动,跳过$ a+ R% D/ Z2 ?6 v/ ^
continue;* P. i5 o' ~. }3 @4 w# |! `
}
0 h; f6 _$ j& {2 U2 k }else{
$ k. Q8 w7 ~7 X# D; G //空位置 不用动& W! P! P8 p- s+ A* X/ P4 d0 C
continue;. Z+ t3 }. p# n, U! O R) |
}' L% ^6 k4 _5 c* a; W4 }
//////////////////////////////////////////////////////////////////////////
) n0 E$ {. l; a2 W //开始移动9 \7 e' T$ q4 G3 x
if (nSrc == nDestPos), i, N4 C6 l V$ ]& z2 i# M9 o
{
+ [1 l& H8 x- x/ C, R3 F //原地不动
( k7 k2 E& U- [3 D nDestPos++;
' A2 K( Y( s; | J& w& ]" | continue;+ T: N) w }: `& A# h' g
}' g% I- L7 |5 f6 Z' { H
pInvSort->MoveItem(i,nDestPos);. J' {: F1 e" U
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! _+ e' w; x! c4 f6 h Sleep(5);
& `! h8 g" y9 c6 e, Q4 K //Error("移动 - %d->%d",nSrc,nDestPos);, g! x2 e! ?, B2 X: e
nDestPos++;
- c- Q0 Z6 c+ a }
4 O( z5 f4 `* \" _ //取第一个元素的信息
3 R* @" v& s9 x) N- A' H /*9 Z' B v B4 `$ k
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ Z/ {( z0 s5 Q% ]! i2 P: v# v4 u {
* }( _* n- @3 W7 D# ^+ r Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& Z* K3 I- f- l' d7 j9 l
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
# Z+ i# n" @* {4 m% ~# a( Z }
9 `2 W# B5 J2 e- ] */; T7 J' z6 H% @" K" H
//////////////////////////////////////////////////////////////////////////
; ?, |. c- u$ {4 y break;0 U- g) I% P: [# w
}
4 `9 Z, M4 f+ x; S! H5 ` } ( l" _) ?+ m8 G6 S' a% r
}; v1 D9 D+ z6 R8 S2 w, U8 s
m_wndMenu.SetVisible(FALSE);: _ l8 n+ b" p9 T4 M. W! Q/ h
. O, t( V7 x+ F3 o5 v# s1 }--------------------------------------------------------------------------------------------------------
8 C1 [" M7 u: d& F6 ~. u6 X1 T9 w& ]& t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 }) {# q4 p5 P9 x' i9 N: J U. s{
0 }1 F% V, u* P# MBaseMouseCursor();! ~( i( I& u! K9 s- l5 M0 [$ r
}
) l$ ^4 _% h# D% C0 |9 G; b在其下添加:
7 {& z( e0 c* Bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" l" C" t4 P) O- o! X, l4 E{
1 i4 p+ ^4 a( Sm_wndMenu.DeleteAllMenu();, ?, H& Q1 m* k
m_wndMenu.CreateMenu(this);4 B% b2 z7 E n/ ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 c+ e: m3 }6 U1 J
% ~7 g) y% O1 t( O, F& t5 Mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 t) J" c) [1 ?8 w{
. c. X+ n; p: f( K" o5 q [ //P以上级别才可以删除所有道具
# \% B" ]: Z5 `2 h5 j1 Q% Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' ]4 c! p5 A" |" c0 M
}1 n5 H! {" R! s. c1 c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( G' f" p; a+ k! C
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' i/ @- _! |8 R }$ E* t3 s( o9 Y
m_wndMenu.SetFocus();
8 _4 u7 I. `3 q, y1 Y}
! m* p+ ]6 P+ U- L$ Y4 j------------------------------------------------------------------------------------------------------------, [% b5 l# G' s. c
*************************1 U3 F0 r( j$ C# U& `4 k# N
WndField.h文件
Y2 n$ G2 w; ^; W/ J7 M+ R*************************$ }/ ^8 W9 G* R; | [8 e0 W
搜索:BOOL m_bReport;3 l* m9 o8 P( g+ T" y# D7 [4 P
其后添加:& c1 m. E& Y' n! ]
CWndMenu m_wndMenu;4 C8 h5 {: y" ? C7 r
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- ?+ S* B; p9 B
其后添加:$ p/ A C. j; e( k2 ?0 k% |3 t
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 ^. O4 g# s+ g' a6 S6 Y$ k& K
+ ~* V d+ j6 s, i2 j* }3 n" E+ Z" F
: l2 {- T5 @6 H; t |
|