|
|
源文件中_Interface文件夹下WndField.cpp文件
0 f! u1 w$ k, _ G9 a: T搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 |7 L, }8 r( }
. v# W% `: c5 A+ ]* e( C
struct sItem1 {9 z; x. H7 J2 `3 p3 j- B
{8 n& E+ H. A+ @$ k5 N3 \
DWORD dwId;/ I6 h. z4 a0 }, E
DWORD dwKind2;
% J7 _1 K1 f+ R% Z0 k' c/ |DWORD dwItemId;
5 Y- n3 ]1 y& v* C! Z) e0 HBYTE nIndex;
5 Y3 V1 e! q; H4 xsItem(){2 h6 }; ?- @/ c& C1 Q2 k
dwId = dwKind2 = dwItemId = nIndex = 0;7 Q2 E7 }( |+ }
}
, e/ C. p C* abool operator < (const sItem p2)
: n* N% r+ e: D2 \{
3 t, O% {2 \& j6 c. w5 V( R if (dwKind2 == p2.dwKind2)
3 I$ o1 V/ |+ Z8 d; H' ~* L {
; j9 z) k2 `1 m' K return dwItemId < p2.dwItemId;
) z% Z& J' a0 s4 i }else{
- {8 M' e2 c k) r6 k return dwKind2 < p2.dwKind2;- ^& ~/ u2 u% [8 ~
}
: S' A. d' ^* c7 h9 x- v/ L3 t}
; }; J$ O% [3 k5 h/ N};; K$ n/ ]8 G8 V0 v. w
class CInventorySort
# k8 t* z- c; u( Y- g- A, x4 }{
+ M1 \6 {, t& I/ T' W0 Z, Rpublic:' f# [5 q6 _, V5 L
CInventorySort()
. u0 W" D# E4 s/ S+ [{6 ~. o5 t. N% W& V
m_dwPos = 0;3 B4 S% R1 i' @) \; s1 A
}
# ]- N9 @4 [: c2 Z~CInventorySort(){}
* d6 E. b S& Cprivate:5 }) D- S/ A W* e' i. a* u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ i6 Q+ i1 }$ g! S6 z6 Z6 U" eDWORD m_dwPos; }& l3 ~; ]. h9 p- j
public:
; \; c# Y c3 K6 j9 T5 bvoid Add(BYTE nIndex)
, [4 y2 P; l9 G& H% V{+ E. s) ]3 K# S7 g5 `" O" i
if (m_dwPos >= MAX_INVENTORY)3 @6 L, n! m: T" l+ ]' B/ D
{1 V+ V5 e6 c. v( Q2 i3 \; T
return;. |& f2 T, A' ^' T- _0 B0 R
}
5 p3 I% M' O( ~ h$ Y* E m_Item[m_dwPos].nIndex = nIndex;8 |( y% `# P8 Z- E4 E g4 R- p% f4 _
m_Item[m_dwPos].dwId = m_dwPos;9 C) Z+ z' p2 s5 ]
m_dwPos++;
) h9 c0 R1 m) [: {( ^0 E% O4 X}- G0 y! _* b+ t
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 x( V& I7 i$ g0 M
{
1 }: f* L1 @' {3 Y: k9 x for (int i=0;i<MAX_INVENTORY;i++)" _( S0 o1 e% b) V6 E
{
1 p8 V0 _( V! @ if (m_Item.dwId == dwId)
- Y; J9 F% f3 e0 C7 V/ x {4 C0 [; j* c' e7 n" G" B! Y6 X
return m_Item.nIndex;
6 H3 C+ Y* A0 b/ F }$ b, V# N5 m7 `; q# a
}
/ P$ E# ~2 ^# ^3 {. B return 255;
* _# r1 w5 ^! I) M. q}. j% g2 t& I3 p4 M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- _5 l3 a% G) q s: D1 ?& e9 o c
{
. \6 x* {/ K+ ], F1 X BYTE nTmp = 0;
" d. f5 ?1 l+ [% j. Z1 Y bool bDest = false,bSrc = false;
& D. L2 q# b' X+ i7 f for (int i=0;i<MAX_INVENTORY;i++)
X* P$ b6 n& v! t; y9 V# I, u4 k {
S1 I1 \* E- \# v2 \( H' i% l) k if (dwSrcId == m_Item.dwId)6 Z0 l |1 p" _& c; d& H! {
{
8 I0 z) g" W# L //id相等 则 改变对应的dest和src
8 n! ]7 W! j; ?# g$ h# H/ V nTmp = m_Item.nIndex;
4 D7 a1 k( P* F m_Item.nIndex = dest;
8 k$ `0 l* [' U/ @) C2 I- j) Z+ \! g- Y }
2 a3 y! G3 ~ I- z }& ?- g4 o3 \1 X7 G
//临时数据保存完毕,交换开始+ J: @6 j/ a6 ]) c
for (int i=0;i<MAX_INVENTORY;i++)
, m* ~! v. {" x7 S( ~1 n4 b {4 k8 i( U9 J8 e$ k! [
if (dest == m_Item.nIndex)( @0 M3 g& y3 V' }+ p
{" y; m: m# O9 X! K
//id相等 则 改变对应的dest和src
0 S5 ?' ~# X6 k+ l8 | m_Item.nIndex = nTmp;
* b7 d3 h, x) h/ Z+ b+ e+ A6 ?/ J }
; ~' v+ a7 R4 Z2 h }2 H' u. p$ j) W( ~) J& ?
}
' c- a7 M" ~0 k. |};% G$ o( C2 a( ~5 O$ o8 R
-------------------------------------------------------------------------
0 d5 Z( f& Z# `依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 S4 W( I$ ]) `' N ^
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. `( p1 n4 }. i8 G: ]' s紧靠其上添加:
1 x0 W9 E/ A5 }$ G" J$ `if( pWndBase == &m_wndMenu )' j* ^* @$ D3 j; u' [# f
{* g8 r/ D1 h( B: X1 k0 e$ z6 H
switch( nID )
' j) o, t+ y' E& A5 a# W5 t* v {
, V" F# \# n0 E4 d case 2:3 N$ K) u9 B5 y! G) O) P
{1 I0 k+ M+ L4 G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ W, Z* y0 A h. r0 E9 n2 z6 i if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. |# ]5 r6 ]1 H- @) p1 C {
4 S# g$ T+ s8 U. o, ? break;
5 g; i; M6 P8 e1 ?! n5 Q }* _, T6 Y7 U7 B- e- e1 B' m3 m* v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ m: O) F2 |" X1 i9 J" n: s. G, C {2 ]) p0 I N3 c# q" w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) L- J9 S) c2 q8 k
if( !pItemElem )
4 l+ p3 K; V: ?5 ~ continue;
9 p: X& H, U8 Y6 i: S8 u: @6 Y if(pItemElem->GetExtra() > 0)% w" e$ O3 P2 f9 [4 A; ?( ?8 p% O
continue;1 y- f. A* ~! G/ R1 X
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& x7 U+ x | f+ D continue;% m+ j- g/ y+ s2 R* T, g
if( g_pPlayer->IsUsing( pItemElem ) )
3 n* L0 }+ r, F7 ?& R$ j9 r) P continue;
8 b! Q- g% n3 U- X6 m, R7 C if( pItemElem->IsUndestructable() == TRUE )
& V0 `" t7 s6 ^' H* ?5 j& b; p {
3 p! Y' l& m5 |9 R' U g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) h7 Z _7 O; {" q) w# ^& h# y* k
continue;
2 C6 w# B0 h8 U4 D- k$ x: I8 b) I. s }
- P+ L( H% s; P) k" K! L% v; j g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 L9 `) K4 k3 w4 t# o4 x0 M }
, T& W6 O7 r9 W, h* a break;1 G* I0 e3 [4 y% c6 N
}
& S5 t1 [ v, P8 z case 1:
& _, `& z3 r$ [. N, ? {) o4 D' a! P( b
//整理背包
: l4 C/ k6 N4 X) E% v //////////////////////////////////////////////////////////////////////////
6 v$ _1 Y, o$ d9 F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* U5 |4 g/ g& e //////////////////////////////////////////////////////////////////////////% u8 l( J3 V5 N" r6 ]4 Z
//////////////////////////////////////////////////////////////////////////2 L- \1 A: _5 c$ G* L4 v8 U% \
CInventorySort* pInvSort = new CInventorySort;( [7 `: S; h& @
vector <sItem> vItem;! |5 X7 b9 S& z, g! h: Y8 Y
vItem.resize(MAX_INVENTORY);//初始化大小
. a3 Y" {9 P; x2 v6 p0 Y& n; j- U //////////////////////////////////////////////////////////////////////////+ G0 a D% b& \6 I- H8 K" y
//填充数据* @, d4 V' n6 L; |' z4 N/ m
for (int i=0;i<MAX_INVENTORY;i++) p9 Q! ^7 n, c! ~
{( Z/ R4 I S4 H$ W$ ?+ U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( [' ^8 E- }+ i$ d
if (!pItemElem)/ C6 ]% I- m% v3 `% H
{/ O3 G) v. Y% D" s" v: {; s
vItem.dwKind2 = 0xffffffff;: `0 ?# D. K' d
vItem.dwItemId = 0xffffffff;
" x3 a4 M, ]5 J+ Z vItem.nIndex = i;
( R* s$ H3 I* ?. G1 M/ I# S J }else {* R7 Z& n5 _$ z) J' d2 l u
ItemProp* pProp = pItemElem->GetProp();
5 j- U1 x+ m) J1 W2 F vItem.dwKind2 = pProp->dwItemKind2;
( K- f" p- a" h" z% X' _( ~ vItem.dwItemId = pItemElem->m_dwItemId;) q) \6 _2 ~" B) Y( |# A. W) G
vItem.nIndex = i;
, I; }* q! W F7 K4 k& ~9 P; `) l }, S5 q/ S1 h' Y1 p: X' ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 s+ T! ^2 ? l, w# R+ X' X0 t }* h8 P; ~" h" r: c7 y) |& b3 q2 t
//////////////////////////////////////////////////////////////////////////
9 n) R# `/ H4 d: `9 ]# r; Q sort(vItem.begin(),vItem.end());//排序
) ]# ] ~5 B* z //////////////////////////////////////////////////////////////////////////
/ I" ?5 _) k; ?. ?2 s, E* ` //交换
/ B+ c, W) I2 D$ U for (size_t i=0;i<vItem.size();i++)( i0 I+ Q; \2 V' w4 b
{
# @+ C8 m) U! d& \, d //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( {' _( I: h2 A& ^% p0 O0 j
pInvSort->Add(vItem.nIndex);1 V: g; Y5 g `8 n: W
}
$ I/ ?" p7 a0 v BYTE nDestPos = 0;1 M n3 n/ i% M( ^
for (int i=0;i<MAX_INVENTORY;i++)0 H. A4 {. r. w
{8 @" A2 K6 m* w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; n$ o$ Q. P2 U if (pItemElem)
1 k3 P8 J( C1 ~ {
5 z7 l- K; X$ `3 {2 B# L if (IsUsingItem(pItemElem))
/ D) r! C. w9 H9 I {
1 o6 j) { g/ s6 y //这个位置无法放
% e- D$ R6 W4 z# o* H2 G nDestPos++; R- W) _ S1 ^4 m
}
( v9 \& q. p" _7 ^* [! k }
. `1 h& K& z. M& \ BYTE nSrc = pInvSort->GetItemSrc(i);* _" Q( B/ K/ I$ N' e. `
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, S+ k/ K( Q/ Q! s
if (pItemElem): ~7 r/ ^5 L9 {" j) t0 S
{
0 e6 g A2 {2 D/ L if (IsUsingItem(pItemElem))
4 y* f. {( i6 ?- H, I: o {
8 [2 L0 [ _7 X' q( Z0 k% Q2 Q7 ^ //这个道具无法移动,跳过5 P3 Y* T7 c( V( s
continue;
' |( K( B( Y0 J4 V- Z" h }/ U! T9 s! n5 ]/ g% b7 W
}else{
0 E2 i7 |7 b. c1 H //空位置 不用动
. [ ?: v0 `" n/ @% p/ ` continue;; k: i# s9 x+ d
}
0 N0 J2 X* t$ N( b( v5 X //////////////////////////////////////////////////////////////////////////
2 E' n+ Y8 y* c6 X4 M //开始移动: o$ _7 l/ ^. g4 f0 s* C
if (nSrc == nDestPos)6 i4 z! A$ y" A, ^3 A/ ^ \. B
{- s8 [8 I7 T2 R2 u
//原地不动8 Z [) i- I$ y2 Z6 ^1 W
nDestPos++;9 H, m: y- m \) T* g" J& J: Z
continue;4 }- D2 M0 L! G/ J6 K+ S4 I
}
+ l9 D6 }( H M, [+ Z6 B- W pInvSort->MoveItem(i,nDestPos);
, s8 T5 u+ v/ M0 q g_DPlay.SendMoveItem(0,nSrc,nDestPos);( k0 {# J7 d1 }, F! ^0 o
Sleep(5);
6 O& U2 s) T, K. \ //Error("移动 - %d->%d",nSrc,nDestPos);
* o) _4 l, ]! ^, [, t( ? nDestPos++;
# B- F, j7 f1 o4 b& f: F }
" L# a* i: l% z0 S //取第一个元素的信息$ |# V: J8 z) U1 E: ~/ ~( V
/*6 n5 V& O3 T4 B3 H' n9 `. A
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); n" }+ W7 m. D5 ]4 h1 `) Z; r
{$ [3 i! O y& ]) g5 a
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* F% A* [7 t4 S2 ^2 [
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ B6 L9 y8 H0 C) k5 l }% G, [; m7 x0 G5 S& p7 W3 B; V, A
*/
5 _& N6 u3 R: i9 f) W; u& a/ z //////////////////////////////////////////////////////////////////////////2 C- Y4 l# q9 i
break;6 I. D; |: Y1 K* X& g& c
}
3 D- U- R) n7 i) Y% U9 D0 X+ g } % U6 N4 H' Z" K u v2 p1 z
}
3 F5 c) _1 d- D# `% X+ M# P+ Mm_wndMenu.SetVisible(FALSE);4 T8 a% n {8 I) n! S
0 x+ L3 v c3 `# W2 U/ C, j* V+ o
--------------------------------------------------------------------------------------------------------
$ d8 A2 D$ J+ E, K8 X# `% t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 R# e H8 P8 q{* \% T% ?7 v% O6 W! w1 H4 n4 T
BaseMouseCursor();% J' I' h" X$ Z2 w3 C/ O3 f
}5 L4 R6 W! f2 L) b
在其下添加:
1 {; u; s4 _* [4 ^' V) Jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 `5 ?6 j; \$ J$ g' {" D
{
1 l* k0 v0 J! S: a' e# B7 Om_wndMenu.DeleteAllMenu();! I( S6 _/ a* Z/ [
m_wndMenu.CreateMenu(this);. [9 _& d; u) ~8 K" Y# C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! d, M2 P. T, K3 i! A' y$ x' }% d d& B
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" a% K9 ?0 k& s+ T
{
5 J E \6 @! { @2 _ |! f //P以上级别才可以删除所有道具
" R! }& @+ m4 d; j$ H m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 P" |* C' [' S. V# B, J
}5 g6 z$ ~( E( S# t$ X' y- n
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" @% N2 u; J5 ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. y1 A% p9 Q9 m4 i6 l3 V0 ]
m_wndMenu.SetFocus();
1 D3 {# K" h4 `1 f% Z}# g" N& q4 L0 d0 w& W6 d% p
------------------------------------------------------------------------------------------------------------+ J! A5 O/ |! X' t* U
*************************
1 L7 K# b2 i5 F2 N; NWndField.h文件4 j( B) U7 o% p, a# V9 |
************************** a5 x. P2 S! g% s5 O! R
搜索:BOOL m_bReport;
9 N' L9 K& v9 d其后添加:
# e# P0 u' v" j% N& Z+ D- ~CWndMenu m_wndMenu;
- } o2 K! s! `) }# J& j: B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# h$ s' C$ ]2 [( v7 y- a其后添加:
' X/ I9 `$ ]- U* z9 W- xvirtual void OnRButtonUp(UINT nFlags, CPoint point);0 D4 v5 s B$ c
# M- n( e) i! |) }, {* D0 M7 l7 b, A* B1 K, P2 ^1 Y
|
|