|
源文件中_Interface文件夹下WndField.cpp文件" K9 G6 R! `: U) o/ S' {
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; x( g* f* g* r) l+ m6 q( A" n) W# h, B
struct sItem: h7 q, r9 L& i( w" T8 i: w
{
5 K( q0 v8 o' y$ P/ U8 lDWORD dwId;; n# P* ^7 C" L" B5 b% x# h) Y
DWORD dwKind2;, z. g' d7 ]* W+ `6 F6 g
DWORD dwItemId; X* p1 r. K+ H- A0 x3 [
BYTE nIndex;
9 E/ t8 q$ R1 j3 l2 n" _ F! BsItem(){
% P5 y4 h# E/ G dwId = dwKind2 = dwItemId = nIndex = 0;
+ q- s: a. [2 Z: A& y4 p}
# {* g3 Y8 E% I: B$ Abool operator < (const sItem p2)
F: h7 J* C! _0 l5 }7 ?" u `3 w{* q! }; M( k1 i
if (dwKind2 == p2.dwKind2)
& b j6 ?2 t$ B' `; i Z {
5 I) @& @. r8 w; L, A* ] return dwItemId < p2.dwItemId;
& ~8 l' I5 G' `; P: t4 Y }else{
[! e5 C8 f w, c. [! @8 i5 x return dwKind2 < p2.dwKind2;
, C; \* e) G1 ?( L# p* [ }
% K7 _2 J* m) h9 ]6 [/ i& l}
W- N; j* V% \2 Z};
. J" O" j; k8 P0 d* U. _, q7 i$ Dclass CInventorySort; q1 ^0 D* a+ E- Q$ |% W8 ]) J# x. _
{# i+ z( n4 f5 ?/ E* |1 g
public:
( O* G( U( T0 T% X. pCInventorySort(). e' Q0 X$ F; U: u d+ H
{
! E2 T7 b/ x4 k# J+ p. w m_dwPos = 0;
: z: O( P; L& o( Z" J) q7 S}
6 x! T7 T B: Y( B m1 w~CInventorySort(){}
- ?( v5 X2 i4 P! e3 e: P- U: tprivate:
9 U/ T; u$ }9 n- esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 B. O4 x5 R& k; v
DWORD m_dwPos;
5 `6 E$ o7 @" w8 p7 Qpublic:. w9 w1 a1 Z4 p0 U4 e; ~1 y- K# [ _- D
void Add(BYTE nIndex)
7 e m7 }' e6 I9 M{
" `) i' b- U' L" U: E( W1 @+ M, w$ P if (m_dwPos >= MAX_INVENTORY)
2 G, {% q! W3 x, u. V4 D! R' Z {
4 `% _, H/ y" T% V return;
. c y! @4 E, @' x9 \8 X: g } a. V( e% x, z" U
m_Item[m_dwPos].nIndex = nIndex;
( T3 t& H$ u8 f; B9 C) O' P: O. g m_Item[m_dwPos].dwId = m_dwPos;2 a y" t$ D2 B7 k3 H. M; a
m_dwPos++;" F% T8 {9 ^ D# k! E+ k
}
) J+ U6 I4 x& M/ J& K/ o1 b; UBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& Y$ a% M/ r* q" z8 \0 W( G* h{
/ L( g4 k( U3 \! @6 { for (int i=0;i<MAX_INVENTORY;i++)1 B+ y9 R9 d' M, O1 l( C4 s( R( ]
{
9 S# h' N C) O4 m! M if (m_Item.dwId == dwId)
" I- k8 W; | V {2 v7 N6 T$ V! ?- F. D C
return m_Item.nIndex;
: i' M( Y# j5 Z; I$ d0 k' u% c }
) i3 ?. D3 p! B. w( p" X; o }2 j+ Q3 t) i' D; `* Y, ^" F
return 255;3 q- N) l( T3 z" l
}
* b& i, r4 F0 x: ~8 X, l9 nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 M1 }) @& B/ i% D{5 S& u6 u4 m3 `3 t4 v B
BYTE nTmp = 0;& e S. `" M$ [# f5 x
bool bDest = false,bSrc = false;
2 h# q7 ?+ F& s, L0 d( {* f7 Y for (int i=0;i<MAX_INVENTORY;i++)9 Y& I: ?! y2 K8 z" N" L2 S
{
: B& P: b _, u if (dwSrcId == m_Item.dwId); L( v |. @1 Q5 x" b9 ]* h0 O. C
{$ y \0 U& [6 T! J& A
//id相等 则 改变对应的dest和src. ^* |2 U: U1 h b* h/ X
nTmp = m_Item.nIndex;
( S% _7 y! g2 B& _ m_Item.nIndex = dest;
- X! w" `, f9 A2 { k }1 F9 s* w7 |, T3 H; M/ \: v8 J
}
( s5 @. X" [) e3 K2 @0 H( B7 P //临时数据保存完毕,交换开始# l: _- \, J; l; l$ ?8 |% t
for (int i=0;i<MAX_INVENTORY;i++)
9 n8 {( ?( [% o' b# ^ {
: h& k9 L& g7 c- Z if (dest == m_Item.nIndex)
" x5 _& o2 S1 F# w {
5 ?. }: Z, T: e- @ J //id相等 则 改变对应的dest和src
0 R' d) I4 p# p9 Y" a1 Q8 m* l m_Item.nIndex = nTmp;, ^4 F) A/ t; @# c. n) s
}
) x2 u* ]+ w* l6 [: N5 J }
" R! i# B0 I9 O& ^) N}. [& t: A- ]+ \' S& r1 r1 r
};4 r0 }+ v) B% \ D* r% U
-------------------------------------------------------------------------2 ]$ \: b0 p5 Y0 N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& W1 H" E# f# D, g0 ~ s
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. e2 h6 S: Z E* S紧靠其上添加:
: z5 P5 p' z/ @# v& A+ fif( pWndBase == &m_wndMenu )
+ ?+ m2 X% J% ~+ q* ~: F{
; M# X+ `! R) i, g$ g0 _ switch( nID )
/ z/ _8 M% \7 F4 [ c {# ] h; J0 e7 D5 v
case 2:
* J1 Q! S4 |& ]' \* A {
) |5 z4 f0 C' b7 R! U8 s //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& X6 o# p3 v( d+ Z: [
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% b& R6 d& d7 j {
# d5 W& x4 b3 p1 a% z break;
% ~! G+ `/ ~' J) Y }
5 A1 A8 O8 A+ m7 I/ [$ a! K$ z- z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* b6 d* E+ t+ Y$ I% j' F, W9 S, y: o( M1 R {; C% X0 @9 j) {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 x* x/ U/ r1 \6 c
if( !pItemElem ); K8 }& _$ Y9 m( f
continue;5 l1 [2 S0 s7 D- ^- O! x8 q
if(pItemElem->GetExtra() > 0). I# }$ w/ B& e, P( v& f
continue;
) [; G; m) W0 @$ w, v' Y% m, R if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' C, m l$ o9 p5 W9 o continue;
" A& t$ ^% a1 E7 M if( g_pPlayer->IsUsing( pItemElem ) )9 @: T# a' E9 B9 S2 W! p6 }7 T
continue;0 x. a* ]8 M, T0 Y
if( pItemElem->IsUndestructable() == TRUE )% o' A* U! S& ?2 \) @. ?7 {
{7 f7 x. c2 |/ `
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% c6 _9 M: U, x continue; c8 M6 T- q- ?0 \' d9 c4 ?
}; E" v$ i1 n9 x/ y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( R: r: P( Q6 n/ P( q }
4 ]+ j1 G4 i# L. `# v) v8 E break;/ c# L8 v3 w0 s& u, A+ f
}
$ s5 @' \' ^9 i, L0 e case 1:) S, n* u& z; S# `% u* x0 Y
{0 a9 x. D9 q; B$ ~, G4 B
//整理背包
- t ~& ?$ j# B# P& z. U- u //////////////////////////////////////////////////////////////////////////% @$ j; v1 G; G! t* p5 t m
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; P1 H1 H% r, C6 {7 e; ?3 H //////////////////////////////////////////////////////////////////////////5 @3 m( C6 |2 b; T
//////////////////////////////////////////////////////////////////////////
- ^# M0 P+ A* f, Y CInventorySort* pInvSort = new CInventorySort;8 n, \! h/ Z7 E* S
vector <sItem> vItem;' s4 v% K3 S% x, ~( S$ ^$ {! F
vItem.resize(MAX_INVENTORY);//初始化大小- _/ X8 X$ P; n! z; w9 ~
//////////////////////////////////////////////////////////////////////////. e- W6 S1 |. b! W/ Z. k/ l; F
//填充数据
( @# `( N; [2 S& `" r2 r for (int i=0;i<MAX_INVENTORY;i++)7 N9 P* u% M0 k2 a) T
{
" e. @5 M$ E4 Z" b4 b( n2 f- h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! G" M6 ]* J& P8 Q! K4 P if (!pItemElem)1 W/ D5 a& K3 y3 C
{, m! D! B0 P5 g/ [! {8 H" b
vItem.dwKind2 = 0xffffffff;/ E# k/ [! Z# x3 R- L
vItem.dwItemId = 0xffffffff;+ x8 P, m( M: y, o/ X$ Q7 q
vItem.nIndex = i;8 B7 J* [0 }6 P) t) B' x
}else {
. Q7 h2 u2 W* Q ItemProp* pProp = pItemElem->GetProp();( U' U" v4 J) ~4 r& \
vItem.dwKind2 = pProp->dwItemKind2;) {$ C% ^8 `3 ~, h& k9 u7 J
vItem.dwItemId = pItemElem->m_dwItemId;
* L6 E' _% _3 @1 x1 z q vItem.nIndex = i;
2 S) K; H, L/ |3 B! t }
6 R2 f$ M7 y' h8 l0 [ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 A% h' f& A5 M0 p& h$ J% i+ @7 J
}( d3 e9 _( i$ x) C8 F6 f
//////////////////////////////////////////////////////////////////////////
2 s% F6 y2 c) a9 N8 v' r sort(vItem.begin(),vItem.end());//排序
: @/ n0 d) e4 [$ S9 [/ A' t; [ //////////////////////////////////////////////////////////////////////////: S9 r; I& K3 [ i: Q
//交换
! q( ~. n/ q( a+ D( Q for (size_t i=0;i<vItem.size();i++)' D$ K8 E, f6 r# t/ ?
{4 V8 s# C6 `9 @6 H
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' ] ^+ `3 H$ `& J+ I1 E9 Q2 e
pInvSort->Add(vItem.nIndex);
3 }& ^& y+ d# R7 a) m V: a. Z }: x' W$ y( f4 \6 b* K
BYTE nDestPos = 0;4 M/ R. X0 n) [2 W& E
for (int i=0;i<MAX_INVENTORY;i++)6 }7 h. D; `, C7 ~, y
{' i) J* E. L; A; O2 \; u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' F7 ?: Z, u, W' t( M
if (pItemElem)
. Z: a- ~& D; c$ r# c {
: l. x2 V, y) i* Y# e0 w if (IsUsingItem(pItemElem))
6 I7 O) u6 b. \; V9 O {4 D& M6 l. d( R, P# ^! w( J. d8 `2 [; V% I
//这个位置无法放+ l3 r5 ~0 E# m! k& y2 ^5 }; t. p
nDestPos++;0 E, k# U5 B0 b
}7 s* ?6 S t5 ~' B, Z
}! p( ^3 \9 _3 _* v8 |! w2 _
BYTE nSrc = pInvSort->GetItemSrc(i);5 u# T# ?1 a: J3 { q T3 X
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* A l! w6 i5 X$ N9 n if (pItemElem)
$ r% \' S3 k; s( X6 [ {
9 R" Y6 M6 e5 z1 u0 e" f, v, K2 D! F if (IsUsingItem(pItemElem))
7 y5 v) @2 J& K+ V- R- \" a, r' L9 V {' Y) G, F- d" B6 J' D0 P
//这个道具无法移动,跳过8 |+ ?4 R3 z6 T9 D. N
continue;, [% X# e+ o T( N' ^8 t3 |% |- U
}3 h% c) W8 K/ f V3 m) |- k. U
}else{" u- V0 j6 @# t+ w0 o, _
//空位置 不用动
7 _$ V1 w) f3 s j5 }% K continue;. x/ p" v! Y: I; Q( x
}
, o, o" c+ ?$ D/ v1 P" A) U //////////////////////////////////////////////////////////////////////////
# f& o. G: W+ j/ ~2 g3 z //开始移动9 S' Y0 _4 m6 `# O: P
if (nSrc == nDestPos)# _" c+ g0 `, U* v7 }+ ]' h
{
7 P7 H8 c) |7 V1 F% I& k" K //原地不动
: q ^, H; C" F5 G! w1 g nDestPos++;
1 y2 u1 }& a6 F, }+ t% p9 H continue;! I5 r- h! J' f0 o
}
! o, {. p+ s& i A pInvSort->MoveItem(i,nDestPos);
+ G$ I* B! W! b# H6 B+ e A; G g_DPlay.SendMoveItem(0,nSrc,nDestPos);
J# q m. c5 h6 ~/ m* } Sleep(5);
' I8 Z2 u; Z( l //Error("移动 - %d->%d",nSrc,nDestPos);$ r( n9 d9 H* I/ g; i+ x/ G
nDestPos++;. d& P8 r5 F0 y
}
6 `% G, R+ _: W) A3 h; C% y //取第一个元素的信息8 t' X$ H1 t) d
/*" T F" Q7 I& b: U( L# d! j' Y8 j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), r: z& ]: E% i/ ]
{
/ w; J" @' T3 F4 T9 o1 W Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 p. N/ @( S* s" B e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. \0 A) B& z, e7 y0 I
}
; A# f3 c5 ?5 P6 i */
7 Z4 a, t% L6 e( C7 d/ e! { //////////////////////////////////////////////////////////////////////////4 ^+ W3 ]: R6 h& W! A9 M# t
break;9 W: C' N$ Z: V/ z0 j" d: i4 `, V: i
}8 e4 {9 _$ y- l O7 u- V Y
} ( s% u/ C8 C1 ?! t8 u# C' q( Q
}0 T7 O$ G( n6 t5 O
m_wndMenu.SetVisible(FALSE);) Q ]: k* \ O( U& [* U4 @0 D
9 ^# Z" d' D6 _--------------------------------------------------------------------------------------------------------$ z# a0 m' R! {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 e# S# Q& n; I5 c# Y+ n5 A, c{+ f$ G; z. r5 S# F7 j
BaseMouseCursor();
' X' m+ h. A2 |* H: q$ l/ r @) x. T}
% y7 z! J) N3 N+ x在其下添加:
" g2 Q( n# ^6 s% R* M* I4 lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 }3 ^. q! |; p+ d! {. H, D# e{
" L7 l) J2 D. w" i( W' Z3 P7 em_wndMenu.DeleteAllMenu();2 s1 ?" }1 L5 M* ^" E) u* h. K
m_wndMenu.CreateMenu(this);
9 L H" j3 J) p; T) H0 {' @& Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 G+ n C% X2 j6 T5 ^6 S" v
8 }1 V' s* K" v8 B2 S. k# ~* Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 P/ b% H0 {. _' R, K{" d/ {4 g. M! V/ w7 e* \: q _' b
//P以上级别才可以删除所有道具
/ h* W2 ], ?3 M, H9 p! M m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 @# h4 L9 u$ s3 H1 H
}
( @) F: b. [; Tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ a* [6 @$ v* G; em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) n+ Q" n" K" f* K
m_wndMenu.SetFocus();
N7 R: N9 @$ \+ ~$ T. k y: h5 ~}1 y0 w) ]) j, R, w" r3 j7 W
------------------------------------------------------------------------------------------------------------
! {8 C% }7 o- O: d8 Z& e# P*************************
6 u/ |; T. G, U; J/ {, k hWndField.h文件& {7 A1 n% Q( B$ ?+ b. R* F
*************************8 p" \; i7 \5 x6 s$ j9 f9 Z
搜索:BOOL m_bReport;2 [) s$ u! g0 \3 c% d7 F
其后添加:8 S. |2 p7 H% q9 J" b" Z5 r8 l7 |' F
CWndMenu m_wndMenu;7 i. `7 ~7 j t9 m# X* ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 Y7 z0 d9 E) a) p( x: s. o h$ i其后添加:' ?: y& i3 X7 Z! J0 B9 n
virtual void OnRButtonUp(UINT nFlags, CPoint point);) F# n. t1 P0 q& q+ Y$ ?: ^
; j! |5 i7 b5 Q" S" I
: F; O. G# b' G/ _9 F |
|