|
|
源文件中_Interface文件夹下WndField.cpp文件# _0 P$ J. @+ C; R2 C+ M+ a# i
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ R2 D7 _- G9 J" y( ^: u
+ E: B7 b, ?, H8 k" ~/ kstruct sItem$ l9 t- U8 n9 N! ^- Q3 Y
{
8 I6 z% s% ?& n" L% D% {6 b: JDWORD dwId;5 ]2 v w4 R. @
DWORD dwKind2;
9 }$ M! K0 y9 a; a% }3 I3 U, V/ ?0 jDWORD dwItemId;
7 }/ t, w% L! m- jBYTE nIndex;
$ B/ q7 x$ b1 R \sItem(){
! e% y- F4 w( C dwId = dwKind2 = dwItemId = nIndex = 0;0 b9 |- n) L" Z) p# P/ n: K, d* H
}
+ I8 s& b! z( N2 y# @+ Ubool operator < (const sItem p2)
7 v: P6 v. i6 v{; _( H% L" Y4 s, Q5 n; D
if (dwKind2 == p2.dwKind2)' i( `$ z; `- }: Q% J& M! S5 W
{
* Z# u7 g6 s2 ]' O3 m return dwItemId < p2.dwItemId;: G, |3 j8 k$ X+ }" Z4 |: P* c
}else{
& W$ N( J9 T& s1 s7 Q; S return dwKind2 < p2.dwKind2;
1 X1 I) y9 @1 s% m }2 B' [" t& j# _1 a J. Q3 L& O' c2 l
}% v3 S9 l) h5 v
};+ H# a0 h% Z7 C0 c# W0 @- @
class CInventorySort w" U3 w9 L- R0 O3 n
{
4 u3 ^8 v5 y5 b% z: Bpublic:- N6 N! `, p% f' I
CInventorySort()1 m$ G5 y1 O2 o8 }4 R
{) c; A8 y" Y) {
m_dwPos = 0;2 M8 w0 E4 }& H' G( T1 _8 Y5 Y; \
}# \8 D+ B3 y* V" C: |9 X6 d) C3 K
~CInventorySort(){}
' V* v! N# D4 K& w& gprivate:
: P; L: F0 R G N( W8 e! [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ m }/ H# K. q/ E. c' c- a$ zDWORD m_dwPos;% M- h" i6 e1 B0 f: s1 E" E7 ?
public:
! x A, V- S9 _% [& s Xvoid Add(BYTE nIndex)
; s% q2 p5 L, ?" T# S{
/ n6 t* {/ p' `: v' ^( V9 I- N if (m_dwPos >= MAX_INVENTORY)
5 P# W+ o8 d2 m, C( v {$ Z$ F; I" H3 o5 e
return;( v) Y0 g4 B6 S, W
}
/ s. A/ B: N8 X( ~( I2 R, o m_Item[m_dwPos].nIndex = nIndex;
6 @6 d' s c( K* U m_Item[m_dwPos].dwId = m_dwPos;
1 t* s% s* B; ]5 d+ K m_dwPos++;
) B, L, j' ~3 }5 g. f2 z}
: `0 `) ~* ^$ x- F6 f8 L" @5 ^) gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* |* z9 B; o; L" t5 s- J& i{
1 b6 S; N5 d1 n! p& T% ^ for (int i=0;i<MAX_INVENTORY;i++)1 d* j; [2 b" ]+ z6 ^% y
{
( H% m8 K! R2 Q6 C6 J$ j if (m_Item.dwId == dwId)
# m4 v- N! `) h {/ g% V7 \% [6 ?) e: b) n1 Y3 N
return m_Item.nIndex;
5 t; C* \5 d% C }% [' U" \( n- |- ]: q. H
}
: U1 j( V! W0 F; N. `2 B return 255;
$ L7 @3 u' j# W. R$ }5 j5 R}
9 I5 p$ p2 a4 F1 hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) }9 `3 D6 U8 A
{0 E w, v* X& C5 J$ d( S
BYTE nTmp = 0;
& V* [; Y, D' E6 _ bool bDest = false,bSrc = false;
$ S7 e/ i% d2 o4 `7 j for (int i=0;i<MAX_INVENTORY;i++): |. X, P# P, u
{
! ~# g0 m! d& O0 c$ a/ t if (dwSrcId == m_Item.dwId)' Z/ t9 Z7 {' ^1 f) }
{: b; s/ A# I" C# u
//id相等 则 改变对应的dest和src
\7 [$ ?! N7 K1 |6 B3 B8 d7 V nTmp = m_Item.nIndex;
+ a" S: c$ t: P m_Item.nIndex = dest;( r- z+ A, F- j" C j! W
}
! B( Q/ T5 |* s, I$ F& F }& w d9 M4 x! F" X1 D3 a! S* X
//临时数据保存完毕,交换开始
8 k% ^% r- p, D) n for (int i=0;i<MAX_INVENTORY;i++)
% u% h& r4 p( P5 b/ F: a {
9 a3 b. h! n% p q) r if (dest == m_Item.nIndex)2 x6 y4 K9 ^! a4 r3 }
{
' }' d- d" }* ]' A4 h/ } //id相等 则 改变对应的dest和src+ ^3 q6 S3 K& x5 l. G3 x* u5 i& |: r) s8 _
m_Item.nIndex = nTmp;( u0 | `4 k0 L! {
}" d% X% c f9 q! h) f. L$ P
}
, T! e/ p" ]% I+ X4 p: D; t- b# s}4 y/ Q- i( o/ F
};5 X: i) }, f2 l; ^
-------------------------------------------------------------------------+ o& G, b$ q& m) N# f1 o- [' O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 u9 a |2 E' k% Y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) K: ?. r( z$ m4 [ F" H7 C紧靠其上添加:1 @/ n" O2 r" F' q# ]
if( pWndBase == &m_wndMenu )
9 \7 g# b" N2 X! ~4 g! A{ \- d& Z Z" J1 E4 Y
switch( nID )
7 m0 x4 V, V7 L/ }2 K" Q' @4 f {& l. K; T$ m4 [. g8 I
case 2:
" g! U: L4 D: f% w* m: u& K {
9 b* B! [8 g& D, l8 ?3 f6 q8 u //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 H* n& ?0 |% `4 D if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ ?1 m6 }7 Z& R
{
+ d3 K6 S, i5 S% b) e break;4 e1 M" _, R% M. ?, B: f$ d( H
}3 [6 ]! m+ d, [' Z! Y. P
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 y8 P: B, R6 p$ t9 f7 I* E+ \ {
2 S K, w0 Y4 r: f, i' h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* f) F/ K6 Z5 u1 r if( !pItemElem )8 Z! g: c* h4 T/ }
continue;
% F$ }" X+ }) Q7 s& S6 m, I if(pItemElem->GetExtra() > 0)0 b# g2 s6 a% v( N% R
continue;. t) l; }( L4 _/ X8 }
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) N, r& ^! c: a+ k
continue;
/ d3 z- H5 P+ F$ ^) U6 I! {* D if( g_pPlayer->IsUsing( pItemElem ) )# }/ P( X" M" w" |
continue;9 b K% G+ z5 U/ F% q
if( pItemElem->IsUndestructable() == TRUE )
, T) V4 T$ V. @4 Q: ~ {, M7 e u9 F. Z( ?
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 d+ x; m5 B3 b- v
continue;+ Y1 [6 @+ [0 m8 D
}3 X' F/ e/ D! S* E* |% }4 q
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 X" J1 @ Y% x- x' {2 Q }
, l$ {' U' o+ M5 e$ O break;1 h. S7 a1 a* }
}6 O, O! w$ Q' W) N" S
case 1:
, ~8 {( s6 W |1 @9 r {
1 C! n7 z) x k/ p //整理背包
0 \& Y9 y* i; R- g5 O! ~ ////////////////////////////////////////////////////////////////////////// O r) v' u4 ` @ v/ E
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 _/ r, N( N. I7 Y. p
//////////////////////////////////////////////////////////////////////////6 }( n4 N! e% l% A- ~- [ Q
//////////////////////////////////////////////////////////////////////////4 N' ~0 h, l$ |0 v
CInventorySort* pInvSort = new CInventorySort;6 P$ s+ N" }' c; y6 z! k
vector <sItem> vItem;
4 l; H- {% X6 h. u( J0 P vItem.resize(MAX_INVENTORY);//初始化大小5 N2 z- C) C( q: y9 H
//////////////////////////////////////////////////////////////////////////. d7 }2 ~% H& K) t, H- Y0 t
//填充数据0 j6 u0 w0 D7 Q) F6 h8 l
for (int i=0;i<MAX_INVENTORY;i++)! e: F) L: W1 M0 W
{3 _* N' F2 ?0 V3 V1 ]8 W4 i0 @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" w$ z/ H' c* ]
if (!pItemElem)
i, Z) K& x3 ?$ e3 V8 a {/ U9 N0 k# s" c& A
vItem.dwKind2 = 0xffffffff;. H& H6 q9 g9 K8 d; G' m# p9 f% Q
vItem.dwItemId = 0xffffffff;3 A. `3 |) }. m0 k, J( g# ~& O
vItem.nIndex = i;. ]: o( c3 p5 H( k
}else {. g( }' z3 n p2 I/ P' |
ItemProp* pProp = pItemElem->GetProp();2 b# K) T: J! G9 `/ J! q- T5 b
vItem.dwKind2 = pProp->dwItemKind2;' a1 k4 z7 X7 K9 M) M
vItem.dwItemId = pItemElem->m_dwItemId;
+ D3 V9 a- h0 Z* e+ n vItem.nIndex = i;
/ S( g) z/ y, x% `" t5 E }/ U& N. {7 m' A: f) b% I
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# g1 f. {& V( G6 Y. A! t# Q" F }
# U# i. q0 ?. K/ s; G7 { //////////////////////////////////////////////////////////////////////////( x5 C: i6 k$ K
sort(vItem.begin(),vItem.end());//排序5 B- D6 B$ g6 d$ m
//////////////////////////////////////////////////////////////////////////* R$ l) a& n y" c4 L
//交换7 m9 }# M, F/ y/ F* I' n- f# H
for (size_t i=0;i<vItem.size();i++)/ n) V) M: r% @8 v& O; f- f
{/ L: N! J, `5 H8 P' C9 F6 E# T. G
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); X. b# H# X& ^. R0 B% r
pInvSort->Add(vItem.nIndex);) a6 c2 C+ I9 F/ _& K2 R
}
' ~1 |) x g5 p. |: W9 j BYTE nDestPos = 0;
; X7 l4 I$ }$ m( x' x4 ?) ~" z6 S for (int i=0;i<MAX_INVENTORY;i++)* J6 I# ^2 X9 z, W' d$ L
{" \# ?8 M2 O: c: Y# P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 D# n- J3 q, n6 T% k
if (pItemElem)* j, g \$ n7 ^- P# U0 X
{
: ^, w; f$ @ j5 s' l$ z if (IsUsingItem(pItemElem))
/ }0 |( u' z; r' ] {
0 H/ M# g3 g+ Q6 s/ M! z //这个位置无法放2 }+ ^! X9 d9 }0 o: x- {
nDestPos++;1 S. e" z3 r3 ~' J6 M4 k) J
}) C4 i/ m) {9 _2 q! N! d8 ^
}
! B5 L# d; I# B# H1 G" V/ @! T! Q BYTE nSrc = pInvSort->GetItemSrc(i);, D3 r: E" ]; b" F& g4 U/ Q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, `, Y5 w/ ]- }
if (pItemElem)
, O. K$ F- t. C! X4 P% p! j" |; F {
+ M& d* N5 y7 s7 n$ c if (IsUsingItem(pItemElem))' H6 l3 l/ p% x5 @3 c: G1 J& d8 l+ s
{: X' x$ N( Q/ d2 h
//这个道具无法移动,跳过/ Z6 m& g: A0 Y8 A
continue;* E. j1 k1 q3 a8 |+ ^2 S6 J
}/ t0 }! b& I6 `% `" c9 q0 w
}else{
, W) d. u" u% @+ V* _) B! X+ ?, x. N //空位置 不用动
* q' x* p+ E% J" c continue;9 \, p1 S" q2 I0 j+ R$ |; _
}
: o' ~% ?8 a& \( {0 R //////////////////////////////////////////////////////////////////////////
. |6 ?2 J& A" K4 R9 r: z# I5 \, i/ L+ X //开始移动
6 f- k- d2 e( C4 s r if (nSrc == nDestPos)
7 }/ m! v g6 H {, ^# S' s5 } z: x+ N2 L
//原地不动; [; ?# x7 M I4 X9 o
nDestPos++;0 z; g2 J e/ @# _" i+ B, o
continue;8 y9 u$ ?& J) Q) [
}, [- R& X3 A2 E6 T
pInvSort->MoveItem(i,nDestPos);- ~) Y, C7 N4 q4 K
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; w5 u+ R# S. H K: L Sleep(5);$ W) c3 L: |0 Q1 m2 o
//Error("移动 - %d->%d",nSrc,nDestPos);
: ~5 p6 y1 H% P# B7 B! B3 J* f0 y nDestPos++;
3 Q/ q6 ^3 n& v% N3 H9 x' l6 \ }
# T$ ~% L1 D+ z/ r0 O4 {+ h7 Q //取第一个元素的信息! v. x/ [. ]' Y5 Q: l3 U
/*: A+ f% ^/ z' G
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 O a- W$ Q" s( f# G- v } {
9 w' J: \. e- t, b4 d0 I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 |! [: H" w( b* D
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
# d8 d0 T* w$ y% G) ]* ^ }4 G# R# V% I( T9 b4 U
*/
1 B/ ?: i9 o7 U1 l //////////////////////////////////////////////////////////////////////////
! G' Y+ O) H8 U9 p7 \8 ]) V, \( K break;- L$ D; w2 O; ^8 }
}: b/ ^3 l4 i5 h T
}
* _ O* G ?2 x9 \}2 r1 F5 T1 Z+ {( }/ g$ N
m_wndMenu.SetVisible(FALSE);
r% \8 B+ @: w* T% T; Z {" w: g& S4 k0 S! W/ p( o, P
--------------------------------------------------------------------------------------------------------
0 _6 ^' ?8 q4 g' E! z. p1 _. }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ j9 c; P( }: t' [/ v{8 {! B- h. A; G3 r
BaseMouseCursor();+ J: P9 e" ?. Z
}% y& S& I' v0 S* B: _
在其下添加:0 M1 d& H4 y. H5 B0 @
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). k6 ^5 V# }, N% O) G0 ~+ o
{/ h+ ]8 o) s, l9 z( f7 U
m_wndMenu.DeleteAllMenu();: s5 g% y! T7 v: M5 f5 L
m_wndMenu.CreateMenu(this);- y" d. f' U. C d! L9 N
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% h/ M: f) Z* @1 J- M1 C) w2 Y. w- w8 l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 F( w3 S" [" ]& E3 _
{
: f- K0 K9 l# W# W //P以上级别才可以删除所有道具
8 L1 T% O2 R1 X m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# Q9 D" j# s6 Z) j8 |% e+ m}: _8 O1 d- Z; K) ?5 n% q) F
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 c, m7 ?7 N/ _# a5 G5 [- l! l2 g! n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# |" J+ Y8 l) o- n. y- F, B
m_wndMenu.SetFocus();
6 T3 h7 s X, m5 g}
% D$ p2 ^- Q/ | R+ ?9 h: ~------------------------------------------------------------------------------------------------------------5 ^( \4 ~% z4 `& c7 X2 ^
*************************9 d7 C& E3 {0 M* G
WndField.h文件
( [8 c \+ T: v& J& A! p+ C*************************4 r) N3 ^) Q+ | h
搜索:BOOL m_bReport;6 y K7 B9 k5 z) K) q; v
其后添加:7 S- |/ C$ W- N/ ]
CWndMenu m_wndMenu;6 R) J& J+ c& J1 V9 P4 m* F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 V4 X$ H$ @+ \; w) e: \' J
其后添加:6 d8 Z& A/ s5 E! E h
virtual void OnRButtonUp(UINT nFlags, CPoint point);' t; Z. a; u/ V6 t, v! \! [* F d8 a
$ K! N# u$ X# U) D! K
: C! h A* e4 ?# U5 l* _& j/ D
|
|