|
|
源文件中_Interface文件夹下WndField.cpp文件3 u1 H, X1 j1 I) {. A {
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 ]8 h/ q0 Q' ^/ l
( X# }6 `7 `$ C$ m! I
struct sItem
% r9 w' @! |* v3 ^8 Q{
/ o4 ~% u* U; C: KDWORD dwId;
# |# y, M0 _0 D' `DWORD dwKind2;; X6 p9 H" C6 l4 J
DWORD dwItemId;
: B) y2 V6 H0 g6 G2 g7 x5 ^BYTE nIndex;
3 _! ]' |2 P* H8 TsItem(){* l; y3 O" I% _ t6 U+ X
dwId = dwKind2 = dwItemId = nIndex = 0;$ Y, f) X+ W$ L% _2 J$ _) V5 v
}; Z5 h$ @6 c) `) i. P1 t
bool operator < (const sItem p2)
& ]. x6 w2 F/ q3 o& x- E! B{4 g8 q4 Y+ \: W6 L
if (dwKind2 == p2.dwKind2)
: M2 F4 d+ O' \' A% g! D5 A8 E {0 J0 d7 Y# w- s, J3 M! i* [
return dwItemId < p2.dwItemId;
+ M2 V; f& k" f/ H3 M: s% { }else{
& i+ o) F4 k& P- [2 S3 b( { return dwKind2 < p2.dwKind2;& X! Y- c$ P% K3 u
}2 f0 ]7 c; K( s4 F# K, Z6 g8 U' T: Z& O
}
6 f |) {/ r- G# L9 `# M1 k};
( H; V4 h! y1 p8 d% c; q/ Bclass CInventorySort
4 t0 n7 X! w; E& B9 h r/ b{
1 U1 \! J/ A" m5 cpublic:
& y& C* `- k" r4 oCInventorySort()3 v8 Z) J; K, A+ y) ]
{
+ {% d! U% U, w% c5 U m_dwPos = 0;
; Y" }. H' h9 n, B I}
, ~7 B, _0 U& j3 {/ p3 Z~CInventorySort(){}( ^+ T; W: A V
private:7 b7 P, u y' R
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; F/ d9 r$ ]' ?. L
DWORD m_dwPos;
; l+ x2 L5 q- a) ?+ Z( N9 {public:- T0 V9 E. S6 ^* h, B1 q
void Add(BYTE nIndex)
) s4 G0 A6 N' _* B& N. t$ a{
3 z) m8 \9 [* R; { if (m_dwPos >= MAX_INVENTORY)5 t* N' c' C4 f) R% R
{# r5 O; o, r+ g' F% Q. J7 a/ F+ {
return;8 C1 O: Q# ]- B0 R9 I
}' m' Q8 C. \; g/ d
m_Item[m_dwPos].nIndex = nIndex;
; K) }4 ]7 d. E3 G6 b m_Item[m_dwPos].dwId = m_dwPos;
! g. b5 w% q' }8 r m_dwPos++;
k4 e6 Y9 P4 Y! r* u* `, h9 |}0 P4 C0 d+ ?" l) |7 P
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" J$ N. @2 [3 r7 j! e, S
{+ m+ O! {% e. ?; S# e
for (int i=0;i<MAX_INVENTORY;i++)6 x2 {# Q* C+ n4 @3 R: k* N
{* z( d% D' k+ H
if (m_Item.dwId == dwId)
' D3 \8 D& f" ~4 N2 B" ~ s {
- B B% Y# S' k% q1 d# I/ c return m_Item.nIndex;
. W' j( N B a2 {6 } }' P6 [* N, i) ^! s+ X& l
}1 l4 b; B1 S1 T( m% ^
return 255;+ H: S" @% j- ?- G$ A
}
2 J: s" V o- ~; X, Evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: Q! t2 Z% M$ K6 |- S" p, E% x! ?
{
h$ ^# w% g9 A( U0 Y* p! S BYTE nTmp = 0;
' ?& N8 z3 ^/ ~9 d" R7 W! Z; x bool bDest = false,bSrc = false;
- b, Y @7 p9 F- m* i1 \ for (int i=0;i<MAX_INVENTORY;i++)3 M5 g# g- n2 ]- U% {
{& O1 {/ V9 n8 H6 J3 [$ J2 w6 D) G* v
if (dwSrcId == m_Item.dwId)3 G9 s: ]) l' V* h- D
{: r n( j& z/ u* D3 k; c
//id相等 则 改变对应的dest和src
$ D8 D I u1 T/ ^ nTmp = m_Item.nIndex;2 y( @# @) J5 v/ E
m_Item.nIndex = dest;
. ^+ O1 \, R- c5 t. K }+ L5 u3 _) b3 C/ _; U2 B: }+ H
}) z: K% Z) P3 q7 t
//临时数据保存完毕,交换开始1 a# Z2 u% q) j, N& ^ h# `
for (int i=0;i<MAX_INVENTORY;i++)5 B5 B* c3 D4 ]: D% K7 `) K% @! \) K0 E
{0 r0 H" d) ]. k0 ^9 i# S8 D) }
if (dest == m_Item.nIndex), r b1 _9 \0 X* F( M' r3 P. J2 z
{
0 k" O$ z7 S' c( ]% b" l) Y% _1 Q+ v //id相等 则 改变对应的dest和src& v# _9 L: Q6 w
m_Item.nIndex = nTmp;
! z! v* Y. q* K! A0 E }
( b2 k: c* l2 j7 U2 W }
' l# h5 c/ Q, @6 O2 g) u}; D3 P1 Q% s% V' R
};
) D+ @" M' L l8 b* L-------------------------------------------------------------------------
( }) e! Q. `7 B9 w: k6 N# |2 ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 e$ N$ i+ H$ c- k6 j/ M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 D6 f. t) R3 g) b+ j
紧靠其上添加:8 Z+ V: \& B' W% G2 Y, a8 p
if( pWndBase == &m_wndMenu )
% b; `8 G+ c) o8 f: K- |) u{
% ~; y S* T' T( g7 H switch( nID )$ q( x8 W4 T1 ~+ i: h
{
0 b9 C" v- N+ _$ f0 |/ K" }% a case 2:, o$ r2 r- R/ ]* m9 `$ O: \5 ^7 m: `# V
{
% a" S4 c9 ?9 b3 l1 \3 c //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ {$ n3 R3 y7 L( ~2 P- c if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 a: G# f* R2 F
{' S. B r+ N" n q! w
break;0 y o6 J Q9 s6 p% g7 s/ F, o& s
}
" O- W! }) k" N9 o for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' J! w Y3 D( K, b6 _$ y. M/ V
{
1 B7 `8 r: b& D- t& w$ Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) Y. P$ c' z$ `: [/ G if( !pItemElem )
/ z7 P. |. l2 D) Z) B8 Y$ Q continue;
' X( D1 o" X0 m8 d: K: G2 u if(pItemElem->GetExtra() > 0)% `9 ~0 @$ X2 n* @; b: F
continue;
8 S) ]1 x6 e' g2 g9 H* f if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + |3 K0 H; Y2 X( X3 _& j7 X
continue;
' S( q# C0 k" |0 R3 d if( g_pPlayer->IsUsing( pItemElem ) )
2 w+ p2 n; F: W6 ?4 y# x continue;
1 _' y& y/ ^$ c' Q. G if( pItemElem->IsUndestructable() == TRUE )1 c8 w5 A% Z% A3 l' [
{/ T/ ]' H e) N4 F1 D j7 j
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# ?; f/ ^$ j; V+ K continue;4 P. Y. Y% C6 W8 Z" R
}
7 o: Q/ q! G. }+ J0 R4 z4 f g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 C5 D7 S- C. ]; y( ` }( P5 J6 d# y9 t! t) j
break;. z4 |) s* X$ I6 J# T, K' |. X3 P$ O
}" x) |- u; A$ {( q4 r
case 1:
! _: b' w3 N D3 ] {5 A1 ^ X2 e+ n7 [5 |2 ^
//整理背包
( S$ O# o l; v3 B3 u1 Z9 ~ //////////////////////////////////////////////////////////////////////////: L4 q3 n+ S6 W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& z! k' h& i" K8 s) R+ H0 t: a
//////////////////////////////////////////////////////////////////////////
9 J# p: T5 l- o# Q /////////////////////////////////////////////////////////////////////////// U y0 q% {# H6 U: ~
CInventorySort* pInvSort = new CInventorySort;' a. I- T6 _% @; R. b1 E/ q: w" I+ v
vector <sItem> vItem;8 f' c# ~6 {" }3 P% q/ Q
vItem.resize(MAX_INVENTORY);//初始化大小2 i/ y I/ H4 B: v) \& U' u
//////////////////////////////////////////////////////////////////////////9 H2 F1 t3 e" S; W8 S
//填充数据! H$ D$ z6 J9 h0 o3 N+ {3 N8 }
for (int i=0;i<MAX_INVENTORY;i++)7 s0 N! l) B7 R \6 ~9 g
{$ o* e) J2 _, t1 }5 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 Q4 i- V* @6 d' M! `* T1 f if (!pItemElem)
; q2 u5 a' \4 G" H" K, I {
5 S, s" f6 T7 Q# b9 v4 T vItem.dwKind2 = 0xffffffff;
/ r) j; _$ n( j& ~4 {# I vItem.dwItemId = 0xffffffff;, d- w( e f; j
vItem.nIndex = i;5 h& n$ v+ n1 R! x; D* ~
}else {$ b- _# j8 C5 c. V4 g
ItemProp* pProp = pItemElem->GetProp();
: C: o4 X {% s" n8 V) B vItem.dwKind2 = pProp->dwItemKind2;
5 w" ~( [, C! k; u vItem.dwItemId = pItemElem->m_dwItemId;
9 T! b5 L" ~4 R7 m, M4 y vItem.nIndex = i;
! e/ J6 i, C# v: l4 W% l) w: L. b }
Q; L1 u% A% v, r //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' x- F8 i w8 [
}
. r' M/ } l' \! J3 u" S7 T5 x# N3 e //////////////////////////////////////////////////////////////////////////) X' h9 k) Z9 Q" [$ G- Y, `
sort(vItem.begin(),vItem.end());//排序8 H( P7 d# `7 N; R" @ I
//////////////////////////////////////////////////////////////////////////$ Q) x9 s' R% \
//交换2 K% C: S8 U3 B9 F- g2 V+ `0 N0 t
for (size_t i=0;i<vItem.size();i++); U8 r# I/ d" ^6 x: G; J) Y) n' z( L- T
{/ N4 W0 p" z* k) Y7 Q: s1 x3 M) v5 u
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' ]7 n4 w" f: X! B pInvSort->Add(vItem.nIndex);; d4 y, _, k6 U
}
2 j& x1 T) P- d, u/ H# z6 D( P BYTE nDestPos = 0;
- [& n% a/ u# w5 q3 a for (int i=0;i<MAX_INVENTORY;i++)
1 M, L4 T2 f: |5 C {3 Z/ P: }8 q3 i* W E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% Y5 I" q4 M1 |& E$ n5 R" h if (pItemElem)& T( \0 x% z' T$ \7 F/ q
{8 I: ?6 F7 }5 J3 T7 \- e: h( G
if (IsUsingItem(pItemElem))
6 h. E" C( _& O$ P1 {- Y0 } {
$ J8 D: U Y- F) ` //这个位置无法放
3 n1 r9 E+ E" q8 E" W: P# m* \ nDestPos++;
" Y j5 S h$ `; o1 {2 t }
" w# f5 H, J$ C9 G- r# m& j* d7 Z } W; d1 ~6 z+ Y& v( `/ B
BYTE nSrc = pInvSort->GetItemSrc(i);0 D$ m. E, ]! ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ e% d4 u% E: K if (pItemElem): a/ h% y4 w! m: x5 x. A
{; |" P+ m$ p: C* ^4 s
if (IsUsingItem(pItemElem))
& c2 Z, q% @" k2 ]3 d$ e {# z% k# h8 C. q
//这个道具无法移动,跳过7 x8 U7 u v8 ~" U* u7 g3 q
continue;
/ o1 C; l0 g/ {9 T( E5 F7 r }! `. C6 M+ Q1 ?: I+ j4 Z
}else{& D3 x* W- K$ f/ i
//空位置 不用动
8 N9 M3 g! J( M continue;
; j1 `7 k" V& ]& G; G4 d1 L }6 a* l: I( K3 m
//////////////////////////////////////////////////////////////////////////- {& _. c- R: D5 p
//开始移动
8 N5 _# c: m9 o+ F$ Q' ^' F if (nSrc == nDestPos)
1 H) f# C. z! a9 Q5 F% e {
4 Y; L' g' @( r //原地不动# T! |: V* \9 y( G
nDestPos++;
* G2 b) J- X3 V2 c: c continue; h, _4 F* U" e* ?8 c. Q
}
, M2 i/ J: d* T: U* T pInvSort->MoveItem(i,nDestPos);0 k; n5 R( U5 x, G0 p+ F& Y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* z$ z$ w8 ~, G+ f. j5 h) x. P Sleep(5);
% q+ [! q: u4 T1 w //Error("移动 - %d->%d",nSrc,nDestPos);
|- ?, s9 Q7 z1 |2 F: k nDestPos++;
0 M$ D5 Z% K5 x3 H! b }
" d- T& Q$ ~0 j //取第一个元素的信息/ ], w4 w2 {& C0 W7 F
/*# J6 F# s- h- J" p# [4 |# W
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)/ ^+ x4 Q C% l+ V0 F5 s
{
. K7 y* _, V5 u E) h7 o0 ^- B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 c! r. Y+ G6 F6 @3 W% c) u
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ t; ]; y. E' L: a7 Q* p3 i2 ]6 M }
& t) t6 |. o' o; M */
8 a: u: h$ z# U9 y( h" T1 X5 M //////////////////////////////////////////////////////////////////////////( E g c) C8 E& `* u( ]
break;' E, p: ?) q/ t. C T# W8 M+ K
}& G$ v! z0 A: [ }* Z
} " T6 |; n! Z* E2 r" a/ j2 X* A
}
6 c. T/ ]! J/ i3 K$ Jm_wndMenu.SetVisible(FALSE);: q4 C; }0 _/ C0 s7 A
) \- n3 n1 f5 t: T8 K7 P' P
--------------------------------------------------------------------------------------------------------( ]/ Q4 i" B6 i& s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# g) x; Y: e1 ^: g8 i9 |{" h$ \: a+ |: ^
BaseMouseCursor();
4 L$ { H" C( s# N2 C}+ m0 Q* D8 j x
在其下添加:- H- N; c% ?6 ~, P1 ]; g* \& W9 s7 d( X
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) N: q( h) g; C/ ?. G! P; V
{
( ?; n$ ]8 ]7 R; Vm_wndMenu.DeleteAllMenu();
. o' G' z; v6 qm_wndMenu.CreateMenu(this);
% f# `# I3 d/ x5 g$ |9 @- M1 A) xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 Q8 G- \) y. o* H
/ [/ p& @. j' j# { [
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 b0 H0 \. x3 c+ j: d5 Q' z
{
$ m+ {5 d/ T* i' N1 K6 Y //P以上级别才可以删除所有道具) a1 ]+ n8 `" m I! B9 P+ \3 {
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. V) U) _5 ~ e. o}9 B+ _% v0 k9 i- M
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* [) r( ]5 l& r0 l, x( jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* P; o" a+ S3 s
m_wndMenu.SetFocus();, _3 |0 G1 t5 T$ S
}
1 E* J) R" L6 E3 W* C------------------------------------------------------------------------------------------------------------, m9 u" e0 L/ G$ b3 H
*************************
9 N6 Z: Z0 H( f( k% B: O( Q5 {0 xWndField.h文件
) z: [% a, E( F: d& F/ Y! `*************************
# |" \8 ?% Z% K0 u( `! }搜索:BOOL m_bReport;! ~/ Y. y, }! C0 ^6 q
其后添加:7 ]: V; @6 G' j6 \3 s( @5 D+ |; u
CWndMenu m_wndMenu;( _( X( y7 ]* M* _9 j/ n- D! z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 a& g1 p2 e/ P Z; A2 E; Y. q
其后添加:
. |% C: {+ a- _0 `. f( H8 uvirtual void OnRButtonUp(UINT nFlags, CPoint point);
8 H Q6 Y! e+ G5 r! L4 q& P- }- t! v
( v9 D& S3 n+ D: b |
|