|
|
源文件中_Interface文件夹下WndField.cpp文件$ e1 \ r( w4 _% R% f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 R" p% T# K% y+ N8 B* D
3 |9 I, T' g( xstruct sItem
' }" _1 P" G& s1 r{8 W; P$ B, s/ c2 E( W
DWORD dwId;
- R8 `7 h/ n ` fDWORD dwKind2;
" a" g1 z+ m2 u3 O) l! n! HDWORD dwItemId;
4 x4 t. y7 L* f3 P, Y5 c2 k7 E2 h" `# E+ lBYTE nIndex;
8 U- n7 h3 K! X+ @+ S2 ?" ^; e) c" A1 GsItem(){% C7 x. E; [# q, a1 e' ~: t* E
dwId = dwKind2 = dwItemId = nIndex = 0;
# b/ W/ E( e- J; f% D$ v$ u6 Q6 f}3 V! V) `7 M0 l5 O- F# h, `& G
bool operator < (const sItem p2)
' Y+ m7 `5 J3 h* S+ d9 r{
) O5 U1 |- N, |9 w if (dwKind2 == p2.dwKind2)
) U5 p! z/ \: N {
! I" F$ J( E- D8 r return dwItemId < p2.dwItemId;
+ M2 V; t' M1 [ }else{2 v! T! I& c& n& f A! ]" M6 p
return dwKind2 < p2.dwKind2;& |& x6 m! Z: x5 g
}
: E3 L8 F. f& [2 a2 J( ^}
8 q, f W# V& K! I* p$ Y};$ i L; r8 v0 \% x
class CInventorySort
. y+ p/ ~& H2 U/ F{* R Z" S6 h* R9 z: o; Q6 s/ V" I
public:
6 _5 Z8 S. M Y* Q* |. cCInventorySort()7 N' g% o0 j7 [! f( [7 @8 {' C
{' m8 w; r1 k8 x
m_dwPos = 0;
# g/ a% K( C5 p1 b}2 x+ w2 l V: p d- J
~CInventorySort(){}( z/ y: z5 s4 d8 x; X7 O* b. |
private:, h8 r0 _3 J9 Q8 v* ?& W9 X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ P5 d# @2 u' G" m5 L5 x
DWORD m_dwPos;$ O( a5 m( J$ T) z5 S
public:
* S8 j6 `( g- \: b. i& u4 q ]void Add(BYTE nIndex)
+ R0 U- j+ ^0 _+ ~9 \{. E: D" d( f' X- e) ^8 U5 E" j& ~
if (m_dwPos >= MAX_INVENTORY)
0 [1 s+ C/ {4 V: q% I" ^. _" s6 [/ `! v {
; @# ~, ]4 T8 ^ d8 d+ ] return;
) |0 R8 h$ G- `$ ` }) z9 ^5 j0 \: s* X* E5 a
m_Item[m_dwPos].nIndex = nIndex;
9 ?- c5 e& X! r m_Item[m_dwPos].dwId = m_dwPos;2 i) ?+ b- P- M( V
m_dwPos++;* H' W& u. ?' h3 Y( ?& W
}( g" N0 M' T$ Y# l' r2 j. ~) ~5 j
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 t2 J8 @! @( ]% c7 w. w2 F3 d+ \6 T( n{& S$ R2 }: I2 k/ F
for (int i=0;i<MAX_INVENTORY;i++)% u, E2 }. a+ O. o
{4 ^" l g! ?# @. R- e1 @
if (m_Item.dwId == dwId)& K' A1 v3 X/ {% Q% F! I9 n. B
{, F( s9 L+ E4 P H5 F- Z# E, U
return m_Item.nIndex;! {+ d- G& t: q3 ^
}! I0 \6 a, @* Z# J: g3 D/ ~: i/ ^
}) C3 z. D5 @& D. P2 @& A
return 255;
% t; I+ d! {' r0 |& s6 i9 F}5 b0 }# T" T" Y8 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' P3 H R+ P+ n{% A" A, f$ j' u$ w, l
BYTE nTmp = 0;
& s8 Q8 s7 K: b$ v2 e9 M bool bDest = false,bSrc = false;
0 j3 f) o- m# E for (int i=0;i<MAX_INVENTORY;i++)' D1 u# {9 s' r
{
/ K0 N* Y) h) Z. _# z3 n if (dwSrcId == m_Item.dwId)! D- V2 S% A. l4 O' R+ j
{8 b/ d: H0 L5 q# m
//id相等 则 改变对应的dest和src. j8 f' r, v2 Y& D# i. D% l5 y
nTmp = m_Item.nIndex;
$ N7 M# k& g' ` m_Item.nIndex = dest;& Z0 M: E1 r6 A1 t8 X
}
/ j' Q* |/ n% Q: y }
9 E$ ]! p% t( P //临时数据保存完毕,交换开始( a% {! r5 }" K
for (int i=0;i<MAX_INVENTORY;i++)
% U) z2 q8 C% Y" j" }( @, t, Z {. V) y- m0 x3 q! ^8 i
if (dest == m_Item.nIndex)
3 W, a0 S, }/ {) z' l; M {
; X$ _6 R5 j/ [8 k" [* o' K //id相等 则 改变对应的dest和src7 ]9 v; D* h1 ~1 H1 s
m_Item.nIndex = nTmp;) g" d/ R P; ^ z* h
}* J% x1 P$ G; \% @
}* f' C; B/ w) c2 M
}, q0 H0 S7 q0 T
};) d1 M# d5 _5 q/ ^/ V* c
-------------------------------------------------------------------------+ V/ x5 G$ h- F+ e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 i+ B# T# t5 ~5 O1 N搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) O! u" I, @+ p' C; Z/ J* ?
紧靠其上添加:
" z" w3 x5 i: t& ^3 l2 g6 Sif( pWndBase == &m_wndMenu )/ u9 L* {/ R% U6 V; @* \/ d# v
{, E& d' O" e4 A1 V( N
switch( nID )
* f4 `; Y& V4 w* g8 D" T. o {0 r6 ~/ R, M! R: s6 [! a* Z8 j
case 2:
, x; D% v2 W6 \ L9 p* _3 D {# K* V! v) N) [ z0 O) L
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 e! C( C. { _ i if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: |# U* g. H0 x: m$ p8 \ {) @' L( {! Q/ @# L" r/ X& F+ I0 k7 R2 ?6 P
break;
3 T K" P" i9 D* p! x8 y0 a }! @9 p* C0 M: s( u
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ m% v: w( w! Y" C w! d
{( h. {% l7 K8 ]( a' p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 j$ G0 |% o; E1 A- i
if( !pItemElem )+ p, i# k9 H5 q
continue;) l$ B* g4 F6 l+ v' L
if(pItemElem->GetExtra() > 0); E: Y6 }$ U% _* F# {/ `) w8 _; N
continue;
3 W/ Y* M4 |# ] if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! ~. m: Q. Y, f7 L8 r continue;1 R2 q5 [' o; `* e5 W
if( g_pPlayer->IsUsing( pItemElem ) )1 ]& [; Y" ?0 D; P
continue;+ _; O$ y9 c& Y% }9 v$ x5 J1 I
if( pItemElem->IsUndestructable() == TRUE )! }* F8 b; X2 T
{+ ]/ |& G+ g+ w4 m; ~/ x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 f; z5 }! Y' m7 @5 B6 Q) U3 F
continue;
* L7 |5 p! h& i/ c6 E }
) L: ~! b# I1 h p g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 l- l' X3 K, m8 u
}
9 ~8 }& U8 P! ~2 d break;% a6 s! q8 w; Y2 S) q% j
}4 n" b# Y" o% P1 G; F& p
case 1:
9 R j" z% B6 c! T$ A4 G {
5 j7 b0 D& [* N' [5 Y) j& [, W1 D //整理背包
+ D4 Z+ \2 C8 H- n+ t+ q: F //////////////////////////////////////////////////////////////////////////
/ r6 v6 Q8 ^( d/ d //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- \/ R$ f4 I9 \) N! E( b0 N //////////////////////////////////////////////////////////////////////////7 T, m; F6 S, u9 c8 t
//////////////////////////////////////////////////////////////////////////9 u4 h3 j6 v2 r4 h0 m+ A3 f# D: A3 k
CInventorySort* pInvSort = new CInventorySort;
( Y+ W( V9 D8 l* X vector <sItem> vItem;6 ]9 }$ c9 L$ h. S5 H6 s
vItem.resize(MAX_INVENTORY);//初始化大小5 Q6 ?1 i' n5 F( Y
//////////////////////////////////////////////////////////////////////////
4 ^" N( X S. ]7 ?$ ~4 B3 o8 i //填充数据7 X& d) V, k2 F6 _# @) y* E
for (int i=0;i<MAX_INVENTORY;i++)
& _- R& P/ y6 |1 ^( f3 ?! G# m/ F {
( Q; U/ B' n) b' H- W- W/ W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% H. b) E) ]- d& C! d/ m if (!pItemElem)# b7 ~: U' [8 }: I+ F* A
{' V" q. C+ M; o; x
vItem.dwKind2 = 0xffffffff;% P/ x+ V, z, W& U: N5 U
vItem.dwItemId = 0xffffffff;$ \0 l2 T; C3 e& R$ |) g
vItem.nIndex = i;4 |7 `, Q% N5 w- G) ?( \
}else {6 D) |" K, l! u) L1 z% u
ItemProp* pProp = pItemElem->GetProp();
5 b# T) l; C! I" I6 j vItem.dwKind2 = pProp->dwItemKind2;
! [; B4 g1 W7 |9 H3 r, G/ Q8 ]/ ~ vItem.dwItemId = pItemElem->m_dwItemId;
( F. N8 C; X& ~* F vItem.nIndex = i;
* c2 e1 m' B* p }% x( l; ~) N0 K `7 G
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 {) O S( u% M }
n i+ z' n8 o. Y //////////////////////////////////////////////////////////////////////////
( t+ K8 _" O. n+ |1 D sort(vItem.begin(),vItem.end());//排序* A2 q7 r8 f+ n6 ~, k
//////////////////////////////////////////////////////////////////////////
5 l" p' R4 s' x6 w8 q; }9 ] //交换( m* n \& a0 \' ?3 u% S. z
for (size_t i=0;i<vItem.size();i++)! N6 g( P) l6 Y; d* w7 c1 |
{
. j8 I# V8 y. S. d N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& W6 a. o) G9 T pInvSort->Add(vItem.nIndex);) D' l; c: A( }: n) V" Z
}
/ q5 b( @5 ?& H- _- ]/ e1 }4 J BYTE nDestPos = 0;
# P( f+ @8 H- B6 n! o4 A: v for (int i=0;i<MAX_INVENTORY;i++)
4 V: K" W( o: w- f+ M3 ?; V: ~ {
) m7 D7 q8 G# b) [, _$ d G/ g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# F7 F; A. e0 ^/ ] if (pItemElem)
0 m& C7 y+ l; K* h" f. r {
. b$ W. \$ ^, ^5 R7 J/ I if (IsUsingItem(pItemElem))! F. f3 ~, [* Z' W5 P5 n( U" c1 J
{$ e2 J+ v/ W4 w( e4 l7 G+ N
//这个位置无法放
5 v. Q# _& D8 L$ B0 x% R nDestPos++;
3 C4 }$ i& l, n+ d% T' z+ R }
- c% N5 i4 i; h: b) m( \/ w }
- a/ u$ H: m/ Y0 P ?2 ] BYTE nSrc = pInvSort->GetItemSrc(i); M+ ?$ I$ Z# G3 e& Y1 X
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( C4 ]8 Y; O# N$ \! [. @+ P if (pItemElem)+ M- R: J0 f* z9 b4 O5 E
{
- a! g2 I( u$ P d% F* E! O r if (IsUsingItem(pItemElem))
6 l; S! X8 o# m6 ~ {
" \7 T$ u/ l0 G' F- o/ _7 r //这个道具无法移动,跳过* s( ~# `. q+ M7 G- m( V2 l n
continue;
2 f K4 `3 l" i$ m$ Q0 O }
: M7 N9 Z, M+ {6 \+ @8 m }else{! W% C- h% D$ x2 h% n3 m
//空位置 不用动
9 @7 d2 m. S! h `+ J# _2 ~ continue;7 I+ [6 ]: r: q9 \8 v9 h
}3 b0 i/ g. c, p; i" {( N
//////////////////////////////////////////////////////////////////////////
$ ^, [0 R% w+ g7 \7 X3 | //开始移动
/ V4 t/ }1 T* }& } if (nSrc == nDestPos)
1 i; W2 {4 ^5 q; Y3 O# N {% X# U& C f8 R, m3 V
//原地不动. X) h6 P# }4 P
nDestPos++;
/ P+ s* D: k0 b, I6 V7 Z/ ~% ` continue;
& i- B& a! |2 X; | }! l+ u) ]! ~3 L7 I
pInvSort->MoveItem(i,nDestPos);
5 z8 Q/ y. b5 V9 I; w; i; P! z g_DPlay.SendMoveItem(0,nSrc,nDestPos);- W6 m) A, F3 h
Sleep(5);" p7 T1 q4 X. I( c! I
//Error("移动 - %d->%d",nSrc,nDestPos);
+ f L' e4 q( K" Q* F! A, w) K& u5 u nDestPos++;
* K8 r. ~. X8 X }
- v% t+ k3 U$ Y) n //取第一个元素的信息) @% K1 g5 ?$ ^' g) {: q
/*
! q$ | K! S# N- |( Q2 H; U if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% r' X2 {* u$ j4 J }' O; E( q {2 u# X _0 k* m2 [% Q4 v
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 t) [: Z0 E; t/ h% V/ H9 q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" ^) g( b$ G9 s( B/ z+ K }
0 P% W2 u# ?" v( ~! k */9 f& Q9 @ V5 l, q- o$ N" n5 ?! ^" x
//////////////////////////////////////////////////////////////////////////3 m* P8 Q3 k' A! I- O; J
break;/ _$ U0 M3 C" F. O* h4 @( i
}
; T6 d1 |# B1 U$ I$ | }
9 b, p: B" [* Z3 F8 F4 l3 Z9 M* j}
' G# R4 P! i8 }" e5 K# Cm_wndMenu.SetVisible(FALSE);6 Z+ D1 R. g! c- E; [
) [" N! f4 A4 [
--------------------------------------------------------------------------------------------------------$ [8 o8 E7 i8 ?0 U7 k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 t8 }: u4 I* B7 U
{7 x$ [' M' Q8 r; ~+ H
BaseMouseCursor();
5 m; x+ a! t& N# s8 h/ h6 A+ }* m}2 T6 }6 I( A! y: z1 X: q2 ?+ p# x
在其下添加: b1 f8 v. t; [( C! [( e
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# [ w, i" P9 Z{1 u: x* O: t& Z& b1 j/ Q
m_wndMenu.DeleteAllMenu();
8 s. P. x6 C5 T# j- o6 r$ z! y! k- Bm_wndMenu.CreateMenu(this);6 i8 V0 [9 c; K4 n0 H
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ e7 P8 O, S3 b2 N* ~5 u( b6 B
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 `+ Q+ Z" s- ]1 V! F{6 w& E. h. h2 a, d
//P以上级别才可以删除所有道具+ J- ~: s6 c' m3 x" T1 t4 s1 E
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ J$ F$ I0 X+ B}
: u* l3 c) [& q) Z2 W: d2 Tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ S1 x v7 [+ l- ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! y: b* Y7 n, Lm_wndMenu.SetFocus();# v" U& S' w, |& N
}
. F1 p7 t) m# s7 j& q------------------------------------------------------------------------------------------------------------
! E$ B3 P+ u! e: k, k2 f, @*************************
/ ?8 f9 d0 B. FWndField.h文件
$ s8 {5 V7 _2 a* v- C*************************" {; z3 v- H* y: S
搜索:BOOL m_bReport;/ P6 G2 E. I/ d5 b
其后添加:7 u8 B# {$ B; p) } A5 x
CWndMenu m_wndMenu;) s3 w P& O; f& g1 I; p
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ P8 S) Z5 t9 _. y8 K" V1 \其后添加:; g! L! W8 K2 t; |: c; J0 p# Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);% j" Y" N& s! i3 k4 \1 H& {7 }
4 P; a3 s# R* F/ u1 k) l# T. w4 T3 W( m' F0 [7 R
|
|