|
|
源文件中_Interface文件夹下WndField.cpp文件( Y/ U$ n; P! N1 E: k5 C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" W5 o# {( O5 H& d) D1 I
' B. Q* H3 k. H. R) M: I6 @struct sItem
. ~# s0 ~/ e* F8 a3 `# j{
; x ?" C% K. H& o% T3 zDWORD dwId;% `( n5 Z% `1 U7 |% t
DWORD dwKind2;* n: s9 P7 k0 u
DWORD dwItemId;/ {, F6 G6 p7 u- M3 {- W7 }
BYTE nIndex;9 X7 U. j" e; V6 N& o
sItem(){6 a2 R( E: M6 X; y) `4 H( Z
dwId = dwKind2 = dwItemId = nIndex = 0;
6 _ u% t% [' }* q( S4 G5 z}% C+ R" ?# g+ n$ U( t, V* J
bool operator < (const sItem p2)
4 z1 `. F$ r1 M- D% G3 F{* x( w( x) D# c1 F
if (dwKind2 == p2.dwKind2)
; _) R1 s& o; U6 F {+ t. ^' y/ ~$ d
return dwItemId < p2.dwItemId;7 h1 t' B: h1 B9 q( K
}else{
* o$ G+ N6 N( n4 T return dwKind2 < p2.dwKind2;
2 n# N$ ~% x x }2 @% n. E8 Y3 k0 O% M( u
}
# o+ A. ?( h" d# D};
, Z- \; Q6 o) M; Uclass CInventorySort
# L) H8 Y8 n/ Q% o' _+ w2 i, U{1 {0 p& `1 X' _( s' L5 H6 g- ]6 t" Y
public:
% \; b" f6 F# rCInventorySort(): ]' ?4 t0 Q9 k0 l b
{
. c; U" s4 y" v3 Q8 W8 g m_dwPos = 0;
6 T* o+ h5 |- O& x5 y I; k}
4 V# I9 [, `# i~CInventorySort(){}
7 H6 I* C1 H7 C0 U& o1 ^/ d& W J3 tprivate:4 T, N6 S4 r. L. k9 @) b
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# g. }; E- f2 j, }" |6 RDWORD m_dwPos;1 D- a' N+ x, `- v% D5 y1 k
public:
0 ^, o! z0 T$ S3 Bvoid Add(BYTE nIndex)! h9 Z" V$ Q$ a! }' F3 l' \2 j
{
+ g+ B6 ~; k4 D1 o4 w/ t if (m_dwPos >= MAX_INVENTORY)
" G) o; V2 W2 X" R2 S! J3 z: H {
% L/ w/ H. X6 |. e return;
4 |" b7 R# G* o }
1 c: ^$ h& ?* H% x$ I* [ m_Item[m_dwPos].nIndex = nIndex;
5 d& e( \# k% D; x1 _" N1 _# p m_Item[m_dwPos].dwId = m_dwPos;
/ ]+ k: e( n& j! E m_dwPos++;
' n: B+ B, r* M6 p% L}
$ _( i0 a/ e) P [1 e7 |3 gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ W3 `7 I4 `# u5 l/ {{. X$ ^7 g0 f0 ^: Y0 g) ]
for (int i=0;i<MAX_INVENTORY;i++)
% m; M$ _$ K/ g% J {
2 M8 { C( p$ b x P if (m_Item.dwId == dwId)
$ Y6 `9 Y' h/ N {7 W! X) D+ W* @. ~
return m_Item.nIndex;
. ?& k: q- N$ C4 d1 R. j }6 W' u: T) Z; d+ i5 Y
}. H7 b$ b) D5 P7 Q4 { d
return 255;, L) C, ^2 y7 w) ^9 h* K3 O4 V( r) |
}% { Y5 t% ~$ b9 L( D$ t* e
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 C* m# f5 M0 b. L% C
{2 w; |6 Y9 P5 q" \- A1 b, H8 I
BYTE nTmp = 0;
! N4 m* K# t4 S, B4 M* O bool bDest = false,bSrc = false;: x! g( d# d$ d# H7 `$ w# W' t
for (int i=0;i<MAX_INVENTORY;i++)) A' ~* D2 e5 x& [
{
( I ^! g" ` p( u# {: b8 W3 L if (dwSrcId == m_Item.dwId)
, Y* i# y/ M2 n/ E4 u/ v {
/ M! b* K( V5 [9 E4 F9 D //id相等 则 改变对应的dest和src
2 Q% q. o: L! \9 f# R nTmp = m_Item.nIndex;% J# u1 Q6 _% {* }
m_Item.nIndex = dest;) A$ h5 T# m9 X+ X( G
}
- `, I% ^; v+ @: ~ }5 R, K1 y# y: R. K2 P
//临时数据保存完毕,交换开始$ A, k v+ P2 |3 @. Y
for (int i=0;i<MAX_INVENTORY;i++)* G- {3 t" B$ ]
{9 p# u8 G) @0 |& s9 a( c
if (dest == m_Item.nIndex)& K! m& O$ c _
{! o" w$ G8 b2 |* X
//id相等 则 改变对应的dest和src
& w3 t. A/ @! w( z4 p4 B% ~ m_Item.nIndex = nTmp;
8 W" B: |6 Q0 r/ ^ }
# h! N0 n& i/ L% e8 w }$ G% p/ E3 Z( U- U
}
( G8 V/ D7 ^; I0 T) {* W};
( K! @, E. K. A( H v-------------------------------------------------------------------------- x( L: L4 J# l0 e* ~) P
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; m( }4 Y4 W$ a4 ?7 g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ A/ S- Y# d1 u+ l7 F紧靠其上添加:; t% K8 }( `+ r% B2 O
if( pWndBase == &m_wndMenu )
6 ]' A) s9 v4 V( ^6 h{% T. a3 C, ] q6 D
switch( nID )* P; J M; _ @& l# Q
{
& e3 d, L2 f& f0 Z" @2 Y+ n case 2:) ?9 P/ E7 ~- A8 n7 }. M
{
9 @( D+ D" `& o8 w- `& I //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. o' _- ?% ^. V/ ~4 P if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% S' D# E5 l `, L6 m) o8 X {
' g# E( M- ~0 O* o% b- G- a break;
3 v. [$ ^! T# z6 c- \ m3 T3 { }
# i& w. F4 `) R) U. ^ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, }. ^' z6 r: O& O {
! L9 @' J2 B b" |; r0 W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 [5 z1 k% P& h" l8 e
if( !pItemElem )
: n4 N y7 H+ J0 S1 w& S4 b continue;
6 Q/ D5 e( w/ L if(pItemElem->GetExtra() > 0)
) h( ^% T4 `9 Y9 k7 `9 B) [ M" } continue;
3 q8 W# Z7 c' C! k# E) h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 W5 i/ y n. z; [& G( i
continue;+ X: w( e' a$ {: ^$ T/ [2 a
if( g_pPlayer->IsUsing( pItemElem ) )
& q5 A, B& `, ?7 H; F' \; u3 C continue;
; K% M, ^, L5 e5 Y% u. ~# m if( pItemElem->IsUndestructable() == TRUE )
5 p$ `# K0 ^( ?3 F {
/ a, c; U% o4 W2 U q6 D g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% Z( g5 n+ c v+ x1 G9 Q continue;% J) a5 t7 v; R
}8 L4 y8 O1 B3 ~1 k4 O" G9 Q
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' f! U- D0 R1 z+ r) B }
6 k* V9 V+ D6 G' i break;
t% A* Q7 @$ m4 J+ n; ~/ e5 o }9 @- p9 n7 R( W% X9 L
case 1:
5 c* q$ t/ L- L2 A9 P5 {% B0 w& d {
% I( ~4 m- b8 U //整理背包
9 c# @/ X7 N t+ [ //////////////////////////////////////////////////////////////////////////
. b4 _$ S K/ I1 j1 B' m4 n //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) Q# e) H1 T8 ] ~
//////////////////////////////////////////////////////////////////////////' o4 Y( R" W! {/ p" D2 M* q+ w# h
//////////////////////////////////////////////////////////////////////////
8 D# N6 ^; s% }' o8 R CInventorySort* pInvSort = new CInventorySort;
* i q* l! [8 R vector <sItem> vItem;. s+ k3 F; Q* \3 ?' Q4 |- E
vItem.resize(MAX_INVENTORY);//初始化大小
0 E* l2 s$ P6 p //////////////////////////////////////////////////////////////////////////; E) I, F, U8 V
//填充数据
3 `7 n9 C. M2 M$ Y( A5 J. i& _: q for (int i=0;i<MAX_INVENTORY;i++)
( }; t" j- h5 F5 E4 V: L4 H {
8 l2 d( h* U6 C, X; } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! t8 W; D& V! l# K6 [6 {: | if (!pItemElem)$ W0 R0 s( w6 {9 N2 F% ^+ v
{
+ J# Q+ {5 P. I! s* w vItem.dwKind2 = 0xffffffff;
2 c; J& |4 N+ H: g- U! I vItem.dwItemId = 0xffffffff;% G1 N3 l& S' I4 }
vItem.nIndex = i;
% S7 ^( e& }: T }else {; {2 v: n8 p4 F7 M8 ^& K
ItemProp* pProp = pItemElem->GetProp();" x6 w4 W! y! |
vItem.dwKind2 = pProp->dwItemKind2;, l w+ d, O% S: X3 M1 i( R
vItem.dwItemId = pItemElem->m_dwItemId;
& z! I! A& a# i9 {6 I vItem.nIndex = i;' M3 m: ]# M! C" [
}
( G2 z, x" ], W //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 P: U/ [( ?4 ~6 |1 g: x) S
}$ P) }3 p4 t1 `% N9 Z- A
//////////////////////////////////////////////////////////////////////////
* |% q; R/ L+ e9 F% p* M sort(vItem.begin(),vItem.end());//排序
, O9 ^% M( I1 ^# C6 A, S% \, R) J //////////////////////////////////////////////////////////////////////////" A8 F9 W% x+ W* r7 J
//交换
9 w: V' w6 ?$ _0 M4 c- C: n for (size_t i=0;i<vItem.size();i++)* [+ U+ {9 J; g: t
{1 J, z# F3 E3 p( r) W* y+ N7 j
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- U- v0 u- j) j+ r; V8 ] pInvSort->Add(vItem.nIndex);4 P4 `: u; d0 G) ~. M
}4 I2 \) j/ v7 K" Y+ p* w0 |: ^
BYTE nDestPos = 0;
1 N* B* y. _+ L+ X for (int i=0;i<MAX_INVENTORY;i++)
7 j" O4 T7 G: M- U( T {
* R# z3 c' C2 S1 _ x- t2 O1 g- Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% ~$ r W6 L6 f: r8 Q" m: ~; ?& K7 u
if (pItemElem)' a/ f2 d9 W* b1 s/ p8 x
{
) S n( h, q0 G. W- D if (IsUsingItem(pItemElem))
; ~, ~3 p) v9 q6 { {8 K J& d' c3 U" ^$ P% f$ ^. ]
//这个位置无法放
- i7 V# H- ~" r9 D% U nDestPos++;) e" H4 a' `: M8 L0 y
}
9 A8 ^+ s- s8 G) o: P% u }
) H, |8 \( c% n7 |$ K. Z BYTE nSrc = pInvSort->GetItemSrc(i);
4 n& g, E$ R9 J9 z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# I" W1 i# C$ B if (pItemElem)& m, }. v! s& G2 h( {- M- \: g* q3 [
{+ j1 |4 u3 m" S1 ~ r
if (IsUsingItem(pItemElem))
2 U" p4 a) B% Y {
. K, e1 j6 I6 s0 E+ s //这个道具无法移动,跳过5 h5 h5 w( v2 S2 b1 a' @( u5 h `
continue;
8 h4 E) c) c6 ]( O+ f }* }" n- |( {& {6 ?' ^3 h
}else{+ Y; o4 x& V f+ L: [+ j
//空位置 不用动
, S, j1 {: w0 y continue;" c% @, M$ V5 Y2 H
}3 q: W; K, |* z( `
//////////////////////////////////////////////////////////////////////////+ M7 h8 M! f& m
//开始移动
. u0 T, e4 l; m' T) ^; G if (nSrc == nDestPos)
, w! }, J9 v9 `6 |& P7 A) V; k7 p {
# S$ _9 E4 e7 z0 n } //原地不动1 L/ @; ]2 o7 F6 A
nDestPos++;
2 g* t' m+ S( H6 Z4 @' B, N& w continue;9 ?' @. G1 q% H' {# N6 k! o D# f
}
) z1 k. a" z% I8 d, M pInvSort->MoveItem(i,nDestPos);1 W3 \& J( E3 H2 i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
% N* J: k, C" A9 P9 n. ` Sleep(5);
3 Y8 P) d+ u% s+ k% N C7 j' @ //Error("移动 - %d->%d",nSrc,nDestPos); N! g) y1 m, ^4 c3 o# w
nDestPos++;
N, R6 ~: @5 ] }, A$ D6 t* U: c% v# P( T5 ^
//取第一个元素的信息$ y, `1 Q; W. t, g7 J- v# J5 E7 Y& i
/*8 m/ N: P7 h1 c- S) h; b4 c% t
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ S7 C$ I, T' `3 v C
{1 \2 ~) E4 \6 L* f d. \! A
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' `+ g8 R& z# ^5 e% V
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 I6 L( n! {) Z! g1 n }. O$ X) L1 e }# \5 Q3 ~# g" r
*/
6 R8 ?( i9 |5 i0 h7 k+ e1 K //////////////////////////////////////////////////////////////////////////
) M( t" }5 }. \! u5 C, O break;% H* m$ ~" n- `, k6 G
}4 ^4 w i9 p) \. i
} 6 R# K6 _9 K1 b. C p o; K1 b2 _
}+ ^4 R9 h4 m) K' _& y
m_wndMenu.SetVisible(FALSE);
* O3 A: [% D5 V0 f2 k0 `" |
& j. v. Z7 T# E2 y5 S4 v--------------------------------------------------------------------------------------------------------
9 C" D% l( f& t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ d: J ]7 G2 J2 c
{
- j1 o* Z6 P8 a' |BaseMouseCursor();4 Y# E$ E% x( c* @
}; B( E/ C! E Q" m9 V6 u6 W
在其下添加:& ~9 s( T, N0 z) V, O" f
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 `0 |4 K: J# L" _5 S; c8 S& d
{+ f/ ~: s1 L ~4 w
m_wndMenu.DeleteAllMenu();& \+ D: Y6 v2 X8 x `; n G
m_wndMenu.CreateMenu(this);
" l$ r. Y! f, {: A% t) G: z5 \m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 `; t% n- c/ M; f- m: i) Z d5 T; f I+ G
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* s/ n2 p6 U# z) v6 D{: ^* F: \% L5 r- `1 [3 u" q- v
//P以上级别才可以删除所有道具
% m9 Z. E0 a- y1 r" E, ]# ~( s m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ |4 e+ q) s. M} C [, Z' N* G7 l! A: S9 \
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 d0 v* ?, n) r. H+ ~m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 x4 h8 O. q: [
m_wndMenu.SetFocus();% { j5 d& A5 d6 w8 u! B: }
}0 z0 s/ }, n) K* [5 d# Q
------------------------------------------------------------------------------------------------------------
4 ?: O" [) s, c4 J! U7 R*************************% g! e ?8 }; A% \5 ~
WndField.h文件
1 B) M$ _- A( R6 K' J*************************
/ E6 v# ]) ]9 N$ H& } f' a1 z搜索:BOOL m_bReport;* ~+ D7 s; H5 v7 P" W9 N- a
其后添加:2 t- r7 N, L6 {" X8 W$ o
CWndMenu m_wndMenu;
) Z& \/ ^# P& ^, w" g5 R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 L s( }1 K i2 Y# k* Z" H+ r其后添加:
2 ^# \! B; k, ~, z; Y5 qvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* [8 b2 [3 R5 d4 \3 F3 r" G; }: K5 |/ V; _& x
9 |8 X3 o" H6 ^ l% m6 l
|
|