|
|
源文件中_Interface文件夹下WndField.cpp文件
& x8 ^7 U- S" I/ D搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) w- s0 x. A, K b' d8 K- w2 ?: H5 F* Y( O
struct sItem
. A4 N1 b5 [, N9 k4 W% L{5 K, A# O. O" X. u0 V/ B, F U
DWORD dwId;. ]) D4 ~+ r- c+ u, V
DWORD dwKind2;6 C% x$ H7 Y/ B$ D2 k9 J: P' v8 s% m
DWORD dwItemId;: ^$ Y0 k3 f6 e, k$ u; b8 ~
BYTE nIndex;4 X0 Z# F. {( W+ ]+ B1 g% B
sItem(){0 A' V5 a" c6 H; V. J, |
dwId = dwKind2 = dwItemId = nIndex = 0;# j9 C; G: y0 y. w
}6 U7 D* b3 f- s$ i# }
bool operator < (const sItem p2)
0 l! K. A: @1 F1 s$ a2 |& b F* I8 p{
j8 E1 D4 W( u# Q) D if (dwKind2 == p2.dwKind2); T/ \* R* s8 D7 t
{8 x3 E7 \- r4 s. c, |
return dwItemId < p2.dwItemId;% O( ]; n |% Q: f' y$ O
}else{& i! x- l" H e0 t, {) R
return dwKind2 < p2.dwKind2;! X9 C% W, B. s& w H
}# _2 I( [4 u$ m$ ~% x/ I* v
}* c) I: ]; S/ w" r; W# O
};8 ~% ]' ?" k# r
class CInventorySort- J/ }0 y k0 v E/ N% r
{
/ [/ u3 O/ Y; p" q" e0 spublic:; P7 I6 r9 f& O, z* v0 i2 `, Q
CInventorySort()* A2 [( w+ n7 A/ \- u! U1 ~ H2 P% t1 @
{
9 J# B# Y6 Q, I, [ m_dwPos = 0;; H; d1 k# s" J8 @
}
( v- D; a; O3 R" @1 @: l' J/ F# u: l4 o~CInventorySort(){}
$ J# _/ n) P% aprivate:7 @. z- U9 G k: q4 I5 ]1 Y, R
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% X, o# O" \5 Q# KDWORD m_dwPos;
/ H) {" X9 `) o6 s" L0 | _: xpublic:
7 Y8 ?5 r0 F' n5 N% v [* Gvoid Add(BYTE nIndex)" E* a d' u5 e7 }, ~. }* p
{
; U% [* b+ y' O: _6 k% Y if (m_dwPos >= MAX_INVENTORY)
3 ` f7 K, q: c5 D3 E' ? X {
1 R! H) P% @5 u$ \: B3 R) I! v1 k" c return;
! l; V9 s- e( `3 A" n' o: u }
7 Y/ j+ R8 G# k, L m_Item[m_dwPos].nIndex = nIndex;
0 I/ I' @' K1 K+ W( F+ e m_Item[m_dwPos].dwId = m_dwPos;
9 j1 E7 {& F& H4 G8 K+ b) _ m_dwPos++;
+ ~7 S6 y8 ]. a- v: U}
+ G* `' Z* |- Z0 rBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; t3 ]0 G9 r7 N. i2 j) a6 B. T
{6 q0 b3 U- C4 r" c7 F' c
for (int i=0;i<MAX_INVENTORY;i++). p9 g+ @; |4 T! y2 z7 s. K
{
4 d9 m5 ]9 X. w8 o if (m_Item.dwId == dwId)
! r7 \: J& F- G {$ O2 N5 C& t& ^" h7 ]+ _
return m_Item.nIndex;
& M( K) o* @4 w% c) A& T* ^3 { }) S8 ~$ I$ B# V, N; {7 w
}
2 t# z8 u3 J1 N+ l; W) H# q+ ` return 255;
9 E/ ]" }; z/ {* i6 H& B}8 k. C2 M4 e+ N2 X, H
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 k3 W1 H/ }7 t9 [" v) D4 ~/ g
{! X$ Y1 K5 E* }; [7 B2 q
BYTE nTmp = 0;* e3 e- J7 n% D0 B5 b
bool bDest = false,bSrc = false;
1 v/ e2 D4 a9 {$ n# F9 E- e3 u for (int i=0;i<MAX_INVENTORY;i++)+ b. X1 ^, P# D7 A* r
{6 A2 Y$ U, G2 C, [
if (dwSrcId == m_Item.dwId)/ v! w! m% g3 K' h k
{6 j* _ d c5 [/ F, a7 l
//id相等 则 改变对应的dest和src
5 R5 H4 g q- U$ K4 l% g& a nTmp = m_Item.nIndex;. {8 G5 A8 H1 I$ y. l6 o- R4 R8 R
m_Item.nIndex = dest;& }2 J; R) y. A" k
}
; |: o- F, }% _* m/ Z' I+ S }7 N* W8 ?2 E& ]
//临时数据保存完毕,交换开始( @2 ]% C% z/ _4 k/ R
for (int i=0;i<MAX_INVENTORY;i++)
5 `1 r3 `$ X/ l1 B {( m3 j2 A* X6 P% R$ y
if (dest == m_Item.nIndex)
2 _4 {+ m9 t7 d' d, k {
$ l4 V: l, `) C7 F* Q {6 y //id相等 则 改变对应的dest和src# K. {; V! r. ]4 y6 H, t6 A" J
m_Item.nIndex = nTmp;
0 x7 D1 s8 S; m7 O2 V }
* {! \+ w5 g. f* U5 |2 ? }1 M: B3 m* l) H+ T. ~( V* z
}* l6 T( k! R5 K5 Y5 S: T
};$ n6 l& H' K9 {6 j( G
------------------------------------------------------------------------- \3 S. I! j+ {$ e4 u
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ L& t5 i8 O# d; Y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& D! f+ m7 e% l% q: j& G, @, p
紧靠其上添加:9 m X1 z! ?+ G U
if( pWndBase == &m_wndMenu )
# L& R! C. E- n# r, v- T3 M6 k$ R# Z{
) Z* q$ X) c& G* @( J) @: v* F; o: q switch( nID )
/ e0 q8 H9 C2 a9 S' c% y1 {, ] {1 Z) W- Y4 j% G; V" [2 j9 X
case 2:: {' T+ q. {; g( \* X* }
{
; X: k6 ~2 w( Z$ P! y8 p+ h' y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 v. V6 T; {! v8 [ t5 K
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 F- O, p+ U9 z2 W' r% n, ?, X {+ }6 z5 R1 O7 y; E" h
break;
, G5 d9 q0 E" o }
$ `+ S5 V+ K2 F' L+ c for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 ?2 l1 V3 ?7 J2 N
{
7 A( p$ q/ G1 L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" P6 S- r: D7 d$ M' T. {$ b if( !pItemElem )
: d6 O. D) |: O9 ?8 S2 x continue;
( J; ?0 @, r k4 x if(pItemElem->GetExtra() > 0)
Q% m! M) B9 g1 v. X3 ] continue;
) I4 Y6 ^/ d* d) M- i: B if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , E7 r' x# V! ]3 {. i* P
continue;
% q% s: l6 E! m# a3 Z if( g_pPlayer->IsUsing( pItemElem ) )# w3 e2 D$ {$ v% c; C; ]
continue;
: d3 I% [. @% ~; L" y* c if( pItemElem->IsUndestructable() == TRUE )
! u' T/ u" }* a; b0 R8 }" { {9 N7 g; t# ~: C z+ w
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, q- E2 a! W& ]% Q. F6 V) a, x continue;$ W, G2 j I7 u$ M
}, q5 z6 a, a" V c @. h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 S3 m0 u* j5 @0 r8 K2 X1 W9 a }
) a5 F) u( V; p$ E, @ break;
2 \( r' U5 h0 e3 r, z9 q }
9 y3 n8 m# n2 I case 1:1 W* V1 i. y. w) \3 p
{% f2 C) ?* [* u% r
//整理背包
$ |" B$ b- K0 d6 \" h" j! U //////////////////////////////////////////////////////////////////////////" P9 K3 |" J: E" k
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 I# |% o1 ^, H% a //////////////////////////////////////////////////////////////////////////
6 }: B& l) U. k! e- {9 E //////////////////////////////////////////////////////////////////////////
8 W1 Q a+ t9 t# A CInventorySort* pInvSort = new CInventorySort;
/ ~9 Z1 C$ U! Z* t! u vector <sItem> vItem;
8 i2 b; F) L2 ^( y! h6 H vItem.resize(MAX_INVENTORY);//初始化大小
# r9 H3 {) T6 u) L" a //////////////////////////////////////////////////////////////////////////
6 @( W0 J- B, s //填充数据
: _. |' u+ [7 M2 _ for (int i=0;i<MAX_INVENTORY;i++); Z6 t! s; q" e0 o- [2 n$ ~
{2 A5 E9 S% y) S( \3 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ G& [ s9 ? U; ?+ Q' z" D
if (!pItemElem)' Q% Z8 i4 }1 T8 g
{1 M3 q! U3 z. \3 L9 `4 u8 l; [
vItem.dwKind2 = 0xffffffff;
# K5 V# B( f+ X& b1 c: I% c' P. Q vItem.dwItemId = 0xffffffff;
4 P/ ?. [4 y8 h$ U- m" Z vItem.nIndex = i;
# N+ z5 ]0 s$ J% C9 D2 `) C }else {7 f' [% G2 z2 N2 z- l4 j4 { {# s
ItemProp* pProp = pItemElem->GetProp();
* y& I3 e, S* o vItem.dwKind2 = pProp->dwItemKind2;
* S/ P' B7 F. G8 ]3 P8 B' t vItem.dwItemId = pItemElem->m_dwItemId;
5 M9 ]4 Q% c) O( o5 { vItem.nIndex = i;
, q; a A, o5 d$ e; S! y }
9 n* V% p {* N" M$ {0 ~! f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 V, B6 r" N, x
}8 K, ], P7 k0 n5 s' p
//////////////////////////////////////////////////////////////////////////1 V3 X# O3 ~, t! |: N' ^: T( R ]
sort(vItem.begin(),vItem.end());//排序$ W3 @3 [' p1 ~( R# R0 I% V
//////////////////////////////////////////////////////////////////////////
, J9 e8 v: m: U0 I& s0 d! k4 w$ ] //交换
6 U! C' ]; V( W$ i6 m% m for (size_t i=0;i<vItem.size();i++)
2 h: |0 Z6 B+ V' l {
; E1 _" J& [4 |, I# u //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) t0 R- b$ M' o& z& q pInvSort->Add(vItem.nIndex);
' V5 k' B; Q1 K& z }2 B4 W/ g# U# @/ v, A- u* R
BYTE nDestPos = 0;
- C5 e* ?& N$ H+ o for (int i=0;i<MAX_INVENTORY;i++)# J) j* ^0 Y, K& B
{/ Q. R5 D5 n: k0 b) |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* x. X/ ?& m P/ f9 ^: R
if (pItemElem)4 D' @, Z: b! g2 t! n
{" J( ]! a/ W4 } i4 `
if (IsUsingItem(pItemElem))% m5 e+ i, z! k4 y
{# k6 O. G8 Q t1 t
//这个位置无法放4 ]9 f( B1 q( F8 E7 b6 X4 }
nDestPos++;
2 K0 C0 C- f1 A' w# j( _- ]! ^ }# _) s7 ?7 e9 Y3 G6 D7 I3 R$ w
}
: V6 ^% V* g' R/ ~" M! j BYTE nSrc = pInvSort->GetItemSrc(i);& Z; X2 I' s5 \ i2 Z5 U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! d; l* t9 X) V; D1 ?" A if (pItemElem)6 |: T+ k* V2 K+ l* }4 a- O
{5 l9 B# I/ E2 e( \: O. }7 D
if (IsUsingItem(pItemElem))
, R) \8 ]1 i0 i. ^2 C {
6 J+ {6 k2 V1 E- s: V3 h' O //这个道具无法移动,跳过
0 [) f! ~, I5 p continue;3 s+ h( Q1 M( Y+ s- z
}" L0 m; ^# M8 r! Y+ o2 N* R. k
}else{2 o& H, a4 r$ {- U8 |
//空位置 不用动
3 J# U. ]9 _! r; j& f: J: _& @ continue;
" {6 Z' y' v ~0 { |( l; Z; F }
5 e! |4 O' p( @/ L1 m+ h //////////////////////////////////////////////////////////////////////////
/ u& Q7 s3 n1 |& T //开始移动) w, s- p( Y8 P3 P G) r
if (nSrc == nDestPos)
1 I* O+ [2 M: r( \ {, v/ A/ Q' E5 `7 C; A1 C/ k/ l4 }0 V
//原地不动
% c% A# s' g) N& T% G ?: a nDestPos++;9 d2 O/ S' P1 C# y
continue;
7 [8 A) C- b9 d& o1 `" k( L+ s3 s }
, n" ~5 ~7 o! R1 m7 \( P pInvSort->MoveItem(i,nDestPos);% p- l: z5 f U; X0 F* u
g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 F$ d. G D! ?' l
Sleep(5);
; }' ?* `: k* t& @( K8 q //Error("移动 - %d->%d",nSrc,nDestPos);
. _6 ~& e0 d) u" R nDestPos++;1 o$ f7 y; F( K" r$ U+ o: d# T, ]4 {
}& `: ~2 c( B. i9 K
//取第一个元素的信息# C) n, w0 T# _* _6 I" y# {( u
/*
, D' ^& X G' r% \ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); u* x# w, J% j, r$ O& ?+ Z
{* u1 A4 q- _3 T8 D. K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& c4 Z0 C X& P% W" E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 e4 I7 ` {8 s7 C1 D. ~ }
& Z% P5 P3 ^2 t% O" Y! Q+ m' F */: Z1 p* _; `' O" n
//////////////////////////////////////////////////////////////////////////
6 S! {3 }2 `: ? break;; V- `. M8 P0 X0 R/ d
}) X; R& c# ?* E
} $ Q) h2 C6 p! o% r
}
, D3 _# U( `* z# m' m" H3 P" X4 pm_wndMenu.SetVisible(FALSE);6 A1 k G6 k; T; A- x
3 \3 V: d! f: N; G2 S' e--------------------------------------------------------------------------------------------------------
) q2 T8 M0 b+ W# u: W% Y, s搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 O" B: M" T, p; Z, \! P( k7 U+ I{ V/ v6 U8 ]+ V P. }4 j9 R
BaseMouseCursor();
! |. X0 I# F! U& g7 Y8 X* }. J! `}
: n9 d3 H# {( M) J+ x" D在其下添加:+ V' o. e! |: N) k/ k8 A% ~( R
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( ^8 l9 P0 h. g4 \. n{9 I S2 b2 E8 ?* Q( T4 f; z4 h
m_wndMenu.DeleteAllMenu();
' }9 c! h& n- c4 G4 Wm_wndMenu.CreateMenu(this);6 E8 H" Y$ y0 X4 J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, g% v. b. V+ X! _8 G+ v
# J5 X* v# F* J/ u# k9 Q j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 U5 b5 m9 a6 M7 d{
; F; U+ h6 G3 l( ^! o' x0 a9 |+ H/ { //P以上级别才可以删除所有道具
5 r& `% _- B% G2 h m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, w1 |/ I- d _9 ]! m+ X}
$ A' Z* ]+ V7 b0 t/ o& [m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) l1 L2 A0 T& P9 ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );4 i1 F1 Y8 V3 S) p
m_wndMenu.SetFocus();
4 z a' j9 y9 s* ]+ W: Q6 g& [}
% i# q/ l; U: T& a------------------------------------------------------------------------------------------------------------: C/ a) F3 |5 L3 K9 S
*************************
2 D' P" R* ^3 c1 h( O6 ?WndField.h文件
! f$ I& v; A( m8 C' H& P# p*************************' _& m) s: e7 m4 n. W, \
搜索:BOOL m_bReport;% }. s: s/ m! U9 @
其后添加:
; L5 w8 g4 X) { p6 i `1 l/ Y/ I: _CWndMenu m_wndMenu;1 R2 Z. Y" E E5 r. z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& h( f6 l" c! x. s! }4 h/ h+ _
其后添加:! O+ b' C- S1 b2 U" M4 ~0 `9 R
virtual void OnRButtonUp(UINT nFlags, CPoint point);" W9 U( K. I% F1 w8 k* X* J
" F6 H( J, g0 j x5 N7 z
+ Y; f1 d$ _7 h) m% O9 `$ i |
|