|
|
源文件中_Interface文件夹下WndField.cpp文件& V: f. a/ W9 _- f- `6 Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 K6 p5 W4 A( ], g- e$ C
0 W# r: m: S% {; C0 H
struct sItem, S0 o5 _: X* s0 T9 H9 K( _/ K/ m5 q
{
# s1 X' a, X3 z5 y6 O+ U# w) W; a' kDWORD dwId;- {( {- w Z z8 X
DWORD dwKind2;
: c1 W9 q* O& u0 I/ mDWORD dwItemId;; M8 ^) D! |6 m( y' {3 R1 @6 J7 L
BYTE nIndex;
* X/ v; ~( \2 O9 j1 Q1 q+ C! R$ m8 ZsItem(){
a! J/ Y+ N7 o' a. L: C dwId = dwKind2 = dwItemId = nIndex = 0;
' o! x( w: {5 g9 q) y& ^, @}
4 U) v" t p& f( Sbool operator < (const sItem p2)
7 I" L7 z) @# d4 f, t, s6 a+ c. Y{5 L: _4 h% W2 c
if (dwKind2 == p2.dwKind2)
4 |4 i3 _5 A& p4 A% T {
" q7 v. R3 l0 f6 Y# I$ }& U) V/ ~ return dwItemId < p2.dwItemId;# |0 F* B* k: p5 W" F* F) z! B$ D
}else{
" q5 c8 [' r5 {8 G, ^ return dwKind2 < p2.dwKind2;; S& s9 w, {# t* Q7 U
}, b+ q% f5 p, a$ T$ ?1 M
}
' r' K0 g* g; p};( ^; |3 t& P- e
class CInventorySort
6 ~. c7 ?1 H5 b4 i$ T{
0 I6 [* r- q5 r' m1 cpublic:# W3 f1 e# ~0 g$ K
CInventorySort() Y/ ~! y* g9 A" P8 P: g
{0 m6 r1 ]3 B4 n; \8 K
m_dwPos = 0;4 [# D4 Q: S+ t2 Y0 Q6 }( N/ u
}
! o( z: C1 q8 a~CInventorySort(){}4 R3 X; q: r& Z2 m8 g) B9 E
private:
5 P+ b- Q( f% y' lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 l4 R/ c# x/ d* Q# N0 l, z! bDWORD m_dwPos;
* i" |+ d6 w* M! D- P, n6 Opublic:
$ d6 l: s6 V+ I( q) E1 [void Add(BYTE nIndex)
: w& E2 [, f- f{
. C1 j9 J: \4 r$ x! A if (m_dwPos >= MAX_INVENTORY): q) Q8 O3 e* k. \! y7 J) d' X# ?. @
{
& q. R. Z" w O9 b% v" z! I* V2 | return;& M$ @6 m! v9 G ^8 n
}
2 e; X0 l- a! V1 B j- G m_Item[m_dwPos].nIndex = nIndex;, Q- f" X7 `; G; }, m
m_Item[m_dwPos].dwId = m_dwPos;
4 \+ ~! e9 T, a1 l m_dwPos++;
" y6 @: Z' `5 ]2 Q; j8 H3 j. {}
% E- d" P5 n) W1 m* [- oBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% E) K1 R, X; E1 b; |2 S4 r' f{) C* F9 Y/ L1 }# b4 t. W* W
for (int i=0;i<MAX_INVENTORY;i++)
& q W& p$ f* b: _3 f4 S8 Z {4 Q/ G# g8 P" _; C; g+ ^/ t, X- _/ N
if (m_Item.dwId == dwId)0 S" r9 f6 f$ A
{
! r4 `) S) ]+ w return m_Item.nIndex;: L, o( C `( M$ m4 S
}0 N8 _' \# g# ]: E* x5 `
}! U1 c4 L9 l0 [( q
return 255;9 }9 o) {/ Z) n
}
3 n+ x5 d6 s& Q+ T( U! Q8 @' ?! svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 p9 R' V. ?; E' }0 A& X! p. l9 j{* v- J4 b# n( Y/ k/ t6 V @, n
BYTE nTmp = 0;5 y9 T( z0 F8 V: ?3 L; J
bool bDest = false,bSrc = false;, E/ H& X6 Y: H
for (int i=0;i<MAX_INVENTORY;i++)
$ ~6 ?+ f7 g) @6 f3 i {
5 S% I8 |& t5 n& K r& C* I; ~ if (dwSrcId == m_Item.dwId)/ a) U5 P/ g1 B( S
{8 D1 \* {" B0 O6 n6 }" E; |
//id相等 则 改变对应的dest和src
T& h# `3 p% d) e3 {# d nTmp = m_Item.nIndex;
, k; g4 W* y/ D m_Item.nIndex = dest;7 ^/ R( e4 y+ o7 @# s6 C# n, Z0 V
}5 U+ A# Y1 _1 b1 S
}* y4 j# ]3 V$ i: }
//临时数据保存完毕,交换开始- z& ?: s) U3 s/ p) N
for (int i=0;i<MAX_INVENTORY;i++)
* f6 n. C) D3 a5 W, @, ~% o {7 z; d7 Q' J. c9 M: z- M) y) Q
if (dest == m_Item.nIndex)/ q/ w6 H5 y) i8 V" l" y
{& ]2 v$ G+ l( J3 n+ w
//id相等 则 改变对应的dest和src
' ]. y+ K! I3 [ m_Item.nIndex = nTmp;2 g7 e/ y) G M6 g; j% B0 p: l1 w
}
& D0 }: G% D( O3 [ }: Z* _9 X; x5 O# l1 ~5 Z6 W1 b
}
! C# e4 ?9 i( t- t7 I; c};
7 m: q: X* S) \' i# \' }' i( |: s-------------------------------------------------------------------------
# c, {' f* K8 q/ t O7 I依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. G4 O1 V) Z" c! f# M) L8 m搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( O( ^% f) n; K. z
紧靠其上添加:: ]5 n2 C+ F# T$ S
if( pWndBase == &m_wndMenu )3 o: j% U% ^" n% h& P+ u% }
{) S/ Z A% @4 N- \7 J$ e; }
switch( nID )" x' f$ c. {' d) e5 l" x: J
{* p; i% m* \2 I- j* P
case 2:) T" f6 f# N: k9 t& V
{; z9 _0 B! V, m. e
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 x" { } n$ ?2 J# g8 V) _6 Y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- t @8 b) Y+ ]+ T2 `8 c {/ n/ \$ v/ l# W9 x) A5 ?
break;# G! k2 u ^; F! n
}
& c2 C- ?+ G. [, E' a( t Q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ `2 f* L6 s# y7 f2 m; \- j
{2 x4 L2 z/ u# ]9 a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 {3 H9 t2 U1 g: v, w" b/ a
if( !pItemElem )
0 @1 x e Y$ o% e G! I/ a continue;
- n8 U+ [& ]3 V( T" |: n* W0 P if(pItemElem->GetExtra() > 0)
9 H* w* T. ^# E7 b; u! e4 X5 v# J A continue;
) @3 R) p$ W7 A% w; n- v if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # Q! s; E4 u; z- g
continue;
6 z! H2 T7 X, }4 m. ]0 }3 E if( g_pPlayer->IsUsing( pItemElem ) )
6 l0 v0 t8 _# u/ Z( B; M continue;
: i( d! f8 ]9 ~3 B8 T, { if( pItemElem->IsUndestructable() == TRUE )
1 Y1 \* f- R, x# u P {. Z- h: @3 s5 @0 D# n$ E
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 I! X! W, x$ H8 t continue;. d8 K/ R4 \" }2 G+ `
}
$ v' \* Z( G5 L1 }% o% a g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ U) }7 x4 ?5 F0 D" y" s/ ?# @
}0 s3 O5 I) w1 s9 T4 g% e! w
break;; V/ `; c, P- z Y- \
}# A2 _; A, [1 ]) _( n; V! x& }
case 1:
% l3 H7 k a6 I( P5 L& I {3 C! X- F2 G7 K2 ?$ G( s
//整理背包' V u7 Q) f0 Z# y$ _. O3 ?- m8 {3 n% e) P
//////////////////////////////////////////////////////////////////////////3 P$ I6 J" d6 P0 s4 |6 n: j2 h
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# Z; o9 q7 h5 m$ i/ h) Z
//////////////////////////////////////////////////////////////////////////% q6 J! t i$ j/ X' ]6 E
//////////////////////////////////////////////////////////////////////////
" h' h1 ~6 T% l CInventorySort* pInvSort = new CInventorySort;) D& l! Q, c2 }7 p2 G
vector <sItem> vItem;5 L- N! q$ x1 o8 L
vItem.resize(MAX_INVENTORY);//初始化大小! t) \. x( L$ H @5 @
//////////////////////////////////////////////////////////////////////////
9 Y2 v" |0 ^, b7 G7 w: b7 ^5 l* H //填充数据
/ J/ G* n5 c; O6 t) f- k: K8 i for (int i=0;i<MAX_INVENTORY;i++). T' P* d% N$ `6 S* K9 v5 k
{
; }9 d! [- w6 q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 D7 D" a7 R) I if (!pItemElem)
+ S/ A$ R$ i1 H7 j3 a! _1 | {0 ~, t4 p* N. q% v& y; ~- K; D! C% q
vItem.dwKind2 = 0xffffffff;
& D; d7 L: r3 r! D3 Y. Z* F; [( n# {& ^ vItem.dwItemId = 0xffffffff;
! V4 `1 K( c) T; b) x vItem.nIndex = i;" d2 u1 Y, p1 [. N
}else {
" j* h1 \% U# I4 q" L& w4 n8 | ItemProp* pProp = pItemElem->GetProp();
' R6 Q4 G. x. K1 j- N, ~. P0 X vItem.dwKind2 = pProp->dwItemKind2;7 c h) o0 z6 g4 w2 P' J
vItem.dwItemId = pItemElem->m_dwItemId;9 J, E9 n3 M9 i, j- ]# u# j
vItem.nIndex = i;$ R+ w7 ^4 }2 }4 {, D4 j. n |
}1 {1 F$ S& t1 a8 x# f0 @- s& I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ ~' t) T+ r& ^" l2 a
}
/ p: D0 }, A% D/ _1 ~- r; V //////////////////////////////////////////////////////////////////////////# ?: G D- l& K% [& @ u$ q; ?* K
sort(vItem.begin(),vItem.end());//排序
8 r& H% m1 l1 K1 l" v- b% P //////////////////////////////////////////////////////////////////////////* q0 ]" r* V& R3 k8 H ?7 `
//交换3 a, }/ \" X" o H) I
for (size_t i=0;i<vItem.size();i++)
7 Z9 r+ v6 h1 W+ h& h {* E4 W/ W- u5 ]& u# w, V
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 E3 z5 V) s# I' ?* D8 W Z pInvSort->Add(vItem.nIndex);
3 i) c5 c A$ \. P }0 O I7 m8 o- P( ?+ }$ @
BYTE nDestPos = 0;
* e/ [4 G% ]3 V+ y4 i for (int i=0;i<MAX_INVENTORY;i++)
/ |7 o6 Y5 b- Y7 T; p9 V+ D0 p {
: Z, D9 A4 X6 w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# i& |$ m, U0 w3 ` if (pItemElem)
! r! m8 c& S; u- m! ~8 ~ {
2 a C3 D% T# `! G; `9 m if (IsUsingItem(pItemElem))0 x3 o/ C. A( B
{
/ v2 Z8 _2 f% m. r //这个位置无法放
/ ?% A( u, G5 @1 M nDestPos++;% Y$ N5 q" t3 k' Y/ D3 M8 e0 r( \
}; y3 n2 Q( t! l6 g. D4 ?. _
}/ y! {8 d* L. ^5 s/ D0 n
BYTE nSrc = pInvSort->GetItemSrc(i);
4 N, y X9 e* V: Z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% m' l( j1 ]/ Z, R/ F& [9 g if (pItemElem)
% p+ Z0 U. G) v2 T {7 s- p4 ^9 `' E* b4 l Z5 }& }
if (IsUsingItem(pItemElem))
- x/ ^- R4 ^) j# G& F) e$ R* m {
7 r( v- t, {! ~; O8 ] //这个道具无法移动,跳过# C5 e: b& W& w9 ]' E
continue;2 u3 O1 h6 h0 ]* C& U9 V% O
}
, R1 B8 f2 N( V4 ]. l( G% ? }else{. o" A0 F6 r% O2 b8 |7 r
//空位置 不用动2 w1 }. w# O; A- g8 g: n, J
continue;4 F: c, g) t/ k6 C/ {
}0 W! @, A- i- q
//////////////////////////////////////////////////////////////////////////5 T' x/ h ?% m
//开始移动
2 Y/ Y5 F5 W9 z/ [7 p/ m! C if (nSrc == nDestPos)) R6 J$ ^9 ?' P
{
. `% K$ h& [. F z+ ^+ S1 x //原地不动$ ~5 d+ |) A& W( j
nDestPos++;
) @1 c7 y" n: g* d, c6 L! C continue;
- `4 u% L6 ], l- }$ Q }6 S6 u9 A, M6 t) s
pInvSort->MoveItem(i,nDestPos);
9 R) @: E; Y% a, O o' c' T$ l g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ g% X; k6 @* A+ N, } Sleep(5);. |7 X {# z: j# Y
//Error("移动 - %d->%d",nSrc,nDestPos);* W! m, z# V* k) u2 b7 f9 Q
nDestPos++;$ y d# J: E& E
}! B; l% r! H/ d4 q6 b& w; T4 C% S
//取第一个元素的信息 q" b% a; k* |
/*
1 l! q3 j2 q U( ~) B" T8 K if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 p$ p t( t5 H0 k7 m# Q8 B
{
E, H: K1 F& n5 a1 c8 W Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. O% ]) `1 p+ x& ]; u9 y7 i g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 _. P. D' i8 M0 o( s0 S
}
& A, h1 J" V* c( }/ f. y */- {( Z: M6 w& `5 z. N' V" t2 B* }
//////////////////////////////////////////////////////////////////////////
* k \- o% @) Y* Z* u2 }' I, d2 I5 C break;- h, @9 f+ V' Y) V% B& }
}
! M6 ?5 `( H+ K3 P! I' E1 Y }
" h& P: _/ _: R; v4 P) g2 _}
w& c$ c" D! u1 um_wndMenu.SetVisible(FALSE);' |4 V3 r6 k) j+ K3 N" Q
1 `! H, C9 A: q" L) `1 _--------------------------------------------------------------------------------------------------------/ V7 f3 Y6 h3 A) ^
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 u7 N/ N: ^1 X# L! M1 H{* |2 u( k* }. U1 C% { y) E3 s8 A9 f
BaseMouseCursor();, n' k+ [0 H: S ~7 D1 s! G: \
}( o& `* j) G2 g! B
在其下添加: Y; {6 O- g7 o7 q4 d- r; s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- K$ L! b9 {3 @4 ~& c3 v
{; m1 n) r( _! V$ a# n W
m_wndMenu.DeleteAllMenu();
|; K+ u" H* ^# d! Pm_wndMenu.CreateMenu(this);
2 O' L8 z4 L& z; C2 qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. r- J4 B- k4 s# M1 v
- ?: t: ~+ N1 r' zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* s: X8 [. j- q+ A
{/ ?/ i% q7 l! n' v. Z
//P以上级别才可以删除所有道具
/ w" G: Z8 T+ ^) E, i m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 {4 l; \/ C3 d8 L" y}
5 O4 H `& @; L! \! Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 X: D# S" s0 n. `; o: `
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 a9 A) W# J4 Gm_wndMenu.SetFocus();: N9 ^, t: I8 m, H- d0 E
}$ [ ]# Q/ Q- q [8 C
------------------------------------------------------------------------------------------------------------# \# f# s. V: f3 S0 S" K' M" ?
*************************9 p/ Y' r( r2 R% G% q- c
WndField.h文件# n8 H( @+ r, c/ S
*************************
; O6 u# M* C0 R F( e) _- z搜索:BOOL m_bReport;3 b0 o$ T, Z9 s9 g' K9 a) D$ S
其后添加:. y) P" }" u& z# T6 _+ r
CWndMenu m_wndMenu;
0 O$ t' h' k4 l' H; A, C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& Y2 n; O, H2 f1 o其后添加:0 Q, K' s( v0 c
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 u3 {% `1 X, Q4 j7 [/ q* ?/ y# E( e6 g
& R+ ]8 j% Z j7 ^0 X |
|