|
|
源文件中_Interface文件夹下WndField.cpp文件& w5 A1 t: o! J! t. ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 f2 }7 H$ x- [3 i' x- r
2 R6 G9 d# @: I5 X6 A) _# w2 F8 Xstruct sItem
/ L5 t9 d- F% |/ @+ u# D{/ E* W, w7 p% y5 n
DWORD dwId;9 r9 e0 y6 C; s6 z7 [- O- A! V+ |
DWORD dwKind2;
& r9 Z! ?+ r# x- C9 iDWORD dwItemId;% k% M# ^7 Z9 e$ E$ o% I9 _( n
BYTE nIndex;
4 y% x! c D! m4 B7 N! XsItem(){
: l8 i% E6 F" G% }- L! Z5 Y dwId = dwKind2 = dwItemId = nIndex = 0;
8 c P6 h& }! [0 V) r" P6 t4 {}) h& I* I/ u2 K. \( d- w
bool operator < (const sItem p2)4 p) ~6 t$ k5 u/ }/ ^
{
. H9 z, L6 t, d0 ` if (dwKind2 == p2.dwKind2)
" r! Y+ J5 W( _2 L( w4 y4 h {# l. c4 d* o. R0 U
return dwItemId < p2.dwItemId;
- o! Y* `/ ]! Q, A' v$ b }else{# h- n$ D7 F: R/ W. L# \
return dwKind2 < p2.dwKind2;
' y& X: i5 p5 v }4 {& X1 p% I, ~2 W& e% V+ h
}" f2 h4 C0 p) [
};
. \7 V/ G7 o6 j, i- C1 Qclass CInventorySort) I: N H6 L; w4 a6 o
{/ M' y8 }0 r- V- X* S2 x( h
public:) I+ k: L" r7 [, c" R
CInventorySort()
; X0 C* F! O0 e, Y' g& x) x) d{1 ~- J7 T( u9 Z* N$ m
m_dwPos = 0;
" G& a( L! p3 C4 x; ^ ?( m: I3 @: Q}
3 M5 G% E/ a' f! X* v9 a7 C~CInventorySort(){}
+ c Y Y! @8 [" v* D; pprivate:
% }: h3 H7 A n, E1 UsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( E$ T7 l$ F$ O _
DWORD m_dwPos;. F4 m, I$ M: @9 r6 n' X) a
public:
+ d% u8 \! I6 P1 U( N% O2 mvoid Add(BYTE nIndex)- q2 H' b- C/ A* F3 Y* ?
{4 t5 u* N) m6 K: X
if (m_dwPos >= MAX_INVENTORY)1 `+ K0 L4 H( a) t) v* f
{/ D* [# _: M' k5 ~; Z* y6 F
return;
( z/ d0 P! _# v) y. W7 a5 y V }
; [' n/ _/ H: |0 m m_Item[m_dwPos].nIndex = nIndex;$ j- @( d( P- _. b) _/ [& K
m_Item[m_dwPos].dwId = m_dwPos;
$ y, y" N0 B: x/ B y m_dwPos++;
/ ? s+ y! V7 }5 A+ [}
. c4 o* g0 T9 t3 w. p5 i$ _4 mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& h; @3 H, w5 O+ z5 h2 D{6 B& e" I* N5 b8 s: ]
for (int i=0;i<MAX_INVENTORY;i++)
# ?5 P) C+ s' |) x" A( W G. U7 O {
# Z- y; r# u: T- m% @6 t if (m_Item.dwId == dwId)
( \' o0 C" J/ _& |% x7 v {% v( R, E0 j- K% I0 m8 A8 T
return m_Item.nIndex;
3 @/ ^+ C0 |4 g: ~ Q8 m }9 d% M$ w. p9 C: S' m
}
, K* S9 i y' @- U0 T! x" L* \ return 255;
% y8 m& h" j! T0 p& k}& U' |5 s4 W& G2 y- p6 x2 b5 ?! K$ D
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ u0 M9 c6 Z B
{
! p7 Z' X& P# M: E ^ BYTE nTmp = 0;
. O+ f5 X* q; _6 R8 e" |# q bool bDest = false,bSrc = false;0 G/ [ _' y! `0 b1 U0 P7 y
for (int i=0;i<MAX_INVENTORY;i++)4 S+ L6 @+ G1 D- y* o
{7 }/ g4 c# C8 \
if (dwSrcId == m_Item.dwId). J& c3 l# ?0 B6 e* ~1 A5 P7 }# W
{
' j! m5 G- ?9 k# Q3 t //id相等 则 改变对应的dest和src ]& \* B5 M; s1 o7 Z8 ]
nTmp = m_Item.nIndex;
' S# W4 Y F, L' |. _4 K m_Item.nIndex = dest;
; A8 _ U2 @" V8 p3 l" o }& B" W9 p+ D' N7 W+ r7 i
}( _! e3 O4 l1 r* X& H& u( j
//临时数据保存完毕,交换开始4 Y% ~" U- d' Q1 H# `- g# p) }
for (int i=0;i<MAX_INVENTORY;i++)9 C- e: i4 a5 U( T9 X+ w+ H9 u2 [
{0 k; o! O, Z5 @ W9 S$ V
if (dest == m_Item.nIndex)
! |- m: c3 m! ^0 ?6 N$ g, ] {6 c X6 f) B4 d8 L! M4 x" e" N' ]
//id相等 则 改变对应的dest和src, s! v. F* N5 |4 U* I& u
m_Item.nIndex = nTmp;6 l, k+ G+ y5 K: J4 N0 S
}
' _ Q9 l4 |0 i+ J M6 c) M }' l: D E& U0 n6 r7 {
}3 p! ?. N/ E" w0 R' J4 W
};
[" I+ w7 B' P' H-------------------------------------------------------------------------' {! F" V4 a$ v7 V# S! {- b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% _ z8 g8 B* W. b- O9 K% ]搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ `7 w' G6 A0 B' |8 T, m' b/ i, a
紧靠其上添加:" @/ P; ?: o6 M+ }( _9 V$ i5 g; S
if( pWndBase == &m_wndMenu )
. J3 P5 B; Z. `) s5 T{
' n- X4 N. y: H switch( nID )
7 W* [! n5 t9 u% a! _. s { y+ m4 w5 N+ C- b! Q7 d
case 2:* }" d9 F, E: ]# I( L4 B+ M
{
8 Q6 D" M1 l1 P9 q, \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( c6 n% T& N1 K if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). g* i& c- o. e3 \" H7 G: O
{
( w& b, }1 [- ]# r break;
2 y I, z: i# N4 r# e6 \ }, C! r2 A$ C W; }* L
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
# n8 {( V9 Q8 _% {/ d8 ^ {
# o. z- w1 M$ C A) }1 N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# @0 {; w( ^; y, D( x
if( !pItemElem )
0 m6 s2 U5 r ]# f6 ]" v continue;
2 |, h) v# y: i if(pItemElem->GetExtra() > 0); G" ]" @( V& J$ O, I: c
continue;
3 Y# @# t" ~' m) V* e3 d. |9 j if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / t( Z3 x, i- B/ ^" o
continue;
$ ]2 c! e2 _6 y/ r if( g_pPlayer->IsUsing( pItemElem ) )
: O5 \! W; B" r7 H6 g! b3 b continue;3 i* h9 Y& n% z" |9 M# M w1 y
if( pItemElem->IsUndestructable() == TRUE )
8 h- D5 Q2 ~/ Q4 U6 l; A& u {4 J" K' A- M' C$ I) `" }
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# y0 T" N+ W% p! V9 L0 ^ continue;
; c9 c9 @& c3 n0 I0 c( p }& W3 ?$ F% `7 _
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);3 l" M, q( E3 o9 T! U% G( D% B4 O
}( _6 {" D# N2 C" k
break;$ r! g/ B0 ?( s3 l7 v* A
}. Z0 u4 P: F2 b3 q4 u
case 1:
- ?5 z* s' w( l8 x1 n$ R7 Z {: i! P* S2 v" ^ P6 Q5 |
//整理背包9 u9 S* d5 A9 g; [) G8 A& ?1 U' S
//////////////////////////////////////////////////////////////////////////
3 t3 [6 }( I- k9 b( Q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 `7 O( T# f2 F0 r1 ~; G# W' R; Q
//////////////////////////////////////////////////////////////////////////4 X! C, E; W6 D
//////////////////////////////////////////////////////////////////////////
5 Z8 o3 a0 m' a& V' A- w! R8 I CInventorySort* pInvSort = new CInventorySort;
% g( |% |2 m0 D2 y$ P4 E vector <sItem> vItem;3 M! u( `+ v, ?% E/ N4 Q F$ Z; `) ~: p
vItem.resize(MAX_INVENTORY);//初始化大小8 W+ R' O7 w% ]0 ~9 a" J2 ^
//////////////////////////////////////////////////////////////////////////7 @0 R6 G9 B: F* w+ n. [
//填充数据
3 y' {2 R" E3 o for (int i=0;i<MAX_INVENTORY;i++)* M9 l3 T+ _3 \4 I5 h z
{
9 R0 }; f+ ]- j' H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) u; v. i1 n) r4 @1 J% G7 {
if (!pItemElem)
$ @( u- s- Y4 _ {) ]3 H5 d }# z; W
vItem.dwKind2 = 0xffffffff;. F, M/ |) W( V$ t
vItem.dwItemId = 0xffffffff;( b1 y9 y; U- K
vItem.nIndex = i;& U! ?% W" E* C( V6 o3 {
}else {
% q" I( S7 t* P, J ItemProp* pProp = pItemElem->GetProp();- Q0 ^' w; K% q- z: t
vItem.dwKind2 = pProp->dwItemKind2;1 o. i& |' t+ ]6 X% N* n
vItem.dwItemId = pItemElem->m_dwItemId;
4 f) `$ ?4 ~4 U4 Y( ^' ~ vItem.nIndex = i;
. x( J2 r: u( x" Y0 @ @ }+ o n3 g* E( n8 d8 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* p @% L2 U; k3 W% z- n
} y% ]+ v6 m6 S( Y0 k) W8 G5 {
//////////////////////////////////////////////////////////////////////////- c, [. m9 h4 H! ~' p3 @
sort(vItem.begin(),vItem.end());//排序& c# ^9 \. S6 g9 _9 Y
//////////////////////////////////////////////////////////////////////////
& T9 k5 M* \& e8 X v2 N) b- x2 `9 z //交换8 o5 N& T5 y+ ?! V
for (size_t i=0;i<vItem.size();i++)
! U Y; r+ W9 V8 D1 | {3 ?( M. ?0 D0 U1 _5 P) V1 k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ o! j2 z+ {( t' R3 W: h5 P2 Z pInvSort->Add(vItem.nIndex); u3 Q; c; H+ `
}* k1 B3 p9 z" }6 y! Y' [
BYTE nDestPos = 0;, f/ S! }$ i, V; x( S7 `* I/ M: ^- l
for (int i=0;i<MAX_INVENTORY;i++)
* a* I2 P! F; E% T( R( n0 j/ D {+ t% f- W* @/ `: K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); |- g0 }# |$ M0 X6 [
if (pItemElem)
, `! }5 E+ |8 [, p, k) M" u {
* b' s) O: p7 h: q$ L$ \ if (IsUsingItem(pItemElem))
6 L* b9 o- T M8 T4 n4 l7 g {
N6 }6 c6 G5 N* B //这个位置无法放
, I3 }+ ^0 f! F8 H/ s" ?4 m$ q nDestPos++;
1 e/ m% p S5 w* e }
( C3 c) i; a. c: c9 J3 K }! Y2 N5 T2 a+ z0 T. S& j
BYTE nSrc = pInvSort->GetItemSrc(i);
* I, v; E4 b3 P: @6 {6 N B pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, ~8 v L$ o1 K8 j if (pItemElem)
1 c. [- s2 a+ Y5 B6 t* r! |0 R {
- C# p& \1 e1 {- l4 \ z if (IsUsingItem(pItemElem))
$ U8 u6 C0 Y7 y% z% w" h9 Y3 E( e {& H: f ^& z# L, ~0 {- P
//这个道具无法移动,跳过
! ^" c8 n( \) s1 M# y$ b9 H continue;. D4 m0 D, H @. ~) x+ w
}
' U0 a* y! F0 g4 l4 `6 D5 ~, j }else{' ]/ I/ {) R* S
//空位置 不用动
$ \% {8 j! x; j' N- e) v continue;
; |2 ^+ D: z+ r+ W( \+ x }
& Z @- q! |$ B5 V3 W' m0 } //////////////////////////////////////////////////////////////////////////" R* u% B2 r/ j* y0 z2 i
//开始移动
3 d9 B; k2 c x) d0 m$ M, D if (nSrc == nDestPos)( Z! Q. h0 e, B! E% r
{
Y" v( P0 p& [3 y8 N4 p4 R% N$ D //原地不动
7 n$ o! m6 F7 v" A% `/ D nDestPos++;
& D( l" u, k8 e! r- ^* z) R; u continue;2 L5 K+ |) V- h, T4 d7 v# M( t! p
}0 w& n* y6 y- G+ `
pInvSort->MoveItem(i,nDestPos);
3 z- P8 A! s6 Y+ s g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 a) k5 u: r2 H+ s @4 S& W- y Sleep(5);# m+ h1 g; r- z+ R, ^1 k$ e: e2 j
//Error("移动 - %d->%d",nSrc,nDestPos);
; R9 W# {2 F4 h# T* s( h/ q5 x nDestPos++;
" O4 X, i8 l4 Q1 N% V7 P }
6 l) @5 i P3 h0 _1 N9 T: r3 w! k) C //取第一个元素的信息
' w# t }- L0 L) l2 r: B2 V /*
/ U9 W. P0 ]) R if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 p( Q) j# ^1 A {& f! H: F1 B2 @- |) B& @6 S) X. t# I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 X, e; V) ]& W/ L2 t g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 ~6 R& a; A5 ?$ v }
/ A! ~4 k) j% ]) C4 a1 _% e' s. U" {5 x */
E8 R: Q2 _/ @1 D7 Z8 X //////////////////////////////////////////////////////////////////////////
( R( G9 W! w6 ^5 Y8 q& C4 X break;% `; ~5 S2 R# j- E: G
}8 S* N3 v' R* s6 V* X
} & L; A5 f, `1 Q5 ]* C, J& Z
}3 l4 V! J- h' T& |: k! E
m_wndMenu.SetVisible(FALSE);
+ Q6 W, ?% f# x" z1 z* W: e h
: B N2 u2 f3 Z, L# ^: r9 h--------------------------------------------------------------------------------------------------------6 t( j! `/ p! H3 `3 U0 @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ Q+ u- D& O% r{4 e4 C( x3 K8 v7 A) `. }- |0 D: b
BaseMouseCursor();7 N3 N9 S$ n. _4 D! `) L1 _8 a
}) t' g4 E3 ?9 B4 k2 D: H' q% D
在其下添加: [9 Q! g5 E9 _# k
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 X' p- q' b! E' i' i/ }4 _
{
0 H$ o6 n* s3 S( z) S; zm_wndMenu.DeleteAllMenu();, r% \) ^. @" Z1 Y: I" I
m_wndMenu.CreateMenu(this);8 Y7 |: M, U9 S7 k) q+ [8 A5 K
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* I9 W. T* C" k. w6 o# g
% j3 B) w/ D* `4 Q" T: S- ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), ^9 V8 u. O6 T6 z! X
{
% a( a) n! F2 x5 k1 ]) E; L+ x //P以上级别才可以删除所有道具2 y3 c! Y0 B: d/ h+ S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; c0 J& Q; \8 R% h& L; z, y8 G}
W p) a- h* \3 Dm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 ^% z B T8 \; W
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# P- Q" d/ D+ g1 E7 |m_wndMenu.SetFocus();8 [" X" z& b/ N+ g1 ~- `
}, S2 h0 \( s. w: o" Z4 _+ S
------------------------------------------------------------------------------------------------------------
8 E, u; i$ t! {5 ]. @5 X- C*************************
8 Z9 ~1 n" C) [WndField.h文件' w0 ~7 x% Z" }! A7 V3 f- z8 o
*************************8 ~# q! L: m3 V2 ~4 C
搜索:BOOL m_bReport;' O$ C ^ ?: H- E% ^: l
其后添加:
& u, H: a$ c1 o% v6 B" lCWndMenu m_wndMenu;
' S0 k( ?4 o) B W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
/ S" B5 |; `" M1 G其后添加:
! N# u5 m4 I4 T- L" ^virtual void OnRButtonUp(UINT nFlags, CPoint point);! r& A' W( a+ h# t5 q" A. k
, P' P9 \- w& g; ^" l+ I/ s$ w( V
|
|