|
|
源文件中_Interface文件夹下WndField.cpp文件0 M5 F: Q" w, H. m/ S$ Y9 g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 G2 L2 C( g! O! D* B+ W, o
2 b" D) k1 s9 O1 B6 d( [1 m% d5 Ustruct sItem9 m) m( X& F. T6 _8 z' _
{
0 a* d; D: U9 N4 O3 TDWORD dwId;! ?7 m) e( ]8 N
DWORD dwKind2;- G2 @) M/ h# c
DWORD dwItemId;
5 a+ ?% @+ I& l W7 s! SBYTE nIndex;
1 @! `/ Z* n0 \* @ E/ ysItem(){
2 P) C! [$ `* n( J, g J dwId = dwKind2 = dwItemId = nIndex = 0;5 x2 ^( T A- G; `0 Z
}
( `/ K; Z0 v- [6 [! h0 s$ Zbool operator < (const sItem p2)8 b. ~) y2 m1 A/ j! p3 w
{
! `4 r' L8 J4 p, f$ M u Y if (dwKind2 == p2.dwKind2)
6 m1 T+ a# z1 H/ z9 I {- u" B4 w9 k7 A
return dwItemId < p2.dwItemId;! a9 t! L$ H! ]3 e" J6 {8 \# l
}else{# d% D0 R4 O3 a. s* F" p/ Y. w, t; h
return dwKind2 < p2.dwKind2;7 E+ m0 U, t& y& x6 N; A/ @
}
. j# P0 G5 Z( W; B# `/ w}8 g2 }3 h3 D8 j4 U
};' p o/ t3 v) w. b
class CInventorySort+ D' a2 e8 v2 I2 y
{. C r+ T; g4 Z$ ?6 n, T O# z
public:
( P3 }5 Y% a; D2 X j; w8 D5 ?CInventorySort()
3 e& [0 v# R5 j! \7 C3 O) m& Q5 B{7 v: w1 i- r0 z2 ]8 `. T3 k4 U, E% Y
m_dwPos = 0;! l. g* n8 x" \5 t8 y+ h' x
}$ f' S( U6 x' G, }5 C3 U
~CInventorySort(){}
1 C4 X5 R( l" j1 ^private:
! c! B" N% u2 SsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ U( }0 g* V" J' NDWORD m_dwPos;
/ P/ r3 o; f. P9 |& L" p+ gpublic:
7 Z& W W/ h' ^' R) ^void Add(BYTE nIndex)* l: h6 G7 ~3 k# @
{
% B4 a! N7 N: Y \ if (m_dwPos >= MAX_INVENTORY)
% P$ B$ Q/ G6 h; {6 W* Q3 l {! \2 c3 D4 k" a3 ~8 V( D
return;
$ X5 ]* G9 t2 t( N( E }% ^* Q( q! [6 R# @. A
m_Item[m_dwPos].nIndex = nIndex;
" O! y1 V/ b1 V! I* h4 J m_Item[m_dwPos].dwId = m_dwPos;
$ J6 [. C2 u) D8 [0 B/ [, z* z m_dwPos++;
0 B( a9 g7 f; p5 y9 P4 D* V( q}
! k, l! g. X H1 BBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 _0 T! W( M6 t# W
{6 Y9 S; w2 X6 f. G, p' Q; V* I6 W
for (int i=0;i<MAX_INVENTORY;i++)/ S B f) H# a6 w
{
5 X! ]6 U0 p; i" ? if (m_Item.dwId == dwId)
; l: P _7 T9 r7 E. _6 S {6 v/ @" J4 d$ Q+ a; i2 z/ o& e# z
return m_Item.nIndex;
3 ^8 B: P. ~) @5 l- U }
0 N, z8 @: L9 c- z* q }# u ]' Y2 Z5 ~( o% y t2 K
return 255;* l% u0 u$ |" u# W+ G, g' q1 K
}, l- m0 t4 N. T4 _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 ]* B8 ^4 _% l. F
{
! }! e% V+ I% v9 x4 D BYTE nTmp = 0;
}" K( } P3 D8 z# R" g8 b bool bDest = false,bSrc = false;
& d' t5 B4 D) ~4 j+ H for (int i=0;i<MAX_INVENTORY;i++)
7 J- ~2 ~3 [4 r8 Z* r1 f( { C" ~ {
0 Z, c" P% f8 ~) w7 S; q1 Z' N" g if (dwSrcId == m_Item.dwId)
6 @1 X1 _5 y# w; b i {
& q9 ^, r4 x/ ]7 r: u //id相等 则 改变对应的dest和src. ]/ `. {8 y# i9 O' u$ R
nTmp = m_Item.nIndex;
- O7 w8 U% b( K) f8 F" {3 B m_Item.nIndex = dest;
+ Z, E6 e& T- T. O5 k8 W3 q }) E$ S8 N: G: m, W+ m9 ^
} W- d* g' q% D
//临时数据保存完毕,交换开始' n/ G1 B. X1 A
for (int i=0;i<MAX_INVENTORY;i++)9 X' W9 d! \; N0 I3 [) y
{5 m8 G& }! x4 D1 A( C. @" U* ?
if (dest == m_Item.nIndex)4 V# x& w9 d7 ?; y5 _6 b$ y
{: v1 f5 C' E) O+ }0 W5 D! V
//id相等 则 改变对应的dest和src
" O5 t9 [1 `0 O, D: v# \ m_Item.nIndex = nTmp;5 L1 K$ f3 n: K% g/ y- d: I9 B
}
9 B- x' W. J" l }
( Q% J$ Y/ q* L& p7 c5 g}* M- E9 ?% |) n
};
; w/ t+ c1 q5 {% M- U5 A# b-------------------------------------------------------------------------; O+ ?+ y; \% F. R3 I
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 J& t3 G2 p; b, W% g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 Q9 c% h5 s& r3 ~- f% g
紧靠其上添加:$ g$ r0 h; T$ y* E. y) u
if( pWndBase == &m_wndMenu )3 x% U( k: W- J: z/ R5 P
{- x6 D+ R( ?( ?/ T
switch( nID )% g+ \2 K( D5 j; b0 T
{# o* d4 d9 d5 g
case 2:
! q$ b- E5 \; D8 B7 C) [' c. i3 {3 P {. f+ w+ b& h: i- D i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% `& d" T; b4 H- ?: b- M4 {2 n
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* [, c, a; e y+ @1 }) K+ G& U {
) K \* l1 z! }3 Y/ Z0 H1 T- a break;, L! |6 {$ K0 Q1 Q! M. F- ^6 D
}4 O8 L S/ j" Q( Y6 T: `( t' z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 B0 C" ~) t8 i+ T
{
2 G, d2 B1 \! ?; Q" S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 A$ Q* g" [) C0 q4 j( i if( !pItemElem )
6 V& i K3 O+ i1 G- j6 d continue;' x) x, i/ n9 P1 Z+ t4 l8 d
if(pItemElem->GetExtra() > 0)2 d. [1 f+ v3 `( c
continue;
) B# K4 S& h0 ^: s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( S! p: k5 L2 y# H: t continue;- r/ z5 n1 `7 \4 b- f
if( g_pPlayer->IsUsing( pItemElem ) )( m' T+ i* n' [. b! c4 q2 t9 n
continue;
! ^# j0 u+ R* C V if( pItemElem->IsUndestructable() == TRUE )
& d: A9 H. \/ F7 h( x {
, r) u4 J( l5 ^* x) r7 C- F, M8 X, Y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ h1 t5 L4 L# S% Z9 X' K continue;
5 p8 [6 [" S1 e: Z3 M- F) {8 F }
" p+ q$ a1 X/ R* p3 A& D g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 l# h. S- k* T. C8 v" k
}
6 A; D! s% Q" F1 b) q! p" b break;
/ ^' @' C! r$ v% o" F5 ]0 q }
# Z) E! @8 d# Q. U case 1:
5 |8 d- Z) g# h# n7 E8 a {
- R3 T2 m1 V8 S8 {/ i+ K //整理背包
. I4 i9 m F4 i" A //////////////////////////////////////////////////////////////////////////0 N: F3 G* j ], {0 J; w7 l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ r: z9 V8 s: h+ }7 L% A
//////////////////////////////////////////////////////////////////////////! @, g% O" \# y+ M& s6 C1 M0 f
//////////////////////////////////////////////////////////////////////////
: C7 ?) ^) x' b2 \/ o+ L CInventorySort* pInvSort = new CInventorySort;
- S' n5 K; j2 G [6 c- a vector <sItem> vItem;
- T$ T9 T( t& D8 [" K8 X7 | vItem.resize(MAX_INVENTORY);//初始化大小$ K7 n" R0 A; W! K$ ^7 m) D
//////////////////////////////////////////////////////////////////////////: _, [$ S s) J' ^ N3 V% B
//填充数据
# n5 v4 \' U6 I- J1 E for (int i=0;i<MAX_INVENTORY;i++)5 H' w: }, j) I* t( H
{, w) t+ `9 O2 v/ z. f# X- V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 |& c* e" @. q' ^3 N K if (!pItemElem)+ P% M% o5 [2 U M v
{4 n# |- Q& w8 {3 z- `: P
vItem.dwKind2 = 0xffffffff;
( l/ N" g/ |$ A! R! _2 D( d3 U% I vItem.dwItemId = 0xffffffff;3 |! X5 M/ |1 N+ R9 r1 Z4 S( x
vItem.nIndex = i;0 o/ E3 d! C5 x% Y
}else {% x% K5 v3 {, p! z# Q- U
ItemProp* pProp = pItemElem->GetProp();. P) m! {; F8 }2 C3 @2 n
vItem.dwKind2 = pProp->dwItemKind2;
" `6 X* Q9 I& b3 @" p' j7 j vItem.dwItemId = pItemElem->m_dwItemId;
, i+ n3 L: _4 c# q9 z vItem.nIndex = i;
@4 u# A6 H, ^) x, a; v }* _* a2 t$ M9 t! |4 e
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 b& r/ ^6 r9 r* n- l. l
}
) K7 W4 a! z3 D# |4 [ //////////////////////////////////////////////////////////////////////////
! a) w0 n( Y r sort(vItem.begin(),vItem.end());//排序
6 A1 ~$ s/ P7 i7 n1 i* K //////////////////////////////////////////////////////////////////////////
- a: N2 s# \# k3 E# k y+ j: X //交换
4 W: V/ }+ C; g for (size_t i=0;i<vItem.size();i++) _! a4 M1 y: Z6 s2 h1 ?: O
{
; h, o) L% f+ c- e7 B4 Z( _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: `: d$ B7 j t( {" W pInvSort->Add(vItem.nIndex);
+ N& f7 C( ^" u3 m1 B0 A! S1 D9 b }
& m! U, p# J8 o: ^! T( [ BYTE nDestPos = 0;9 }4 K' }9 B0 P& A+ w8 q
for (int i=0;i<MAX_INVENTORY;i++)5 E; a3 n- F5 a9 i5 M
{9 P" R ]0 e9 d/ q1 J! d% V& R7 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: J, c& [9 _+ |' ]6 t if (pItemElem)* v: M# i3 }- d. Q* ?/ C3 ` }, G
{
! X o' }8 y8 A( r4 n if (IsUsingItem(pItemElem))
6 b+ p- @+ [( W2 Y {
1 B3 m2 Z: C4 x, p3 T X* d //这个位置无法放$ k& s7 J6 S+ m& |
nDestPos++; t& `8 g1 h1 U' r
}
5 E6 V: e$ F6 c# B }
8 W; G# ~& h ?; N( N BYTE nSrc = pInvSort->GetItemSrc(i);
7 m! G2 t! S- O+ T7 C pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- V8 u! y, g) X% \
if (pItemElem)
# [ I- F, ?8 J# `& f% y {% ~/ n! f6 H; G% G
if (IsUsingItem(pItemElem))
: m4 T, s F0 [8 U) b3 h# F {
+ w, v% ^' v. }+ D! k //这个道具无法移动,跳过
9 v1 _0 m% \& ?& K l continue;
2 ~ V: R# s$ H# q5 \0 B& ? }& V+ ^/ I% Q s" w6 X4 |
}else{
2 G- y* |2 [1 N% X0 S) `. S- {1 ^" W //空位置 不用动
/ u2 h% g! Z2 {2 R* L continue; ?1 C( [7 X2 }- x* k9 P
}
; F# S- X) c: z- N. f2 T //////////////////////////////////////////////////////////////////////////
( M7 d- m1 M& y3 j& e& `7 c9 K5 A //开始移动. J, D$ o- f& h( T- D+ f% e
if (nSrc == nDestPos)
7 ^4 `2 Z0 D; k {% P% f) e: o; m- J
//原地不动6 u2 j6 ]: l8 h. @& k8 S& h8 {
nDestPos++;
# \( j3 v/ j( z. A7 Z- W) g4 y continue;
0 P& s- X8 i+ F' z& E2 e& {7 E4 j }
( p- S# \$ n6 G3 M( y) \; H pInvSort->MoveItem(i,nDestPos);- V* b6 b% a1 n
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 ?5 ~ x% K, g8 ~; U4 l4 o Sleep(5);% ?& h' j: q6 V
//Error("移动 - %d->%d",nSrc,nDestPos);; u1 @/ B+ u- k1 n
nDestPos++;# G" @ _, [" e# s8 x3 A/ |% @
}
# u: s% J+ \! U! u) A3 E //取第一个元素的信息) i2 s- x P5 L6 i9 B
/** J! B' t# Y# f5 s( k- n- S5 q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 ^; y+ _& ^& J, c% C) h
{5 t7 E& ^7 {: A& r- [+ Q
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 E- x5 y5 s1 [$ @5 K" }- X g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% X) W& F4 D! g* K
}4 F/ _: J. C. o* e* v: e2 s. |3 X) ?
*/6 _( S$ G9 e' k) D% _
//////////////////////////////////////////////////////////////////////////1 b4 `1 s4 q; u* t4 ~2 X) m" @) M
break;+ U* c; [% k9 ^$ Q, v* V0 s
}6 d+ ^2 K9 V' ]/ a* Z! ^
}
+ p/ x! X/ r/ {. t) d7 Y/ K} [ i3 D* p' Y+ {
m_wndMenu.SetVisible(FALSE);
, {8 @# N# n- n+ u7 k
* M( A4 ~/ f1 ]9 J, e3 j--------------------------------------------------------------------------------------------------------- a5 y+ s3 c+ H4 m1 v$ ~
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" m( c+ b3 K/ o" ~+ P% i+ r{) s2 Y4 e9 `# g( s$ \" s
BaseMouseCursor();6 K0 U, S! U- y7 L2 |. M& o3 M
}, \2 ] I: }. s8 A6 E
在其下添加:
- ^& y& y& w( {* _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 w, V/ i% F! |) K! t$ e$ _' V7 U{3 L# w" B- q3 n
m_wndMenu.DeleteAllMenu();$ v" Z' J: J) b$ F8 ^! G4 y5 A
m_wndMenu.CreateMenu(this);
9 x, ^: `2 e! r3 [m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 M2 m+ a& V: Z5 ]$ o# P4 ]& ?3 b5 `# o% Y& I( _- v7 I7 J
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* {" u& s+ a I( K1 m9 b
{
4 Q4 S* V4 Q+ ^( A //P以上级别才可以删除所有道具' F7 L3 R% Y/ W$ t
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
m. Q6 a1 O3 j6 Z4 ] T}
M# g" j( j( U# ? bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ [3 u! G- z2 G
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 b. g5 R& e/ G! V" ]1 }
m_wndMenu.SetFocus();
7 m ~% i3 C0 a* S}
; I; N0 C' o0 y' G/ m7 f) [. W------------------------------------------------------------------------------------------------------------" w4 Q$ c P4 U, ^* Y% S3 l
*************************8 k4 ~ d) X5 X. j
WndField.h文件
1 D6 _: H* M+ I( [2 l! S: |5 g, `; _) Q4 H*************************
. y7 ~) l- X& D+ ~+ E# Z w) F搜索:BOOL m_bReport;
6 x- m5 L0 j: z6 G其后添加:
( v* c3 E4 d: C' S' K z( g4 L4 eCWndMenu m_wndMenu;/ Q- Y9 t8 X1 y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& W* Z: k( D% b- g, p3 Q+ @其后添加:$ Z( L! e8 C( g5 d# ?! U: ?. a5 d! V
virtual void OnRButtonUp(UINT nFlags, CPoint point);( t' c& E5 f! ]1 k4 p
8 ?" v1 U& L& q( j; d
# M$ }+ l D; l. Z' y N0 m# u7 {' i |
|