|
|
源文件中_Interface文件夹下WndField.cpp文件
; s! q2 N. r8 A$ v& E5 B搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& ]4 X* C4 y9 m& e
7 ]. f. t7 `( `& n B, G+ H4 Qstruct sItem
, P- j8 H$ [, Z" a{: z z6 Y/ Q3 r3 n+ g. k) ^
DWORD dwId;
u' J/ Q6 i; p0 Q0 V2 E* Q' K" JDWORD dwKind2;
' W) |% q' ?* [ m# @/ C/ O# `5 XDWORD dwItemId;
0 M' F$ ~: [+ O5 lBYTE nIndex;
# _! D1 `5 V, \9 ssItem(){
9 r6 u8 z( ?" w- H# P( U# @$ ~( f6 S dwId = dwKind2 = dwItemId = nIndex = 0;
4 J- \* W, \! E: f2 `7 D% o% b}
c% K( Q1 x( Y1 Ibool operator < (const sItem p2)% \9 t* k0 J1 U2 }* P- U8 L4 p+ a
{
3 T2 L! B O b if (dwKind2 == p2.dwKind2)
9 E6 a9 g7 G6 a9 g' N {2 P/ ~! b5 C" [, G
return dwItemId < p2.dwItemId;
9 z! s& D |3 b& N/ h: O( F! T3 [ }else{* J! Y) \4 U! K- g. {
return dwKind2 < p2.dwKind2;
* r" e2 g" S1 ^ J0 N% Q }
: g/ Z. t2 U9 o. x, k1 d# `}
6 T" `8 ? k; d};
?* |( I/ d4 Q+ c- f$ X5 ^: ^class CInventorySort
, i) n- E$ w7 _5 j! P{0 g0 b# F* H& B
public:
4 w' s5 K3 V7 p4 E( Z9 MCInventorySort()/ |) U$ b2 S: U. C/ V
{! g7 F" s I; i! K
m_dwPos = 0;
- j' v6 Q1 S0 P; A}
1 P5 h9 ^# a u) g; Z4 M2 A~CInventorySort(){}2 N- w) v9 ]" L0 ]
private:/ F7 j* Y8 B$ d% a( C$ M
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ `4 Z" O) g# r' F( `. n
DWORD m_dwPos;
- q/ U. D7 [7 x% P3 e% a1 V9 D/ Npublic:# Q: }5 S# s2 I4 c
void Add(BYTE nIndex)
5 u1 L0 {) L$ B8 |$ e! i2 \{( E2 \4 w- h/ Y J- o
if (m_dwPos >= MAX_INVENTORY)
* x- d; O Z+ i* h1 C# r2 X {! U( m5 c, u3 j) h# n! {
return;
! X; S2 q5 C4 X; r0 B0 T }
+ }* v& j2 s# A4 ]# h6 s/ k m_Item[m_dwPos].nIndex = nIndex;
* \3 B" Y. o) {% L: Y) y% x m_Item[m_dwPos].dwId = m_dwPos;8 X5 {( m5 I) l) y5 |3 s
m_dwPos++; F; d0 o0 R/ b$ F3 z2 R7 }5 R
}: g+ c. z ~. n! b" u; j
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! u) G: V4 b8 W. m. q
{2 u; t- g5 }! K+ r9 {
for (int i=0;i<MAX_INVENTORY;i++)& r# M; j" @* a6 m3 y
{* M5 U$ J6 ~$ M! m! g( s! v
if (m_Item.dwId == dwId)" s* ]* u8 L1 Q, W" W
{: U" u5 D9 [5 C/ g- Z: @
return m_Item.nIndex;' @- R! C" n6 J! j4 i9 p8 Y7 [
}: T! B* p1 \$ l* A8 l
}; K& {: W# `+ \9 L- K# q; i8 C+ z
return 255;
- D9 Y4 a0 P, i" B0 t}3 j$ m9 D5 }) S4 K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" P8 X7 k! K0 x( o5 Q
{
9 n3 W, N" \9 X: U" B: M5 p, u BYTE nTmp = 0;
3 O! r8 ^8 ~/ M; C6 s( w bool bDest = false,bSrc = false;9 P6 s; a. {. D1 s; ^
for (int i=0;i<MAX_INVENTORY;i++)/ A- W' T3 i& G# {
{
) d8 I1 [: X$ P6 e if (dwSrcId == m_Item.dwId)
6 |' M+ V7 W/ |/ L {" U. {" u5 O4 S( d* C# g, V& Y
//id相等 则 改变对应的dest和src; V& J( J; C' `2 z w
nTmp = m_Item.nIndex;) T) c( Z8 e. p* H+ W0 S" y8 m
m_Item.nIndex = dest;
' x: R# W; b/ Q* O7 ~0 N7 n }1 L( c2 d, S2 t+ W$ B, O0 V
}! S+ }- X0 ^3 a3 g8 {
//临时数据保存完毕,交换开始
0 q. n7 r2 [8 R. [+ S for (int i=0;i<MAX_INVENTORY;i++)
5 B7 Y- v! l7 C {
8 O3 K Z1 t! `$ u) q7 Y if (dest == m_Item.nIndex)1 y: M) H9 H/ X( H( j
{ ], m, k v t* r. j: m
//id相等 则 改变对应的dest和src3 F+ e9 P. b! U3 X/ H; N
m_Item.nIndex = nTmp;
, Z7 |/ W/ d+ }) Q4 u6 x; T$ L" x$ V2 j$ ` }3 q4 Z: T& n, u* e& q
}
8 ~. K. q% T6 W* B9 C2 ~% T2 b& S} }" X6 l1 v/ v0 I6 Q" k( S
};
7 f* k7 X2 g7 L-------------------------------------------------------------------------9 @7 J+ A& b: r
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( E0 L$ _7 g+ u) ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 i& u( j" x, c# J! ]/ z$ }9 M
紧靠其上添加: ?' y' F1 Q- I. y6 @
if( pWndBase == &m_wndMenu )/ G& g8 d, U% L" i _: u
{8 ?! }* u5 N* u3 @6 s/ e, D6 K' g9 B. p K
switch( nID )! h1 C( d* L! `: R+ h( `
{2 w; g8 ?9 Z& y. u4 Z' A# Q$ O2 D
case 2:
, {% u [! \% l8 C# X7 _0 b {
* O; e3 d1 \; C; m; F! e4 W //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' P1 k& d! N4 O
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! P3 N5 H" Y7 }/ q) \5 F Z {0 C4 Y9 x2 N8 G) H" T" R
break;% v" b; `7 ~7 V! H
}( |4 r) p5 h5 P1 e( J# E" v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ Q. |* W2 [& I/ g
{
1 l$ R; a+ B8 q2 L7 Y: b4 j5 P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 G& z; j+ ^# C
if( !pItemElem )
+ ]( j& x/ `; h# o continue;
" P* B8 x) Z# }* P: { U, Y, L if(pItemElem->GetExtra() > 0)
; c; M8 t2 A: S3 } continue;
! m, C9 ~8 ?$ O if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - B3 B- y: L! r- a3 v! r
continue;# q$ Z& l2 m4 s8 R8 q
if( g_pPlayer->IsUsing( pItemElem ) )) b8 d- @$ D) t5 u E! h# D
continue;4 L, G. O5 \/ x% D; j7 q
if( pItemElem->IsUndestructable() == TRUE )
! y( K0 S+ Z* x' Y. X8 U5 q {. s* t; Z5 ~6 h2 w+ ?
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# T( ~* p+ E k6 F4 g continue;
) O: j7 s) [: O2 e }
# H t& }1 s. L6 E2 Y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 r/ R; s1 L! P } @7 d' Z0 q$ Z. ^/ d; [3 _
break;" H" s: z, C* H* O
}. D. V, k) R4 n0 }% o
case 1:2 L2 ]) i3 D( e" t) m, M
{
8 F3 [9 x1 n! A" k7 D //整理背包5 @8 S0 Z4 R% X0 d! R! P' [( o
//////////////////////////////////////////////////////////////////////////) c9 D! f7 y8 V# X9 V" ^2 O
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* ^- K; d7 Z3 v, G$ e6 w' N# N" v; [
//////////////////////////////////////////////////////////////////////////
: F& E( H% N, w' b //////////////////////////////////////////////////////////////////////////
7 b, d/ j; i; y( D3 u8 t, | CInventorySort* pInvSort = new CInventorySort;: }& x5 L" ?2 Y M) p
vector <sItem> vItem;
/ z$ a9 z5 _/ G& }; ~$ a; b4 I5 N vItem.resize(MAX_INVENTORY);//初始化大小
1 D) f$ ?4 L& G& s1 b //////////////////////////////////////////////////////////////////////////& l) y9 D8 z. D6 q6 c( ?% O, {8 Q) s$ A
//填充数据8 P# S- P3 Q4 Z' `* s4 t5 h( B
for (int i=0;i<MAX_INVENTORY;i++)/ p$ g4 ?) e4 n& }$ H2 o$ E0 j
{/ s! t' G8 s( ]( V, w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 ]' ]2 Y- S U+ C& {, t if (!pItemElem)7 G9 P1 N& y2 Y& p2 y
{, s2 C5 q* y* ^7 ?6 B
vItem.dwKind2 = 0xffffffff;
) }. ^2 L3 {$ N vItem.dwItemId = 0xffffffff;- Z9 `5 Y+ v2 D
vItem.nIndex = i;
# z$ S" {4 ?# S# \/ ~! q7 t }else {
& e$ q N& y/ h. _: W ItemProp* pProp = pItemElem->GetProp();
9 _2 Y5 c4 o' x* j1 N( G4 I vItem.dwKind2 = pProp->dwItemKind2;0 @: O3 d: `& d+ ?
vItem.dwItemId = pItemElem->m_dwItemId;7 G) {! p. f6 q: f0 C# y
vItem.nIndex = i;
, g' N2 L9 H. Q, n }
; e$ }# h% z+ Q7 M //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# ]3 `6 W6 E( Q! [
}
9 T: R- k% m0 V/ }: t7 p u //////////////////////////////////////////////////////////////////////////+ W9 U2 {# \) P* R; U
sort(vItem.begin(),vItem.end());//排序5 u, r3 d! h3 ?
//////////////////////////////////////////////////////////////////////////
9 U8 C# b h- ^: s6 v //交换) Q5 n$ A' z* D
for (size_t i=0;i<vItem.size();i++). V( ^9 Z5 M+ |5 d& ^) ~- q: v
{
0 W: Y( u% E: J/ W6 }+ W //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. w& i, O, \1 v" { pInvSort->Add(vItem.nIndex);0 z# u' k3 ?0 B
}
- ]$ ^# `+ _9 _& ^) |8 z" B/ i BYTE nDestPos = 0;
9 d! L2 w2 T& H" X0 Z, d for (int i=0;i<MAX_INVENTORY;i++)
$ U' ~/ [/ ^! `% T4 m. p9 h; a {- v; D& z% K+ x# O3 L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! @/ e9 Q, T( c! ?& R
if (pItemElem)" ?. E2 h$ D. g
{' d% B/ V& S, t
if (IsUsingItem(pItemElem))
& [3 A6 t& P' c$ w8 K {
6 j; L) i& f; _% q9 n3 j //这个位置无法放0 o# R1 {6 h( d5 f) }; O
nDestPos++;) u: R3 E$ W6 }5 Y" @
}
. E, O( g3 q a4 @- d }8 Y5 q3 }& L9 A4 m% \
BYTE nSrc = pInvSort->GetItemSrc(i);! y3 l' z9 `9 k; l, D3 B) {
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 Y# L7 V) |/ T7 o- D) R; O if (pItemElem)* K# e+ x) z; m, Q
{
+ Q% l, o8 P3 d) ?7 Y" H/ v if (IsUsingItem(pItemElem))
) W0 X! g; j/ g {
% k: Q' V: M+ v2 _1 F& L //这个道具无法移动,跳过
5 |% }% `: w7 q$ W0 x continue;) A, S; G6 [/ t {4 A
}
% x ~$ Z* k' Y/ h4 q Y# b& k9 F" T }else{
2 n- v/ g+ o7 n4 Z' J3 i7 ~: J) i //空位置 不用动
+ u0 q( h. B$ T! ? continue;
5 x4 Z' o1 `+ Y( _' f }
4 n! _) u6 W3 w$ m5 \0 V //////////////////////////////////////////////////////////////////////////
: w8 l- u7 ^7 H6 R* l1 L ? //开始移动- U Q# q! `( O2 L# m
if (nSrc == nDestPos)
! }! j; W2 c$ y3 O0 Q3 b$ F1 ~" u% ]9 ` {
2 \4 t: \" [$ d) H8 N6 {) B- a5 L //原地不动7 N; F3 L, y5 T
nDestPos++;% [' O9 b5 }! H
continue;+ z/ q, k- a1 U
}6 J- G, Y, b0 R. ]/ P
pInvSort->MoveItem(i,nDestPos);0 {% p1 v5 {7 }9 i+ D8 z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ o$ Q7 s& k2 U! k& k( _" q
Sleep(5);
$ C+ a N7 Y2 U! {' U* T //Error("移动 - %d->%d",nSrc,nDestPos);
4 X/ W% @' K! q$ o2 h% E! y nDestPos++;
2 ^: ]7 A9 u2 u( n) @0 _ }' ` b6 v; ~- g% A
//取第一个元素的信息
- l! I+ T# W( i2 r /*# T: S% b7 z L' x ^
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
c, O; Z7 g. y: }7 m {
8 y7 N- g+ i. K7 R" r9 ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# {' _& n+ D& f! o0 E8 T
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! B6 {* ^- ]9 E( E$ w) Z' W
}, F' _* l$ r* Q! Y
*/
$ ~8 H/ B3 k5 y //////////////////////////////////////////////////////////////////////////
% V- I! L* h1 Q6 h break;% t [% y0 o5 r _% A/ ?% G u
}; N( [, M: M( ^9 f& l
}
! c' X' ]6 |2 @}1 X( D1 X+ c! l* ^: ?
m_wndMenu.SetVisible(FALSE);
9 r# K4 u4 b3 ~ F: Y& t( X! v' x/ `# c/ B- P& f( d
--------------------------------------------------------------------------------------------------------
, t0 A0 P: v( O, q3 n搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 G# V) b( D: O6 w1 {, D
{
6 Q% p0 F! C: aBaseMouseCursor();/ j% v' d0 N2 Q5 r
}
, w. A8 H* g) y! Q在其下添加:* v# u+ Z& h7 @% B& q" N" N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" P" O$ o8 \8 @. G, j d3 ]; v
{& V4 O& `+ z' X% I& P
m_wndMenu.DeleteAllMenu();
- D4 a# b3 {+ a2 N) H M2 L7 }m_wndMenu.CreateMenu(this);
4 i) H; X" ~8 Km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* N, D9 U8 U5 h" V$ d. J
9 s5 z$ i+ U, h6 Iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ ]! q$ E, s+ o; l$ a( s8 m
{
B" A, ]' |/ {( G8 Y* ^ //P以上级别才可以删除所有道具
8 C0 W+ |8 z3 W. d% f) V* Z3 U8 c m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 }" @1 \9 l- v6 l b( r/ \}
& G* [. d' T0 b% r6 A; [m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 `+ ]4 t( j( x2 O" ]2 v0 _# l; U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# s3 Y e7 N3 z: c C$ a; Z5 p' _) Rm_wndMenu.SetFocus();2 i2 Q9 e6 a/ B9 W8 A( ~9 O* r
}
6 ^3 I7 s% r$ \- }7 d------------------------------------------------------------------------------------------------------------% M4 X$ p0 ?- x# v& Z: \
*************************
0 P" t7 r4 \ V$ M6 E* ^# OWndField.h文件" Q. P* q% S( S% V% W& P
*************************8 K3 b& {- s$ L+ C7 K
搜索:BOOL m_bReport;
; r# [! _+ v) a/ G" O% ]- q1 z. o其后添加:
{3 _9 W! a# Q( X( S) aCWndMenu m_wndMenu;; j [( F( a1 |' Q& h( U+ l
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
N2 M0 ^+ k: U; z5 Q) o其后添加:' |' g3 e) X; o# |! ~2 C7 c
virtual void OnRButtonUp(UINT nFlags, CPoint point);
' ?% w; l, Q; p8 p* {. L
2 z9 l* M) i* U$ F; H* E& {, o! Q! K% l C: D5 E- X
|
|