|
|
源文件中_Interface文件夹下WndField.cpp文件$ {, K; Q1 \4 @% w& l
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) d- E# K* _+ D/ ~1 h0 ^, T3 {
$ b L1 \3 b: @
struct sItem0 ?3 L: N) [( j2 D
{- }% X3 i$ I# U4 \. v3 @
DWORD dwId;$ l; U! [4 U& F
DWORD dwKind2;
) n, t$ a0 d0 ^DWORD dwItemId;
2 {8 |+ d1 D+ U2 v# w$ aBYTE nIndex;, @6 q. U [3 G
sItem(){! x+ B+ [+ k) C
dwId = dwKind2 = dwItemId = nIndex = 0;
( j1 C% d! y w( c W9 R}
1 N, T/ |0 q! z7 k7 H: o0 Sbool operator < (const sItem p2)* X+ x% p, f- u! [' e' ]
{' ~( V6 B8 T7 a$ d) y
if (dwKind2 == p2.dwKind2), n/ L" P: h# a3 W, s; W
{: @5 h- z5 u9 v$ C
return dwItemId < p2.dwItemId;
7 c8 ?, l0 r' C5 }* X- v3 W i }else{
5 S* `+ u( y6 J G; }! \; @ return dwKind2 < p2.dwKind2;
$ z9 c, r+ i' _) v S9 f }9 n0 n% ~+ Y0 B: \, N! G E" B0 {
}& C/ {, }% R# R1 W
};
8 j J6 Z& P4 r! P" hclass CInventorySort
0 m- U" O& k# r- e( Z" B- a! ]7 b{& }" _" K: ^, K2 v( Z: U* L. }
public:
1 K) E7 [+ N: D1 |' O6 ECInventorySort()( p1 C2 H) m9 t7 o0 |, t* f7 Q1 @
{, n7 ]% L1 f1 D' {/ ^) K! J+ R
m_dwPos = 0;
% o. r# O( X+ J/ Z. M8 T( C# F}
( i+ w: U: b v~CInventorySort(){}
+ W7 Y% F! U; A, L) sprivate:% U" [' g6 _( C* G5 G$ m* S6 s
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 ?) s# h3 e! i' i
DWORD m_dwPos;
- j- G" Y5 ?0 A: dpublic:- w- e; C' U4 S/ r
void Add(BYTE nIndex)1 [+ R# p8 o$ x+ r S
{& D: B% U. M2 Y }2 l6 k
if (m_dwPos >= MAX_INVENTORY)- x) @$ W% e2 M0 Q% N
{+ j$ [( C; T/ X" b
return;3 L4 w/ ~ [3 R" l1 ]2 W2 P
}
5 m3 O5 v @/ ]$ E' R! r; R m_Item[m_dwPos].nIndex = nIndex;
& R0 h7 i. F$ g9 j* T4 }. d m_Item[m_dwPos].dwId = m_dwPos;9 Z2 k! o% w5 Z5 L
m_dwPos++;% j- b- ]3 `1 `9 y: F5 k
}. l& G0 F1 j$ o; x8 [
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 d0 F2 k& A: e2 C M{* B2 Y- [" [! Q5 h& R2 S- {# u
for (int i=0;i<MAX_INVENTORY;i++)
1 L8 ]( z4 J" V6 |) x) x; J( e {8 S7 F# F( ^8 M7 X9 X
if (m_Item.dwId == dwId)0 z# Z3 i6 @% M; V8 Y' m; \
{# c& ?$ V' O, J4 J: b$ C0 z) N
return m_Item.nIndex;- J! ~0 k* u% G3 }
}
+ }# A" }1 l3 C U" w% F7 ] }
4 a, @3 \: o* D2 S, D) d return 255;! s) d- r; i7 |7 c! S' P; J
}* Y K6 }, V* d" ^$ _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ [$ A1 A% }% q7 x
{
( `8 t* h, ?1 @, i' }6 Q BYTE nTmp = 0;
5 K- n: g* q7 \" J bool bDest = false,bSrc = false;9 m- k# U/ I1 }& `; Z
for (int i=0;i<MAX_INVENTORY;i++)
% w% D5 n" K! F' [7 U) d1 x {
6 D1 X( A/ g/ U: J4 s if (dwSrcId == m_Item.dwId). j$ `; E" [) _$ B- |( G
{
1 R0 ?' W$ B2 G' ?" g //id相等 则 改变对应的dest和src
$ ~/ I/ ]% f' n, i2 d nTmp = m_Item.nIndex;
$ M/ `5 H& Q" w$ y m_Item.nIndex = dest;7 }5 {- }! d- \% ^
}- {% U! M1 ^( T1 U2 q
}
7 \; e) O/ ^. z4 ~3 }1 E //临时数据保存完毕,交换开始
; T1 `: c9 h4 }. z8 N for (int i=0;i<MAX_INVENTORY;i++)/ ~7 B9 G$ j. h8 S
{
9 M6 H8 {& _% n4 i# t0 v& t* c if (dest == m_Item.nIndex)
0 G/ y2 n6 h8 _5 L- a9 s {
3 i# R# C& s9 O/ W, I1 n9 A% H //id相等 则 改变对应的dest和src& V3 G+ h' a4 ?' i3 A; p5 m
m_Item.nIndex = nTmp;* r" T4 Y e& R
}
) b5 K. K$ P7 Z* x; M t }
1 k3 A4 ]- t' [2 @8 x}% r( ^; X( N, J" z9 ~
};
6 ]2 R, {, F7 e& c* t% A------------------------------------------------------------------------- o; W# ?2 Y8 a0 P/ P. E/ G/ p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% m* u6 N8 L# K# Y; z+ `) X7 O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 h+ o/ U6 P( Q+ X) T F/ L8 j
紧靠其上添加:9 s! M( W1 B: T! b2 B5 m5 r7 K
if( pWndBase == &m_wndMenu )- b' `6 q$ L) j' n8 q
{
, j0 e2 K* G0 w# Y) n* b switch( nID )
" t- |, u7 c: v/ [ {
2 v6 \9 ~ m5 Y& t+ { case 2:
; g+ y2 N' x, _8 l1 N/ ]. X" p {$ k* l3 [6 c6 s' ?% Z, _$ j5 E
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 l3 Y' y- Z' P% G, j
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 }, i A6 ]: y5 E9 U4 O {0 y5 d9 }0 L. |) o& S
break;
7 a- u* B% L; Z& L9 a4 w; [+ ^, r }
% s4 m- C C2 j) I for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" ~9 U$ x% D5 m) N, X2 M, I, X {
4 W* f7 O7 D! u( }" Z9 g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# J4 o, s9 A( ^$ o6 V if( !pItemElem )
% o- g5 ]+ z# W* e& c continue;* q2 D' T5 n% t) W D7 P# d
if(pItemElem->GetExtra() > 0)
5 _7 ^# E9 C: |0 h' g0 ~ continue;. b3 q! u+ u# s- I4 ^: b& B
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - W. ?1 H9 p# D
continue;
: t z+ ]- J) V7 O if( g_pPlayer->IsUsing( pItemElem ) )) Q: \8 \! |6 A
continue;3 H# v) X& i/ d7 q' ~" N& h5 b
if( pItemElem->IsUndestructable() == TRUE )
+ L! {$ {5 N4 ^ {3 D9 f* B6 I& ~ `6 K$ k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) V2 _" _7 c0 K+ C, v0 V
continue;
8 I9 w3 w- W$ V! A* V q! }4 s, u }' {' C6 y- n1 o K6 d8 }+ m7 ^
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 D& }6 H6 }3 P7 {* w0 Q5 e1 P
}! z8 p: Y- t K7 U
break;
5 _$ }$ J6 {! e% v; L0 L }5 K8 U( O. Z/ d. b1 ]5 S
case 1:' Z& [- E" k( Q: v. m
{
1 P2 I' O9 e' H //整理背包
& v# l* P/ [* u2 g6 v7 b //////////////////////////////////////////////////////////////////////////
0 f# L5 ?$ o* @$ F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: ^- `3 u* T# |: J* @! x4 c
//////////////////////////////////////////////////////////////////////////6 d! h4 n8 R8 j1 b
//////////////////////////////////////////////////////////////////////////
0 l8 V; R; u8 b. L0 | F" v, k CInventorySort* pInvSort = new CInventorySort;
; \ A3 @2 Q/ e2 S4 z vector <sItem> vItem;+ k1 i+ V8 U+ c: Y) @4 b: \- l
vItem.resize(MAX_INVENTORY);//初始化大小. s8 D( s: t+ p. J" L5 P
//////////////////////////////////////////////////////////////////////////& m3 I/ V( ]8 W% w. n& d4 g8 U
//填充数据4 f- N; L8 U5 f
for (int i=0;i<MAX_INVENTORY;i++)- Q, J4 |7 b, e0 D D: R% `5 _
{
, h4 ?" A9 U( b! ~" S$ J" Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 o7 b( w1 K- [! Z
if (!pItemElem)
1 P5 c/ w9 @$ i8 B9 @$ v; G5 a9 v {. [$ A$ K7 B3 \- p
vItem.dwKind2 = 0xffffffff;
) O, x9 V, e) o, D* ^' b' f& Y vItem.dwItemId = 0xffffffff; p) k' h8 n+ U/ ]1 U+ y/ j; m
vItem.nIndex = i;
0 e6 m! G: q$ W; `1 V }else {
$ x9 F* e, K. g+ i: T ItemProp* pProp = pItemElem->GetProp();
6 p) c9 A) U' ]5 N; Q vItem.dwKind2 = pProp->dwItemKind2;
. K W+ r$ N# a" y5 o" [ vItem.dwItemId = pItemElem->m_dwItemId;
$ x: x. ]7 W# E p" E; d+ l3 h vItem.nIndex = i;+ O8 \# Y5 J2 M# w$ Z l0 e
}6 S& O0 d1 @/ J7 l9 R: H7 P+ M
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 O/ d& B2 f {5 m% M
}' w; T2 M( e& z
//////////////////////////////////////////////////////////////////////////
0 a3 O- B9 }6 i% q) @ j+ g( g8 v sort(vItem.begin(),vItem.end());//排序
! V1 q1 x- c3 s2 C1 v( h% \ //////////////////////////////////////////////////////////////////////////
2 ?3 k9 j: |! X# B$ j //交换
3 D% b/ `. `% t# A0 e( G for (size_t i=0;i<vItem.size();i++)% K# F$ F4 p5 Y, E \
{! I! \- }1 F) \4 X2 {
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: x- _; h1 V9 m8 i
pInvSort->Add(vItem.nIndex);
' l; H# v' Q N1 \* t }4 C# h' D9 s2 N6 l9 M1 o. Z
BYTE nDestPos = 0;
5 _( A0 E, [9 x6 I for (int i=0;i<MAX_INVENTORY;i++)
[# [+ R0 a- {: k {7 i1 ~% J" ~1 {3 u* M* s4 B+ O% Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 J3 V' Z/ v9 n2 E3 m! B if (pItemElem)
6 Y& Q5 ^5 i$ O% b& w6 t3 e1 ^" ~ {7 e$ |. R+ V6 n3 O" s2 [
if (IsUsingItem(pItemElem)), b8 T& t* v# ` }+ \; D
{7 \" {' u7 M# ]
//这个位置无法放8 p) I. d* J6 `5 X4 ^0 m1 {* S, T
nDestPos++;4 `) @( s& Q1 c7 n! l
}7 a+ u$ {7 d& l1 L! O' G) K
}: Q8 a+ a9 C0 C3 L. J* X
BYTE nSrc = pInvSort->GetItemSrc(i);+ [; J& i2 i& i c& Q. }
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
N% y) l- r/ g! h1 G" F if (pItemElem)
0 t- |/ O. p4 Z7 \. H* x7 R {
, F0 g8 Q) d+ f, Q/ m if (IsUsingItem(pItemElem))3 @, `4 l: p7 H
{
: S/ f1 D3 A" R //这个道具无法移动,跳过
4 d) a# k/ `8 H" o- }$ X, E/ r continue;
0 s. v( n% L9 n$ b# i' X% q/ A- c }
6 o4 B8 @% F# s( T" q }else{: w) o7 v( `# o! P1 l* @; `
//空位置 不用动. V9 R1 c- {3 e; [6 n8 Y# f
continue;
4 d+ G8 S- P$ j. w6 Q7 y5 O6 r' J }
9 E# ^ b8 t3 [ o //////////////////////////////////////////////////////////////////////////& }, r0 Y/ J7 C2 _
//开始移动
+ P+ {1 z. S3 w. G if (nSrc == nDestPos)7 X6 q# C2 Z0 @2 _; D6 _
{
& ?, s0 x, b$ n //原地不动
0 ?; C1 e( E+ L$ n7 L# r/ f nDestPos++;
. I5 l" G* b2 i, ^0 Q: x continue;4 i) V* z. C" M$ C+ h7 U
}/ e1 o: H1 C6 }$ J: T0 c
pInvSort->MoveItem(i,nDestPos);* @! a t5 J6 X$ E8 y% x" L
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 d% }0 Q+ N( |3 }1 l4 Y
Sleep(5);- A' s3 x U5 t" v2 f: E9 f9 G
//Error("移动 - %d->%d",nSrc,nDestPos);0 U) M4 C9 ] ]' _7 p
nDestPos++;
& K3 l1 C5 \, I; B2 h; v }4 r9 X6 t- ^, J6 |
//取第一个元素的信息6 Z; P. f4 Y' q
/*
" ]; @2 [+ b: }# N2 H% A' \ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 w1 X- o1 t; c
{9 D* R, q0 P: u5 k6 M
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; ]8 \( Z7 G5 w g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) b# O% ^5 T$ @$ Z @0 d
}' S9 P5 U9 Q) \
*/
1 b6 V8 K* G' [3 I! D ////////////////////////////////////////////////////////////////////////// Q( L! E) G7 |) |# V4 b
break;2 _( l7 l* A3 ^% H! F9 F3 y
}4 E# }. Y; _) \' ? Z6 p( `! |
}
, X r& \6 u1 X$ ~& t}. X' q/ X: ^ K; ^- E' k
m_wndMenu.SetVisible(FALSE);
/ k4 ?* B+ H" R* K& o
& ~- g3 {, ~. _" j5 ]& a--------------------------------------------------------------------------------------------------------
" X6 F2 N$ W+ K0 Y6 I) G4 z8 R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& \9 L# P2 ^$ A: q1 R+ a
{
2 v. [$ u% h: bBaseMouseCursor();
2 ^7 C( P) }! M6 g1 |+ c}
! s0 F& G, y- Z, E+ u在其下添加:# Y" G4 K- F9 M2 G* h" a0 x4 {
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% v' G, \# R) z1 |3 W( N{: J- W9 f! b. B* y! e
m_wndMenu.DeleteAllMenu();
3 Y" f+ x" {( Pm_wndMenu.CreateMenu(this);
- c. y1 v# c3 x2 ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ V9 c) J! J" `7 L3 j8 P7 J; A; j) u7 a6 ^
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 t K( c9 B4 w( W
{# |* q' B1 {- H# F' G
//P以上级别才可以删除所有道具! w4 a- U- ~6 n; m e
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" N4 ~! ^: Z4 X9 d9 J! D}' ^( o+ A7 ?* {4 j" D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& l }1 v* g1 Z* ~3 Em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, D( ]( Q, b" w) r8 u( G. x9 hm_wndMenu.SetFocus();- a- X% B: t! X! r5 ], }+ H
}
1 q4 ?9 i3 A9 ~: Y! v8 d------------------------------------------------------------------------------------------------------------* @) ]/ u$ i- Y5 @% F2 @
*************************
9 V! t6 ?0 w1 n! NWndField.h文件6 @; D$ O+ Q# _) W
*************************
6 ?% f3 d" T( [# z( ` F2 s搜索:BOOL m_bReport;+ e% ~3 O& ]( C3 G! X& m) r
其后添加:
! Q' p0 o, A0 w0 ?. r! _CWndMenu m_wndMenu;
' r/ u/ d0 ?6 ^- @8 I- `搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 y; x0 A H, s, I" h& U" d
其后添加:5 J7 f Q+ s4 f, T4 Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);8 w; v0 z2 y- _" p; k, }
% ~! a% ?; J$ O5 g. @' J& |6 \. i7 `$ o# d- I
|
|