|
|
源文件中_Interface文件夹下WndField.cpp文件
0 w _8 X2 j+ Y# {搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ [. _; }+ Q" ~. g( o) G1 C: t; w( G7 P
struct sItem( s4 o5 v& A" W" t2 d3 U! b" D; D y
{
+ i) T* c, Y7 ?' C( fDWORD dwId;8 I# b2 F1 z- `1 u/ Y; m' H
DWORD dwKind2;
7 _+ k% o3 {6 W) R$ |DWORD dwItemId;
6 R1 a! T2 Z7 @# \BYTE nIndex;
" H! l" S& t/ h* h% qsItem(){
/ J$ @/ S; `6 f1 N7 I* ? dwId = dwKind2 = dwItemId = nIndex = 0;
. }4 y# B" Y) @& A7 O4 h}
' L& k3 q2 {% E2 z* H5 w0 {4 J Ebool operator < (const sItem p2)/ ~4 W, }' L. E; I# T2 r
{6 z% V# P6 Q4 g( c( H
if (dwKind2 == p2.dwKind2), k! G: l ?% d5 U" f6 b' q3 m* g
{ f# X8 I. K5 o' k) i' e* i9 _( W) @
return dwItemId < p2.dwItemId;0 Y6 ?0 X: q p( l G# f8 R; D
}else{" Y3 I- S* O! _, K* [8 g; J
return dwKind2 < p2.dwKind2;, N: F H" E8 u9 [; \
}
( `& ~8 `* {6 h6 s" D E) i}
. K$ ]" `* M" l5 G, C};! G) v0 x+ m, f4 I6 Y# ]
class CInventorySort
$ h" w+ A+ A& t{9 V7 z9 ?7 l) l% D C8 u3 S3 y
public:0 r9 x9 ]* m- q: t j& m# \
CInventorySort()) w, Q! | M% M- u
{
7 S: E! P0 b) g2 P, v m_dwPos = 0;
% J) s7 f6 Y! [8 `* y}2 l- ^' M/ v) x# e6 j, q2 z& F% @$ \( R
~CInventorySort(){}$ N/ U- W+ _+ a7 f" K
private:
) n4 I* F# c) N. l; m9 b* ]+ TsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) w. Z6 k& o# {. x0 z% m
DWORD m_dwPos;
3 V. y+ r; i8 p4 f. ipublic:
/ D5 V& \ j5 C! ]# \void Add(BYTE nIndex) w& j$ v1 U0 _% o8 T r
{8 F$ b4 x ]0 R' v5 k# k0 x
if (m_dwPos >= MAX_INVENTORY)' ~# p: D( `) Q4 z
{
( T! F* j: ~2 V/ i3 k; p return;# Y6 V6 b1 T4 [! H4 S" T& {7 F5 V
}
) x- m8 p' Z% K% \; A C& J b m_Item[m_dwPos].nIndex = nIndex;2 N5 M4 W( G1 G/ {7 b9 M- Q0 g' z
m_Item[m_dwPos].dwId = m_dwPos;* K6 H) A9 Z, T9 G8 o* p
m_dwPos++;
7 g$ O( J7 _, ?. d}: ^; Q: c& @6 F! R5 X
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; @/ V! H5 h* T8 r{
! v% C- ]) Y; ?4 g$ x% p for (int i=0;i<MAX_INVENTORY;i++)
% j; \& L3 g1 t& c {+ E/ J0 _, S9 l% V! ]& ?
if (m_Item.dwId == dwId)0 x3 J4 z% [! ~# Q1 A- C
{# A% Z4 R& L" ~2 ~, ~
return m_Item.nIndex;% d0 x2 r3 n3 ^$ ]' b
}0 X7 H9 s D. S4 `. |
}
- P E: |( j/ e& R3 V1 F& r return 255;6 G: t5 R, G% X; ^6 R
}
% I8 v( @9 `4 L$ ] fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' h0 F: ?. h8 l U' [{
5 G( w0 m* l4 R7 @; W8 { BYTE nTmp = 0;
* r8 k1 d4 \- ?( v bool bDest = false,bSrc = false;% P j) l* N4 F1 ?
for (int i=0;i<MAX_INVENTORY;i++)
5 o1 W! C& s" B8 \" B: R7 X {& m+ W6 B$ ^8 I: |+ n) \1 K2 ?
if (dwSrcId == m_Item.dwId)5 y1 S6 n; O3 o& R
{9 ^+ b+ L0 N# c2 g9 [8 _
//id相等 则 改变对应的dest和src) p0 a7 Z' X; p2 W% [. t
nTmp = m_Item.nIndex; C/ W- t1 l* l0 @ J: q/ r
m_Item.nIndex = dest;4 S& A; T) F4 ^& R
}' q5 N5 a: O6 T0 j
}* P# y5 T+ y- n
//临时数据保存完毕,交换开始
4 T+ p( e# D8 W3 r* N& C for (int i=0;i<MAX_INVENTORY;i++)
& h* \( A% t" C0 Y {+ z; [; h( t3 z' x" g
if (dest == m_Item.nIndex)- N) V5 M/ K1 z6 K
{! j8 W- t% o) K; [. ^8 t
//id相等 则 改变对应的dest和src
4 _* n! ?8 Y4 S. i# M$ l m_Item.nIndex = nTmp;
: ?( f# j+ d$ k: h! v* d }
3 |1 }4 ^+ N8 |- ]2 w- S }4 q" _. y! R& k2 f$ w7 ^
}: t' X; F4 x6 Y( i- Z: G
};
/ `. c7 ]! O% b/ h9 j-------------------------------------------------------------------------, P1 Z* V% O/ I( s- G& [) _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 r# p- b7 d; I# R* H3 c( C
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 ~& J. Z- u' Q) f
紧靠其上添加:
5 q5 q! T$ J( w1 x* p' l0 |if( pWndBase == &m_wndMenu )
+ v0 G" I' H0 w+ U% c- S{
5 a; d0 u7 P8 G switch( nID )
4 R C. d, B/ w- X, t( j9 `. \ {
4 s: C, a( W* B/ F case 2:# g0 W: S/ I$ h8 J' z: I
{8 p0 r9 U6 u9 J4 g
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 G5 {# n* l5 J" W. p+ W/ r- |
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ A$ X7 @* Y0 { V
{
1 o# n4 N( s8 `' ?4 J+ f, p* d break;
( R* V, o: n+ O/ ] w D }& {7 h; L1 ]( c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 N1 @6 _; f+ ~) c
{1 c" o$ E% S% ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; o! Z* f1 `3 e6 H3 g" _
if( !pItemElem )
1 N3 K3 T4 ^' g0 U continue;4 n3 B4 W2 y! P0 M. I+ l$ W4 p* {
if(pItemElem->GetExtra() > 0)! [7 t5 v2 s4 z3 L7 _0 r
continue;
1 j3 ]) t& c$ T if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 v( r; L. V0 P2 F8 m continue;
. T x7 p+ ^7 P( d- V if( g_pPlayer->IsUsing( pItemElem ) )
+ b7 b5 K$ v3 J5 m continue;
& _% O2 D6 ~8 F' F& n4 t8 s if( pItemElem->IsUndestructable() == TRUE )
7 m- O, `; C7 k: S4 N& g {$ ]* e8 _; k, o1 H! y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 }) E! b5 a8 P% B8 o$ f continue;5 k5 P/ Y8 F- e7 O; m
}
5 i4 q7 x6 Y" I) e9 D9 M, _ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, F. v t2 M& p1 e
}
6 ^' I4 D# V' S2 {5 z) P break;
. X. q, \0 r7 q0 D, f( S( u6 I/ ? }! Q3 R! E- J: l
case 1:
8 m* M8 {0 V. n6 |6 L* A {5 G3 y) l! u# w) G
//整理背包& ~( B6 D4 I9 H4 C
//////////////////////////////////////////////////////////////////////////
# {* M; M5 t1 F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; k' }' Z2 C, O, L! [: L2 E( g
//////////////////////////////////////////////////////////////////////////
! L$ G& K( @/ f% ^5 G* d( ~ //////////////////////////////////////////////////////////////////////////
6 ]/ T( t- `( j CInventorySort* pInvSort = new CInventorySort;6 G* q/ V5 I; [
vector <sItem> vItem;: R& H& U- g l ?
vItem.resize(MAX_INVENTORY);//初始化大小( B8 [* O+ t6 {
//////////////////////////////////////////////////////////////////////////9 P5 P# J! W3 a) [# Q
//填充数据! R! @ S0 `0 @5 p. F$ z0 B
for (int i=0;i<MAX_INVENTORY;i++)
% T6 Y$ \+ X) |+ i# G+ R {! r% U' M: E: t% b4 Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& n. p& c1 [ ^5 p: s8 A9 f* k if (!pItemElem)& W: C1 |# C: ^: ]9 Y1 h- _" P
{
1 N! P% _2 N4 Z5 D8 V# d vItem.dwKind2 = 0xffffffff;, }9 h6 V$ Q" e: ?( D% j
vItem.dwItemId = 0xffffffff;
y( _2 W N4 ^- [+ E. l+ q vItem.nIndex = i;
/ ?) |/ f' l- j1 \" C4 H8 I0 p! A% C }else {
6 \7 z& D2 S0 T( A& V$ w* ]3 \) b7 ? ItemProp* pProp = pItemElem->GetProp(); |' I# a, S6 d" P6 T8 w1 F0 }
vItem.dwKind2 = pProp->dwItemKind2;+ R( Z8 ^ ?/ u! N S
vItem.dwItemId = pItemElem->m_dwItemId;1 D% _1 Z3 c; F1 ~ M8 n
vItem.nIndex = i;
7 e' `$ e) V* v; N( t, D& | }
: l! H" L& N5 A8 Y' C% w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 f- {" C: S# T5 O
}; x1 p0 ^1 y7 p6 _
//////////////////////////////////////////////////////////////////////////4 s! l9 v( e' _" e0 L( u+ X) g. {
sort(vItem.begin(),vItem.end());//排序
% n1 N( ?; m1 l% Q% b' \9 g //////////////////////////////////////////////////////////////////////////5 N& e( E, r5 k- ?
//交换
$ N2 y- w* L; T" G for (size_t i=0;i<vItem.size();i++)
5 B: w8 a1 |! h1 G6 \8 X' o { V9 v/ @, f% y+ j
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* x, C% W# o) L. p pInvSort->Add(vItem.nIndex);
# I4 [5 q2 U4 n. z( M }% [, o) T) m0 d1 i5 I5 S0 Z
BYTE nDestPos = 0;
! D. J% t: Y8 d2 m8 r3 ] F% a" t for (int i=0;i<MAX_INVENTORY;i++)
2 w. b7 f6 |* |5 [' U8 t7 F9 k' @# e {8 B2 s; C+ m5 X) h6 s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, z. o- s- [' i8 [
if (pItemElem)
( n- W2 z* J& ? o/ E& T {
7 {( L8 Q+ V: d7 Y( K& d# o if (IsUsingItem(pItemElem))- m3 L& w9 ^( W% i0 R
{
4 n" U& l/ N- p$ k //这个位置无法放2 r0 c* J9 d' G# n- r+ C8 J/ _) Q
nDestPos++;
6 m4 Z" \$ S: ^; q4 } }
" [4 E- ?0 M# p" } } t2 P- I3 @, r& @
BYTE nSrc = pInvSort->GetItemSrc(i);5 F( \0 M( F, f @
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 u: l" ]+ U3 I' b if (pItemElem); a7 e( E4 C5 `
{! s( L, o, W# j2 L5 ~2 B
if (IsUsingItem(pItemElem))
1 n* u* S" V A, }) p8 n) T {/ o; c0 V- b0 g2 i' J, M4 y
//这个道具无法移动,跳过
, l" F" [' |8 y% E, H continue;
& i6 U2 A3 E" J6 r }
% M: I5 N1 o5 Y, y- n( z# o }else{' M5 l9 p& G3 g3 r( Z2 {: b3 F
//空位置 不用动3 n+ z; I5 ^6 h" f
continue;6 W% s! R- V( O9 v; g* q( }
}9 `9 Q% I& r) N6 t: e
//////////////////////////////////////////////////////////////////////////
6 O+ Q( z h( F% w4 H1 P& e9 [7 o //开始移动+ r" C6 x$ Q' O/ u; Q
if (nSrc == nDestPos)1 ]8 B( h: t, }9 s3 q/ z, }5 K
{
4 w8 T, l3 s6 B( C+ b0 N" q //原地不动 W" N: f+ x0 e! z" c0 A3 z
nDestPos++;8 c- I3 b3 k; ]( k
continue;
) ]; T4 |& k* r8 m# f6 ] }
3 P' @7 k' n& J- ^+ M* v9 ~ pInvSort->MoveItem(i,nDestPos);
6 a4 C0 o- V. s; B( q8 v' ]( K g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) ]: g: W- T) K3 q: C$ C* J Sleep(5);& [& A0 Q; ]$ E9 g H5 m
//Error("移动 - %d->%d",nSrc,nDestPos);
- M$ ]3 r- W0 d; m& f9 X# d nDestPos++;
8 U1 u2 z, `6 X2 e }+ K7 Y+ K8 T- h4 Q
//取第一个元素的信息
3 W. N7 g9 J! ?3 m4 |8 ] /*
2 Z- U8 Z, M; G7 ]+ E* H% m if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): C! O& S! h; _3 X( F- I" y/ {
{5 Q9 ^) l: p2 x
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( p% V, W. G. Z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 o h; {" q( S' [# Q/ c
}, G; A& l s q5 S4 y
*/
* r/ i4 [: P* L$ m //////////////////////////////////////////////////////////////////////////
2 p* s2 ^8 j- X& ] break;
% U- u9 `) \( W/ G6 } }: } }# l3 N, N" Y; b2 Z' f( g, p
} 9 |9 z" {: G {' @( H8 K9 e
}
! K7 n' t f. \4 Km_wndMenu.SetVisible(FALSE);
; M1 q; m2 U; y* h2 Y7 J+ [0 |
2 k# {$ Q% J2 E( p2 J) Y--------------------------------------------------------------------------------------------------------3 I% P1 G/ u2 r( ?! h
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 D+ I. w7 S4 [) s7 ^3 j: U
{
# o- y! D# {9 W5 z- n; X8 q% A6 SBaseMouseCursor();
" h% s8 C! Q6 ]: I) p8 M8 g6 D}; Q& I R9 y N
在其下添加:
, @ j j, [( ?# G+ F2 _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 ^4 y4 Z A6 z( @8 R
{" k, Z8 S3 m* m8 N4 \& |: S
m_wndMenu.DeleteAllMenu();
* U# l2 O- H% D( _0 M1 wm_wndMenu.CreateMenu(this);' n3 W1 e# s! A0 g8 o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 D. |7 [; C3 C, z2 t7 V9 `0 G% q+ H2 U# e+ v
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: v' {/ t% L q4 Q! k" u5 q# d2 U{/ K+ L. e% K u9 S) o* f8 ~3 ]& p
//P以上级别才可以删除所有道具$ k5 u6 ~0 W& m, P1 P$ `, E
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( h+ A7 N' o, R+ O8 ~8 p. c
}
; p5 h v: Q1 _3 w% ^7 F) Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 l; S8 c! A9 R1 D, q+ N. ?- R
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& w2 @# u. Z$ B. ~
m_wndMenu.SetFocus();
' W- v. N3 |% a; }0 u2 o6 O8 N8 G, O}
6 D# G# `& a/ V) Q------------------------------------------------------------------------------------------------------------
/ x5 C4 K" ]9 Q. @2 Z*************************
' V/ T# t, r, MWndField.h文件
, `% E; Q" \. q4 H7 A( N*************************1 c! P" T) u# a3 X
搜索:BOOL m_bReport;
6 K$ D) |) M7 h0 g8 V q' x# v* W其后添加:
$ x* J. ~0 P& ? w$ rCWndMenu m_wndMenu;
: q5 H/ W4 e3 E5 ~6 i" t0 \+ r+ w搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- c" C3 y& A+ z0 S. X4 k7 o2 f2 l {
其后添加:0 R8 I/ @ r2 k3 T
virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 g- g% P" g# ^, G, @, ] `; K6 a* F8 _) h
" }1 I% f+ H5 g |
|