|
|
源文件中_Interface文件夹下WndField.cpp文件' z/ o9 }& L+ D K! V
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); }4 v! g/ H" \: u
: G& x5 g2 \% Zstruct sItem
4 E4 k' }/ T( O7 Q1 U% M- J4 e5 S{
; r# u& u( ]$ T! MDWORD dwId;
; L6 E/ Z1 w: c6 ]- ^6 xDWORD dwKind2;- e' T$ K0 H: c3 Z& S0 x0 V; M
DWORD dwItemId;5 i5 C8 V' J. b6 @: b( q
BYTE nIndex;! |7 M! Y( J0 l, O/ F5 [
sItem(){, g' T# O# B I# h
dwId = dwKind2 = dwItemId = nIndex = 0;
* k. ?0 e2 S o5 n# `}1 q1 V6 e$ }1 r: h) z
bool operator < (const sItem p2)
+ l7 q. D$ K; W2 _! M3 C# d1 R4 g{# U" g J* H( L& \
if (dwKind2 == p2.dwKind2)
% r! [3 @! e+ t5 F, ]5 L& Q {
6 h: D& R0 q4 b. i) ^ return dwItemId < p2.dwItemId;
9 |1 F, o# T% D. K- V' G }else{
! V9 u6 k( J- p4 y0 B8 R return dwKind2 < p2.dwKind2;
+ d# Q1 ]. ?$ ~4 n0 K- b }$ |; ^+ y7 N( n# \1 r
}3 @; w5 h" Z: [; L
};+ m; V' m' S5 K; T, k* G& [
class CInventorySort+ E! D5 f0 M, \, z7 n
{% [# C+ Q% H2 {% K
public:
, b* E: B+ m5 y: l5 |! i1 ]CInventorySort()) Q7 y# I; T e' R9 \+ F5 ~
{
2 K0 ?- T; F% p% E3 A+ O m_dwPos = 0;, t5 P& {: s9 V" h: ]* g: e$ c
}0 p( Z+ d S7 K1 B3 k; v7 t3 N* h3 z
~CInventorySort(){}
5 ^. p/ q* s E7 x1 qprivate:! R9 y+ K! p" ]# s, e! ]+ R! H
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 ~9 S3 P1 m1 d: H2 T- i. ?DWORD m_dwPos;6 G' ^- [& r- I, C% }1 Z( J+ z
public:: a* E/ q3 f# }$ q0 X
void Add(BYTE nIndex)- X$ k6 b' l& Y' h5 c1 i8 N
{
& M1 F+ S0 R* X& a. o if (m_dwPos >= MAX_INVENTORY)3 Z, X8 f W. m5 {4 }
{) ~2 f+ h3 V& {, N
return;$ U& K: m6 t* |0 d4 m& O8 E
}
. V: U E" P# l4 S m_Item[m_dwPos].nIndex = nIndex; ^' x8 I- U2 x
m_Item[m_dwPos].dwId = m_dwPos;
, J& r% ]/ h- u, a: s m_dwPos++;
! w# w# f6 V6 l& ^7 m0 Q}& Y% c+ u7 I( L7 y' j+ `
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 c" d) L) |1 @{
* C! J) K( n0 ^! Y4 |1 ~ for (int i=0;i<MAX_INVENTORY;i++)
% S& D9 M8 Y! ?; w {6 O/ R( l8 d" Y- H4 k( c9 b
if (m_Item.dwId == dwId)8 X) v& ~# ? i9 G9 U4 w0 u- l
{* }( e) s( @6 c9 n
return m_Item.nIndex;
8 _! o! O; F! {3 u' t/ Y }
$ F G3 e) N$ A% o6 [& ~5 o }# Y1 Y" L/ h. E% n% g/ l0 B9 _
return 255;5 a6 O& k' {8 z/ k* Q
}
. f T$ _) q; A; ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 w6 q1 Y- N4 i3 K& G{
% j) ^2 h* c1 g# k% u: s BYTE nTmp = 0;4 S% t0 o: P, O; H& d% L$ Q
bool bDest = false,bSrc = false;* `7 }$ F+ d6 |9 ~
for (int i=0;i<MAX_INVENTORY;i++)
9 x) K* ]/ i7 c ^& W' j: t {
/ S6 v; ^/ m' c if (dwSrcId == m_Item.dwId)2 p) S, ^% I# r3 i0 X
{
+ k n# }$ P9 E0 z% [ //id相等 则 改变对应的dest和src: X( {/ p8 t6 z B
nTmp = m_Item.nIndex;
9 k: _, t7 w: w+ _5 S m_Item.nIndex = dest;
7 Z. {$ r+ A3 R# a; a6 T. h0 h2 K }
7 Y2 i' E$ |( L! Z, D }! h$ F6 A2 D" D v+ E1 M8 B' L
//临时数据保存完毕,交换开始
2 y/ X' N% P0 a4 J& t y for (int i=0;i<MAX_INVENTORY;i++)
" p& q/ ?1 B f Z9 I. }- b {: P" ^, @8 [9 _3 I
if (dest == m_Item.nIndex)# T7 F a* I" U( a+ Q
{" u; \: Z+ N* I, h9 m" G
//id相等 则 改变对应的dest和src+ ]" |: k) L9 F2 _0 U% [" J
m_Item.nIndex = nTmp;0 Q' E1 @$ n5 s$ n5 V
}( i! E$ f N: N# P" W
}$ p4 c. M9 Q- E5 ~3 Y
}
1 ~* u' F, `8 A5 F k3 @};
8 V c0 B( ~( L1 W( D-------------------------------------------------------------------------0 W% N$ U6 Z8 R4 L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% K) e- C2 y9 z- J j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 x5 R1 y; I. ?3 B1 t紧靠其上添加:" v4 ?) U& {; V+ I% N! T
if( pWndBase == &m_wndMenu )0 R$ @0 n0 K* H: I2 D
{
0 _9 V* D' A; F switch( nID )
5 ^- F0 x( x. Z" Q! z {! z; B& d8 ]0 K+ G& a, [
case 2:
, Q: P: e) L X7 I4 y5 ] {
' Z7 Q# w0 F# j) ?$ T$ ]# L" K //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 E Z3 f, \+ e/ U, f& P: w
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% k' B2 Z! a8 y% Z
{
6 W, s9 U7 J: \/ L break;' r6 A7 P) X/ V& M1 J" c& a
}" t! h1 _) z; _5 |
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 e; V& ~' l; ?, ^5 c6 q {
" C: X2 a4 F$ D) S7 M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
t3 a/ i8 E4 Z; ^) n" r/ s if( !pItemElem )
/ r& ]5 g" K* j continue;
7 `# X% \7 v- U X if(pItemElem->GetExtra() > 0)1 I2 a" c4 m9 t' e* O
continue;! Q; o) E6 T4 e/ |8 o1 N
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! Z- [1 p' H/ x/ @
continue;) e" @4 P* [$ p1 t( K
if( g_pPlayer->IsUsing( pItemElem ) )
7 o; a* I0 Q1 Z% r# h- O$ n continue;
6 v9 B- K" M: q+ e3 ]5 o( b if( pItemElem->IsUndestructable() == TRUE )
: `/ s- x4 o& Z1 s6 [% ]+ k {0 v* K$ X( s1 l+ A; l( Z4 N+ G
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' f! f6 B8 ], ]' z. c8 T continue;
# l) K( o# W9 Z. i }
+ s6 g6 K. e- R- f8 ^7 l' e% s/ } g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 r: P2 `8 F0 m W }
% d4 ? I. m& A2 a* I j9 i# S break;* w* O8 z# Z2 A9 M. G) X" o- u: x9 x
}5 ^2 d# _5 V) J
case 1:
. t) G$ k: C Y {, ^$ r, U4 L t+ E
//整理背包5 \$ x9 W7 r/ k) q
//////////////////////////////////////////////////////////////////////////
/ Q7 p/ I& h! G //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 j( I9 m t' ~2 H d9 ?4 Q8 R. K //////////////////////////////////////////////////////////////////////////
* A! y2 x$ P4 | //////////////////////////////////////////////////////////////////////////$ O8 y9 b3 F! P0 e
CInventorySort* pInvSort = new CInventorySort;) `6 t) s4 k ]" ]0 M0 B5 B
vector <sItem> vItem;
$ v$ Q, ]! L& U. W7 `, ?: z1 q vItem.resize(MAX_INVENTORY);//初始化大小% y* |$ i- n: V
//////////////////////////////////////////////////////////////////////////8 l; r. f' R9 k4 W" k6 ?
//填充数据
9 V8 U5 F6 V7 @- F c' { for (int i=0;i<MAX_INVENTORY;i++)+ k0 j. h( s! _- _0 Y$ p. q+ j3 l
{* x! _# u; }* J5 f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 l2 d! z) F4 M# {) U' u if (!pItemElem)
2 Q! Y2 i9 W# R8 F- g {
# y$ W8 r) J9 o* ^ vItem.dwKind2 = 0xffffffff;
/ O g/ s) ?9 {0 C: j; O1 m+ {# F vItem.dwItemId = 0xffffffff;
! ~$ w5 @6 @2 V2 F% B3 t, o# Q4 k vItem.nIndex = i;
5 v5 \7 P6 v2 B9 R0 c+ o2 c }else {5 @7 q9 s" g6 M" Y8 {3 l; y) @; j
ItemProp* pProp = pItemElem->GetProp();
4 z* S1 R# e" T. G6 p vItem.dwKind2 = pProp->dwItemKind2;
/ r5 |, l- ?+ U; u) [ vItem.dwItemId = pItemElem->m_dwItemId;1 `* f1 b3 X/ u# E) A7 N8 |
vItem.nIndex = i;( J; m- @$ ?) Y. y1 W0 I
}
9 w; ?5 D8 C( [" h- V, _% U //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 \* M# _# w& {3 _9 m/ J1 l }
, s4 C, L. f* c& J {" P //////////////////////////////////////////////////////////////////////////
% ?3 q% i" ?) p5 Z$ _0 m. P sort(vItem.begin(),vItem.end());//排序# `& l& P: a- G
//////////////////////////////////////////////////////////////////////////* z& O3 a* ~+ t! k% N
//交换9 ^5 }! T. v @5 q! r. B$ ]3 u
for (size_t i=0;i<vItem.size();i++)8 y. G7 S$ A) ~% v6 _" [
{* Z3 f, @; E" ]9 G( |) o$ j1 q: ?" l
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); l' }- H7 M9 t6 Q4 p) R+ ^
pInvSort->Add(vItem.nIndex);
' x7 O8 L) B$ I# z- ? }
9 f- O d& W; l) v; l! t' |, y M BYTE nDestPos = 0;4 ^( u6 ~! b/ o! S
for (int i=0;i<MAX_INVENTORY;i++)0 E. o' Y' y( W) U& U( n) F% \9 D' ]( Z* u
{
" F8 q: i4 W+ u+ q) K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: b/ ]3 q0 |8 @# ^$ I, _ if (pItemElem)
. y3 m- N' M. N* M {% ~9 f8 f+ \" @# o
if (IsUsingItem(pItemElem))3 r3 g; `7 A; ~3 B, M
{
$ |& R$ R" @9 |" w0 B& ?9 j //这个位置无法放8 \# |5 n, A! L- }+ \0 x
nDestPos++;1 t) R3 |5 l8 f* u$ g! p; F
}. q1 j8 I4 }* B) ^- g
}0 j; Z& P ?6 B' [) G. U
BYTE nSrc = pInvSort->GetItemSrc(i);
, n9 J+ I- l7 K pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, f& v; [1 k) B: O5 d
if (pItemElem)
" |% L( t; m4 t- j$ _) _$ w {
& f/ X" q$ F( z \ if (IsUsingItem(pItemElem))
' B5 j+ v0 z z: v V6 } {
$ U3 @2 `' W0 B" ?! Y( _ //这个道具无法移动,跳过9 V9 {7 s( A- ]
continue;
4 C5 g9 W: ]: h5 t9 K }5 H H$ g2 T5 p3 O
}else{, J& N: Z, A$ ~& r0 l7 \0 A% Q/ q
//空位置 不用动0 A; Y/ P# h! Y; j. r) E, {3 [
continue;
' D' p! i. L* B% M0 u% X- c$ h& p4 R( o$ j }' ~1 J# J3 i& \3 ?
//////////////////////////////////////////////////////////////////////////
& I( j# n4 J1 i+ r6 m //开始移动
! F8 U' P1 ]+ d2 n if (nSrc == nDestPos)4 D y/ f. }) ?" T$ l
{& r/ I4 R5 f: R- v/ L2 Q; M* ]2 N
//原地不动7 P6 Y3 p3 b+ M B
nDestPos++;3 B$ _2 d; \+ w; f A
continue;
3 s) D$ |0 {, F7 C: D% [) A- i( c- h }
* v) c' T% A U/ g* _! E/ K' b pInvSort->MoveItem(i,nDestPos);$ f9 M' }5 n G
g_DPlay.SendMoveItem(0,nSrc,nDestPos);, |" x# F; j b
Sleep(5);8 i& g: E+ b2 q" R
//Error("移动 - %d->%d",nSrc,nDestPos);+ m4 ?9 B; J% ~- B
nDestPos++;+ l: y' x3 K- `
}
5 W/ r9 }2 E; j4 b //取第一个元素的信息: t$ E& T7 C y9 b
/*: B' d; G }. E Q$ z/ r
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)7 t" Z+ C' t+ r7 w( }0 g+ l
{
8 m# I, p7 ` Q; \, D/ b% T4 z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ v9 T8 K$ _ t& O+ z% H g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ c9 @/ s# |$ Q% i! j }
" R% ^4 k, D7 s. G) U# U */
. }, }4 x& }3 H/ O; Q6 i( p/ M //////////////////////////////////////////////////////////////////////////& _5 c9 c& `2 `* q9 Y* s
break;& g5 K3 Z% q$ \& `
}6 U- f2 j8 n u1 f; W' R) {& I
}
. i7 g8 R; u% l& z$ S9 V}4 V, w; e6 h% B- Z' g/ S( u
m_wndMenu.SetVisible(FALSE);& J5 n/ i X, O/ _/ `5 g* l
4 k$ R" O2 E5 V6 A: T- k--------------------------------------------------------------------------------------------------------
/ K2 ~$ y5 W' R+ @6 H* C9 Y3 r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# x( b0 B3 e @% ?+ W
{
4 x4 `0 y" e+ j0 T0 ^BaseMouseCursor();
% N9 v7 @3 a( h. m9 s* C* ^}
/ S ?) {: ~% T3 i _' L8 T) \在其下添加:
Z9 ~6 X4 z. w5 @: ]. F8 m: [) g: i- Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; a0 j3 v# u+ Q* H7 L! w2 |- G) ]- k{9 k3 B7 a$ K! ?8 Z5 {
m_wndMenu.DeleteAllMenu();+ F/ @! E" P% X- {4 N) B
m_wndMenu.CreateMenu(this);
3 k4 n0 u0 t7 e6 C2 J% ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); O1 n1 O: ?! r1 z9 m# _' s
' x; z* E1 N& N6 J( q# i- a. K0 hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 M5 N+ H: A$ v) n: m{
. [; ]1 D( Z# C* {1 G. G. _! w //P以上级别才可以删除所有道具4 w! r: v% L6 l
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ Y5 ~6 X" Y J* w+ C
}
/ D5 I H% A, i3 ]! nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 f' V! H, B4 v2 W- um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 d- w) L" S0 B4 }2 ~% e z
m_wndMenu.SetFocus();
7 b+ `+ m6 p: v" _4 R}
4 d( V9 W9 z3 W% k# E------------------------------------------------------------------------------------------------------------
( x, W, b" k7 @* H9 I* {7 U4 ]8 ]2 ?*************************
8 k5 s( K: ? k% ]( P# nWndField.h文件
" f4 Q0 r4 W1 L2 p8 w( q*************************
8 I$ J$ {) U& k搜索:BOOL m_bReport;0 O k- |5 F0 l9 s+ {6 T( J
其后添加:
0 p) X: L: ]/ A" x( H5 Q- z6 {CWndMenu m_wndMenu;
/ O8 B# `/ s0 l' R+ _* [. x! `) O; O( R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 M7 G" m6 E& r! B! c" f其后添加:9 p a( U* `- M
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 u- k4 @* V# Y3 w
, ?0 w& S4 W# n5 R% Q1 f9 n
; N8 t6 R6 C% D1 B |
|