|
|
源文件中_Interface文件夹下WndField.cpp文件 e, m0 Z! k1 c4 v2 j, b% o
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ O( Q5 `& a. b# v6 Q z# B+ j% H( u5 I8 O( w
struct sItem2 S/ |; R" e. e1 L
{
/ P0 F2 H0 T# W7 D; H0 wDWORD dwId;
% r: F; r- \9 d1 n# j8 G: zDWORD dwKind2;, ~* g4 g& @/ t& I3 \
DWORD dwItemId;
8 l, K5 I+ \: U1 L W, K! NBYTE nIndex;0 a$ X' q( R% g5 ?9 i, f
sItem(){- _9 R1 s7 W1 k7 Z
dwId = dwKind2 = dwItemId = nIndex = 0;
" m# t. P% K! g& g$ w# ?) A}& w- e5 [, T( O+ m! I* p9 x8 `2 K
bool operator < (const sItem p2); R# K. Y! s" l; k( x( w/ E
{; y3 i) L9 P4 ]$ v( B
if (dwKind2 == p2.dwKind2)- n9 ? D- e' n
{: M$ ^' [# u; l9 C% T0 f
return dwItemId < p2.dwItemId;/ `: P7 C/ O3 H% l" y! t
}else{8 c3 a- n6 p V3 m, e
return dwKind2 < p2.dwKind2;
# r( P* ~0 P& E; u4 N0 M }
' b g. p" v% F$ h}
5 d( ]! S; y: q/ T9 P};
6 H7 V% }3 o; Yclass CInventorySort2 T/ J0 I2 C5 l/ }. {% k
{% k- c! c2 v/ h$ w
public:
/ s2 v- p- }" ` ~+ W( wCInventorySort(); H# n7 B9 W) {: [
{4 S, \5 b5 ~" G* I, \4 ?* j
m_dwPos = 0;
1 |: s0 {9 J( z* h* u}: {, ?. }8 U$ Q- Q& a
~CInventorySort(){}. k+ l2 Q/ y8 P- f, v
private:0 q6 i9 m3 p) a* V. k7 W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 b: e. `/ l7 |DWORD m_dwPos;
4 Z, x, L, e2 q: Gpublic:1 s n( E6 |. n" e( `* d3 H; j
void Add(BYTE nIndex)1 L+ A! P1 J5 w5 m1 a: W& O
{
5 O4 o9 x* j7 w& O& ]9 j if (m_dwPos >= MAX_INVENTORY)
+ p8 ~- q1 g! [ S% a7 \5 m1 \ {
" V$ h* b; C7 [! M. {" }0 N return;3 T5 c! H2 E- z6 z& @
}8 r2 {; F. k0 w4 a- R
m_Item[m_dwPos].nIndex = nIndex;
, v5 A3 C# S6 K9 F$ B I' x m_Item[m_dwPos].dwId = m_dwPos;
( t1 ^4 {- o/ W& l6 B m_dwPos++;
/ e0 M6 ?3 s Z}
2 v3 W* v: C9 dBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 Q& S$ f0 d/ e! B5 `) V
{
" w: t% f( S- `5 V! M1 a$ U for (int i=0;i<MAX_INVENTORY;i++)/ x; G/ D$ C8 |
{& [% [/ n" O% O3 M) o8 b* q
if (m_Item.dwId == dwId)
- g) g- ]. i; c {
9 k' [5 a$ G. f, ` return m_Item.nIndex;# b% p, t3 Q( C' M1 S/ T1 W
}
1 _0 @ l( z9 ?- G6 G }& h7 w: ?) y% v8 j, ~* L
return 255;8 S8 n E, h9 S: h
} q2 n4 `) w; t! v4 l. r, n
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: C+ G5 l3 }7 s# K{
( E# q/ t% b) F& i# `8 g t- { BYTE nTmp = 0;
4 c" J7 U. ?" ?8 a6 S; q# R bool bDest = false,bSrc = false;
! R% S, J: I' V$ T6 A- ]! r' C for (int i=0;i<MAX_INVENTORY;i++), W% g: g* N4 Z* y/ A1 T
{
3 [" n; _. T9 k7 j5 } if (dwSrcId == m_Item.dwId)) \9 m+ M6 h" i! d% W$ t: |. [
{
, E" `, F9 M1 ~ //id相等 则 改变对应的dest和src
. V' J" A0 y0 o nTmp = m_Item.nIndex;
4 p4 x' b% Q1 t; q m_Item.nIndex = dest;
# x+ k; w& I8 r }$ E0 V: d- Z i. x9 }
}
1 E$ M; k! U" R8 ?9 F //临时数据保存完毕,交换开始
. u* k: r9 ~ n' @ for (int i=0;i<MAX_INVENTORY;i++)
. l$ r# i- q) w7 n {
" D/ a( I! n, H, W" q if (dest == m_Item.nIndex)" e% j! V+ _9 v* E7 B: m9 r
{3 Y+ l& v/ b( |
//id相等 则 改变对应的dest和src$ V, ]& ~, F0 L+ s0 o9 N. c: D
m_Item.nIndex = nTmp;
4 V% S- j1 ^' T) @" ^. ?0 D }
. i0 r+ I; H% A }
5 k& [9 T/ z+ B: S7 }# Q}: L. ]3 M+ K5 r
};
) e4 J; v4 h+ I( E8 W9 p-------------------------------------------------------------------------
# X e1 b6 |: V- n依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 r- @. W3 W. g% Q x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' t( ~+ v& O/ _/ e7 S6 {/ f紧靠其上添加:9 m( S4 {; `6 {# o1 r* p
if( pWndBase == &m_wndMenu )6 G% m3 F' j ]1 a4 W, @
{2 y# A% p" x( i! ^0 e) k. i
switch( nID )
+ f* C4 B+ P6 h {
* _ D- \% C3 I2 V: N0 t case 2:
# o# V1 Y/ m7 T! [8 T0 w {
# q+ @. F& o: T+ R //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ T7 d! @, t! q V+ J6 v- w0 S if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); X& f8 X) [: c! z4 D
{; ]! c8 l' f" x6 k
break;' O9 C- b4 x& j Y$ ]* P, z
}1 h' S: h/ A' F$ S! H
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* }: M, Q7 S% q {
- q0 w8 G1 t: [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 X) \. x& l+ B5 t- o+ {
if( !pItemElem ). Y8 X2 }4 e! E7 z
continue;
+ S! o W# K- N- S6 N4 ] if(pItemElem->GetExtra() > 0)0 B: m7 E3 {* p3 r
continue;1 j* d# z8 I# f' I
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; l4 `( z- F2 K% ^4 v- T
continue;( q# G+ l! E/ W4 Q. p0 i2 y
if( g_pPlayer->IsUsing( pItemElem ) )* u4 @) c* h5 t
continue;/ i7 c3 b) u8 S0 u! b
if( pItemElem->IsUndestructable() == TRUE )
- @$ A% z+ q8 Y( A. f5 ? {6 Q5 D+ @8 c6 x( o& c1 o
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: t& r/ w' c& A8 \$ k continue;) i6 `& T2 y* S) ?, L$ o
}
6 m. A/ Z% `. a' T% ]" w3 T, A g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; o: W* z; p+ `( K/ K
}3 X* U5 c/ w e. e
break;: l# e1 E, J+ O; Q- M
}. B: G0 r" k3 B7 f- h
case 1:/ K' s7 A8 l/ ~9 p: D$ i
{$ T4 @. t2 g0 R1 l1 q" z
//整理背包
' L( g* z) |% L2 ? //////////////////////////////////////////////////////////////////////////( G; a; c: m9 x, y4 d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ H% `& {+ t, @ W- Y6 k" C Z" }
//////////////////////////////////////////////////////////////////////////
& r) c* Y1 A* a. O# I( X //////////////////////////////////////////////////////////////////////////
1 @: q" y+ A3 k CInventorySort* pInvSort = new CInventorySort;& r: G* o: k3 {! g" E4 G: c
vector <sItem> vItem; k1 v% y: [3 r1 R1 Q; e
vItem.resize(MAX_INVENTORY);//初始化大小
1 j5 ^ v/ L4 C5 n }' Q //////////////////////////////////////////////////////////////////////////
4 G6 M4 Z, O3 P0 E1 x) h" a4 Q9 E //填充数据# q {# }4 x0 P; ]& b
for (int i=0;i<MAX_INVENTORY;i++)
0 O! r9 j9 y6 {+ s z {: u3 w- a) A: S( L4 R) }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! t) y; X4 Y; o7 n7 I U9 d: w* Y
if (!pItemElem)9 ^3 X% ?. K% h% b' j* `) K; ~
{- T" R7 k6 k E6 H9 P6 x
vItem.dwKind2 = 0xffffffff;+ G+ q, R# t3 g: S( f
vItem.dwItemId = 0xffffffff;* W' V" e! g$ N; C, a0 t# [
vItem.nIndex = i;
9 \7 I6 w, g7 }' A }else {
# h& B) S9 L4 w+ S4 ?! a/ Y ItemProp* pProp = pItemElem->GetProp();6 M8 L4 e( {0 i: W9 \; ~5 I
vItem.dwKind2 = pProp->dwItemKind2;
: K- w0 j, t6 T9 h. R$ m0 v vItem.dwItemId = pItemElem->m_dwItemId;- @- y) k! `8 _/ X3 ~9 L6 S/ M
vItem.nIndex = i;# k, j1 X* {& b
}; E) F$ z* J C" K Q$ o
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ e* z' R0 A( }' C, \1 m$ U }
' X1 p, L8 D7 g) A; T M //////////////////////////////////////////////////////////////////////////
4 ~0 T8 D C/ `$ w, X# ] sort(vItem.begin(),vItem.end());//排序
5 z4 M1 S- j% X) J% n //////////////////////////////////////////////////////////////////////////
2 R: u2 `/ g% N" a# k, ]; t& Z //交换
% o# r% l- @& c2 D# }) ], | for (size_t i=0;i<vItem.size();i++)
, ^" S" R5 W0 L {
' C( Y. n) A0 Z& I# b& d. U2 ~ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 v. i1 R7 Z+ \! n7 J
pInvSort->Add(vItem.nIndex);0 C# v7 L$ v; p4 K5 Z2 H
}# n4 ^$ q" K2 m, J3 }
BYTE nDestPos = 0;) R; i9 n2 o! s3 g6 p: Q) S
for (int i=0;i<MAX_INVENTORY;i++)4 k6 n9 ]- B/ s% T+ J2 S5 {
{
7 ~+ [, @, H2 d- f/ }5 A; b" _8 v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( f: |! I5 l4 K# B
if (pItemElem)
& Q3 Q, ?" t2 a8 a e- V* x& v5 v {9 Y" b+ F# T. o9 f4 z! ?( \, b
if (IsUsingItem(pItemElem))
8 e6 B8 T6 ~. { {/ ^! l3 t5 n* W( A
//这个位置无法放3 f* n- p9 L3 H9 X9 N) ]' B* f
nDestPos++;
' T* `* g: z2 X$ H0 m1 x& d$ ^ }7 m+ V3 j( V! m1 B$ F4 y# |* f1 C
}
6 ?9 J2 J- X- Z: s- ] BYTE nSrc = pInvSort->GetItemSrc(i);9 c1 J7 P* Q0 ~" A: h! ]
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 `8 |* V) d- D) s$ Z
if (pItemElem)
! k- {7 H @) v; X' V {
( ]. W+ @2 y& q if (IsUsingItem(pItemElem))3 }8 I! D7 K% w' i% j" F0 ]2 y
{4 ?: v& C: @0 l
//这个道具无法移动,跳过
3 c' e" q! i0 |6 \6 z continue;
( y. {3 u6 z' V9 w }! _' M5 p0 c( c" h4 g
}else{0 P, Q& U( q/ H0 E3 R
//空位置 不用动
# c) v5 a! O; m7 C continue;5 v4 a1 a5 w a0 @* J" w$ Y0 f
}8 ~7 I" |! o6 ?" k
//////////////////////////////////////////////////////////////////////////
! w1 u8 U4 u( J4 s //开始移动
2 A7 _+ b, s# u4 k8 w/ ^ if (nSrc == nDestPos)% U& s" F3 ]9 c* N
{
# Q% e7 w6 s1 Q4 j( x8 I8 d# v //原地不动0 O7 j: o9 K. `* Q
nDestPos++;
a6 z5 v0 f# r- n continue;
& E! d' T2 o; Y0 C$ G6 ?, C% N }
" w7 C# |# \" t6 d3 C/ g pInvSort->MoveItem(i,nDestPos);
3 l& K' b4 a; J g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 i+ f" G# W; p' t Sleep(5);
0 C- F4 J M: r) p5 y9 F' d7 | //Error("移动 - %d->%d",nSrc,nDestPos);: m y7 N9 _1 _3 w& i
nDestPos++;
, `5 e; u/ X$ ?) d" ]# m3 B I, \8 h } U# M- z. T) }( f8 F" K- t
//取第一个元素的信息
0 d2 m4 |, Y2 s1 B' l! Q. ~1 P" E /*
8 C! M( L2 u5 s; S if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# Z% Y; c8 v3 q) G {
8 ?# F7 M' d4 p9 O Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' v1 \% C" p9 H$ S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: T y" d) k5 ]2 D3 y+ d1 B* v }; s8 j) l! [/ v, Q; \1 F! l
*/
- C( _3 k) ]5 R$ ? //////////////////////////////////////////////////////////////////////////
# l ?3 r' Q! y6 j# g2 o7 s break;# I: v7 z2 ]2 q! L) A% @7 Y, A! k
}# Z/ Z# k6 ]' A
}
$ ]* U+ Q5 j9 p( ^7 g& {# a' N) G$ V}: I5 [+ z& q' p3 a, n3 S
m_wndMenu.SetVisible(FALSE);) e: e2 w Z1 W2 c/ a
8 @4 ?! R- d. M
--------------------------------------------------------------------------------------------------------5 P2 H/ A$ S. W, t- q I0 }5 {7 \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 A8 C, E3 S2 k% N( R) q% q2 u9 m{
7 _2 ]* u' y3 S! y# k3 y- uBaseMouseCursor();
' A& b% N4 ]0 B" I$ g4 q}
' E1 r4 ?( ^7 r/ n& Q* h在其下添加:
, p9 ?) B6 C D! Tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' s7 }+ [! {5 |{& P' @$ { S) E0 k7 d6 ^! O) X
m_wndMenu.DeleteAllMenu();5 t" h v7 T$ h4 t2 W4 u, D
m_wndMenu.CreateMenu(this);& w' p ~# t( @- G7 o# H
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; u1 o" n2 g1 s; k4 |' R" n
6 Z* O8 T$ g+ Y. Y6 k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* u, I+ y& ]% u% R/ X
{
7 w7 h; Q; f9 d$ f //P以上级别才可以删除所有道具
2 \: T* T0 i% ?) J/ I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; r' w. S) G" ~$ k0 ~# k
}
& n/ w- e; s' u1 u4 @/ jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); T: ^4 j7 l/ V- S# {
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );9 r$ S/ R0 Y2 x' x( u! J
m_wndMenu.SetFocus();
. f+ D P* O+ ^" j) {. Q}# d r8 t9 B6 P& k- P
------------------------------------------------------------------------------------------------------------- s5 S, g5 e1 {
*************************( Y+ g( O+ m; y
WndField.h文件4 x4 o% Y0 h5 c
*************************
4 y( Q4 x9 m+ c/ w搜索:BOOL m_bReport;
" q# \; f/ N5 r2 v; y2 c其后添加:
a! @/ R/ h, M: N$ mCWndMenu m_wndMenu;
* r4 a, ]1 K( h. u" ]0 S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
/ H6 G% c* S s其后添加:
. a; J; H+ F3 `/ H+ s Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);
! p( I! @. u* H4 p1 H
$ C7 \0 G: T E$ M; V* t- D. {9 \: c" R0 k+ Z& n/ r( i
|
|