|
|
源文件中_Interface文件夹下WndField.cpp文件& |2 c/ o3 ?. }: L9 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) t3 X; I+ m; S- H! N p$ j
, }& D9 C7 x2 U4 M
struct sItem( ~( }; a k( r8 i- f3 L
{
7 o* E7 U+ _3 x p% O a* I1 eDWORD dwId;8 \& J+ F) X5 R- Y. G5 T
DWORD dwKind2;% N) @- K9 P" z }. w
DWORD dwItemId;" x' c3 P T( }# }( l2 ]" L4 r
BYTE nIndex;1 c) u5 b6 x: _+ l2 C7 Q. d
sItem(){
% y0 E5 I ?4 J0 `0 v dwId = dwKind2 = dwItemId = nIndex = 0;% W$ O# R+ Y; P& w/ i
}( }* B3 T6 ]3 a( ?1 `
bool operator < (const sItem p2)
: r3 r2 P: F; q7 n B" X% b& \{# q: z' n. D# a K/ a2 i
if (dwKind2 == p2.dwKind2)4 n1 d4 t9 R- V g( i
{
# p& w3 g6 T! [2 ` return dwItemId < p2.dwItemId;4 q9 u3 g3 T: t7 ^# t: ]8 i+ z1 T
}else{
+ z7 |* B+ ~. Y8 h0 K! }% N/ C$ [! S! r return dwKind2 < p2.dwKind2;
( }# A* q/ K4 `5 l) Y }/ T' E4 C6 [; s1 C& b9 p
}
- I2 W u1 Q& J) b};! h/ D2 C- a3 n
class CInventorySort
}1 W9 m1 e$ N- { A. C5 w& a7 b9 D{
( {! x% C: O: ppublic:$ z. `. U+ t7 J- A
CInventorySort()9 f1 R' t: x) L4 f
{
: b6 K! w4 ^1 _9 x3 k m_dwPos = 0;& ^7 D; `% [5 T/ X) p
}
9 L4 D4 z6 L3 q4 F1 E" V~CInventorySort(){}
; S& V' j% h5 R- }* Tprivate:
/ S4 A9 D' @ s! P9 D1 a" BsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; I) p/ ^; ]9 E* n/ bDWORD m_dwPos;: d* f) g V6 C2 [- G4 E
public:
9 Q! n/ x8 T/ vvoid Add(BYTE nIndex)! |+ S% Y. }4 d+ o/ e0 e4 {7 ?4 q- ]
{
, F; g7 u( V& K+ K, u; H3 E( _0 V" s if (m_dwPos >= MAX_INVENTORY)+ t: t2 l g0 E t" f3 J
{" X) w& D. `& A& Y7 l# T/ b
return;5 T8 D: @: C) p( }
}+ I2 i- R @' J4 q7 [5 P
m_Item[m_dwPos].nIndex = nIndex;
( d% t+ F) E- @ m_Item[m_dwPos].dwId = m_dwPos;4 f, R. N) c4 A4 C5 N
m_dwPos++;
* r* m7 D9 |3 m}
" I. z' J% u1 {- w; Y" G, ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 @/ D4 M, {! `' K) a, t
{
2 T0 R) z- d0 }1 C" W! I! O for (int i=0;i<MAX_INVENTORY;i++)
7 C1 u# ]+ D* y! ~3 G7 L {& c7 o3 [6 H6 O: J) J5 { d' E" y* p. W
if (m_Item.dwId == dwId)" E; w# [: U2 n
{1 l/ w7 R, N! @+ E5 `
return m_Item.nIndex;
' `* K; Q C+ |; }. K9 b }
' {5 R1 l: V, s! k1 ]- I6 R1 K1 x( t }0 Z" e4 @3 c7 G4 W
return 255;: g% m" ]7 S( T* Z
}
& F+ v4 a7 Y ?$ lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. ?- M# f' |$ h1 n3 y
{$ R$ Z, }- q. d1 g$ ]' h6 d; j4 Y
BYTE nTmp = 0;
" J4 `, U+ Q" j# n$ A. w bool bDest = false,bSrc = false;6 H" C# T4 m+ ~# M& i
for (int i=0;i<MAX_INVENTORY;i++)! u9 {! j5 Z& g Z" P$ K: ?5 U
{
- r8 C& n$ E9 M- t if (dwSrcId == m_Item.dwId)
5 ]7 A' q" ]: m0 L! X' o- c {
! A# K0 h# L2 }- A //id相等 则 改变对应的dest和src
+ M6 i9 {6 j" E& y/ J% `* f# g2 G- ^ nTmp = m_Item.nIndex;
" z7 F$ h# h- a5 Q. P' Z m_Item.nIndex = dest;
, c7 a; |3 ]) g/ C( n) R( u }8 a; S$ i7 W3 N/ K, F4 q5 s
}
! r" s3 Z; F0 \3 N" _- } //临时数据保存完毕,交换开始
* {- A5 z% A5 ^* y. P' T0 U for (int i=0;i<MAX_INVENTORY;i++)6 [+ O/ |, ?( Q2 ?4 t1 s
{
4 W& ]& w/ U6 d if (dest == m_Item.nIndex)
* @9 Q0 \, ?! W9 z {1 m% a. {, z i$ C
//id相等 则 改变对应的dest和src( F* b5 B; q1 C5 J4 F+ h; u1 g
m_Item.nIndex = nTmp;
# K4 N3 u( r9 O# ]! ]2 m }4 C; |5 ^& \& p# z. u. o
}8 Y% p: ]2 E. ~/ t% n# l
}
m7 q, e' p3 l! L3 O8 F; m};
4 I+ m$ v$ A% I* u, k-------------------------------------------------------------------------8 ~0 t% A: X( Q( M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! T/ b. P$ G0 Q+ Q) Z. ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 v6 E) c" Z) C7 m! ^; |紧靠其上添加:
4 B8 p% Y1 N2 N/ oif( pWndBase == &m_wndMenu )
9 \& g C! \& x2 g, O{
% P6 _9 h6 w5 n switch( nID ); s3 f' D' m! M6 ^
{
0 q: d/ C& R7 U* N, i/ G L5 l case 2:
* ~+ ?: l0 H0 H5 v; [+ Q; V {6 c' Q6 b e/ V0 n9 b
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 W. `& x) P7 ^% v1 r$ \9 r if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& A6 s% h. ]0 d! l! x
{
" J2 d, `; j: I; p! N break;
$ K# \5 p/ q6 N }* q. U$ ^- ^; I# H
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
`* W: o8 j6 e# v4 t* {/ v {
/ p) ?" p6 q9 g# M* K9 P" \% D' u* D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, e7 d3 v a& o8 h/ |" D2 {" s
if( !pItemElem )
# B& w, X H! T' F continue;( I- r( w. a ~% b
if(pItemElem->GetExtra() > 0)
( Q4 n5 O1 j5 Q. N continue;' @) `6 `5 i/ S
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - F0 B7 Y; i" q/ n4 e# @
continue;
+ r8 L" j2 y1 _0 D# r& b if( g_pPlayer->IsUsing( pItemElem ) )3 P1 F4 a8 v" A& I- ~
continue;4 w" E, g- I+ E& G; ]" N% x( B
if( pItemElem->IsUndestructable() == TRUE )5 U2 |8 p3 y, o/ C5 }; y3 N
{
# U" r, }8 v7 O g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) g$ u9 V6 m! ~" ]7 H& j% E
continue;
7 ?+ y0 Y4 b% x }
/ A' d, M" g/ X3 B7 y% E/ ` g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! {0 W/ V7 [' ^6 q7 N$ M- |, |
}) I: o( y; k$ d9 M- n6 b
break;, U& P) k" z; E) K
}1 E/ X, q, h5 m- |
case 1:; u Q/ W x* [8 w" u
{ h: G. x- W3 c+ q
//整理背包
% E4 s( H+ r& I2 S+ z$ o4 M5 T F //////////////////////////////////////////////////////////////////////////0 b: w; \# |9 S. | r: C* N
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ X* ]; ^' U( N* E
//////////////////////////////////////////////////////////////////////////5 i% E B9 b) e
//////////////////////////////////////////////////////////////////////////
7 P& l5 ^: G/ f4 K/ B CInventorySort* pInvSort = new CInventorySort;2 d: ^8 r- w" F$ ]0 s+ F4 I+ s
vector <sItem> vItem;
' J4 g3 G0 W/ P1 K! T6 [ vItem.resize(MAX_INVENTORY);//初始化大小- o: k6 q: D* e2 G
//////////////////////////////////////////////////////////////////////////
9 H% z9 x+ L, g; X _3 _' D //填充数据
( t5 t5 g1 r, U9 b6 q; m9 r( v for (int i=0;i<MAX_INVENTORY;i++)
5 }7 X) n0 F: S {* y1 j& j+ m/ f' y# J" u! {5 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 H" l8 [' i% Q1 Z% C5 v8 S5 _2 `
if (!pItemElem)% e b9 [% A# O% W; C. \3 s
{& Q! T+ F v5 e1 Y0 Y! `) c
vItem.dwKind2 = 0xffffffff;
0 q7 F4 P$ ~* L F+ b) e# N; m vItem.dwItemId = 0xffffffff; ]$ z7 q5 P* s+ k9 N5 M4 N
vItem.nIndex = i;& I5 T0 V% f. @; y& B
}else {; c5 E+ U" Q& e8 V
ItemProp* pProp = pItemElem->GetProp();) e% i+ j1 R# ~+ L9 T* Y1 y0 I
vItem.dwKind2 = pProp->dwItemKind2;
4 [' a5 s5 o! h$ i$ E& I0 ~ vItem.dwItemId = pItemElem->m_dwItemId;& B7 [6 N8 D% M# ~
vItem.nIndex = i; J3 C+ a0 j1 s; z' r$ F
}6 _& E; A2 |( b# O0 w
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 J& H" `5 K0 d/ p) \0 o0 G
}
) y4 i4 C! C! _ //////////////////////////////////////////////////////////////////////////. u- Q) O% T/ Z g7 A, S, | E
sort(vItem.begin(),vItem.end());//排序/ H0 T* T: j: |* m
//////////////////////////////////////////////////////////////////////////' _3 _, j; s' p. w6 O# G: [0 m
//交换
1 e# p+ V6 r) ~- L, f for (size_t i=0;i<vItem.size();i++)
. ^- h+ G% K' E3 }& G: J1 r( N {2 H1 S d4 W, G2 F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. i; r4 \5 u! ]! F' |# f
pInvSort->Add(vItem.nIndex);
# C+ v' x* w! p8 Z7 a) F& E, d }
" G I& V1 c3 j. F+ [$ L BYTE nDestPos = 0;
4 U6 R, K) l- d" v) a3 l for (int i=0;i<MAX_INVENTORY;i++)
4 T/ W6 ~; o+ p+ e {/ U1 o" ^ u7 J3 S9 J4 M7 ?, M
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& _- @$ ~' Q9 {* Q
if (pItemElem)0 d! r1 m- q' q( Q' |
{# O f! g1 f. ?2 j9 S
if (IsUsingItem(pItemElem))8 S1 z4 r- z5 C0 L* l; V
{
6 W' Y$ z5 s' t0 I //这个位置无法放. a u+ l; b0 W# Q
nDestPos++;" J+ L. c' _& `- [6 W9 G
}* l0 Z, j5 b/ u- K. d% y0 O
}0 l2 _- m5 x p& O9 o. i
BYTE nSrc = pInvSort->GetItemSrc(i);
8 z: C5 C! G8 ~1 x* A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); T B. R7 P0 x; U( d) d
if (pItemElem)8 ]$ \4 v5 y* q& Z* ^' z
{, u/ F; g0 w8 E
if (IsUsingItem(pItemElem))9 W* F( n8 J R U2 K+ ^" s
{
/ R/ l. V4 @8 l2 b. N //这个道具无法移动,跳过
$ `9 [' m8 A+ z3 K% p* y continue;
% p0 p W: D4 I }
0 ^- U& y, ]& I& O" y6 E }else{- U1 _. q, _% M1 i. G' K7 I
//空位置 不用动
" T1 n) a$ M, a+ T9 c' Y0 w continue;
& n6 n% M/ A0 D$ z* t" G }( Y/ J; `3 K( L; _+ Z7 c* J- F
//////////////////////////////////////////////////////////////////////////6 O! i# v- e" S& y) X6 g
//开始移动4 _# \- m- t7 G- }
if (nSrc == nDestPos)( o( m1 l1 `+ ?
{
6 N) z% ?' W% `- @, z: f) z //原地不动0 R4 v( V8 w% L u# h' M) t: Q
nDestPos++;
: Q0 X/ w- N4 R3 v continue;
. k6 u, x z! h: u3 R. ~0 B' U- w S+ I }: t, F/ u+ I: N. j% d) i
pInvSort->MoveItem(i,nDestPos);
4 ^3 U$ v! y* \7 `" y! ], v g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 l$ N+ @+ f S3 d. f1 X. x3 H) A Sleep(5);, E9 J4 O9 {( w9 F# L! W2 v
//Error("移动 - %d->%d",nSrc,nDestPos);+ ~1 B j# X. j4 H/ v% h1 _) r
nDestPos++;
( b5 z$ @0 a2 e7 O6 D& b5 J8 C, F1 z }: W) p2 c) r# T& }
//取第一个元素的信息
3 I( `% H1 L. t7 e /*4 Q N6 Y. c% [& I l7 U
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- H$ X/ u2 x! V
{
' o; j! X9 {+ x- e0 l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ l+ a# K- m/ }4 ~+ I6 S g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) B# t5 v8 ^4 ~7 N
}+ u+ I7 D. [6 j1 h' ^
*/7 K. z3 @9 R$ _2 B7 \: r$ g
//////////////////////////////////////////////////////////////////////////! T e+ ]9 Z7 C0 W
break;9 |& b( B6 m; ^4 J& a( I" \+ c. \
}
- V* u! s7 p; D, a# j1 }6 s }
: h! Q5 J' K8 j e: U ]5 V8 t}
8 }2 ^( ~/ a$ ^/ Z% [! B3 @8 i) ~m_wndMenu.SetVisible(FALSE);- e! p, Z1 ^2 \$ Z
8 |2 \' j5 X6 Q' p! x8 m$ ?) H
--------------------------------------------------------------------------------------------------------' q0 V3 V" D5 k6 c% _, h6 u
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, [ u3 M# f8 k' K% J6 ^, h{ Z% l/ W" C. j, J r9 f
BaseMouseCursor();( E( y9 h& g% `% D2 U$ Q& u
}! j: |" y' ^) f6 {' ?
在其下添加:
3 A" C8 y4 ^3 @. [6 F- Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' T) S/ j @: ^* A/ u5 p
{
( J0 w2 m# W) n1 L! T4 `m_wndMenu.DeleteAllMenu();2 O7 E. `) i& ^% E1 }* t& q
m_wndMenu.CreateMenu(this);
1 e" m0 b+ S; R% ?1 Z! H! Z9 i6 Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. _5 Q# K: x6 g1 O
2 j' x; u6 p& s! e; s m/ ?, [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" Z" W' P5 q# o) ` ]# N. m6 d{
" Y/ ~, w; w, v( I! i2 f( C! r //P以上级别才可以删除所有道具* a+ }6 o$ N" N$ A
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* t" Y- q; X' e/ S3 S$ I; {
}. E2 \* F/ c- T; O z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% q: m1 a" M! ^, g8 p2 U+ \
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 q9 {6 J9 |0 ^( L6 y: x5 M1 E' Em_wndMenu.SetFocus();
8 E" @2 p$ [1 ~$ U}
2 ~* F" k' U( u* ?" M/ Q------------------------------------------------------------------------------------------------------------4 w& s/ _1 w& \
*************************
, U' c- r% r i- B) p! aWndField.h文件1 ~8 O+ y8 m( s5 r: `! m$ B
*************************
: P% a) @$ a5 {# o( N3 T搜索:BOOL m_bReport;* I7 j5 V8 P% }1 Y# ]0 Z
其后添加:0 ]/ ~- c. w/ n
CWndMenu m_wndMenu;
# x+ }6 Y# z& Y7 @7 J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 P9 v+ m5 t/ ~! d4 v. u- H其后添加:7 I9 f) z% _, ~! {9 q/ ~6 U3 y
virtual void OnRButtonUp(UINT nFlags, CPoint point);' j& K% [& d& c9 f0 b% f- n
9 i. w" P9 H# {6 w( O) b2 L5 q% {! X
& Z+ |8 J( q$ O5 ] |
|