|
|
源文件中_Interface文件夹下WndField.cpp文件$ C, U! t6 `, ]4 z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 ] q6 ^3 s' e& i
( F/ e3 l" B# o" @7 P# H4 @
struct sItem
- |0 S, D5 ^) d7 ^{8 O/ _ j7 M' L5 [# d! A
DWORD dwId;2 G* o# K: V3 p- B1 C2 I
DWORD dwKind2;
9 f" |$ N$ k0 R% n0 i% s- iDWORD dwItemId;
1 a" J' ]" V/ C2 A/ Y+ Q4 A7 n' Q2 BBYTE nIndex;" u) j3 g& n$ I+ z% o+ W5 U
sItem(){
4 k9 C( g$ c/ ~9 K5 a3 g dwId = dwKind2 = dwItemId = nIndex = 0;3 M$ Y0 r) r* G9 I1 M6 d$ l
}
; S- k+ w- P7 T' X6 b7 m$ M. G) Abool operator < (const sItem p2)
+ }8 c6 i1 N n! q, c3 S h{
Y' b, F+ V0 y q3 L* i! e if (dwKind2 == p2.dwKind2)
G' U i. T; R; @, z9 z0 ^+ J" Y {0 A4 O d4 G/ Y* o
return dwItemId < p2.dwItemId;# ?: z' E! B! c1 N
}else{
: U C& g5 z3 f# n8 b8 V% c6 H2 e return dwKind2 < p2.dwKind2;& t; j: Z' w& S, p; m, a1 G5 ^
}
4 _) d P& q; k8 E$ A0 h, y" x}
8 ?2 d1 ~ t i* b- \+ S- \};3 A) d, g* ^8 X6 u3 g" D9 p
class CInventorySort( v, U4 s, |: B% u3 T. x
{
5 z2 {% z( m" q$ H. ?4 @4 @: Ppublic:
0 k0 P* `+ c- Z$ N2 x, q( H$ eCInventorySort()
1 o f2 J9 {) {{
( d5 w! P5 f7 ?- B0 c- N, M m_dwPos = 0;+ o4 B+ G; E- v' g
}% ~" F8 b" D8 l/ r; T \
~CInventorySort(){}
- T0 e9 r9 s8 Z# d3 I& a$ u4 Xprivate:5 H# T! x- _2 t1 N, V6 ~
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- m6 d9 x6 U( Q, K: B* |DWORD m_dwPos;
( k% S: ]) P4 s$ cpublic:
: F' R, m* X2 v/ Y9 P' kvoid Add(BYTE nIndex)2 v* {$ h( J9 ^3 T9 C- P/ J
{2 y. g ]5 R5 d- @2 q
if (m_dwPos >= MAX_INVENTORY)/ a- i* i l4 B1 T d
{
H I2 W* d1 @& j* g0 K9 O2 D return;
- `9 f* }4 b2 Q2 P$ c }( F$ ^- c; Z( I- x( q" m) f( W, r
m_Item[m_dwPos].nIndex = nIndex;
! ]% J, N$ N" `6 K. M! H m_Item[m_dwPos].dwId = m_dwPos;4 x6 T' Z; [" q. l) M: y
m_dwPos++;
: C+ V" A5 j5 m! g5 L}
* W5 k: D: b6 R ?3 `: n+ fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 A4 E9 ]" l2 ~2 ^% ?, f{
$ X! w3 B0 J; G+ O for (int i=0;i<MAX_INVENTORY;i++)
) N2 d+ O0 v% u {
" \& k% O# K! C+ O, n& w' k if (m_Item.dwId == dwId)
2 N4 u+ b- h" j6 M+ h! l {
/ j) F0 e4 _1 J9 S return m_Item.nIndex;
" U/ \6 @3 F5 _) t+ p# B R }
% ?4 B- {. ^& T& Q/ H8 p }
0 b1 z, t0 n! a) S5 b( G, r return 255;5 c% r3 W9 F7 Z4 M3 m1 L8 {4 D
}
, \7 z% t* C4 Z dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ c# {8 O3 Q$ B
{
. T- l: q2 R! `+ m% x* Y8 |. ~) v BYTE nTmp = 0;5 r. ^+ O4 w3 q$ j! p+ l# `
bool bDest = false,bSrc = false;
4 D% q% z4 h# @- {9 q for (int i=0;i<MAX_INVENTORY;i++)7 F4 o( H! f; h8 k) w/ r f$ q
{6 u' X1 X1 g7 ^ h0 G
if (dwSrcId == m_Item.dwId)& r3 O$ e8 q9 R: E' h% `& M
{5 R1 O- f- I% L% h0 l( Y3 K3 w
//id相等 则 改变对应的dest和src
& H x, N, t: U; t) X9 L; {# g# s nTmp = m_Item.nIndex;
0 {6 M' Q' I1 \/ e/ a m_Item.nIndex = dest;
( R0 B% z3 c, [8 M }; N# c9 L6 p2 |: p$ `! I" @; ?
}0 o- v6 p* ?( C( ]! h' F: |5 [
//临时数据保存完毕,交换开始3 L! ^7 ]# T4 {6 I( i+ H- \) C
for (int i=0;i<MAX_INVENTORY;i++)
0 B" V$ l, O% {0 y$ }9 Q {
" x |* B% v; j0 p if (dest == m_Item.nIndex)
, n, B6 P! [7 L6 E {
! X! U3 O& k. F( L3 {7 v //id相等 则 改变对应的dest和src
- v* f8 f3 c" f3 K! z) [ z m_Item.nIndex = nTmp;
2 M1 e& S& H& r }; q- O9 _* `: a- g3 P
}9 q7 A, `/ J+ x: N( c4 a& x
}
. D$ o3 N+ e! e: M9 e! T' P};' }' B. {7 S$ n; B
-------------------------------------------------------------------------
4 Q$ G `# Z k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ i& W7 F' |6 B# z; k
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ { _" r0 G( l6 F2 u+ T6 X紧靠其上添加:& d; O2 A- t. y4 w8 z7 |, Q+ o- G
if( pWndBase == &m_wndMenu ): ~$ Q% ^: ^- l+ \7 ~
{ {: F7 [3 l" y4 n
switch( nID )! m$ ^' p' T2 O$ z% d8 X& _) p0 v6 l
{
n0 N' k7 M2 _+ k' Y, Y0 L case 2:
0 W7 k6 s6 l' w" J; `4 N- F {. R V! v2 q. Q5 {" B8 o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ G3 F0 j5 K+ v, d: w! w* o if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( @7 S j" d/ l4 C5 f5 f
{
) T6 p& L# P. Z! q; ?" A break;
+ I0 v$ s! P# o$ [, w3 I }
" J4 q0 q' J' _1 p! N+ m. y1 J% a5 d$ K for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- ^: n0 a" _' d! z$ O, h8 Y a1 a {+ P+ t+ r, [) k3 J" x: y: F/ j6 _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 w. S9 e" x/ t- I% g( O1 @
if( !pItemElem )8 ~! H w0 w0 d; d
continue;( {3 ?+ z% m; ` q" q
if(pItemElem->GetExtra() > 0)9 t. c3 ~' V! i3 ]* y8 Z
continue;0 [1 A6 l" ~- |6 }7 ]3 D
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' W% E0 b( \9 h3 I) c: o9 i' j
continue;) h. |. u4 B9 ?- J
if( g_pPlayer->IsUsing( pItemElem ) )5 w" d, i5 v( V2 a
continue;3 D6 ~. ?7 c4 N. N- u6 r: i4 v
if( pItemElem->IsUndestructable() == TRUE )
' X' x& A. b! Q% j {
0 a w" g5 ~4 A5 A9 [# b/ ~ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ R1 |9 e3 a: M/ O& K1 ~- n
continue;# y# w: ?8 i! ?# t3 |
}
7 c! U3 a# Q. _$ A g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ }1 H" W& w+ a# z' t' X/ } }
+ y8 W! J7 P% U break;% h, e6 ~- j! W" m: T
}4 z+ K8 f9 U3 _$ l# v: m0 \. r
case 1:
4 I/ l! E8 t& {" Y" |6 Q9 h {/ M9 Z: _% Z6 U" l' u
//整理背包$ |. u9 r2 C2 j' D
//////////////////////////////////////////////////////////////////////////
\. Z- U# c0 D: |5 U, s //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! s; j$ B6 q4 C$ r
//////////////////////////////////////////////////////////////////////////
* O) p5 S" R) f: T B$ {7 E- S2 a //////////////////////////////////////////////////////////////////////////
& X( _8 V1 F* B4 q+ c( A3 |; C CInventorySort* pInvSort = new CInventorySort;, k' [1 \- h4 E- ?. Y
vector <sItem> vItem;
: Z9 C+ V0 s u: I" z% ` vItem.resize(MAX_INVENTORY);//初始化大小7 ?$ O( D$ U, C; {; w
//////////////////////////////////////////////////////////////////////////
6 k/ y! c X) g( g! ?) m1 s4 U, | //填充数据3 Q, C& F/ y$ a& {9 h
for (int i=0;i<MAX_INVENTORY;i++)
# I+ j) L3 a. O4 ]- ?! H- {( H {
( _8 Q4 c" n: V# W$ m4 S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* a7 u% ? o4 k: N; w! w4 N3 t* Y" y% v if (!pItemElem)1 ^$ B9 o3 F! X' _' N
{
, t+ B) Z8 \" \" H4 Y/ V vItem.dwKind2 = 0xffffffff;, w' A# Z/ D/ {
vItem.dwItemId = 0xffffffff;/ e0 ^, ?8 k* e% H$ I
vItem.nIndex = i;, W2 C5 i( ?( b8 X
}else {
) w! _* V* ]2 V) _4 p. D ItemProp* pProp = pItemElem->GetProp();2 d9 q( u, J0 ]
vItem.dwKind2 = pProp->dwItemKind2;9 i# e) j* D2 ?
vItem.dwItemId = pItemElem->m_dwItemId;
. B: \0 _9 W: ^/ w$ i' R+ ^ vItem.nIndex = i;
7 g2 p( r, e9 J' L- N }
! p7 M5 e! _5 J+ {9 k7 \ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 R: K; B; s4 c0 i7 k6 G
}
7 G- o5 d- L3 q( u$ P" l //////////////////////////////////////////////////////////////////////////
5 I8 E% G1 w6 _- g# W sort(vItem.begin(),vItem.end());//排序
) L0 O7 F) x) ^5 T# [7 M, ? //////////////////////////////////////////////////////////////////////////% C& n4 }( z* M X
//交换# a7 Z# S" l1 c2 j5 d
for (size_t i=0;i<vItem.size();i++)7 w: O) m. g7 H
{8 a6 P2 W2 V# v8 L3 t3 A& ~
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 B" ]! p; B k0 s. |) ~- U
pInvSort->Add(vItem.nIndex);
0 |" P! S6 f$ e7 W4 G! ?. U }9 c9 |8 N+ P" I- T
BYTE nDestPos = 0;
( ^# i, Q" a3 e for (int i=0;i<MAX_INVENTORY;i++), o( i: k1 Y6 b* w, U- H0 _* F
{1 P/ M2 a7 @/ z; j: M! L9 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. P! K$ [! T+ Y8 @+ @ if (pItemElem)
. k# W* \* |$ g a {; [* g( J: p- X8 A! Y
if (IsUsingItem(pItemElem))% {8 X. t& |+ h; E
{
& g) K, S# s3 |" s9 Z2 V5 B/ e! o //这个位置无法放
* e9 A$ P8 I6 M. F nDestPos++;
6 d' ^+ F* q2 ~7 o# V, U b' y% X }: g' I# r; }/ I5 \* _
}
- u2 ]+ G) Q8 x, M& m3 t( [ BYTE nSrc = pInvSort->GetItemSrc(i);
6 `/ F5 O; x( U' D2 L m# i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ H. x+ k! I d1 z1 L
if (pItemElem)! o& z! K% e4 q: S2 z
{* K0 V- V7 B. o0 U( M2 X
if (IsUsingItem(pItemElem))
X9 ~9 ]) E) ^5 ?1 Q2 E) s {* h, ?$ C) A5 q& a( a! S& Z% c
//这个道具无法移动,跳过
3 C. A9 |6 y6 ^- V1 _ continue;
/ y/ K. G( H& T" Z i' Q, t }* C( [1 v' ]2 Y8 m8 m) J
}else{* d) K6 ~' m2 A- Z6 c9 y
//空位置 不用动( p( f. `6 G/ G* _/ y3 G* l( N
continue;
* T/ P) U1 v- ]7 ^ }/ w* `4 T4 ]1 q" d9 u
//////////////////////////////////////////////////////////////////////////* K) h! k# f& w0 i
//开始移动
3 b" X& {( R. r; N0 z) y if (nSrc == nDestPos)
5 l7 f: u8 F2 j" ^ {! w/ F2 [- L$ A
//原地不动% {$ s) m! {4 w1 r4 u+ }# z; ~# a h
nDestPos++;. B* x/ E% h# t- j8 h! Q
continue;
9 Z% c. l$ z9 r! U }
# b/ z, _1 b' [, m6 K( I5 E) e pInvSort->MoveItem(i,nDestPos);
0 D. ~# i; D' ` g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' k1 f, @, I% M. K, a4 T/ q) H Sleep(5);/ \! q6 {: o1 e! _6 I/ D/ e% D
//Error("移动 - %d->%d",nSrc,nDestPos);
, z1 u& T! P5 \1 A" X nDestPos++;; A L. t _/ j7 x/ v$ `
}
! p5 D/ a9 B7 B# e //取第一个元素的信息
$ C4 t1 p$ `+ p. D' o /*, ^7 @3 R( O8 Q5 |
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ g; f) W1 f' l: G" H {
?* l+ [; g# H8 ~$ j$ q' S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 ]0 k* K" L! O& d: |- R- x j3 q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 s0 Q4 V. h! L }+ ]3 L: \+ E( ^8 z( E7 X1 r- Z
*/& k) {% G. S, @: i7 g
//////////////////////////////////////////////////////////////////////////' o7 [; ~0 r: v4 T% e$ W
break;6 U; d/ d$ S0 P" \5 M. @8 V" x
}- [4 B, f1 V, [" h8 H P
}
1 p. B7 R7 `5 g) t, n4 S}$ L% \- e8 {7 i+ d. r+ l3 r
m_wndMenu.SetVisible(FALSE);
. h9 J) ~6 l. m) Q! B% t8 ~# ^
5 r/ J3 \. o' N( q9 X W( j9 i5 N--------------------------------------------------------------------------------------------------------
+ g4 a+ y3 D, i- u0 f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 M6 c$ n, F! b0 A% I% q& ]( R! F
{
0 Z2 {! H: P1 V, r. GBaseMouseCursor();
" b- g! q, U; X) N# s3 g" A- Y( ?}
, _' a1 _- f% Y2 Q( Y: C/ m在其下添加:
" ~& Y# A6 ~" Kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) B0 {7 G* J( f6 X5 j* l; U6 d
{
2 } {7 T @6 ] w6 Q0 sm_wndMenu.DeleteAllMenu();
K7 H3 g, ?% E; `7 ^% q0 Fm_wndMenu.CreateMenu(this);
2 _3 o3 Y/ a& x0 ?+ ~# G8 {6 {m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. W+ S* i# d' o5 W$ {
' M* t; r6 \/ f2 s6 g- \6 N: K4 d
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 u+ g! Z) g; ~9 ?6 w s6 e
{
0 X5 ^* Q( E, D; _" |1 H, d* L //P以上级别才可以删除所有道具+ |5 Y+ @3 E$ p, l; u- C7 v
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: x! f9 b6 _$ d9 b1 w! E4 \
}
* L" P K3 A6 ^2 f3 I4 @9 | pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. S; S! Z3 v! s' y2 g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# k- H9 K% }0 d: t i6 ?m_wndMenu.SetFocus();
, p0 u. C* s4 T- z& q}/ I: u9 N4 L* f% a+ q
------------------------------------------------------------------------------------------------------------: v# J$ A4 }6 j0 D$ @/ X, O# @! _
*************************
" t6 d# y7 o* q* R6 MWndField.h文件
: _5 g2 O, E6 k# g! C*************************- W( L6 {' ^' [1 ?
搜索:BOOL m_bReport;1 |4 i; B/ h0 R
其后添加:
9 ]4 N' C+ X9 E' Z% vCWndMenu m_wndMenu;
7 \8 S- V, {8 v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' B# C d6 Y: g! b1 @' ]. T
其后添加:5 T1 K' k+ O8 o. }1 Y0 g
virtual void OnRButtonUp(UINT nFlags, CPoint point);5 I' f) ~- v# r' t' _, f% f. g
7 p, j* y- K9 Q! ^5 U: d
2 s- }7 t! [3 ]9 m5 U% I
|
|