|
|
源文件中_Interface文件夹下WndField.cpp文件
. |; c, g- D: B' N& J" G- ?" ]搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" A. ~3 t9 W; m7 v, U
+ G f7 l9 X# K! {8 \struct sItem p/ ~2 Z2 j4 C6 i) a# J& l
{" F% r. y7 s( G- |# B9 w3 Y& q
DWORD dwId;0 I0 k0 n( j5 Q% b* ?
DWORD dwKind2;( J+ V# m* r. |
DWORD dwItemId;6 s% u. S6 g7 }0 @0 F
BYTE nIndex;; Y1 d6 D$ z' q; y; E
sItem(){
* N a$ W2 n" n1 K dwId = dwKind2 = dwItemId = nIndex = 0;
& W4 E: u/ W0 a2 `, M}
4 H# [, Q# O) \2 Mbool operator < (const sItem p2)
2 `0 J' `' q' v5 S0 g9 M: h" o{
: V1 Q! y7 E7 p' S# n/ {# l if (dwKind2 == p2.dwKind2)
$ h; h& q! h: M9 w" T {. }0 [' ~& L, X+ p A$ Q( J2 S
return dwItemId < p2.dwItemId;
6 V: ^* j; W; T0 z: t }else{+ i' Q- S3 ]) f0 A! E( D
return dwKind2 < p2.dwKind2;/ |0 f% @9 v/ \, E# e
}; G* U# M+ r: Q
}
1 L2 N1 o" }- s0 N/ a" y};" \5 ~0 @0 R% C3 ]9 D
class CInventorySort$ `7 J& K8 [! b2 V
{
! f7 P: N' }4 W* a) T- Upublic:) [1 P$ z w+ a E
CInventorySort()" s/ L5 j- w* W4 j! T6 Q! V" N
{
, j, T3 ]4 E( G: F* e m_dwPos = 0;
4 A; W7 y& q) Y0 ]7 d$ d}
; L3 R5 z* j; |" e1 c~CInventorySort(){}
4 r R/ l' ^6 R9 n0 N+ I& |5 {private:
6 t& I; \$ s G: w+ ZsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! F) u0 P [' ^; r; |+ {DWORD m_dwPos;
1 A5 B5 b% A7 d5 m: hpublic:1 i! b3 z) E2 ?% Y9 s; K- ~7 a5 X4 }# N
void Add(BYTE nIndex)
+ q) y) _' B* k/ Z{
1 F: K! N! f6 s2 i if (m_dwPos >= MAX_INVENTORY)% {2 T3 n/ d, B! u2 ^" _& j
{
; T/ m' q) V) j) @ return;
! E; Y" i2 o( } }
. T- Q, r( j0 h9 c m_Item[m_dwPos].nIndex = nIndex;
8 a8 ~: |2 U, D5 [! n m_Item[m_dwPos].dwId = m_dwPos;- m4 ^6 Q$ s) B! T: k7 m6 w( ^
m_dwPos++;
# ~- R4 q2 b, d( D1 j9 Q6 l}
m5 x- O! W6 z/ _BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% J6 { L9 F5 ~2 o2 l5 z# G{, r0 |* Y A/ I# |% F7 j3 u. ]
for (int i=0;i<MAX_INVENTORY;i++)
- m) p7 O2 R9 i0 x { L5 w. Z# R8 u6 o# S$ b
if (m_Item.dwId == dwId)
* O0 [' A! \" S, _! `) q6 J+ w" G {
7 k" B+ H' p3 u" L# m$ R; l return m_Item.nIndex;& P5 [) K7 U- g5 p; P
}
E+ ], _) N% S }9 y* M) K, g$ h3 b* j
return 255;! o7 G8 C! R2 h, ^# W
}4 z- M* ?) z! T* W
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 C; [" _5 E& h3 Z( h# D
{
+ W* D3 K3 ?5 C& u( L BYTE nTmp = 0;
4 [9 f+ T, y* K. s/ T$ P( {/ }6 q bool bDest = false,bSrc = false;
1 B( o! S8 U6 d8 k) k! V3 m for (int i=0;i<MAX_INVENTORY;i++)- o0 e' ?0 X- R \: V! D; O8 k
{4 N) q, i) t4 J$ i* s
if (dwSrcId == m_Item.dwId)
7 u5 ^6 K L4 H3 C7 N {
, }( o& X# p+ U+ j: ?; B //id相等 则 改变对应的dest和src
/ s1 t: w9 y0 |% `5 ~ nTmp = m_Item.nIndex;
6 `- ?: K, S" \ m_Item.nIndex = dest;, v- L! W+ G& c9 ?) R
}3 O, M2 q H3 ]' U3 U
}! P' p# E( H, ?; j
//临时数据保存完毕,交换开始
4 y( Y2 d7 M+ c( p for (int i=0;i<MAX_INVENTORY;i++)
0 O9 f+ @# c9 h5 O. H+ y {
2 Z6 N$ h" _- Z( ?* S8 X if (dest == m_Item.nIndex)2 x) d. I# u7 W5 ~. A
{
R7 O1 ^ U) S! U //id相等 则 改变对应的dest和src
/ T) w# R& r/ n2 \4 i/ v! r( K9 @ m_Item.nIndex = nTmp;
0 x! I1 Y" }0 M2 u: P% q/ I }8 }! a8 v* w9 u" }( V& w7 B3 W2 W
}
' l# J; q- W) {}1 P' r8 m5 [# D' M% ?
};
2 \; ^7 G& m6 X1 B-------------------------------------------------------------------------
6 Y8 v5 a7 b0 E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& p2 B6 G6 r o+ b) b z& B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& w) Z* o) I" h( w
紧靠其上添加:4 `( f! a9 I9 V( j
if( pWndBase == &m_wndMenu )
$ f" u# A$ ^& D; ?& o& ^{+ b- d* ~6 w; L! r2 v& l
switch( nID )/ w1 {% w5 {% Q5 U( P* F. O' X
{
) G0 d) Q1 ]4 X+ s5 V4 c case 2:! l6 O7 `: L# Y6 B- v5 `4 |( j. m4 ^; _. z& u
{
/ L6 g4 S6 i, i; z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 w' C) }5 T$ O5 @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 x& v" {3 a; E
{0 }3 v5 ?+ ]/ {6 a4 a2 n
break;0 @ S; M i$ M* ~3 F2 g
}: n9 P# q. U) O% n. f0 z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# X7 a! _' w2 G5 L" ?1 ^" S( h
{) R# G9 ]4 F2 x: X- y6 A* F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 o" f: z6 \" f- g H3 Z7 v if( !pItemElem )5 U6 Z# k( w6 a2 G; [6 P' x' u Y
continue;7 K K$ A2 g$ }! X# \) \
if(pItemElem->GetExtra() > 0)4 e* E3 S) ], b( v# i$ i8 F
continue;
- B' m0 T+ W0 p: H' N4 \ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- x( S% ~" u1 P/ d( C8 p, \1 R) Z; ~ continue;% S) k: s. J( I+ ]
if( g_pPlayer->IsUsing( pItemElem ) ), L' L7 T% f. g! }% P
continue;5 w; y3 }% t+ k R8 Z
if( pItemElem->IsUndestructable() == TRUE )
1 Y$ x. }, J8 E9 O {* W" |! b& D. N* V) g
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% p+ N P: Y2 s7 G4 Z. g) w continue;
8 A& }/ ?2 h) c }
9 ^7 t$ l. L a0 n0 e: s4 R5 P g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) x6 O0 _! f; p) d; h: F% c7 v! u }" O- O% y# S9 q( K2 I4 |4 f$ s
break;
( a1 L; c4 l; _4 k4 v/ A }
B4 b# \. C( Q9 y5 M Y case 1:2 U% m9 ]. Q; B+ M6 G, a
{" C9 a& Q8 d# h& Z) l4 F( {
//整理背包 d0 n% d9 G! | A
//////////////////////////////////////////////////////////////////////////7 l: w M. J0 }- S/ ^$ Q1 V3 \' S4 ~
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: p p+ L& ^2 J, P. _
//////////////////////////////////////////////////////////////////////////" y; B# c! `7 C
//////////////////////////////////////////////////////////////////////////
& a; q/ C- w% ~2 ] z- m CInventorySort* pInvSort = new CInventorySort;: E4 f% |3 o9 D$ [# _6 ~ F
vector <sItem> vItem;5 C Y* Z) ~" O" f
vItem.resize(MAX_INVENTORY);//初始化大小
' W% t0 J1 p* {" b6 e: j, p5 B //////////////////////////////////////////////////////////////////////////1 B$ C: |, H0 O! i3 T- `
//填充数据2 D5 ^% G% Z4 u4 N7 W1 H8 \% b
for (int i=0;i<MAX_INVENTORY;i++)
% J' s, G+ f' g j$ ` {
& Z: a% t9 h: i) u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ T9 p2 ]( {7 h4 N if (!pItemElem), r! `3 E* h4 Y' ~2 E2 l0 m
{
8 t K, Y; |$ p4 ]) c( G" v: ]4 h vItem.dwKind2 = 0xffffffff;& T# _* U7 f% c* f8 ~) |6 x& m
vItem.dwItemId = 0xffffffff;$ O& j; X/ ^+ t% ?* t) w) l
vItem.nIndex = i;, J8 o& [" Y- p* |0 \) X0 q
}else {
2 q! ]8 e% Y( @' y1 a7 l! g3 h ItemProp* pProp = pItemElem->GetProp();) Z5 t$ H! H/ D% Y8 t5 `0 b
vItem.dwKind2 = pProp->dwItemKind2;, O q( H3 {2 N" f
vItem.dwItemId = pItemElem->m_dwItemId;
& p1 b$ F* H( |" h vItem.nIndex = i;
# B2 M$ X% k; g# t/ e }; a c+ K5 A. e
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 ]4 }6 f8 y3 T9 M }. q& k0 I5 o! j" M! L/ r
//////////////////////////////////////////////////////////////////////////( z1 x/ e2 T4 R- s/ P
sort(vItem.begin(),vItem.end());//排序/ V5 u3 ]+ b0 h. k# t
//////////////////////////////////////////////////////////////////////////# }/ f0 d( a1 M) @2 w' n$ [+ S) n
//交换. x' {) Z5 g1 _; F, J5 _$ W# [2 K
for (size_t i=0;i<vItem.size();i++)
* u: I% s4 C; Q. H {& B3 p* s+ D( t! X5 u
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- \2 M/ S. `+ r" N2 [
pInvSort->Add(vItem.nIndex);
) u# s, T5 K4 l, f+ Y }
- p, b9 q! e' b! D8 W. L BYTE nDestPos = 0;9 K. M) K# a3 u/ d+ f
for (int i=0;i<MAX_INVENTORY;i++)" R* Y* @. u( r$ Z& e8 g+ Z, s! [. Z
{
; A" @3 _7 L: i* W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 x7 V. Q/ Y) h1 `
if (pItemElem)/ H* E6 f# W8 x( H+ x" t; T7 Z g
{
/ O/ K5 x8 X% N0 j! a. {3 m. Y+ [: J if (IsUsingItem(pItemElem))
$ ^9 Z2 I9 p0 J9 f$ c2 @ {
: Z W: e L/ @- {# R# }; O //这个位置无法放 F/ Y3 v5 {4 B; o, C7 Y9 ]. H R
nDestPos++;
% I* \' {+ v+ W8 A }
( w! K4 Q$ N$ h) e2 J }
. G1 u! h( s" Q2 j+ b BYTE nSrc = pInvSort->GetItemSrc(i);3 f, K* X1 w& A% x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& y7 h9 o2 H9 O8 F" F
if (pItemElem)
* W% I: A+ r8 t {
( G: z% G# C6 R if (IsUsingItem(pItemElem))( A' k& u3 S! f* T: c6 g) U4 l4 J
{
0 q, e4 O$ Q8 [6 B3 w+ M3 b+ i7 l //这个道具无法移动,跳过 q! v8 H! h4 [* D! a+ u3 _3 e* K6 T" {
continue;
! X' W4 o7 s+ J6 O% A1 \ }0 U( i, F0 W3 @+ ^4 Z( I
}else{; }; ?" Y/ K( v ^4 @( d& a
//空位置 不用动 w, r' c% g4 }. Z! Q: @
continue;
+ ? ^ u( ^1 M. U) x y3 x p }
/ S; O' `. r, k7 P4 X: f- q9 j1 t //////////////////////////////////////////////////////////////////////////
! W6 U; y$ P. X //开始移动* U$ T# V" R9 \& N3 s. Z7 o
if (nSrc == nDestPos)
4 n4 L2 l$ f# v/ V; i {
4 Z% s5 f7 w0 t# H2 G; D ^% P //原地不动! G0 z& R+ A! Y
nDestPos++;% i. D- c) L, N8 I& K. {
continue;! b' I0 _9 n' q* ^- _
}/ }+ _: ^7 ^/ C
pInvSort->MoveItem(i,nDestPos);
: V9 B& ~0 I) b C& _ g_DPlay.SendMoveItem(0,nSrc,nDestPos);* C) c2 B' U2 W3 G
Sleep(5);
# B. @8 T& P { //Error("移动 - %d->%d",nSrc,nDestPos);: V7 m3 E+ p ] M8 m$ V
nDestPos++;% k" j, Q: j1 l- l& D3 }- x! Z: m
}/ ^) E2 p: `' I
//取第一个元素的信息, h% k! [" b6 i; O
/*
% ~& U6 u5 [: w/ |7 g- W) ? if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( U9 o) R0 U+ S# i/ J: j {9 ~/ [. a- x: X/ ]& L
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& J: W* w# R1 a$ v2 k) m
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 u* X+ `+ ?; o: L' N, q8 B
}8 r n8 V" ~! q1 e4 e: \
*/ B$ e. L1 }; w/ p7 k
//////////////////////////////////////////////////////////////////////////
. V1 ]( i- i1 `* h: J2 n break;% F6 V! F1 \7 o
}
7 F: H9 C h8 O2 ]: |# t& a+ x0 y } 9 y; {* k7 n# M" M/ Y3 n
}
, f0 k0 r' `2 s v+ A7 hm_wndMenu.SetVisible(FALSE);* t) ?) u5 W3 C) U' S
6 G) k* S0 Q& a& ~) y6 [% q4 Q& Z--------------------------------------------------------------------------------------------------------2 d. i8 ?" G9 R- ^
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). S y ~2 F) A2 ` L8 M
{
" L4 o+ B5 D, \. I7 X5 K! aBaseMouseCursor();
2 e; Q7 R3 v. i% w2 F ?/ E}
9 ]& z7 T+ t5 J: ~7 [2 e" |在其下添加:
9 G7 t( ~1 Q0 e/ R& u5 }void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ s: c4 t- G1 X
{3 J% w% L2 X" {: c. }4 N: ~
m_wndMenu.DeleteAllMenu();
7 q3 U& O1 n3 \; }( [m_wndMenu.CreateMenu(this);1 R5 d) s+ W0 ?4 G3 y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 O9 _2 s+ M# F2 A5 n0 ^6 t0 x0 M& Z% V4 H2 P1 _
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 b0 h5 B+ D7 Z
{
! e1 l, B/ x6 q. [) h: b" v: L //P以上级别才可以删除所有道具
8 x& U0 w1 [" c* W m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& {3 j/ X0 ~$ z( `$ l. t, m}
# T1 Y% C( Q' d: A. j# ?m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 c7 Z# O* B- ~' B/ T( ]5 m; gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 J6 ~# t( `8 B7 x6 G4 d, y- Z+ Zm_wndMenu.SetFocus();9 \. _' y! }1 m
}
5 y6 D$ J$ z0 ~, B% v% k, A------------------------------------------------------------------------------------------------------------& Q& V8 e8 H2 S& N2 D
*************************
. p& Y4 d" w3 E$ uWndField.h文件1 N7 A, l, P" {
*************************. |0 c3 @4 M! v4 y1 k
搜索:BOOL m_bReport;
3 i; [* h; t, _5 T1 J; y4 O; B( U7 a其后添加:
/ W$ L0 H* u( T3 t% j: FCWndMenu m_wndMenu;
; e" I' ^. M, u' G搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# K; ]+ `3 ~& S+ `其后添加:
O0 _- o2 d0 ]virtual void OnRButtonUp(UINT nFlags, CPoint point);- b, T, K5 l0 V0 S- C1 X7 Y8 H ?
9 F& ]4 k8 v1 {
) {2 E% O# m! Z( I- ~6 t5 t |
|