|
|
源文件中_Interface文件夹下WndField.cpp文件
& o9 V- n- P7 \$ l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ _% r( y% y5 L9 J. U) A
7 W( W& s' i( n
struct sItem- Y0 d, V( W7 T# j! P8 `
{
$ R6 u$ s8 [2 ~! W9 ADWORD dwId;) ~; T1 G; {+ m, T* g
DWORD dwKind2;
6 R$ O$ L- v7 f r& l# w$ `, QDWORD dwItemId;
0 F. ?/ R1 c! t4 c. B: kBYTE nIndex;
- |# R$ u; P4 k0 R; [1 XsItem(){
0 Z2 ^6 O7 o& u' u! z dwId = dwKind2 = dwItemId = nIndex = 0;) T& O5 U4 F8 w2 h) Z' ^
}( Y- ?6 ^. v# y- J
bool operator < (const sItem p2)
# R, z; S' a. V& Z& n: y{* l* J8 m! l0 f# ?, z* F
if (dwKind2 == p2.dwKind2)7 U9 F5 }5 i% Q" n6 R$ r7 [
{
# r& w W2 {7 B- f/ X" L" D) M return dwItemId < p2.dwItemId;
/ D3 \8 `- Y( C! ~3 z# s& M' N: S }else{6 o: ?$ x1 u% b: K. d% }
return dwKind2 < p2.dwKind2;
% \5 | v0 O+ s8 @/ R- H4 ^' C }
3 Q# \; l8 G" B}
v7 T6 X7 a% |6 @0 k};
6 h. x4 m0 G, Qclass CInventorySort. E& P% I- h$ u
{% k" w: s/ b; ~2 L e# l/ E
public:: |/ t- X& G8 [# l
CInventorySort()7 y$ r5 Q9 Z! W, Q! J- m
{- q6 L5 i9 a. z3 x; B( N
m_dwPos = 0;
: K2 b0 @7 t1 }1 c& l} s7 B6 M) I- X8 x9 f0 R2 K
~CInventorySort(){}. O# W" w2 Z# \( ?: x
private:
! q* y1 {+ H# usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 p3 ^! V9 N3 W) O" ~' ]
DWORD m_dwPos;8 ?- c9 [6 c; j
public:% W: c2 c l: |" L1 I3 c
void Add(BYTE nIndex)# [! e) i" S+ d0 |+ t' O7 A. B
{4 J" P' _1 ^% m, n
if (m_dwPos >= MAX_INVENTORY)0 x. n3 Y% R m3 z
{+ S4 Q2 a) l4 j& ^- P/ C
return;
: _, Z) l. X6 y$ f9 o; V }4 U8 M' h7 X" Q" Q L
m_Item[m_dwPos].nIndex = nIndex;
# [% p6 J$ q) p, G/ w m_Item[m_dwPos].dwId = m_dwPos;* k0 ?9 {( L1 c+ s5 J% ?" k
m_dwPos++;
3 u, X, V- s4 u! B7 \* c5 w}1 ?. e5 a' S( {" `
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, M$ V( |! i) i: } q% Z" p
{) N# m9 L' l# k7 K$ Y& w$ h- x
for (int i=0;i<MAX_INVENTORY;i++), |9 K' \# {- p4 o0 c! ?
{
9 K& X# W2 z" g8 O2 S7 C; |, b. [ if (m_Item.dwId == dwId)9 D. \' i& K* O6 J y8 j3 z
{, p: ^% W7 z* F {/ w
return m_Item.nIndex;
$ `5 G" j9 a2 s# _0 [$ k, B C- l1 U }, U- `, v \, O: D( a9 V( n
}0 Q3 c" s* X/ F' }; `. t. J
return 255;* ~% N; u3 s% r' @+ J, I
}2 C+ n% X, _+ I' |& b
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ }7 G2 W; f0 t4 V, X0 @! K" C{2 \; j% p H% e- m6 S
BYTE nTmp = 0;
( j+ w2 X5 o! |' s bool bDest = false,bSrc = false;
4 [. p9 r0 i. B6 {7 W for (int i=0;i<MAX_INVENTORY;i++)
. r4 p R$ W) \0 r- m, E; V {2 L4 c- |! O5 c+ T. b d
if (dwSrcId == m_Item.dwId)
1 H _+ M- E9 n! d! f; ^ {& n. w: E& {5 e3 h) ~1 ?
//id相等 则 改变对应的dest和src" u; ?. Q9 G# Z9 ?3 b4 F
nTmp = m_Item.nIndex;* T* Q* b# Q$ J: n" t2 a8 u
m_Item.nIndex = dest;- m# x2 R' U; L8 P( W1 A/ U5 i0 j
}
9 A7 s1 T. A9 P2 _ }7 M3 c+ V' Q7 m/ \( [" A
//临时数据保存完毕,交换开始
% n1 F. D% U4 u- ~ for (int i=0;i<MAX_INVENTORY;i++)
7 }# l- Z5 z' q {& V5 F9 ?7 y8 l3 o0 l+ X$ D
if (dest == m_Item.nIndex)
* N: b- q: x4 O2 F {* F; x9 G( @8 o5 ?3 K! N& [' t
//id相等 则 改变对应的dest和src" l% J* b8 d3 p9 M ^/ R% q# j, @
m_Item.nIndex = nTmp;
9 W4 i9 ?3 m8 K3 ~* j: S1 ~ }: J- J" C' n( ~
}
1 @. f/ ?7 ?& o) n5 d4 b}" Y- u2 X) c' g$ _" C1 l
};9 u7 F, p0 M, A2 K
-------------------------------------------------------------------------0 h8 ~( P' t& ?. k; z1 R( T
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: S0 [& p7 ]5 q+ }" j0 q; l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 }5 H% U* `; n4 V4 g紧靠其上添加:2 d( y7 E5 }) ]2 }% x1 V
if( pWndBase == &m_wndMenu )/ _6 G, B" z/ s; X6 k1 u; ^
{" [; g' {9 [5 L4 u* u6 M: l. \
switch( nID )
& Q8 v9 m4 w. K3 I. } {# l! ?) l6 F7 s! t( U: `
case 2:' t8 _9 l/ j4 w
{
4 {# V+ m1 A8 ^) b: i7 P1 [ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 G' r# A& V8 g/ L9 k& V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& y7 U/ L+ r: f$ p9 C- G {
" W1 Y1 t2 ^# A break;: l& i# N6 _2 X" A
}' S$ X8 n9 _1 N/ n9 U+ j+ f
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 B: v, N3 ?5 B: r$ A {
( R& P$ h% n+ P5 R# y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 R+ H4 \7 V2 l* r1 l if( !pItemElem )1 \: H" Q0 F6 i+ I
continue;# W1 A2 z& u) E! j8 V
if(pItemElem->GetExtra() > 0)3 a/ W' q" m& f8 m1 e. n, o3 r2 y
continue;2 N% ?" F) I9 q+ \* I g7 X; z. o
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 u/ j. T6 s$ z* F! ]( F% B- w
continue;
4 V6 j9 v, ?' ]' w. l" D* j$ s4 b: i if( g_pPlayer->IsUsing( pItemElem ) )
3 I( H! P; ^" r( g continue;* S) E4 O7 \% k J& B$ I4 `6 ?
if( pItemElem->IsUndestructable() == TRUE )! ?9 |# b7 ~8 s& L+ a$ P
{
/ O% H8 U9 h4 T* C/ X3 g g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); m* ]/ _1 {! L$ g9 J& `
continue;6 F& U6 ~' ~/ a
}3 v4 L, P. l* ?
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); i4 i6 |& j) z3 d& u/ E
}
! [* ]0 {5 ]0 U# r( ~; b break;
' T; ]9 @, R# v2 y | }; r U) n+ O0 z- z/ K
case 1:5 N6 o5 Z) e) {+ f7 W$ w, N
{2 P* @% e, N* J: n: O# @6 S+ N
//整理背包
' k% D6 J- m0 k- `, m //////////////////////////////////////////////////////////////////////////1 K6 S7 t* e6 J: L1 M
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# F5 ?# O, z: l: ?/ j //////////////////////////////////////////////////////////////////////////
6 \% c' s6 r8 t$ D //////////////////////////////////////////////////////////////////////////- {2 P9 E( t' ~% J
CInventorySort* pInvSort = new CInventorySort;8 n; d% z \8 X5 ~! B) @% K
vector <sItem> vItem;7 c; d' }% w, H4 s
vItem.resize(MAX_INVENTORY);//初始化大小
- u& Y8 [, N7 C4 j: E3 \4 D& q //////////////////////////////////////////////////////////////////////////2 }* u( ?& r0 ~" O0 |5 D; `, b
//填充数据8 m& P& T' U/ h( \! \( K0 t' D
for (int i=0;i<MAX_INVENTORY;i++)) v2 H4 F: |8 O2 j4 A6 U6 ~' V" E: q
{, T7 e6 F7 n4 K% @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 i9 x+ l: i3 }' V6 Z if (!pItemElem)9 }* K) W' Y& {+ s9 F# D( F* w
{
2 G) r" d }4 S0 \; D vItem.dwKind2 = 0xffffffff;1 i4 [# b) e' n* a* ]) j
vItem.dwItemId = 0xffffffff;* l5 \2 E: R" H- n4 ]/ k' M
vItem.nIndex = i;
2 f" C0 ?! O0 Y, J2 x6 D }else {
/ w$ K& t+ Z1 }7 D* c0 A ItemProp* pProp = pItemElem->GetProp();
" \7 _. U- \% r' s n vItem.dwKind2 = pProp->dwItemKind2;* _2 q3 E7 @7 K, }4 Y$ q# D; Y% F
vItem.dwItemId = pItemElem->m_dwItemId;
4 |: ^' W* W2 P+ h1 Q+ z vItem.nIndex = i;' r: T; |* e2 Z" c! g
}
0 R. x, L$ ~' L7 l9 D //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 L7 @0 T: c% }8 f
}
/ Q; \8 e: R1 N" s //////////////////////////////////////////////////////////////////////////
; ^% v* {3 B: e1 C; a7 o. W sort(vItem.begin(),vItem.end());//排序
0 f5 W6 }# G) P, t; H //////////////////////////////////////////////////////////////////////////
# F6 N2 n6 H: y! p //交换
7 U$ [+ \, r, @3 ?, W. K d for (size_t i=0;i<vItem.size();i++)
) O$ X" i0 ^1 u; T {" Y; G2 b) }* q6 j- F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* l0 G5 [/ k) X/ {
pInvSort->Add(vItem.nIndex);) o$ V7 Y: U' h6 L
}, [1 K, G: _8 J
BYTE nDestPos = 0;
! u( g' V. J& u; T9 Z1 @ M$ y for (int i=0;i<MAX_INVENTORY;i++), ?* i3 I/ t: V# D7 L/ W
{! \/ j, c2 H6 K* o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( r: l; U; G' k# e y" j
if (pItemElem)
+ n4 Z K5 I5 z0 T9 l$ s$ M% z8 H {
6 E1 Q$ f7 n- s4 T: I if (IsUsingItem(pItemElem))
; L4 H& e+ z, B6 V. ~( i2 t' w {
S& e0 J: R$ f; D" q //这个位置无法放# P9 }" {+ h l' H2 f0 b
nDestPos++;
8 c1 r C w8 Z# b9 I }
' Q# w8 i# [1 R S$ ~" B c+ O }7 N) e0 x1 |1 g) L3 q# u/ I. X
BYTE nSrc = pInvSort->GetItemSrc(i);
1 B" h: ~% L6 s pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ [6 P$ p. t5 Q* }! @3 h
if (pItemElem)2 }+ s- f' t. C
{7 V3 B9 R G5 J
if (IsUsingItem(pItemElem))2 v. X$ c$ |" ~$ J. ~; Q4 e$ D
{$ T9 w& z. X- H, }' B
//这个道具无法移动,跳过
( j K% W) P0 z( I X' ]( G continue;3 }6 ^* U9 \0 `( }
}' S2 h9 L2 j/ i! _; r: J M
}else{: `# J+ X" l1 [" z6 X( [
//空位置 不用动2 Z8 k6 _/ J! J8 `$ v
continue;
7 u0 \# ]- v) w" T }
4 t* H% A t/ d8 k/ m' U4 O0 ? //////////////////////////////////////////////////////////////////////////5 I' \9 B* ]& g" L8 E7 J# \; _
//开始移动
" T/ g7 ~! N0 v4 e if (nSrc == nDestPos)
9 b7 \+ V* a/ X- X8 v {
0 b# _- [6 K4 u: i4 c8 _/ M //原地不动
" q7 m2 F1 F. s {) U2 T nDestPos++;# ^' h; |9 g, h. n
continue;( I' J! Q0 n% m$ u1 ?: O7 ]
}8 R8 }5 S3 A6 Q- T
pInvSort->MoveItem(i,nDestPos);0 O. x3 v% Z% F8 w- Q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- n* s+ M1 i: d1 S% Q9 b0 l Sleep(5);
- k7 L# u2 u, J7 Z' U1 C2 U8 F' ] //Error("移动 - %d->%d",nSrc,nDestPos);
, A' `$ ~8 j2 w2 n7 j' ] nDestPos++; ]. L9 h/ f" {6 s
}
9 H# K |! V/ f! M# l6 |6 T) K //取第一个元素的信息& j3 x6 U: k9 z6 l( N
/*" j% z! w' \# b% R3 ?1 [( J. b) ^
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ z+ Y. \' |8 {3 _ {
0 z) J% |# H. M3 A M7 v- b* s Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( u5 b @1 m0 w. Q6 q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 s! [5 L: Q* m! U9 c }* j8 f3 U( v% l2 s1 I0 d
*/7 V; @. ]6 j) o( i6 j
//////////////////////////////////////////////////////////////////////////& c3 h9 Z4 T" k' M1 V
break;" {# s+ T- d! M# ]$ U. S
}% {* d; C* K" N7 X* P; C4 s) p2 C9 K
} % t: \: Y# a5 o8 K5 _/ W' M
}$ Q+ O8 g8 ~ L' u5 ?: H
m_wndMenu.SetVisible(FALSE);
9 f8 `, N. v! n" f
8 U* ~9 V0 a; I6 c--------------------------------------------------------------------------------------------------------
4 d& @1 |0 x6 @搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 f; x9 K2 y: ]
{
9 }' I5 ?- S4 c* O& T; j7 cBaseMouseCursor();
# H$ Q- i% I- }}
5 Y+ V) P" P4 X在其下添加:
1 t* B+ i; l7 m E5 f6 Y! [void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# f u* n b2 K
{0 Z4 D1 L( a% J
m_wndMenu.DeleteAllMenu();1 f. {! ^9 n: @9 n. q
m_wndMenu.CreateMenu(this);
- b. f* f* x) s% @m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% [, J2 B' b' w# ?( h% Z
8 \# M+ o" B" {) `/ f6 Eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 v' S$ U% a% r
{
) z/ U2 U4 C3 ^0 U3 l% T //P以上级别才可以删除所有道具
- h& j) U" M' b r- _2 U6 M$ Q4 Z4 r! x m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' g2 U' q. W+ c4 A1 b7 L% A}" s9 P# _, o- D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: l( z* b+ ]- H# y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* f, ]+ o0 x% I& M3 {$ Gm_wndMenu.SetFocus();
- {" J! R; e- w4 P; @ Z- z9 t2 E. {7 J}9 m: u* G8 \" y7 k x& E) A1 R
------------------------------------------------------------------------------------------------------------
& v( J( H' F1 U, ]; j' X*************************4 j3 H9 ^' H8 f/ l$ A
WndField.h文件
' X+ l* ]- Y+ Y+ ?6 x*************************
/ f5 d' _! |5 ~9 b5 W {7 O搜索:BOOL m_bReport;' L; T" c- Q$ T9 r/ M- m4 e8 @/ u
其后添加:
J& l* i' b( X% Y# f( ZCWndMenu m_wndMenu;
( Y4 }+ X- x6 @* q% X# q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. |, e4 H/ m e" X: E4 g
其后添加:" w/ x: Z* j# X! G) O6 o" n
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 a, J: f v1 H5 A$ P$ ` ~7 k9 [8 }
* L' U: C( \5 O6 X$ X
|
|