|
|
源文件中_Interface文件夹下WndField.cpp文件
. ] e( m Z+ R搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. w+ Y- i) l! b0 p. A4 q& M6 k
7 i/ ?9 D" k2 ~( q& g! Astruct sItem
+ v) o: F6 i+ Z; V& {, h; `{3 A" @ [- E. r6 Z) J9 h; h4 @& M" D
DWORD dwId;' s, b) j) f, n: i) p
DWORD dwKind2;
0 r4 m) ?/ U* W5 mDWORD dwItemId;$ C% v9 {" J* r0 J4 }- v- m; I. z
BYTE nIndex;, d2 }4 H( e( q
sItem(){$ k Z' u/ r5 Z2 J
dwId = dwKind2 = dwItemId = nIndex = 0;
F0 f" G% O6 ~1 a4 I( q}
) m* z$ ~( q* d, [1 O( K7 Ebool operator < (const sItem p2)2 S9 }3 B+ F5 y" u9 ?: o
{1 _5 S& n7 S- Q& D
if (dwKind2 == p2.dwKind2)
. b: v9 h3 m! B {: y$ n" j4 e; y+ X# V# A$ a2 d
return dwItemId < p2.dwItemId;. c! ~0 E+ H1 |2 ]% D
}else{1 H1 [$ N* n8 Q4 {
return dwKind2 < p2.dwKind2;
3 _- O2 G7 u( I1 S) m }% w9 w. l$ x: C1 h7 b# s
}
& W# |: m0 x' G3 v6 S};
, c% M' w. N4 H( J3 ^ Zclass CInventorySort
0 ?# l8 B: G1 o, ]( n{
) O! b# v/ n! ~1 |& g2 g2 _2 z3 mpublic:
8 d* D) p* R; P8 }& G: `3 gCInventorySort()! c, E7 w9 o$ p/ B4 ~$ M3 b
{
: U y6 N9 z9 m ] m_dwPos = 0;% Y1 t% _, u s0 o" v
}7 y. `- @5 r, @) X* L7 Q
~CInventorySort(){}% Q+ D5 E% i, R" A. v! m+ X
private:
1 X4 _# T& s! ]( ~sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' E' f+ D$ ?) s9 @. x9 K# y; @/ i! gDWORD m_dwPos;
5 n Q5 ?8 j5 `+ d% E5 Y3 Q) w- F' @6 upublic:( t) Y6 X8 W0 x
void Add(BYTE nIndex)
' y! M, p9 r* D$ Q2 {& d{
2 y3 q; m( t8 E0 r2 ~; j5 e+ D if (m_dwPos >= MAX_INVENTORY)1 Z7 a2 {( g7 s' W) n2 a, J# g. {6 `
{
. ?2 j5 l6 H e: ?; v# K return;6 @2 W, x8 Y. {* h+ M, G
}. h- p3 ]1 [6 G. h8 F
m_Item[m_dwPos].nIndex = nIndex;: }& C% {/ B$ Y: q. n
m_Item[m_dwPos].dwId = m_dwPos;4 j% H+ i; O# z: f# z0 |+ q
m_dwPos++;
1 b2 X. R- N" m8 x}
( q- { U/ Y+ f; V; R1 {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 S/ W x: q* A% G) R/ f8 h! D/ Z
{/ P+ o3 \1 G4 B, b4 U4 A* r: r
for (int i=0;i<MAX_INVENTORY;i++)+ ?6 i% s& D7 ]
{
! s% [' n( V, g7 H5 l if (m_Item.dwId == dwId)- D# e( j% g* b/ i
{
5 \5 Z9 W8 R8 \, T return m_Item.nIndex;
3 C2 o+ n+ K- I P }2 _( C7 C, R R0 f
}) R4 Z5 h% Z7 X" H
return 255;
- i: |- o7 u, K( [}+ p/ |0 u( A, ?3 q: Q% v8 @5 m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* _2 L" ?% |" i* F+ q* w& r{
F+ R/ g; v( D* Q BYTE nTmp = 0;
0 U6 ]4 Q* S& N bool bDest = false,bSrc = false;8 B( m' p( m& b, H5 R4 ~2 q( f
for (int i=0;i<MAX_INVENTORY;i++)
7 p. z; n5 T- K% T8 j3 g {( z4 X6 r7 s( p* t: P% e
if (dwSrcId == m_Item.dwId)/ ]# y) v8 _) a) A5 R, i8 M. x
{4 S" M$ r) s! ^1 y. Y( g7 x) M
//id相等 则 改变对应的dest和src
8 g/ e- C+ w/ ~( ~3 W nTmp = m_Item.nIndex;
) F# A( h( r) r2 k$ b m_Item.nIndex = dest;+ ^0 ]" ?# U0 q4 e
}$ E/ R& a) ]2 f3 s
}
+ k8 r' ]9 q$ U1 F; ]9 t. { //临时数据保存完毕,交换开始0 \6 K: P$ x. F6 T4 B% N
for (int i=0;i<MAX_INVENTORY;i++)
; s+ p. N. R* A9 N( p% _ {
2 i2 h& \/ o. r# a# R ~5 ?6 r/ L$ a if (dest == m_Item.nIndex)& ~ F$ K# Z! }$ V0 Z
{; F- H- g$ N( }- ]$ f
//id相等 则 改变对应的dest和src
+ N. k: I+ S3 } m_Item.nIndex = nTmp;
: ]7 T- K3 v1 b, A$ z }! b- c. H# T C+ ~
}
( l4 B$ u( P/ G, g8 w1 c6 C}; V g0 N$ j5 \9 e/ }) r0 V
};4 d |4 w$ Q& L# S
-------------------------------------------------------------------------
! d$ Q1 m. J* j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" J, K7 b7 @( G0 l
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
L1 u. B/ F- z紧靠其上添加:0 h; {; O- y' D* ]0 ^+ M
if( pWndBase == &m_wndMenu )
+ R) }) x X& R% l{0 b. ]; |3 b' q2 ]; u
switch( nID )
; z& T9 G$ }; Y {. |& Z$ x8 v5 X& }0 y
case 2:* C: \ H0 N" x m$ l c
{6 W1 y- K3 b' {+ B
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 X) G& m9 z5 L% y" V4 C if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. K. |" q+ ?2 @# p {
- H/ J3 L* d- u( e! W2 j# L break;
6 J, x. ^5 N* j4 Y$ y }
% Q: ]2 o9 S6 a5 V! e6 b for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 k& ^7 g/ B# x% F
{1 n$ C( s @4 X' I5 L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 \9 }8 K" J$ L" ], U4 ? if( !pItemElem )" ]5 U9 G. R9 t" U) d
continue;
3 ~) O# k D0 l- Z! {! E if(pItemElem->GetExtra() > 0)
; P* ~: G$ S: k continue;
3 E4 c8 _( @6 ?4 p. F if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : e2 c7 v& D' t" J9 t1 I" a; b
continue;4 W0 T" w% K0 i2 V% ^
if( g_pPlayer->IsUsing( pItemElem ) )$ A9 U# `" c# E! |" p. a
continue;2 ^: O$ F5 Y; |9 Z2 B& ]
if( pItemElem->IsUndestructable() == TRUE )6 I- E: k% Q+ |3 N
{+ w/ O2 t7 w5 r0 |
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 e- Z/ U5 x! L continue;
' z6 l" j5 D7 U0 F3 @; [) i }
+ I# Q$ y2 K2 G' R' l) ~. p g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& m! x0 \8 F& I3 ^% u
}
1 C2 A( W( K5 h- n+ o break;
- V2 u$ F5 b$ b }
- e6 x1 b9 y8 q9 C7 [) A; H2 n case 1:% D/ s, a1 n3 x0 q4 p
{
) _ J4 K7 q6 z4 y3 n //整理背包( X* K0 U/ n, d4 T ?$ R+ ~
//////////////////////////////////////////////////////////////////////////
* a3 \9 \& T- W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 [+ g2 `3 w. d, P //////////////////////////////////////////////////////////////////////////
6 m2 |% {( X$ S& H4 s //////////////////////////////////////////////////////////////////////////
5 @' b$ h# R0 B$ L [ CInventorySort* pInvSort = new CInventorySort;
% r$ z, K2 A6 N( T4 g R% J0 Q H vector <sItem> vItem;+ P8 X0 G) P; g0 h6 _
vItem.resize(MAX_INVENTORY);//初始化大小
- n7 S9 a$ y) _% ~8 P/ b Z& c //////////////////////////////////////////////////////////////////////////
4 Z v& Y" b0 x3 m, j% b1 Q6 Z" o //填充数据
7 \4 q8 ^5 z R3 y for (int i=0;i<MAX_INVENTORY;i++)3 a- w) m1 e3 C6 d3 ^4 E
{
* A+ I; e9 s7 k# n) o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* i/ h# W5 x3 R r! M
if (!pItemElem)
- G: r" b5 R* R; N% e. w% a# \ {3 i _, f0 b; J
vItem.dwKind2 = 0xffffffff;
$ s2 ^: L5 a! |7 W/ Z7 s vItem.dwItemId = 0xffffffff;6 P7 \, m% [7 U/ o# A4 \* Q' A# ~
vItem.nIndex = i; k$ B! D4 X* o& b/ A( ?
}else {; C7 R# }, V* a" X7 n
ItemProp* pProp = pItemElem->GetProp();& h" H$ \1 X! g$ y
vItem.dwKind2 = pProp->dwItemKind2;
- h U# ~ f' h' T% Q vItem.dwItemId = pItemElem->m_dwItemId;
4 D3 e: p- u+ l2 X vItem.nIndex = i;
' j7 P" D, x7 P }
( ~& V1 d: v) @% \5 M //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: |" a/ B) U- c8 V }
% R1 x1 S. y F* V3 g; S" T0 T6 b //////////////////////////////////////////////////////////////////////////& I+ D# I- ~& W! R
sort(vItem.begin(),vItem.end());//排序
+ t: L% G j( a P# Z$ ]( M+ r //////////////////////////////////////////////////////////////////////////0 c9 z; {( ]: H( F" b' @; ~
//交换! ~. A" U: y' a: ^1 N, O) B: M
for (size_t i=0;i<vItem.size();i++)9 ?2 K4 h8 ?, n: |2 |) W
{
3 O& [# n/ j7 s5 b" {3 T7 i7 Z- Y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* q% Y6 U H/ C' T
pInvSort->Add(vItem.nIndex);' L" m# b1 H* O3 H- i
}( E! Q+ `3 G+ N, F1 y8 u
BYTE nDestPos = 0;6 u( c* s: E& E) e: `9 A
for (int i=0;i<MAX_INVENTORY;i++)
. u5 i4 j" A% e/ p8 `5 W$ J6 p {
+ L# s6 ?: v/ }, j* g( _8 } e; | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 V) x$ \6 R( T+ E) n! ? if (pItemElem)4 f8 W+ r. f% c" x
{7 j, e, J* M; U# o: c8 k3 B6 I
if (IsUsingItem(pItemElem))2 G6 ?+ c1 w' ^/ h3 u, } J
{
1 P9 t5 Y, s3 a& c8 A( I) Q% J7 S //这个位置无法放* s! F a+ Z* M P& @3 ^
nDestPos++;
# b+ x& ^) r4 o7 z' ^: ? }2 B9 k" g; H" P. @9 G2 t: `( d
}* G/ u5 w" B: f. Y1 T$ E
BYTE nSrc = pInvSort->GetItemSrc(i);
9 B& d! H! `, V Y' T( N9 y- D pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 m5 [( }( ?% |/ Q- y# c if (pItemElem)
( Q |, l/ c5 Q# e2 Q {
/ Y0 B x$ {( V if (IsUsingItem(pItemElem))3 i- d8 S& R# Z. X! ?0 M$ i
{
' Y. f u1 v6 e- i& [ //这个道具无法移动,跳过* S% A4 v* D2 i. H5 o
continue;6 r% ]9 W1 n6 H4 r; I
}
, _3 R7 Q1 @; J+ ^7 g( ?9 n }else{+ L5 V6 R. T' x# {0 ~
//空位置 不用动. K @, j9 E z3 l
continue;, L' C& }# |! _
}
" ? s" [& }6 V7 A- u4 U //////////////////////////////////////////////////////////////////////////9 P, j, h6 A# Y: ], O
//开始移动
' S l1 A0 r0 a! c if (nSrc == nDestPos)
+ n7 J9 A- j& D9 [: x/ K+ |- a% D {! z' L6 c5 ?6 A/ A Q& C1 g
//原地不动& h4 H/ W8 P* [$ w, c; v5 J+ ^9 l
nDestPos++;* ?# Z& Q! `- C
continue;" j& _2 m# u: D F+ V! r6 E& k5 v
}( Y6 K9 R1 i4 P; X8 f9 D- U& [. b
pInvSort->MoveItem(i,nDestPos);" B/ g1 `; F$ Y% j5 Y6 R
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) n0 D& j$ a, p Sleep(5);
" j8 }9 R0 [+ h* O/ f //Error("移动 - %d->%d",nSrc,nDestPos);
# S. w" D' U4 H: p0 e nDestPos++;; M# V, M7 c7 z3 T5 n
}- ~+ L) \/ Z9 h4 A& r+ L
//取第一个元素的信息# X7 `5 R6 k7 x+ B( j/ _/ ?, y
/*7 a% e7 H+ u- y7 o J
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 J2 g) I! A; V! T# c. ? {
* a; m- h7 ?9 T% ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: M, h0 P1 v2 w( C7 N, N: f- Q- \/ O
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' P/ ]- D4 C, G5 n }
' d; A1 x4 p+ u9 e */7 p6 r% ~& k$ G1 C
//////////////////////////////////////////////////////////////////////////1 A4 J0 t& q+ Z+ k. b5 G
break;- q( x: @ L: D/ b& o+ r6 Z3 b( L
}9 g- i9 j$ h8 y/ _( b
}
4 v9 q( ]. ^4 h+ r}
% x" o8 [; h0 u/ u9 @m_wndMenu.SetVisible(FALSE);3 y- k9 e* k7 k! w ]
& y& Q1 B- N: f x* D$ Y, y1 J--------------------------------------------------------------------------------------------------------- Y# h' Z( x; ~/ y$ x- x( F6 x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# G! J/ C B5 K+ Z
{
! n! _2 f4 S6 `. B X2 }5 L3 \BaseMouseCursor();
6 d$ b, ]& }) m2 [+ o6 {}: s* l# s" T+ J$ B& `8 N& P
在其下添加:6 j' X, R: j ^' |8 s# ?% o
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). A- {7 l# |) P( k+ A3 ^6 n
{
7 E- r: l8 r7 A. l/ N+ d2 g7 M% wm_wndMenu.DeleteAllMenu();5 M6 D1 P" g- U) E* i+ o% a
m_wndMenu.CreateMenu(this);
3 e! I! ^' s8 u2 Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* T5 i9 ]+ ~1 {0 e
( y: X( Q! D$ g6 Qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 K; d" l2 z/ b
{
$ I: C( `# \( {2 j6 j //P以上级别才可以删除所有道具
0 r R4 S) t/ i8 V4 W m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 u/ Y, i) r( o/ p! m3 x5 z
}3 {6 ]3 Y7 e) @; b, N5 ?. R
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 H" o" I7 K' E% h6 ?' Bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" H2 s4 I4 l' N* z im_wndMenu.SetFocus();; G7 C- ` g* i. h2 [8 M
}
. \3 J3 `0 |; @! x l* p0 A1 X: } V------------------------------------------------------------------------------------------------------------
& H2 t) w" N/ u- r3 W*************************
1 ~' C* t+ }( F# l2 R3 `WndField.h文件
# v% z0 @9 F; j$ G* R*************************
) F% i5 d: Q: v8 P, v1 x搜索:BOOL m_bReport;
1 [/ f6 K9 P# S其后添加:
% R6 H0 v* T! {$ wCWndMenu m_wndMenu;
0 ?& L: }: K! E, W7 h4 {搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 ?' S) b+ q9 g" U0 b# R
其后添加:
: \5 O/ N1 L, x9 C; P; zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
; z6 C# z7 v! d: d4 ]& P: P- X2 d [( ]. v. H
# Y5 N" R% I; V- }
|
|