|
|
源文件中_Interface文件夹下WndField.cpp文件
1 ^: R, O) [' t9 U0 f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 e& B6 m# ^' _& Y* C/ b- e' f9 W6 {( q' g' e
struct sItem
: Q" u( k* Y, O* y5 ?7 a! {{1 |5 L; Q4 L7 \, n! M3 p# `) ]6 Q$ ]
DWORD dwId; C# ]# f% n: p. O# K
DWORD dwKind2;
! N+ e8 J8 f% g$ dDWORD dwItemId;& F. ~ U% N+ ^8 r+ a
BYTE nIndex;) |9 g( n9 a2 L5 M: |) L" c: R
sItem(){9 M' m) K& h o; j8 Z2 k$ v3 A& R
dwId = dwKind2 = dwItemId = nIndex = 0;7 e5 G4 B) C) i# ?7 Y z: |0 X& T
}
. _( v/ h& K8 y4 y3 Tbool operator < (const sItem p2)
( h4 a9 c- j, l7 `. d6 _; M6 O' m. C{
1 J; L$ c! S+ k! Y* U, f8 d: [7 R if (dwKind2 == p2.dwKind2)
7 k# N# w+ I& W0 N2 O {
: A! j. j$ X/ ?' x7 U return dwItemId < p2.dwItemId;7 ?; ~% q5 S; M1 e: N
}else{7 V8 l& g) f3 a& z8 x+ ]- [( {0 M7 C
return dwKind2 < p2.dwKind2;; t* ^% Z) k6 C4 c( g& [
}% c$ j: ]2 f8 w! B0 \
}
3 r1 A! [8 M; h ?, Z$ j};
) x' ? v" _) Q* Q& X* ]class CInventorySort
' l9 F! t$ l6 R- y, G{7 c C* _+ t1 y" `6 ]
public:
2 o" X9 o' ]" I. }CInventorySort()
) w B2 G/ b p" z! R/ z{- @) N- K* w; |$ W
m_dwPos = 0;
9 j! C" v' u4 J' R3 H8 M# o3 Q}
- i. t$ p$ c: q! h. R~CInventorySort(){}. Y6 `8 u S# h ]
private:
0 y" K% |( {7 i( j0 Q6 j* ~1 DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ D4 C. I9 Y1 e/ w* @& PDWORD m_dwPos;" C, l: {( C$ e* ?# o" m
public: O+ E5 B; `* u/ z5 Q8 l8 N
void Add(BYTE nIndex)
7 Z/ `9 C; d/ \: @ x! M{
* q$ y1 `. b6 c$ H if (m_dwPos >= MAX_INVENTORY) |9 I! M" _7 T& B5 n% p8 f
{
2 v: j* F3 V% M9 c9 u4 A return;
+ P) ]9 t! i) r5 ]* Z7 I }4 N9 C6 N5 [9 v2 M+ v
m_Item[m_dwPos].nIndex = nIndex;* ]4 v9 Z; f7 g q v: a7 e
m_Item[m_dwPos].dwId = m_dwPos;
6 A$ _/ y$ s9 l5 @ ` m_dwPos++;6 [. Z( A% U) x& b
}
8 X8 Q- ?1 J' y3 t2 _BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ {7 X: N- S1 k; v6 N6 ]- \
{! |7 x8 Y, k. e* Z
for (int i=0;i<MAX_INVENTORY;i++)5 ~+ f6 u: l, k2 ^
{; d2 A! X! o6 ~, D- I
if (m_Item.dwId == dwId)
6 B5 Z9 Y1 M: T& k {2 x+ Z/ B' k5 p- d) M- K
return m_Item.nIndex;
$ V2 B) B- S& v8 m& Y9 R }
8 w9 X9 n. c- ?" Q3 J1 ` }
) M/ g* Q+ d" s( h O return 255;
# W6 X! {+ G, j! b}% v; q6 M1 d( }. I: K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! \5 q* c+ y% k5 x5 a6 U
{; N: [) L% S h
BYTE nTmp = 0;6 w z: X1 o- ]6 N: N
bool bDest = false,bSrc = false;
! \! d, c; ?3 z& ]$ W for (int i=0;i<MAX_INVENTORY;i++)' ^; F' g' @9 Z. P
{8 l9 @9 P: m# Z( W+ K
if (dwSrcId == m_Item.dwId)0 f" c' r9 r) ?. d. [5 y
{
U$ I5 f" _3 v; b6 ^5 | //id相等 则 改变对应的dest和src V# @0 P$ c7 ]' r, C4 j4 J& V1 e2 Y
nTmp = m_Item.nIndex;
: H3 B d5 j# \7 K+ @. {/ g m_Item.nIndex = dest;
A4 U6 o2 Z0 o) K4 H2 J/ x6 O }+ t+ \$ F0 C# p$ [% B
}
' L* y# _1 m3 H* k+ t8 e, n //临时数据保存完毕,交换开始% D' [4 q% Q! `. u
for (int i=0;i<MAX_INVENTORY;i++)6 a1 U) L3 z3 R) Q5 F% b) R* E$ o; T
{( t3 Z7 ]) z; B( O7 m
if (dest == m_Item.nIndex)( ?4 }1 ]4 T6 ]. H2 t9 H3 H
{
! M( {2 T$ W7 N* N1 P //id相等 则 改变对应的dest和src
+ O5 |! o$ v/ H0 r5 }' W m_Item.nIndex = nTmp;
2 J% L8 o; G2 Q0 i- j- l }/ ~ }
7 @4 g" x+ Q4 d/ R0 Q }
- l" A4 H1 R9 h}# T+ c, C' h' w2 A- N" g! D
};& Y, s' P' E$ i$ k6 C
-------------------------------------------------------------------------* ?/ U, \, T2 r8 g- J E# d% i% K4 R
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. k+ y9 q" B5 Q( q5 i8 X搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 X0 N1 G1 U5 ^* |, W紧靠其上添加:
: y# w+ V2 m/ y a" wif( pWndBase == &m_wndMenu )3 s' U Q% f) O/ c" t, N4 i
{
# g8 C" [2 S7 i: G8 N: z switch( nID )
5 d" z: r! D; B% `. v2 s# x6 G {
0 k" S# K! Q+ x+ ^" J& r6 } case 2:
3 Z8 f9 H$ q$ T0 ?- p) j5 `' C {# t- G5 H' e+ G y: t$ K' m+ u3 _
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 ^5 a! W4 J e% t+ p' V1 o5 J0 M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! z; S& e. F6 O( K+ { {' R' n) m* S( P& a% r7 c5 X, |
break;
# @" [( H2 ~" f- @! P2 ^0 E8 j }4 ^& K' I* Q3 |/ X5 [
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ \/ n) n! L L( c, l1 {
{
( Y; c* g) x! ^ n7 Z; R% M/ n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* ?# ^$ d M$ r; ^
if( !pItemElem )# k% h! q: y2 R. v7 o
continue;
# h3 G; Y. p R; | if(pItemElem->GetExtra() > 0)7 K5 Y3 }5 h" q5 ?6 t# z$ w) x
continue;
: a& e( l1 Q+ O8 t/ k if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 p3 u2 p. r" U) @5 U* V& b continue;
5 }; \) Q p* |: y if( g_pPlayer->IsUsing( pItemElem ) )6 Y3 @! l! G, [# J
continue;- K0 q7 b- T! y& B0 h! X% E
if( pItemElem->IsUndestructable() == TRUE )
# A, N' S( v" {8 k6 R {
; X* V6 p! t0 {! K) R9 P g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 g+ g r B" {5 o& p
continue;
& S9 |1 c8 E6 c( i. i }
" L+ I" p9 I0 }* B g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 I+ j) C% Y# x% o
}( d- {4 ~; T7 {5 f8 @" i
break;
! C8 B: v- m! ` n3 P# d5 N }5 \3 P& r% A% b6 G. l0 l. ~1 N
case 1:* L) j. ^) E5 t$ Y. t2 l+ S" ]
{. c! p a3 z b! {/ p
//整理背包
( r0 ]4 c- u7 S( w. f1 C: F //////////////////////////////////////////////////////////////////////////
! d$ {- h' S1 ~6 a' O1 Z, z4 D0 v //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 u7 G7 E1 r, l
//////////////////////////////////////////////////////////////////////////- l7 r) @4 V, e {. B, \9 T) N
//////////////////////////////////////////////////////////////////////////
4 ~# F$ Q: C, c5 u+ E CInventorySort* pInvSort = new CInventorySort;
p# U# @$ T3 d& Q& j/ J vector <sItem> vItem;8 Q0 Q! s5 U6 L0 O" H5 w; L, F
vItem.resize(MAX_INVENTORY);//初始化大小5 O, }1 I) u% T# |- W- c7 ^
//////////////////////////////////////////////////////////////////////////
" B+ R8 l% @( g3 U! S //填充数据9 V8 {3 [# b) J
for (int i=0;i<MAX_INVENTORY;i++)
' }/ o$ i' r0 P L" s" z {
2 r& N* `" A# q d6 W: r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 V2 R; q* l% S' ]* F& j" Y
if (!pItemElem) R+ P- c7 Z$ J4 J' ^
{
; E8 s! e8 l5 }% f+ j vItem.dwKind2 = 0xffffffff;
! k- M/ |/ j; o3 r4 D vItem.dwItemId = 0xffffffff;/ {: k' U# e) c) |+ m
vItem.nIndex = i;
; ?/ x. R% V& C4 z& s5 ?0 {1 _" q! f }else {
7 I9 z! n, o1 n: p. } ItemProp* pProp = pItemElem->GetProp();
9 }- g' J8 V( d# P0 C vItem.dwKind2 = pProp->dwItemKind2;
% c1 p4 ?# I: H vItem.dwItemId = pItemElem->m_dwItemId;& H2 c N" ?$ Z8 P
vItem.nIndex = i;8 Y* O0 j; \ y9 }6 k
}" |7 k! d$ c/ Y5 q: \! a
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 @6 |- u V, T1 d
}1 ~$ h4 R1 m9 I& ]; x4 M
//////////////////////////////////////////////////////////////////////////2 [, a8 o6 C$ H1 ~; a& x7 A
sort(vItem.begin(),vItem.end());//排序
3 f, j, M4 c$ n. M' F( x //////////////////////////////////////////////////////////////////////////; {! L e/ x% {3 j9 _/ i) `2 A2 P
//交换
5 N8 t" t. q+ \& K2 ]; X- S$ k for (size_t i=0;i<vItem.size();i++); |: f; J+ N* D7 h, u0 G, J6 j
{
' [; e8 ?. L! l1 @ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; ?, @3 B! k) t2 u! u9 E pInvSort->Add(vItem.nIndex);3 m' {/ ^6 W3 s
}7 X) Z! {2 I6 D) n6 y0 }. }$ Y& ~; y
BYTE nDestPos = 0;* C% R# f1 O& D1 o/ t6 q
for (int i=0;i<MAX_INVENTORY;i++)3 S; x ^! \5 A
{
1 a$ O+ q! D, i& `9 ~7 j6 R( p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# z5 A. ` N! L4 Z2 v, D1 x
if (pItemElem)3 ~, A0 k* T4 v3 ?7 f) i4 L
{) R+ e+ u) Q4 b+ t' r
if (IsUsingItem(pItemElem))! A; B! d' p- f# w
{) `7 M! P; i7 z$ B+ d4 b6 ~
//这个位置无法放 }1 c9 q& y2 L3 a7 w1 h* J5 n1 f
nDestPos++;
: N. E* D& C) ?: U }) ^9 S" D$ L# K7 ]
}
|9 P2 L5 f. C. \0 l BYTE nSrc = pInvSort->GetItemSrc(i);4 H( Z. M3 |% x3 U/ ~
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( |" V5 x& Q& ]* L& ^ if (pItemElem)
8 R' `2 w7 c8 {2 n' T {
9 o; ?/ M6 O( n7 |0 V if (IsUsingItem(pItemElem)); k, A$ Q9 L K
{& }4 _) i: m7 z/ k) R3 S
//这个道具无法移动,跳过- {% P! Z; R1 n* {
continue;
/ R6 [3 M. v+ _; } }
1 g) M% d% a& s4 t9 y" |+ K }else{* r' Z- _! X6 D) ]( G3 m% {
//空位置 不用动
: d9 a- @" e" _2 V1 Y( k$ T8 y$ S continue;/ r2 k8 @* O9 |
}: Z$ Q, c. A: [7 l& @ w
//////////////////////////////////////////////////////////////////////////
8 b+ H2 U) W, @$ X9 d //开始移动
' e* A# |, m7 T if (nSrc == nDestPos)( x5 W$ @0 z+ i' X- u1 D
{
5 P' T+ c! e0 L: n, y0 C6 E //原地不动
" ~$ L! }2 X5 }2 s; y/ s) {3 S, U nDestPos++;) P5 k! s1 F) ~0 m& c G2 l, u
continue;" h* `* x, D! r- \. X5 V
}
) y# h8 w$ ]% i0 S) g pInvSort->MoveItem(i,nDestPos);- z' v {$ o: p2 N. G8 R* \
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% Y) z3 ?3 r7 A2 l% u1 a1 X
Sleep(5);
( {- d* q( L/ q( c6 {0 Z: o- z //Error("移动 - %d->%d",nSrc,nDestPos);
6 A' h" }3 x) Y! T2 [" Q e nDestPos++;0 w2 R' R0 i x5 i8 M/ x
}: s% Z$ |- ^) _ a8 J
//取第一个元素的信息
9 t# M6 z$ |& R7 t* Q* n3 y /*
( E* {8 t, q! O: D* P$ ~ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 R* f* p H$ J2 Q( [ {
+ V- s8 W0 \- ^, S' | ` Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. K& Y h7 f6 B5 B n! }+ S! A0 C g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 [9 c2 p( L, A" j2 y9 q
}0 |, I* M6 @% T, L/ f" N0 X
*/! E9 W5 a7 H v& y' T& X0 K) d
//////////////////////////////////////////////////////////////////////////
2 ?6 }+ m. ~. }4 W+ y* ` break;
4 \7 g( t6 t, s/ M/ T }1 n4 U+ {+ u3 O; P/ |# y3 W. w
} & ?% c, l% y. f z! t/ M$ N& I
}
3 Z; |( ^ |2 L0 e$ d: Qm_wndMenu.SetVisible(FALSE);8 a G3 v' d% j+ x1 v( g
. [+ J- ?. y% {4 V! y* u" R
--------------------------------------------------------------------------------------------------------! ~2 ^9 D( A' A# U2 S
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 e; @" O9 j6 B; k/ X2 g1 [* N0 v{2 S; l: u, K' r: t. O
BaseMouseCursor();, P6 Q3 d: L$ e% K4 K0 y4 C$ Z
}, f- Q" J& \/ Q' w/ Q
在其下添加:) |0 F) x a r$ j
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" j- P7 ]7 q! k4 s8 X! ?) h
{! b+ c. U: M6 x% m- W5 y
m_wndMenu.DeleteAllMenu();
- T C) O/ p8 Lm_wndMenu.CreateMenu(this);
0 P' N% S& g' K. ?1 S6 P# e! Xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: N" x1 w$ P4 y2 U1 h% v9 F1 g
% \* ^$ F( H) I2 H y! oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 C) s6 W/ p& p9 p& ^
{
3 H. j; ?$ m8 _- P9 Q7 U, j0 |# n //P以上级别才可以删除所有道具
( u. Q, b2 D: Y1 V; u$ f9 { m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
}4 w7 X( P, H8 `/ h4 E}" e9 M! \ o4 Z4 @. v8 ^- W
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& ^% u) f) \6 y/ F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ P+ R9 I% ?. @+ i: Zm_wndMenu.SetFocus();
! O- o6 V; @% b! N! I}
. d4 _; [+ c F7 t2 a8 G------------------------------------------------------------------------------------------------------------* S9 n3 J) |8 D6 ^& ?- [
*************************
4 y/ h5 z: l- }: WWndField.h文件
# x) x- H1 C/ R*************************0 x$ M6 L- i7 A
搜索:BOOL m_bReport;
' K0 ^( _2 h4 T其后添加:
4 N# K( \8 }% m j, \" z) _CWndMenu m_wndMenu;# O# h3 \* W# V/ T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* B# W# X: f( w& x* i其后添加:1 H* P1 w& k5 n& P# u7 {) R0 D
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 C7 _) j& ?! d7 S% ~
' I6 v7 C/ s. |# D3 n0 Y: [! Q
9 _" N! z' Q! b |
|