|
|
源文件中_Interface文件夹下WndField.cpp文件+ J3 j0 h0 j* }6 i4 K
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! Z' Y3 ^ h. Y# o2 @3 p
) J* d8 W( Y5 a. O" N) astruct sItem
$ F3 w+ Q3 J$ t/ m0 K% G& c _{
0 A; f6 V* R5 M" M; C% gDWORD dwId;$ f) `- U4 g0 D0 P7 Y# f0 T
DWORD dwKind2;3 _! l) Z4 b# X* z
DWORD dwItemId;# g3 M8 v! C: [# ~/ Z- q6 x" U
BYTE nIndex;1 \ }! p7 i- H5 ~6 B
sItem(){
; a1 C7 w$ r& B" J7 z dwId = dwKind2 = dwItemId = nIndex = 0;
, C3 A2 P9 _( t4 }! @}
( Q- M$ r" m; }$ r1 p# g( Mbool operator < (const sItem p2)
; R1 ?, G. ~5 I5 Y9 c- Q1 U. N* J{2 n6 M% g, E+ \% _ a' O
if (dwKind2 == p2.dwKind2)' j, m* t' c( i6 V& ~
{ Q9 X1 g+ ~% m
return dwItemId < p2.dwItemId;
% W' ~9 ^, X W: H" D" h; }, K }else{$ ?3 }& n$ T4 T% | t
return dwKind2 < p2.dwKind2;
4 f- X }$ E0 e2 g }2 ~: _, m8 h: [6 t& w0 W! x* P5 F
}# _3 f# w# H0 f: Y* V
};! l1 d# K# g3 X+ d6 p1 T- t3 R0 o+ G
class CInventorySort
/ M4 ^8 D+ K- M" C{
4 |* b( K M; b9 a8 ^* Y, x+ Ipublic:* \1 W! @- {4 ^, K A$ r
CInventorySort()" V9 g7 z% B2 X# Y( D |
{. Q; W& F/ X/ Z& z O
m_dwPos = 0;4 p4 w! ?6 d) [& H, d
}
* W# R, x. F3 E) H- P8 H( y~CInventorySort(){}) G& W; ]% k; R6 f
private:$ u1 q9 X; Z, |/ I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! w8 F* F. ~5 @# S
DWORD m_dwPos;
0 z7 L" p) a; d$ Gpublic:3 I) P4 o$ p2 L
void Add(BYTE nIndex)
. D2 e" @0 @+ f) @1 I8 ?3 E{7 ?. K5 o( l+ T- j9 c4 J" h
if (m_dwPos >= MAX_INVENTORY)
" d- b! Y6 l: G; B {! u+ b6 F, x! K4 o5 H
return;4 j/ J+ O7 r1 o* Q1 ?7 ]4 K
}( o' n/ [; c- k* I
m_Item[m_dwPos].nIndex = nIndex;
; d+ E& I O* k# {+ n8 s! T9 F+ w m_Item[m_dwPos].dwId = m_dwPos;- ~; q8 N$ D6 y" M3 ~
m_dwPos++;
; B, i1 ]8 ]" K, J* {}
" {! X1 w7 T% C9 ^1 w4 hBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. q( n c: {* x! B7 z ]5 F
{
9 p8 R) }0 { [2 f5 C7 ^ for (int i=0;i<MAX_INVENTORY;i++)' L3 ~7 p" a2 S! M& s7 G: J2 A
{7 N8 N8 K9 r* O5 s5 u
if (m_Item.dwId == dwId)
/ y) f% R# z8 b; e" ?5 p# P+ T {: K" ~5 ?5 f4 x$ v
return m_Item.nIndex;0 }' G9 p! O4 ^ W9 z) V8 G0 h# E
}/ A! W- F0 H- n4 h: }5 Z
}! t. z6 }" s7 q r1 f( t# d
return 255;
8 X# V+ [( c& \% K4 r}) U# k2 Z: x) M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ g+ [0 F( ~) s9 u E! q, g{# {6 E* P# E. P7 U$ Z
BYTE nTmp = 0;4 n' {+ ~6 Q8 c: T
bool bDest = false,bSrc = false;$ W/ H4 z H; M9 S
for (int i=0;i<MAX_INVENTORY;i++)
, e5 o/ v4 C3 b! A) J {
' ~" D7 M" i7 E7 @' b% |) R% h if (dwSrcId == m_Item.dwId)
9 h; R2 P. g$ R% P {
1 ?+ f! I4 U7 d' P" B. g1 G) _ //id相等 则 改变对应的dest和src! s6 L% E" `/ k' a
nTmp = m_Item.nIndex;
2 _+ D$ l" I7 _2 n8 t4 L' N9 e m_Item.nIndex = dest;- {4 F- I7 \3 T t* S
}
8 \1 E" N4 ]2 t: v! u9 x }
4 p6 d6 L l: m! ` //临时数据保存完毕,交换开始% ?) l4 J1 i9 O0 m, n2 t
for (int i=0;i<MAX_INVENTORY;i++)
' s* \. ?8 P8 h9 O3 w# e% ~ {( v( y2 l0 F0 t& S
if (dest == m_Item.nIndex). Y6 s* E6 m1 P9 D
{
# o1 t- R* l$ m //id相等 则 改变对应的dest和src
0 F6 [9 c/ m% v) q* _' Y4 g m_Item.nIndex = nTmp;8 d4 N5 E4 O& o
}) p) L1 d( _$ T$ E+ T7 G2 E
}
( `8 K8 e/ q( p) g}
3 k+ ~. r% [$ G0 ~2 X1 q};
( {, a2 v D3 e-------------------------------------------------------------------------' E& j9 D8 R) u4 e7 T, D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; T; C7 m% ]" n搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, l. U! f8 i7 z" |8 r9 F
紧靠其上添加:
* U# E7 B, m" N% }if( pWndBase == &m_wndMenu ): u" ~9 ]2 E3 t! Y' b
{
9 Q7 u+ r: m) c# ` switch( nID )
( Q5 G+ a0 l6 s! Z0 B( u7 ] {
S2 d) c' E3 q2 y0 q" } case 2:
6 w& n# ]/ f% a+ z {
' W$ N1 ]4 h# q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# h I3 H' F9 g/ y& |) _
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), {" Y5 r; |2 V5 h# o0 [
{3 a, A: X Q, d. ^
break;; G8 D0 r9 k# L
}! Z" b, x, v+ w; o
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 k9 m; i2 U" O, d& h
{+ M( m0 [. p: t2 L# _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# h/ E: P% J: M0 J* o2 s1 Y" ^
if( !pItemElem )2 N, z& X1 `5 L7 ]" ?" G6 d
continue;
) D* c, L% R" z9 w if(pItemElem->GetExtra() > 0)
0 o4 U0 m6 f4 ~" i continue;
3 o8 A6 U0 g% L/ `5 }4 Y1 z if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; p4 c ]) E& c4 \
continue;( `6 q; S% J9 s8 o$ @/ A) P9 f1 u
if( g_pPlayer->IsUsing( pItemElem ) )8 \8 {7 ? {1 l: F2 J: {# H: i
continue;8 @/ }" T1 ^- N H% U
if( pItemElem->IsUndestructable() == TRUE )+ z9 M8 N2 A" _4 P! \$ V
{8 z3 ^" i9 {/ T
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 k7 G, u, Z9 ]" @% q. n# V
continue;1 A M: H0 A1 ?- m* {* \, j
}3 Y( R- p6 o! V5 D! `/ B: l3 c
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, t8 i9 s3 \: Z: O3 ~$ B; a }
4 n4 W! r9 U) O& m break;
2 t# L' t* _& W( c/ q+ O+ V }$ `$ e6 k: j: R0 r) k. }
case 1:
' o% m5 J- g" R' M {% x" d/ G; W M% Z: f
//整理背包
; D( K. [; u0 o, ]( { //////////////////////////////////////////////////////////////////////////
+ B" ?3 ~# [# K" M; d' z4 c //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, E' v( _% q$ E, Y, R
//////////////////////////////////////////////////////////////////////////( {* @" [$ p O* M4 p
//////////////////////////////////////////////////////////////////////////
* ]2 d+ a. _/ Q! f% G6 }( x CInventorySort* pInvSort = new CInventorySort;
( W# w4 }0 V( n) L( D8 f vector <sItem> vItem;
7 t r3 }* I; ?3 G L vItem.resize(MAX_INVENTORY);//初始化大小
, {0 z( o) q J( c- x8 R1 T //////////////////////////////////////////////////////////////////////////
4 i: q$ l2 g$ ^ //填充数据
( v0 [7 E" x; ]1 i( h- y for (int i=0;i<MAX_INVENTORY;i++)
* n9 c/ y7 Z2 y- T {
' _ X# o5 j3 y$ \! S6 \+ H/ q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 g2 ? W) H+ X% Q* K9 ]/ y
if (!pItemElem)* |$ H* G; B% T7 Z
{" ]9 m9 Q7 ~1 {- l: u
vItem.dwKind2 = 0xffffffff;$ p1 g. t. I! m& N D
vItem.dwItemId = 0xffffffff;
7 O6 D' o: S$ {7 X5 B& O9 T vItem.nIndex = i;
" d% `% {! Y* [! F }else {
! W9 f- r0 D3 J$ |' g ItemProp* pProp = pItemElem->GetProp();- G" o9 f6 P% X+ _5 F& p, j3 V8 N
vItem.dwKind2 = pProp->dwItemKind2;
- Z2 V: S7 Z% t vItem.dwItemId = pItemElem->m_dwItemId;
9 v7 F' ?( P- ]/ c+ Q; g vItem.nIndex = i;( t+ \+ X$ X# C' ~
}
, t# t; A+ }& h& V. g# T6 w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 `, p" ?, ~3 J ~7 E; e. d }
. t1 l! ~1 ~% p! S; F //////////////////////////////////////////////////////////////////////////
$ [& m' m C1 a* p) a2 o sort(vItem.begin(),vItem.end());//排序
+ R# A8 ?& j o //////////////////////////////////////////////////////////////////////////
i# o6 N1 F7 y2 F //交换( U7 G: _ W0 ^9 n- }
for (size_t i=0;i<vItem.size();i++). Q5 m& M: i% o7 ^3 R1 A: i) |
{. ~5 C" a3 J: g; o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 `+ \( m0 E/ e% {( h+ j3 ?
pInvSort->Add(vItem.nIndex);+ e8 a w, y. h7 k5 z
}
5 |% ?- F9 n r0 C" ]# E BYTE nDestPos = 0;
) f; ~2 a- {6 u for (int i=0;i<MAX_INVENTORY;i++)/ d4 B5 t: z6 w4 E
{
, v2 s: N5 W. O. z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# A+ B, V1 l8 g. w" S. t
if (pItemElem)
4 K2 V: u8 i/ x {+ x" H% J% ?* O% Q2 ], f2 t& A3 w
if (IsUsingItem(pItemElem))' q; b& T! @ u r$ n
{5 e# [) y* b; }
//这个位置无法放+ o* k. @) s6 S, [% \! _
nDestPos++;; H( d8 |6 |+ C9 D( x" ^' j( ^3 i1 e
}7 s5 ~9 O/ m( j! ?% u, g+ \ ^2 B
}" [# r1 a# R: W, |
BYTE nSrc = pInvSort->GetItemSrc(i);
7 D: T- L: \! @+ H pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 J" t3 c9 C0 A2 {
if (pItemElem)6 ^, u- i$ K* o: B, y/ C
{
5 s5 q- t( V& {1 z if (IsUsingItem(pItemElem)). r2 s+ u& B0 {& O2 E/ w
{5 L$ [3 {4 I) o$ w
//这个道具无法移动,跳过
6 ^ M @+ {1 E- I& } continue;
% n7 t( N/ Q6 y, q8 q) I }# [' l- m* }& @$ e( z
}else{9 X& O7 |4 g) f8 h( c. ^9 I/ f2 T! a
//空位置 不用动
( l" i, B5 Y6 ]" |" _6 ? continue;, F- x" V5 Q6 W
}
# m8 j1 ?" v: ~7 u. p S" a* @ //////////////////////////////////////////////////////////////////////////
/ ^ L2 \ m. Z0 a5 l+ [& { //开始移动' `5 U" ~4 U c
if (nSrc == nDestPos)
* E* k. F0 `5 z' Y1 Q# x {
4 i) j% m7 @* e; I z* k; D3 E //原地不动7 w3 M+ w. e& \9 }% f, n2 c
nDestPos++;
# E' b8 \' y- K. N; E continue;
0 n- Z" C6 h- `( W }
; \" K; P3 G2 Z pInvSort->MoveItem(i,nDestPos);% h# V5 M% _0 b: I
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
F+ _. x4 y% e+ s: Q2 [ Sleep(5);
& Q! ]- i5 S% O0 [/ H0 o7 ]' O //Error("移动 - %d->%d",nSrc,nDestPos); R/ x- j0 R; {2 v5 T- s
nDestPos++;
& M: c* ^9 C8 }: S5 l }
6 r7 [1 [6 @) O8 h H: g2 _+ {5 u //取第一个元素的信息( A0 D8 p7 y7 T: [1 w- m
/*" q7 L( n) I( ^
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ x0 U# W# z* ~ U1 G8 M: z {
9 s; Y7 N y5 S m" G2 E @ Error("Move - From:%d,To:%d",vItem[0].nIndex,x); u( w2 C, u0 W( K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 F+ _6 Y1 f) U7 m }8 l, \7 e' {0 O8 |0 _
*/7 p- D, j& e* e5 F! a, c2 k0 f$ U
//////////////////////////////////////////////////////////////////////////
3 o, V. s( Y$ b break;
2 z* ~ _' M6 h7 M0 q8 e3 I }7 b' ]0 f: S1 ?- H
}
; a& a) k8 [+ B" q5 q3 y7 ^; r3 p2 ^}4 K/ s5 Y! k6 V
m_wndMenu.SetVisible(FALSE);
1 w8 g% V9 E6 y4 `+ b; A `; h5 K- v Z$ Y4 f, x5 w
--------------------------------------------------------------------------------------------------------; A2 g( k M9 F; b2 e
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 W7 ^8 M9 r) C
{
+ n. C4 M) i& h- g9 ]3 oBaseMouseCursor();6 i. R. A, _1 B
}0 O+ E" Q, S% y: G- |- X
在其下添加:
. G1 v, b; I6 K) avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& { X0 b! X8 u# r& N& N
{; \! `1 L# b. o
m_wndMenu.DeleteAllMenu();
, n0 T" a8 Q+ y ]1 M! E# d& u+ Hm_wndMenu.CreateMenu(this);
0 k- l, L: D( r% D6 m0 m0 ~; w. V) ?m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- O: L5 ]1 u( n% w! g
) A+ i- E4 U! Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). G7 d/ x) j( q* |4 E5 h, g
{; d$ a9 ?" Z* R: q0 u8 E: X
//P以上级别才可以删除所有道具
& k! u$ Q7 t b' ~$ z. J6 E m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% E# P$ l$ J. d! m# i m0 _# V W, [. }}, u& ]: p) x. U1 Z. I2 ~
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* p( D0 D1 Y- f# ~5 Q6 ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' M: e0 D+ L1 K* d! i& hm_wndMenu.SetFocus();
/ }0 |% H# K! P ?) }" c}
+ P5 h8 X! m% r5 F: q1 W9 h------------------------------------------------------------------------------------------------------------: L' f9 m) U3 k7 x" T. z
*************************
. P# u* z1 ^: m. QWndField.h文件
, d" @4 M }; H$ R" Y*************************, M0 q# G4 ^5 q8 W4 ?* k7 M
搜索:BOOL m_bReport;
1 V1 A$ u3 F9 Q; m0 s: n其后添加:% s) p" M' T7 j
CWndMenu m_wndMenu;4 a2 B# s6 |( y; I- T4 R+ ` v7 B3 F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 E; F @7 }: V9 ^- a其后添加:
/ W+ p$ O: p( M4 `( ]0 Nvirtual void OnRButtonUp(UINT nFlags, CPoint point);
- F* V& u3 M/ Q) N
! x. `& r) L8 P/ `
+ m% q/ z% I! p0 _" r! K |
|