|
源文件中_Interface文件夹下WndField.cpp文件" M- B+ ?0 \+ a1 w3 E3 q" W
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& S- N e3 B/ u, ], V4 t+ P7 w; ?" E# D; o- p& n" `6 ~) H5 M
struct sItem& V* u6 C6 T Z4 F" U* r2 w
{5 c" d8 [0 \9 j( Y# I* \
DWORD dwId;
* T) G z3 d3 w' l' I/ {$ MDWORD dwKind2;
0 N9 W) s( f: d* D" ^% GDWORD dwItemId;0 p. A" j! l, n2 W" x
BYTE nIndex;
, j( |0 d' F8 PsItem(){
% [7 A* F' R6 m: _# r dwId = dwKind2 = dwItemId = nIndex = 0;: y; `+ w! k% [; f; K) i7 x
}
% f/ M5 N0 \3 y/ l) o% Z4 Ebool operator < (const sItem p2): N5 Y) N# l. \
{* A& r& d# y* `8 k' b, J( n
if (dwKind2 == p2.dwKind2)4 k! ^+ b9 a9 y/ b# S% Z7 X
{1 C, E9 |5 i: S' m! n' G G: }
return dwItemId < p2.dwItemId;( e0 Y) z, T2 M$ |
}else{
8 C! x& B! F7 Z7 k* X return dwKind2 < p2.dwKind2;
+ a* J* D, `8 U. C M' F }" r$ _9 ~! n: b) x3 }5 z
}1 a/ H% N: S- z2 a
};$ r3 H7 J+ x& F$ P; `
class CInventorySort
* t7 q! Q! V S9 u1 \( b{3 X5 Y- ^" @* u' i' n# [$ g
public:
, K) [* J2 V) W5 UCInventorySort()
/ f% C- E2 m. g+ T4 k{$ H) n- E/ W2 L4 V1 {
m_dwPos = 0;
& s5 ?8 T. E& N( J) N}
, N0 A) n$ i/ S~CInventorySort(){}6 a8 Y! {- m. {/ ]8 S$ l
private:
. E+ Z* T0 z( ~; {sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 r+ u! W @0 X7 a# e LDWORD m_dwPos; J2 {( |& a) v) r
public:+ I: m* k) f( p1 c. m
void Add(BYTE nIndex)8 w# T' F! |7 U, e
{/ w. X- N8 v7 m( G$ J
if (m_dwPos >= MAX_INVENTORY)
. D3 c9 u5 b1 D, K/ W" O1 n3 V# _ {
7 P' M: j4 I% d- Y8 n$ m7 s% H return;
* p( W+ `( G- `5 q/ Q3 j) M }
@( k8 H) [5 _ m_Item[m_dwPos].nIndex = nIndex;: L K( P0 o+ g: N
m_Item[m_dwPos].dwId = m_dwPos;
0 i6 O1 k/ Z6 j6 e2 ` m_dwPos++;/ S* g* E2 n* _" ?) I
}
8 U7 f4 x! X- X& p9 v7 q5 I0 aBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' U. R$ w/ x$ c% N9 v4 d$ m7 N. C1 Z{
6 I6 i% v# I- y* b+ y) l$ n g: ~ for (int i=0;i<MAX_INVENTORY;i++)
! M$ I/ M2 s+ | {
& G7 G- v/ S9 Q# f& E if (m_Item.dwId == dwId)
! N6 G+ g7 F- `0 X5 w, K {
A* V" T' d. v return m_Item.nIndex;' s: `+ B, ^/ A: {/ S3 q+ s
}7 w6 @# ]8 |: L0 Z. f
}6 P1 G! n2 E V1 }2 V
return 255;/ W- V$ Q9 k3 `. U+ P q1 y3 i
}5 s" O6 }% E% V* L7 T
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* Y7 E2 I9 M; ]{7 ^8 y8 ~4 p' r# X' d( @
BYTE nTmp = 0;* @6 V* M" I( h3 A, O. }3 I/ n
bool bDest = false,bSrc = false;: H A3 V# W/ R* o
for (int i=0;i<MAX_INVENTORY;i++)0 M- U4 n7 i1 Q6 ^
{
) K7 T! \2 ~0 z" Q1 ^ if (dwSrcId == m_Item.dwId)( E6 r1 z3 w L2 u9 u/ Z
{
- b5 e% x' ~$ n, v# e/ m1 _ //id相等 则 改变对应的dest和src4 ~# ^& W9 c/ o$ R4 s
nTmp = m_Item.nIndex;' \/ F' w& g. C8 \ {9 E
m_Item.nIndex = dest;, {8 w, U8 d4 e4 x# h3 P ^) j4 Q
}8 U5 D) k: ]8 `. i( v
}
4 [" ~: {2 R' L/ g! w //临时数据保存完毕,交换开始6 D0 W4 X- ~+ u3 a
for (int i=0;i<MAX_INVENTORY;i++); |) M _4 i4 n2 k
{5 Y: b* A! e& m2 g- e! J$ I M
if (dest == m_Item.nIndex)1 `% `1 Q& v+ F3 T+ d
{. e0 Y B& N J2 y; G
//id相等 则 改变对应的dest和src
% z) U% x$ I/ J" G) ` m_Item.nIndex = nTmp;
+ Q$ i# ^, p- d, x: ~ }' {; m+ S- [ m# v h
}- `4 q* r, y0 T S( ^! m$ V
}
3 l: |. r7 D# S$ [+ i; h) ?" t};& ?4 c* o$ O4 T$ s$ `: d4 d6 i: l
-------------------------------------------------------------------------
- R) t6 ~2 q; c4 r2 k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, i$ Q* g, j* L+ G9 C4 c+ L' k搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 }3 Z3 S$ k& _ D紧靠其上添加:8 X) i/ Q; p' {1 S4 T9 c- A
if( pWndBase == &m_wndMenu )
& ?* `5 m% X a{
8 H1 F o `5 ?3 v) m/ d% S switch( nID )8 `3 g1 S$ V+ ^; @" E1 x) D
{& ~0 Q+ I: ~4 p' P
case 2:8 Z9 s Q( J% _" |1 M( `
{
6 }) {& f6 d( M6 E* S$ z1 M6 I! F+ Q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& U |3 x# h+ d" u* s$ c! W if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ T, p A7 ]7 M& B
{# g% g5 |9 Y9 _" J' H6 I
break;
4 j3 `$ Y4 q, e* A6 t }
& N. e4 V& G j: p0 p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 c( l/ R) t: x$ e* r2 [ {/ Q& c4 U; j/ g0 c i% m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, u0 M7 y7 ?1 i if( !pItemElem )8 p' {/ K' D. j, R
continue;
; ]( y! A* U' t if(pItemElem->GetExtra() > 0)
- g. X1 c Q8 V* Q( Z* F9 M* k continue;! E6 f l2 S l! p6 @' Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ L2 d! [) j+ O4 X/ ? continue;
0 d& l+ r6 n2 a2 N+ M( U( y' e if( g_pPlayer->IsUsing( pItemElem ) ): e4 c2 ^- T" P' e
continue;/ F5 A5 V1 F5 F4 J$ q
if( pItemElem->IsUndestructable() == TRUE )6 O" ~) d; p/ j/ I
{
7 Z' v6 l7 R4 o$ \4 k* o0 C) a g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ ^( j6 ]( u5 T) Y7 X; r% Z continue;
R8 q2 o$ o- R9 g8 T6 ] }1 O: _- P$ Z$ L6 M
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. b0 n! C. _3 A4 J* \6 _
}" |" I/ P0 A0 f, p: F2 V
break;, C: k3 w! X H* L5 P3 z
}
+ g9 Q* W" |/ I) n, ? d7 G case 1:
2 n: y& X: f O: d% h' o: u; r {
! \* a" e, d3 j# o4 R //整理背包3 ~! V& j6 Q8 x0 i, c1 K6 ?3 H: d
//////////////////////////////////////////////////////////////////////////
5 c7 Q, \* u4 n //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ J/ ~1 Y* F0 ^: O9 R# z! t
//////////////////////////////////////////////////////////////////////////
1 N0 e0 G! Z( i3 w //////////////////////////////////////////////////////////////////////////
5 w) Y- t8 U0 {* y4 r CInventorySort* pInvSort = new CInventorySort;
6 ^. c O: ]% c: k @( _7 v3 Y vector <sItem> vItem;0 F: q" j# D. [& n/ Z {
vItem.resize(MAX_INVENTORY);//初始化大小
" B; S) d* B7 S% ~* i0 o1 b5 _ //////////////////////////////////////////////////////////////////////////; \, w3 q: M: P& ~1 A& q
//填充数据7 ^, e$ J3 I& ?) r+ K6 w
for (int i=0;i<MAX_INVENTORY;i++)7 c- H" f& K. W, P9 {2 p
{6 h" l$ B" s* x) J# S7 B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 H# W& S. f; C/ H% K
if (!pItemElem)- L4 M1 d# H5 d# z
{
, C0 c6 O, J, d vItem.dwKind2 = 0xffffffff;% T2 V7 D& d# v; B. Z; B
vItem.dwItemId = 0xffffffff;
5 s! S3 _& }1 a6 n: k! Y vItem.nIndex = i;" r. S3 H. Y$ U2 }" Q
}else {
h! X- [7 W- L) J9 I0 e ItemProp* pProp = pItemElem->GetProp();
5 Q; ^. G+ \1 _ vItem.dwKind2 = pProp->dwItemKind2;) E9 G8 C1 K$ ]1 k' u9 ?
vItem.dwItemId = pItemElem->m_dwItemId;5 }* v* S1 }8 T/ q/ p
vItem.nIndex = i;; _/ i- y; C0 b: O
}7 R% }( p ]' l$ w. b
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ ^; |2 i5 a" f }4 y4 p) P8 W, r7 B
//////////////////////////////////////////////////////////////////////////. u/ [ q" A: \! m7 Y
sort(vItem.begin(),vItem.end());//排序# x6 Y9 b* S% A' A$ |
//////////////////////////////////////////////////////////////////////////; ?% g z+ o2 T, m3 s
//交换# d: `- t" G; Y
for (size_t i=0;i<vItem.size();i++)
6 L9 J& o8 }: E& T; g {# {; T+ b/ l# \; b& u4 n9 X. L# B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& n5 w) H8 {5 H; |! ?/ e pInvSort->Add(vItem.nIndex);
: A6 K* h# v' J6 ]% a4 M& m' Y }3 M/ o! r/ k8 d, c* p' V
BYTE nDestPos = 0;
; ^; |" l: k, a9 Z9 G for (int i=0;i<MAX_INVENTORY;i++)
0 M! m# h+ e5 g {9 V4 @+ I9 b4 t. T* L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
" y" c8 |- J" M if (pItemElem)( z9 c; h( P; i' t$ Y
{2 o9 N& L& F5 |% l5 `) R/ E
if (IsUsingItem(pItemElem))8 `$ h8 `& s3 ?! U
{
3 a! ~ j- s% `, w" s# h //这个位置无法放4 S& X0 H) @0 g' {& {
nDestPos++;
7 ^8 K( `" F$ d+ ?5 C! B }7 o4 `" F! T/ u$ w# m
}" q0 w) `% Y8 \+ X
BYTE nSrc = pInvSort->GetItemSrc(i);
6 P x, ^* L+ ~5 m' Y# d pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, w/ J; s3 n" ^- G: @" _ b
if (pItemElem)
3 {% |3 S4 W2 c6 A* S! Q2 K0 {5 S {$ z; W( ^& Q h! I; x
if (IsUsingItem(pItemElem))
9 d! p) J F: j3 p {" X: e8 j8 B! f
//这个道具无法移动,跳过
( H* U/ }. _. k: ~. I5 o; N; c8 V' g continue;+ G- F- Z! g2 ~7 T# o, X
}
3 ^3 E! A8 }. b2 f/ y }else{
8 z6 |# b& @: L1 z' R //空位置 不用动' ~: h% K& c( M
continue;: c. m+ A7 N& O* `6 k9 I, A2 h
}
0 n( M4 C0 m. z' o //////////////////////////////////////////////////////////////////////////
5 W6 p& J( f4 g3 Z //开始移动
) A/ I6 u/ x3 }& x6 O4 Y* e if (nSrc == nDestPos)
0 p# H) e" w- G" R- Y2 J5 @+ f {8 f+ i! `9 h" V* E
//原地不动
$ I) ~( h& \1 @5 ?# Z7 G: q+ } nDestPos++;, F% O) e6 e" Z' f# t5 F# g
continue;
6 k: n" Q5 `8 H8 i4 M& O }
J6 F; R6 k5 s" U) B+ X9 t$ H pInvSort->MoveItem(i,nDestPos);
" r. r7 F1 s2 g6 c+ g' U g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 b5 ~$ I4 r1 {9 x2 Z6 C! T2 w8 v
Sleep(5);; |+ I% L7 X# O; }- i u9 u
//Error("移动 - %d->%d",nSrc,nDestPos);
, O3 T7 j: j( g. c nDestPos++;
|8 P( N4 a6 B8 N4 @ }9 \" y/ i! t" A! s
//取第一个元素的信息
) f- R; e6 e) h7 r# _+ B# h /*, \' y8 o) ~- e+ t: L
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)* N, }& Q6 c* m6 z& o5 B
{
7 ?9 U! T4 b; i; Z1 o2 K3 Z# {; z: } Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; Q& i/ w( v3 v3 W g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 I# J( ?& E& ?6 d. [4 L) C" Z
}
1 u1 `. ~/ v2 E/ H */' ]/ \) U! f1 ~
//////////////////////////////////////////////////////////////////////////
5 m- ?) d2 t7 R5 ] break;
3 e# |& W7 k' j4 i! {3 d0 ^) t }# B8 c" }4 L* y
}
0 m/ S, I& b, |: W q}
5 }; F! [/ Y& v# J2 t. Rm_wndMenu.SetVisible(FALSE);; s. b, O$ X! x3 j
& l" h. v* }7 q5 ~( {1 v \/ Y--------------------------------------------------------------------------------------------------------
/ I! W0 U7 o3 [7 m! b搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" s$ \6 D0 ^. W w9 a v{
- v I6 r# y( M/ K7 XBaseMouseCursor();. G' p' |5 f- t7 p
}' Q2 A9 _5 ~7 l/ T
在其下添加:- @ u6 x3 R8 a7 W- x. Y% x3 b5 M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ z+ W3 \6 N9 w( m" X1 A7 |8 w
{5 S$ E* N8 H$ p! m% O6 S8 t6 j
m_wndMenu.DeleteAllMenu();( d) v" [: f8 }6 ]* G7 d
m_wndMenu.CreateMenu(this);
% u( q+ J6 [8 D2 O" n# r( Am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# h2 A+ Q# R6 Z$ R/ [3 E* M3 H6 S; O* |1 ]- E
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 Z0 k1 a) O2 W7 X$ F{+ s5 ]5 }+ e" D' F/ e. t
//P以上级别才可以删除所有道具- F8 j% U r2 y8 \% M
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");! G. n1 q8 z6 T" |* J. Y
}
% t. ?6 R" E+ T6 ], [m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: H1 Q" r! ~/ L( p9 B, Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, h$ g# y& _" O5 _
m_wndMenu.SetFocus();
9 e9 h+ `' U% Q; |% V3 h} t4 |+ ~& C; W5 d. Y2 n
------------------------------------------------------------------------------------------------------------: W c Z# v# Q1 K
*************************
5 W* S# p9 z' U' Q! b6 YWndField.h文件
: O" L7 b% s. V' {3 H*************************1 l# S) x& K3 ]+ P3 z. L+ ]# k
搜索:BOOL m_bReport;
+ @8 u0 r# O% X) z* d; y其后添加:/ X3 ~5 d6 ~- f$ E r: Q5 x
CWndMenu m_wndMenu;
, _) j5 r! |4 { N$ v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 M5 b% g; b( a( c" k# y
其后添加:
, G/ ]2 i, }4 Z/ yvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 g" g& U: Q% {$ H( z c
9 w# C1 ^! Q6 B: ~2 D; Y* @
0 {9 t. H0 g7 |8 d: z" @. b |
|