|
|
源文件中_Interface文件夹下WndField.cpp文件! {5 I" W/ ]' h& X* e
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: q' J7 C' i) v* ?7 T+ j' K+ n+ R h0 U
struct sItem% V8 n8 _" C9 K e: t# Y
{9 q" @7 l$ d2 B
DWORD dwId;
8 i( C" _1 z3 u6 r3 |* YDWORD dwKind2;
2 k' }# O2 S/ k* V" HDWORD dwItemId;
4 V& o, ]$ U; M! f$ |1 u0 ]BYTE nIndex;
, G' O" J8 {# B+ ?8 \% c/ lsItem(){
6 ]; i2 o$ k; `/ w: z( X dwId = dwKind2 = dwItemId = nIndex = 0;8 U+ \- C6 E( z; X+ X* x: b
}' `. K. F% B1 G$ V& n: K
bool operator < (const sItem p2)
% S* R0 s5 O. D{
; j3 }" g/ S( H if (dwKind2 == p2.dwKind2), Y. S7 R0 s; X; p$ j
{; ^8 \0 I) I+ _; ~* v5 _
return dwItemId < p2.dwItemId;
" X8 f* _- u E4 ]1 { }else{
1 x* N6 H' V r# ?" e6 g' U return dwKind2 < p2.dwKind2;& @; ]8 |+ k" g! b/ }
}) Z+ v. r6 O! I2 G1 f0 ~
}
. D5 y5 o1 \7 Y& R};0 o3 P4 K$ P% b( F5 W/ P
class CInventorySort
# u `# u& a+ a) ?& ~4 O' w8 u{! M( R/ _% V5 b1 R8 r1 i. j
public:5 e+ [; x+ L* Q* q% `
CInventorySort()
, I+ _ y9 O T j7 ^{4 L( W+ a9 U- _6 {8 c2 \, {, l
m_dwPos = 0;
9 Y2 W, y1 U Q3 ~9 j}/ e% U: W4 ~, f
~CInventorySort(){}! d) j/ e# m5 c) }: D8 H1 G
private:
" T7 D2 f* ^6 Y4 m) K; X& O9 L7 s7 OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" N l; J! A: X( G, r7 s' CDWORD m_dwPos;( `4 V/ V, F, K5 c& @+ @0 A
public:
2 Y3 ~" n* ]3 n$ uvoid Add(BYTE nIndex)
`6 @3 c7 |- g- C9 A{
; C. @6 o; s7 U$ B* ^# ? if (m_dwPos >= MAX_INVENTORY)7 D% s$ |+ Z2 U/ y: w7 S2 |6 G8 ~
{
8 |: f& E* h; P4 e, D% ` return;
$ z, P; c, B H4 S0 W; F- [! y3 G }
P H2 E3 [9 I$ ` m_Item[m_dwPos].nIndex = nIndex;+ G0 u8 m" M6 u% u( Y; _
m_Item[m_dwPos].dwId = m_dwPos;8 B0 z0 h+ k# c' _1 e$ F
m_dwPos++;& O) a+ Y9 o8 }
}3 C7 N# P8 w+ C, `, i/ t
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 V3 r) Z9 \; W+ S/ J1 v
{
/ S1 e. X: e$ g% E) [2 t( `' Y for (int i=0;i<MAX_INVENTORY;i++)
( r6 J5 K$ M! n' P6 h' r {2 _) e4 ?/ P) W; @. S: m
if (m_Item.dwId == dwId)
, q8 z0 _$ `- B# q. C! i {, T7 v- G- c$ n1 J
return m_Item.nIndex; v5 b' u5 k8 ^! m. m
}
+ e( k* _/ ^% M( r; ]$ D7 I2 E$ x, R }% a: D+ O u2 K: K& S- c
return 255;& z7 j) V$ P, \/ Z/ l
}; W1 N( R' z! i- R3 F, M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 ^" t s% ]- d, f{3 O: |' v( Z9 R; w# y. c
BYTE nTmp = 0;
. U w: l9 C) E' n3 s+ S w* ?8 J4 P bool bDest = false,bSrc = false;
! m1 o+ e7 `0 U$ N. u( f for (int i=0;i<MAX_INVENTORY;i++)+ j& T' G5 P! _9 s
{3 m; S1 x. e! n7 I0 V: O, D4 d
if (dwSrcId == m_Item.dwId)
2 T" b/ H |3 }+ f8 F2 s, w |9 f {, l x# B- A; ]/ a
//id相等 则 改变对应的dest和src+ ^+ a/ V/ p a( |, ~
nTmp = m_Item.nIndex;
% ^' z1 h I6 A' _ m_Item.nIndex = dest;3 R2 L5 L# I! w; `2 w
}
6 ^) ~3 T& D( C% B/ J& ^ }# m ?$ e! B. U0 J( ~6 b
//临时数据保存完毕,交换开始6 \& j( v1 I. _: N3 M6 D0 b
for (int i=0;i<MAX_INVENTORY;i++)
5 H6 Y' ^) y/ o. e4 j {
9 R6 z+ u' b$ {* a+ a% Z; d if (dest == m_Item.nIndex)5 o t K7 @+ T' r( R Y$ Q
{
9 [/ t' U$ w+ ?2 w" ^- N+ w //id相等 则 改变对应的dest和src# n, R+ v9 V' s+ E6 O, z
m_Item.nIndex = nTmp;& S+ `. m$ r% r | O0 } K
}! O* M( S* b+ v$ f
}, y. N% [$ w0 x7 D n0 K( Q* r. c
}- Z# m( v) v) Q9 {
};! b1 A V) C. z7 Z9 m( n& R# Q
-------------------------------------------------------------------------
0 C5 @7 P7 H& j8 W) s3 k' t依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): V4 n5 w' P* W& F: g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 b# C1 z- g& b. _+ n5 X8 h
紧靠其上添加:
/ |; G4 p$ t: l% x1 q* Hif( pWndBase == &m_wndMenu )
" ?+ h* ^0 z7 ^) Y{
/ {' } b) z9 e, p" h$ t switch( nID )" w5 h$ V: U& P7 G$ Q6 |4 v
{5 a( i* ^% j3 D
case 2:) @8 B' n+ I7 f4 W
{5 g7 N$ ]9 X' |8 @4 @3 j
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* W p. M! j1 W$ i7 ~* q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) n$ {8 `2 S5 c/ l) {7 d
{& z$ U" Z" d2 U
break;& q% h" D" J( M' q
}
% w: N8 U2 r* n/ x& R7 b" {; ] for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); t' Q: d# [4 ?8 S# ~& Y) f
{
8 p/ r" w( f/ Z* b) E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, i# L3 d4 j. _" N$ L! @1 u( W3 Y0 k if( !pItemElem )
- \' g. ^' A& y6 L! L8 } continue;; A0 Y7 H; U% H: F
if(pItemElem->GetExtra() > 0)6 t8 s: x$ Z3 h- i
continue;
) D4 d: k9 g6 m& { if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 n, l- k4 b; X! i- U5 z( K! e
continue;& S: Q1 G* Q* b% d; g( r
if( g_pPlayer->IsUsing( pItemElem ) ); @5 x+ @+ _1 R2 ^
continue;# y# ]" h. p) h5 g, D1 N, o
if( pItemElem->IsUndestructable() == TRUE )- V3 t& [0 ^5 D
{ s0 k1 s$ o, Z$ C3 w
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. x9 h0 B3 ~5 ^! b% d$ t0 Z continue;2 u( N, v+ ?/ e$ X& z* R8 x
}! n" [7 T- J" e8 q* w
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) s6 m4 E. W3 D/ `1 t. m# G9 r }
* q' d# ~2 c* f2 ~# m1 G break;' q9 H l. ?5 C. |/ U* w* q
}/ e/ f- C a: f7 Y- t7 t" _
case 1:
C+ h3 c; _+ B( G- [/ v. U {* _* s- L; {; N! ?# g
//整理背包( _; p a6 l+ z- Q$ R6 J* ?$ r; R
//////////////////////////////////////////////////////////////////////////! c; c5 q. L! G2 L p; [
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 t/ U% S' F) s9 ^: s //////////////////////////////////////////////////////////////////////////, C2 |& {8 Z. {4 ?- d5 E& S
//////////////////////////////////////////////////////////////////////////
3 s( s* z+ x1 K+ R" S( j" I CInventorySort* pInvSort = new CInventorySort;. V2 N5 n6 h8 J4 q1 t
vector <sItem> vItem;
" P2 X" Z6 O' T# B0 d: Z& Y# K vItem.resize(MAX_INVENTORY);//初始化大小1 }2 e5 |( k) Z, n# R$ _* @2 S
//////////////////////////////////////////////////////////////////////////
9 y" b: a: {: a8 Q: Q* O2 x# m3 c //填充数据# I5 e$ m! P/ q: d2 O- Q
for (int i=0;i<MAX_INVENTORY;i++)
9 I' g6 X' J3 K {
0 {9 m, c1 f4 G4 g5 l! R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 S, r# T% _# L$ }/ N# Z' k4 A) _# o
if (!pItemElem)
$ F) R7 d8 P; ?; T* b {
& Y A5 p" c3 C vItem.dwKind2 = 0xffffffff;
1 ]- H' a0 ?+ J7 B0 P n/ k vItem.dwItemId = 0xffffffff;
0 I# C6 U8 ^$ ]& P( ^ vItem.nIndex = i;
1 y( |. m, M" j& l5 V+ L }else {2 y9 K' ~. G" J2 h
ItemProp* pProp = pItemElem->GetProp();
. @5 g1 S) f$ J vItem.dwKind2 = pProp->dwItemKind2;+ Q; j) V' P4 s
vItem.dwItemId = pItemElem->m_dwItemId;
! n3 T' [, ~- N$ l+ K vItem.nIndex = i;
: E! |: l7 V' `2 S0 x) F }% b S; W& K+ }- h$ y J+ [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 P% l9 W' C5 V7 ` }
( y. y6 v p+ v6 A% ]8 H //////////////////////////////////////////////////////////////////////////) X4 P# V' S m* p! Q
sort(vItem.begin(),vItem.end());//排序; f& @5 p0 `7 b
//////////////////////////////////////////////////////////////////////////$ K. D0 V; o7 R1 a$ a! P
//交换5 j% ~% i# P- t9 I+ _* T
for (size_t i=0;i<vItem.size();i++)
; M# X/ g' x4 x/ R$ p8 V. ` {
: o1 G1 I$ P+ M% P6 R1 x //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 O; u% a1 r. |. F1 a% r9 _5 x7 E pInvSort->Add(vItem.nIndex);
" N6 }1 |9 |! ^% b6 V }
% W4 t, j/ q# Q9 i" q BYTE nDestPos = 0;
6 f2 E7 \+ e* r2 s5 C for (int i=0;i<MAX_INVENTORY;i++)) g4 a' P; |9 u) q- k9 I- k3 F' n* x1 U
{' ]3 z9 k+ k2 [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 O/ j7 O- N& W0 N( a if (pItemElem)
7 N' f( t1 s/ p; n% Q {
2 y. u) c( m; h. W% X. g if (IsUsingItem(pItemElem))$ a1 E- p; |) w/ D' ~! |
{) E1 f" N8 _' m
//这个位置无法放
# e) O$ ~1 w& T6 _/ |" i nDestPos++;% y( ~" }2 B- h' B' K' o$ F
}
6 M% X3 F* @& m* J! F) l' s( }) A0 z }' e9 y" ?7 s3 ~& u/ J# ~! h
BYTE nSrc = pInvSort->GetItemSrc(i);
; d% q: @& P( |* }2 s4 U pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 E' P/ K3 h. r* ^ if (pItemElem)3 o6 {4 W* R6 m
{! [7 c% F$ }- ~" g0 K1 n
if (IsUsingItem(pItemElem))
- D, N9 j6 u9 J3 R5 S9 X {
2 b2 [: e- h& h( D //这个道具无法移动,跳过. d! _4 f$ B9 i k
continue;6 X. j3 I7 T* i$ V+ @
}1 M3 Q/ i" p9 K: ^1 D; g: K& R
}else{$ z+ J+ b/ s7 l
//空位置 不用动
1 i2 y- O4 y2 Q; C$ v; t continue; @, H8 X' o' Q2 a9 ]+ y W/ ]
}
& [" U2 d1 Z' ?7 n //////////////////////////////////////////////////////////////////////////
' M3 W5 B! |$ o) p/ t# W //开始移动
) X; o! N& f4 B2 Q W( G if (nSrc == nDestPos)* b# E: Z- `, ~( [
{2 T1 m: J' ]0 S' V1 o+ T" w
//原地不动; i; Y% V$ f4 \/ ^7 {
nDestPos++;
. O: K$ N! i6 a$ Z continue;
4 G: ?0 `6 Q9 q6 V1 c2 J: g }
' l, Y: W% C' D8 S pInvSort->MoveItem(i,nDestPos);
8 k+ _/ J# ~7 h" l) \2 `$ j4 P2 Z g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, ?/ Q- C/ K1 o$ f: T$ ^( A4 t: e Sleep(5);( ~" X# R7 n( a2 h# k& y3 x0 w
//Error("移动 - %d->%d",nSrc,nDestPos);
1 K! {; F. A- q5 X1 Y6 U% i4 F nDestPos++;
/ J; o6 I7 r# M# x" w) f8 ]9 i9 W. S }
; a; x: m' I& q$ z# P. a //取第一个元素的信息& n* p T# @, {1 A" Z# u* T6 v
/*; B) J7 j4 r9 b/ {$ I
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 t" n. L1 }: M
{
+ b1 U$ }1 V/ F8 N$ \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( ~6 j/ L' R, i8 a3 D# m5 U g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 ^7 b) o; z! f' i5 B
}
7 Z* M% Z4 ~- a& \ */+ L" Z0 {% ?: G
//////////////////////////////////////////////////////////////////////////4 E: E3 X H* p) u0 h
break;: E; k7 r+ ^3 O' U1 X) ^2 g
}
' ~: w! w+ ?3 ]) { }
& j; w) [- H2 K2 l r9 Y}
. g0 t' z( R; _& C+ G! Xm_wndMenu.SetVisible(FALSE);0 |( c/ ~, }2 [7 p' ~" @% A0 q
6 z& {% ? N; Y( Q" r
--------------------------------------------------------------------------------------------------------9 K# I& P0 ^7 l% a$ L& ?, F1 b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' }" n, G) T' V# @5 G& I+ l8 k! L0 q. ^
{
+ |1 c; b$ q4 o" B1 ?- UBaseMouseCursor();
2 @6 w# A% l! k6 c8 T4 H}! N$ _) n6 s7 [- R! |" c! V6 R
在其下添加:2 i; @, F: o) H- L' ]
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' u4 ~ m3 j$ `' n# o m' l9 B! l, I
{
5 i. d9 p( A2 @" Lm_wndMenu.DeleteAllMenu();
- {# Z2 U! ^1 R; V9 fm_wndMenu.CreateMenu(this);
1 g& v, [0 o7 d& k4 gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% h) ]$ Z# q3 W
% S, }3 p" H& V1 A, B5 d! u: rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 N5 \$ L9 j, o6 `' V7 p
{# v" E! l; E; H. `
//P以上级别才可以删除所有道具
0 f- P }' b8 L: x m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ f$ t- p' P0 t5 N4 B( A1 j) B" _
}
% S) A" H2 r- b8 c" zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 L& e5 ?% \% F( ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, q! I; i1 i. ~* \* B% r
m_wndMenu.SetFocus();
( m' |9 p- W) I. }* P}
5 u+ \- d1 a4 h( O E u( b: y------------------------------------------------------------------------------------------------------------, f( U0 M; E4 s- N ^
*************************
* Q* \ D9 O; v; U, o2 B+ _WndField.h文件
s: {- U9 B; x# ^, Q t*************************
! `+ `! J4 s8 s6 K3 c" k搜索:BOOL m_bReport;4 C. l: b* x. J$ Z$ S( `/ i/ S/ e/ r
其后添加:
+ j5 H" z$ S1 u9 P( q" J I. \CWndMenu m_wndMenu;4 D, E8 j5 d- D& U6 l. y9 l
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' G$ F* H" v% C
其后添加:" X/ D# h/ g7 o/ `7 C. t: O
virtual void OnRButtonUp(UINT nFlags, CPoint point);* |: e( N7 Y$ i; ] P1 r l
* D9 G4 ?. J3 k$ W) d7 j8 Y0 o
8 z3 {* `5 N- \ |
|