|
|
源文件中_Interface文件夹下WndField.cpp文件5 H! a: O0 t8 |, T
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: N4 t2 g! A0 P$ t2 {& p6 w3 V
9 w+ |; t; }9 {* U5 `0 ?struct sItem
$ C/ _1 P# e6 @( @{
) T; s& b2 X. f+ q* ODWORD dwId;+ @+ @9 \0 o; N) I" }) S4 H
DWORD dwKind2;
- X) H, p! ?$ Z+ \# }! IDWORD dwItemId;$ T3 T1 T! a& |, W I8 J& T8 o
BYTE nIndex;2 G) z; O [" ^* T
sItem(){+ I! M' v* e, v" x) T' c4 u
dwId = dwKind2 = dwItemId = nIndex = 0;8 t9 i0 x; e. g
}
+ m" P# m" ^8 k8 K0 U @2 ~bool operator < (const sItem p2)/ M# Y2 z# v7 ~+ d9 v
{
9 G- I5 g0 e0 \$ Q9 o9 r/ W+ Q if (dwKind2 == p2.dwKind2)/ J0 v! Y& U" K X1 o, p
{: v2 l/ |% m* H1 ?# g" W- f2 I
return dwItemId < p2.dwItemId;
7 ]1 b. U, ]5 U1 T3 A2 ]! g; G }else{6 d, t- ~: { \- E9 N
return dwKind2 < p2.dwKind2;5 V8 t# u+ a5 z! h8 I" R8 T3 f& @. x. q
}
% m6 ^% s) u/ |/ B" T}
+ a! U' P% A2 f};
) i9 ?& W g6 l1 k$ D' U# `8 {class CInventorySort
( u7 ?6 z' h7 C4 \, R$ T% v{
c) }, f5 X3 Bpublic:9 y' M: z6 G$ y
CInventorySort()
" u, M( e8 k% E0 P6 G# E4 R% b{
+ D8 U: O, A9 m% @( y m_dwPos = 0;) a# ?9 h G! y/ m0 } Z0 [# J
}* K7 I8 t5 F0 k, i. o. r: z
~CInventorySort(){}
+ \3 b/ n$ h. T6 V1 H1 g8 t3 g2 hprivate:3 u2 u, p- c2 h
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% n) Y) [; t0 y: d5 LDWORD m_dwPos;% e, D6 c$ U% s) B% s' k! w
public:
/ @3 T# c: \$ E+ n, ~void Add(BYTE nIndex)
, \2 S0 [- k& @" G+ K* L1 W{
d2 H. k, R; a: ^& X: k if (m_dwPos >= MAX_INVENTORY)2 _6 Q$ L" R) ]0 I$ }
{
6 G6 ~' [* i! Z2 L: A) S8 j+ r, Y return;
! n& l/ p* ^) y O: z+ H }! o- \; B1 v5 \) }
m_Item[m_dwPos].nIndex = nIndex;# [! e6 c/ ?' t9 r5 `+ p# `; g. y
m_Item[m_dwPos].dwId = m_dwPos;5 g! E( |7 N2 ?# j) q% r) T O; a
m_dwPos++;
# K* {- Q ^1 m* W( v}
; x) q5 ]# D8 k' P, B' s3 ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 H+ z0 x; L' R& o) Z1 Z/ e; X* V
{+ }: W. o/ G/ c1 K3 w4 h
for (int i=0;i<MAX_INVENTORY;i++)
, [& z+ O2 j& s* P" ~ {
- I% V8 S3 B4 g) u3 M s$ K" ? if (m_Item.dwId == dwId), P$ u/ A2 w) a) _* t% S" x' l2 H# ^
{$ ?$ `* W* Z3 |) S1 y
return m_Item.nIndex;% M" v; r! a8 Z$ ]
}
- b# Y( p( Y- y" S) r2 q! ~8 @ }: f5 u8 C- \& C. d. R, {, ]( Q
return 255; c, y. _( F, W# b5 }
}9 x6 y# d2 T0 i$ R. F; K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 }! B1 C" m* b. t, F$ k{2 w/ @( S) V" s
BYTE nTmp = 0;, Y2 m7 A+ c6 `8 r& B% ?
bool bDest = false,bSrc = false;- H- [6 h$ u3 c5 r6 q7 ?
for (int i=0;i<MAX_INVENTORY;i++)
0 M4 }9 @: Z' w8 G8 Y) X! r {' \- P8 z+ c. S* r1 _1 n
if (dwSrcId == m_Item.dwId)- D. [1 F V* m0 N2 d- N
{1 t. R: Z5 i0 H M
//id相等 则 改变对应的dest和src& n( v2 j) c# n
nTmp = m_Item.nIndex;8 ~- f/ B" @# Q, E3 G7 B0 }: E
m_Item.nIndex = dest;) Q" n3 U1 u4 Q( e, s% X6 s
}
* v& k( I u* s( M4 M }( [& e/ J+ ~. ?8 j& k* m# R
//临时数据保存完毕,交换开始1 l( l5 r! _+ _2 z
for (int i=0;i<MAX_INVENTORY;i++)# Z: v' Y( _, B, I) o7 {- w% v
{
( {, G* k- b8 h3 T if (dest == m_Item.nIndex)
/ i9 Y+ I4 a/ \; [6 n3 e {
$ j" K0 |2 ?& _4 j //id相等 则 改变对应的dest和src
1 Y n9 e0 e% f5 Y6 G/ p m_Item.nIndex = nTmp;
. l" W. z# N# D: a }
4 _' o$ D9 \2 V0 L+ T+ N6 x }' Z! q5 y! I. j
}& c2 R* s9 y q, G" y
};
8 A4 B* I8 M4 R$ l4 o6 e) `-------------------------------------------------------------------------2 x/ | Y& ~6 W8 j0 E/ o
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 D3 e- R; ]' D* E, s9 X" `* h* b, J
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# l' A3 B5 ~3 {7 }
紧靠其上添加:
& p# w0 n, a" G/ Y. ]# o" u8 ~if( pWndBase == &m_wndMenu )% J/ H. a' _5 ` Z8 c( }
{1 S* ?: }/ c* Q8 a' p
switch( nID )
% a V) \, l( f& z+ g {
. C$ w9 X& `9 A' X* q+ G2 k! H case 2:
! ~( c! p7 A" `. E6 O {
. B, N% D* @: P R% D- u //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: n% |9 B7 p% g2 b! @/ k
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ O3 [$ u: f1 |, q {2 y$ G9 m# K6 G1 A6 v* ]3 W
break;& l: b |- F- V" i) T
}- I, u# [$ Y5 j2 ~+ C
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 y$ ]+ j! W2 I; K+ U, X
{
4 {5 ?$ M; }6 s' b Z7 K8 V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. U+ \6 _% q3 Q& A8 u% w
if( !pItemElem )
9 q2 P: h! w* B; z2 o# m continue;
! z9 d* u# X* Y if(pItemElem->GetExtra() > 0)
6 F* u: F, ~! ?# A( Z0 K$ B5 } continue;
! X5 f; X! k) L6 \3 `% f if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ \; K/ v Q" o$ f
continue;
7 q" z& _+ S. g5 l! E# G8 j if( g_pPlayer->IsUsing( pItemElem ) )
9 L( P3 I) `* j- t5 u continue;
, q2 I& _& f. d1 @9 v- ~5 @3 f if( pItemElem->IsUndestructable() == TRUE )7 v4 q* A; ~0 g
{) D v' |& }9 ?% J; _
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 k) z3 d0 H. S
continue;
2 j1 u* O+ g# |' e }
7 j9 d1 `( J8 t: ?2 u" ]% H& O) X g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' F4 e, e! m0 _, _& Q" s }" c" M( u0 c, b2 [
break;
, P. H1 F' G5 Y, `2 n* Y# A. T }5 o" a. z' {/ r: |' e0 ?
case 1:
/ Z6 G& [) w% s {/ g( j, v# m* ~8 ^: ?
//整理背包
+ ^; x! o' `6 m: _6 _7 s4 K //////////////////////////////////////////////////////////////////////////* D+ X5 i7 k6 t
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 J. h9 \ I2 q' s8 t5 S/ M
//////////////////////////////////////////////////////////////////////////: |( `% S* A- \+ q0 F: E
//////////////////////////////////////////////////////////////////////////
3 T- v. }7 F( Z4 { CInventorySort* pInvSort = new CInventorySort;
7 N( E6 w3 c2 N: `0 n5 g c! I vector <sItem> vItem;
5 v; o) ?: N8 r( {) c. q vItem.resize(MAX_INVENTORY);//初始化大小# v; e# F( D; a
/////////////////////////////////////////////////////////////////////////// y4 N8 @5 v5 O) J
//填充数据
9 ^" h% S6 }. T for (int i=0;i<MAX_INVENTORY;i++)
3 F1 t! k7 }* ? {
! {, l3 r- ^" U# w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% i5 @& F/ R9 F7 |
if (!pItemElem)
% ^% B! d3 z) y* [2 m0 R {1 ?7 n1 ?7 S0 M8 S8 ~! I3 ]
vItem.dwKind2 = 0xffffffff;
2 l, m; M8 s+ i0 l8 ?3 d# J% o7 F6 h vItem.dwItemId = 0xffffffff;
' g3 ]4 ]% t! ~, v6 @ vItem.nIndex = i;5 h4 j1 T R' E' N
}else {1 I/ P1 @! X8 h+ |
ItemProp* pProp = pItemElem->GetProp();
8 q, s/ \- k& h% d. f9 | vItem.dwKind2 = pProp->dwItemKind2;0 e1 g1 S/ m: l) p6 N N k
vItem.dwItemId = pItemElem->m_dwItemId;: x: ~, l3 h. ~' X9 H& X; `$ a
vItem.nIndex = i;
& D. \* n8 A: n }: Q6 D/ g1 S% }! v+ q
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 H5 ?/ Q: k, s, X( k
}
$ f* g5 U Z( r5 m //////////////////////////////////////////////////////////////////////////6 P8 H7 R* W" k) B6 U
sort(vItem.begin(),vItem.end());//排序1 h, ^7 f1 a' D4 v. n0 E( G
//////////////////////////////////////////////////////////////////////////
5 a& }! o) z& @0 ^ //交换
4 B, O2 p% ?7 @4 d" B2 X for (size_t i=0;i<vItem.size();i++)# [ C5 T% v$ ?8 W0 y
{
& @4 s" J% m& Q2 M0 W3 \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% Y" t: A' @, ]& C2 I pInvSort->Add(vItem.nIndex);' B% P9 c+ v0 i O; V( k# D
}
% D$ C2 v8 u! `2 e" i1 i1 j8 I BYTE nDestPos = 0;9 i6 q) g! K/ K, h0 q; j; v, o
for (int i=0;i<MAX_INVENTORY;i++)) L; v" [: r" J0 D/ Z
{7 i5 a8 ]" @# [9 h( ?8 }. W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ k; s7 k7 s" ]
if (pItemElem)/ j/ u4 p" o) w! R6 y6 r( ~( ?
{- o( `3 h5 k8 M$ W' r
if (IsUsingItem(pItemElem))
: n2 p$ B7 p& [# O" p {! i( H0 B# g/ m* L
//这个位置无法放4 @# s0 s- M* f/ t9 t
nDestPos++;
+ z3 C- _/ \9 j }
8 I- H v( K+ e- e! O }0 ^/ H6 y: Y4 h
BYTE nSrc = pInvSort->GetItemSrc(i);$ S2 C3 i1 P; C: p, Z/ I
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: Z8 H8 R. T3 c6 i
if (pItemElem)
5 ~: O8 r4 B" U, \, h5 z* i {; ~- j4 c! f! {8 z6 ~0 |# V2 H
if (IsUsingItem(pItemElem))+ _+ b0 v1 b- T6 {% r
{- E5 Q$ \. h9 ^; Z! w* m3 \
//这个道具无法移动,跳过' ~; h) J+ t6 _' o% G
continue;
) _: t" l9 J$ _ U- k3 T } Q( J3 y s0 M2 c' \
}else{9 |8 L5 w! @: w% H; l- k. l
//空位置 不用动
# F& w& e* E/ Q. w# n2 [ continue;
1 G4 z7 _$ x1 D' m- }* R* ]+ \ z }
2 d4 V, P; w. ?" u2 n: e //////////////////////////////////////////////////////////////////////////
2 j% p) k' ^+ ?6 w1 o3 W //开始移动# Z9 f" @) j6 ^7 i) J% Z+ p
if (nSrc == nDestPos)
4 V3 j) o$ E6 L' s; U! o {
2 ^4 N- o; m1 K" k //原地不动* {# C* |$ f3 V& A" c
nDestPos++;9 n. O s, d( p$ v" [' U
continue;' _, Z# |; k/ Q% ?* h p3 v \
}+ j7 Q: y4 I4 a9 g% I$ V# ^' h4 i
pInvSort->MoveItem(i,nDestPos);
, @0 X6 V0 S* B) @ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 _ k' ~5 d8 H; q: F2 f Sleep(5);4 k$ J( k! X2 W7 S8 i' }8 D
//Error("移动 - %d->%d",nSrc,nDestPos);# c! \. L/ p7 A0 } _$ l: b
nDestPos++;
; l) o: a: i8 _4 D' x }/ t; H& C. c! B$ U1 d
//取第一个元素的信息) d0 }+ p2 c6 f9 ~2 ?
/*
. P) Z( b' `$ ~# T1 t" }' T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- {5 ^8 }' H- n( P# H' n {
, u% M' Z( n% G/ G- H! `" U) b Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ F4 Y j6 w$ R- o. d% q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# I8 K: O+ K( a% s2 Z/ i
}
* q- Q+ t& }4 V& I0 k# X& F */
! d! A( ~7 l# p) X! b4 R //////////////////////////////////////////////////////////////////////////0 d; Z4 A: L( `
break;
. ]* ~+ s- b: E& N9 H- { }
: \4 @! b- D2 a( o/ s }
$ e- G2 m7 ]; p% i* a- |' y}, i M+ W/ f! z
m_wndMenu.SetVisible(FALSE);
8 Z; c( a9 U! C! Y& h! [: c( V# y2 }8 _: @
--------------------------------------------------------------------------------------------------------
, U2 w' `8 [+ g; n搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 d/ x' t) q2 ~+ @{7 A& r `' G7 H7 V) x. z1 m! R
BaseMouseCursor();
! l8 O; @. t! q3 O. u9 n i}7 M n% i: S# N% F) h: M
在其下添加:
$ V) \ y6 t, ?, ~1 dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 W6 o4 O% ~! d# c& W{! m3 }! |. B) m2 V- w
m_wndMenu.DeleteAllMenu();
/ i8 s" F' o Jm_wndMenu.CreateMenu(this);1 I& l" O/ Y5 I! L" V- k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, D; c+ B1 [+ V/ m# [: K- j. f* a' h# P7 H9 ]! q# [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" `* N7 W$ m" F; u
{8 O' x2 {3 D! {1 z- B# ^& H
//P以上级别才可以删除所有道具
6 C6 j* U1 k6 B6 h) }4 d m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 N9 v$ k) q; n0 S7 n: e
}8 ^' y' B7 i+ K
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* e% i) y% s+ e* H$ e
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! L5 a. G) N" i! F! [; M3 m8 K) Lm_wndMenu.SetFocus();) @* E' N8 d( W2 l, t
}
5 a$ X( O, H" c6 q4 X------------------------------------------------------------------------------------------------------------
& D6 \6 e4 t- E" B8 M*************************
) e1 B+ o! w* i! E: X0 ~! yWndField.h文件- @/ e( @) n* z5 v6 ~
*************************
( D. A" a( q, Z; E0 x3 q! m搜索:BOOL m_bReport;+ K1 F! g, {. s8 E
其后添加:# Y1 O' ?7 g1 z
CWndMenu m_wndMenu;" h1 Q( f7 D& G2 W( T. }( x: `8 C
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) B1 p/ s( S* p$ X8 D$ h2 O1 b
其后添加:- Y6 [3 I' J! h, j
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# q3 D5 c) ?# Y) Y$ f/ G- U# X) Z+ ~4 u) J
5 i1 Y* q6 ?$ r2 n6 I3 G* ^4 L
|
|