|
|
源文件中_Interface文件夹下WndField.cpp文件( ?- v) S1 S. `+ m
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); O1 E8 k$ ]% l3 _
/ R2 ^8 Z/ H. q: N! Ustruct sItem
# Q& w3 ]+ q: V. x/ A{
4 C) B; |: X/ `DWORD dwId;
$ X# I' G1 d, k: t# ?. ~DWORD dwKind2;
8 W% K1 W" w) r! e7 Y2 q, WDWORD dwItemId;
Q4 q X8 c5 j7 _5 |9 t% t oBYTE nIndex;8 H3 r* U. r8 U1 n6 i' C7 @
sItem(){; Y4 ~! ]8 I- G( [
dwId = dwKind2 = dwItemId = nIndex = 0;9 \ ^& R2 T6 r% h+ X
}
% i$ B; p- K: w' a/ T. T8 tbool operator < (const sItem p2)
+ R& a% c! N# E{
, v" c& D+ v5 {& D if (dwKind2 == p2.dwKind2)
# V& R( V( P, l, F4 M, B0 f. X {; |6 ~! G: i; J5 F& f
return dwItemId < p2.dwItemId;
+ |3 K3 e8 g9 |7 U8 p$ i }else{
% `7 t0 x* S/ W: [4 b) x/ O return dwKind2 < p2.dwKind2;& {5 f' q, O- _1 I/ |. y# P# K
}
# D* D+ v8 s0 n, e5 G}
! j$ s5 J% p9 J. ^7 k: A" |! l};- V/ E, Z$ a, D/ p, c6 ^) \( R
class CInventorySort
. Q- X. ?$ e4 `2 X4 a8 N4 B, W% g+ _{
$ b* c# A" ^! F2 Q5 C2 S6 L3 b/ ~public:, c6 N m2 I! C) q
CInventorySort()
4 q' e% ]' q5 Q{5 d* t3 g% Y4 H% ?0 h
m_dwPos = 0;8 a8 {; Y* N+ f1 g! k I
}
0 P }: z% M: u% G* D9 c~CInventorySort(){}
1 B* D* o& V8 E3 S* ~- h4 K- L. wprivate:: v4 L5 b, Z7 O* m
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; u4 K6 g u4 t$ W# S; j& ` xDWORD m_dwPos;
+ [9 J# K5 N# Ipublic:% ~2 b" s, I+ B. G% \
void Add(BYTE nIndex)
3 V; K' |* c" [- O) S{
/ P9 R4 s; m4 M( P+ r) H0 O; Y if (m_dwPos >= MAX_INVENTORY)) p2 \# P2 O- ?6 J) U2 S% V
{
4 M+ s9 V1 O( j return;* I2 R) x l7 s/ K
}/ n7 J) E. D3 r) Y' ]% m, o
m_Item[m_dwPos].nIndex = nIndex;' d+ b [$ B2 i/ d, D
m_Item[m_dwPos].dwId = m_dwPos;! [3 ^) n {" |7 Y, g m8 l
m_dwPos++;2 |/ D+ R. L- M7 L( D' d' u
}% ]* G, [- s& q+ A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, p8 \7 x! y: ^4 A{ z! u/ r, M, R0 j: R' \
for (int i=0;i<MAX_INVENTORY;i++)
* P- m' D/ c9 D* e* t' o# G' ] {2 A7 X* t) u* r1 v7 Y) x' f
if (m_Item.dwId == dwId)
4 `; o5 y, W) l% k% p" t {
9 Y. H& R! O1 u0 O- E" A& r3 N return m_Item.nIndex;; N. E! n. t0 z- ~4 U' Z: d) ?4 J# C
}7 H! E2 h6 H3 R5 q2 M' d$ ?
}
7 ^- K. D! h5 n! m m2 O- v return 255;8 M- f, h% V% }8 o$ \8 I0 W( Q* s
}
k& Z- ^0 R& C3 N5 Xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ z- H: v, R% Q o' A( }! D% h{) ?, ]0 U, g1 J1 J' U: z. K
BYTE nTmp = 0;
$ f0 i: F# B7 R bool bDest = false,bSrc = false;
' U0 }& F6 K1 v* V+ f' m. j1 q for (int i=0;i<MAX_INVENTORY;i++): e: o& W- l! |5 Q J Q# C
{
z; ]4 `; N" ^9 d if (dwSrcId == m_Item.dwId)
" ]7 p$ W5 |" p- F7 ^, x, I {, u! ^& D: T- o ~
//id相等 则 改变对应的dest和src
# I5 L# q9 ]" B nTmp = m_Item.nIndex;
; s6 D! ]* C# R% ^) t9 x m_Item.nIndex = dest;
* G9 Y* g5 K, i. q7 L }
( T; m3 I [) v! p* [; \, n }# K0 t# o$ w7 |' e( Y; m* ^
//临时数据保存完毕,交换开始' P' \ J" }$ p: \- \0 `
for (int i=0;i<MAX_INVENTORY;i++)% j: \% p. t( O7 z
{: E& z# K1 L9 W6 G+ k" `
if (dest == m_Item.nIndex)7 j, ~9 }8 z1 b3 F
{' `4 f% C, ~) u6 F2 c; t
//id相等 则 改变对应的dest和src
* Z5 b* [# h9 R7 M9 G, ?1 n( Q: [ m_Item.nIndex = nTmp;
: o3 y8 C2 p) n) k; T t }/ _5 R9 p2 F! ]+ i) }
}
& R" h! U0 S* @# ?}: R+ [* e6 I* ?* C# L/ g1 T
};" g/ ~9 I# V) v* B
-------------------------------------------------------------------------9 F) K: O! N$ t; }; H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 \1 h% `/ X& m' v- E3 D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; j4 F( _# c/ o- d9 q, f5 r2 T# O紧靠其上添加:
: i: S* Q0 [4 y% [. j# gif( pWndBase == &m_wndMenu )9 D4 W$ u. q p/ `6 ]0 i* @
{
# Y! H) v+ X* t' g* ] switch( nID )! V& F- C, n# G$ y' e
{/ i6 ^8 B+ i6 h: s! N
case 2:! U: X5 U7 H/ @! g$ x0 I
{2 U4 Q" B# C2 [: L+ n1 ?3 f
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 z, f6 d5 Z# k2 A+ S if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 a/ f& u5 X* ~7 n9 Z
{
" ` \ ?! U; ~ break;* y# D# d2 C+ z0 l6 d1 j6 q2 ]$ u
}5 o* X" z3 D! d7 t4 U
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; z& Z* h6 T2 Z( k {
9 m8 z! Q0 ^; @/ i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 Q" \( n& B; P1 ?5 d1 }, g" P
if( !pItemElem )
6 K- f& V5 v1 c/ l" Q \- g continue;
* y! p) c; E& b; w if(pItemElem->GetExtra() > 0)& Z& ?. ^* P+ Y2 q
continue;9 h' C8 r4 Z& _
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # c( X. [+ ]) L
continue;
" X' e2 D, e \+ ?1 N if( g_pPlayer->IsUsing( pItemElem ) )
: W0 X4 }- M" b% o- R0 e continue;: `' }0 N7 w0 x9 x4 f
if( pItemElem->IsUndestructable() == TRUE )! {, \ i. q9 h$ N
{1 T0 o% B6 M) V# j) ?" U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: K, X6 Z& u2 N, L; _ continue;1 n2 m0 m; u0 c" `, D
}
q" Q) J% {: J- _+ @4 j4 h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ }8 B b, m, u+ s0 f$ W }. i4 ?5 y* @- @: C2 D6 T
break;
! L. Z$ r+ b2 L$ k4 C Y4 { p }4 U" u& Z3 M5 `- Y
case 1:( u9 {9 J& r. R
{
7 f j, c: t# G9 W2 X: m9 m //整理背包! m; r9 R. e& e, R6 O# c8 J
//////////////////////////////////////////////////////////////////////////
: `1 T, e" l4 j* n* k //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ E& a" m- d) q/ M ~ //////////////////////////////////////////////////////////////////////////, ]$ W0 _9 K1 {3 W1 V, X
//////////////////////////////////////////////////////////////////////////
% I) \: F3 c6 v T( P& i7 ]6 N CInventorySort* pInvSort = new CInventorySort;0 X8 z3 ?5 k7 ^
vector <sItem> vItem;' r1 |% K5 x. ^. t ~4 D
vItem.resize(MAX_INVENTORY);//初始化大小; A. j, B) U3 j$ l' z
//////////////////////////////////////////////////////////////////////////- Q7 k0 B$ i2 u4 F
//填充数据" {8 X) k1 V/ F: M4 p
for (int i=0;i<MAX_INVENTORY;i++)+ T9 d8 o, ^1 x4 Y; y9 F, n
{6 W. i8 b2 u0 H e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( \& O& m, a1 w7 \ if (!pItemElem)
- m' q$ J7 K% |7 L5 J j7 X {
: P9 V* U7 N; v* O& V2 h" {; D vItem.dwKind2 = 0xffffffff;
' J4 N: p# a8 D( i* p7 m% A vItem.dwItemId = 0xffffffff;
0 N) Y# d6 v6 z" y+ o0 A P S vItem.nIndex = i;# b1 {' _2 e7 V* A- `: F! [) h
}else {
/ r& Y( i, R9 E$ v9 X6 K ItemProp* pProp = pItemElem->GetProp();
! v- j+ y E% ^5 ]# [/ \ vItem.dwKind2 = pProp->dwItemKind2;
0 p, @& T4 k s z4 t1 n vItem.dwItemId = pItemElem->m_dwItemId;0 G% Q# s8 w Y
vItem.nIndex = i;
! `& ^& k, d7 H5 ?! x% n. @ }4 G0 u/ F! y z# E2 q% V9 B
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 S+ V; y& D0 x2 ^) n/ X
}5 x9 M; U" n' K" V0 ^7 E4 l
//////////////////////////////////////////////////////////////////////////6 A Q4 V. F0 C
sort(vItem.begin(),vItem.end());//排序
% @% _# w6 ] Y1 ^ ~6 H/ ^ //////////////////////////////////////////////////////////////////////////0 D s% ?5 C$ C4 m( f1 }8 s6 c
//交换/ D+ H3 \" ^3 q9 H- J- J1 N
for (size_t i=0;i<vItem.size();i++)
3 l" L& B8 V9 r7 a9 j {
, R: [- y6 I' E/ b8 Q2 w //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 ]4 h& E% J/ u( ~3 d pInvSort->Add(vItem.nIndex);
6 u0 o( q. z$ L1 }1 i }" `, u- `4 h- X) I! Q" l/ j) t/ c
BYTE nDestPos = 0;
: M, Y8 a8 ?( H. @! x6 U for (int i=0;i<MAX_INVENTORY;i++)
. W: d! }' l# c# @0 D1 J+ l7 r* z {
+ u9 n9 L1 o) N% J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 I$ \2 ?( F0 `- O if (pItemElem)0 K5 Q# J5 |4 @. b+ C
{* L1 G; K3 I0 M3 J
if (IsUsingItem(pItemElem))
]; ?) T" q4 W. V" D9 L {
) S# A- v5 V7 O3 k W //这个位置无法放# [; U P0 K& @# P
nDestPos++;1 y$ e+ d1 e$ Z0 \7 X; {
}
) ]' s, \. Y$ q% d7 X. V }
& T7 [6 g& M6 n: j; o BYTE nSrc = pInvSort->GetItemSrc(i);
: S. E6 O" i- _& e4 { pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 j" g1 P; ~) k+ ?* q% B: P if (pItemElem)4 t B- [. V+ t2 }* i" t
{
5 ]0 T* g0 E! P! F: d7 `7 I8 w if (IsUsingItem(pItemElem))
& o6 U7 ^+ ^1 p" D, [! L% V7 P {
+ u" r) o' R8 V% t. y% _1 t //这个道具无法移动,跳过
6 e2 K6 q9 F) K' e( M+ @' S6 B' N continue;
. \. l( l; n% Y+ g- N4 o" N4 c } }$ a' T1 M( C
}else{
1 t$ [! H9 V, j' f2 v; j //空位置 不用动3 w/ ~9 B1 f+ T* z
continue;
( I) j+ M4 ?& R! C% ^ }" q/ P7 b8 n8 ]6 [
//////////////////////////////////////////////////////////////////////////
3 z- u5 g; D- g0 ?6 q5 w2 {) }, F //开始移动
' e D" N* v; Z, y% r if (nSrc == nDestPos); R) m: T/ U. G$ V( Y h8 Q+ H
{; s: P: Y) q' [ a* i' R/ K' F
//原地不动
1 x% x9 m, d5 g. X* S) A( s( J% \ nDestPos++;
! d2 W! O4 }4 m: ^ F9 Q" ^ continue;
/ O. b% Z' r1 S/ r( V }
d( i- q2 w. s% ] ]; H3 y pInvSort->MoveItem(i,nDestPos);1 I+ x( T; [6 x/ v- V7 [
g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 q4 s. h! _7 k
Sleep(5);, a& r2 B0 C1 P
//Error("移动 - %d->%d",nSrc,nDestPos);
5 D. Q7 B6 a6 h/ P5 _8 X nDestPos++;
. X/ F1 w2 d" Z8 c }4 }/ c# f4 L$ }2 f1 h4 i) K; j
//取第一个元素的信息
7 |( ]# G3 u* z; \' u6 X' i /*
% U0 a- V; {3 c5 r+ d if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). i" y7 X3 I ~% n4 j) T
{
) T! o* T4 e( Z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# A; k: L- e$ i1 O" K$ l
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) ~# y* a8 v x9 D }
4 o2 u p/ r4 ~( d' i2 `+ j7 @" _ */2 `* m9 L, m* }. C* h4 i K7 T' ?
//////////////////////////////////////////////////////////////////////////
0 @2 Z/ }7 l% L0 y; c G break;$ O+ U u/ y" P% M1 @5 S
}
3 v* e5 @, O1 m6 B& Q/ P7 H4 A3 E }
! V) f& Q( K* o( K}
: O c! [7 i- G1 u+ Ym_wndMenu.SetVisible(FALSE);
6 _ n% d+ l) {3 n! L
+ u3 k' l; s8 L" T, U: `4 u; a. y--------------------------------------------------------------------------------------------------------
! X" V" P2 _% c搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) j0 \) M+ j! H
{# e w9 W# y. ]3 w. h& H: w
BaseMouseCursor();4 |3 M: n! F' F8 v+ s
}
+ A4 z) b$ L3 q- B6 n在其下添加:; q7 Y, m6 T5 N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) y: y [# T" Z* Z0 P, |+ J' \{' ?) Y# {; f, M+ U+ y3 X
m_wndMenu.DeleteAllMenu();3 ?( ]2 i6 Z+ O8 b
m_wndMenu.CreateMenu(this);: T" {( c9 _; l# j
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) v& ]! ^) }3 R
+ S2 u6 @% ?2 k1 bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 J* ~* {; L8 m: N
{1 I8 `. B( K% x/ |& q* ^; i
//P以上级别才可以删除所有道具5 h8 @* D- [# ?! |3 u& Z1 } |
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 T" K* [1 m) R0 U0 J! f+ S) t& y}
6 W+ K/ [1 m8 m6 t6 G, Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
- q: |5 N4 X! o, W; Z: ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 l4 _! V$ w, s% D+ M8 I- G; {
m_wndMenu.SetFocus();
- S* c7 x! w2 S: m( y! j9 }}, B5 |1 K9 [1 x8 j9 V2 r
------------------------------------------------------------------------------------------------------------
9 ?& @4 j, [, J9 T% n# ^*************************
$ m* G* s7 E+ I8 rWndField.h文件% D& [- @+ s, s1 N
*************************% f: I, c% ~% y D+ I1 o$ e
搜索:BOOL m_bReport;
5 [, F6 O; j! |% K, g2 J4 Z9 w其后添加:
% E. B$ W. h+ X# B# uCWndMenu m_wndMenu;
/ T3 Q, f+ l; @+ }搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- w8 f: P3 e0 Y. t6 O* `1 h1 D其后添加:2 m$ E$ w$ r7 ?1 U a5 d
virtual void OnRButtonUp(UINT nFlags, CPoint point);( ]% C6 v0 |7 R6 X* i& E+ w6 _ k7 a
8 C. n9 c& z& V# L3 M/ |8 M* y8 }, N* P1 i% k4 q8 U$ o
|
|