|
|
源文件中_Interface文件夹下WndField.cpp文件
8 L6 N9 U! z3 f d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* s2 h* _9 F. g+ e
. I- B' ^# P( K7 m- J/ p. sstruct sItem1 a9 B }1 J+ G! b, R
{
6 o, F0 D+ f( K* ~% G4 q' SDWORD dwId;. O( f6 I* o( @! Z7 L
DWORD dwKind2; `4 @$ y7 ?$ t( d0 ?0 a
DWORD dwItemId;
* I* X" f1 `, x0 \. s4 A# ~8 E3 OBYTE nIndex;" \- O; P1 A: ?# N a; M+ t
sItem(){; P. M) _) f) J: A- P. s! c
dwId = dwKind2 = dwItemId = nIndex = 0;
: ?& X0 v2 K2 Z}2 K( _" E( l( B8 B7 X7 a
bool operator < (const sItem p2)
) K+ ?( q8 ]6 D' ]3 Z/ L{# [7 l* ? }& ? G) {
if (dwKind2 == p2.dwKind2); }9 e0 R4 G: _
{
1 a2 I" a! M5 c( L5 Z return dwItemId < p2.dwItemId;# `! H( t) e9 ^$ q, o
}else{" E! B5 u7 o3 u4 s) J
return dwKind2 < p2.dwKind2;. T) E/ l: _/ |/ k" o" T5 _
}
/ ?, ^0 u8 U1 I$ i3 g8 l}" J' ^) k! q4 a8 Y' g
};; `) K+ ]! ]& G
class CInventorySort) t" Z$ Z) h: I* V& P
{3 ` Y9 L7 Y1 ?" y
public:+ Z2 Z% j7 r# H- k8 T
CInventorySort()
; A1 g6 O+ o! i6 g/ L{5 h" O. S- s' N$ d6 n
m_dwPos = 0;5 m8 J1 W9 I+ b& L. _1 {1 j4 }
}
' I1 S/ ~( p& V3 [* [~CInventorySort(){}
0 Z6 o; t3 ]' Z, V0 J' rprivate:0 @& H' T) X+ o" l' B( j, N1 S3 d2 v: T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 C$ v9 ?( f& ^- k
DWORD m_dwPos;
- X* _$ e+ W: \5 n) upublic:
( X8 x& M6 } w9 c* q A- R* c9 }6 K @void Add(BYTE nIndex)
_9 r- g) N( @+ }{
2 @, J9 u, g9 H; ^. ^; [9 x if (m_dwPos >= MAX_INVENTORY)( A' F' j& U1 s9 W* q6 T" B4 K" R
{
5 i9 C2 o% l( c6 ^2 \ return;
( { Y* E: A0 p5 f1 }6 C2 k' Y3 C( S }# e: r4 q' }, b7 S6 y. h. _
m_Item[m_dwPos].nIndex = nIndex;
6 s9 B1 J2 G+ u+ ]% I! H$ W$ }$ j m_Item[m_dwPos].dwId = m_dwPos;3 d( i% l0 d' r4 Z
m_dwPos++;
3 g: w$ C. s1 R" w; S6 G; b}
3 O# \$ q# z! j0 rBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 c# O' M: }/ s7 v' o e
{0 T _+ N& }; q' ^# o: s
for (int i=0;i<MAX_INVENTORY;i++)* Z4 k2 N, V& h
{% k8 ?7 n) z" s
if (m_Item.dwId == dwId)( P: i+ V2 T3 M' t- v( ?
{5 o; K- W* I9 y7 ^' ^
return m_Item.nIndex;, p* K4 v$ `. D. m
}* U9 y, m# n. ?* Y5 F( g' A' c
}
# _. \/ x0 r) p5 [" r6 \ return 255;- M* h4 l" D5 S2 P8 [" ^
}
8 g2 e& p8 S0 D: Q/ }2 jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! S/ O9 r& _' R* r6 ?# [8 m' |3 m{. f, }. |8 w) M7 ~. Q
BYTE nTmp = 0;1 E1 B! G4 F# v" ^7 @7 e* i- F! D/ `
bool bDest = false,bSrc = false; k$ b4 ^0 k4 r4 [0 H' S
for (int i=0;i<MAX_INVENTORY;i++)
8 G& R7 o: I$ z" x1 U! B" S {" ?% O2 n. _/ }4 j9 m* f
if (dwSrcId == m_Item.dwId): b- m7 O! m g7 w& K! s* y2 b
{
8 m3 X s' ?# c5 ~1 @3 I! y: N //id相等 则 改变对应的dest和src
2 a6 S4 l$ _2 h nTmp = m_Item.nIndex;
4 K; u' }3 [: y+ O l. {$ z- L m_Item.nIndex = dest;; U# f# z1 J' D; `2 Y: q
}+ {8 q# e) g! }. r/ y
}
0 \$ U6 I1 B2 o8 R& R4 h; u //临时数据保存完毕,交换开始: a# r- C* i5 k8 C* {: w
for (int i=0;i<MAX_INVENTORY;i++); h/ V. v( P* s8 m
{
2 t- O m, m- l3 v. L if (dest == m_Item.nIndex)% E0 v% {9 a1 u/ D E
{1 e, V9 A) P) ?3 T; u1 z& P
//id相等 则 改变对应的dest和src( n, n* J+ q$ q! [! ]! y
m_Item.nIndex = nTmp;" {) J! h5 G& [/ D% i. W' m
}
( R( D! b; A+ i U1 J/ Z* F4 r }; J0 I. S2 P7 c S2 Y2 F; f+ d- u
}% s! h9 k% M9 K( u0 S- E" }8 ^
};& @( w; i# \+ v2 Z9 x
-------------------------------------------------------------------------: _$ S$ r a- r( h' G& @6 a
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 b) R; z6 Q, b- b/ ~7 q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ a( }5 F- u+ g- |
紧靠其上添加:
# i# z$ W3 T) F$ w/ Vif( pWndBase == &m_wndMenu )
1 V5 u& q+ ~1 z5 q/ L+ k{
0 D* g" k& E j8 Y switch( nID )
: Y! m. P; p6 C- a {
- `( F/ m7 F" R/ n: p+ }* U case 2:+ N- _9 {/ V* W- z
{
! n2 U; P( H/ y @$ F% G //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, c" _1 U, [* n( M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): Y' {7 [. d0 W! ]
{# `* p5 J3 \5 E0 d# T3 A3 W
break;1 O' V6 q' Z# [' G: J
}) _1 C8 S- @; F8 k* D6 o# H
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ p/ J( J3 y8 G4 I% J
{
$ l5 A3 {) H. n. m0 {+ h* |8 R8 U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ S% ?7 t: r) C9 P! b" A
if( !pItemElem )
0 V7 e# p, H$ y: o continue;, ]2 T2 v3 Y& l1 R. ^8 C5 u
if(pItemElem->GetExtra() > 0)
$ X/ |* l5 `" m continue;
# G4 l5 r6 D2 I n9 Z* c# [( H! v if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 {( S( A! L+ f9 e continue;; K, m6 t! w, F# z
if( g_pPlayer->IsUsing( pItemElem ) )
6 c2 e/ x' ^ [4 r" h7 P; B continue;
% K( J, J9 _: c. R6 P0 n; p if( pItemElem->IsUndestructable() == TRUE )3 L; T9 ?; g' [0 [
{3 Q& T1 ^3 x/ D0 I- F& P: I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 P: {! v+ w& |: |6 v
continue;
& m; d0 x4 ^0 Q9 U6 }& { }! q/ d5 C2 L% y% A' m, x! `
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# O! K& A1 ? \6 O
}+ m- j+ O" i l
break;
$ _+ \5 U4 t7 V. ^ } ^4 o1 p* B" t% r; J: F
case 1:" H& k2 m5 }/ g
{
; c) m4 i2 J; K( x6 B( X //整理背包
$ V5 W7 l3 H& z$ E) x# H# ^; i! B0 _ //////////////////////////////////////////////////////////////////////////2 X* ^/ j: @$ B- V7 x# h; S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, j' v+ |- Z Q //////////////////////////////////////////////////////////////////////////0 D A; ~1 R* n% z9 `0 ?
//////////////////////////////////////////////////////////////////////////
% ] }9 Z [; r& \4 k; ? CInventorySort* pInvSort = new CInventorySort;
/ h* e( o# j" z. t! G9 E) o( { vector <sItem> vItem;: I2 I: O, z4 h( T( \) O* u1 h$ o4 }
vItem.resize(MAX_INVENTORY);//初始化大小$ e: g+ f) l. d4 H1 { B' o
//////////////////////////////////////////////////////////////////////////0 J2 {( }: L( f7 {. Y- I: c0 q
//填充数据" ~% Z4 O% {" ~; r% V" Y5 e
for (int i=0;i<MAX_INVENTORY;i++)% k) D* j3 A. X/ w( S
{
2 s2 }# w" s6 Q1 R; Z. K; S4 I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! w2 y7 O9 Y/ u( g G if (!pItemElem)+ Z/ }9 Q f- e
{9 e0 Y9 V3 C8 p/ s
vItem.dwKind2 = 0xffffffff;
/ O5 e; U' v* J4 f# S1 A4 m vItem.dwItemId = 0xffffffff;
0 Y' u# H: X' v% G5 } vItem.nIndex = i;
e/ T6 v: }/ F) W7 \# G }else {) H; ?+ L# g) ^7 W
ItemProp* pProp = pItemElem->GetProp();9 X: y M- _3 o' H; h( {
vItem.dwKind2 = pProp->dwItemKind2;1 \/ L- n: V k" O; J# G
vItem.dwItemId = pItemElem->m_dwItemId;# N2 w. I, `$ [
vItem.nIndex = i;# e; x* j% h# @
}$ }2 f6 n$ X- `4 n& w* n) j& p
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" F- Q# F4 w/ J% H }
; s9 d- k$ ]" l //////////////////////////////////////////////////////////////////////////# o7 f& Y4 b1 D$ x" F
sort(vItem.begin(),vItem.end());//排序
9 V$ A: r) l0 w @! {+ ? //////////////////////////////////////////////////////////////////////////# }- W( {# i$ G+ V( ~2 N
//交换
2 I( _1 @" m8 l for (size_t i=0;i<vItem.size();i++)
; a' V& Y% r+ s# Q( Q* {) R {
( |8 T6 P% h" d& [" m //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- s9 ?7 G2 A3 A! _. u! [7 u7 F, a
pInvSort->Add(vItem.nIndex);. A: [5 m, X# m; j! b2 s
}0 R0 E6 t3 A6 W
BYTE nDestPos = 0;2 Q" P8 ?5 P) j5 z# V8 S/ T! C: o
for (int i=0;i<MAX_INVENTORY;i++)
4 b% C' h" z) u8 i {2 K' q. t3 v' H# b8 W& j t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ r; x7 n- m# c" X$ _ if (pItemElem)
% W" F( }' x7 P0 i {
- L3 }2 b8 I, F# T; u if (IsUsingItem(pItemElem))
" n G! i5 B4 w( W, |7 n {1 H& l% M: h6 Z9 ]' H2 i: a. ]
//这个位置无法放
( r1 u9 t' P+ D" X/ I nDestPos++;
0 i* q' |* w! w5 f0 d& v9 x9 H1 z }
, r( S; b( q1 `; ^ }
1 H: i+ T% u# n5 [3 N BYTE nSrc = pInvSort->GetItemSrc(i);. B) {& W) b X* ?6 n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
M& _6 f' G2 e; b1 w4 a if (pItemElem) k& m% U2 z8 U7 e% [# o: h* g
{# x" B A8 C, [8 x3 h3 U+ x% ]
if (IsUsingItem(pItemElem))5 J5 t" @" J: b# B# e `
{% C2 Z( k% i* C* z6 E
//这个道具无法移动,跳过
& c4 L2 D' l/ g7 z& f) e7 \# T$ l continue;- |! E! V% {" [- R
}6 t2 x& K/ @/ j# E
}else{
2 [4 ^ ^$ {* J1 ]3 Y; ?& m //空位置 不用动3 Z; d% }* {( Q2 Y _2 v3 u% s1 k* U
continue;
; @. c% o! E% {1 V& y }
z- B, k/ Y& }7 `7 Z1 _; f1 n //////////////////////////////////////////////////////////////////////////
1 `( D+ n! O$ K2 p8 w //开始移动; @4 O$ n( G7 j. K8 h1 d
if (nSrc == nDestPos)
. X7 D$ ~4 H! Z. h7 B7 k1 Q- s {. Q1 V' a& B1 o7 p' R8 H
//原地不动. H, B# `9 m1 p; V4 ]' m! W
nDestPos++;
* d5 ~/ m# ?4 t) C( E) ^ continue;6 W {- D& \. c; \- }
}6 u) ~: n- |( z/ A/ x! {" ~4 U
pInvSort->MoveItem(i,nDestPos);0 k& x3 H2 h" ^7 v, u4 N
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( g5 d# i. u- V* a$ I4 A4 ~ Sleep(5);9 ?' t6 I% `1 U4 D* c
//Error("移动 - %d->%d",nSrc,nDestPos);' e% T5 \0 b" K! n/ w
nDestPos++;
5 L- a# }. A; B4 B }
2 e1 ^8 x8 o k2 \ //取第一个元素的信息
) [( w8 b# Y7 x% E2 U /*8 Y; }; i# W5 Z; U
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): b* U5 g9 v. a# s5 _# K" `* m
{
4 H0 O6 z' Q# U/ ~+ s5 Q7 v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 O) _8 a- B2 r. l: l2 i$ i
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ D% F7 L7 e6 z5 k3 v
}
8 S" R* I( t* u7 ?* M( i */6 \7 _5 ?4 @) c5 j5 V' m
//////////////////////////////////////////////////////////////////////////
# g G+ r0 \ [' y7 B break;
6 e l; v" S2 \5 F; s }( V' I# o& p" A m7 G2 {! ~
}
9 U5 b$ ~8 [7 f}
7 ~4 |* [# E! s+ fm_wndMenu.SetVisible(FALSE);
7 y# e9 B% ^3 Z7 C: w3 T0 Z- M( ~8 d5 @
--------------------------------------------------------------------------------------------------------( ^1 b. Y0 z! s$ d% q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 P {6 A9 \9 c" c, J; F% g
{7 b8 w, T( ?% Q4 {, I1 r
BaseMouseCursor();
) y Y4 d6 h1 ]/ |}
- {: L7 Q; v3 ]' X在其下添加:
' K. D5 A0 u$ N* B4 x, U) I8 j8 Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) N7 v# ?* s1 T! z/ C% D: V{
# N" D" w' A0 ?: Om_wndMenu.DeleteAllMenu();
. f% C. I. G/ _( j$ Um_wndMenu.CreateMenu(this);
( s c7 ~# H9 E9 k9 M. j L. h- Ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' Q8 ]1 d% X- S3 f5 q7 X" ]
3 U R- g8 ~* U4 Z- Rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# G6 ^( l$ R; e; Y1 E3 P{
: ]- l$ G2 o# l) S, p- G9 l4 ]( x //P以上级别才可以删除所有道具
: E8 S/ e' F& v2 k6 Y5 ? m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 }$ c6 v3 K/ C- ^9 b. ^8 J( ?}
4 m* U% q/ T! k @* ^: x5 qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. `: G/ g- C. R( X4 c; ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 ]; D# _ Y4 r
m_wndMenu.SetFocus();
. o1 c) D2 s+ G}
1 A7 L0 L/ L0 ~1 U1 ~2 y" `0 R------------------------------------------------------------------------------------------------------------
! Q7 o( V3 [- C5 M*************************% y- j, g0 R) H d+ P
WndField.h文件, z% v/ B0 C ]- q. p5 R
*************************( i& q6 |( U* {8 V/ y# y
搜索:BOOL m_bReport;
( M& B% X+ g! ^7 v2 G, o/ q9 T其后添加:3 `9 i4 z( ~- p- C1 k7 Y# q0 {9 u3 \
CWndMenu m_wndMenu;, O: X- G3 D3 \7 D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 ~: k8 A' c0 z+ q
其后添加:
5 c1 {* \* r7 o6 i" w3 F% c) Rvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* _0 i% Y9 S4 J/ Y
3 Z2 h6 U, _6 z; H+ y7 I; p( L2 |, J) H
|
|