|
|
源文件中_Interface文件夹下WndField.cpp文件
) {. h- q% Q! y/ u2 N- ~搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); E2 L" R) i" `" D" l5 G
5 D9 L7 z. _% m: z1 I* j
struct sItem& x" N7 e: u- `4 P9 s3 j
{
( Q5 I7 v, B$ ]# q7 R6 \* lDWORD dwId;- m. ]" D$ b; r7 V2 }% s
DWORD dwKind2;
8 j o) G7 v uDWORD dwItemId;9 M; O/ c0 L# G3 P6 }7 D
BYTE nIndex;/ a0 u4 @0 }4 i( K2 \; R6 K
sItem(){
* y; @' }7 \- W1 A' T dwId = dwKind2 = dwItemId = nIndex = 0;
. X1 ?) B5 o1 B# k% B. L4 K' I! ~}, e2 B+ n" [: _) n- {: z C2 {
bool operator < (const sItem p2)
; K" k: |# P9 _7 m4 B{/ M, R+ \1 \6 e: P4 V# x9 \# T( {
if (dwKind2 == p2.dwKind2)
1 q' v4 ]5 D: }' T. `$ y! E {
V$ K2 O* _$ C7 r1 o3 x+ {% U return dwItemId < p2.dwItemId;
4 B, @, c& k8 Z( ]1 V) E }else{8 |1 H J# A4 n! W
return dwKind2 < p2.dwKind2;
' ~, I. T5 S- a3 f/ z1 v4 ` }
! ]+ i: o( Z1 l+ F5 c+ D}
' g& ^5 L! }% m* }};" l( t( B- u& y/ k: P5 _ U! N
class CInventorySort( [" _5 Y9 x# h3 N; S# u1 ]7 p
{
. ^- u0 f9 E& M$ Y3 {9 Tpublic:
5 e6 n+ o0 k! U2 Q$ h6 K, jCInventorySort()
- m6 ]/ a. H' q3 O2 o{9 ?! r2 h$ y# S" p7 G
m_dwPos = 0;) C/ Z/ s+ S5 T
}
; \( P, l4 u9 F1 S# Y: X~CInventorySort(){}8 [9 ~" u- E: L, w
private:
" P/ s8 V& Q9 u ~# [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& Q) m0 y* x$ G; g4 oDWORD m_dwPos;
7 i9 c( N o5 H9 O1 Opublic:) p5 F1 T' |% `: G# G
void Add(BYTE nIndex), K9 @! c( {% x0 Z2 s/ V/ W( D
{
' f6 y8 f2 a9 q# [7 u8 S if (m_dwPos >= MAX_INVENTORY)/ }; P- i2 y5 ^7 g, q' D; U
{
& ?+ \+ z% l7 d2 _9 E0 h/ A return; }5 W) {& T- Y1 v9 I4 l9 }
}# |2 j* D' h' f3 R" z
m_Item[m_dwPos].nIndex = nIndex;
, ?/ n ~: _( o9 c5 H. O/ H$ s/ x m_Item[m_dwPos].dwId = m_dwPos;6 o+ ?. ?0 h' p
m_dwPos++;* m8 E0 ^9 |0 @" L' C5 n1 ?' i( F
}
, s# X' Q, n0 L; I5 XBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 Z6 K; }' Q( B% M, ]
{3 g6 q" f& f \) p: O% a
for (int i=0;i<MAX_INVENTORY;i++). L% t% U1 z& j* m( c
{- Y: k- `2 V6 O# D! q, R8 b" z2 ?3 P
if (m_Item.dwId == dwId)
" q+ J, P, ^+ Q0 A {) S' r. H8 i8 z+ @- ^
return m_Item.nIndex;
' N/ X/ }7 @9 V: m/ R* M5 \* D U }' { h: { x. F m
}
! O8 z' J' f. J# `" z: h# n0 y return 255;
' x6 ^8 f" o* X7 `" y+ f}
) Q8 W, k! W$ g U' y m; k8 Xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ k$ Z" z. v1 F1 A4 y' B0 _
{" t+ M( v5 d2 q* j! h' Q, j8 l
BYTE nTmp = 0;7 ]- ]6 r8 o3 G# F
bool bDest = false,bSrc = false;
5 C, ]% Z2 d2 B, C) s6 k, q for (int i=0;i<MAX_INVENTORY;i++)
7 ?- k; ^+ s$ g. ]9 }1 U: J7 B: w {
; g8 I) @8 Z; a if (dwSrcId == m_Item.dwId). E8 J' g6 A: g1 ]! i$ b$ k# g2 _
{
9 O' |, \" \4 Z1 E# y: X$ K2 {* \1 A //id相等 则 改变对应的dest和src, E1 d- U' y# w/ y, b5 i
nTmp = m_Item.nIndex;
* ?; e4 J0 c3 u1 Q m_Item.nIndex = dest; J4 J$ c9 ~& a; v
}
8 }7 @$ o' }$ W( ^ t }' L1 _ p& \+ {& L
//临时数据保存完毕,交换开始+ B- T5 e* O, v. r' _
for (int i=0;i<MAX_INVENTORY;i++)
! r) n0 [0 G' W. B) v* \5 ^ {: `/ N3 V# T7 _, H% E
if (dest == m_Item.nIndex): U- i9 i+ y# L, Z _. k+ l* I: {
{
. a9 s. V1 y8 _. r //id相等 则 改变对应的dest和src
4 v3 E: U. t6 p+ L2 R- Q4 J3 B8 e m_Item.nIndex = nTmp;
/ S& V# k: m$ E. s9 J! j }
5 @. Q: w: N7 r% j, k }
6 L$ T$ n8 Y; _4 s- k}1 g/ q" r( B; C& d9 g Z+ {9 E+ M2 @
};
: C6 V2 @/ j1 Y8 h3 ?-------------------------------------------------------------------------# e+ l! q! j, x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% ^5 b9 e) E* ]! t# I2 b搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ d) v; S+ ]6 a/ @' \
紧靠其上添加:. V M; j! l( G5 ^8 N" [
if( pWndBase == &m_wndMenu )
$ |" v. g8 P Y s+ t0 C' ^& I{
; d/ V C7 W; I1 q' r% z5 Z& o' l switch( nID )3 E K, X6 M& F$ T$ ~6 a
{9 P7 W# J# L* J9 e) w
case 2:
/ u. g/ q8 G$ m* I" d {) C- F: v2 m7 m+ S2 m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: k) Y* `" v! q# b8 w if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 l* E3 @& l4 T }0 ` {
" ^. t+ Y7 Q# |& f+ ]# F( y break;
% d; I1 K# I+ Q) c }, v: t0 j. D6 d. e2 B+ V
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- e. S; q9 E3 B9 t6 R1 E; o1 w7 c {0 u* B8 |) e1 b$ ~5 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' v3 I- D# o3 i# E' W
if( !pItemElem )" d/ R. m/ h3 y* ]; W( f
continue;
7 E- A5 K$ X9 p4 Q6 W; \+ I if(pItemElem->GetExtra() > 0)' s1 d& @& t' J0 n
continue;
: \( Z: U9 Q% N/ m) ] if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' Y0 [/ W- e. H0 }3 M+ H continue;
) \+ c8 e% C& G+ Y! T' Q& m& F+ x if( g_pPlayer->IsUsing( pItemElem ) )8 B+ K6 F. M! P: R) F2 f* v
continue;
5 z2 h$ D& l9 e: Z if( pItemElem->IsUndestructable() == TRUE )
- Q4 F" `% ]! ?! `" w {
4 W; B) m& r: P g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! ^# }2 q, c$ l( f continue;- \6 `6 B) q! T
}/ Z1 m% N. P- d- \! x4 ?$ A
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' X4 l- V) p2 _3 p, c% i1 N }
( Y9 ]5 N7 w4 I5 W break;! U% d8 f% l+ Z
}$ n6 c9 o" D" y- q1 Z; Y A2 \7 s$ E
case 1:& C% q, p' ?0 S5 \% D
{ l! \- I8 S2 N0 ~( @: L/ j
//整理背包
9 I- J/ {+ L* B4 S- F. w //////////////////////////////////////////////////////////////////////////
3 g' ~/ }, Y' q# R- N# s //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. v2 c8 i/ b9 |( H6 ^9 T //////////////////////////////////////////////////////////////////////////3 w# H$ K4 m( A% K( z9 I3 Q
//////////////////////////////////////////////////////////////////////////% t* Q! D: v1 ~! h2 j0 a
CInventorySort* pInvSort = new CInventorySort;, `' Q7 z& D0 D ^7 o- u1 m4 C& k
vector <sItem> vItem;% @4 g, d6 o" T# R
vItem.resize(MAX_INVENTORY);//初始化大小5 n$ j, E, ?! ]! S7 x* x
//////////////////////////////////////////////////////////////////////////
/ s% Q& _) W- s# Y. K //填充数据
9 {7 k* N: u+ H7 U3 n% }% e1 m/ q# a! g for (int i=0;i<MAX_INVENTORY;i++)
$ U- T/ O7 j0 ~6 d; |9 Z {
" _' H+ @6 m: L( H+ J5 F/ A( a; P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 \0 o n* Z5 @* ]
if (!pItemElem)
0 M% |2 v1 W2 t9 p& l {6 p# W! }1 [- y- S- [
vItem.dwKind2 = 0xffffffff;5 r) o% a/ y- e: U( h0 ^) S
vItem.dwItemId = 0xffffffff;
9 M6 k8 ]1 T, V# ?( v% T vItem.nIndex = i;
# a. u/ s! \' E/ u5 R3 g }else {; o( e8 ^+ s7 d5 `0 g- u4 O7 N
ItemProp* pProp = pItemElem->GetProp();
' o# l o6 {" q. y' R, ?6 n+ D vItem.dwKind2 = pProp->dwItemKind2;# h0 {4 t% N6 F& E" C6 g5 s6 K: x% G
vItem.dwItemId = pItemElem->m_dwItemId;
9 l2 F- P6 G" q vItem.nIndex = i;
3 K$ n7 z* K. j9 ^8 B }
! B, u$ v3 g2 x' e" { //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' j T; @) R# G4 p* P8 B, g
}
7 I$ I' X& A7 n' e9 c! E2 u //////////////////////////////////////////////////////////////////////////
; t& k% f* ]4 v/ k. u sort(vItem.begin(),vItem.end());//排序
$ i4 a( a; I) I* g, d b/ X //////////////////////////////////////////////////////////////////////////; C, W! t" P5 b# ~0 `& N- O
//交换
( t' n) e6 X7 C, t2 n3 ~" L- h for (size_t i=0;i<vItem.size();i++)) [) D) F0 m+ G4 X6 d9 @2 X8 r
{
5 D) O% q3 A1 u% n) e5 r7 F7 S //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" W8 s! Y$ |9 I" @ pInvSort->Add(vItem.nIndex);! j4 G0 ^, c3 x4 v
}& D- ^7 b0 Q$ Q* I/ W# l( P$ N7 C+ J
BYTE nDestPos = 0;
; V/ S/ i' ?; L. j for (int i=0;i<MAX_INVENTORY;i++)
% Z% V$ b- y, u( w {
; c0 o8 A2 o @5 P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* H% Y; x7 r/ i! z/ Q# G2 f& S# q if (pItemElem)
' B& m2 \6 u! y8 a" H {# o( _# r" D' x' k& S
if (IsUsingItem(pItemElem))$ J* j; a0 F6 Y% z! j8 B
{1 o0 H: f& U' ]1 ~0 d1 L
//这个位置无法放
2 j; k0 h# P/ C2 v nDestPos++;
# v7 {4 _4 E6 H8 f1 Q$ p: \0 I }
6 Q$ a5 E$ k' V# h( R# Q) q5 f }2 |3 S2 ] I- z: T
BYTE nSrc = pInvSort->GetItemSrc(i);
5 C2 h4 R9 l. O- p5 a) J$ l# y) q6 i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. p! c, w" A: S% m5 O" H if (pItemElem)6 \# y8 `- U5 n# B1 v0 a2 S
{
; I- J# m& I* B: R( U7 q: u+ v+ G if (IsUsingItem(pItemElem))
# | i' ?9 o. ` _' l; V+ r {1 Q; n" O/ U/ S% b. B0 x" G
//这个道具无法移动,跳过
8 q- ^* `" @1 C continue;
/ A6 t) e, }& v; R }9 t7 T9 w$ w$ p$ K1 E' U" A& W k
}else{- U1 W; p7 l2 X6 F' C' p, J2 @& y
//空位置 不用动
' X; d# D" m: v- T% y" U' i+ v& E continue;
/ F+ c3 J: z4 }1 Y }
0 D' o" N5 {4 ]4 d; z- m$ K/ i2 ]; E //////////////////////////////////////////////////////////////////////////$ f9 g% R- c1 u8 S+ s8 }
//开始移动
" E8 Q) J0 `6 `0 v if (nSrc == nDestPos)7 z" W- L f2 t% U8 @, C
{, }0 e8 G3 o& b3 y
//原地不动7 M0 g. X; C5 f; S$ [% W) A* }
nDestPos++;
m$ \0 \8 D! q3 g2 B continue;6 V1 D4 f( u, t3 \
}
! `4 A# V& x! l1 M! Y S, g: y pInvSort->MoveItem(i,nDestPos);# z J$ b/ y+ \7 J8 [
g_DPlay.SendMoveItem(0,nSrc,nDestPos);) o5 _" a2 A& N* w* l; Z
Sleep(5);4 T# D3 Y- s! u9 ]& y4 n0 z
//Error("移动 - %d->%d",nSrc,nDestPos);
, y: g+ J9 h' C% |0 p+ ^ nDestPos++;
. _1 F# `1 o; K6 U4 b B1 l }
7 @. E0 l7 J7 w8 d8 H //取第一个元素的信息8 T. Q: \, i' J
/*) L9 d; |. M- X/ c
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): H* r+ t- S) R! T; \4 L
{0 ` F) n; D; r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 o! _0 A3 e9 w7 `2 \0 y0 s- ]
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 ^& I4 `) C0 H6 ^1 Q! t% ]. v }1 e; F, A2 k( [ h ]3 w: a
*/" k- f8 J9 w! k" g( b: B+ P
//////////////////////////////////////////////////////////////////////////
8 {) M2 X, e* Q, k" ] break;
- K3 C0 m Y0 C2 u5 O3 j }
* ^9 E9 O' W9 R+ a; H! ?" n1 z }
5 c! y- Z5 H% b7 U}/ u5 E& x _" g7 ~7 T& @. q" S4 t
m_wndMenu.SetVisible(FALSE);
8 q3 V, H) O+ X8 X/ x0 @
4 T9 u$ ^% F% K6 @; Z% ?-------------------------------------------------------------------------------------------------------- _$ P3 o8 q; c# W
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 _4 y6 m2 [7 g9 ?$ I+ ^, B{
2 H3 t N6 E' I0 f2 b1 vBaseMouseCursor();, q* q( e7 G. a. v* d1 ?
}* R, e6 q. K4 h9 Y+ n# N! z
在其下添加:
* A1 y) O- a4 `$ ^' h( B6 x& mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; l( y' X1 u% i2 O{# v( g# }* z; W& G* i) Q
m_wndMenu.DeleteAllMenu();
! f6 B1 w" v7 N- Q5 @/ P$ Xm_wndMenu.CreateMenu(this);6 F( ]$ j$ a$ c9 P% Z3 F V
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 P/ @+ w6 p0 I" E/ k% q
+ n0 \8 a2 L3 P8 o
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 x0 m. w: q3 a$ E# E& Y9 X' f1 Z
{% Q7 {9 n& M6 b* T7 d
//P以上级别才可以删除所有道具' }& h! J8 @1 ~3 ^
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ [3 Z4 J* ^! G0 M7 q: ^}
8 Q. {" Q; q5 um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# P, g7 Q+ R: W- M9 j! Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ E' F) L3 I2 s$ K1 \- _
m_wndMenu.SetFocus();4 A& _( _, p5 D
}
# m" O( V' L9 w) V: B# S+ O& E------------------------------------------------------------------------------------------------------------
3 x6 ^% {+ j/ L0 i*************************
1 u. I/ r0 s" }$ DWndField.h文件' S' p% c& `0 @* G* x
*************************4 Y7 A( X7 w; x" f
搜索:BOOL m_bReport;
7 X% K/ Q+ s, E其后添加:9 Y ~; \* A9 H$ Y& |8 |
CWndMenu m_wndMenu;8 g# }/ g" m' g' l
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 p/ p0 ] T' n$ R' s7 q$ \3 _6 [其后添加:
7 `3 r2 i, z/ y3 e3 U8 wvirtual void OnRButtonUp(UINT nFlags, CPoint point);3 n! ~% D, ?3 J; i
5 H& i3 G6 w1 s. R, }/ q$ v
4 q. E% q9 o; j1 s$ C |
|