|
源文件中_Interface文件夹下WndField.cpp文件
: D8 D F5 D" h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' z. l5 `* \* ^( M* e
! ?5 o% Y# |7 n% x4 K
struct sItem
) t( D/ W( U* m4 Q6 U( a! Y{ A/ M" i7 C! z8 c6 I
DWORD dwId;/ h2 d# `& _6 ?$ W" F$ A, d
DWORD dwKind2;: }, q) l; v# D: A9 q
DWORD dwItemId;
% A& u6 ]( G1 N; n0 T" VBYTE nIndex;( z0 R3 R' k* h: f$ ]9 h) s
sItem(){* ~5 Z) A! f' y" U( ~9 k- _5 i
dwId = dwKind2 = dwItemId = nIndex = 0;
5 D8 S& M1 s# }}
+ J- b9 Y1 W4 e* }, G, s3 Abool operator < (const sItem p2)
; R N# Z+ \/ @. p{2 A1 h# e& E" s; g: O
if (dwKind2 == p2.dwKind2)1 `) w& Y$ U) Y5 {7 A2 w; B; }4 c: r
{
, s# D6 j9 r" n& H% T- T$ v return dwItemId < p2.dwItemId;
% }1 h4 w0 _ s l L" o }else{
. `$ o: y. i/ p7 H& O return dwKind2 < p2.dwKind2;! T8 V2 b8 l8 Z% P
}
9 @6 o$ A; q* ~+ T/ Y}+ `% g+ @+ {& _$ H) J
};
( I+ R5 G7 O2 c' n: D- O6 Fclass CInventorySort7 W9 B, L+ h# J- A' ]: h0 k1 I
{
" K$ |6 u1 N- t& hpublic:1 F) C4 K5 ^0 p
CInventorySort()
: M: Z9 T' Y% v{
2 ]/ h s P$ ~6 J: O- { C( e m_dwPos = 0;
) k9 p( M5 u% D/ L a}
& \, |4 o' w3 m~CInventorySort(){}; A. @) V l A% A( m: }; l
private:+ I& m! p! h$ U3 I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, }, ?3 D" ^: _( v$ y( X, Q
DWORD m_dwPos;) h, o6 L4 y' C0 X4 p
public:3 z$ h, U$ x: P2 T. j6 r. L
void Add(BYTE nIndex)( ?. [, F9 T* `8 y4 L3 `) `2 `
{4 K3 d5 G+ M' H- Y: ^
if (m_dwPos >= MAX_INVENTORY)
+ g" q8 q) S8 p) Y# M8 r {. Z- n4 L! q! G7 g
return;
5 m7 \. L) e8 h9 o }* A1 f+ G0 X- p) g O9 r
m_Item[m_dwPos].nIndex = nIndex;
4 f# z7 W7 e0 F m_Item[m_dwPos].dwId = m_dwPos;3 [% X2 @" c5 L s* e) ?+ M% Q
m_dwPos++;
: O3 f8 u" {+ o# _ w}) x/ r6 G7 F/ Y* [) \8 ]& v0 d6 C
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 {9 o. q; ?& Y/ @! R# p
{
3 I& N: L& z# Y. B. }; ~ for (int i=0;i<MAX_INVENTORY;i++)
, q5 q, n; g1 b {" u6 S0 R+ V8 w, a
if (m_Item.dwId == dwId), n1 f( g6 ^4 r8 g4 n
{
7 b; x$ x% `5 }2 H7 h return m_Item.nIndex;
; k( ]5 B8 ^1 M }
1 u4 W+ M" Z+ x0 d2 {4 p8 K } u: N& t/ s. s" K
return 255;5 U! r/ N5 y6 h8 P
}
5 t$ Z! K; o% M% ~" x9 d4 rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 T0 J6 ^" @; q; K& l) h{
: t2 \% l) I" R4 i. w BYTE nTmp = 0;! J5 i. M4 u7 i2 x1 g0 _
bool bDest = false,bSrc = false;) u5 X0 X: V: j1 {2 V1 Z. d" f
for (int i=0;i<MAX_INVENTORY;i++)
" ~( k4 p+ K* F {
0 O4 k; u; F, m1 R) X if (dwSrcId == m_Item.dwId)0 t" H$ X& P# ]" N5 G2 d- N
{! t+ h1 j/ k4 r8 u- R
//id相等 则 改变对应的dest和src: y( y* m( [9 U7 l2 f; g
nTmp = m_Item.nIndex;+ C1 s2 j+ s( P3 M3 Z, R i
m_Item.nIndex = dest;; g: O0 G0 I4 e( V
}
3 v4 e4 a6 I6 A/ G; u }) u. a1 c9 c' }) M. u$ Y" c
//临时数据保存完毕,交换开始0 B Z, s) g9 x7 ^0 B1 R. t7 ?+ @
for (int i=0;i<MAX_INVENTORY;i++)' |" \" W' P( j6 T
{2 w$ R- K O( v
if (dest == m_Item.nIndex)
9 P7 i& e" _$ m Y+ W4 L8 |3 B {1 Z/ m( d8 ?$ h0 m, ~4 C
//id相等 则 改变对应的dest和src
5 o% A; y, j! H# d& `% X m_Item.nIndex = nTmp;
' F0 r6 p- }( u3 v! W }
* J+ ]0 b% t: V f" @' }- h. n }- D4 T, X0 F- D0 ]8 x+ `0 ]
}
3 E/ t+ r% Y$ |2 A. D};
* d& ^! B" ^- T- v( p" J' ]-------------------------------------------------------------------------# |" `0 F1 P7 V( a/ J3 M* t
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* c2 X8 ?; I5 C' P' U搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; Y& I" P* ^2 W# l7 p1 N紧靠其上添加:
( }, M* r0 V8 G7 g( A2 l( Kif( pWndBase == &m_wndMenu )
% A& F0 D2 v R4 ]% P# }3 Q+ f7 t{3 a @, C- e$ `$ I q3 s
switch( nID )
9 C0 o8 C- C9 D$ H( ` {
" g f( k( ~1 M4 r- `5 y case 2:
; G. \7 V; m. e" K& b; v7 |, G {) X) S1 g, Y4 e5 B: U; H8 f, J
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 e: F x0 _6 k W$ k8 t, u' X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 G$ w% s' }/ n1 @& I" }" D( U
{
- r/ d5 P$ w" o4 s; ~ break;
4 f, p7 o; F! i5 U! f3 D& u }2 t" c0 V( d0 E' c1 j) J$ @9 h
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, Z$ p7 z, k( [/ m2 R6 Z7 x {
) f4 `' {" v4 n" d% K) m/ s1 W3 j5 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, a* T( l6 D$ N- G9 T# p if( !pItemElem )( I& d' x, }2 T3 M B
continue;
2 ]! z" |$ c& ~0 G6 z! Y+ D4 x9 B if(pItemElem->GetExtra() > 0)
+ }% z8 T3 q8 d8 i: Z: k; L, ]4 M continue;
8 h f' w5 T$ w2 p' _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , @ `, A7 {( Q
continue;3 w, ] u* N6 v5 B4 k4 n- }, {
if( g_pPlayer->IsUsing( pItemElem ) )) r* F$ m& l7 x; ~) v
continue;$ W- ]9 P8 L7 t J( s
if( pItemElem->IsUndestructable() == TRUE )
' _4 _9 k5 z8 [ {' p% m+ R/ Q/ ?* G4 M
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# @% w% q6 e6 D* O' G& N- }$ a" `
continue;" f. [& h! }7 I. x* n
}
8 x8 h. X% h/ r/ _+ N, f9 B# E g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 `& y& N) s1 R+ M+ I. O
}7 U; k4 x9 @7 p
break; g0 k5 Z9 A- b* D9 T+ o6 y b
}
/ T# ]" X! I5 P case 1:
; Z0 w/ |2 o8 k* j& x. h {
+ r2 v+ s. r4 o //整理背包
0 z9 P6 m) u. M+ T/ E //////////////////////////////////////////////////////////////////////////
1 [( n: a. E0 V/ n3 C1 G$ f, y0 L //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! t A# P" _. g8 j t. Q P //////////////////////////////////////////////////////////////////////////$ u6 W' ~% F& ~6 Y9 d3 \1 h2 o% x
//////////////////////////////////////////////////////////////////////////) B4 Y4 J; |/ u# g3 V8 s
CInventorySort* pInvSort = new CInventorySort;
3 h- ~! o( L8 }+ f; x' q. o vector <sItem> vItem;
6 k" q5 O1 P3 v+ V/ p vItem.resize(MAX_INVENTORY);//初始化大小
* B5 j9 ~3 m8 i //////////////////////////////////////////////////////////////////////////
; ?' F6 R$ B" Z& u& i. z4 K5 [# u8 J //填充数据
( R0 x2 v% A: q* T+ u2 p for (int i=0;i<MAX_INVENTORY;i++)
0 H3 `" S# D" A {: \- u. C" X. s8 Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 N, r+ H& @6 u! v" @: g# I5 Q( J if (!pItemElem)- P# Z% I; O# x5 X$ u9 L$ X! |
{
; O% ?5 m( l5 S- a5 \! v vItem.dwKind2 = 0xffffffff;* ]3 D( p6 [: i
vItem.dwItemId = 0xffffffff;' n7 q, T0 F2 m( ^" O
vItem.nIndex = i;
8 l+ D" F+ [$ r/ j/ Z }else {0 z+ U. I2 C" A! y" G, l1 M
ItemProp* pProp = pItemElem->GetProp();
" `( s4 O, x3 N1 O" x vItem.dwKind2 = pProp->dwItemKind2;
' N- w/ v) |! J. L" g3 X" \, Z# a& m vItem.dwItemId = pItemElem->m_dwItemId;& q. v- P: K. _, ` ~$ G6 u
vItem.nIndex = i;( _- l4 U* g/ m, c
}
& @5 R: l2 y9 k- Z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ @4 {+ Q+ z+ \/ w3 }# W ?
}
) x" G2 E& E9 p //////////////////////////////////////////////////////////////////////////% M$ U4 K9 f8 E$ k: M- U- H
sort(vItem.begin(),vItem.end());//排序
8 b( R E- H5 B //////////////////////////////////////////////////////////////////////////3 n7 a3 K P3 e* p- ?! \
//交换! ^6 N+ s( M2 h. q
for (size_t i=0;i<vItem.size();i++)1 s' m, k5 x8 o% i. y! u7 C
{
, M$ A- Q& L: L! } //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' L1 _& {# ^: n: p8 H# C
pInvSort->Add(vItem.nIndex);! c5 k5 L0 v) C- _" V+ e; }3 w
}8 o4 \# R3 I1 \1 L2 y' u
BYTE nDestPos = 0;- U7 t: l& L3 v# N7 P, c
for (int i=0;i<MAX_INVENTORY;i++)" N0 c) H2 c z) D
{' A1 O7 B: R3 o! R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( g9 Y, D: o* k5 x; ^7 c) d
if (pItemElem)+ r- O# O" j) \, Z" v3 u/ K
{
9 i% S; n6 k- Y3 @, C/ g% S% f5 _ if (IsUsingItem(pItemElem))4 H1 g& M3 [% ]5 ^5 v& m' c
{
5 _7 G: y/ w6 k8 V, o& P; s //这个位置无法放
+ Z" E1 V5 B& I3 I$ g# O nDestPos++;
2 [2 l5 j: B, \4 F4 ] }9 B0 }% D1 r% Z4 Q n, h
}0 ^+ c. Z9 Z# d0 ^
BYTE nSrc = pInvSort->GetItemSrc(i);
0 i' o8 M f5 a! b" W4 O4 t pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 ^0 o! j& g Y) J* c n/ u) a
if (pItemElem)4 X; F* ?! L& M* v9 d) S
{+ p# J& c# N. ?; { P: R9 e
if (IsUsingItem(pItemElem))
# O' o0 H2 g% [, h: ^. L {: T. S U' \9 s% Y- P! v' C! t
//这个道具无法移动,跳过. p+ l1 h; L6 b5 v) S. j9 `( M
continue;" o( X/ w( {+ C. A6 a
}
( z- k6 J4 [/ W9 h }else{
# W8 l9 Z* W% G+ T //空位置 不用动3 `7 ?9 N1 e( M( r7 s, d2 h
continue;
, V% ?2 @9 F$ m& M/ y' H7 b }
+ J4 F2 W% k/ Q9 {* l( g //////////////////////////////////////////////////////////////////////////
# l0 S8 J6 O n2 L( Q //开始移动: [ f$ u' V$ }. d
if (nSrc == nDestPos)
1 q' s' d0 i6 x2 \ {3 E) F ]* C. ]+ m
//原地不动
- ?8 a& Z/ d7 K% t3 h nDestPos++;
( ]( R! d( E/ h continue;
, U5 Q1 k3 Y1 E# ~2 W0 ^ }) j" S5 E4 W8 S: z
pInvSort->MoveItem(i,nDestPos);' ~; Y7 j) T7 l" l/ a: c2 P
g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ p; l3 q0 x( J- A5 P" {& S: x2 Y
Sleep(5);: [, j1 G5 X7 |3 u; t9 B* A
//Error("移动 - %d->%d",nSrc,nDestPos);
+ X+ i1 b1 o. J4 E- o nDestPos++;
/ e! x7 k$ H2 h$ K3 W m }3 k& q3 X' h" b- V
//取第一个元素的信息+ r0 J. C8 `5 E* M9 d$ M' Y
/*
6 F" h' r T, z8 C% [ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), W& h6 w6 d6 ^" A4 ?
{
" u- V8 E) P2 u& p4 E' j- y# P Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- g' [- ]2 l7 I. P- n9 t0 c
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! z: \0 A$ b) n3 \
}
; b% Z6 G- ?! H9 }7 Z# b* r; m */! w; W0 f) V; r
//////////////////////////////////////////////////////////////////////////$ u$ i* L- _: C( A9 d
break;
/ |$ l! R3 p# E+ G+ C' g }* a- G0 {# q }$ v% e# W+ Z& J( a
}
, Q* L+ s+ ]! ^* q# ^& O8 B}
" X# w7 S' a' q0 P3 dm_wndMenu.SetVisible(FALSE);
6 M0 a$ x, M( I1 i$ } [9 ~: _0 _9 ^5 M! G
--------------------------------------------------------------------------------------------------------( e7 { l# h x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 T1 @9 g. z5 y
{
& F. p8 n1 Y- ~$ zBaseMouseCursor();
! f$ A9 W; P/ c8 k8 h" f/ g1 Q/ y7 O}, R4 g6 d7 w- L# y& j; o. C
在其下添加:* P$ d' H. y" u% f# ^7 Z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' U3 G) D- J# o' W. G{# U: ^! |" b- Y" O% g" t
m_wndMenu.DeleteAllMenu();* R5 w/ o: h& h& k0 |
m_wndMenu.CreateMenu(this);4 W- \" F) d0 Q: ~* F0 l
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; U2 |# m( m5 ^) W; b7 w9 v
& V; v$ s5 \% r4 nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 s% j& O2 W. L$ q: C{7 T. U; m/ m) I9 T. Q/ i8 `$ h
//P以上级别才可以删除所有道具
6 G' J+ m2 {$ w# F* C m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ _. s# \+ }) b2 s) V}
+ w A' [1 n/ w; a7 o& Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 v# ` n" X) C7 V9 E- im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' P* h# c$ a. ^- c' L" g+ w9 |; O6 W; P) zm_wndMenu.SetFocus();2 ?' o$ i7 L3 [" `" f9 V
}
' B8 O/ j0 J6 M" f$ b$ n5 B------------------------------------------------------------------------------------------------------------9 O0 {) g" f& u5 a; r( R& p3 u5 }
*************************
9 Q& q8 F8 q' F) xWndField.h文件' v" e3 [% I9 X. F# N% x5 M
*************************7 ?. j9 Y$ G1 d( b( Z
搜索:BOOL m_bReport;
! Y: ?% f8 @( @! a# _" \其后添加:6 w. n7 \1 n5 L2 @2 [
CWndMenu m_wndMenu;
+ j0 G1 E' I4 c6 E# y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, }3 I% r- i7 `; V7 p: R其后添加:
9 B. U4 p. [0 {# n ]virtual void OnRButtonUp(UINT nFlags, CPoint point);5 t' b! z' E" z/ ?5 f6 @3 w5 E
7 ]0 ~- c6 _* v: m% d# I
3 q5 l- ]3 k1 y8 X& ]
|
|