|
|
源文件中_Interface文件夹下WndField.cpp文件' @4 {) z* n+ r2 O( |7 A
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. t3 v9 }* u1 E( k1 O4 ]+ R9 K" ~. O3 ]! ^; c
struct sItem
1 k' l. z/ x: W2 t; x& L. T{
- ^" S* F; B4 p9 F+ N6 ?( xDWORD dwId;
7 g! R9 N( Y0 H0 a. [" eDWORD dwKind2;6 i8 Q" l }& S7 R
DWORD dwItemId;' v3 j0 Y0 e" l2 N* q! ^
BYTE nIndex;
+ |( `$ C- J' J5 d d9 G2 d' ]sItem(){2 c' z$ i) K2 n
dwId = dwKind2 = dwItemId = nIndex = 0;
* B8 Y3 R" V+ i0 k# R3 N}
! n- a7 l# h( _( wbool operator < (const sItem p2)* w" S& a: ~8 {% o5 B9 t3 o
{
' }0 _+ V! d) m7 Y" } if (dwKind2 == p2.dwKind2)* n) C) f2 @' Q
{# k g: k- ~9 j: m
return dwItemId < p2.dwItemId;" O, g/ d" F5 | {: D: v
}else{
) ^: x- [3 x. _ return dwKind2 < p2.dwKind2;
0 n4 N- H: ? \$ s }
/ F" E' t; G1 ~& ^}
! y F! f, F. X5 @6 Z};
- F2 ^& _- s& \' F B0 P* g4 \; Jclass CInventorySort0 k2 i' j; ^. S* a% B
{
, G; {5 A/ F1 xpublic:' M X* `* l# o, C% ]: G
CInventorySort()
& N. V8 O" d4 z6 R$ S1 Z1 a{/ G: D9 I- J I$ x
m_dwPos = 0; r! N7 x( J# |. }! P% c
}
8 Z @7 l: M3 Q/ s/ n; b# y8 N4 l~CInventorySort(){}$ M+ ]6 Q! I, D, V, ~, R' ~
private:& c8 \7 W6 ?6 W; W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 W9 I$ P- I* m M3 Z
DWORD m_dwPos;
( o7 q. t8 L* S" V: H; [( B1 Kpublic:
Y6 ?, c c$ O; ^! H: gvoid Add(BYTE nIndex)' Y/ M F' {" q0 b2 G. \% X+ G' d
{, H& F! L0 @/ q5 y4 g" q7 u- `
if (m_dwPos >= MAX_INVENTORY)* k# I; R! k' t j# Z2 m' K E9 i
{$ J8 Z6 l, u1 I+ V5 t
return;
# ^# c2 {$ t' p5 ]- _/ S4 p }3 M# Y3 a4 q, |% w
m_Item[m_dwPos].nIndex = nIndex;
; t+ ^; ~" d9 }& E( v- F" J; E m_Item[m_dwPos].dwId = m_dwPos;, k$ b0 J; G" g+ t" T% t6 q
m_dwPos++;
- a% l: K% @( R1 D+ B( |}4 C3 [2 u! C5 e {7 T
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 s( j0 x* Y/ W) T$ l; j! `) n$ T{( |9 U' ~, W$ l1 Y& E6 N
for (int i=0;i<MAX_INVENTORY;i++)
. y0 N; t4 R6 r {
* w0 u) C& k& h if (m_Item.dwId == dwId)
$ f0 Z- K7 I) a+ e {
" Q) _) P4 H- _ return m_Item.nIndex;
1 `/ R9 l) _. A. K: \8 F& E }) W1 `# k! o4 ?- f+ ^6 ~
}* Z/ ~, y$ C3 B
return 255;
$ o! F, r2 L L$ D- f}
7 M1 x4 a; C) B1 W# ~, j3 o& W$ {void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 C' h" E$ A! F4 A% ]4 r9 T! o- Y{
$ u2 o$ U6 \5 N9 Q+ n: N BYTE nTmp = 0;: Z) o" O0 T* ]% ^9 @# v1 N' @5 X
bool bDest = false,bSrc = false;- ~( z" T" |! m4 I, P
for (int i=0;i<MAX_INVENTORY;i++)4 w j: r0 ?- z
{
* C9 v1 A. i: W5 X8 b3 K if (dwSrcId == m_Item.dwId)
+ {! B# z. v5 g3 ^& x {
+ r* i4 f9 ]7 R# O //id相等 则 改变对应的dest和src
+ `( A( U& a% X- Q9 p nTmp = m_Item.nIndex;* O5 a& d5 l* A! J" s R; x1 W
m_Item.nIndex = dest;: Z- l: [( }' p. o, x; @, J
}
0 A0 t8 L" h! L7 G) \5 [ }
7 J Y: @: g+ h& h3 b0 K4 l1 } //临时数据保存完毕,交换开始/ t: _& ]. k R( A" I7 ~8 X+ ^
for (int i=0;i<MAX_INVENTORY;i++)$ D0 A' \5 P5 U/ W
{
: K' A1 V# p! Z2 ] if (dest == m_Item.nIndex)6 q3 c1 q) n' u0 d$ j5 i0 B F
{
) d6 @) g, u: u% _ W //id相等 则 改变对应的dest和src
$ V6 u8 H$ k8 H4 F6 S m_Item.nIndex = nTmp;; z% e/ Z, Q- I! A
}
: l" W% ?( \& U/ w) L. Q }, ^+ l/ u) P" a6 J1 A
}
. W4 X, q' _+ A: f" U, f};" P) n* \. o% F! o/ p
-------------------------------------------------------------------------
4 D2 r8 f3 t6 e& u3 E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ n1 @0 w0 L6 u& Q! i
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" {+ x' Y& {/ c1 |
紧靠其上添加:
/ V8 q4 h% f8 P p2 p% _+ Nif( pWndBase == &m_wndMenu )
8 E( {* m0 z( m8 L{
0 N1 n( F/ n" w6 E4 p switch( nID )" l/ D4 G1 |' u/ f
{. w, p) `- |! t, h. A& p6 J' H" L
case 2:
( H8 [; H* ~( o* V {" C" U6 }$ b/ a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 E& t$ g1 Z0 J4 H/ r' ?% u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) R! q- V8 J; I6 D( ?: n2 z8 E, y
{
* Y# l" [9 _$ |. ~7 {0 M break;
# T. \9 L$ V, b+ S& ?: [. w6 y) J! O }# }5 H( E$ p3 K& L" Y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* l. Z9 h% K( |4 c# C {
/ A" e5 M( t9 e3 _- d5 {- C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; |0 q+ G) G! K: O& l if( !pItemElem )7 k) ?7 _: z4 X2 y' e
continue;% u- g2 O9 t' a* c! q1 n6 C: m
if(pItemElem->GetExtra() > 0)
3 a0 h- x2 l4 R/ E1 j! O7 |$ `9 l8 ]: m continue;) F& K5 U% n' t7 I' B. h8 Q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 T) N1 M9 M' p9 k- o! F continue;5 r x% u! M# n
if( g_pPlayer->IsUsing( pItemElem ) )+ Z$ O" h- u {$ C, U* {' Z6 b* [
continue;6 t3 I7 P/ @) q2 p) J+ v6 S" W
if( pItemElem->IsUndestructable() == TRUE )
" _. @+ q! q# V& [4 }! p {: k* C' {1 F [& Q7 J" a8 c" T
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. o: K; Q" ~8 D% ?* v$ }$ B
continue;8 q3 n0 p6 h+ K7 r
}
: x6 J P! S: q) @: }, C g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! k5 O# G$ h, Y5 s }
3 y2 a+ F( B* g+ `2 k: i/ O break;
& M7 c2 U3 ^% ?3 V" | }
: r, ^' h/ w# J1 D case 1:. g# m l5 Z- E& Z0 i9 @
{
( a1 s+ X1 L: p8 ~ //整理背包, B9 t% R7 W! u: J$ Q
//////////////////////////////////////////////////////////////////////////9 L( n$ D" f3 A
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 _& Z3 I0 d% J( b) U
//////////////////////////////////////////////////////////////////////////
4 Q( ?; J: F5 U //////////////////////////////////////////////////////////////////////////
7 w: a5 l( ?+ m4 n( Q CInventorySort* pInvSort = new CInventorySort;2 u; Y- K4 F# v8 H$ W4 L1 s
vector <sItem> vItem;
4 {4 b6 j+ x' y( I! Y vItem.resize(MAX_INVENTORY);//初始化大小% ?# `: c+ a1 J8 o/ s m/ n% q# [
//////////////////////////////////////////////////////////////////////////2 i+ b1 V' t* [, k
//填充数据$ E( L4 S- a) L( J
for (int i=0;i<MAX_INVENTORY;i++)
8 ^+ ]' J q% h {# p& O% I6 Y$ Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: M4 g1 H4 e; c/ Q( l
if (!pItemElem)8 U7 N* N+ M" s3 u* y
{
6 E! z D0 H9 k! c. h$ k; _ vItem.dwKind2 = 0xffffffff;
" R4 X+ | A# g/ q) j& _6 i vItem.dwItemId = 0xffffffff;7 Z. R& P$ @- b
vItem.nIndex = i;
4 M$ O: x9 }% t) P }else {! ]8 I$ V2 v& k( V
ItemProp* pProp = pItemElem->GetProp();
1 g0 S- d, K/ Y vItem.dwKind2 = pProp->dwItemKind2;
& l9 }) Z5 K7 Q2 p* ^ vItem.dwItemId = pItemElem->m_dwItemId;) }1 M0 ]2 a$ P. d
vItem.nIndex = i;9 }1 w! q/ E" D, B: p0 M1 g9 @
}- _( { J. n. k
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& Z. `4 A& Q) V. y
}
6 \. C$ u7 |* g/ J //////////////////////////////////////////////////////////////////////////# I- r" T3 K* N" C1 j4 ]8 v" V# j2 l, L& s
sort(vItem.begin(),vItem.end());//排序
! T. N! J u( @. \) h& b //////////////////////////////////////////////////////////////////////////
: l8 [% Y9 n8 Q$ P! X* | //交换% @& l4 Q- n# F9 f
for (size_t i=0;i<vItem.size();i++)1 S$ Z( q/ o" O. Q6 i3 w3 i* e
{
: Q: w( w8 I' X5 ^- r. q6 d n //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 X0 X0 Y. u3 _
pInvSort->Add(vItem.nIndex);) M* Y( x. M% i% k$ @+ |
}
& x% p' u$ ~3 {) ?3 d BYTE nDestPos = 0;
4 j4 X+ Q; E, L: _1 ^+ B for (int i=0;i<MAX_INVENTORY;i++)
# L2 s+ P, e: u: ^& S {" \& n5 t5 X9 ]0 p e- A4 V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( b, i4 t" X. A) Y, w. N/ d7 v
if (pItemElem) {9 Y$ [5 M8 U6 Y4 Y# W) x
{
6 R, T$ \! E' Z Z9 ~% G% C if (IsUsingItem(pItemElem)), S0 V n) ~# `1 |% J* J
{9 P$ M; I P- }2 }- ~, s
//这个位置无法放0 |$ o3 ~- ^6 J: h- o0 K/ _, X
nDestPos++;. C/ W) c% C/ P7 k
}2 D; S, d: ], n
}
) {5 X7 J' u$ [) S z1 a* O BYTE nSrc = pInvSort->GetItemSrc(i);
0 D9 y, G) q. o! p8 x2 h pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 [ y. U- m# |$ g3 i if (pItemElem)
, Z( u4 y/ y# \# _% Y- k% ~ {7 [! ?% y$ S5 O. T
if (IsUsingItem(pItemElem))" O- e0 e8 Q, |
{
, D; z _ q9 a" F$ G, ] //这个道具无法移动,跳过
/ c1 K& n& N$ _1 O: X: a. U+ G* a continue;
4 Q& m: Z( _) v; x, \+ t }
7 h" @1 A9 ~# ]' j' r3 N }else{
) o% N0 J. R* y( k //空位置 不用动/ X/ A2 B5 A: r+ O* D7 z& r
continue;
8 q- D; {' m6 Z* A9 N( X }1 N$ v6 B: c% r. F4 H
//////////////////////////////////////////////////////////////////////////
- F& u0 f$ ^9 h5 J3 G7 J //开始移动0 O. p D! u2 M3 V
if (nSrc == nDestPos)
. X% z7 {: S) [6 }: Q" i1 ^; T {
. X! O: M9 F. a //原地不动6 z* C9 T# j' z9 J0 c' I7 g: J
nDestPos++;- c C0 v1 K* r$ x0 h
continue;, M8 k P+ K v O8 S# y
}
5 l7 T" d1 G6 ^9 T: d* _2 n0 Z) b pInvSort->MoveItem(i,nDestPos);+ e8 Y: T/ N& p% M
g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 b0 t+ {9 V! ^( I" O; N6 \
Sleep(5);# Z0 h4 ~( |" C% c
//Error("移动 - %d->%d",nSrc,nDestPos);
7 z# S3 B! Y! Y nDestPos++;
# ~3 r2 w0 G7 \$ E! D T } i: R% ]# p6 z6 N9 G4 ]1 K
//取第一个元素的信息4 }& c4 Y1 Q; _6 [
/*/ r6 s, N4 K$ |: q0 c2 e' |/ J
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 a; h$ P& P, V# D2 X
{
" i* n4 l5 L% Q# q9 b Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 M7 E! ^- A% r# ^0 O0 a, k
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 L# ^7 E3 L) h9 M9 `# { }0 ?" D0 r: a$ U& l1 R- a
*/
5 @% ]3 i! Q+ @: T E { //////////////////////////////////////////////////////////////////////////# x3 T$ C7 i' z, B7 x
break;
/ }6 `5 w8 s6 A4 p }
+ d$ u) o% y# d* b4 r% F6 j }
. }' J. I0 X) i}- v/ w# h1 W) n! y( h0 D
m_wndMenu.SetVisible(FALSE);4 h3 X2 h4 u+ F* F* {$ t
- ~2 m4 O- \1 A5 Z) g--------------------------------------------------------------------------------------------------------$ r7 C% _1 v ^7 v: i
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 T1 X4 w0 r/ X! d5 y, N, p7 v{
7 {3 e% q' v( g/ mBaseMouseCursor();( Q0 ]8 R' B9 }$ L3 B& ]- v( c4 Y
}0 ?8 Q- e% j0 z# S1 V @
在其下添加:
! v; o/ [3 z- v" O! Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- V9 l3 J R9 E4 L
{& ]0 O; I) ^5 a6 o4 h
m_wndMenu.DeleteAllMenu();
. O# ^7 ~) @3 t, z! M' Hm_wndMenu.CreateMenu(this);
6 V% S4 B2 G S& T$ ^m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ W1 E% j& {0 ?. }* k; _/ w
; O* u9 \1 J; G% j% e2 r7 E3 W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# y0 T' D0 y, c- Y% M2 Q{
# g9 ]- Y8 T5 ~7 x! b0 | //P以上级别才可以删除所有道具
; `- [7 I: t3 g6 r" D+ X' Y, Y2 a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- `) f: l" B* u- u- B5 ?- p}+ U' C3 v: n; m! i% D$ x
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* ]; f5 U- s/ N6 e, w; Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 V$ s# O) W' v; d v0 um_wndMenu.SetFocus();
+ V8 }+ w1 x, _: n/ f% K9 P}
' ~" _ L z( n- A- X------------------------------------------------------------------------------------------------------------. b* V, i. i# d# G. M
*************************0 _$ r/ E/ {; U; _0 L
WndField.h文件% m, R& T3 d8 M' j( X
*************************
8 x& ]4 {" E9 i: r& N4 J' ^搜索:BOOL m_bReport;, f5 @8 O2 r# F' j* U% X/ J
其后添加:
( s% b& }1 t0 p; M- [CWndMenu m_wndMenu;( D" s& s F7 k/ T* {: {
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: P( k$ W$ s3 E% E: L( C c; _其后添加:
! p8 X" P2 ]) G' S3 W3 {6 y1 n! evirtual void OnRButtonUp(UINT nFlags, CPoint point);
- z! R2 _1 y7 d* S& Q; e) x7 J
9 g9 R @% d' N; s8 W
2 s: S/ r: t) O8 _ |
|