|
源文件中_Interface文件夹下WndField.cpp文件- w+ j0 m2 P) d5 l q, h) R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- i- z9 C0 f7 c5 r6 e0 e0 j
$ ]1 ^ _8 z- @* Dstruct sItem
0 V0 I$ a4 H+ t. i" R{- b L6 z! U4 M! S E
DWORD dwId;
% A9 w& E+ c, ~/ eDWORD dwKind2;) f- q8 e/ D! }, s0 W# }8 F
DWORD dwItemId;0 Y( n5 D: D+ h/ L. @$ r# }) s9 N
BYTE nIndex;
W n7 o5 f+ Y% W$ |( V3 u$ XsItem(){5 N) u, y q! O3 C
dwId = dwKind2 = dwItemId = nIndex = 0;1 [- S8 V7 K& Z3 v
}8 l( O9 [# A3 M [9 G7 F
bool operator < (const sItem p2)/ \4 q9 b/ W& T
{
. ~3 x/ `; ~/ w2 j5 B" q t' d if (dwKind2 == p2.dwKind2), p9 M R O# @! u) T3 C
{) Z) T5 n. W3 ]) @9 M* s
return dwItemId < p2.dwItemId;
3 e# b( G. d6 z( z, ^$ j( s }else{7 h7 o" P2 b a+ ^% [& P) U+ b/ d+ ~
return dwKind2 < p2.dwKind2;! d3 k; [7 T- r/ J- b7 D) H
}
7 f3 h+ @/ v3 t* ~& U}
7 C/ X* u) T( A [! \, j};# B- V# K2 u7 {) X
class CInventorySort) J6 U* X# W9 e, A# q5 Z7 \
{
) A7 P O5 n4 x3 p& h. upublic:! K. o. b4 C. l3 ?5 B2 [7 ]
CInventorySort()
0 z. q) ?0 W, N I; g{
8 o0 n5 K" K0 g3 e m_dwPos = 0;9 e" v& b' i# N* P [8 ^
}
& J& w `) H4 o~CInventorySort(){}' w+ p- |( D- \( D/ K+ N
private:' R1 j9 b9 ]& ? ~7 F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 C- A. B7 g+ VDWORD m_dwPos;
- @" Q; i+ f; T2 V$ P9 wpublic:0 n% T, X- N) `; a# F
void Add(BYTE nIndex)) R! q0 b& W3 _& O. @$ a
{
" w5 v+ y+ q- ~/ U7 y |9 o0 X6 k8 }1 a if (m_dwPos >= MAX_INVENTORY)
% i3 D! E9 [& }& ?. t) n+ f {: g/ u$ @# W/ {, D6 u
return;
6 e* W# h$ w: l" g( y }+ \' `% ^9 p/ ?1 b' i+ `2 Y
m_Item[m_dwPos].nIndex = nIndex;2 S/ j3 x5 m: m# d; S
m_Item[m_dwPos].dwId = m_dwPos;" v8 V- `& E+ H/ q- _/ U8 C
m_dwPos++;6 @4 n: m% W n% A! S
}7 ^& x* S5 w# b3 Z h8 o: L" y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( B, _8 ?; a% F& n/ w{8 V: \4 W" `4 ^8 [! D
for (int i=0;i<MAX_INVENTORY;i++): p, a. _2 `% P( v( c4 z
{
. m, L$ \3 O' e3 t% {% h if (m_Item.dwId == dwId)
- W( F- H2 R+ ~) j {
6 X b6 U; o# l return m_Item.nIndex;# x: N4 p+ ]9 V6 Q7 {6 g* D
}
& H& f; k5 ` `% P% k, m }
1 t9 B/ ]- w o4 {* x return 255;9 J' v) o7 q8 }$ M2 S( Q# z
}, ^. }3 f# N v* `6 W" p, x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 K" B7 F( c' p: N& e' O2 ^9 n1 a{+ d' b( V% C% b' t: Q
BYTE nTmp = 0;& y5 f$ r1 s4 C9 Z3 F! v# o
bool bDest = false,bSrc = false;
* O ~4 T( e; g for (int i=0;i<MAX_INVENTORY;i++); x% ~# ^3 ]. h. J7 c9 x7 C
{3 Q3 A( g, [) s4 m
if (dwSrcId == m_Item.dwId)
4 W% C0 P( L* Y, l {2 k# q s1 N% p* n; X
//id相等 则 改变对应的dest和src
2 G" c) B9 B& q$ F1 p0 k# V$ [$ a. B+ i nTmp = m_Item.nIndex;/ B/ y. D1 [/ j i6 |9 v" U3 U1 f
m_Item.nIndex = dest;
$ f- r& @0 q1 |' N" c3 d) l }0 b& r7 X+ Z6 q" Q( r( p; W2 G! m
}
) J2 o9 }/ O9 e6 h$ f" R( e0 V) O' z$ U //临时数据保存完毕,交换开始+ D2 k% ]) k! z
for (int i=0;i<MAX_INVENTORY;i++)
2 K, m3 l: s% G; l' W3 i {
6 F2 C3 o9 b# R- C j \$ J if (dest == m_Item.nIndex)
$ P! L) {2 G4 g" {! B1 S$ z! Y9 `" l {! c% N. F) p; L9 @6 h7 D( G
//id相等 则 改变对应的dest和src
9 r" }) E8 f2 q* d8 e, r+ C* t m_Item.nIndex = nTmp;
: P# `9 N. E7 ~2 i5 P }9 L' Y% z8 n! t9 c0 c
}! w3 A* w/ S5 @
}
s/ \3 i& Y6 q6 K! h' n};
/ t, f: i+ W2 M2 T-------------------------------------------------------------------------# L. V0 p; o4 W. @' [9 ]3 H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 A& Z! L1 o* P3 j6 Y8 K0 m
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 }# ?% Q: W2 D9 O" L( I9 ]
紧靠其上添加:+ l- O. ]- C2 g/ a$ m% s
if( pWndBase == &m_wndMenu )6 @4 \" B; E/ D1 V+ G
{/ {( i) O: Q S/ k* `" Y
switch( nID )
6 k, k1 ]; r: p& V7 [ { w* f# l6 v: {3 t2 e
case 2:6 s! W/ J# w. P, @$ P' E' Y
{$ p9 C1 j& s5 c2 o( V$ r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 Q$ y; J( R" _$ M, _. a1 C
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" p- [: S. E8 g! o: u& f- M5 i: K. R O0 S {2 |2 s& p, p' V& E; C
break;9 U4 L- p# x/ a5 a; n
}
; f7 u# V5 C- V; g% z' U for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 C, K. U8 s; b1 L/ P. I3 H* d C {0 C/ Z+ z' Q. ]- p' M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 M$ d; N$ [- A! W if( !pItemElem )
6 o% @8 e F4 B5 |$ j1 D- l continue;
+ P6 M7 ?( k" w7 _ if(pItemElem->GetExtra() > 0)- X$ h, c2 n- z) A8 o) Z( w6 X) A
continue;
8 c+ Q) p; B0 O if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 Z; K! n" M; o7 G5 b6 v+ ] continue;
+ _5 Q2 V9 T9 p+ r if( g_pPlayer->IsUsing( pItemElem ) )
" z, o5 ~( R+ R" [+ X& { continue;
# b4 s8 A! V4 w7 d- u! m if( pItemElem->IsUndestructable() == TRUE )! C4 `$ @0 V6 D
{
m$ J& M4 p) ^( R g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 a3 }5 C# G/ d6 F- I
continue;
' Z% D. ^* l2 |1 @* F, } }
2 _; T% a; I3 `9 m' Z/ h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( `) {. N$ T1 h- S4 u0 c+ V }
5 |1 u& \5 j4 u; A8 o4 v5 K break; ^3 j, D( w" W" P% o- r. x) d
}
( |+ Y5 V% x8 o2 K# F% G& ~. { case 1:3 t+ y* ]7 h; a! I& y( G) L. X
{" ^$ v; `' W; `
//整理背包
# X) `! G& C7 [% _6 a //////////////////////////////////////////////////////////////////////////
; e# N) w7 t$ j, _. \ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, n! t, U9 G) X //////////////////////////////////////////////////////////////////////////
' e3 i; d* {" M+ i; J //////////////////////////////////////////////////////////////////////////
; S' q2 L: M- O6 [, O1 Q CInventorySort* pInvSort = new CInventorySort;
: _& A9 h7 w$ d- P: U% @# T( w5 i vector <sItem> vItem;
1 x, e3 g$ j# {" h( R0 Z8 T# {- F( O vItem.resize(MAX_INVENTORY);//初始化大小" [% u# p" x6 V( `; ^
//////////////////////////////////////////////////////////////////////////4 b W. l: O( S, u# D) D
//填充数据
" |2 ]. y8 x% H* }: q: v8 T# S' n4 R for (int i=0;i<MAX_INVENTORY;i++)
3 d) t/ A8 A N7 E1 I {* n5 V) o0 S1 _, p" g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ p/ [0 [" w. R9 y: `+ v" p
if (!pItemElem)
/ e, `* q, K: t {
! z4 k; D; M& T vItem.dwKind2 = 0xffffffff;
, O2 k4 w# M- [* I& z% I1 A vItem.dwItemId = 0xffffffff;
* N3 [" v9 _1 n- j9 W& a8 K7 D vItem.nIndex = i;
) v% W* M+ v+ ?6 `( g }else {
& ~5 g0 c* A$ }% M- F$ o9 [2 j ItemProp* pProp = pItemElem->GetProp();
! A" b- E7 {3 h- r! y vItem.dwKind2 = pProp->dwItemKind2;
3 j8 Q1 H- v9 E2 B6 z vItem.dwItemId = pItemElem->m_dwItemId;
9 _2 d, n S X; Q9 A vItem.nIndex = i;
/ Z; \, f4 q" m }
c. \! j' q8 ~8 _" m% Q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ E* y* R4 i5 P$ S: S& b
}
( R4 `3 H+ g$ A- j3 s //////////////////////////////////////////////////////////////////////////$ a) \3 k* L& b; ^0 _
sort(vItem.begin(),vItem.end());//排序
) c u- a1 J7 Y; ]6 b* D //////////////////////////////////////////////////////////////////////////% ]0 A7 { ?4 P
//交换) | E5 V2 J5 g0 L
for (size_t i=0;i<vItem.size();i++)
# `- n* w8 y, B1 [! T( n# V {: v( M& @+ W. U5 I
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- {3 b5 k% A, B8 W# p1 e
pInvSort->Add(vItem.nIndex);
; v% x7 D$ m( T* p- M8 A }
% A m4 M, n/ | BYTE nDestPos = 0;
/ ^8 D" I7 }5 s5 n7 x/ n for (int i=0;i<MAX_INVENTORY;i++)
+ ?* x. t% a* l1 o$ v {
1 x; T, t ?. I$ Z. s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 J. \. [8 ^- v0 g- S) ]/ F3 v6 m
if (pItemElem)
4 x/ L' L8 _/ \' ` {+ c% B' ]8 k* x; c- g& ~2 S
if (IsUsingItem(pItemElem))
" u8 K+ N4 K% D) O3 k {
2 B1 Y# E+ \* y1 M: l //这个位置无法放$ P' h3 S k: x; j9 s
nDestPos++;
3 G" ]0 w! i6 w1 P- O* [7 i }
% ]. Y. Z- j3 s" V/ @' G! x }
, N/ D/ Z: P. P( ? BYTE nSrc = pInvSort->GetItemSrc(i);
: D. N" l5 L0 |0 s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 G. Q% l; h9 `* u, B2 z if (pItemElem)
' ]' o7 `5 \4 A {
; ^! I8 X& D, q3 ~ if (IsUsingItem(pItemElem))
% p6 ^6 ~, _0 N1 M* Q" O {
( E X4 Z h$ o3 ~ //这个道具无法移动,跳过' `: B, t+ D7 T+ w
continue;
, P3 k `$ b* X" O0 F8 K4 K }( G5 f- u9 F% i2 S: E! I j
}else{
9 g9 h! m1 R: c. t. l: ?% N //空位置 不用动
+ A# h* H0 Z8 I7 V continue;7 b( G" s, g- e$ p0 k, B9 d
}
! Y; Y- s! C0 B" ~ f" @/ b* N //////////////////////////////////////////////////////////////////////////0 m8 |8 f Q$ ]; q* _
//开始移动 p+ R( v# B$ _5 v! J7 D
if (nSrc == nDestPos)! M4 N2 q- v$ ~: V, B: k
{
: [; X) A: |8 r" ]. b% @( ?: h //原地不动
0 f- M5 P& G, ?+ A: W" s nDestPos++;
3 B4 p' w* h5 \: Q0 J continue;
8 R" g& s# E- p, c' N8 R) ~+ L }4 L. `6 v r. `: ?$ u0 H
pInvSort->MoveItem(i,nDestPos);
$ h& F' I) Q _$ n3 G g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 J: o* b! B, o- y5 a9 R
Sleep(5);/ _6 f. e8 G5 {' E7 D- Y* P
//Error("移动 - %d->%d",nSrc,nDestPos);& c) }' C& D3 c. B8 Z5 o% u
nDestPos++;4 a5 x4 H8 Y& j$ j
}* [, e: Q% P- N. l
//取第一个元素的信息7 }. M* v0 B# w& q
/*
$ \/ N- o, @" ]5 F/ ^ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)* o p/ S4 u; ^# W7 {4 U8 V
{! q( y" `( [) V3 I! T: {1 U
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; W( b9 g4 K/ k& p: D, Z+ a- x
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- u K. u. e% f
}
( q7 [( ], o' _ t4 J3 I, W */1 Z7 P' ]7 j1 [8 o" S3 U) F
//////////////////////////////////////////////////////////////////////////9 [- R0 U, B) x! w
break;
* W% a# o8 Z. B0 C }
7 i. }3 m3 g5 U% L }
p! C- Z' ]$ g( Y9 R4 ~}
1 Y& j, d: g0 s+ W8 @( [. a$ c9 Gm_wndMenu.SetVisible(FALSE);3 ~& k; q. V) ]1 r) f1 p2 \
/ |3 d+ C4 I) m--------------------------------------------------------------------------------------------------------% h" [3 j6 |8 j6 @9 s, }: K
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 U, Y. j. }0 b7 {& U* x{8 r0 w" a8 f" N% K( T; e
BaseMouseCursor();# ]2 U+ {" b9 r2 x( [) k( N
}
8 j) ]; d) R4 w" I" c% D: i+ h在其下添加:
! S' e1 U, H9 a9 k) ~5 G4 Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' t$ v& F5 r& o) C7 c( n( F{
+ w7 W1 T& M5 P' o- Lm_wndMenu.DeleteAllMenu();
K6 c( {2 P* k7 @m_wndMenu.CreateMenu(this); J$ l7 H l' T3 ^& K
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' _$ I9 y7 C- j2 i' S+ N2 V
" i9 s9 h+ L# C( P2 x* q- mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 }3 j; Y$ j- N! n% b
{* {6 ~9 d' h: x
//P以上级别才可以删除所有道具9 G) i& {6 m0 B, R4 _1 s
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% [/ q# R! }9 y! }$ h}
+ o8 C) l/ ^$ X; e! xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( A3 V% J0 _ u: j. A' pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) |; i) a. G& B9 W" @
m_wndMenu.SetFocus();
G* k. t, I) j v* S}3 |2 k& }0 W! s) k' V8 {* D
------------------------------------------------------------------------------------------------------------
6 f/ g/ W' i0 j' K" \*************************) o0 e8 J9 x6 G# K
WndField.h文件; c( F& h$ C" e5 q
*************************
0 v+ J8 \. q6 M' [. u, n) {搜索:BOOL m_bReport;3 R- m; w6 @/ v; Y0 f5 R0 O
其后添加:' E$ d$ s5 o' v# t) x7 x
CWndMenu m_wndMenu;
5 }. M W; k' k搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( o5 S$ j1 `; x, M' w$ q5 `$ U
其后添加:" l/ {; e2 ~7 o% q9 b+ C
virtual void OnRButtonUp(UINT nFlags, CPoint point);
$ b# y. ]8 F- w1 H, \9 c
. U& l5 K) q. C6 W9 m$ a
* s. T- r( y1 u) o' }- d! w& H+ [+ L |
|