|
|
源文件中_Interface文件夹下WndField.cpp文件
( Y0 G& L0 {4 X. k6 Z8 F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! a' j5 P; u+ _( c) |
" ~1 W3 T2 m+ r N8 v @struct sItem
7 j P8 N* p/ \{
& w `0 @, {8 a1 h' M& HDWORD dwId;
0 `6 ?9 u! `" w& [8 ^+ EDWORD dwKind2;2 F( ~7 `0 @* G, I, \
DWORD dwItemId;/ _6 n: D0 [3 e% |. s2 v
BYTE nIndex;. c3 A; j* ^# } W) J
sItem(){
z4 g8 u- t1 e/ ` dwId = dwKind2 = dwItemId = nIndex = 0;
4 ~1 y+ r/ R' S) ?4 e" p}
$ V% ?2 G( P) U1 [* h5 o4 k& kbool operator < (const sItem p2)
6 i: w6 k/ R7 u: G& C{* y$ W& T& E0 H2 L$ f$ i% x! Q P" ^
if (dwKind2 == p2.dwKind2)0 k3 a; O- `3 }* h$ P- h" v
{0 v; B; @5 C1 K, H- j0 E
return dwItemId < p2.dwItemId;
3 j$ J6 P1 F g O. e- o }else{
9 v0 K. r& w, y7 D9 ^! I% c% U" } return dwKind2 < p2.dwKind2;
1 Y! Q% I7 h$ @& B! w! N" U }0 l( L$ R8 V1 J9 @4 j* Z
}
& h- K! I% H4 W3 k};
- ^$ H! b4 V& f o0 D- \class CInventorySort0 e. X: }6 {' @9 ~2 T, S& {" o+ m2 Z: H7 U
{
X5 k0 A9 T* dpublic:
4 b: M4 k: E S/ sCInventorySort()7 n' v$ n% j4 u8 B# L
{
8 M; B! }/ @/ E m_dwPos = 0;
j: n2 d* K0 k9 o}* B- `0 c7 ]* Z, l; J& u* A: }6 T
~CInventorySort(){}
2 D/ v5 q( h* R5 A2 I- Kprivate:
( g2 C0 w% ]* zsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. r" N% Q( t" {, `1 `5 q! S
DWORD m_dwPos;( u& P# x. \7 Q* I$ W) E/ q
public:8 R6 j! I) D6 q0 o0 z% d
void Add(BYTE nIndex)
2 B9 R0 {, _4 \+ {) L- f1 y{. u8 o/ R& I* S( @1 V$ n7 [; K
if (m_dwPos >= MAX_INVENTORY)( @+ D l/ M$ w( G4 @+ J
{' P; ?" C+ E- p' X
return;6 X2 j$ d7 m' O& s6 G) J
}
* L/ n, R$ s" T. H L1 Y, F m_Item[m_dwPos].nIndex = nIndex;. E; ]! [* A$ t8 `
m_Item[m_dwPos].dwId = m_dwPos;& v0 S( o2 q4 ]& |. C. @& M
m_dwPos++;% ^: R5 X: P7 f
}
$ X5 M. E5 {5 N% w' [8 gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 ^. ]# T; W" |7 x. S- `, Y { p
{
1 Y+ `' s# b% R0 m- X3 a for (int i=0;i<MAX_INVENTORY;i++). a3 ^+ ?9 x+ ?+ t6 i& ~, I$ |8 q
{% [( K- t& N9 A, N
if (m_Item.dwId == dwId)
7 C& `$ i' \' H {
1 E2 [1 ^3 W7 t& @; ~+ ` return m_Item.nIndex;
$ k+ N- h w0 w- D5 W( \ }
: p: K5 ^. \: C* ]. U7 w- ^- v }
/ _+ v. s" _' X% G) ^ return 255;% g B" j, R! V& X4 Y0 G
}/ s4 X0 K4 }, k
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- l6 Z) P% c" q( u' ~" t{6 U' ?: h v3 R8 c: e
BYTE nTmp = 0;
4 W* D1 s: v, Z+ _ bool bDest = false,bSrc = false;3 {3 f: S1 x* }# s9 Z7 L- {
for (int i=0;i<MAX_INVENTORY;i++)
M6 P9 ~' v- C5 Q0 }0 |7 Y {
8 e: p! q7 l% {! k/ A) w D4 V if (dwSrcId == m_Item.dwId)9 w2 O1 \* ^& N; m
{
. u) F9 {, a* T# u- w# _4 [& V //id相等 则 改变对应的dest和src
1 u8 B4 r" E( ?. t, l nTmp = m_Item.nIndex;) p7 S9 n! R( D- y+ @6 M. w8 Y
m_Item.nIndex = dest;
$ e) l6 N/ c: Z$ p* t }" q5 E4 F" g" p5 J
}
" B1 R. ^. o- q6 d5 i. Z //临时数据保存完毕,交换开始8 u: S; z6 ~2 ~6 }
for (int i=0;i<MAX_INVENTORY;i++). s( l0 v# B8 T* C/ J: N
{
% S R9 a6 \2 j) A if (dest == m_Item.nIndex)! b0 S8 Z) g% C4 X
{
2 t! Z+ |+ G7 H7 H- x! B //id相等 则 改变对应的dest和src! e }. S5 ~6 t$ [9 a3 O
m_Item.nIndex = nTmp;/ W$ }6 P, ?, I# F' Q; C
}" o* s# U/ }* r1 W3 C- {8 H
}. N5 l* y7 \* F$ r- U! `
}
2 |( }! g* c9 o! Z: k};
7 T, ?% O4 @2 t% e3 n9 V* R-------------------------------------------------------------------------8 K$ N) I2 Q' G' G
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ G8 N. d3 g. h( G% K8 ?9 P$ _; I* \6 s搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% J0 f+ } @; U1 g: G. G紧靠其上添加:. E, q5 J! n3 \) m2 J
if( pWndBase == &m_wndMenu )- Z$ s i; Q( m/ [. Q2 ^; v
{
1 _8 }1 ^# G* A1 Z) p) ` switch( nID )
4 F! ?# q2 ]& d# U. W' e {
7 U1 \: e' j$ s8 E- j, ]5 U4 b case 2:
- K# q* @- N8 H0 \ {( L: u& ?8 W2 L' `; _( P% [
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 n" A4 R* s4 m; y( Q8 i5 I if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 D- T* W' k2 x9 [0 B. p% E
{
v, E$ {- B6 o8 S, A break;
% z# j$ u$ R$ x: c- m8 B" V- i/ _ }: C8 M% `* o7 X1 ^/ r
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& _7 F9 Y* ]* X: o
{
; {( o. s: S" Z; Z; n; `% P* t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& f# r r; d2 {' x, u if( !pItemElem )' d' E2 U' s3 i! F: H
continue;
8 a) _( Y- t( W if(pItemElem->GetExtra() > 0)) Y$ E$ j2 b7 g) d# P. l6 \
continue;
/ y* K" P* D, K& Z if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) B, n7 Q3 O2 E1 ~* J: g( \* {! u, w
continue;
0 R1 k" d! T6 x- b if( g_pPlayer->IsUsing( pItemElem ) )
+ e$ @0 U6 z5 I/ _) V continue; h6 ^' D- y" W8 M- }. c
if( pItemElem->IsUndestructable() == TRUE )
2 c, _$ A. Z, T8 ^ {8 O M3 I5 B! j! r. W! Z& A. n
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ Q4 M, q6 d) _2 j7 _ continue;. E4 T8 ^3 n, m8 ]: K
}
2 |5 m3 G7 e& d" U4 q( C! U g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 O4 l+ s$ v8 p8 ~' F
}# u/ B% q5 ~, w( }( ^& u
break;
' X3 b; ^- Q2 Z' ]& P; u' s1 P }: N# z# u$ ^$ [$ c, N4 O- _/ k
case 1:
' U( X8 H2 U0 N0 z, x$ q {# K: q5 A% h& H+ k8 S# Z
//整理背包
7 t8 u- H0 a! B, h //////////////////////////////////////////////////////////////////////////
3 m) v( a5 A! S3 D$ @5 n8 s //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. I2 U$ p- w* ]1 l7 Y
//////////////////////////////////////////////////////////////////////////3 H, a" q* f# S3 l/ {+ N1 n
//////////////////////////////////////////////////////////////////////////
8 Q& o5 p& w/ j' g CInventorySort* pInvSort = new CInventorySort;
+ x0 R4 q! y* K ]% { vector <sItem> vItem;
t5 N/ E) A) p+ K vItem.resize(MAX_INVENTORY);//初始化大小) O: H7 K ?/ W; _
//////////////////////////////////////////////////////////////////////////
/ u& w2 U! X8 \& K8 k" q1 L: V //填充数据
4 r/ e6 K( N& @# r6 `7 ~ for (int i=0;i<MAX_INVENTORY;i++)
& `; ~3 G6 G, B3 j+ J {
+ `" w N! w* v6 y0 \* A9 ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: j# z6 t; j- u: @# [# s: x if (!pItemElem)
9 k% Z- E1 I" t {
8 B3 K6 l6 {8 M: a, f* a: e vItem.dwKind2 = 0xffffffff;* g p% T% B2 e& D' m
vItem.dwItemId = 0xffffffff;
$ M( w( r/ ~4 H! } vItem.nIndex = i;* Q: g+ C2 \8 W# v" f/ s1 l
}else {" g$ I2 N2 N/ B
ItemProp* pProp = pItemElem->GetProp();8 r+ Y8 m% M+ D$ }/ T. C
vItem.dwKind2 = pProp->dwItemKind2;, B# ~/ e% h0 e# L
vItem.dwItemId = pItemElem->m_dwItemId;! ]" x6 z4 t4 g0 h
vItem.nIndex = i;
* |. ^8 d, h- j3 `3 h; O3 Q }9 y2 S1 V' ~0 i+ q0 V' L3 S" T
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ ]) N* S0 F! n5 B- l
}# }" ^/ c8 ^" }7 T( e
//////////////////////////////////////////////////////////////////////////
9 a' ~( i( D8 B0 E, T% t8 \9 T sort(vItem.begin(),vItem.end());//排序
4 x! Q/ ~1 ^& b9 a //////////////////////////////////////////////////////////////////////////' E" Y9 V! G5 T5 |
//交换/ x% }0 h) H p
for (size_t i=0;i<vItem.size();i++)3 Y& n0 e4 e2 B6 [
{
) M- T5 v) G2 Z5 E+ W/ G4 Z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 Q- x1 s! }" Q
pInvSort->Add(vItem.nIndex);4 K1 t l6 s* m$ x
}- H7 p5 e$ b7 h! m: |4 Y. _3 h6 ?
BYTE nDestPos = 0;
p5 K2 K: l1 C0 U# D for (int i=0;i<MAX_INVENTORY;i++)
$ ?) l# l0 s6 o7 x0 y4 _ {
# C6 R* J9 t. } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 r A0 R8 @2 a; g. y
if (pItemElem)
2 E K9 k9 r6 t. O) |9 m {8 w" Q6 R+ c1 _
if (IsUsingItem(pItemElem))
( X0 O* S6 N8 O; h2 u6 |; P& p, Q {9 B: O4 s8 u+ D0 K1 W k" T1 a
//这个位置无法放
* W( e2 J: k* g/ f% y- R( J& K nDestPos++;
% D7 w+ z u6 Q% v+ E8 | }# H3 Q. `& W5 e4 ~! R4 R
}+ k/ ~/ i- ]- G4 l$ C/ |' u
BYTE nSrc = pInvSort->GetItemSrc(i);. H+ i2 `* @4 ` b
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, j' F* q0 X) q
if (pItemElem)- E! S; e+ u! s
{
& u7 J. t$ G+ e if (IsUsingItem(pItemElem))
E( m% ]$ h4 q+ q1 V8 t {
. @$ ]9 y6 O$ k9 z% [/ n //这个道具无法移动,跳过3 t' X4 @0 R0 y X9 m) A8 ^
continue;
% Z& { E# Q' L! C }
9 I1 Q8 e# I) n& a* G }else{
$ F* a, q5 W- g" k, {% ?0 w //空位置 不用动+ f, y* ]% D; ]7 v" E& F
continue;( f1 }3 U }) @
}9 F, l W$ K) r& F+ S6 ?
//////////////////////////////////////////////////////////////////////////
# M8 [, `; v; {4 K" Y. p5 a$ F/ n, Y //开始移动( p0 S: S; @4 q) |; x3 ~6 s
if (nSrc == nDestPos)
* M* j( l- e6 x$ F2 [9 D5 q {" _$ z' q! s) W4 V' u
//原地不动
8 n( `$ \- ]- r. L nDestPos++;
! J4 X& L' t* }7 X; l continue;3 o$ I2 C" A! N: |
}
# V1 v5 K3 k* | pInvSort->MoveItem(i,nDestPos);
7 e% e% a3 W4 q j g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 d) G# ~/ a6 S" `
Sleep(5);! k! l( `2 H7 `' s& l
//Error("移动 - %d->%d",nSrc,nDestPos);
9 T; A3 D! \. F/ N+ u0 r8 o& v- a7 D nDestPos++;2 j1 P c0 j2 V& m r5 {! g
}
1 r$ \4 S$ ^" c //取第一个元素的信息
7 H7 u9 c3 G/ R* L /*
* c0 l6 y! ]1 D+ f, d+ [8 u if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& e" `. z Q6 A s# d. C6 c+ E. s
{
5 m* J& H' j7 @# l3 \. v, ^0 C" S j Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ p+ O* V/ L& M/ ]- G0 s1 | g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- l( I5 ?( ]+ w }# J7 c9 h6 p2 S
*/3 c" [, ?+ x% H5 R
//////////////////////////////////////////////////////////////////////////6 L) l u- y6 R' K2 x/ `
break;
2 V4 `# X6 C* N0 M2 x1 _# v }
9 C) {6 p' I: X9 a) `& ~3 M } & n9 Q) w! r' {7 i. v( ^
}
/ v) G4 Q$ m+ _. X; H! `m_wndMenu.SetVisible(FALSE);
. Z3 Z* |1 s) i. Q3 p/ t# B; {+ x, @. { I& ~* Y
--------------------------------------------------------------------------------------------------------( e F% ]% c" z2 L1 K; K
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), e6 {+ a8 v' z' B+ Y1 v
{2 E. `* {- R# B3 O2 z+ k
BaseMouseCursor();
% a6 p5 E& Q; f0 P& L}
5 G+ w- @" ~. j; p- A, K, ]/ P& L* t在其下添加:- E/ O4 Q. b5 l$ @" ~! i" s5 o
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' e* U* u- X8 U. U{
8 f" f+ m' V. V$ n$ d, Um_wndMenu.DeleteAllMenu();- ?9 B$ Q3 N; I
m_wndMenu.CreateMenu(this);
3 ]6 \$ a4 Z2 }2 |3 z( H9 g' [( i" Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% n3 N) h. o! B% k# B/ W; h
7 Q% V; U+ {$ u# }. p8 {8 m/ ~3 {if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- e0 @+ j) V( h4 n% e
{
1 U; _* ?+ e. g1 S //P以上级别才可以删除所有道具2 z8 n/ ?0 [8 C D- s" |, Y. h
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' b& V" h$ _; h1 {% V}
1 d% v# W. G( b0 t& ?8 p' dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ B! [3 | \) P* T0 f7 }
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" }( X8 J$ ^; G; |. e5 e
m_wndMenu.SetFocus();
) W' R4 ^- v2 [& R}! q0 Z& U% a- S: [# ^
------------------------------------------------------------------------------------------------------------' ^- L5 ^& W- k+ ?
*************************: c6 @! @- ~% I( S" [. Y, e
WndField.h文件
. v- Y; G% E4 c*************************
D: s* b0 _7 w! t0 o5 i' ^+ D搜索:BOOL m_bReport;, H# W; `6 i) Z: N: q9 W
其后添加:. `, d) n, [& a' w: |
CWndMenu m_wndMenu;
9 x, J3 i0 c3 j/ y: S. ^* S9 ?搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, T; h8 ^. R' k4 E! {
其后添加:1 a2 T$ N: O9 z% h1 ^
virtual void OnRButtonUp(UINT nFlags, CPoint point);
* a" H% K0 T$ e" @7 ?; v' w) q/ [3 u7 s5 V$ f9 q
" ^6 @2 s: n* x
|
|