|
|
源文件中_Interface文件夹下WndField.cpp文件 ^# n' P x5 D0 p1 M4 ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 M ?4 `7 R$ P N; U* m% W9 O
/ g3 ^8 ?+ Z' {) A+ P/ F
struct sItem
1 ~0 J* b. b- W" e8 M1 M. q; |4 z{0 L: t" _9 X& k) q
DWORD dwId;! J1 T6 N, n% o8 W$ s2 a' R* L6 Z
DWORD dwKind2;
: {1 c" u0 ?7 T- ]3 P0 [* hDWORD dwItemId;
5 X! w: Y# k- ~ d) |) CBYTE nIndex;5 M. o5 j6 f. X5 B
sItem(){
# i1 {6 g' k! ~& }- h dwId = dwKind2 = dwItemId = nIndex = 0;
; J. e8 v, S3 v, R) V- f4 o5 F}) a& e8 s, Z! @. L) R9 H
bool operator < (const sItem p2)1 b5 X4 a+ P; B( j7 q2 l/ g9 ^
{- w# D* o, s, H7 T- _1 ~
if (dwKind2 == p2.dwKind2)3 R2 O0 \* n9 M5 M( n! A4 J( N+ p
{$ n; q) g6 E6 t8 E6 a
return dwItemId < p2.dwItemId;" b3 ?0 H% y& c+ e7 A6 _* }2 C
}else{
; T4 C9 E* B/ ~# r; g0 N return dwKind2 < p2.dwKind2;
- ]9 }6 ]1 N; E' n9 E }. U" n: ]5 y! Z: L& a
}
* N8 [' t5 C% S" S( S" P};: g, M) g. ^' _/ K3 K" ~- R' w
class CInventorySort
) O0 m0 G I5 T) W. i& X& P{/ G* D+ Q* e/ f ~
public:0 m) Z8 f( i9 O8 f8 k- c0 y1 O
CInventorySort()
F: j$ I; s% {& D' H* B6 Y{2 n- X: V- ?5 y d0 |6 a
m_dwPos = 0;
7 N6 | U: L, q}3 a# Z# T9 z( C) p+ ?- c
~CInventorySort(){}9 c" ^; h2 f* ~- d* f
private:
8 n0 D$ c3 a% asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* J G4 Q; M% @( R. n/ v
DWORD m_dwPos;
4 J: b }! P4 }) ^4 Apublic:5 Q( ?1 u) V" m2 o& {, _/ o
void Add(BYTE nIndex)
% f( M: x# ]* `* C6 e! ` H{
. O% R3 g$ F/ ?( M1 h+ t if (m_dwPos >= MAX_INVENTORY)4 N( j1 Y# O6 z( H' Q
{
) ?5 x8 i) D1 O; U* L return;( m6 {# d4 R( b# `+ c
}
/ g, @: n, k8 ?3 K m_Item[m_dwPos].nIndex = nIndex;0 ]: r( ^: x6 g
m_Item[m_dwPos].dwId = m_dwPos;& E r! y) {: V7 y9 O" k
m_dwPos++;% z1 I ^6 M1 T- Z7 I* A0 W
}- F) f1 O/ U0 g- h* e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ V2 m3 |# Y2 o9 ]% l- s. r{
. V) f5 [! b9 m- Y. z for (int i=0;i<MAX_INVENTORY;i++)
( T+ r P; Y3 w- ~4 w {
# b n% _ `, |+ g" P if (m_Item.dwId == dwId)
1 [. d# z4 r5 j+ x {
" v1 ^; A' d+ l: ^$ }% r return m_Item.nIndex;
4 C* x& T% a7 g3 r2 c: _ }
$ c. _, ~6 @1 p" [+ A9 X% T }6 Y3 ]+ F. j/ Z N0 [2 ]4 n) a
return 255;4 a* c) _! ?" f
}
- p4 ~$ d+ v# `, ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: K( l# K6 T* u3 W; e7 P4 k
{; N+ p8 X" r+ d4 t0 i0 b
BYTE nTmp = 0;
& c' X; o! {* K' p6 J4 k" q bool bDest = false,bSrc = false;
* t: E' p4 X7 {8 ~, W for (int i=0;i<MAX_INVENTORY;i++)! W6 |& H( A& L
{
! L$ l% D- Y5 z8 |; Z if (dwSrcId == m_Item.dwId)/ N9 O2 C5 ~6 _. j {
{* b s6 T9 U& {$ ]% F5 f
//id相等 则 改变对应的dest和src$ {: E# {: \ P* w! q( y
nTmp = m_Item.nIndex;$ A- K0 [0 F9 t0 _+ P3 P8 Z
m_Item.nIndex = dest;
9 _: e8 s' r; r1 Q' c }! U' ?6 t; f: b3 s
}$ V0 k. ]; C, f0 G% P
//临时数据保存完毕,交换开始
* w; Z2 D6 Y& J9 p4 g# ^ for (int i=0;i<MAX_INVENTORY;i++)% P: u1 D$ x b' w% ~
{
4 [" U R; Q$ J0 D0 k if (dest == m_Item.nIndex)% @& `9 e1 \" [* D4 a+ g- g0 [9 X
{4 C+ G! q2 A! b- _6 w P- C
//id相等 则 改变对应的dest和src
! a5 p1 j! u/ M: G1 n m_Item.nIndex = nTmp;
7 L) X9 V3 u% v7 P( B# ` b }
3 Q! K, b( m. B3 _: ? }& U8 D4 N- t' I6 J* d v% n
}3 U0 _0 j. I4 {& ]
};
! A. P+ c) `( s( |" o-------------------------------------------------------------------------( O+ S n, [* g- ~8 R8 O1 b: d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
o4 }! x6 m; ` ?) ]. `# l$ c j- G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 s: q# a: J- ^
紧靠其上添加:
5 s& I# Y5 ]- K! t r- Lif( pWndBase == &m_wndMenu )7 l$ f8 |2 g$ L) e% H
{
0 x8 R D8 S0 v/ A. y0 A3 z switch( nID )
- l) Y: E3 o3 Y7 D {
" I/ t$ b; n, j- d, J1 z case 2:
! `- h* Z& _# A) y L8 ?6 u {
: e2 ?+ C& K+ i: o //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 r1 i0 A8 n1 P$ A; e
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 p2 W% E( H6 d8 n1 Z: k: ^5 x. u {
5 L+ Z7 v6 i! B% b break;0 l. w# r" Q# D0 ]6 \! a
}
4 _$ b5 v* l: m4 S# J% h, @ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' T! t y4 g1 p2 a+ b! M* G {+ Q" v+ |# p) _; f! Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. F' M/ g# N( \- Q& a! o if( !pItemElem )! O1 z! X% M/ Q' L. D
continue;
% ^3 V+ j3 ^$ Y7 [% U! d! X% b if(pItemElem->GetExtra() > 0)
' m$ F$ A8 U& B- _, ^7 K continue;" r4 z: g- j, t4 A+ P* x
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % U+ _2 M7 k3 I, R" m
continue;
) ?0 `' U$ m! O- o" l0 ? if( g_pPlayer->IsUsing( pItemElem ) )% H- ^3 K% `0 V
continue;
2 M% l' S Z: M if( pItemElem->IsUndestructable() == TRUE ); p4 H _. K! C7 f# _ e5 h
{
, `' \# K- J- s' l g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& e6 d7 r6 k0 b( E4 }& o
continue;1 h/ R+ ]% e2 m0 W
}' a5 f: H( E7 v9 u
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) ]. a7 K9 J8 Y" n* d. u
}
! V* j) T- a: \9 E" t, N break;+ X D9 I: N: X& n7 P. O) F$ l
}
' ^0 l+ V" _9 H- i9 \) D; o case 1:, K: k, u6 a6 r6 e0 {! r
{6 L8 j3 J7 G5 v; g/ B
//整理背包
; B z$ }: [! y2 F1 I+ R2 ?. M9 y //////////////////////////////////////////////////////////////////////////
9 n$ H: z. Q# _; R: K //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ T2 t+ V% D) e# A' \# E
//////////////////////////////////////////////////////////////////////////
; N9 d# i" B3 D* X2 {( U' b //////////////////////////////////////////////////////////////////////////
" Z8 J {. a1 S5 k0 Q CInventorySort* pInvSort = new CInventorySort; w* }8 c" X. N9 V V7 K
vector <sItem> vItem;) w/ K4 |; t& L) N! L1 \' e8 {5 _
vItem.resize(MAX_INVENTORY);//初始化大小
6 O' p& f3 O! j) A //////////////////////////////////////////////////////////////////////////
- m" x2 S+ J: `6 Z, A //填充数据1 x& N) V: f1 b7 |
for (int i=0;i<MAX_INVENTORY;i++)- {0 t$ h* K+ n5 R6 m2 [0 U7 @4 `
{
" O$ b; }+ O3 h6 q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* X* D1 b- s8 L- O' @# N- |" h& L if (!pItemElem)
- j2 S7 O( z, w) F4 [5 E {+ l, }/ a; X5 o- V. B, w6 N
vItem.dwKind2 = 0xffffffff;! K. z7 E ~7 f: h% c4 W! x# m
vItem.dwItemId = 0xffffffff;
/ [5 f$ b2 \9 O$ E2 z8 K vItem.nIndex = i;5 I) I" R7 e+ G6 C. u
}else {
1 J, G: L7 j) `: E' V+ { ItemProp* pProp = pItemElem->GetProp();& J7 N) u6 y* v
vItem.dwKind2 = pProp->dwItemKind2;
. {) c! g ~. A' B1 ~8 ~ vItem.dwItemId = pItemElem->m_dwItemId;
: W3 V/ R+ d) H% @4 z& ^3 q5 e& [4 r8 n vItem.nIndex = i;
- E( b/ c& j6 K; o3 m: w# T, ~ }
# O; j' p( @4 v8 A" o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% u8 w0 U2 }# U7 T" s8 D3 V3 m
}
9 c6 w& Z# s" q /////////////////////////////////////////////////////////////////////////// x0 D% m7 K0 c
sort(vItem.begin(),vItem.end());//排序0 W$ ^" {+ K7 z
//////////////////////////////////////////////////////////////////////////! S' k7 C6 V: b' {/ E! p) H
//交换
' ~9 J8 a& \4 D3 x7 h for (size_t i=0;i<vItem.size();i++)
- ?& R A- ^* f: ^; U( }0 u {
0 B l) D; e: Z' O //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" O) k' ?( }* H, d& A
pInvSort->Add(vItem.nIndex);
& l! d0 M3 Y* _- h" | }
( \# p: n6 i! x BYTE nDestPos = 0;. V9 Q" c+ N, R0 v$ g+ N! j' q
for (int i=0;i<MAX_INVENTORY;i++)
" V) b: c& a: y0 c) f& D7 y @ {
* _+ w& B" U+ [1 A) B' \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ G- J: a' Z' W* v' m
if (pItemElem)
5 Y1 z( Z7 I+ j# a% n2 y3 p {
0 k! \% Y: V o. Q' a7 V l if (IsUsingItem(pItemElem))
/ L z, n# U% k) s: h' }. [ { m o. s, j6 s
//这个位置无法放
" }0 G7 y F( ^ _3 j nDestPos++;* _0 _" y( W. F# p$ a% \! T
}* V: [$ A: g, E
}9 z% i# T- N1 v: B$ n& \
BYTE nSrc = pInvSort->GetItemSrc(i);
: Q" S+ H% q7 ~# _& U pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ B5 M; |5 u/ y4 F; K8 h0 g, M
if (pItemElem)% ?. {- |0 X1 L6 Q7 A
{
$ T- P. Y* s# |( a: Y if (IsUsingItem(pItemElem))1 [. N/ I0 H) x6 e& t4 f$ h
{9 _% U( V! D3 ?% q9 |
//这个道具无法移动,跳过
9 A3 c3 V$ A, `+ M6 ^# M6 T. M6 ] continue;% ~7 Y- k: D( X. G+ z) z
}
) n# }% x; P3 H8 `+ d W# i2 e8 y }else{
# L% G) W# R8 P/ ^5 e) ]: B //空位置 不用动6 q: h. e# |' q4 N
continue;
, U. n* H4 D7 ?+ S; w5 L! H }
! q6 ?0 {. P* w. g //////////////////////////////////////////////////////////////////////////: x( |! ~% N3 [& m R) P
//开始移动
( u, C1 H$ U: M3 p6 k- \2 y1 o5 C if (nSrc == nDestPos)
V' r) z3 ]0 `1 p, i8 D, N {+ s* c4 g$ ]' w D" c
//原地不动) M1 e" Q, k' N7 x( @6 x
nDestPos++;, z) j W) S$ `- k; @ f
continue;
" a$ N9 O: |4 }/ P } J* k" E+ S8 ^
pInvSort->MoveItem(i,nDestPos);
2 m: W) b& q: p' u+ m; V2 I3 j% G g_DPlay.SendMoveItem(0,nSrc,nDestPos);& ?8 c* C S# t0 x! s3 k* j
Sleep(5);4 d% J M* h$ H0 X# R1 @
//Error("移动 - %d->%d",nSrc,nDestPos);
( G4 G5 H5 }. A+ l nDestPos++;
' \) D' l5 s6 k# {5 I) N! W1 T- j n }
) d3 C* s* _8 D c6 B //取第一个元素的信息
/ l. V0 l1 N c$ n' L' {7 M /*3 L' O2 p W/ M# G* C" U; ?# J( C' \4 O
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 L3 S* c X* |, C) R8 }
{- x) s! B, E* R/ N0 }
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
4 o: ~. y. _: F% O5 j. s0 G1 m# J g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); L7 A$ z7 m% F" l. r# c
}
; ^/ {' ^6 h! Z7 N" ^3 F9 A */
( }2 z# W( ]; R //////////////////////////////////////////////////////////////////////////
3 O; @$ d$ K+ c0 _3 }) A3 q break; \5 j8 F, I% v, J' A* ^/ V
}; e6 \$ \- Q5 s( ^7 ^" L2 {
}
( I+ d/ t/ Q, Z" w}
# N, I0 W; }5 n. @+ _) [m_wndMenu.SetVisible(FALSE);; r4 Q( H* X( \: F& D
4 o c4 L/ z7 d" s' | D--------------------------------------------------------------------------------------------------------
8 k# S' q* k: U7 y* X( \" K& ? E搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 k- f' Y- c& d6 ~* P# c{. ^0 k# v$ K4 _, n: F
BaseMouseCursor();( z# A7 b# Y+ b1 D
}; U3 Z u9 s Q7 v+ C7 B
在其下添加:' ?4 ^( B5 r' b+ b9 J4 @ R6 Q4 y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# g8 F: c- V6 z2 Y9 \{0 p8 |4 O p1 N% V! \ N0 {
m_wndMenu.DeleteAllMenu();# L- ]; l3 \$ }2 x# `& h
m_wndMenu.CreateMenu(this);8 m8 S' d' G; h
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. w5 U- ?! Y) y1 r& `: s
5 d N0 o: Y* X0 d2 e. K" _+ Tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) e& ]$ n0 @/ x5 {' ]- P! h
{1 q) U. N6 x# I6 Q& ?1 B7 y
//P以上级别才可以删除所有道具
* n1 q2 h7 H6 Y1 J( J$ n9 M3 D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 Q! U# r" q; \0 b6 ` A}
0 T5 `1 v8 l( E7 @! rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. H5 X3 m0 F- n. Q" ^7 B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 U5 w$ B' H8 R8 S) j8 \
m_wndMenu.SetFocus();+ v$ ?7 ]! X/ `
}
, l. y/ c7 l! k------------------------------------------------------------------------------------------------------------
& L; b0 G# u# t+ T& @( F: E6 d*************************+ X/ k8 ~( e" G1 o" `
WndField.h文件8 b+ c d' M! W- N6 @
*************************
! ?, D5 |, H/ [搜索:BOOL m_bReport;
) w. k- i4 T5 ^7 x其后添加:, F: D1 ]$ h8 d# L! j8 [; F
CWndMenu m_wndMenu;
# B% E& U. c6 e( K搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" L6 D2 l- s4 @7 V1 C+ k5 q: G
其后添加:2 F, ^9 O5 `8 o
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) `0 x3 `0 ?, p# M, d' t* G6 c4 n/ R1 B/ r. }4 C& N) U; a: @
& G, n1 K5 d$ y4 F) e* ?. Q
|
|