|
|
源文件中_Interface文件夹下WndField.cpp文件, a0 L7 d* _6 K U( f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 A- M' p( G' B' F: g! S+ B
! C9 B0 q1 @* N7 S) ^6 G' S$ O
struct sItem' `; K% H4 q* y, J2 S
{
' X7 @& g& M% [DWORD dwId;
: A! j5 W& I0 z) Q6 f+ e3 T5 ZDWORD dwKind2;
8 D- O; @4 o K' A1 I8 r& S4 a. YDWORD dwItemId;
+ p: _% R# @* KBYTE nIndex;( V8 }& L+ ?( U) p1 V/ R
sItem(){0 G+ [9 Z+ g& d% X+ f. o# ` W
dwId = dwKind2 = dwItemId = nIndex = 0;
7 W. h4 X. t, C" X) x/ I( {}
4 h* j; P3 T" \& R: nbool operator < (const sItem p2)
% [* |- l. y2 x" i* u; b4 U{9 W6 l/ P* W2 a% L' r v0 n
if (dwKind2 == p2.dwKind2)
& e4 T4 j3 `: {0 ~ {
( U8 J3 `* B0 Z; \9 b1 u \1 }, I return dwItemId < p2.dwItemId;
; S; l* O. U( d; c/ D! m" | }else{4 H1 L5 r. f1 i; A* w' Y
return dwKind2 < p2.dwKind2;: P+ ^- x l8 @% ?
}
: J& A$ X1 E6 o* O}
6 h8 _3 O6 w2 ~4 _0 D- v9 `};. D7 S( d$ ]4 d8 c9 f
class CInventorySort3 k6 V- U5 k0 i
{9 a+ |6 X, }5 D& F! ^
public: t/ R/ j/ n- h- A8 N! H& s
CInventorySort()) _2 h- ?/ R8 f5 g+ k4 E7 f
{! \$ |+ I: B- ^2 b, R \: |! }$ p
m_dwPos = 0;7 s) n6 B3 ?* I( u3 j+ r
}3 L7 ^$ a# t! t0 }) u# ~2 q
~CInventorySort(){}: y5 q1 ~3 f4 o6 g* e3 s3 X, k
private:
, F3 E9 S- t% _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 \6 }: j5 E! d
DWORD m_dwPos;. q' E4 n* ^2 u
public:
: D+ Z1 [6 Q: ^9 E o4 t' r+ p* Kvoid Add(BYTE nIndex)+ v: n5 A) c- w l4 c; d/ d
{' N6 n$ j1 K9 t" S8 h1 b
if (m_dwPos >= MAX_INVENTORY)
+ _$ Q2 P; O# I+ \0 E {
3 F# M8 C' k# u! z4 h return;9 \2 [5 s7 p. e0 v
}$ |, _+ d E% P4 h- Z3 O
m_Item[m_dwPos].nIndex = nIndex;
p2 Z! g+ c. A+ K# K m_Item[m_dwPos].dwId = m_dwPos;9 @! E: Q: a+ H$ @* S0 s. k
m_dwPos++;
2 T) p. m! U% I8 H6 K9 ?6 o, _}) S! w' Y; Y( C3 v) R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; Z7 a D+ v8 r: a8 L6 H
{: I! t- q3 S" H5 a
for (int i=0;i<MAX_INVENTORY;i++)
2 X6 z* j9 F5 K0 h& P" @8 R {% j. O6 R4 |* o; Q1 a7 Q; k
if (m_Item.dwId == dwId)
0 F% P, P1 Z3 d9 q5 M {
+ H0 D' {( d0 C# v$ f/ o return m_Item.nIndex;
/ T2 V1 I0 p/ K; K+ X, A; a }
3 A7 n$ r7 w4 C. v5 g7 d+ D+ E) j }, f# r D7 m G4 w
return 255;
: }/ Z2 n0 ^( l3 } N5 X}+ X1 B2 ^6 J1 J+ @- D7 G5 d
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# _3 `, H& j5 `) D" p; W# W+ a0 t8 a{
- f& ?# F+ m* r, T$ {2 F BYTE nTmp = 0;1 }9 U: l1 s! |6 L5 U- R5 ^
bool bDest = false,bSrc = false;
C Z; x% {& K0 L for (int i=0;i<MAX_INVENTORY;i++)
% ~$ K. U r B9 \ {
7 w' r) T: g$ L3 j. k- } if (dwSrcId == m_Item.dwId)6 k( ~5 j. ~/ o4 R, `4 R" g
{
e8 [& ~9 y: u //id相等 则 改变对应的dest和src
+ ]% K3 |$ K3 u! s7 f- G, k" } nTmp = m_Item.nIndex;
( n/ s$ |" z Z m_Item.nIndex = dest;
! t: p3 a. h- O- C+ d }6 C( u# F4 }4 w# P! Y
}
( c( C8 l0 ^ J4 y, f6 z# s //临时数据保存完毕,交换开始
! L0 M; ?6 I7 _# K' k$ l2 L- n& B6 _ for (int i=0;i<MAX_INVENTORY;i++)" _, V2 c1 }, P$ U
{1 Q. z0 z/ Z* q, S& `
if (dest == m_Item.nIndex)# G& E+ C0 H9 C/ `1 K* `+ F
{) \1 c0 m- l k' ~9 t' Z& `* m
//id相等 则 改变对应的dest和src
0 _8 r* R0 v8 |/ t m_Item.nIndex = nTmp;6 l z4 ]# R3 a2 I! L
}
# } T) C" J5 Z4 l1 Y }! I6 Q9 ?- s; Y
}2 s! W$ w3 R7 x! V
};' B& e: K9 m4 t. j
-------------------------------------------------------------------------8 N# y5 }* V# w, w* M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). G% T z4 z0 G* j: p" \" S# T- d w
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 v& p7 [1 @; W6 m* s
紧靠其上添加:8 P2 C* D: E3 P# o
if( pWndBase == &m_wndMenu )& K# {) Z% F7 j* D9 z
{
' O& Z# s7 K J+ m0 K2 M5 {& n switch( nID )1 P$ q/ v) _: y
{
7 s2 _" f: k7 F5 R case 2:) l8 g6 O1 Q* ^4 m1 U
{, B b% U# V0 E( ]$ i0 U9 D
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 ?! s5 |5 H$ r6 N/ x5 ~
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 w% q0 V: R) \9 @
{1 t M S$ ~. c) s3 K( H- J+ ]" x
break;
3 I) [3 t7 L1 v) q! u5 Y$ a }
2 V- T* m$ [* L; \( _) g9 y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 c3 a0 `' P( _" T {8 y: X0 N& S) g" u P) W' E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 j; r, J5 G( U' |' ] if( !pItemElem )
: H' @% o" B5 i& |; S# Z7 z3 p+ ~$ I) Q continue;
/ x1 g/ U8 ~6 i4 K# m# v if(pItemElem->GetExtra() > 0)
. c% n" p, U3 e2 }' g& M7 T N' j! p continue;- q# T3 {" k9 g1 A- N
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % b2 W# A! [8 F) D& ~- O; Q w7 @
continue;
3 p! A+ n' I9 S5 X if( g_pPlayer->IsUsing( pItemElem ) )2 r5 x; K0 |% L
continue;! X* z- K( i. b) w3 O
if( pItemElem->IsUndestructable() == TRUE )' y$ Y- n" i( o% A& n
{
1 H' A! q6 A6 D; E W g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% U6 N: k- ^$ E4 m* h
continue;
* s: N. D8 K2 x' o+ Y }: D. V' m& j. Q* X* Z6 e
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% {' i( E$ a* [8 @9 {1 K
}# u' a. P0 s5 W( l) {
break;
. T: c# y W! w1 C }
0 n' ~: F, x! n: v) ]# g case 1:, l4 R& P5 Q! t9 Z+ }8 k
{% }3 {. F1 M, I: r% @ C
//整理背包" b1 o, U" L% R& G( A
//////////////////////////////////////////////////////////////////////////
+ x" s6 p+ Z- s% ?4 C //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 L4 ?" q: f/ V- h& u2 C- n8 S8 i& y //////////////////////////////////////////////////////////////////////////1 P q7 c2 A4 v4 ^, z% N* u
//////////////////////////////////////////////////////////////////////////
5 Y9 ?3 N! s6 c D! m4 h CInventorySort* pInvSort = new CInventorySort;
0 Z( y' H9 A1 q" i; Y' {( e( E. G vector <sItem> vItem;" O9 A2 {0 D' C( F3 [3 O* [4 z
vItem.resize(MAX_INVENTORY);//初始化大小) ~# z, m/ `6 [2 b( R1 r0 T
//////////////////////////////////////////////////////////////////////////
4 @! p! [1 m2 J; M //填充数据
+ v" L R" m# i" x ^+ Q for (int i=0;i<MAX_INVENTORY;i++)
! L8 k+ v5 R {' G {
& |( g1 o" D2 M( _/ l* M# | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 e5 J, w9 c- W9 H+ L/ F
if (!pItemElem)
! m0 o5 V' U3 r2 O {# J* k6 j1 J+ o" V P0 z
vItem.dwKind2 = 0xffffffff;# j' n. B" i1 J" S
vItem.dwItemId = 0xffffffff;
% {4 i; n4 {# ~+ w" E3 ?" ` vItem.nIndex = i;& A2 X1 I+ N+ ]; J2 o
}else {# H7 }! }' ^8 t- g$ L
ItemProp* pProp = pItemElem->GetProp();
% I! W, R7 t3 c; s vItem.dwKind2 = pProp->dwItemKind2;% s. ~' V. s. K
vItem.dwItemId = pItemElem->m_dwItemId;, a6 Z8 G8 x/ y5 d+ A% ^$ D
vItem.nIndex = i;
6 p$ H5 X' S2 { b9 n4 K }1 R; e) V2 Z+ M X9 _ c3 V
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( Y4 w7 c" A. {: J4 B) L. |
}
$ {) W# ]8 G' i' b& E" C3 V! j /////////////////////////////////////////////////////////////////////////// y" }1 Q$ l" ~5 F: j ~' W) R
sort(vItem.begin(),vItem.end());//排序
; K* L1 P$ d. u //////////////////////////////////////////////////////////////////////////
3 p+ k/ Y5 q1 J7 d* F //交换9 j/ O+ p# `4 N5 o3 H W( d( |% p& ?3 U
for (size_t i=0;i<vItem.size();i++)+ D8 h# Z8 z, f; H8 p
{
9 M u& l! B- h$ b$ S8 A5 _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: `& X- o% J3 j J( {+ K* c pInvSort->Add(vItem.nIndex);, l7 g- g5 t2 M+ c+ I
}
. `7 O3 i% J( a BYTE nDestPos = 0;
& [. p( e+ r" e3 z8 w) D/ D for (int i=0;i<MAX_INVENTORY;i++)
c- G7 U% U1 x( d {
* S! X- \4 M2 Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 P' b4 U; b3 ]! c
if (pItemElem): [. Z5 e( E$ N3 t# Z' S" `9 z! W
{- t! |; w! f8 j$ F S3 R; Z
if (IsUsingItem(pItemElem))
# s, ~+ i, `+ [. p' r# j1 | {
) O2 J8 s a! ~+ N( U+ s //这个位置无法放1 B( _1 g( r5 f; g
nDestPos++;
- R, J6 S I1 j }
: N5 R2 Y, d& O, Z' ?# x }9 |- Y$ r# _/ |# z& \5 d
BYTE nSrc = pInvSort->GetItemSrc(i);
Y5 t+ {9 I) Q7 F5 F pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ }$ y) U) d( E8 r* I0 {; W+ W
if (pItemElem)9 s7 Q5 c. V5 |) \! }- ]2 E
{
9 V/ a6 ^, E! z. j _6 T if (IsUsingItem(pItemElem))1 S$ h3 Q) Q7 Q, d
{
5 ^( o) t, V/ |5 L* H9 F //这个道具无法移动,跳过( V0 }0 Y4 l9 b$ q7 O& Y) a* ]& I$ G. N
continue;# @' y0 i. f/ c, v9 U- \! D
}5 u- }6 ^' @2 L/ I# K
}else{
& x4 Z+ ] D: A' i# U/ J //空位置 不用动
# t" N: m- a2 W* I continue;) o( m, R4 O3 b2 A S, S- l
}
1 O5 b! K% p, v# y& b6 R ////////////////////////////////////////////////////////////////////////// J1 q& @' {$ e* q2 d
//开始移动! N m( |* L9 J' C2 H
if (nSrc == nDestPos)" p" L' }$ }9 F; n
{/ _4 K! u8 X6 h
//原地不动' }9 u. f( L- v, t
nDestPos++;
' E4 h/ b; G' e1 c6 }' T. Q2 e6 h continue;& H2 {) C+ k: w( e9 s3 y
}
. Z: K/ f2 e [# Q" m0 X pInvSort->MoveItem(i,nDestPos);! r2 M+ R& t+ K
g_DPlay.SendMoveItem(0,nSrc,nDestPos);& z5 e3 g" Y) m
Sleep(5); @6 u0 y0 E' n4 Y/ q0 U
//Error("移动 - %d->%d",nSrc,nDestPos);
/ q- M {" V+ g# }1 l% Y. X6 u nDestPos++;
1 G% `9 K4 |% } }
2 v6 n0 f G0 D2 Y& P. S( W //取第一个元素的信息2 w% S; S( N( F* p. @3 J4 e4 G
/*
! {& V6 N& r+ G. Z L if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& D/ b+ O/ c3 y2 h& ]! H4 u5 \
{
5 P# e4 f0 r; F2 ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% a/ D% {+ E5 q+ Z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! K2 X' |: ^6 d& Q8 k- O# ] }
0 ^' D; J' L+ q2 o */9 D/ R9 q, {' T3 Q
//////////////////////////////////////////////////////////////////////////7 y% Z( j6 f5 G, Q, {) r# _
break;
) W7 j$ u7 r1 K1 K: W# u }
$ v' ^# W, c% p8 j9 M }
$ p: ~1 E2 B) [; X& l}
" Y& d& D- g2 R* P5 D8 m/ tm_wndMenu.SetVisible(FALSE);
( ]: D- k: t" T3 b9 N! P, k
: G2 U" M7 p! d# Z q--------------------------------------------------------------------------------------------------------
" o, q% @6 B R7 ^0 ]搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) r; A- F% C' o: D2 ?' y
{, Q3 \9 H4 \! H/ e) `
BaseMouseCursor();& b! N& ~* V+ |/ l2 r. h
}
1 o3 v5 a% G) e在其下添加:$ C7 q; c' i" \; G
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 ^2 R/ ` H, L% ~{9 z8 B+ Z K# `% K1 {5 d
m_wndMenu.DeleteAllMenu();
O& H* N- H, l9 e8 K" k0 E8 gm_wndMenu.CreateMenu(this); @/ Y0 Z& u7 `7 F* [3 U0 g0 Q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* }/ l& y. G8 Z- |1 z( m" l' C7 R+ O3 u- c; V' m# S# Q0 T+ }# j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! I5 \2 A" M$ s. M, m6 i" X{
; n: b7 Q# V* l+ } //P以上级别才可以删除所有道具, Y& Z2 j W, A; i" N7 M
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- e4 Z. F! P I# p% a$ E- S; |}
8 W' _. S* Q# Q# u* y- om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 t: z) V, R. x# C6 _m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' S+ l1 |7 O. x8 W+ w- Q
m_wndMenu.SetFocus();
n. B# Z8 V$ z; d9 K7 w}
& N2 K( V! ?7 P/ x8 @; f4 F' a7 K: ?------------------------------------------------------------------------------------------------------------4 k' u$ ?& n9 D* i' m
*************************
/ D/ z, k7 J4 k, F& F4 ~! H% D# @WndField.h文件
, I4 f4 g$ m/ U# Z Q& u% ?( F*************************
0 x! G# _* F) P+ }; \搜索:BOOL m_bReport;
: T. a: r1 ~2 Q& q& t其后添加:5 d* |, l% _ Y
CWndMenu m_wndMenu;) M+ I2 y# h3 U+ q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 Z$ t1 [# R% j' }2 f9 t
其后添加:5 N( H+ b; [0 B1 O2 I4 W8 q
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; u6 n! o3 T! f0 s6 e0 M1 u# Y1 {% t% B. V( D2 P" h" q7 o$ G/ T/ O
3 r: ^* X4 Q) c3 t* ]3 W4 {
|
|