|
|
源文件中_Interface文件夹下WndField.cpp文件
' p6 B6 q7 j' o& _% g搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) M+ _0 _3 B/ G# U; s
3 |( |4 U; ^: m: d5 ], `' ^5 o
struct sItem
5 c+ T- }9 H( d' B{6 D N$ \% B, t |* O
DWORD dwId;' Z4 [ c5 ?- D) R
DWORD dwKind2;
- @7 Y" J0 A# i1 b" _9 e0 N& bDWORD dwItemId;7 w: d( D& K* R4 d7 K
BYTE nIndex;* g% D9 W+ T* i) {
sItem(){
& X; a' h$ }9 O. e3 c' a$ O dwId = dwKind2 = dwItemId = nIndex = 0;/ S% x, @* H( c
}
& ~6 V/ V3 }7 T/ q) B- hbool operator < (const sItem p2)
9 p. \, J6 y& Y: I8 h: V2 J{$ Q; W- {. ?7 _
if (dwKind2 == p2.dwKind2)
; k1 Q% n8 Q6 N$ C% t {
; f: W0 G+ A$ }; ~8 R& x0 Y/ N return dwItemId < p2.dwItemId;. C" m! }# G# m7 Q4 I' A ^2 P) E
}else{. b, B( ]: Q/ H: C
return dwKind2 < p2.dwKind2;
0 ]9 Z5 Z# ~/ x; h }
! K+ p, s J3 h% r' g# T" ~7 ~}! O! K* R# U4 {1 }, r% n+ K4 s( F6 t
};8 {6 B5 m& }7 o8 h) r+ w; j
class CInventorySort: }* h- _/ @0 v; p& L$ U- k+ `
{
8 m2 i6 O. W1 n! |6 o6 p1 xpublic:9 i! e- q5 H5 [7 g8 Y
CInventorySort()
7 t# y9 j5 l# j{
4 h3 f: P7 `& }' K. e1 s3 H9 J2 Q m_dwPos = 0;, w6 K F! w* ^' x/ z
}3 G9 Y A$ T2 i* {- f* S
~CInventorySort(){}
% C6 l/ @2 k6 u) t+ v$ `) `% yprivate:9 S T4 y0 i/ C! P; ]! X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 ]/ E. Z( g( EDWORD m_dwPos;/ L6 y. _$ d0 h# Y2 i! k0 N& q
public:
. U& n# k6 S7 V/ c" g! H* xvoid Add(BYTE nIndex)
7 f5 p$ I: E; d" A4 U{5 E! _) y n/ v1 P
if (m_dwPos >= MAX_INVENTORY)
5 T2 E& V+ h' n0 U5 ]; q8 R, l! y/ c {
! L! u1 \0 _7 d2 j* d return;% n$ X5 r8 d' r7 X- F* N$ c
}
* n+ \9 e; i7 X! E8 Y/ { m_Item[m_dwPos].nIndex = nIndex;
u+ M$ o# h$ b( u. q* C- g8 O( Q- s m_Item[m_dwPos].dwId = m_dwPos;
( a6 d2 B5 D/ J& d& E1 b g m_dwPos++;
: c: e5 ^2 w4 H5 {+ m} h. @, A4 l* H: K
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 u! {8 g1 k4 U3 s
{5 \3 \2 O* I: e; H: M
for (int i=0;i<MAX_INVENTORY;i++)$ B n/ S% r$ ?7 r* P6 v: t7 u
{ X6 t1 `$ \# R3 a% l8 S( w
if (m_Item.dwId == dwId)
; V; e1 u. E1 X/ i+ ? {
; q D* U. O n. q0 A return m_Item.nIndex;
2 p! ^$ k1 C1 c" Z* R) N0 R }
( ` \0 Z% `3 }, M8 \8 T }$ b$ N$ e* L, b/ R" Y% Y& L
return 255;# U7 u( d) a/ `6 U5 L- `1 s; @
}
$ {+ f# }, P: R+ ^- Q7 [$ Kvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! G% f9 g! D. g{
) L, n7 m, N( ` BYTE nTmp = 0;; [% c; `8 b( M. m# |/ M
bool bDest = false,bSrc = false;+ a. ], f! x+ \7 \0 ~1 b4 a
for (int i=0;i<MAX_INVENTORY;i++)
! ^. j2 R: T& y! I {3 P0 {! H9 {2 d! ]8 Q5 ` |3 m
if (dwSrcId == m_Item.dwId)
8 Q2 `( z: E6 s: S {" U9 M" Q- V$ f+ t9 t' h* R
//id相等 则 改变对应的dest和src* V/ S& a0 H* p) l p& B) {
nTmp = m_Item.nIndex;
) i/ l* k4 y8 u6 i, t/ r2 n m_Item.nIndex = dest;
$ Z3 q- @$ q% z, p }
3 b1 `2 W1 N5 j3 Y) z }
* o. Q$ Q0 |( r9 h //临时数据保存完毕,交换开始
' w9 D! C0 S7 @! q: G( y for (int i=0;i<MAX_INVENTORY;i++)
; n/ B) h6 L4 a" \: I4 n {
2 W0 q1 e( v# v9 M C o if (dest == m_Item.nIndex)' \0 q# @7 b! _/ P, q5 t1 p' J5 w
{3 L4 M; ?+ t/ V5 l+ r0 q
//id相等 则 改变对应的dest和src
, H4 H* E) O. j0 a3 @ m_Item.nIndex = nTmp;
3 u& s! h" c( m0 `3 l; ~ }( z# T- b6 a4 D" f. J [
}
+ @0 v- D+ h/ v E( ?4 y+ R+ {}
& j0 Z* I+ r0 j b9 z& D}; s$ m; s: U% Q# F* b1 t0 E- E- k3 D
-------------------------------------------------------------------------
3 D. o& k, Y z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 E, Z3 X) O& ?" ^) X' Z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 l4 }& T7 A6 Y紧靠其上添加:
: b3 I, H) g+ m4 uif( pWndBase == &m_wndMenu )1 `0 D4 {& ^" n* l
{# z8 ~+ P% u K3 Z
switch( nID )& Q6 o0 [. i+ M: ?6 R: `/ f
{
. s$ ]) `' [8 V' r/ K( p/ Z% Q4 B case 2:
: S1 @ H& j( w- i8 k {* k1 T2 ^/ { ]% u" o7 h$ i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" h5 K7 e+ w# ?. l( b7 O8 [2 { if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 P4 x7 P$ `3 c8 R3 L5 p {
D" }' K" W5 Z0 \% Q break;: a2 t0 r- f3 T# g2 z
}: D0 R6 B' Z7 ?4 Z
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 t' A: ]$ ]) }% W) C, S g( t {9 }8 }$ P4 X" F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 h3 M! q3 {. E& w- s- q: E0 A
if( !pItemElem )
: P8 a8 o2 Y/ r2 | o continue;
# g/ r2 E. W; y& r if(pItemElem->GetExtra() > 0)/ U% t% H7 h/ {+ X+ h
continue;
8 ]5 @* |" K) O" N6 Y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' T8 W7 S' i! a/ M: E" g
continue;
" j g, [/ M6 J9 W0 Y if( g_pPlayer->IsUsing( pItemElem ) )
3 f3 E% O' `) H continue;2 B0 k, ?4 K# G1 _9 T
if( pItemElem->IsUndestructable() == TRUE )7 b# V+ f+ \' W: Q T- x) P
{7 |; F2 S9 e2 p/ B% p I0 e
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- z) |) x, k, P1 X7 F continue;- q) w: p" S- R! x
}
# Z0 Q! Q" I/ V N. K: @ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 E, I9 \" G# `: z' \$ W* h) _5 W+ U
}. r2 p8 v5 w" j5 O) U I
break;
- ]' S7 Z$ e5 K/ J/ R }+ x% O+ [8 |: E3 {- n. O
case 1:& O( ~! b" o+ c8 V& A
{
8 q; m- G# j2 U* E //整理背包1 `. K8 P- `: @0 Z) z9 [
//////////////////////////////////////////////////////////////////////////
. C( f: R7 d4 b) d R5 j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 f4 a/ ]% N( h" n$ J
//////////////////////////////////////////////////////////////////////////
4 s/ P+ e2 P# L+ Y //////////////////////////////////////////////////////////////////////////0 n7 x* k- m$ D% V3 _$ U
CInventorySort* pInvSort = new CInventorySort;( f: ^& c' B5 j: _& O Q' S* |# R
vector <sItem> vItem;7 q- i3 {) q. E' g
vItem.resize(MAX_INVENTORY);//初始化大小8 r3 ]; @3 f/ b+ Q0 B2 @5 \& `
//////////////////////////////////////////////////////////////////////////; c0 E4 S, E' d }) {4 _8 Y
//填充数据
& z- T- B2 Z$ p ~5 ? for (int i=0;i<MAX_INVENTORY;i++)) F) _0 ]6 @2 g. |5 T; y( Z
{4 O4 T& M' X7 r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
\$ I! @+ M7 L7 W7 \ if (!pItemElem)
3 R; o4 B% R$ A I4 ~ {* [% @; `$ w! h4 x: q/ g6 y
vItem.dwKind2 = 0xffffffff;
6 K2 l0 u& ]1 W2 |" |& `9 |/ [# { vItem.dwItemId = 0xffffffff;
8 ~0 `3 ?# M# ~4 x8 c, @ vItem.nIndex = i;
" ^( K* O6 g" T. a7 N }else {
6 w( b' g8 h+ z! L% W: s ItemProp* pProp = pItemElem->GetProp();% z2 n k7 s) P/ v! h9 Y( R
vItem.dwKind2 = pProp->dwItemKind2;# R5 C* F0 [& J. W
vItem.dwItemId = pItemElem->m_dwItemId;- Y7 A/ K _7 O& y
vItem.nIndex = i;, D% w7 q! r* e6 `/ D' P4 G
}% a& w+ `4 u; {9 M2 d/ v
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 U: ]$ L. u; Q4 Q' X! }# h$ I
}$ c$ u+ V" [4 H8 f4 V# L$ O
////////////////////////////////////////////////////////////////////////// U- ]" N; I6 g6 Q
sort(vItem.begin(),vItem.end());//排序
/ \; S) L. a3 T Q$ K //////////////////////////////////////////////////////////////////////////' A9 X" r; n7 X- a1 ^
//交换
8 T9 j, n: A' j# `! t) ? w. N for (size_t i=0;i<vItem.size();i++)
8 {. N: T' |. n {; Z$ i, d; a& A
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# Z& Z/ Z' V; f7 L9 ~0 Y: v pInvSort->Add(vItem.nIndex);( V6 F. _1 @) L; B( \; X
}, v9 t: h3 K w$ P
BYTE nDestPos = 0;
. Q# _2 \" P9 J e( T for (int i=0;i<MAX_INVENTORY;i++)
Z' R$ O/ q+ y) w5 G9 Q: l- p {# u% W- K) D/ b+ m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ d- O, x3 p* ~$ l/ O! h
if (pItemElem)
: }* i( o9 ~) y3 b- u; [ {
3 N- j( S/ X, O# ^& d if (IsUsingItem(pItemElem))) b; a( [- ]1 e5 [: }. p
{
" y" I3 l( T) @ //这个位置无法放
4 Z2 r; V" s1 P2 O+ T nDestPos++;
& a8 C7 Y. T# I% I1 }) L) t- X }& D6 I+ ^" ]/ W6 A+ t0 z2 r
}2 p: g) H( |. \" r$ Q% X
BYTE nSrc = pInvSort->GetItemSrc(i);
# a% l# ^0 b4 w l+ Y8 X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( p! U5 J2 C9 x/ j2 M7 T1 D if (pItemElem)* @# g! Z1 t+ ]7 s* G( R
{
; _: A; N9 N2 I6 M( c if (IsUsingItem(pItemElem))$ x0 p! R2 }0 z: }) K
{
. `# H: b5 W7 V //这个道具无法移动,跳过
" }! a; {, [3 s# [! ]4 h& C continue;
8 V7 O' ]! t- R, s }) W; k$ ^+ j' @- X' f7 Q
}else{' I3 j$ d$ o+ a( z6 E
//空位置 不用动
4 p7 d+ U5 i) k, a" z continue;
$ a1 ]& N) ^) ^ }# H4 q; s$ v; b) o
/////////////////////////////////////////////////////////////////////////// ^3 ^' s( |! q' f D( p( u m
//开始移动2 s! f, V9 Z5 Z! e7 \: a
if (nSrc == nDestPos)
. D# w' o- V- }3 L {
0 j2 w4 }/ n4 }$ h; t+ ?- \ //原地不动/ Q, o1 r1 e' q% i
nDestPos++;* N* r3 G0 l0 D, v0 Z$ J( b. V
continue;& m |( h8 |9 X# N( ]9 ? h
}
0 ~4 d: h$ W; t+ y- a pInvSort->MoveItem(i,nDestPos);7 t5 z d+ Q2 D/ ~9 h) l) r
g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ t8 E/ c5 l% }* R
Sleep(5);
, C" _/ l$ V$ f+ [7 C7 @+ Z //Error("移动 - %d->%d",nSrc,nDestPos);
/ e3 Y/ \- y8 B( R) K* @! `) w nDestPos++;4 g- Q0 R* z* K2 `- ]3 c$ i. o* A0 M
}3 z1 t6 {- k3 i3 M& M5 z
//取第一个元素的信息
# ]7 D; t8 g& a! z' D /*1 F# V; D" R0 T; K' G) q* R
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. E4 C, k6 c8 e+ g" } {
# y2 j' U& a4 j( v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 _4 `9 z2 `! G" Q1 D r g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' |( r. W3 m4 w* B
}$ T! i" g# ~7 ` V# j5 }( f! l# O
*/5 v7 V9 s& L5 N' o/ v% Z! s
//////////////////////////////////////////////////////////////////////////
8 a- L! C H/ }; L break;
8 M3 d1 x+ M% Q: _2 t' S( y }1 O$ [9 g1 b& Y, o7 h
} 2 l7 E2 C0 a$ h6 g0 |& D4 W
}6 m ]; p4 n+ K0 y; T
m_wndMenu.SetVisible(FALSE);- j: Q7 t/ x# f. R& v; Q: r
: U1 W. S7 X0 U+ [: r; T
--------------------------------------------------------------------------------------------------------3 k7 M1 I# O+ u( |* r
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" z4 P8 q9 p) O1 | z6 y{
1 n: j( u6 @2 K' bBaseMouseCursor();* [2 F5 k9 o& g! t% u* e& g
}4 o- p8 x, `2 V9 D# n3 W0 {
在其下添加:
- ~1 [! C! P5 A6 W8 j$ rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 ]* |* j ~6 N/ n" h{
9 t+ W' v+ B9 S/ t% hm_wndMenu.DeleteAllMenu();
$ G+ P6 n" h5 t3 X( {4 g1 ]m_wndMenu.CreateMenu(this);2 Z8 j) N8 Y' u* ?7 W: R( E
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ B3 x5 J! E5 w2 D w; W( P5 Q
# s+ Q3 x) r/ }3 {+ G# {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) Y( C9 d" A2 t N/ |
{% x; W* z: u7 S% g) m ^
//P以上级别才可以删除所有道具
5 [1 G0 {- \5 U/ `" t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 y1 ]$ i, f: H4 ?& p {}
9 A, N% @3 k; Q+ k/ pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; O" C0 k' s8 Y- g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ {" \( ?* u* b7 Ym_wndMenu.SetFocus();$ j5 z# }- B* m# A
}0 s- n4 Q8 e* F
------------------------------------------------------------------------------------------------------------
- ]2 X4 v& b# u( M$ ~" f*************************
/ B# a- K0 y6 I# ~+ g+ J8 BWndField.h文件5 \& v+ J1 B; ~8 Q# e5 U0 I
*************************
: ]6 y7 p! d6 `4 n r搜索:BOOL m_bReport;
1 B8 X3 [5 R; |/ F其后添加:
9 a; R) e0 G9 ?7 wCWndMenu m_wndMenu;3 k, {' T5 C& R+ H: L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& {- u* o4 x* k1 L其后添加:
2 ^9 W, h$ l9 ^9 svirtual void OnRButtonUp(UINT nFlags, CPoint point);
! B+ B. T& {. x4 l& M+ k j7 |: c; Y$ m [8 Q) S, s! [5 H2 |
2 Q+ F1 z1 x" C |
|