|
|
源文件中_Interface文件夹下WndField.cpp文件 h- N- c- F1 ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# Y8 O5 Z. N9 S& B5 |* O$ H
. K. @" t: v" m f U* J( c( m$ k. ustruct sItem
4 ? P( Y+ y1 s+ U9 {+ V{" i5 u$ p' J' w/ ?) l$ I
DWORD dwId;, ?; A* j: X P' r- a/ Z1 g
DWORD dwKind2;
" J* Y4 c. O2 m2 _# s- S/ Y2 P7 hDWORD dwItemId;, H9 Z; D; E# \0 A$ ?
BYTE nIndex;
# X+ `( y' k( ^! C' l; h2 qsItem(){% a8 c* f2 w: t9 z7 R4 N
dwId = dwKind2 = dwItemId = nIndex = 0;7 H6 W( T+ B4 R: t. K7 X, k% K* B
}
8 @+ `, I$ c9 L' N$ v/ p% ~bool operator < (const sItem p2)$ }0 L4 u0 L3 o, E+ x
{; z' x; r) z. h5 }, q: d
if (dwKind2 == p2.dwKind2)) g/ ~$ [/ @& Q# h, N
{
/ o) ]7 d2 g$ q7 i- ^( U9 ^ return dwItemId < p2.dwItemId;
4 o0 I# W3 n+ g' v }else{
* r$ R$ a( i: y0 H1 t6 v* n2 l: C: ^6 X return dwKind2 < p2.dwKind2;/ A" W' F- y7 [0 ], S
}
3 S6 ] C6 {% T" M) R8 L3 @& Y2 j}& {/ `# q& x4 f9 b0 k, j' Z6 [: M
};$ y0 m* t% l3 I7 c$ f
class CInventorySort
1 i( {) M$ G0 e{ W l5 a& G. R( t* R# l
public:) w0 p: g" O7 ^) o
CInventorySort()3 Z+ K, ?- G6 S# A
{
5 p6 s! H0 n& X3 z! M m_dwPos = 0;# f, {% G! C0 m$ R3 f3 e9 ?1 f, H
} ?% ]# R; s+ y& V4 E/ U2 T
~CInventorySort(){}, l! C: b7 n, z9 y0 u h) k7 J
private:
/ X0 K9 h: B: ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ M1 v' [) y: S& t; V/ \! V
DWORD m_dwPos;
% m7 K* Y; |) V i- ypublic:
+ x6 m% x$ V) J- N& Lvoid Add(BYTE nIndex)* B9 Y) z3 V+ ~ O3 `+ |9 U
{4 K7 P) ~/ u0 _: o+ A9 ~. h6 E
if (m_dwPos >= MAX_INVENTORY)! S, C& k# l' ^# _. L; }0 E
{+ U7 w$ W' r& p; W' t
return;
- x$ Q. g/ N3 e }- {5 ^1 u" _9 V7 x5 P
m_Item[m_dwPos].nIndex = nIndex;2 z7 c( {4 X W6 f" O; V: u
m_Item[m_dwPos].dwId = m_dwPos;7 z- C8 k! j) J
m_dwPos++;4 j. i' L4 b* A
}0 G+ ?, G% B4 X) Z! A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% \( r4 r. n! P0 m{
% V' g; Q" o. n/ v/ n" @ for (int i=0;i<MAX_INVENTORY;i++)
; s2 d; l' P3 {" \ { B3 H$ B8 E" {. J
if (m_Item.dwId == dwId)
1 B8 v6 c5 Z: K' ~ {
1 M/ J3 I- M' f return m_Item.nIndex;
2 F- \. F# `0 r# ^" o, M }* m. N/ S P2 L5 r+ Z3 z6 V o
}/ b- U2 s$ y. @; Y$ c
return 255;- M6 r. C, ^7 F# Z# q) k
}
% n& a' ~: f+ Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 _5 E9 o" Z: n$ n{" I2 G& x* w4 e' S+ |& c! H: Z
BYTE nTmp = 0;, o' b! S, O6 N6 y, C! B
bool bDest = false,bSrc = false;' W$ \6 Z! ^' A% z; D
for (int i=0;i<MAX_INVENTORY;i++)
7 O( R+ t" T# h. P- [3 s {: e9 S0 C) ?' g R0 a$ ~
if (dwSrcId == m_Item.dwId)" b$ b2 ]9 K y5 N
{; Z# u/ C1 D3 o
//id相等 则 改变对应的dest和src
* e1 v/ l) j1 z- W2 m nTmp = m_Item.nIndex;8 q# F; V1 p* r7 ~% U/ ^" J0 U
m_Item.nIndex = dest;! i* | J& @; c" D& v
}
# ]7 B& c2 t' N5 w1 ]& r' d }
6 }% b" i4 ~: Y' |: Z //临时数据保存完毕,交换开始
/ E; s* O7 X; b for (int i=0;i<MAX_INVENTORY;i++)
" I/ h' B# U+ F5 q8 v, m; C6 X3 H; v {
: ?/ ~* K& V! n" e7 V4 H3 n if (dest == m_Item.nIndex)
7 N5 y4 a3 O, z% M8 d& F {# {& N2 o0 q8 M. l
//id相等 则 改变对应的dest和src
+ Q3 x2 S8 P- V% {8 Q( l T7 ^" s+ F& { m_Item.nIndex = nTmp;2 o* v! t" J4 W7 k0 I& T3 m) J
}6 C6 X+ Y- `8 U3 l) p8 u
}5 b! q7 i( }! a4 o' q
}5 {6 A/ U, [8 \# n
};5 j& a& Q) y) x
-------------------------------------------------------------------------
* D1 ]2 U2 Y; d% E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( w I1 j$ ]) s" _0 f搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' A# F: a% `" H紧靠其上添加:% X- [* e* N$ W u
if( pWndBase == &m_wndMenu ): {$ G- V& E/ c3 k1 w) |
{
( l- d6 n* j: U- R; c- {% h* e% y switch( nID )
& F5 Z8 E8 Z r& R( P {% n6 n% b/ I# `" ]& l0 t( ?- M0 [$ k
case 2:+ C- E5 K$ k6 f
{
% t* l& m! Y( W6 |! W8 @* } //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% {" l: w2 R" `" y' P# e1 \, P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 k6 N6 w$ i0 u* ]6 u* D# U* X4 R
{
) R: Y6 e7 Z6 C* H8 Q break;
# D6 S; l. w6 g! f9 Y% X/ A }& D( L/ Y- m, v- o J# z# |0 ?
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 @$ ^5 G0 s: E e2 M0 p2 n9 Z9 C {
b- b- U0 z0 m+ _, Q! U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 o, Q6 F9 L1 \, j3 K$ r- n2 n# x if( !pItemElem )- A2 k3 ]1 p' B; q0 h" k
continue;
+ E3 m( \2 w; h8 o if(pItemElem->GetExtra() > 0). }. l* j3 T* k! L* A$ a
continue;+ `) O+ ^& u" d/ |4 d7 I
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; e- O0 \8 a* f. I+ [6 V; u
continue;' l! S7 t7 f" q( W7 E- ]
if( g_pPlayer->IsUsing( pItemElem ) )
/ C& l, R0 ~& n$ ~) L' s( ~ continue;, s: x8 e3 k7 ?
if( pItemElem->IsUndestructable() == TRUE )
( X, O8 {) w0 ]4 q) d {
+ m" q ?# Y r* D g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( u/ c% J- B- ?8 W* x; W continue;' R; T- c+ E3 {
}
; w( r2 U1 h6 K$ q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% n9 V+ b$ x6 N. w }
- G5 T9 a; J. T. S+ r break;2 b7 A1 L5 J/ G7 {, o! O2 w
}
. V" ~& l: N3 H) |, s0 s" [1 c case 1:
8 Z* _- a# A7 @5 J6 x0 d% o {' |+ n5 D% E2 V5 E: Z$ K Q' T. Y
//整理背包
' h: o1 {: D V3 {7 Y0 x q4 { //////////////////////////////////////////////////////////////////////////
8 K6 l- g6 {; {6 j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 s7 l( ~- q; i1 t# L0 z
//////////////////////////////////////////////////////////////////////////
7 g2 a' N( v, Q( M3 R. c //////////////////////////////////////////////////////////////////////////! Z) {; f& ^$ a0 Z4 I
CInventorySort* pInvSort = new CInventorySort;
0 p- V* b+ A) P8 F vector <sItem> vItem;
' q8 D+ |! q; _4 E- [* N- A vItem.resize(MAX_INVENTORY);//初始化大小
" y; k6 r1 B7 m( a- I7 P //////////////////////////////////////////////////////////////////////////
- M. ?& @ U- w( a K# L //填充数据
" ~! M% ~; n0 `0 o! W; F for (int i=0;i<MAX_INVENTORY;i++)
3 C& T3 B; z( n5 H, D, ?; w6 |7 ], k {
' B; d. b5 t' C7 u) ~& A b/ P+ z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* t. r% ]5 f- d# q7 a
if (!pItemElem)! U, z& P0 S$ V( f3 |5 \
{
# D3 A, v+ G& c$ K' ^; v6 J* _" s vItem.dwKind2 = 0xffffffff;
9 s) G' f$ D4 j. p& e3 k! v0 z2 R5 ] vItem.dwItemId = 0xffffffff;
/ }& y- ?, y+ a0 @- c) V7 j, O vItem.nIndex = i;0 V2 ]0 Z6 a" f
}else {
) J- w6 `( d2 Z" x+ b ItemProp* pProp = pItemElem->GetProp();" O, L2 D5 Q, T7 [+ K d9 T! I9 @
vItem.dwKind2 = pProp->dwItemKind2;
; a/ ~! A1 e3 r vItem.dwItemId = pItemElem->m_dwItemId;. d( U6 m7 r; N+ {
vItem.nIndex = i;
3 l% T1 R* q, Y; E# f$ ^ }
; k3 F* p$ G9 A- H //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 t4 v7 i- t: S5 U8 u. P }
( N1 x. T1 S. M1 ^+ [& Z6 l4 Y //////////////////////////////////////////////////////////////////////////+ R3 a7 }/ D, e( I6 T
sort(vItem.begin(),vItem.end());//排序
1 `4 g1 R- [- Z; ? //////////////////////////////////////////////////////////////////////////8 e) w0 ^0 V- W) z) o
//交换6 X) s z5 v: f3 r$ U! N: Q
for (size_t i=0;i<vItem.size();i++)
& {( w8 u- u. o! X6 v {
% W) d5 v ]% q5 s( D3 a1 g1 J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 `9 j( W, n- V$ h
pInvSort->Add(vItem.nIndex);8 P' H/ j# v4 O
}4 J' V' U# L% f
BYTE nDestPos = 0;
& f+ x$ K L9 f3 ^ for (int i=0;i<MAX_INVENTORY;i++)
/ t$ D; _9 ~( p {
) ^2 O# J) H1 x; z5 ?0 H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ V7 [, |. {& \8 \' s" H if (pItemElem)# F( w1 g0 Q, a. x/ s) n* t7 h
{! H- x9 V W/ s" M, }* Z0 H
if (IsUsingItem(pItemElem))
' l5 F, F& }* S3 R8 E {- G. e7 V: l# a! ]1 h3 k
//这个位置无法放& K" {- n: A6 T5 M! B: {; K9 P4 |
nDestPos++;
6 F/ b a* M" `" ]0 J9 Q }+ g. V. z- ]/ d0 r) |
}* h; Q* @1 t" S# G
BYTE nSrc = pInvSort->GetItemSrc(i);7 ^3 w( Y3 y9 W8 y" I! Q. k( Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- N& ~% j8 O, d
if (pItemElem)8 Y# l8 a3 S* _: _
{ z! r3 `# \, m+ B
if (IsUsingItem(pItemElem)); e! _2 o' D; P( [8 S
{
9 F% } u( a1 ^' S //这个道具无法移动,跳过
8 [. C+ \! @) R/ H2 ~1 c continue;
4 v8 y c6 A4 h }' ~8 r$ y& Y: Y, u! L# |4 u
}else{
- Z4 d) Z4 g' q$ d1 a. | //空位置 不用动/ {0 }7 K6 i! X" D; n
continue;5 g) ?; v" C ~$ p
}
+ ~5 b# B, K5 j+ k5 N //////////////////////////////////////////////////////////////////////////8 Z. u/ L6 f4 t* v6 k) B9 U* t! X" s5 \; J
//开始移动: r+ Z* w/ Q/ w/ x# C
if (nSrc == nDestPos), P% ? ] |* J' n) Z5 _
{
2 L7 Y; g0 Z s* W //原地不动2 s& H0 \8 j( e6 q5 t
nDestPos++;
" l; H T6 O: j2 O0 z. F continue;8 `4 P" e% [8 `! a1 S' ?% F3 T
}
f; x+ Q# j! H0 l% y9 x pInvSort->MoveItem(i,nDestPos);
: w: _) y! M) {& r. P g_DPlay.SendMoveItem(0,nSrc,nDestPos);, `# ^. a" R3 b& U
Sleep(5);
* t: z: W: S/ \% S" c' Z //Error("移动 - %d->%d",nSrc,nDestPos);! z$ i" Q g5 ^' }2 f& N& H
nDestPos++;
; M7 K6 P2 J7 @( u/ ` }+ t; d+ M! f6 Z" j- J& c, Q" y
//取第一个元素的信息
1 M# d% n# T2 `- C. `" P' y; g" M /*
; s! u) `. E6 X, D+ z* \ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 h' b# k y' E% L, r6 N
{' C/ }! {0 {) |! n) I# c
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 w( |; k) T5 n. ^0 w( i g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) E, r1 `! u3 b( @; D# ? }
# ^. r* a( a1 H) j1 A */4 q1 n. r, O. E! S+ [+ o7 v
//////////////////////////////////////////////////////////////////////////6 f0 R6 I, q' V7 q7 V* K
break;
5 w- @! I n2 P6 G' ^* [ }
, H; a9 \, Y. U0 G- L1 |2 N* h0 ~ }
+ \" m, B$ K" r+ c# l}& y6 o# u& t# U U
m_wndMenu.SetVisible(FALSE);$ W& q- c1 H. f+ t7 S
3 L! e1 Q2 v1 C
--------------------------------------------------------------------------------------------------------( I: S% e8 t9 R% }0 g% `7 E6 N3 O
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! t2 `: v* @* h& f, Z* b- K
{
5 ~! h6 X( i1 n; FBaseMouseCursor();+ y' ?% [: _& r* @/ s3 _
}$ P# W+ b9 Y: R5 ]! K
在其下添加:
( @2 {, w x; d) I/ V1 a! Vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 ?: ?/ T# W# X1 G2 q6 z% {; @7 t{
0 l3 u; u* S* s: Hm_wndMenu.DeleteAllMenu();
$ w8 {6 a6 j- X1 B: U; cm_wndMenu.CreateMenu(this);
) [* A3 x' z' @m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% ~/ ^/ m9 u$ f: `0 r2 i7 E" U( |- j8 E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 R+ Z8 K1 T, Z, k" m
{
6 f9 J8 @. E" k. x' v$ ^ //P以上级别才可以删除所有道具0 l! w4 A- ]: p4 w' J; C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, _1 O$ G# G; s, z. j C
}
: m7 G( K% s. k6 V9 C1 q! nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) ]( m; U" n7 \. p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ g1 b5 B9 G: O* G3 n- r
m_wndMenu.SetFocus();8 d: I5 B" D }8 l3 m0 K* Y+ d2 k# X
}+ E: q7 x3 l* L0 c% K+ y
------------------------------------------------------------------------------------------------------------ B# d! O4 S7 u# g! w; x
*************************
0 e2 Z! ^! [0 b! j4 lWndField.h文件
; {- p* s, | T9 {3 X*************************
1 ^* Z1 h$ c5 L搜索:BOOL m_bReport;
: f% X0 a& _5 a8 M) s其后添加:
. y% G5 z8 v5 {( @6 s: ?CWndMenu m_wndMenu; C( K- r8 u8 U% U" {+ U% W
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 b: v' r' F# h( J6 Y7 g
其后添加:
3 V- R% u. l3 rvirtual void OnRButtonUp(UINT nFlags, CPoint point);# S9 n0 p. P2 F- ? c
8 Y( j% R1 f2 H* M! K |2 B# F& G5 X! n/ V# F0 b1 Q& _
|
|