|
|
源文件中_Interface文件夹下WndField.cpp文件
/ O+ K0 Q8 c m9 X3 l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), T* Y$ x! ~* ^- u4 }3 @" ]
& }0 e" b& h+ e6 N% d/ J0 {
struct sItem# S. p$ {$ ^9 k3 k s& ?% Y+ b q
{
' ]" F5 p: [7 F& vDWORD dwId;
( g4 a. m+ Z/ o: F4 wDWORD dwKind2;
) Q3 I% {! x9 M+ W1 Y' QDWORD dwItemId;9 l. ?$ ~; _8 R% q+ l
BYTE nIndex;
O1 d8 C: u1 M! h1 HsItem(){
, T2 u; g0 `* P4 [' ? dwId = dwKind2 = dwItemId = nIndex = 0;. Y! K+ m+ {+ q
}" b2 D! p# Q9 q' L
bool operator < (const sItem p2)5 {, B' o; V8 {7 w$ B3 l* G
{! m; `& M; O2 K/ B
if (dwKind2 == p2.dwKind2)+ T" L- s! y& b
{( x/ [9 W& V$ }3 T' v7 e+ X/ c7 z
return dwItemId < p2.dwItemId;* {* L3 V9 X( d7 C
}else{
5 v+ t9 b+ N( ]. O2 v3 j return dwKind2 < p2.dwKind2;
( K& y' }. P7 J. O1 ^: n e" ]4 [ }% a) I' D: e* k. m) `2 g- ]7 l) b9 ~
}
; e ~9 k" \) U: U/ L1 m};1 l. Z; g. t0 A% l7 T
class CInventorySort, [, L; W8 F" T, N* K4 p
{7 H& M; M' ?$ A. n6 }
public:) Q$ W( |4 q* f9 [) g3 o0 z
CInventorySort()
/ \ U' ~7 C! j; i" f" ]{
# g! @& g" g: v m_dwPos = 0;
' {6 k1 M5 B8 ~( L: x}$ \8 K% ~5 p0 K3 H- k
~CInventorySort(){}2 d, d: L$ Q! Y# h2 a0 `8 }
private:! b X8 M- w* W! n2 |2 K
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* b: i! {4 Y8 ?$ ZDWORD m_dwPos;+ ^% N. T* N+ W( v3 J3 C3 u+ z
public:
3 ?9 u5 W P M* d U4 B8 ^+ nvoid Add(BYTE nIndex)/ E; m6 b/ ]% p! l0 ?$ g
{/ g( l! `! |$ A2 _' s, {" J# |
if (m_dwPos >= MAX_INVENTORY)
0 Y# B! G9 Z! H {+ N0 Y% w5 e" ~$ i0 t2 i b
return;
7 Z) o0 i% h. a }* I9 s. `+ t9 Q
m_Item[m_dwPos].nIndex = nIndex;
) X) h6 H# V, C: }0 B2 S' a4 L m_Item[m_dwPos].dwId = m_dwPos;
( r- ?% p7 M! b m_dwPos++; E! Q( D9 X* b* n) R) Y+ M' {- _; _
}7 [$ e( s1 p; Y) M% k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' ]2 M9 B c2 u8 |8 n
{8 Y7 V: f6 }9 C4 _ r; L% {$ m5 l
for (int i=0;i<MAX_INVENTORY;i++)1 {8 j1 O8 D# k- f$ b9 ^" f: k7 k9 N$ R
{( A$ A; x! f+ P* m
if (m_Item.dwId == dwId)
/ g/ }5 P( q5 {! \- Q3 [/ @ {9 }' u6 h# T$ | z, M! u
return m_Item.nIndex;8 l1 L/ N% w8 g3 q" v
}0 I8 j+ O7 `2 I6 O
}. }+ }0 {3 u4 K8 {! b6 y, @# M) P
return 255;
6 b* n5 G1 H5 O4 c}
7 i6 b, T4 |! N8 y1 t' evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. i( z, H& o& s: Z: R2 d
{# n4 s/ h: e( R1 A8 O" R
BYTE nTmp = 0;; f. _' t3 {8 y+ |: _2 s2 O
bool bDest = false,bSrc = false;
/ |, ^$ f# j8 A0 \* S: [/ W9 V4 p( K for (int i=0;i<MAX_INVENTORY;i++)' C0 ]. K$ V8 V% }. v: Y
{( z$ d! h* L# f3 S/ Q [+ [
if (dwSrcId == m_Item.dwId)7 x; g' E9 q+ N; k2 Q
{
8 V' v/ ~4 I( }) [; `) D: o- N //id相等 则 改变对应的dest和src; g) H m1 C T5 y
nTmp = m_Item.nIndex;
, F+ D, k2 p$ s: O+ _% u' w5 x: h m_Item.nIndex = dest;
@- Z) B) J; E- \ h, z L( Z }
- C6 I+ ~+ ?! k }
6 g# I( y. M7 b& W/ Q9 {# O //临时数据保存完毕,交换开始
) e8 M& A( ^3 K; F# { for (int i=0;i<MAX_INVENTORY;i++)
& l( b4 t. Z( x {
% w' d2 G- k/ u0 v if (dest == m_Item.nIndex)% H4 V2 a2 l* P' \5 F1 s# p& A: ?
{, c( |( r$ v, n2 M3 V
//id相等 则 改变对应的dest和src
" ~, y3 Y$ ^! I5 }# \$ {, W7 A m_Item.nIndex = nTmp;. X; k9 t# k# h4 n2 Z, V( d3 T
}$ k; z# G+ j" r( D3 A- o2 c
}2 s( q+ @0 q v; z" u$ ^
}' v7 h8 [, d9 y7 ], B- @5 N4 c5 b; w/ O
};
: r" k" r: a3 Y/ k# e-------------------------------------------------------------------------
1 k2 G6 N6 _2 @1 F依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). ?/ `- @3 ]) t; m
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; c$ x/ i9 S) P8 @: ~紧靠其上添加:$ m2 b- `& @8 o* r: y
if( pWndBase == &m_wndMenu )5 y4 n* ]4 N8 z2 j! m4 X9 L
{
' @* e$ @$ \) u1 b; t$ d switch( nID )$ D, r" D( [" s H# n w& Q
{; y# i& V3 V6 s/ g/ Q) B. f- T
case 2:
7 j' Z$ v4 v8 i# L- X3 g8 l {8 b6 O/ [: {7 j H [0 h; `+ a F
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( I! q) D) F" ]; N4 }+ k
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" {6 x2 q! T+ `) }0 ^/ f8 _& u
{6 [- |5 S( B) J5 K% H
break;
0 W( P# M+ m* b; J- P2 V) a }0 y7 y' s6 i+ Z5 y7 `6 ^8 i
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 f; S$ y# B- e# B {$ v; n5 \( p& a1 V7 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 y6 L R- X( h9 v) d# c; M/ s if( !pItemElem )
7 _( b6 Z6 w- A& x& s. |% N! Q9 v continue;
* ^6 ]/ [$ t/ a+ q% i$ |5 D if(pItemElem->GetExtra() > 0)
4 _/ m G7 }9 e: N( I7 T; v; x continue;+ i) Q( j2 K' [3 p4 C
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & J2 |$ c2 j' K/ O# E. U, F+ T3 D
continue;( h6 d" B8 p+ h1 _& [* o1 X
if( g_pPlayer->IsUsing( pItemElem ) )
8 f4 F6 c9 G& _# s9 s4 U9 @ continue;7 a# \' |% J8 D' j' l5 H+ L% j
if( pItemElem->IsUndestructable() == TRUE )2 c2 N5 t8 D/ s% Y+ ]; w
{
5 f/ U6 w# l) I* c* ~ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 @4 d9 [4 m5 ^ d7 Y$ T5 H continue;
# n, P8 w2 w! o1 f }. @9 B. j# D# F
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ i+ k8 M; N) |$ a. n }. M" H' D% }0 C6 o$ G
break;
: z& l1 X0 _/ f, Q, Z3 \! G5 F }
0 Q1 Z. d; r9 ? case 1:
' H w9 V6 N8 k; [6 i/ U" S {* P; R) e H. O! m
//整理背包
, Z$ k* s+ u2 @0 ?( L6 `4 { //////////////////////////////////////////////////////////////////////////' t9 B+ M. _+ z- D, W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 Y8 Q- _: M/ a `! n //////////////////////////////////////////////////////////////////////////
4 Q9 h9 \! k' Z: F0 W% O% k/ n* T' g //////////////////////////////////////////////////////////////////////////
( T4 Y4 e/ e" ]3 _2 v CInventorySort* pInvSort = new CInventorySort;. S- f( ~0 R4 Z0 d
vector <sItem> vItem;
( P# ?: v& g' D# w2 Q( | vItem.resize(MAX_INVENTORY);//初始化大小
* M4 E* x" R& y+ G: L" g //////////////////////////////////////////////////////////////////////////; e; b7 ^6 P1 i! G0 b: W) C
//填充数据
# b. `5 t% r* b: {1 \, u for (int i=0;i<MAX_INVENTORY;i++)
( {$ a; y5 f) P1 P: } {
) ^1 X: y" J# U# d; a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 t) v6 |! i/ y: f$ l* \7 n if (!pItemElem)
# D% p$ Z- O5 o K {5 ]. |2 ^# t* }2 l
vItem.dwKind2 = 0xffffffff;- c# W# [2 ~. B+ S) Z3 C/ |) y
vItem.dwItemId = 0xffffffff;1 `4 F+ _! p+ r
vItem.nIndex = i;9 x1 T% @+ r$ N4 L% j- U
}else {
+ r7 R0 S8 @: v- {; T4 \ H# d8 d e ItemProp* pProp = pItemElem->GetProp();
. [* G7 C; C& h7 W% D$ O' j vItem.dwKind2 = pProp->dwItemKind2;
" G: J1 f( ?) G+ o vItem.dwItemId = pItemElem->m_dwItemId;( K" h* j3 r' J' i+ ]
vItem.nIndex = i;
1 K; d: K% }6 o& m1 y; K$ I* ^: R }9 I: o* P. d0 o$ ?) t
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* s( l' B2 c% _ }
+ C; \! v7 a/ K! b& h //////////////////////////////////////////////////////////////////////////! a9 _, T* k% S3 o6 | ?
sort(vItem.begin(),vItem.end());//排序8 a9 H% _3 I1 N# u- j3 y# k
//////////////////////////////////////////////////////////////////////////
) f# k' p1 W2 k. B! |: e //交换
6 p* h/ C3 k" W; b: H for (size_t i=0;i<vItem.size();i++)8 t( V5 Q. s& T/ ^$ _3 q
{
* }7 Y3 ~" l9 \6 f7 b9 K& G5 l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 g& Z0 g) i2 m. z pInvSort->Add(vItem.nIndex);8 N* j; k3 V# g0 [
}3 j- @/ |6 `1 n0 M9 N0 j" X
BYTE nDestPos = 0;
; I) s- }( l9 w) r$ R for (int i=0;i<MAX_INVENTORY;i++)
; h7 U2 m0 | @& p Q {
$ Y5 y: G0 W; u1 F9 w4 i/ C2 s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; U# Q8 p. x/ S; K; M: g6 F if (pItemElem)
3 q j/ o e; A2 p! N {
7 R f% q& y' V9 b' z" {, f if (IsUsingItem(pItemElem))7 k+ W& \. i1 K! S
{
, R9 O+ y4 A$ E4 T$ C //这个位置无法放6 D* K4 \7 y% w* I; o% ]
nDestPos++;3 v! x5 A0 l/ J
}0 T* X2 A; K; p: W# x* V/ e
}
" X8 g& c$ ~0 D( X/ D BYTE nSrc = pInvSort->GetItemSrc(i);. ]- G) h+ G+ f5 ^2 u, Z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. \. E1 q0 i, _" {" I& M
if (pItemElem)# }9 \. A5 N. `
{( n4 F ?) v j! O+ _! u
if (IsUsingItem(pItemElem))
8 e- M# | \' H {
* N. X) _% Z4 q$ K //这个道具无法移动,跳过$ [% m4 B# U( t. @2 A: c
continue;
. O2 R& w9 Y, _ }
& k5 K3 A: {9 l }else{
4 `$ R( S& F( m9 s* g //空位置 不用动& g; |1 h) {! ]* \
continue;
3 F$ Y8 H6 Q/ ?& p7 B1 i4 X/ t( S- m! V- B }
9 N! K7 U/ T6 @. A. F //////////////////////////////////////////////////////////////////////////
* p. n$ a' Y) l) a$ ]4 | //开始移动) d( j0 M5 O1 W: Y9 q- `' V, ~
if (nSrc == nDestPos)" i5 f7 e9 l0 B. ^! J3 V
{" _) A0 G' A! x& Y# I" M7 D
//原地不动
; |7 N* F: p x( ]: q. o nDestPos++; a/ F9 @# b* `; |( I
continue;/ B$ x, h* r8 P" a
}
! N7 W/ D' r0 n) H5 J# | pInvSort->MoveItem(i,nDestPos);& T, u+ u) g9 |1 z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! k# p( l5 N6 v
Sleep(5);# E7 v+ q; R7 G L; U; _/ A3 k) l
//Error("移动 - %d->%d",nSrc,nDestPos);
: y S" }; m2 [, d+ [: k nDestPos++;3 P3 ]) V! H7 i \& m
}
% ^1 @; J( t* V$ @) I7 T: k2 C //取第一个元素的信息
0 F; H/ e* u, C" Q /*
; e: P. s; k) |, Z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 r7 G- J V) v- Z$ P4 V+ }* U
{
# t2 q- _. b$ v4 c* _0 j! d. ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% H0 W+ {4 m8 |- @ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 K0 Q% D! E& @ k }
; D& Q9 P) ?: e! t/ H' @ */* Y W$ H8 C, O+ c( y0 |
//////////////////////////////////////////////////////////////////////////; Q& ?/ W3 p# Y4 F: }7 x: {) @
break;
% @) O: B6 p& J- E* _6 F }
: a K C9 C' t3 N3 L& j: x; [5 _ }
$ j. s/ g- m: l/ J! G) q+ p}2 f8 r; s- N/ }
m_wndMenu.SetVisible(FALSE);
& e5 C% G% b3 ?4 w% E
3 A# K( A0 p, I7 U--------------------------------------------------------------------------------------------------------
9 W- P8 k9 D5 I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 i4 h% {6 b4 o. P7 Z" ^3 f{
! o1 z" O3 k( O4 ]+ @BaseMouseCursor();6 G2 j8 O8 u+ l3 I, q
}7 y: }4 }, X. w' q6 a9 P
在其下添加:
4 _. C' |8 y/ o% W5 zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 b: a; ]* U" F5 a, J" H G{5 i9 `5 z$ @5 |: \( N$ ?
m_wndMenu.DeleteAllMenu();6 T7 M! l% Y0 E" g* R4 g2 b
m_wndMenu.CreateMenu(this);
7 Z& e" a( e9 h8 T! i% ~/ z2 Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! f; e ^& G9 z) F$ K" l$ Y- ?
1 T0 F- R( {+ X5 H8 e, m! Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), d3 {3 a. g/ e" F# ^; F% c4 h& l
{, \+ u( M* [' e/ [: L
//P以上级别才可以删除所有道具
+ X/ Z g9 B4 J) C/ x2 b m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 ^: U) |1 ?% O5 }
}
- i, I V- w6 z" s9 `" s2 ~4 nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, k6 Z7 m% j0 H! `/ {m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 V( O* x0 l. F3 Q! _3 O! pm_wndMenu.SetFocus();* C6 l$ p) W: P2 m9 P0 _
}" }( I7 q# k; T2 B1 c; H5 v9 F
------------------------------------------------------------------------------------------------------------4 A V( ^; l. I6 q- H
*************************# _& r% [6 M$ |6 l' K
WndField.h文件
8 f- e& a! W5 K0 q3 u/ E*************************
( M! ]) C8 K n8 B2 e搜索:BOOL m_bReport;
7 R9 s8 }- ]' J2 U' \" G其后添加:, M% j2 P. j0 w
CWndMenu m_wndMenu; U& ?5 H. a- E/ k7 |4 i
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
f' k$ o3 `! n) B; e3 Z其后添加:
; J# s5 N5 n0 D0 x0 L( e6 Z- yvirtual void OnRButtonUp(UINT nFlags, CPoint point);
) o% j+ p) O+ d7 n, I
6 D* F( o4 X* ^
6 {. t5 y0 e2 t( H K- ~+ w |
|