|
|
源文件中_Interface文件夹下WndField.cpp文件, I& x& ^# e5 L0 O+ ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); o3 I$ ~9 i a% D4 q5 P6 f
1 Z. S: M: ]$ Z1 c5 ~5 y! s8 `7 t# F
struct sItem
2 K+ J2 F/ V$ i T{
! I* j4 H( y. r& G& tDWORD dwId;
O, d9 p& B. j/ L" F2 j: @# gDWORD dwKind2;
! b1 @& I( O# v8 ^: r" ~* ?DWORD dwItemId;
* o7 v& W8 i0 M/ b% B6 I: `BYTE nIndex;
5 f/ } m, o9 _) z' e# AsItem(){9 w. P$ @' k( m2 p! x. G
dwId = dwKind2 = dwItemId = nIndex = 0;
. A# m' y& z6 B9 M+ y}
; w7 K) R& t0 T7 ^& P7 D2 Gbool operator < (const sItem p2)
$ K7 c2 D/ D% R. Y{: l e5 p, c/ E0 f4 [# V% K4 z+ P4 W
if (dwKind2 == p2.dwKind2)
; J4 s- i2 H; W5 D( N+ ^2 [3 ] {; ]5 ]0 t3 `3 `2 M! t1 Z2 z- e
return dwItemId < p2.dwItemId;
. J U2 B3 V- N2 b) ^ }else{
8 r( S l" a4 E* k6 ^- Y return dwKind2 < p2.dwKind2;; b! c9 x; s0 x. I
}
2 P6 U L. |9 s' V}/ [( _3 \4 v9 z! g$ ~
};
5 l" N! N$ y0 V- p0 Jclass CInventorySort
2 V5 }+ x$ v5 u" r{: n& w3 s6 T4 S" K
public:4 {5 p" A& M) o2 }8 Q2 w
CInventorySort(), {# ~) b f. m: ]: J8 W
{
" H. J+ P& r9 q m_dwPos = 0;5 v- A# e# r/ u
}) u: K8 t q7 @( g8 c
~CInventorySort(){} m O" {) B, {# Y5 A
private:$ [, T5 w: @% i5 A, l6 u! D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 |- M& q) @! w, \" Q" I
DWORD m_dwPos;
! I4 o: i) g9 {' d, j, G3 mpublic:7 S `% P" u! l( q$ j
void Add(BYTE nIndex)
0 G) n9 L% S: ~/ o# g. u1 p{9 z6 s1 U) _) t1 C$ V8 Q
if (m_dwPos >= MAX_INVENTORY)" E* K9 P( H# n6 p2 N
{
$ |& k- P8 r$ F e5 y' G return;
5 z8 M5 ~ V8 j }: Y2 p& H: s9 E! B
m_Item[m_dwPos].nIndex = nIndex;
' P. q* \! L4 F. f m_Item[m_dwPos].dwId = m_dwPos;! H1 m+ \1 X( W# }
m_dwPos++;
. x3 w% ?9 o o+ N! E}+ D/ T; J, T5 z/ f9 g; C
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! U+ c! r! h, q! Y+ j* e6 h) h{
4 ]- \, X8 z! B4 F for (int i=0;i<MAX_INVENTORY;i++)
7 f0 {1 j2 k5 n# t {
8 V/ v" ^, }3 r0 C7 Q% R# e if (m_Item.dwId == dwId)
* j5 \. N: q- E) g$ W/ o8 c {
( b0 o9 x1 P1 P { k9 y7 i o3 C2 { return m_Item.nIndex;/ w1 o/ Q" b% F9 d% X
}; o1 I4 D v2 D1 s! n
}& `. y# i% ?+ S# F! g4 m) m4 r
return 255;
! m) }! J/ [# q1 U4 y. o}
) k) V5 l* ]1 Y7 x) V5 W/ |0 q: [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) w3 } P, ?" T3 l{+ J' O( v' G, p9 ?
BYTE nTmp = 0;
. J6 z! p# E7 E: k bool bDest = false,bSrc = false;
* j( Q& n1 q/ e+ d8 f, D w% b for (int i=0;i<MAX_INVENTORY;i++), w+ D4 h6 o5 u4 t, ?
{5 D- `$ n2 v* Z$ _+ D
if (dwSrcId == m_Item.dwId)" m4 n+ I5 }; `" y: P
{9 C J0 U1 G0 }) V+ S B
//id相等 则 改变对应的dest和src
' x6 V, N3 K7 ?# X( r% S nTmp = m_Item.nIndex;( |! O2 j% B# x7 Z K" j3 g( b8 o
m_Item.nIndex = dest;" ^9 N/ j6 B! t2 U* N
}- V" v3 S1 `; m0 J
}" L- U' V. ^# F; @% ]
//临时数据保存完毕,交换开始
& u) D# m( ]4 _5 o0 J: U" w for (int i=0;i<MAX_INVENTORY;i++)$ z1 r. \% d0 s. x. z
{
' B7 W% f. [7 U! P3 [" F if (dest == m_Item.nIndex)! y" P$ c6 ~4 g* i
{( @ F) g: R2 D
//id相等 则 改变对应的dest和src# m3 a1 A8 A1 @8 c$ ~) O. Q
m_Item.nIndex = nTmp;
' s, G" I! k% P' [& l }( w+ E, f2 p9 t( v9 v+ z
}1 v* h, j5 }4 p& O% p8 f
}' D6 x) q, F% s) R+ m
};' P1 }$ e- g, r0 @- q) H2 \& j% E$ n
-------------------------------------------------------------------------
" \3 a2 G6 U5 i3 a' l0 _依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ Z0 O( K1 a4 Y; Y% a# Q, {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' J }$ [) \$ B3 f
紧靠其上添加:
! w# W0 n' G7 d& {# x+ c) ?if( pWndBase == &m_wndMenu )8 Q w& ]# K8 \! X
{
9 r5 `; O0 X0 g4 k1 C% M% k switch( nID )+ o- B" {6 d, E+ M
{6 b( M6 S5 h, d" `9 y2 E$ e+ a' u4 q
case 2:
' {7 `) b5 v j9 t {
1 W2 \; [* [" j0 n //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- L, {: J) n" L* T if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 @. _# L) N% s1 s$ j
{+ p- N6 b- v! Z2 x1 V
break;9 Y& B" Z; w- Y0 e& ]( \: q
}% s' c- r$ K! s+ W9 l7 v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 B( i5 g" J' @( C3 U" v
{( j& X# [5 o- R, } k/ w% U; x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" u8 V: f2 j- J if( !pItemElem )
4 ^' F3 C+ W. F( U+ \! `" O continue;
}5 S3 ^7 J2 _9 Y/ A4 n8 h if(pItemElem->GetExtra() > 0)4 ?, {' D% w k7 t) T
continue;
1 R G( u- q$ Y, V, s" y8 H$ m: K7 ` if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % J: w- Y: w7 n/ y9 K7 e+ ]
continue;: i! U* d4 X. c7 u
if( g_pPlayer->IsUsing( pItemElem ) )
6 B4 Z$ y. q& ]- T' s- T) A4 @' ?4 z continue;
, w3 I2 G. G9 U* Z! P if( pItemElem->IsUndestructable() == TRUE )
9 w) |# J% M# d# G* e6 }+ h {
4 t {+ L) g. X" d7 y3 J g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 {& h! d* v) s, B- z% X continue;
3 k) `* |3 i6 t9 K) F }4 U Z' N2 x4 ^6 c: y6 v
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 y5 k) P9 u9 d8 c }, S4 j+ T: ~; U8 W- z
break;1 g+ n5 h0 m7 M
}% Y! S( M: b8 N! x6 I- F# ^# j$ @+ F
case 1:
* |% y( z. t; a# g {
: Y) h" X1 [- s0 l& ? M% Z+ | //整理背包. C* W, I& J1 Z
//////////////////////////////////////////////////////////////////////////
8 [$ t v3 K, n; S //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 d) R8 ~+ J" ?. d6 k/ O/ F4 D0 m //////////////////////////////////////////////////////////////////////////3 A3 F1 w" i: `3 F% X0 ^. K9 f( e. e, T
//////////////////////////////////////////////////////////////////////////
7 x0 D# z# y: N/ {3 v7 C# U! ~: v9 w CInventorySort* pInvSort = new CInventorySort;+ U' \ ?: e$ c. T! h
vector <sItem> vItem;3 h3 x$ m( T; V9 Y1 ~! D
vItem.resize(MAX_INVENTORY);//初始化大小
. G: M6 S3 I3 i4 D8 S+ O, Y //////////////////////////////////////////////////////////////////////////0 N! ]: V8 U$ O( {9 \# C# B7 j2 w
//填充数据" b; s2 @( x3 M* f6 p k
for (int i=0;i<MAX_INVENTORY;i++)
9 j9 V: k( O- T, b" t9 y {9 }+ w6 R9 J+ B" U) y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 t. _+ A/ S. p$ L# W
if (!pItemElem)
" I6 n! y4 a! a( f% u {
" p1 {5 H+ [( l3 w4 `% G: H+ j5 I vItem.dwKind2 = 0xffffffff;
* F( G( K: ~8 S% ]8 S* e vItem.dwItemId = 0xffffffff;" S; Q, q* K" s1 o% j7 ~* O
vItem.nIndex = i;
) I$ R6 l7 M4 V6 e }else {
# t2 t( |) c! e$ U ItemProp* pProp = pItemElem->GetProp();
- ]; [7 E2 k* u V* S: r vItem.dwKind2 = pProp->dwItemKind2;8 W, e0 m, f5 U) T
vItem.dwItemId = pItemElem->m_dwItemId;
0 j% l% `5 A4 k3 I vItem.nIndex = i;
) h5 J. M- U+ y. Y }
Z- f5 o/ f7 `( K4 H //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 j7 J, k0 G# |* e& i }& K! u% t- L1 V/ q- A# c
//////////////////////////////////////////////////////////////////////////' _! w8 Z, s) v
sort(vItem.begin(),vItem.end());//排序
0 Q7 o2 S. q9 } //////////////////////////////////////////////////////////////////////////1 J' p* h1 O+ q# H8 z
//交换
L, @% s! H. q4 r. r; C( g5 ? for (size_t i=0;i<vItem.size();i++)" P! @* {2 z5 ]& x
{
* S% L1 ]! |; r //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 J4 B# i7 F8 ~) H$ ?& `7 K) d' v
pInvSort->Add(vItem.nIndex);
6 K; U4 b9 c( D c9 c9 | }
0 \/ [1 Z5 f3 B, @$ N) ^% ] BYTE nDestPos = 0;
3 g+ o: {; i6 K7 Z( a for (int i=0;i<MAX_INVENTORY;i++)5 q( X4 p3 H$ L1 ]
{
2 I/ x0 T" x( n8 Q5 [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: t8 u5 ^' r4 n0 O( S# H
if (pItemElem)
" a9 a- s' i) Z) u1 f {! U; l5 x5 y0 O6 L1 I% r# H1 o& o
if (IsUsingItem(pItemElem))! O. u$ A" ~9 E8 z
{! j+ Q2 z# b1 R7 q! v
//这个位置无法放
1 ]8 M& E8 i( V) h nDestPos++;
& `' R: m; |; B: J* ~( ~) x) T }
" @0 s: r+ V6 |" C t4 t6 b }
0 j0 _: G7 G/ V1 Z BYTE nSrc = pInvSort->GetItemSrc(i);) d5 n6 L+ G( X( W# d# C& k7 z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# E$ i6 [0 d4 v! W/ a; g
if (pItemElem)
( O& W) U: c6 _' T" K& G' X7 M$ X {9 ~7 o- E$ U9 A! N6 l9 \
if (IsUsingItem(pItemElem))( n' `9 o$ J8 S4 \
{
' K: d- R8 m' B7 B //这个道具无法移动,跳过% s" A' | k3 z
continue;
+ V' A; `5 m/ ?7 {. }7 ^ }
/ T! E9 z$ [4 y9 c& e }else{
. ~1 A8 C5 }* D6 E/ z3 v% [ //空位置 不用动( d- m! V$ N& J, @2 c
continue;
0 d7 o: e E3 W. T# i0 h |' h [ }+ [2 t% y3 i9 V1 T* ]
//////////////////////////////////////////////////////////////////////////
2 V6 s: \$ U) i; D- H) U //开始移动
* ]3 M6 Q4 K+ f if (nSrc == nDestPos)
1 O' Y5 h. q3 G. A {
' |' I! t1 y$ D/ j //原地不动0 z6 C9 e2 O9 P% c2 N
nDestPos++;
/ ?/ B# a6 @! c# r1 W+ h continue;) C: y5 S2 ]5 U- C; ^6 A
}1 }8 \8 ] Q7 Q* {7 L1 c
pInvSort->MoveItem(i,nDestPos);
- Z- |7 `9 @4 @ g_DPlay.SendMoveItem(0,nSrc,nDestPos);. d7 Y$ r$ B: ]9 }/ @
Sleep(5);. W2 d8 y. D8 K0 B* R0 v
//Error("移动 - %d->%d",nSrc,nDestPos);
, j7 u4 T1 H4 Z8 |& s# } nDestPos++;) O, q) q% c' F+ U
}, T2 y) C2 y5 d
//取第一个元素的信息
- W( B7 J. J# ?# o, t# a4 W& q /*6 X7 q5 ` U, W- z8 v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( f9 Q+ O. X# t* B) ?; _2 I6 D
{
, H% y5 u" q" l, d Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 `' Q# o/ a& \5 [- B" X# s1 G( X, T9 n% s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ w7 S2 W5 _5 T }
+ C9 y: j3 t5 I& B$ R */; e. t* C& ~3 J
//////////////////////////////////////////////////////////////////////////
/ \# t( |+ ]2 q7 q2 M1 p$ _ break;
! n' q8 \; U2 x1 T9 b9 d+ ^1 O }
4 W$ a0 u, ]8 v0 D7 E% W }
n- q( }) b* u5 b O}
/ C! H0 b9 z$ N' B+ |m_wndMenu.SetVisible(FALSE);
7 O+ |3 }' i! M8 {9 ]7 y. h) u- ~% K6 B0 z1 d1 g
--------------------------------------------------------------------------------------------------------4 H' _, h) ]% G9 A6 b$ D* H8 |
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' k# \9 E7 K9 O) R$ n" i( t. j8 V{
# X, M, R( G5 VBaseMouseCursor();
( h+ N7 |8 n, E) V" V# T! V}
9 H o2 O2 Y: i& F7 a在其下添加:! A$ V) L( n: l `8 O: R! b
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" j* w9 x4 u- m; I. ~* T/ X
{
2 K8 R {0 g0 x1 c- e3 Vm_wndMenu.DeleteAllMenu();
1 C% ^ Q# I6 n) Rm_wndMenu.CreateMenu(this);
0 O+ u* S) H3 z' Z1 Im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; r$ @, l s! C- E+ K- c2 F
% m8 R* z$ _$ ]3 {% Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! v$ H9 w d$ d& [7 f6 j8 p{
, G, x8 b* `# d; W1 ?5 r% K //P以上级别才可以删除所有道具
+ N; y3 f5 K# p* L8 f! P. | m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ U7 R k; H) A; N
}
6 J5 s# W" g Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); o0 @% a' p ^6 F+ k2 L" a9 ~7 j$ N5 K( q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* l: q0 I5 g3 w
m_wndMenu.SetFocus(); O* I( i. Y! g5 \
}
9 h7 D" |; K; Z/ k. L8 P( r0 ~------------------------------------------------------------------------------------------------------------, @: L; w) f" x, I
*************************, x, g) Z1 ^% Q# q$ Z. ^
WndField.h文件9 p4 x0 T% R: n. L6 W
*************************. H1 R9 U9 t& |- K% \9 w
搜索:BOOL m_bReport;
! e% M6 Q- X" M* |- S K其后添加:
, n5 \3 R' q8 Q$ k* z0 h0 _# h, ^CWndMenu m_wndMenu;- `( k' _6 W+ j( X3 X( L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' n3 I3 x& v! r- [
其后添加:
$ i8 t# }1 t( K Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
+ l7 ?% J- Y5 o" _. r" E
/ |/ u$ U: B9 A; q' j% B [/ b& O# }( `7 P9 c9 q0 b# ]
|
|