|
|
源文件中_Interface文件夹下WndField.cpp文件
. [9 w' s. C; P# e+ [9 Q# H搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; [; ?" x0 q9 {1 X0 a
1 _; w% o9 d, a2 ?$ Tstruct sItem A7 A1 ]' }2 _& H
{
5 L! g$ n. [( q+ r& QDWORD dwId;
+ {( G6 P4 x+ ?; SDWORD dwKind2;
! f& r& A3 _! \- ~& X: ZDWORD dwItemId;- `1 G) x) R& e$ H/ g# u2 F( z0 s
BYTE nIndex;0 O4 R. k i% x' ~
sItem(){
6 A, J' o! @* M$ } dwId = dwKind2 = dwItemId = nIndex = 0;2 t: U' i9 a* s' h8 R; b8 ]
}4 X$ A$ P/ C& V* Q2 b1 V. D
bool operator < (const sItem p2)
+ y6 _! n: r: n8 J9 ~ e) j{+ u+ s" a0 D3 F$ S) E) _
if (dwKind2 == p2.dwKind2)
& M. s9 i4 _1 y% L {
) y" w$ ~; ]4 e: I return dwItemId < p2.dwItemId;# B) q! _* u6 }9 ] G1 G* m
}else{1 Q L- L" {- t4 i( j, I8 Z. d* r9 a
return dwKind2 < p2.dwKind2;( P4 O( H7 }" o. W, d. `/ M/ A
}2 C J' {& W. I; ~6 ] ?) H
}
8 Z% g+ {0 g n+ ?; j! y};
2 \% p- j7 `2 Kclass CInventorySort
) o0 j# c3 l0 ~5 q{; D4 E" L& C4 k9 U+ T
public:& o+ r! ]5 H9 |9 a; x0 t
CInventorySort()# _/ i# a: D# I4 ?4 ^. ^- `
{
( K$ M1 `9 u& g! G! G m_dwPos = 0;
3 t2 M f1 y3 {}
4 {" C! U9 X! K' ^$ a! c4 f~CInventorySort(){}9 T1 ?& B. Z0 j4 w3 P
private:
- Z; ^& k6 D* |* R+ b u$ PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 w; X& S; d5 l+ |DWORD m_dwPos;3 {! \0 N1 C- V8 \7 x% j
public:4 ^ R$ }/ \) Q
void Add(BYTE nIndex)
7 F) h" z9 R& g" \: t# ~{( a" u: l& c, K, H. {4 }
if (m_dwPos >= MAX_INVENTORY)7 i7 Q7 W0 R: N: u
{
- A( ]9 q4 Y1 A0 \( [ return;
8 S) l; p8 y, m' @, s7 X }
1 u2 M7 e/ L' Z: ]# [ m_Item[m_dwPos].nIndex = nIndex;
) G4 J: P7 L& ^5 r1 Z m_Item[m_dwPos].dwId = m_dwPos;
! m( B$ H# {3 N% a& E7 t m_dwPos++;
$ N5 |( G4 Y7 j, \( {# v6 w7 U}
* J7 e3 g8 K) M9 q' _BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) p! e5 z$ G2 c
{8 m9 p) ]6 d; N' V, P- I8 [4 z5 U
for (int i=0;i<MAX_INVENTORY;i++)1 D7 S/ r5 q6 Y. }1 P9 T6 z8 `! C8 d! ^
{
# J! b; ~7 [( p# Y. p: V+ w if (m_Item.dwId == dwId)+ |( m$ v ?5 q# z! Q
{* l5 D/ j( B5 G9 G
return m_Item.nIndex;
# B/ A, c, P" a; h }# X: `! c8 m" k3 i1 p; U/ V W
}
$ i0 G9 b# R4 E# V. s6 s. U$ x( w return 255;
( X3 K0 D) q" A' {4 C$ f}
/ F: {* `( i) z% } x0 cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 B4 B2 @4 y6 o8 E
{
j; V' J- U( L1 I* J2 V$ Y BYTE nTmp = 0;" }% `2 ?% o2 r" C' B9 u
bool bDest = false,bSrc = false;4 I* a) I/ @% A! i
for (int i=0;i<MAX_INVENTORY;i++)) M( J9 o4 W& c6 P4 q) r6 P* @
{
9 X/ O8 @4 A: ~- q if (dwSrcId == m_Item.dwId)
& q; Y) z( ~4 r3 b {
8 p. M5 m. {( V* ], w# K //id相等 则 改变对应的dest和src
& Z( a; ]2 C- I( a$ M0 \ nTmp = m_Item.nIndex;
9 F1 X5 `# o: R) ^9 q1 ~$ f m_Item.nIndex = dest;
; I" `! k0 H" o/ U }8 P8 @ v9 t% ?5 F+ G- b
}+ U% Y" b, Z8 E$ N" Y
//临时数据保存完毕,交换开始$ ?( Q7 x% @& P- F- n7 c
for (int i=0;i<MAX_INVENTORY;i++): t9 ?7 o$ r- f2 z% ]" }
{
/ p) V, A. k$ h5 Z& { if (dest == m_Item.nIndex)
. N& K2 m5 P; M {
& U% F1 b* u6 J" h) V //id相等 则 改变对应的dest和src
" l3 n( D3 y9 |) V4 c+ k+ l* ^3 T6 y m_Item.nIndex = nTmp;4 a; S% z8 ~( |- t- X
}
- o8 Y- n: C% \4 [; G2 p) {3 _6 ~ }
, s7 B2 [, U6 r! n8 i}
8 r* w" |! K* i: G};
1 p& z+ ^* u, ? G: p; r-------------------------------------------------------------------------: }9 ?% Q9 u/ H! Q" c2 X
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 g l! f& l* p1 S6 E2 W: n$ w) H# e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 P# Q, a$ r. A( A
紧靠其上添加:4 ]4 I" S9 H4 X. I/ U' }
if( pWndBase == &m_wndMenu )
& }5 J6 @- a& J! T% a! p{: d1 U) f, S. r1 w7 w
switch( nID )" p9 ]' Y. G, a% y5 E# e! [6 N
{- D: q; t( P' V, ]' e) D
case 2:7 W9 _+ \& G3 h T! E
{
, G: r# n: ?+ W2 F3 s6 k! s" g //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 G' n8 H/ {. T* E, T6 ?
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 F, ?. T! m. k
{
2 e- X. N) C# i I. n break;& x; a1 C) V+ [ g" q) [+ |
}
( d1 C' x" d3 l for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): U; n- ~0 x# i7 \
{
& |2 \* X1 V% S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 Z! h) U0 I' ]5 b
if( !pItemElem )4 a7 n+ z; A' ~* R L7 j4 L
continue;2 Q$ C' @# ?: a _' A8 y
if(pItemElem->GetExtra() > 0)
8 i/ J$ i, B) c O; } continue;! I/ G" P* c1 V( V$ l. u
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. v, F! g3 L6 E1 O; [) K) { continue;
/ `, H; x q, N if( g_pPlayer->IsUsing( pItemElem ) )
, T: f3 a j y8 t; `$ r9 F continue;
4 v z" i2 i% q# h# b( M% g if( pItemElem->IsUndestructable() == TRUE )
3 z% k5 w2 w8 r, t K- Q6 R {& l2 R8 L0 S' w B
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 w7 L+ f+ f+ R9 |: a
continue;
9 t# ^7 ~: r. Y, O" E3 S; y% o }1 {! p: X1 v- Y' x
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 j2 R, Z) R( M) j% U; d! R
}- |! ~9 m. s/ h0 ^5 z
break;
; V+ z9 j1 j5 H% [% ] }
2 @( O( [ ^6 k: K: f% M! _) R case 1:. j! Z$ ?2 k! A8 I" K- L! F
{
1 i) ~# c& }2 C" l/ @7 }( M* j //整理背包
9 f% D# W, o3 @+ ?0 z: E! E) |" w0 w //////////////////////////////////////////////////////////////////////////) a0 p! g# z( U) x1 W5 H2 K
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
}% C4 i T( c7 |; C //////////////////////////////////////////////////////////////////////////
+ ^& m" C2 q$ M2 v2 O* I //////////////////////////////////////////////////////////////////////////+ l9 G( ]2 v/ g$ j. T5 m
CInventorySort* pInvSort = new CInventorySort;8 D4 f( q, k" C2 ?6 s
vector <sItem> vItem;
9 {; Q! l, s+ j' ]8 h5 ` vItem.resize(MAX_INVENTORY);//初始化大小
4 p! g7 ]+ g$ m7 n4 G1 O% R //////////////////////////////////////////////////////////////////////////6 V" s$ _" e- D$ T
//填充数据( G: W% o4 B# S. \) Z% L
for (int i=0;i<MAX_INVENTORY;i++)
1 q! ]. h$ ]9 V9 l/ L( _' \ {
0 h5 C: C! A9 |$ L& G' {4 z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* S$ Y- M* H' F1 M if (!pItemElem)2 Y4 \* e6 j: K7 }
{: R A5 V4 q* X5 A a
vItem.dwKind2 = 0xffffffff;
6 X( c* V, G0 N4 Z vItem.dwItemId = 0xffffffff;. {3 h' S1 c8 D% P/ q5 n! y
vItem.nIndex = i;0 J' i7 ?0 ^8 X- x" J
}else {
2 w' ?- @! K! a+ k/ h$ X7 F9 w' D L ItemProp* pProp = pItemElem->GetProp();& |2 ^$ U0 D* l& }
vItem.dwKind2 = pProp->dwItemKind2;/ M% H( k: Q# Q' t
vItem.dwItemId = pItemElem->m_dwItemId;
' x5 V @. \2 C/ l3 G% L$ y6 ^ vItem.nIndex = i;- y* b! k+ l% _
}
1 m6 k$ \, w O( }/ a //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" O0 W% b. k2 V$ }# P( }
}6 k, o7 x% t3 ]0 g' k! u
//////////////////////////////////////////////////////////////////////////
& @" X. W; y+ @. R2 m: m sort(vItem.begin(),vItem.end());//排序
p Q' k; U9 h/ n0 `! k+ T; ~ //////////////////////////////////////////////////////////////////////////
! v m$ B0 ^4 \+ x) a( w //交换9 T" @: i7 `5 t1 e, o
for (size_t i=0;i<vItem.size();i++)6 D/ c* ~- s$ F) O! ]. b
{
$ C) E: Y$ S0 k- F7 N: N+ p* _2 a" I! l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 O2 t, K' @/ _) s7 Z1 K* k' J/ }
pInvSort->Add(vItem.nIndex);
7 K4 W+ X. ?% O }( U) F$ y# {$ q9 c
BYTE nDestPos = 0;
8 E; h! O7 t2 }2 M$ Q n for (int i=0;i<MAX_INVENTORY;i++), J6 G7 `7 w# S L5 G8 \0 _* u
{; }/ w" L9 J p6 n( D# P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; F/ K/ Q3 X( V3 p# G if (pItemElem)
9 r; `" D; `) h$ C {' i$ s8 C7 |5 b7 u; H6 b" r
if (IsUsingItem(pItemElem))
+ R1 Y7 x# D1 }) i: p9 Z {
2 T3 e" m+ \% ?5 t //这个位置无法放
; N& e8 y5 R) j8 V: z8 W nDestPos++;
5 D( a3 T. v( P- c E( ?' h7 M }
6 [+ W) h' x" X/ s }8 B+ s. d/ Z/ k. q D" ~* q5 c
BYTE nSrc = pInvSort->GetItemSrc(i);
0 x- B; T" E1 g0 _, A# N' ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- X2 ?. a" J+ v+ ~$ W9 Y- e% W if (pItemElem)7 z# w3 D) ]; w2 B
{
! ]3 \' P; z% b- c. q if (IsUsingItem(pItemElem))3 f$ I/ m1 h/ W* O
{: \! j' Q( |! [% x5 o$ m) Y
//这个道具无法移动,跳过
4 _% m9 M5 k; C continue;
' S, L; v, u& T! Q7 S8 q }; P! w% q( L3 ^$ K8 P0 z
}else{
$ `; [3 t' S" b- w+ a //空位置 不用动
9 [4 ^/ f0 o) q, g4 l continue;, M. ?7 @* k6 i( Y8 {6 `6 o2 Z" U
}: M/ ]5 R6 W0 D
//////////////////////////////////////////////////////////////////////////
$ Q! I9 u; A+ V) \! d2 X. A" v% X //开始移动
$ {' \& Y: N. ]/ }! c; [, { if (nSrc == nDestPos)
6 N7 w$ ?+ T) }# e: e; o3 C3 D9 m {8 r1 X, _* h7 n) }6 j2 m
//原地不动- s! h" l& l& ~7 m
nDestPos++;+ M0 u3 W$ l0 l' [8 B: {5 W
continue;
" i Y! T1 t( ]& e }
* ?, U4 b+ S+ X8 z2 R pInvSort->MoveItem(i,nDestPos);
& [: p7 q* w5 G g_DPlay.SendMoveItem(0,nSrc,nDestPos);! _5 F$ r3 Q6 }6 b: r* a
Sleep(5);& y7 D [, r7 x( c' ~6 \$ d$ m' d
//Error("移动 - %d->%d",nSrc,nDestPos);
# {% g n$ {; U& y7 A& |: Y nDestPos++;0 B f: C; P% c4 P$ b. C+ Z
}
# d$ g+ F% E0 R. o |$ h //取第一个元素的信息& @: b$ p9 Q1 V
/*
( Q9 w. T9 N5 w- F/ A if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ z7 f0 |( T0 |2 o% J8 h0 _ {
$ p* J) i1 d! B- m$ I h2 O/ K Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 Q, r7 K4 r" N; T) H9 b/ O g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 S8 X5 m( e) R! G+ k' V
}
! z) h' b% k9 G- L: j */' E `9 @% `6 R4 j9 G
//////////////////////////////////////////////////////////////////////////- W0 h! b! s+ r
break;
7 b4 \* ?0 A5 U% F1 ^- V# |4 e }
" I$ ]0 u0 H4 d8 w F } 0 X1 ~/ O/ S5 `1 _
}) X' ?% A& q$ }4 N0 n
m_wndMenu.SetVisible(FALSE);
- Z. Z' N* K' M* u: W& _# P0 \) ^7 a: H5 ^8 o _2 x/ W
--------------------------------------------------------------------------------------------------------
! T, @6 a& c/ b6 C- P1 \1 p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; x! Z$ j2 T) M2 L; P5 ^9 P# m{
, _2 Q0 B4 F7 p4 p" k6 N/ gBaseMouseCursor();
3 U, p8 N( P3 x5 B# w}1 p6 ~( g' k: Y$ J
在其下添加:* `; T8 [/ q$ e2 _' g
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( Z$ G+ o; Z+ E4 H
{
9 V5 G. [5 }* Jm_wndMenu.DeleteAllMenu();
( h' w8 P3 d7 ~7 Jm_wndMenu.CreateMenu(this);# Y) C! M: ^" B0 Q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# n: {) w2 U1 J6 a& g2 x$ f5 }6 M4 \' |: w) p* ]2 q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 H% R0 h1 H1 k: t{5 }9 c( C0 T4 v
//P以上级别才可以删除所有道具" x9 ?2 V) _, l7 Z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 u$ v, S5 ^/ Q, b
}) W: K+ w+ J1 l8 D) @& s# x' |6 s
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 b, w1 x2 p, n; g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 s1 P) g0 Q5 H2 {9 x
m_wndMenu.SetFocus();
K- j. j p* Y* m0 J}7 Y. h7 c7 k, q8 H- ]( H* Y
------------------------------------------------------------------------------------------------------------7 e+ w3 }- n, o5 J3 o: T% j
*************************
1 m+ q" C$ M5 R6 k8 SWndField.h文件: h x. K2 J" F* R
*************************; G! e+ o! {( p7 E
搜索:BOOL m_bReport;
0 u. X# e8 c" T0 Q% G- L$ H6 Q) h2 ^$ u' V其后添加:% S8 K& x9 T) j @
CWndMenu m_wndMenu;
3 H/ e7 S/ F& q# N& R$ y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ \. T5 h( |6 Z+ [: _: S4 i/ B
其后添加:0 r, O, j) j m6 s
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& ~1 J( T9 ?, x1 j# K; q# s- H) b+ K ]/ o
8 h& B# A1 F& P8 O# @ h
|
|