|
|
源文件中_Interface文件夹下WndField.cpp文件2 |4 e) o1 U- T
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# j8 t" m r% M) z& ?% G: M8 ~; T' i+ R3 r3 \# y% e( [. V
struct sItem& g. z. D1 h1 {) [
{
8 `0 [) J8 N1 I. HDWORD dwId;
9 B! A4 R5 j% R, CDWORD dwKind2;
+ V! h1 ?+ h4 f) P! YDWORD dwItemId; f2 ~ ?1 r1 r/ n+ x
BYTE nIndex;
/ s# J$ `" s6 ?3 @2 gsItem(){+ J5 g C- x. T- k1 i4 ^7 p
dwId = dwKind2 = dwItemId = nIndex = 0;
: c- W+ r& G M, ]& V3 T}
; \7 [6 X; n8 @8 U9 rbool operator < (const sItem p2)- a) g" S4 a# c: @
{) l; [ c, L7 I# f* Y
if (dwKind2 == p2.dwKind2)
. [: m. x$ B- u& U {( V. n T8 x2 n( C
return dwItemId < p2.dwItemId;% a5 W" {6 V" p. \# w
}else{
- K( y2 Q5 h8 c. \# ] return dwKind2 < p2.dwKind2;+ T* h# n- D4 w0 i, j1 n
}8 ^5 L! Z- p8 H$ Y' ]9 I9 [
}6 ~# D; V9 J* K0 ~* V5 |
};6 S0 \: F& ~1 P3 I9 V
class CInventorySort, C0 Z& o7 M2 z! A# f2 j; H2 I& c
{" K& H' w- ?! m8 Y/ k5 D' P
public:
+ C+ n$ a$ ]% p+ z9 K: v4 [CInventorySort()( g* w# b; }, D/ l" {
{+ Y3 B/ f4 K- g! i! M4 c2 V% p" L/ @
m_dwPos = 0;9 Y" N, d9 H" n7 |, c
}
$ y& N5 ~( M( x2 X3 d: A W~CInventorySort(){}
( e' \& W+ W2 j4 B! P* Uprivate:7 \/ z4 R' C: j# P# @* z+ q F. x
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* `& c: L7 T/ L9 t
DWORD m_dwPos;$ _* Z# y9 O/ F0 Q9 N) T9 M, {! i
public:4 R6 @, {" c$ p! [0 z
void Add(BYTE nIndex) K/ n% t5 q6 W, ] u/ i2 P
{
: N7 D+ S" b2 {5 t if (m_dwPos >= MAX_INVENTORY)
- ~. k1 R" n. K/ U4 t5 v {/ q' [, X$ b, m, j/ Y6 R
return;
: n4 N: S- u7 f* \0 L3 u5 B& h }- {; C" c- U* Z% U
m_Item[m_dwPos].nIndex = nIndex;2 W% f/ b' ]6 u2 b4 S3 M
m_Item[m_dwPos].dwId = m_dwPos;6 k9 b4 ?! R1 ?1 L) o
m_dwPos++;
+ {8 x" X. t) f/ T5 }0 X% Q- x, S}7 Y2 T P, y3 C6 t+ n
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 y0 M& j0 {. d3 G$ k* }0 v6 [
{5 ^& G+ e$ ]' @2 g
for (int i=0;i<MAX_INVENTORY;i++), F9 |0 A: u! H9 [
{
3 Q; m' i! {9 {" y* [5 x8 J if (m_Item.dwId == dwId)2 i. Y5 m# X( {/ B- q/ r& V. x" q
{( X, F' C$ M4 Y& w
return m_Item.nIndex;
1 B! \' U3 i1 b3 _& t }# o4 C; O8 T" I* w
}; }8 x3 |+ ?* m" ]+ |+ p
return 255;
3 \, }# `2 S Z o}
0 D% A& U5 Y. P/ ^# z) C* Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
[1 ?6 p+ L/ g6 r( k3 [{/ z) f, L- m: @% u( }
BYTE nTmp = 0;
7 ~6 C" A: v5 [5 i/ [) A bool bDest = false,bSrc = false;2 \& _) @; d6 x4 f3 ]' I
for (int i=0;i<MAX_INVENTORY;i++)* S0 b3 e" z( u0 i, z! J1 y
{
* l- l8 i4 @8 u2 k# z3 H if (dwSrcId == m_Item.dwId)' M( n: C( l' |/ p
{4 T3 L. Q1 {8 n+ J$ H3 h1 n
//id相等 则 改变对应的dest和src
4 v `! S" t/ \, \4 m9 r nTmp = m_Item.nIndex;
* H: U, K, H+ `$ t m_Item.nIndex = dest;
6 C: ^( l5 S4 t2 h+ S }: e M8 x& S4 V4 p5 U
}$ Q; e0 w! [4 M$ U! C( J
//临时数据保存完毕,交换开始
( U0 }. O! ~3 J# H# q7 x for (int i=0;i<MAX_INVENTORY;i++)
- L7 c3 Q$ g+ P7 S1 C {
/ C& Y. W0 a, E. w# l if (dest == m_Item.nIndex)- r' w. e( e2 m! \
{- P7 v3 L ?( C, U) f* l. d" |
//id相等 则 改变对应的dest和src
; P0 ^& }: D0 z# G7 y1 z8 | m_Item.nIndex = nTmp;& M1 J, \7 I, c' h
}; Z. t8 }3 t$ b
}. [5 G7 i+ d0 r x
}3 Y1 J4 v. s6 z( I% Q- |' Z
};/ W# @" A1 @$ {; x1 e+ p) f
-------------------------------------------------------------------------
) k R) ?( o% ^" M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ D ~6 L/ F3 P( ~) a6 S8 Q, O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* S1 r3 ^ R1 R
紧靠其上添加:! J4 ^# I+ B7 D. S0 }7 F. K
if( pWndBase == &m_wndMenu )
6 H# _( ^& q; A7 s! n{
' p% u/ ]+ q: C# S9 g4 L6 ~0 u4 G: \ switch( nID )- n, w/ h, j$ u% u# f( G$ P2 D
{' B3 w% q( v$ E# N
case 2:; Q6 j6 W1 V9 V
{
+ [& q. e: s2 K8 d& {% s //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ z6 A _% q; S7 T7 W
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ O) t; n2 U, V$ V3 \ {2 n7 ]. o& B! o" R" j) Z6 Q
break;$ _0 k/ z' K6 A, a2 T
}
# i3 W. q: J" D5 E for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 W# K; F' j ]' t0 \
{( S) z+ p. \2 P4 z! F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% z5 @% N( K* m6 M4 w if( !pItemElem )! u7 N& h- f2 A! s7 S; P
continue;+ D* H7 h6 D6 C1 v" e. J3 \
if(pItemElem->GetExtra() > 0)
6 T; x) P5 g$ Q continue;1 J' V+ {( t7 F; x" N3 H5 D
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; ~: L, I" _$ N- R) d& ] continue;
- U) t1 \3 o# f8 D$ k: `4 ?& k3 g if( g_pPlayer->IsUsing( pItemElem ) )
* v) A- d) Q# m8 t! l' I9 n- a continue;
! Q8 K( k/ d/ a: v& \+ w1 W5 E1 v if( pItemElem->IsUndestructable() == TRUE )
! k: U0 d- z6 x# F1 [6 |& J {! [& @( }$ T5 r0 h# a; X I# d: x$ v2 G0 S
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 t" n: T+ P9 h- C continue; E- ]' W- ^+ o5 I4 ?
}
0 e. h/ z9 ]% S) z0 e" f7 ^6 k c g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- M7 E3 h: Q- W) q9 p
}1 h" _: E" K1 H! d) s6 P
break;
( Y% r) g- p4 f0 H, E }
& | d; C$ ?! s7 B! z case 1:
; z* ]2 W4 i1 y8 ]- u* z {+ q! j# ^+ V: l7 L9 r) |4 [
//整理背包
P# w% Y7 r( [% K) ]$ Y //////////////////////////////////////////////////////////////////////////5 W" `* l% H- G' K& Y b( g
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ N4 B! F3 o+ J
//////////////////////////////////////////////////////////////////////////6 D( |# y {- D* A* @
//////////////////////////////////////////////////////////////////////////
# i8 l2 G& X3 {+ A7 Z5 t CInventorySort* pInvSort = new CInventorySort;
9 j" |% ^$ @' G vector <sItem> vItem;
; |4 M; p* v, n vItem.resize(MAX_INVENTORY);//初始化大小3 K% u' p+ g' b r" A3 u( A* z# J
//////////////////////////////////////////////////////////////////////////
( w( m/ q+ f) z r5 r //填充数据
! s2 ]2 [; y& J. F# S for (int i=0;i<MAX_INVENTORY;i++)
3 M6 `% E% r2 f! s% | {
' d) V( ?+ `( Z J+ A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% a& q+ z( ^+ J5 E# ^+ [
if (!pItemElem)! h0 Y) s+ G1 O5 t7 v/ v
{" J( T, ^# u. E" ^3 E
vItem.dwKind2 = 0xffffffff;
2 u7 _5 i- I% p7 R vItem.dwItemId = 0xffffffff;
2 I( P. w) g U# Y( P# P3 P5 c vItem.nIndex = i;6 u; B' c( i0 Q+ x4 I# D
}else {
- m, I$ s4 l) s$ G ItemProp* pProp = pItemElem->GetProp();4 `' m' w- v V8 k( J, V
vItem.dwKind2 = pProp->dwItemKind2;) N: j: m- B9 }* a" G* b- k
vItem.dwItemId = pItemElem->m_dwItemId;
8 p$ H3 @$ g h- Q7 @7 v& c vItem.nIndex = i;# o1 F8 M1 Z4 E/ X) f
}
" a0 [. ]% @. J //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& q# l6 z% L3 ? a5 D }
( q C6 ]& a# R2 K //////////////////////////////////////////////////////////////////////////5 z) g5 Y+ s& W, K/ q" \) l/ m
sort(vItem.begin(),vItem.end());//排序
- f* Q% P/ C$ R4 \, o: B$ W$ P //////////////////////////////////////////////////////////////////////////
8 |8 h H2 U7 U0 C6 [ //交换( C( N, L( m7 \1 |- q7 `
for (size_t i=0;i<vItem.size();i++)
. B W( _1 }! p: [ {6 X8 j l/ `' [; M* W$ l
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ G. w& S6 g' z& k& ~
pInvSort->Add(vItem.nIndex);
( I/ [4 S8 W- T. q3 t }
# @1 B4 y# y- c9 p" `. w BYTE nDestPos = 0;
+ d0 R* I0 H% R$ `! @ for (int i=0;i<MAX_INVENTORY;i++)7 O3 `( j& F2 _, G
{
% B# L w F5 F) O% _) E/ P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( P6 a; w+ ?, W, c4 ?& Y if (pItemElem)
* d2 }6 j: S8 V! J, L {& N" ~. V% U) t7 c5 `- D
if (IsUsingItem(pItemElem))
4 n" n' F8 O' K! U5 | {
@: ]0 i7 K. J) F8 Y V5 E //这个位置无法放- O' O) c* j$ b. N& j
nDestPos++;/ _7 u1 c( f. @( q9 B2 p q
}
+ w# S5 Q* B& k! y7 ^9 C }
% R a& C9 f4 ?+ Q8 l' m" _ BYTE nSrc = pInvSort->GetItemSrc(i);% \+ \: ~, K, D" B# ?9 y5 V: k
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( n2 _) R) M" w$ O* k" H if (pItemElem)
% C0 W J+ A2 ?2 S. Z {/ }6 N" A2 E1 l$ I: _$ |7 I# U
if (IsUsingItem(pItemElem))
+ x9 c. y" f$ k% O+ ]) O* O' ?. J {5 c' ~9 @0 e% x/ ?7 x* }9 p
//这个道具无法移动,跳过/ g) x; T; ?8 G2 E9 p, }
continue;
4 F) I" | P$ |3 O }2 @, Q+ \; |; @& B
}else{* t% B) A3 k, O( [+ C! Y( Z8 \
//空位置 不用动7 _" e+ G$ a" D" w
continue;$ r/ I; y1 T& C5 {6 o1 _- ^. g; J1 S
}! p; p* o' m; ^& k
//////////////////////////////////////////////////////////////////////////
, i- P7 L7 | _ //开始移动
* @' i/ E+ h W% ] I$ C' q if (nSrc == nDestPos)! E- a, H% \7 N" O, l
{) N: @# P2 N; B
//原地不动
, t h7 h" ]- Z% j% p" O7 e nDestPos++;3 R9 y4 B7 a( |6 q: v7 K
continue;
" s e& v3 x2 Y0 V }# t" L/ y$ b* Y b" ~1 D/ I7 \
pInvSort->MoveItem(i,nDestPos);
+ G6 y8 y; e; {5 O, L g_DPlay.SendMoveItem(0,nSrc,nDestPos);
M: P3 C/ x6 G* m1 d: b Sleep(5);' o8 W4 M9 B# b+ [# f( A
//Error("移动 - %d->%d",nSrc,nDestPos);
9 N6 }6 T2 h% {! @8 b nDestPos++;$ | A/ N' \% @% r4 {5 q2 g/ T
}
" i; G$ H* M+ e //取第一个元素的信息
3 @3 R/ n n! D& Z& s, a /*
+ l- e" ^* ? X6 E# k# _ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 L: H- N4 s9 w: _( G, w' T {- Y" O- T4 }8 \$ v# Y a- t
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; g' c6 x5 c o7 ` Y' K g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 V$ n. `" G; t* {& i# } }
/ p/ ~6 W! h* `4 v */7 f4 Q, r9 [( _3 v1 n2 C
//////////////////////////////////////////////////////////////////////////; i! g' p8 f6 @
break;
W, o3 ], r' I+ j3 \8 Y5 c9 }! c' @ }
4 a3 X5 e! N) P+ W; U } 6 d( m$ i1 ~- q# W6 T" K3 `
}
0 r0 Y! u- L0 c! T$ f pm_wndMenu.SetVisible(FALSE);2 V& V4 e# v2 O; O. ]/ `, b( A2 m; |: b
& a/ Q2 L& S: G--------------------------------------------------------------------------------------------------------
0 S1 J3 \/ l) C0 r* K搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# m$ o& g6 U& k7 e{! B* m' r$ J1 f) p- z' ~
BaseMouseCursor();
3 z) J" Y0 E8 P* a( p) ^) {}5 P8 R6 G3 p* y" j; u4 B2 p) f2 c R
在其下添加:, g3 i2 k/ n- W
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
/ A7 p# L, x4 q9 t: O! X{$ X) V) X! n0 U6 i& X, U4 O
m_wndMenu.DeleteAllMenu();. n9 Y7 H$ Z1 l. |- J. K- O7 O
m_wndMenu.CreateMenu(this);
+ O0 U5 N. J! `# sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& j8 x0 I% ?6 g6 E& N
. p# o1 k S! z8 R) n. |6 N9 nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* L7 Z9 k) k* Y: }
{, K& Z' y0 p; S% ?
//P以上级别才可以删除所有道具5 ` K5 u' I8 W* j
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 k. H, Y5 h& o9 c+ B* {# h
}; \7 ?3 R+ K/ f( a
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 F7 k* L: L) Q2 a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 d0 c; U- F4 Q; p, z; `, H& t0 s3 F6 i
m_wndMenu.SetFocus(); U. } J5 h9 S/ k0 o
} s! M' T2 W; R) Q
------------------------------------------------------------------------------------------------------------, T" `3 g2 W4 x" m, U5 }. Z
*************************' n1 t! z% U2 `9 g; n" ], A% X$ H
WndField.h文件
1 d& z. a; I e*************************
9 n, p/ x; ]* X# z+ [+ \" d搜索:BOOL m_bReport;+ C! ?7 g' R2 }8 \% k. [2 i: L! b
其后添加:( m1 r8 s& z6 U; ] b1 M% y
CWndMenu m_wndMenu;) e* V9 _6 n* |) A* p/ b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 f' S8 d7 j4 o+ A
其后添加:
9 b A) s3 x; V$ K$ s% S! |2 o+ t( O- ~virtual void OnRButtonUp(UINT nFlags, CPoint point);
! F0 {' l- p( Q6 o- @: T
5 D8 k/ ] S- _+ T
, G2 i% Y0 P3 j$ w" P# k2 r( r. ` |
|