|
|
源文件中_Interface文件夹下WndField.cpp文件' l; _3 t! \- @4 L" O
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
M+ J) S: X% s; Z/ L" D* G0 t- C& S$ }) A2 _$ Z
struct sItem
/ R/ d( }( r* F) p4 }{
6 j3 u! c" f# BDWORD dwId;4 b: B3 j- Z* ^1 J4 t# I
DWORD dwKind2;
, \' G9 D& Z0 H" i; B W+ RDWORD dwItemId;: [/ O) ~2 x; F- a
BYTE nIndex;
# F$ E3 ? l% jsItem(){
4 t" P+ O3 O' F, a# P dwId = dwKind2 = dwItemId = nIndex = 0;& b; H8 U, Z+ g- g/ b
}
. h! Z1 [/ f* B1 tbool operator < (const sItem p2)2 N2 `+ ]$ k1 i3 {: v- y
{
5 t, E3 w+ O }8 m, g if (dwKind2 == p2.dwKind2)
8 j/ O& H6 F$ d/ h4 M; @ {
0 H2 k. j! f s* g# ] return dwItemId < p2.dwItemId;. v, l! W# L5 T, H4 e3 `" T
}else{
' y9 n$ \* p$ i0 A+ E return dwKind2 < p2.dwKind2;5 Y& `$ I: q t9 \& O2 u
}
5 Q8 D: q2 l7 G+ l$ x# a}- K7 M" K. d8 n7 \/ [; o' e
};
; Z7 ~# `# \+ p" j; A: Y$ K' gclass CInventorySort
- M+ p# j2 \' I( N9 L{$ V+ R1 M2 K/ x2 A5 J6 ? U# l
public:
0 p8 d Y1 M. r5 }6 ?- M' zCInventorySort()
3 h2 v1 ?) z, W' ^ w{5 t& ]. N# p! D
m_dwPos = 0;
9 Z7 P1 g0 I! _# @( g2 U* v}8 n$ U, {' Z9 g c, L* Z7 T9 ?
~CInventorySort(){}
! D$ {' f, \8 }! ]private:3 j! k( H- ~) v( `6 e
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 y5 X& A& b3 Y1 \) j: ?
DWORD m_dwPos;+ q, j5 d% X% J0 P* C ?% a
public:/ u* O- a0 {: m% ?; A
void Add(BYTE nIndex)
( E s3 v) E& M9 D. }0 y{, u! j! u7 F+ Z/ \" T
if (m_dwPos >= MAX_INVENTORY)
" i7 x- V$ I }7 \7 _- ] {8 m! A) g. h: S4 _
return;
# \8 O' @/ i' ~9 B; t3 \; g) J" D }
/ X3 f% p& H/ H0 {8 }, R; V m_Item[m_dwPos].nIndex = nIndex;
7 [8 @1 Y3 O7 u) z5 y m_Item[m_dwPos].dwId = m_dwPos;
0 Q7 U6 o: P' f9 Q v$ t) W m_dwPos++;: S' Y5 J ~3 W9 {- |
}
3 n7 m! a: J0 Z( o& q" dBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 D6 \8 k- k [- O) N{6 H% J M/ i' a2 j
for (int i=0;i<MAX_INVENTORY;i++)
8 r' U9 X G" T5 W {! ~) k+ W% b1 O4 U
if (m_Item.dwId == dwId)
5 U( w3 ?: W0 G! `+ E {
8 p \+ w6 H0 u$ Y. l/ h return m_Item.nIndex;1 [1 j5 V3 J5 w' G. [" J
}
9 p4 d8 y8 N# c0 y; J8 t }1 u1 K6 a/ x0 k" i! @5 ] ^. N- F7 r( U
return 255;) c% u2 f- t2 C# \0 @
}. }' A5 G5 B' W, i" L! p' h' `
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 i0 i, E) {6 ~& H! r4 s
{
- [0 Z1 Q6 e% a9 [+ H3 G& F BYTE nTmp = 0;6 c9 {8 ^! m( N+ S
bool bDest = false,bSrc = false;. X8 l$ q& Y% P: w9 O/ Y- F& a- K8 i
for (int i=0;i<MAX_INVENTORY;i++)' z5 H2 u2 d5 ?3 {
{+ |/ d4 u1 V2 ]9 A: B
if (dwSrcId == m_Item.dwId) U+ L5 {$ s# ?6 _+ `# R9 a8 C
{
7 C3 a. S1 Y% G" x //id相等 则 改变对应的dest和src2 d5 P2 s2 F& I3 [. B- ?2 _
nTmp = m_Item.nIndex;
" u& T/ u* G8 c( _2 T( i0 R7 G$ v m_Item.nIndex = dest;, v$ ], S1 ~( P* v2 U
}5 C: _- G/ v. W- m3 O# `# H
}
) \( e. D z& R+ e //临时数据保存完毕,交换开始
. L6 {, v* o( Q# O for (int i=0;i<MAX_INVENTORY;i++)
3 d& X( E, {' Z t- m: r {. Z% @/ e2 i3 c$ \, X& y. r
if (dest == m_Item.nIndex)# n ?% ]; R; l- A
{6 R! M2 A4 k- W' M- P
//id相等 则 改变对应的dest和src
% G) y$ S! V9 Q2 s0 f K m_Item.nIndex = nTmp;5 ?$ ^) X/ K, D- t7 {$ b
}: _! E2 J, G$ M8 E8 r
}# z9 p% V3 G+ Z3 k
}
4 W& M' u0 P+ n$ T};8 N$ x2 w/ Q5 A, A+ S4 W6 t
-------------------------------------------------------------------------% w5 W8 ]! l3 H, d2 I1 C
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 M0 s! s7 `# R' r, P# D搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# x& V# D/ W( @; r紧靠其上添加:
5 X+ _0 `8 _; w! D! Gif( pWndBase == &m_wndMenu )
( F; d9 H# ^3 t# b% W- U; S& q{+ K1 O: b$ X; M- K$ `* O: f- F
switch( nID )7 ^3 _$ ]8 |1 B: V' N; Q* ]# M0 T
{# |) r- R5 P/ f2 g
case 2:
$ L T' L1 b0 F' l# q$ ^0 q! a {
; @$ v/ w' K3 m5 k) J) k. k3 O //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 y; q/ M; b. p& ~
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 n" H* Z# f+ n( v( E, v: | {7 S. v# ?# J( c* [$ `- `2 O
break;
. V3 o2 P: @% H, {! o }
! G2 b' e5 V- y# x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 J% v& \1 s( v$ i7 s. u8 r9 ^( ^+ d {
! _7 L+ N9 ~, Y/ i" _- i( o; J8 T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ [6 v9 S1 e+ z+ G z" B5 }
if( !pItemElem )9 O) k6 u" d; |" G; m6 p5 y
continue;" k* T4 |0 n5 d5 T7 H3 x2 q
if(pItemElem->GetExtra() > 0)
2 _1 Z8 a) U0 _2 Y continue;
! D9 M1 h7 v% Y( D if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% z$ G( b* c+ [2 w3 \ continue;3 {7 ]: E/ L2 g6 G: F% J
if( g_pPlayer->IsUsing( pItemElem ) )
% z" ^* g; I* r, E7 a7 o4 Q" r( D continue;
4 C! c2 l& L% p9 Y* \% c if( pItemElem->IsUndestructable() == TRUE )
0 Z0 l2 P0 q) q! a {, T y: E- v A g# ?. S9 P
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 B H+ F: C& G# e7 D0 K9 }
continue;
, Z& x1 t% A# O8 |- c V) G }2 W% |* [% M2 U; A! m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# E2 A% V8 N9 P- S
}
) E' C, t* R5 p2 s/ V, ` break;* K/ p) L5 u- R& i
}
2 _; _* E4 t+ c case 1:9 m& V, H# Z& F# y# r4 e
{
6 x t" `+ k3 O' R //整理背包% d' q6 I# [) Y8 `7 W
//////////////////////////////////////////////////////////////////////////+ U+ E b9 E* Q8 l6 Z" H9 c
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ }: D X. `& z" s$ o //////////////////////////////////////////////////////////////////////////! W( G% s: } w5 W# i
/////////////////////////////////////////////////////////////////////////// z5 L0 k' Y9 O4 g4 C
CInventorySort* pInvSort = new CInventorySort;
/ ]. P" g0 x! h/ ?4 P+ a# { vector <sItem> vItem;4 h! H8 j3 T2 r: E, }
vItem.resize(MAX_INVENTORY);//初始化大小, {% u; M8 L4 R7 E
//////////////////////////////////////////////////////////////////////////
4 G) v' R- f8 ^+ ~, Y; M //填充数据% ?/ W+ |: T+ r; J0 X8 \
for (int i=0;i<MAX_INVENTORY;i++)8 e$ w. J& ~# `+ x3 ]7 c( p
{; N% t8 i0 m8 @2 ]" d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* d5 t o; B, k* S2 H* R! P% e
if (!pItemElem)- K8 M! Z4 W/ x, D0 _. Y3 t# ]$ G
{
' u! D4 }2 q6 f0 i' Z vItem.dwKind2 = 0xffffffff;/ B# [6 m, V4 z2 M9 f) ]2 W7 e9 @% b
vItem.dwItemId = 0xffffffff;
5 N( [0 V1 U. J vItem.nIndex = i;/ m3 B! v* J4 J2 n4 v+ }! K
}else { W. i1 L# u. e6 q
ItemProp* pProp = pItemElem->GetProp();; d7 |4 M9 [0 ~8 Z0 R
vItem.dwKind2 = pProp->dwItemKind2;4 Y" I& j6 F6 l2 }" P
vItem.dwItemId = pItemElem->m_dwItemId;
$ Q3 {# M( ]2 g2 Y8 N9 G4 l: K vItem.nIndex = i;
8 k+ }: e4 e: ]6 C2 J' R2 r% ^ }
! E9 k0 F. W: {9 @0 z l: V+ N' g //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! X7 J2 {: {- N, v9 @
}
! e7 U6 i6 T$ e- i) E //////////////////////////////////////////////////////////////////////////$ Q5 p- |9 f8 i6 V% h1 |. c$ i
sort(vItem.begin(),vItem.end());//排序
% G! a4 p0 F" F ////////////////////////////////////////////////////////////////////////// H9 F% L4 D# o* C* X" A
//交换
$ S. C' x* e1 f( @ for (size_t i=0;i<vItem.size();i++)
3 ^6 s- |5 R* n7 H9 P; s) A {# T3 M2 O& e6 l5 \8 q$ B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! f$ n. r5 z7 J1 Z' M- t3 U9 }+ s
pInvSort->Add(vItem.nIndex);4 M3 F1 s5 a+ f3 h- U- {
}# d: o4 D* ?7 f N4 F
BYTE nDestPos = 0;; f$ k: s) c5 x3 B" S4 T: t0 \& D
for (int i=0;i<MAX_INVENTORY;i++)' P/ ~' K8 M# e. b. ]) i4 ?/ e
{
1 G' Q$ r) y, _. e% x3 x6 M+ q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, K# A" d4 y I2 `- c
if (pItemElem)
: s. i- [9 `& \6 } {$ F( f5 F. F, E$ d' [ J# M
if (IsUsingItem(pItemElem)): \0 G$ w7 I2 s
{7 ` `( O1 [. m _4 Z, R
//这个位置无法放
- ?# P7 p- f6 n e! T7 E) I nDestPos++;
; I& g+ _5 @- \8 d4 k }
9 H4 \6 M" P6 @% k. V3 n }
/ x) C" A! M+ o' m& N BYTE nSrc = pInvSort->GetItemSrc(i);& O& s8 M3 Q; `& E, L. B! H2 q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, O7 u9 ]# V: b. A2 D if (pItemElem), P" V' `4 B# n& F7 }
{6 \$ d' J6 I" U, U) K, }
if (IsUsingItem(pItemElem)): Y9 f0 t$ \4 q x
{
( ?- M# r4 [$ @8 Z$ d m3 y //这个道具无法移动,跳过
) o! R% p; R( V3 X, T4 q continue;
. g2 t' c" J# a( x2 b% I* Z( ]3 U }
2 f) B! \: {6 h( Y+ ^1 H }else{
4 d8 b7 `' ~- z ?: s5 F //空位置 不用动
, ]& k: G3 g, t3 c. P) b+ v9 X continue;
$ Y2 @9 z' R, f: ?3 g5 q+ {6 h }( h9 u. p1 l" F8 C3 i
//////////////////////////////////////////////////////////////////////////1 E* L. }+ t, L: S: m
//开始移动3 g3 N* i: V4 ^
if (nSrc == nDestPos)2 T5 F6 ^" G- k- c; a5 O) Q5 s, w4 g' ?
{( `+ c9 w" V4 ?8 @, z$ ?, l2 U5 z
//原地不动
) |+ m' n& [! j1 q nDestPos++;
, H( D$ P8 l! g- i2 x- S continue;
: p; N1 r1 Q0 h! N: K/ x }
9 o5 ^+ i; B1 j6 C- N pInvSort->MoveItem(i,nDestPos); r$ A; \2 L2 ~8 D$ U
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! T4 d7 W/ m/ t! P7 Y% t Sleep(5);
# J2 z2 S, s$ z$ g( u2 z //Error("移动 - %d->%d",nSrc,nDestPos);
- b9 j; m: ]4 L+ S' _4 x5 p" j' Z nDestPos++;
! E" x* y) s* e2 b& t }$ k4 Z4 d1 x8 b+ |
//取第一个元素的信息
. m) y: _. R( y% @: g8 @ /*
6 x- N' {( K( W; k4 M8 ~1 j; T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 b4 |% o6 S7 K7 s' t( u {/ h& n3 E. u" Y# M, |2 [' Z! R
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 X: Y" j) l( E, u4 O
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. j1 A& T- Y% n, U/ \& L0 _: B3 Z
}
w) g; q6 r& g */6 Y0 l& U1 D, O5 f9 Q
//////////////////////////////////////////////////////////////////////////) I* ^5 q6 I9 H9 o0 l3 s( `5 d
break;
+ u; ?0 s1 l7 [% V }
c! {0 ?7 g- I } ; h Z3 i: e- G. k% N5 p7 ?7 d' l- o+ I
}$ S! O/ l. n& [# @; l1 R( X
m_wndMenu.SetVisible(FALSE);
, C; x4 ~( M" D+ e* f4 k& p. Y X9 J8 d/ J
--------------------------------------------------------------------------------------------------------
" _8 z, o5 z$ M$ S+ m( o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' W' L9 r' F c7 y; i7 v* G- `{0 X8 ?1 M8 C4 k
BaseMouseCursor();
1 O. a( [8 P7 R: r1 Q4 k}/ U, r% r! }) e" K4 f- ?9 d
在其下添加:9 n+ K2 t+ T* a# w: W. J: X( K
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! [0 G. o( w9 L' `0 {/ |* s; |
{4 m' W# A0 I1 o
m_wndMenu.DeleteAllMenu();
4 c2 j0 j5 E/ sm_wndMenu.CreateMenu(this);
+ u" t5 P" U1 g0 p+ rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 v# G2 c0 _8 Q) q8 G7 p# d3 y! n
+ b# U! p6 J& U5 o4 Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) G+ O1 U$ p8 X5 j/ h* q{0 |7 t. q3 O0 e0 W4 ?; X- T) @9 T
//P以上级别才可以删除所有道具
8 Y2 W# a Z4 R: P! ?: a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ l% H2 j( U2 U1 v. J3 ~& e}
' D" [ [* ?6 |* mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: s2 W7 j& U2 jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 V5 w( O9 ]& N2 Y, e5 F$ W
m_wndMenu.SetFocus();8 a* P8 m" z4 l+ ]" S
}9 S- w; N1 T A+ F$ b5 E3 Y
------------------------------------------------------------------------------------------------------------$ S+ V4 \& }* ~' p
*************************
$ X# @# H. @, J5 ^1 X8 @/ I8 R! {WndField.h文件
( I5 q* F; U$ S0 \*************************
1 d+ D/ T4 V+ [1 ]" x# t搜索:BOOL m_bReport;, A, E! y+ y4 \1 x% N1 x
其后添加:
& s6 Y: u5 i$ ~3 i0 LCWndMenu m_wndMenu;! H7 A& B' J6 l D& [& @
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 z/ F2 s5 z$ D7 O5 N其后添加:
2 G$ Y+ u3 O8 ]7 g2 ?# ]2 _virtual void OnRButtonUp(UINT nFlags, CPoint point);/ h3 u2 W( y" ~3 ?/ l0 l7 p
7 D6 M3 C6 o; _* R5 E2 J# A3 i
: _) k. [' X: O# b2 k) m- I |
|