|
|
源文件中_Interface文件夹下WndField.cpp文件6 x5 k* J ~7 J1 R2 F1 p) v
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
`3 p! R& k) M! t( S- z3 m$ u! \* X. c) ~
struct sItem; c9 x* `% ]/ H0 B" {
{
! W6 b! d' ^* u! ]DWORD dwId;
4 m$ b$ j7 B: cDWORD dwKind2;
# Z7 U5 K1 A/ wDWORD dwItemId;7 `2 P" D: _" L- N0 b5 t
BYTE nIndex; l$ ^( D3 N/ _! K+ t! J# \
sItem(){
/ o7 l1 z Z/ ~9 A& ?/ X dwId = dwKind2 = dwItemId = nIndex = 0;
/ B g+ D7 n& K}
) y8 L9 i5 Q' @" ]7 B: t( }bool operator < (const sItem p2)
7 R: Y8 Q6 b% C4 Z$ _{' E/ ]/ z5 R& V1 [
if (dwKind2 == p2.dwKind2)
/ K7 U+ j4 u' T% m/ f; N" x {
9 X: R2 d1 k9 b) k/ C return dwItemId < p2.dwItemId;( z0 @! y4 [, _5 m) Y0 F) X o
}else{: x c+ t% }5 e7 s1 K
return dwKind2 < p2.dwKind2;
# g& Q9 y$ l. F& C% K0 E7 j }
( u" [! Z: @$ z0 k6 X: j4 S}. x3 U( e: v) b$ y& ?
};) e q% V# _& T% A2 s v! V5 @6 S
class CInventorySort& `3 h+ X" g+ o, o# y* } N
{! p7 H5 @0 `8 m+ d k" L" f! w1 W5 _ Y
public:
4 n4 z$ g" p% v. ACInventorySort(): y) p# C- }8 h8 D
{4 ^/ u% a- B: ~3 ^* Q0 r
m_dwPos = 0;
' P* N2 G _; q/ R. l6 x}: f5 P+ ~6 Y* j
~CInventorySort(){}+ }! n; Y' Y# _9 D' j6 A
private:! [& Y/ R9 n5 ~- V( k
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ K+ z8 A+ y& i2 Z i: n
DWORD m_dwPos;
) x$ m$ y! m D( d1 ]public:! |5 ^$ i; i; V) p
void Add(BYTE nIndex)7 c3 S$ T" T5 d/ C* _* r
{
; `5 t4 {2 ^5 N if (m_dwPos >= MAX_INVENTORY)
. B8 N8 ~! g$ s! H o0 s {
" O5 h& I3 [$ p. m1 E7 E! q% { return;
5 e8 q5 w7 l. l: R9 A, i }
8 w: m8 c6 B# g2 v, F0 { m_Item[m_dwPos].nIndex = nIndex;7 c' p4 u8 a* o/ I; J( s
m_Item[m_dwPos].dwId = m_dwPos; j5 k) K8 [& U. [8 L
m_dwPos++;
% f4 ]4 _2 N, w( ^* h) \9 n}
4 c5 N% `0 x' E& K$ DBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ i& Y- t; _' z; L4 ]) O. c3 h. B
{- ]# f8 t* n% S% t( {
for (int i=0;i<MAX_INVENTORY;i++), G/ b: k" |) k6 v. \
{3 X8 b- D% |9 v) K8 E& p
if (m_Item.dwId == dwId)0 k4 E9 {5 c* H" n
{
6 r& ?# Q/ E3 i return m_Item.nIndex;+ m; i6 n0 |5 u1 h0 u- h' Z
}0 Q1 F4 _# s+ k8 u
}
6 z9 L1 X% }& F2 i; v8 e9 g) t return 255;
) {" E+ J" l+ V" F+ R q}
+ i/ \- I; D" z: P$ s, \$ jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 a+ N7 {9 u1 \$ \% d: N7 U
{
1 L5 u. N1 G g1 X* w BYTE nTmp = 0;
$ Y0 R7 r: v- |' Z bool bDest = false,bSrc = false;5 x/ v/ A& R1 s& F' j3 u! f
for (int i=0;i<MAX_INVENTORY;i++)0 ?$ O U' W) S0 R$ z/ |6 u
{: r, Q" x+ P+ k0 t
if (dwSrcId == m_Item.dwId)" w x; q. O7 y
{2 _; ]! k: A. f" A4 P5 s
//id相等 则 改变对应的dest和src/ F4 C+ m. n. Q z
nTmp = m_Item.nIndex;1 F; P8 V6 K# L- \( z$ Z
m_Item.nIndex = dest;" t. ]2 a6 o }0 {& e
} q! z& h h- V* J' F
}8 f+ K( b! g1 L1 @
//临时数据保存完毕,交换开始
" I7 G6 w* |! Q/ e; S( ?0 \$ e for (int i=0;i<MAX_INVENTORY;i++)
6 F% q6 L4 O! P2 a! ^ {
8 W/ s1 e: d9 c0 S: R' m& [ if (dest == m_Item.nIndex)1 n5 z) s$ d: R2 v7 e z* ^( B) C
{$ w* M f5 B0 N! w3 C! Z+ y' Y
//id相等 则 改变对应的dest和src
, o' W# l0 O3 B& |' {" k+ m! T- r6 | m_Item.nIndex = nTmp;
" l' }; j1 V0 @. A& r }+ T2 Y `2 x0 n
}; L; Z5 t/ Z& U6 W2 |
}# {. k: Q [3 G* p$ l
};$ |. v3 N9 Z7 E1 B% K: O" [& z
-------------------------------------------------------------------------
0 Y$ A9 N) a1 W' o5 k* D4 o. _& l2 W依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 P0 N& ~- |$ }4 l+ Y* V8 E+ ?" l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! g* Y* x* }* h Z$ i6 ?紧靠其上添加:" W7 e& W4 ?( \' e5 d; r
if( pWndBase == &m_wndMenu )
: N) X5 f/ [( D" \" H( ~& B P{
- \ P8 j& V5 T: l0 O* |( [( A& a switch( nID )( j% ]$ ]7 H2 X& v+ J# w
{* m* g( {, \3 T) [
case 2:
1 b9 R! t$ l9 F' a* b" f' i! k2 V3 c {
' V9 F; E9 v7 i2 b% V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);$ u: k1 s7 a/ G9 j& ` G0 P: |! ?
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 M. P+ M4 w4 v0 n8 j0 w7 ` {' T: E- `9 f7 L
break;! W* Q; X6 t4 X
}) |1 ?' m% e2 j9 z& l
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 N! l5 s: j7 w" B4 F2 g
{ q. P7 `0 k# H5 j7 i3 |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 O2 w% ^# O+ J* r; e3 b0 I: S
if( !pItemElem )
4 P. o( b2 D7 @! `- | continue;
/ W# m$ [3 R$ r" t' r) i( y if(pItemElem->GetExtra() > 0)
. p/ p1 y* q4 p1 N continue;8 U( i" h8 I; q6 W, ~
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 W% U; G9 C8 m
continue;3 i2 @) j; r. m3 e
if( g_pPlayer->IsUsing( pItemElem ) )0 {) ]) k9 l% c% s0 N
continue;
- w+ ~+ k: J/ \7 \ if( pItemElem->IsUndestructable() == TRUE )$ B1 X* ]$ g+ Y1 y) M5 w$ B" B
{' E X7 i* y4 K5 ~) E9 O7 k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 _8 |- t& _: G$ k$ y: e% | W( e continue;
# U; U1 E1 T6 k9 f7 Y% s }5 g* L% X- N f! z9 u. ~2 d
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 a* x% l% k; D }
6 z: y# J/ `; N/ G& R3 Z, t! g0 N break;& J; y) Q+ G. G* \$ T
}2 D1 V6 v8 N) F1 l( F
case 1:
+ R4 d2 Z s/ t! H0 t {9 m: m+ b& q: g3 I# B8 U
//整理背包6 Y" X# b) r8 i& `
//////////////////////////////////////////////////////////////////////////
5 [6 Q' t0 \3 T; v7 S //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 B) G ^" @! y2 S
//////////////////////////////////////////////////////////////////////////
. e4 l: o& B( O, p6 I+ ?% P1 _: K1 u) _ //////////////////////////////////////////////////////////////////////////& {3 x! K- J3 V/ Z) G' Z8 x
CInventorySort* pInvSort = new CInventorySort;
9 \' D8 v/ p& s9 a) G& f vector <sItem> vItem;$ q$ d' ]/ E9 w U- P
vItem.resize(MAX_INVENTORY);//初始化大小 S2 k# S) r0 J+ i
//////////////////////////////////////////////////////////////////////////
$ d3 s4 u3 o! Y% d( v9 x; v //填充数据
5 _# i3 H( K: t! F- o5 m: W7 P N for (int i=0;i<MAX_INVENTORY;i++)% z# o: x1 ]$ s- T7 K$ S( K
{% l5 X1 e8 Y6 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 |) i, U# O$ Y9 c
if (!pItemElem)
) K% I7 b* {8 Y {
# O* \3 j% Z9 z: D* l k8 `' w vItem.dwKind2 = 0xffffffff;# M1 G; F- A B4 T$ j# i
vItem.dwItemId = 0xffffffff;
9 x1 _, n c& c- K vItem.nIndex = i;/ ]5 l/ m7 ^, I$ R
}else {
4 C, ]. i6 o2 _2 x% s2 k ItemProp* pProp = pItemElem->GetProp();- j8 @0 |3 f' U5 X4 n0 j
vItem.dwKind2 = pProp->dwItemKind2;
- p Z v' I' m# N$ } vItem.dwItemId = pItemElem->m_dwItemId;
# H' ?2 v: X( k: h vItem.nIndex = i;& ?; O2 e( N5 p; I& f
}# p ?3 w8 p6 q( g: B s
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, z- |- M) E- B/ y/ I } e" m6 V; i' w. U
//////////////////////////////////////////////////////////////////////////
# V5 {: N C& \7 O7 L2 }, Y sort(vItem.begin(),vItem.end());//排序
# C3 _# b4 X- g3 T& [9 @, I //////////////////////////////////////////////////////////////////////////
" m! D) w H7 c //交换& R9 Q( `! Q) N6 z; W# I* l
for (size_t i=0;i<vItem.size();i++)
- i5 U6 T) T0 r5 K$ O* i2 K {5 e% I" N a; c; I/ N
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) q" }. f2 i6 k* R7 H3 J) l- Y
pInvSort->Add(vItem.nIndex);) u, s/ @/ `8 Q. `1 g& U
}
8 @ D% L& J/ A& V' L' o BYTE nDestPos = 0;
1 g5 F1 y! o5 d- k/ k for (int i=0;i<MAX_INVENTORY;i++)' Y5 t# W7 C. j; S( [# E
{2 c+ v7 d# R E" ~& a7 E* h1 ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
Z1 h' P( b( V8 y if (pItemElem): {; J* C0 I# ~1 D, o$ O
{4 e/ p+ Z* r% |- i7 E
if (IsUsingItem(pItemElem))
" y# x% h- v$ w: K; k {
* N" e% r/ Z; R: G6 \, K' ^ //这个位置无法放8 K7 ~& @% `& \' B5 T
nDestPos++;! ]0 p- M( ` q3 e# I( o. L: k
}
+ H8 a6 R) I# z F! c. U } J4 l2 ~2 `: R6 @' u, O: J
BYTE nSrc = pInvSort->GetItemSrc(i);) B" S- R9 e# H9 B A2 h; ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. [9 `/ J, ?: r; M7 l- I
if (pItemElem)( n, V6 U6 [/ k/ J/ m
{1 ^2 h! g% ` T
if (IsUsingItem(pItemElem))
6 `" V) o) O# A. O {- m) B3 ~0 h% E1 T1 M
//这个道具无法移动,跳过 u- @$ n; K! h% j, m- {2 @4 d7 @
continue;( r# V0 g* H3 ^9 v* m8 N
}
. a+ _, V3 y1 u' z }else{4 x# L2 g- K- D1 o$ u f8 W
//空位置 不用动4 l- @% v8 b( O0 O3 m, a
continue;
& G B1 p3 e9 O }
/ R9 J( [3 ~% B //////////////////////////////////////////////////////////////////////////
4 H: D: d7 y4 E( K1 n //开始移动
7 K+ s) ~* q- U4 ^9 s$ R& k' c5 o if (nSrc == nDestPos)' N! g) ^ Y/ i/ _7 @* y/ r) L
{
2 i- b% W$ u9 _6 s' i //原地不动- v; y7 U n, L: B, {
nDestPos++;' Y9 p- u0 T- D; z a* D& a
continue;" i2 I% ?, U" O7 U) R8 `4 K
}' w8 n" H9 y" k% [: P
pInvSort->MoveItem(i,nDestPos);
, z5 `8 ]0 X# }7 o* H2 s/ g4 S/ w; i1 O g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, f# L' H0 j1 X3 n( I% j' f$ R8 v Sleep(5);
) d# b/ Z6 p9 l% B* h k //Error("移动 - %d->%d",nSrc,nDestPos);8 O$ w& A7 }6 X" a. }) |$ y
nDestPos++;. V: \* {2 Y! @# Y# t- {
}
3 R% z) w! B* m* X( J //取第一个元素的信息" u3 s, t6 t) p; ?4 \/ x: G. Y$ q
/*- j+ `) I( F" s+ m3 m1 ^. X8 s0 Z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 J% g, S* F1 i. T
{
& j. f9 v/ T" |/ {* B4 _: f Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ Y& ? p: F) V0 ?0 N4 U( u' k) O
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 U2 B/ h; A g, @ }8 s4 O; b- u6 q7 s( Z3 g1 A2 [1 R8 Y4 `
*/
4 L% O; t6 G8 M //////////////////////////////////////////////////////////////////////////
U$ h5 X% Q9 e% \' a: x9 q) y break;, s$ q& B: t2 O' f$ N( Z6 j9 q
}% F( Z2 j7 o1 L/ d$ y3 W* B$ B( ^
}
# w) G8 P: v! i1 v7 J}' y, e2 B6 t/ E
m_wndMenu.SetVisible(FALSE);/ n. J2 D f+ j1 X8 k+ [: C& K
3 z) E2 }' k/ t! g--------------------------------------------------------------------------------------------------------6 X! n2 L4 M+ n" M" y' X9 d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). ]# L" q R" f- h7 k6 ^
{: Z- ~: \) f, q( w: p
BaseMouseCursor();
) ^. k9 g4 [* H$ u: e}; K: ^; o( L: n0 \6 n8 d, H
在其下添加:
. L. z) `# q/ E r! \2 rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): Q. s8 J+ t9 }1 N7 \8 H) _
{+ q3 z) Z m: b' W) e2 Y
m_wndMenu.DeleteAllMenu();8 W- J, e: W l# M ^& |
m_wndMenu.CreateMenu(this);
( n8 V3 A2 Q W- P( Y8 O. o" xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 u, U+ G7 C& y x+ L4 i2 D+ ~
4 |/ @9 Z- b9 ^+ _; K7 K% Yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# `1 _" j0 f: I; T{" w5 D4 [) M3 h) S' x
//P以上级别才可以删除所有道具" {! R+ }# Q6 r
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. [! T. x+ D5 |, k2 X7 v}/ N1 n9 S8 r* R3 O% l# H& c5 L
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 d! W$ _# k$ J: z1 j4 D0 o% \* Im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* W! j+ `, C R( d8 Vm_wndMenu.SetFocus();
1 B0 } U8 B8 b+ x1 r$ ]/ a}
9 ^( f1 ^- Q& k: V------------------------------------------------------------------------------------------------------------* f" C% y4 \: l' |8 R/ C
*************************$ a4 g8 i5 x2 Z) H( I+ s- _4 b+ D4 y' x
WndField.h文件
" P9 {! k( R/ N9 ^7 K" B r*************************9 i: D: n: x: L& ~' H2 m1 p
搜索:BOOL m_bReport;0 R9 s$ B+ k" @% j; _
其后添加:
6 T; T/ a0 N( D5 iCWndMenu m_wndMenu;
4 V E, ]2 S* ~搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* \5 S* f. l: Q9 o& w
其后添加:+ e3 ?' O. @% f( \, [
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 O# H5 S. r5 A3 u1 ]1 T; N) a/ S0 W/ t; e) Y- r. o ^0 ]
' w0 Y+ }5 F) S4 c) q0 z( L" W0 V6 l
|
|