|
|
源文件中_Interface文件夹下WndField.cpp文件( }& z/ n1 _) u, ?$ |1 V* I0 u/ g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' V: `: E# |0 ?5 x
, L8 I7 V' ~) Dstruct sItem
" p9 s0 p* Y5 ]2 p- j! l{2 M( ]7 H% n/ _9 p+ l
DWORD dwId;2 f; X; n5 t' z4 J3 U
DWORD dwKind2;' N5 K$ I; [+ f/ {- X
DWORD dwItemId;$ v' u$ W, ~% G
BYTE nIndex;- L' m1 b, w: q, p, U4 T M
sItem(){
, G( ?; ?5 S0 j( @! Q- U w dwId = dwKind2 = dwItemId = nIndex = 0;, b. q& E( t# m! ^2 a' U
}# H* s+ m1 ]& o3 ?! ]
bool operator < (const sItem p2)+ r; O I5 d7 h5 ^) J
{7 f; { {4 Y* N! _6 W
if (dwKind2 == p2.dwKind2)
( U/ n$ f" w; W. H/ O* c% B) X/ F {; _! ?7 j9 N5 L2 d7 n1 x# I
return dwItemId < p2.dwItemId;- l7 b {4 o( e
}else{
# D4 j" n% R4 @3 o* w ~ return dwKind2 < p2.dwKind2;$ q+ {4 i* o, J% ~
}
% W( F* w* R$ n1 _! h9 ]4 ?}
6 W. z# a! I0 L};1 n1 S3 f$ P2 X4 J
class CInventorySort9 A! r. q+ V4 @) [
{
+ ?% w, E% Z4 ~, k4 lpublic:
2 @* ]7 K. D, _' \* O, k# SCInventorySort()
" |" ]/ c6 S! b1 n{" O1 j, M: [. S
m_dwPos = 0;% F% P* E7 }$ o* Q* G. G
}
, \( q& V0 l+ u, \4 W; J~CInventorySort(){}& `1 b( {. x w& e* N+ F
private:3 |3 v+ E2 B$ E( V( L: b7 M( ]# {
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: t$ d9 J7 }7 Y5 M
DWORD m_dwPos;: C* P+ @ t6 S! w5 H" R" d" Y
public:
" ]% r( Y1 N/ v% `6 [; ~& kvoid Add(BYTE nIndex)
& V5 _7 ^! ? C' s% w; _5 E{
! Z M& ~1 ^& h& W0 s) [# p8 X: }' m if (m_dwPos >= MAX_INVENTORY)
1 K. d% z1 q* |2 } {/ M5 w+ w; x( r; }$ b
return;
; L' _8 Y3 L N) y/ Z( J# ]5 o" @/ { }
( y+ F2 U& i% K) b* ?( x m_Item[m_dwPos].nIndex = nIndex;
7 W5 b7 d# {0 p% {; |- { m_Item[m_dwPos].dwId = m_dwPos;
! L( V# H1 c: R8 U8 G m_dwPos++;
! P6 e/ H( Q# o}
% R' j* [' X; _- TBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 ~; [- Y d, G0 O( _+ ~; n# a; @
{
: X( Q: {1 o& b- {2 @) c) M for (int i=0;i<MAX_INVENTORY;i++)' Z: O; _( C% a/ }2 l) E3 t
{
4 ?" l( @% G) r6 K8 B if (m_Item.dwId == dwId)
2 F8 g7 I5 a V4 g4 b0 e {
% q& X0 G/ m, X9 [/ P5 { return m_Item.nIndex; @. r- N! L8 j$ o: v9 ?3 W
}
' x' {7 H1 D9 U }
( D/ p1 Q2 C' G; _! e6 X2 {% u, t return 255;% w4 L' I4 r b% d# u; ]. D
}
2 S3 L0 K. f0 P7 tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
( J5 T) \/ p+ C- O- u) W{- a' n4 t$ I% u
BYTE nTmp = 0;
, ~5 Q, a( w, k+ S6 y5 @ bool bDest = false,bSrc = false;
. ]( p8 A V# [, e2 [2 \' G for (int i=0;i<MAX_INVENTORY;i++)% k% U) e6 B; h/ U
{% u4 |+ y% b5 m0 U# f4 t
if (dwSrcId == m_Item.dwId)# O1 Z1 J2 X+ e. Y
{. B9 P& L# ^: n+ W0 ?5 y" i7 l
//id相等 则 改变对应的dest和src3 K% ^7 ^7 o+ U. P7 C$ p
nTmp = m_Item.nIndex;
9 S% V" [) m* ~5 U! ~- i m_Item.nIndex = dest;
; r8 B: I: Z$ \7 @$ G( ~. @% J) d }
# l7 i9 K+ G6 ~+ s }: N6 P2 B7 l+ |% I8 I# n: m' ]
//临时数据保存完毕,交换开始
1 h8 O* X0 X9 i& T% ~- P for (int i=0;i<MAX_INVENTORY;i++)+ ~' a2 |* f- Y8 S! ^! e
{
3 @' l1 Z8 m- V4 ^/ y if (dest == m_Item.nIndex). l% h$ i6 z: T8 k! i5 `# P
{
: o3 p4 z o$ k //id相等 则 改变对应的dest和src( e) c+ h" g5 o% R- t) \) s# ^" f
m_Item.nIndex = nTmp;
" V( L h9 ^& ?7 L7 q0 N. a }
+ E$ x8 N/ {. }: N }
: e' y5 h2 P" V6 ^( B1 @ l}
* Z; q) O7 ]. x; x# M};
6 z2 C" O$ J* { u0 f-------------------------------------------------------------------------
+ R. r. L0 U) @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; F- o: }0 u1 l! d$ g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, u7 v% O( @' K2 E! K
紧靠其上添加:
/ j% R% W5 i* S: i! A8 Nif( pWndBase == &m_wndMenu )- b3 O" M( @, c% N
{! Y. f& M# p1 T, V& {1 o* B
switch( nID )- D. R' u9 L3 K1 [# q$ l1 A8 s
{
- ~! w1 ^; Y# J case 2:! t8 \: P# S$ G! j* B1 e
{9 r" w# u! | y- ?+ n7 X% g# i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" T0 K x. {, v8 ] if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% ?+ y1 t3 r N
{
- _7 s" q* Y$ a8 j' I break;
# ~! j: E3 _- A5 s' Q }
0 y& s( Q: U) e0 T for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). n4 w# f: c3 e
{
2 U$ g& W4 o4 c5 y n, `8 } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: G. ]. R/ j3 g1 t2 {' q& P if( !pItemElem )
2 ]# E" ^* K9 [" ?; L9 {. H continue;) A7 D$ S3 \) g# D1 e2 h
if(pItemElem->GetExtra() > 0)
$ {7 n) i( n6 q8 ~+ Y7 W continue;" ]" n4 w& z/ g4 @" Y; A H p
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, S0 \+ x/ T+ ]6 K& ]8 G; H* @ continue;
/ D6 o5 e0 Z# D& T! V: y* ` if( g_pPlayer->IsUsing( pItemElem ) )5 ?7 j* ]* `9 v& @
continue;3 C8 x8 }' y+ k* ~ x) [. B
if( pItemElem->IsUndestructable() == TRUE )8 L* [& P3 p6 l# A0 W) _3 j! J
{' t- t8 d# @6 V" h- V) P8 P% {
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( x4 M+ j5 F& }/ p
continue;
& I6 d) `" x1 ^2 M }
4 A, V" K' x4 D8 T8 b g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); \! `4 y/ P4 z X! C6 d
}
0 T2 P0 ~; P* l6 ^ break;+ `8 K5 u$ X/ O3 U" A
}) Y" c4 k% J: B! s
case 1:
! _2 ?+ }; o( Q: K ^! W" r {: _: l/ L# U& V1 _* p7 E# u5 K |
//整理背包9 n) G6 k7 G. k1 j- K3 X
//////////////////////////////////////////////////////////////////////////
4 E# G' L m- }' i; E1 l //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 s, L; p# N5 }0 u+ N+ ]9 q
//////////////////////////////////////////////////////////////////////////! l! Q* C0 M& l5 ]
//////////////////////////////////////////////////////////////////////////# o* o; Q& Z/ ]* j+ G2 h1 _ x/ m
CInventorySort* pInvSort = new CInventorySort;
z* O- \. F7 x! ] vector <sItem> vItem;6 O5 L5 e0 a; F# Q0 V
vItem.resize(MAX_INVENTORY);//初始化大小
3 P9 W' N/ B- K1 i //////////////////////////////////////////////////////////////////////////1 O/ Z$ T- K. I. G! i% {
//填充数据
# F: p; w4 _% Y/ W+ `( C- G& f for (int i=0;i<MAX_INVENTORY;i++). X- q; p9 r% F; O( n4 R4 l
{0 o J; p* i4 m. l+ e3 A6 [$ `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# w/ _6 P4 z3 }$ T s% z if (!pItemElem) r0 _9 Z% L x6 _( }- n4 u
{
_2 f b3 w8 Z2 p( E2 ?1 h vItem.dwKind2 = 0xffffffff;
( x L" x, D3 L3 v vItem.dwItemId = 0xffffffff;
T6 I+ f- F# V' H3 `$ E, L vItem.nIndex = i;7 _; s0 X, p( |) ]" d
}else {
1 Q0 B; u/ p6 f+ X5 Y9 ^+ I ItemProp* pProp = pItemElem->GetProp();
) i' I1 r5 Y2 j. o( R; d vItem.dwKind2 = pProp->dwItemKind2;! |$ m9 b4 Q w) c
vItem.dwItemId = pItemElem->m_dwItemId;
+ B }) L! w8 W. Z8 L1 U4 V" l vItem.nIndex = i;! J6 ^6 h6 A& a N" H
}# E0 s2 u( v: I7 S6 V. y( E
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ g6 ?5 L8 h+ ^, n, B0 @1 q* n7 H
}" s/ ^6 M0 O. ^% [3 n
//////////////////////////////////////////////////////////////////////////
4 b. V% t" i+ j" Z sort(vItem.begin(),vItem.end());//排序- w7 L6 b9 F0 W
//////////////////////////////////////////////////////////////////////////
( M) @4 B5 {9 a9 W* ?0 H //交换
% i1 g7 _: v( J' j O) Y for (size_t i=0;i<vItem.size();i++)
5 w9 h, V4 z3 T {& H' t- z) G6 A* V8 L. Q
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- `- z* P5 E# A pInvSort->Add(vItem.nIndex);: f, g4 C% ^+ N8 [
}
; ^3 y9 V* g: A1 R4 X BYTE nDestPos = 0;
" A+ A# m6 I8 {& B for (int i=0;i<MAX_INVENTORY;i++)( q. {4 K& T, h
{( j/ `" Y% w$ o! p* f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ L0 V$ ?! K0 J$ I* K
if (pItemElem)8 V3 Q% {- I2 G0 q, N! |
{2 |" Z+ Q( K1 R8 W! K
if (IsUsingItem(pItemElem))
9 W# i6 c1 |" J3 p {3 X: T& m* V) z/ O* r. ?
//这个位置无法放
- z5 M4 h7 P' y, \ nDestPos++;
( l2 |! S& J) M+ d1 ^ }4 E2 r- @' D$ @! _4 z
}
3 _! G* p) d* S% D3 R BYTE nSrc = pInvSort->GetItemSrc(i);8 B, B- R2 O! `: b# @4 G5 R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" R& f* n" R6 C' A) @' Z1 t
if (pItemElem)/ @7 h! m w% u/ F1 _( D1 ?
{
7 Q3 ]: \& b4 H5 h* R" X if (IsUsingItem(pItemElem))
7 |$ b4 ]' p3 b, v; U X9 u {
& x4 ~- G- v1 d- L: p9 A+ R: ~/ ` //这个道具无法移动,跳过+ } S$ v5 S6 o
continue;( i& F% j# j1 j: y) j% T
}& p7 o0 r0 N4 \: p& \0 N$ F
}else{$ A( u) {/ k2 G$ p
//空位置 不用动
7 v) u8 [4 b0 t continue;
& d9 W4 u! m2 G) a |0 P }
- d, t- k" S( h( a- j //////////////////////////////////////////////////////////////////////////
% ?* K" a$ G4 K //开始移动
0 {+ {# y6 j! t( [% W if (nSrc == nDestPos)6 M- N R1 P* U5 e3 D' d& h0 d
{3 z1 [0 E' A9 H2 ^' ]9 s2 k
//原地不动: s6 Q: g+ n6 _" X5 I- X% f3 P
nDestPos++;6 j9 O- [- U! C0 e* O5 @$ j
continue;
1 }' U: d# }: T- }! m) b$ g }
, O, @* A$ h4 |: c. u% A pInvSort->MoveItem(i,nDestPos);, c2 o w( W/ G1 ]1 S$ z( m
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. @3 v K( F6 `3 d
Sleep(5);! _- p( q1 k0 E" S$ d" n
//Error("移动 - %d->%d",nSrc,nDestPos);
( Q9 q- v% W; r4 O9 ` nDestPos++;
6 ]+ G, f0 k( M9 w }
" Z! Z. P/ m( c# Q+ G \: F //取第一个元素的信息0 U8 Q4 G# H+ K* `9 i8 V7 u
/*
" z2 g7 A4 C7 ^6 N if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: k2 j, A& I4 k: C( g% B {
5 w# U/ Y4 m2 M+ j$ Q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! ^9 ]) t2 g! b: G2 ?* {' S6 t, ~ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 K# a) \6 q& J& f+ j }
% G8 r6 K% b1 G( t- {7 ^ */) l# d* g" ?- X' T) H7 P
//////////////////////////////////////////////////////////////////////////
3 T$ [: q/ _+ g( U# w break;/ W; @1 ?0 s3 m& T
}7 d* O3 l2 r( g- l& P( B+ X: r0 F
}
+ I9 H" D) {, H \0 j}
; a2 P( _9 ]# }( v' Qm_wndMenu.SetVisible(FALSE);
, k2 R' e, O7 P, ~; n; N
. W# L2 _. J6 z) R( {--------------------------------------------------------------------------------------------------------
% C& X. K% a: Z. e$ a1 X搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) N. r* x% t* j
{0 f i0 ^+ F3 Z3 @+ k! X
BaseMouseCursor();
# A8 d" l$ n, N}
$ Y1 y9 K, Z$ x8 i$ ?+ I/ S9 x在其下添加:7 H: F0 [ }1 [1 B2 f
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), P% e: a/ B, j' N8 W% q8 b, r
{2 Q9 f: I" K, H! V' b7 i
m_wndMenu.DeleteAllMenu();+ @# _: p- e. j
m_wndMenu.CreateMenu(this);- e' P' B' Z- i2 r* H4 t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 V- z- l$ k9 ]" q8 r9 m
) W: q0 F. G6 D# i. x& P/ Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 `' c) X" i4 R, i; n) x
{
0 H9 z/ Q( I$ X& Z$ Y; p4 y/ }4 W //P以上级别才可以删除所有道具
, l3 J( n8 ]$ ~! g1 z0 W. v m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. W' }$ K+ X) x& [
}
. w, ?6 y Q& Y/ v( C6 F, L4 ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. P+ k( o" w) p! T# H5 N, d. p0 h' a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 d# w# i* [) f( {
m_wndMenu.SetFocus();/ e$ _ D$ e2 o& h+ h
}
9 R9 ?! y% b* a------------------------------------------------------------------------------------------------------------
& f& a7 |) ]. j/ L*************************5 \1 U1 c; z" k) T8 a- _5 ~& B! _3 F
WndField.h文件
! Z8 B2 @+ h! S- i$ n*************************
6 P7 x7 }4 Z4 n# `. p搜索:BOOL m_bReport;
x) u# v) [' I t- L0 N; {" a0 M其后添加:8 I) o8 P$ x/ T8 c. I$ d/ B3 b
CWndMenu m_wndMenu;
! @, X: h4 x0 ~: a1 j; B" V7 c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* @3 T- T1 z# y3 `- j. A- H其后添加:
8 e- |# ~5 Y9 L% Jvirtual void OnRButtonUp(UINT nFlags, CPoint point);1 |6 g8 W2 H) V; _# C" Y% L) D
/ {8 H# k. A7 K- O) I1 G% d
n% p4 m! _7 H) K9 P& u+ Z
|
|