|
|
源文件中_Interface文件夹下WndField.cpp文件" P+ \: D- I1 C7 `" u5 G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! t Y8 _5 c5 s- h. {% P1 [# [) l8 ]/ L
struct sItem
+ C0 N8 m* `7 d/ j7 x; j{4 ~3 M& I2 ^) ?1 _; N" f. w- ?
DWORD dwId;5 s9 D- l, C6 t x
DWORD dwKind2;$ ^/ R8 v! m' y8 H. e
DWORD dwItemId;
+ `/ e7 @7 W3 J1 UBYTE nIndex;
; W: m; T- a& K/ Z8 csItem(){- M5 ?! Y& _( z4 {
dwId = dwKind2 = dwItemId = nIndex = 0;9 V" R; H, L% Y
}+ ?. {3 r5 e! X
bool operator < (const sItem p2)
& Q( H+ n! u* B+ n4 q$ q{0 A. O- ]9 H2 a. P% b
if (dwKind2 == p2.dwKind2)
9 p& t& `+ E& j {
; D8 {: Q6 h# E; R2 m/ v return dwItemId < p2.dwItemId;
& G3 l. g9 N% B" s3 j- W }else{
: `0 A$ A" h* E) }3 Y% U return dwKind2 < p2.dwKind2;
/ [8 f' T- g& Z4 @9 x5 l }
6 g5 E# {' \6 A1 T* |+ X& L" p}
2 Y9 v# F4 q, o) i, ]+ {};
# {# z" d0 L) Z1 m v( P$ Aclass CInventorySort
6 h2 l4 n6 a" b+ y# q{
) x" a( e0 a6 v5 p ?4 Zpublic:. j3 Y+ L% G2 I9 t. X
CInventorySort()& B) Y( s, r8 ^( l+ F4 _ |
{
! k( `' d( F7 ]3 \: ~6 M m_dwPos = 0;
4 I. s3 u! ]9 X- o$ |& U}- u2 E p8 m) p7 {& j4 a( L+ h
~CInventorySort(){}, X! d# r; D1 C& u' l3 F- H6 j' u! Z8 j& l
private:
' F5 f# m# N5 osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- F7 J% S. X9 Z1 ~$ ~DWORD m_dwPos;
6 c, W" e6 L2 O/ Vpublic:
0 X+ P0 e( \" N9 g. A* Rvoid Add(BYTE nIndex)$ W; a' s) Y9 D* F- u9 _" ~% p d; P1 j
{4 s) e, M/ n( e2 u0 e% w
if (m_dwPos >= MAX_INVENTORY)/ f& K- {! q& x/ n9 R3 `6 `
{
: E; p N X; [. s. a! x% E return;
% G; s6 v" l6 T, @# m( b$ s }
' u% `6 V8 ?% r" {6 z* r0 O m_Item[m_dwPos].nIndex = nIndex;
* ^: w5 |/ K) T5 n m_Item[m_dwPos].dwId = m_dwPos;
3 A: F& I6 z; z/ O7 _* ^ m_dwPos++;6 ~/ }# b$ |1 M8 M; L
}
T* `' Z; ^# q! E6 WBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 W+ K! S1 L8 N5 @8 _7 z! s0 A{
! |; X) A, e: d: y for (int i=0;i<MAX_INVENTORY;i++)5 k( H0 S" P# e& ?# Z& T! P9 [% ^
{
" Y- B' g& P, H6 O if (m_Item.dwId == dwId): R8 W# ]1 g* Z- x4 \% R; r" n
{
' J- a6 h1 _- f, `, }3 [ return m_Item.nIndex;% \4 X/ R0 `8 d% A% H
}
: t" i" m- F6 d8 o }
/ R& `* Y& x R) ~4 _ L; T return 255;6 Q* \1 s. q" U" n: Z9 s
}$ y) S( D2 t* b5 n: X" m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 x5 ~& I, a& `) v; K{( y7 Y+ ^9 j4 H( ^9 }5 T- `
BYTE nTmp = 0;
7 u. P4 ?/ T$ m bool bDest = false,bSrc = false;- y5 C- M$ n L) t( n1 ?% |( I1 M
for (int i=0;i<MAX_INVENTORY;i++)
, ^, j, A3 P3 d3 E# A# ~ {/ y5 ~' c, Z! F0 F
if (dwSrcId == m_Item.dwId)
1 [% G6 ~5 r) @0 B# ?4 J {7 A; m2 J7 y+ z8 v- t
//id相等 则 改变对应的dest和src
* i9 r, E8 \: ~' W, `' a9 f2 J nTmp = m_Item.nIndex;
3 R9 g) n$ @) v, Q' k3 |9 L m_Item.nIndex = dest;
) l6 b6 v+ c( j }
4 m. A. P' O8 X. Y# y }
6 v; ?. D! E4 b: b! O7 O //临时数据保存完毕,交换开始
! d: E$ B, q& L; ]9 j for (int i=0;i<MAX_INVENTORY;i++)6 ` y6 V) W4 f' N# g
{
' `6 o, w$ l( g6 V4 R! v& W p7 X if (dest == m_Item.nIndex). a0 {5 L1 K' y: q
{
* I$ h' X0 c- H& U- x! Q2 l //id相等 则 改变对应的dest和src6 H+ ?2 t2 |5 V, M+ j/ J) ~
m_Item.nIndex = nTmp;
, Y) S* ~2 a4 ?1 q9 d }
5 W1 q' h; \8 |7 f5 Z) ? }
% W8 q5 D5 E* Y6 Q0 a}
3 e: V5 M# u7 g) [. F, ?};$ r2 J2 F! N$ q
-------------------------------------------------------------------------
, g# E& {) h% c" ^3 u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 y( y- X9 J) Q3 X. [7 c9 a搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 y! o; J- b' Z7 E) Q7 B
紧靠其上添加:
4 z; W: S" [' p# j( e3 fif( pWndBase == &m_wndMenu )
* T) f2 \& A! n, P& ?, N1 k6 E{% g: D' r' _' j) q
switch( nID )
* `' l9 n& O( X8 I {
4 |$ P7 N: n# O9 [0 e' {- N case 2:. ^1 ?9 x. M0 a
{
( p* v4 O, b5 V( s //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: C Q9 ^% `/ i; |# f+ x" U9 L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 h+ X* H/ p+ `! T! D2 X% u9 Z0 _
{
; O7 X+ k! z; O' u) S. v break;
- G' \8 ]4 I6 k( O7 g0 x }1 E* a2 `' R: v2 ? c H6 E
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ s$ m# q/ i1 {) f3 G
{! f, Z3 T& L! g( }% m5 t& N
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 F3 @. T; g1 E y( M if( !pItemElem )
/ ~1 P4 N/ k! W/ B+ Q5 y8 q continue;
! {" a% c8 z% A2 Q2 t3 ^ if(pItemElem->GetExtra() > 0)
, L/ @8 ?# u) E! o7 [ continue;
! P0 a( M+ ]' ^1 C) c if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * E2 E+ M/ O# @( U7 e7 i
continue;; W8 O. t3 q n* t' B- H/ l" s6 W/ x
if( g_pPlayer->IsUsing( pItemElem ) )3 Z u& H& M* [) R4 b' g/ B6 t5 ]
continue;
& z+ j5 o$ ]/ Z1 x! s& L7 e6 t if( pItemElem->IsUndestructable() == TRUE )7 \4 X6 g: i1 y0 \
{
1 A7 H, Q& d; d. M/ F g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 u' e: w* o# w0 I continue;) @0 l2 f0 P2 r4 j# `4 D
}: |6 a- G+ G, a7 X
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' w6 J g0 r% i$ x# _( s k2 s8 ] }
Q1 i9 Q- x+ X v3 X break;
% Q. a' L) R/ S* `& u1 ~% c }% T$ o' d2 V! k1 q4 x7 u
case 1:
% d* k" H" s0 ]* }, C/ B: f {6 X) k4 X, f5 p2 b) |
//整理背包
; x5 Y& C& W" [1 t! ~5 Z! z //////////////////////////////////////////////////////////////////////////! H. M$ ^* K9 z' s
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 b, F/ f5 G9 D2 d7 J# W; P L1 x
//////////////////////////////////////////////////////////////////////////5 |4 s/ ]: b* z9 B
//////////////////////////////////////////////////////////////////////////
. _& f0 P) x# V9 E! S. L; Q3 A5 |$ v3 v CInventorySort* pInvSort = new CInventorySort;
7 m- l1 J! T# b+ N/ t" w8 y: X vector <sItem> vItem;3 Z7 Y1 M7 V6 d& y
vItem.resize(MAX_INVENTORY);//初始化大小
$ c9 J0 m j) J' L$ T6 t, N //////////////////////////////////////////////////////////////////////////+ {5 r1 U% T! @" ]% s& z
//填充数据
; a3 Q3 F0 r0 i5 r for (int i=0;i<MAX_INVENTORY;i++)
+ z1 h" h8 ^+ v g {9 S" B" h6 q6 D. k# L" j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 ?, u( n4 d$ Q* ?4 o' z; v if (!pItemElem)
, ?" s6 a/ M9 e# V) H {
+ T# T6 R$ j" N; L& G- b) @, S vItem.dwKind2 = 0xffffffff;
" \2 J' {8 E0 @9 b vItem.dwItemId = 0xffffffff;
# N/ ^ q' [ y% z vItem.nIndex = i;5 h; y8 H* n5 S4 C+ I3 ]
}else {
# |4 E8 k& N" j8 H' \ ItemProp* pProp = pItemElem->GetProp();
2 N2 n. q* o+ |- h8 z vItem.dwKind2 = pProp->dwItemKind2;
& K, z( n; V$ o vItem.dwItemId = pItemElem->m_dwItemId;: a4 P+ ~: Y5 w) A$ j
vItem.nIndex = i; y; k# U" o' E& ?: b* E5 V f
}
: [* N; o% f1 i# \ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. K$ L& Y) _. b: I2 ~- Y1 S
}& c* ^/ q, W6 ^3 u) ^6 ~2 H
//////////////////////////////////////////////////////////////////////////) I, P+ F1 o' }
sort(vItem.begin(),vItem.end());//排序! n* F9 Z" l% q
//////////////////////////////////////////////////////////////////////////
, @& ?+ Y, g, ]) L) F //交换0 T* ^- b# O7 s: D" ?* n% Q
for (size_t i=0;i<vItem.size();i++)
' U1 R0 Q9 p3 d! T0 T {: n, _: g l& ]( [. c
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 f- C6 K% F+ R- I2 f7 t4 L
pInvSort->Add(vItem.nIndex);9 d' T0 x9 T0 e5 r# {2 c
}' N3 F1 g1 M' W) w5 H8 d# S
BYTE nDestPos = 0;- n. N2 T8 r8 j6 A I9 K
for (int i=0;i<MAX_INVENTORY;i++)" D( a, ]' r7 R6 ~% L
{
% Q3 |* {( e, ?/ ?8 h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ Y0 O1 ?) G2 |% ` Y) o) n
if (pItemElem)0 u4 K8 H0 \& L' ]
{
. W6 \: V3 F1 [: @0 e7 ~ if (IsUsingItem(pItemElem))( p: B' N g5 j% C
{ [/ b0 D v: i7 [+ ?* s& `8 Y
//这个位置无法放
9 Y0 [% P3 I- w& ]8 w; J nDestPos++;
) j8 d* ]+ A# A- ] @ }
) _$ m' ~7 V, ]0 l: g }& T+ l6 {# _* Y( u' r
BYTE nSrc = pInvSort->GetItemSrc(i);
0 E- x6 s3 D, n8 g pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& C7 E0 L5 t9 f if (pItemElem)
! Z4 j3 |* m0 i% q! M* r$ O0 r2 t {- L# y3 L2 K+ }$ w+ p6 l5 Y
if (IsUsingItem(pItemElem))' E. p1 F( Y, M. U. S1 }
{& ~: }, l* {! h- R8 t6 f4 A+ ]% P
//这个道具无法移动,跳过, H {. z* p% H( \- i
continue;
" l% [+ }6 G2 U; H: ]* n9 Z9 D }) x' r$ X0 L# H4 j& w8 t. W; V# w3 T
}else{& H+ b6 c( D' q+ ?% m2 L
//空位置 不用动
- w0 }/ u, y W C continue;% Q) g& J' ]! Z2 F) S; p: J9 I2 b( p
}
" N% z9 ]" m3 t) E2 [9 P. M //////////////////////////////////////////////////////////////////////////, [6 L6 k6 V$ K q; o* c) g5 w
//开始移动' E" q1 u* G: E3 p# n
if (nSrc == nDestPos)( r0 W2 I$ Y9 Z) v! M9 {
{
7 r& D$ c9 i- B //原地不动
8 `% P5 _. B/ {7 X" x nDestPos++;
. ?& \& L/ F" H5 ~5 r9 h continue;
9 D1 z7 L* S& h' _ }( p8 E4 m7 G( O+ Y# e
pInvSort->MoveItem(i,nDestPos); I( v: Q) h+ a) r. s* x& |
g_DPlay.SendMoveItem(0,nSrc,nDestPos);) L6 A0 Q2 r* {- q2 Z
Sleep(5); M+ h3 ^# U( \6 t" ^! b1 F
//Error("移动 - %d->%d",nSrc,nDestPos);
- ~/ H% q5 h# ^' _' o; g nDestPos++;
# S H1 Y1 j; u) c& o Y" |; m2 W }
5 h6 w% R; v5 B0 j# a) j6 o //取第一个元素的信息
+ d8 B! G3 D8 b: d6 v /*4 Y& F! B# x. D
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 S: O! v2 J. I
{ h6 B+ W0 R2 x/ D! K( C' D' a
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 l2 Y/ h0 C: d- ~. K9 \, D7 P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 ]' O5 g. z, w6 g7 Q8 _8 p }
N! f2 t# C, f) u7 v */% [$ _( ?1 x& Q* S
//////////////////////////////////////////////////////////////////////////9 d5 h# |& K) e8 G n0 W
break;. o: B+ o) J: P
}- {6 c+ Q2 L# Y, y& q% @
}
7 O `* k% e4 u1 P; d0 w/ e}
* g: c5 ^$ H% d0 i: X7 f2 \m_wndMenu.SetVisible(FALSE);
0 ?$ d. z9 T7 K$ ^* x& E% u: {2 U6 e' o% R8 n7 u5 q( G6 D
--------------------------------------------------------------------------------------------------------( C9 [3 C6 U1 |/ T' ^
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 H4 S# T" g' I w$ L* X) {" B
{
0 ~) p; O* I- gBaseMouseCursor();
. k' }: J7 n' n; P6 s) N! Q- @}
9 Z Z. p/ h4 \& B8 |( H在其下添加:1 c ]0 t! @# T* N" T$ n( A( h0 U
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& c' z: X T3 S( K) @
{
, n9 w8 ]" _' o+ M' z: om_wndMenu.DeleteAllMenu();3 x; q% k( m- ~
m_wndMenu.CreateMenu(this);+ p; B* {$ M2 v2 u
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( }$ t! V; m7 z3 E/ R+ B1 x
- s1 T% O* ^# o. e% l9 f! g
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# e/ b, y$ R; H+ s! [) r W{
% P& u( c/ M* [& D4 E+ \ //P以上级别才可以删除所有道具
+ ?. ~) _& A( |+ o$ P2 j( X: ]1 ?2 _! q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 x. q) ]+ S7 U% O& [" n4 v' u" I
}
+ \$ j5 V' {" Y2 _m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. X7 V* b2 m/ h$ A7 tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 [' h1 w( h, Y9 F x9 G+ A
m_wndMenu.SetFocus();) m0 U3 x! v' J' k1 `8 M8 @
}
( I! t* I+ I3 n y4 j------------------------------------------------------------------------------------------------------------
5 q; s4 K# r' l! ]" p: E+ X*************************
. q, Y& E8 i) x/ A& {( bWndField.h文件$ U% I: z7 H) R% {5 T
*************************7 Z9 e/ R. @* M) P; e
搜索:BOOL m_bReport;+ x: R; h+ u2 t9 T- r( v9 \. T
其后添加:
9 Q: @6 l7 }# i! L0 B7 ]' G- _. TCWndMenu m_wndMenu;! x: d# |( K+ j3 h/ ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 ^" ?- Q" d: |* z其后添加:
/ e" m- n4 z8 t0 I7 B ?1 @" `virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 ~* Q0 x" @8 I# R1 W
% V& |3 E) y4 i$ p& L+ u3 E' y2 u6 |0 E5 V* r
|
|