|
|
源文件中_Interface文件夹下WndField.cpp文件0 u. W% {/ }% ?0 @! ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' b6 q* d$ h; Y4 f: D3 [- I
/ @( z1 q% l4 s& f# {( m1 bstruct sItem
! I5 s! {$ t. i0 d# [" o8 v2 x{2 x/ Y2 W: _2 {( B
DWORD dwId;
& O+ R1 ]$ D* F) k6 M* s6 A. w9 V0 jDWORD dwKind2;( u1 U. n, t& d2 |& N9 B; G: z
DWORD dwItemId;8 K5 M1 t) Y0 \2 v
BYTE nIndex;. S' Q3 f, R6 p" v* j7 E. Z' e
sItem(){, j0 M8 ~- ~, N% v$ E/ C) O
dwId = dwKind2 = dwItemId = nIndex = 0;
" F5 u: u/ {8 Y" j}
( Y( P1 H- I' H O' ^4 ]& dbool operator < (const sItem p2)' o: T5 }9 p9 D) D+ B
{/ P0 j5 z) F! @) q8 v! u. x
if (dwKind2 == p2.dwKind2)
* `5 O7 E2 g Y- e' G {) o/ [* _2 ?2 f* o; i
return dwItemId < p2.dwItemId;- D( K" v# f6 g v; Z5 E/ y
}else{
. R% u$ Y; O9 `+ W return dwKind2 < p2.dwKind2;
9 P) L4 d$ K6 R; i' w' y3 @ }7 v* v# l) W7 ]" R3 }, V
}- Y, ^" A1 H$ N% e. }
};
U) P- `2 j u2 S. Y) c1 jclass CInventorySort$ u2 N: R3 v6 Z% L, v
{8 H3 Z+ S, ]4 d1 a% m# P
public:
$ O" Y+ x4 S; s5 ?: h" v! @CInventorySort()- v- r6 o, c0 H8 `; y
{8 c) M0 N( k* O; s% V3 [7 r
m_dwPos = 0;8 H' L( l6 O( |* \: \; Z# y/ ?+ a
}
; N# P: q" _1 N. z% d# z: }% h~CInventorySort(){}; v' \& }$ w$ [
private:, ~& [$ V5 v) {2 ? z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: Q( T5 t; p9 X7 Y/ b
DWORD m_dwPos;
3 S: [& y( B; Tpublic:
* H2 {! E. D7 A. L; @void Add(BYTE nIndex)# ^+ u4 n1 l3 C% W
{/ R& \9 S! N9 y. F9 G
if (m_dwPos >= MAX_INVENTORY)
! i6 d6 A. a8 s3 ^7 A% H {! y* P8 A) k# D1 { I, `: G4 e' X
return;
3 `4 }( c6 t; I. O$ m0 m: `0 z }
% u c' I( p' E2 @ m_Item[m_dwPos].nIndex = nIndex;4 t" v- M+ o& H0 v/ ^7 z# t
m_Item[m_dwPos].dwId = m_dwPos;
$ B; e8 Q. Q; j6 l( s m_dwPos++;. w- @4 F- R, [
}, p, K* R/ E; m) p. O8 W) k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) }5 S/ G. {, D. |
{
, H# F1 i0 p+ W3 P4 H4 A for (int i=0;i<MAX_INVENTORY;i++)! [) H9 e. q4 U: ]
{9 W; [0 z0 O; [+ ?, H
if (m_Item.dwId == dwId)
e, J( I( M! Q5 g+ W+ u: @ {
. S, x- q& x+ [; Z9 u. r; A% m/ b return m_Item.nIndex;
9 ?' F0 o" j% ? T+ m- l) T }2 G& C }+ |, }$ q& a( [0 h) I" d6 R
}! M) j/ U$ i3 k0 z$ K! I' N
return 255;
. {. w5 p$ ]; _, ?4 D( U}
Y9 a9 @- k4 Q& m+ s z( Z9 lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* k1 b$ Z2 B) E* b: h{3 s6 p% n3 w6 K- q# u
BYTE nTmp = 0;7 v$ b7 f4 b9 H' n
bool bDest = false,bSrc = false;
y! m: e9 K0 \7 o+ `4 ` for (int i=0;i<MAX_INVENTORY;i++)
1 i6 d9 R* x' h {
9 Y% D3 a0 }& i1 r: }) A if (dwSrcId == m_Item.dwId), O5 k; H( p* u7 H3 ^" K3 `( }
{6 j0 S, _) @" t4 s& A! ?4 z
//id相等 则 改变对应的dest和src
: T- H+ W5 Z# F$ Y nTmp = m_Item.nIndex;: a C" x( X: V9 k0 `# w1 s3 G
m_Item.nIndex = dest;4 _9 X: m, p4 q1 ~+ R) Z f
}
4 L- L ?" V) V6 G) F( P }1 b2 y: b2 D6 N
//临时数据保存完毕,交换开始% Y; K3 `: Y1 `% P- j9 U
for (int i=0;i<MAX_INVENTORY;i++)
5 X- D O7 g+ {! |) |+ A7 X {
3 G( O" z" e& N4 t$ l" b2 F6 p* r if (dest == m_Item.nIndex)# H3 n# s/ b3 [
{/ g* Q1 @: M8 G3 D1 ^, L
//id相等 则 改变对应的dest和src9 i5 N7 H/ D+ i" T M
m_Item.nIndex = nTmp;
) P0 Z- Y- T9 R+ M& K }7 @! L0 p; e. }6 u
}
. ~$ S5 v3 G# x. S: w1 S}0 Z0 ?' R: I9 q3 A/ B% \
};3 J; G- A( O A$ F8 O7 Y2 Y
-------------------------------------------------------------------------
. y) n: c6 T7 X& c5 p7 D* y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! J% {! [0 y9 Z2 |; u+ M4 _6 Y' y: c搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 I6 [. E2 y+ U. N2 J, W
紧靠其上添加:0 k9 \+ a" ]+ r
if( pWndBase == &m_wndMenu )
# U4 }7 Q8 d _% [/ U: F! N7 l$ p{
! I$ x( c/ o' r5 Q, T& ] switch( nID ), \+ t% J/ d( F/ y% I" H
{ D( e4 E9 X$ l8 Y: v3 o
case 2:
" P# n4 O0 w+ U {1 m) u+ }' \, C$ m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 O" n* ?7 w3 M
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
u4 Q; p, F5 h! `8 L2 K4 q {
B. ?3 v4 p% t% p+ c9 u' }7 c3 ` break;3 Y; i1 v+ B& A* j/ _
}
3 k/ G, w' D* V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& ~4 }4 _# r0 Z; c {2 v) e* }4 u' E7 J4 ?# @% p( e2 \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% W- Z2 S8 Y2 M% B3 V q% q
if( !pItemElem )
3 W- p- h3 b& A" B: W' p continue;( v) Y) n; h; y$ X9 |
if(pItemElem->GetExtra() > 0)
( \) Z5 g. [. q1 H" D% j continue;! m4 F; ?' s9 D2 J
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' n! G$ h9 P3 q i8 l continue;
4 N) s$ Z' i/ R) L: n V if( g_pPlayer->IsUsing( pItemElem ) )- _) f6 h$ J, I( W
continue;
8 J" I. Z; W# z& |# l* @ if( pItemElem->IsUndestructable() == TRUE )1 }& \8 }+ t: T$ R, k# ~. ~
{4 W; f: ]" g0 D0 s7 E9 r
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, H# _( C, L- \0 V5 s( O' C/ z continue;
q0 \- U' N- [3 ?' X0 s }
- I5 B- u! U( A& K$ |# s g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 @6 T' A% t8 N' |5 H0 b }
7 Z z9 x0 l3 S9 z, r. Z3 Q break;
. b! Y. }. k3 l7 U- ?2 ? }
; X" c. t* R& h& G1 {0 ^- n: r+ Z& | case 1:, H0 G. d" {. H7 {! L; b
{
: A4 j& f% f9 |* n //整理背包
; t8 l& m' f6 r& e3 _ //////////////////////////////////////////////////////////////////////////% D8 A; H q( M- e$ q% C9 k; z% i
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( Z' c; G: C$ [& B6 {1 d
//////////////////////////////////////////////////////////////////////////& T0 r1 b3 Z- Z4 f' N# M
//////////////////////////////////////////////////////////////////////////
4 _4 q! _- D0 _$ A; w CInventorySort* pInvSort = new CInventorySort;
, n" J+ [% j' m) C7 k vector <sItem> vItem;
1 Z+ s" e" h5 \5 ]6 C" M ] vItem.resize(MAX_INVENTORY);//初始化大小
$ u7 M6 Q( C" t1 g7 X //////////////////////////////////////////////////////////////////////////9 G$ U+ }6 S% T8 Z9 |) |
//填充数据
, E& g D" k4 x' j# ^. o# \ for (int i=0;i<MAX_INVENTORY;i++)
/ o9 y$ g) ^" O {( T, H' t p; {3 R8 o6 e* H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& M9 D9 u- ?5 R) A; P6 y |$ b4 m: {
if (!pItemElem)
; Q' { {6 R0 F( P, t# h, r9 @1 a3 | {
; m( K( y9 L& N( x5 {/ b vItem.dwKind2 = 0xffffffff;2 M/ N7 s6 ]4 a1 }" s
vItem.dwItemId = 0xffffffff;
/ c- K6 l7 y7 A vItem.nIndex = i;
' q! t$ _9 T* R# i }else {3 S8 x& k0 D" J+ ^
ItemProp* pProp = pItemElem->GetProp();9 C* m2 @1 [& N# M
vItem.dwKind2 = pProp->dwItemKind2;
6 h4 o4 Z" y7 t% t5 x" O vItem.dwItemId = pItemElem->m_dwItemId;$ w, g! c( \& ]
vItem.nIndex = i;
( o& Q! p! d" \( H0 s6 g3 a }: l$ ~8 K* d F# M3 i
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 y w$ L- y; b% d/ [6 V }
& x: H: p4 {* N* i //////////////////////////////////////////////////////////////////////////) T/ R% u2 ~( `! M. q1 o( m* N/ C
sort(vItem.begin(),vItem.end());//排序1 k( g7 x8 y, l( {
//////////////////////////////////////////////////////////////////////////8 P2 |2 a$ h, S* `& ?. g' _
//交换
+ {5 P! q( R; y# ~0 @, w for (size_t i=0;i<vItem.size();i++)
& [ a. w; e+ j9 H1 b; o( ?+ V6 q {
/ _- U( m9 Z$ U# Y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" C, q8 z% l/ C ^
pInvSort->Add(vItem.nIndex);
9 H0 [ X# y3 L) |7 \ }
" Y/ j v* V4 h! L! ? BYTE nDestPos = 0;2 W9 Y# u* ]3 w/ }$ {# h8 [ i
for (int i=0;i<MAX_INVENTORY;i++)( l3 z6 c. a2 J- y
{
! }2 N( P- V1 u: }2 |; }4 M9 j+ j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! P6 S! d2 V" M- z4 b) [
if (pItemElem). U# B7 `* \/ T; `' z8 j
{
* j$ G3 t0 b7 _+ g if (IsUsingItem(pItemElem))9 M% y6 s! V% p, L# e
{
+ N' Y0 ]# q% @ ]+ Q% k, G //这个位置无法放
1 s1 ^! j" D8 K4 H/ k/ N% w/ Z1 D: L" Y4 c nDestPos++;: p$ Q, j* d- V8 W1 e# n! @0 ^
}) ?$ c4 G* L# w" ~5 e. C; k, k
}: I8 S" a; t# t9 L8 ~6 f- o1 c. P
BYTE nSrc = pInvSort->GetItemSrc(i);0 ?% H( b0 b; u# M9 e& E
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
R, Y0 d$ l$ `, V) F( _$ d3 P# N7 [ if (pItemElem)
# N+ g+ w, O% p% V- d4 ` {* U$ f" `, z8 C; S8 ?- B
if (IsUsingItem(pItemElem))
2 @- V$ K# f; J# N8 y& m6 b1 ^- B {2 V( ^7 ^- k% H7 n" { [( N( j/ k
//这个道具无法移动,跳过
; h- l/ R9 m2 B' p1 ]6 v8 y6 q continue;# F! n/ }2 N3 ?
}
$ X" I" r4 [8 P/ T }else{
4 Z/ C* t/ _2 l8 F4 K- r) Z //空位置 不用动
w) C! D- b' p3 A/ I+ E2 n continue;4 q. b7 l# I- C9 G4 r
}6 E% \+ W- g- e7 d. K, B" o5 z
//////////////////////////////////////////////////////////////////////////1 l1 H( S+ c' X1 Y& f
//开始移动
+ S& l2 c, R& b. m4 Y if (nSrc == nDestPos)
- J' }1 M- n9 X4 i# o! D+ ` {
& O2 ~8 @7 v6 P- Q# A/ a //原地不动
9 L g# |1 i# } nDestPos++;
0 D" t% \3 U, s+ o7 T continue;
1 P* G1 ^- `: t7 {4 } }8 d" m3 ^1 j! F3 i# L: R
pInvSort->MoveItem(i,nDestPos);& E: i; w9 D/ j6 F
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% O, N8 g/ o$ \3 M
Sleep(5);6 x {* G a1 h# N% Y* W
//Error("移动 - %d->%d",nSrc,nDestPos);
- e7 P9 i1 g$ B, D5 Q; m nDestPos++;
+ k$ p0 l1 k; }3 D( y$ B9 R }5 M* u" s) j5 j! ~* O0 C# U" @
//取第一个元素的信息
; z$ {! E! h) w5 m+ B" g @' R6 \ /*7 a3 h* W5 ?9 G$ _
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! z1 m8 }- H& o {9 v8 V/ S* E7 X5 V1 ~6 |
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
k0 q5 ^& _" Q4 b g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 }, F9 ~" s. @5 J/ e/ h9 F } A/ n+ y% e7 `2 E' |2 V* }
*/
3 S3 e) |0 P9 F6 ~' u- j8 x //////////////////////////////////////////////////////////////////////////. g+ S$ a" b0 a
break;
. u# z- h8 e& h$ e( h6 q }
0 O$ A. ?( T7 @% @# m& D! j1 R }
# c( w& o, n( i1 J1 ]}
0 \" ~" }; `" Z! H8 q0 S" Hm_wndMenu.SetVisible(FALSE);
D5 P* i! u" w& r$ U1 z, [: D3 N# ~6 ?: U
--------------------------------------------------------------------------------------------------------/ O0 V2 h( ` f* c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ ?; _8 w$ u+ Y* s# |% X2 ~* i& e{
6 S- ~. B7 @+ J$ M) h3 u* P BBaseMouseCursor();
/ @% E- Z1 _1 a1 S% d}2 U: B: w: R+ q
在其下添加:& y/ n5 \- H9 r. L
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 c2 c" R2 n a
{
1 A, o/ t7 @7 B6 j0 U. Sm_wndMenu.DeleteAllMenu();
. P$ _+ w" b# Y) W5 tm_wndMenu.CreateMenu(this);" Y9 c! |/ f; T7 P
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 i# ?4 c5 k, h: o; b+ H# k0 M' X1 K# W/ T+ C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 v* ~5 J/ ], P( N- l) A5 u: k{& S" T9 x) {& G: r
//P以上级别才可以删除所有道具$ k- s2 D+ @% o, O/ ?+ u7 O j
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( ]9 v+ T5 Z6 T* u B2 j- S
}3 F* k+ Z4 L5 X: B4 q0 |; L
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 z2 r1 g0 M. |8 y! m5 qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ G# `- f& p- `5 d2 ]2 b$ A! U
m_wndMenu.SetFocus();
8 e, {* G9 t' g9 ?}
7 a3 z; Z/ i+ Q; m4 }: ], f------------------------------------------------------------------------------------------------------------
8 \, b% j2 V! y" ]6 l2 h*************************/ \2 V! |/ |$ T9 _; F/ |
WndField.h文件& F V" f- c3 ?5 v
*************************5 q; d" u! ]* ~7 a5 s n
搜索:BOOL m_bReport;
- K0 Y/ s6 R* C+ m其后添加:# J! A; ?/ K* A, l+ B: B
CWndMenu m_wndMenu;
9 d7 @) y. ], F0 Q6 L! c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); d' p; i" p g# v( q
其后添加:
$ a4 |" A t7 Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
' k6 o8 |' Q* t, [9 W, n L# u: D$ |( B2 S, {, x
3 o/ {3 z# x- o) T3 l& M" O! q |
|