|
|
源文件中_Interface文件夹下WndField.cpp文件. O, G4 K; T) s" a; P- T- g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 q7 y+ c( W3 H0 B1 r
1 F9 D8 U+ u$ O* m+ rstruct sItem
1 Y& j$ l2 E+ h+ }9 d{
( Q( J# \) H+ \* H3 H& z8 x4 ODWORD dwId;
2 ^4 r$ [/ n: A$ b& C/ x& ~DWORD dwKind2;) _4 F4 B t' B! u2 c# w
DWORD dwItemId;
4 _ v1 C3 G/ y; m+ z R* kBYTE nIndex;5 }6 R2 Y/ W6 w$ n* ]3 M2 h
sItem(){
5 g" t& b' l( M1 @ dwId = dwKind2 = dwItemId = nIndex = 0;
5 k, ?, q) c( Q% {3 t2 t}% H, ~/ S9 O, `
bool operator < (const sItem p2)
+ |3 X% N% j' W3 ]. u{* Z6 w6 b. |7 P7 p
if (dwKind2 == p2.dwKind2)
8 H; f+ C* O* j, e% {* ^ {
# B1 Y; F- u2 _) c9 V return dwItemId < p2.dwItemId;4 I: w- G! O5 J/ P
}else{
/ p0 Z2 C4 k1 t6 f return dwKind2 < p2.dwKind2;
: ]5 M1 G) a- } }7 \! x3 Z1 N2 v _# q' Q
}
6 v! g' R; J! D& @/ _5 h( o};
1 E4 v% \& Y& _2 Z0 ^, h7 hclass CInventorySort. w L8 f3 z7 a
{/ I$ j2 S2 c1 d% ^. }
public:
" c" {8 u" p# }2 N& ~# U8 G d6 h) JCInventorySort()
* b% k0 X- l3 q{
6 y4 V# d2 |: a0 c1 \ m_dwPos = 0;
0 A; u9 k* j8 D}* x9 `0 B1 O9 i- |
~CInventorySort(){}/ E- ?/ f1 V' l
private:
! A9 F7 D, Q2 o6 J! G; W! ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 [% i- v3 g! ~7 z; j( EDWORD m_dwPos;
* U9 b4 I- d# E. \5 L. u% b+ spublic:
S; T; }0 r" S# \void Add(BYTE nIndex)
+ b$ r, f- L- c{ a& i/ r* w/ L0 \- L) E3 t* M
if (m_dwPos >= MAX_INVENTORY)
' V. I) R- ~: d+ S0 f9 _ {$ J" F0 ^2 V, L/ W _8 J# ^
return;" P; i3 ?7 @. x0 g
}- j. @: m- q8 [3 }& T
m_Item[m_dwPos].nIndex = nIndex;( D5 T5 a3 L, H7 B2 S5 V9 g) C
m_Item[m_dwPos].dwId = m_dwPos;# u3 U7 J8 o) f' G& R
m_dwPos++;
! P h2 y7 |* C A}. y! r2 r1 p) i8 U( ~' O
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
[2 I; n8 }8 Y, ^' q' m% W7 O, n8 D{
# x- c4 K! m+ d5 v for (int i=0;i<MAX_INVENTORY;i++)& Q8 l7 h' J+ q, u) Z* i( {/ ^
{2 L u7 I# K; M- V' I
if (m_Item.dwId == dwId)
5 H' E$ S/ L* [; {) s7 \( T" A {( F9 B, n$ z1 X+ ~6 b3 A
return m_Item.nIndex;
6 |( A# e% `1 u0 J& ]9 ~ }+ t) F! ?2 n0 J
}
, u4 J5 j/ j# E( L return 255;0 V0 V/ e0 N- \8 @+ ~0 P
}4 ^. R6 ^; Q9 n+ g
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 k6 E o* h* I c5 x( M
{
, \) U. f. y3 x% o" c2 j3 M% [ BYTE nTmp = 0;
. Q0 _, l) u# Y# Q* D bool bDest = false,bSrc = false;! a$ L% J9 u; v
for (int i=0;i<MAX_INVENTORY;i++)
, k% v+ H1 O: z) o/ x$ N3 h3 \6 ` {
6 B# ]; g5 l ]' k# A3 r if (dwSrcId == m_Item.dwId)- ?3 |: T* h& A
{6 \) m- R( B& V3 l1 {5 N
//id相等 则 改变对应的dest和src
9 p |6 y. l, {9 q6 b4 n' `: N nTmp = m_Item.nIndex;* g0 v3 h! s- P0 Z. w- [
m_Item.nIndex = dest;+ _9 c+ g+ u z& T, e' D
}1 Y4 S8 {! Y4 l5 |
}& g; v- f6 y* n2 L! x; i# F
//临时数据保存完毕,交换开始# H7 z- I$ t2 G. d: a3 h
for (int i=0;i<MAX_INVENTORY;i++): Y5 s' }7 r0 v* v c% ]/ G# V8 s
{, c7 R" \0 F0 r, d' y0 G4 p
if (dest == m_Item.nIndex)
5 N. ^. J9 U9 `$ G {- T* c! ?; |! |) ]
//id相等 则 改变对应的dest和src
6 u M# J% L2 l5 ~ m_Item.nIndex = nTmp;
I+ c) V$ Z5 A8 V } e$ H( t4 n% m3 T; ~9 a
}
c3 L, f* {: Z2 S H}
. Y* t3 M0 N2 S$ M" x5 D};
$ y$ Y- k) D$ r; K# b-------------------------------------------------------------------------
4 D8 {7 b* [. m5 p0 n6 T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ v3 _/ Z" t3 @# O# m搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! h3 ^, C' \7 |2 [9 J/ z
紧靠其上添加:6 x0 |* v- |. `, u9 W' J
if( pWndBase == &m_wndMenu )
7 s; K c; F+ L{" n% u' w5 x( ~8 B+ M0 e0 o# ~; I, A
switch( nID )' d. T% l0 b; t9 o) l
{' E: [; P, h; N
case 2:9 s, G. R" n+ J
{( c/ g* {1 J) H! k. K9 W; Y; D
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( O* d ?6 U! \ t0 q3 i if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) \5 w, U: m; L {
' v( ], M3 q" R2 C( ? break;
8 x8 w) U( c7 t- f N }' ?, M3 y" l* o3 [4 x! x
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 r# h+ _- Y; U" f
{
) Y! B ~/ z3 M, c3 v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( b& E0 g4 M1 B+ d if( !pItemElem )
: i$ S& M" n A continue;
4 M* V! c& o% ]0 z7 ?) A if(pItemElem->GetExtra() > 0)0 e0 J0 q$ B6 t, P* z
continue;' e; V D) t" S+ M# q3 K
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " x- T: R1 ?( D1 {8 i& \
continue;' m1 L, X; W8 P8 l. u
if( g_pPlayer->IsUsing( pItemElem ) ) y# g" |; w& ?
continue;5 G1 {% P9 H$ S3 L$ a+ w4 @
if( pItemElem->IsUndestructable() == TRUE )! v' }$ t2 u6 X3 E8 R8 g" j
{
' v2 L. r( @ u9 C g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 }$ ]# G" ]( r
continue;: `6 r$ {: ]& b6 R" |! c8 G
}& |" x0 j0 e. f' I( N
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 I+ e* H8 O; `2 q8 p5 e4 F% v" ? }3 c; |& ?/ P% n1 o* }. u
break;
0 P# _4 O& i6 T' S8 R* t# H }" J9 `: N3 l5 p
case 1:
# J' U/ V5 J/ R {
) V1 Z! N$ g2 e8 f' A M //整理背包
: G9 t" l7 Z$ ?: f- _* _ //////////////////////////////////////////////////////////////////////////
. E* W- F, B U5 M; O //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 X. K5 D R& E: B$ M! {" m6 R
//////////////////////////////////////////////////////////////////////////& ]7 }+ I& g: |
//////////////////////////////////////////////////////////////////////////
6 R9 G0 ~$ I0 l d! ?! k; F; [8 N CInventorySort* pInvSort = new CInventorySort;# b* L3 j: r$ Q- h& s7 l. ^
vector <sItem> vItem;
" q9 h" M1 i# S, P& i& U/ ]- u4 @3 y vItem.resize(MAX_INVENTORY);//初始化大小
T- _2 l' z+ I9 [9 ?3 y P //////////////////////////////////////////////////////////////////////////
1 w: m z7 s1 O& ?6 ` //填充数据. o) A; U+ W+ I1 q
for (int i=0;i<MAX_INVENTORY;i++)" n+ @, R3 \, E- B% o' x
{
. D/ ]% ]* z% ^! k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 y+ @1 Y: E& w' h7 \8 I4 M( ?
if (!pItemElem): K2 q) y& i8 {) d5 N2 H T9 r
{$ o: G% m0 M8 S( A0 r
vItem.dwKind2 = 0xffffffff;, K3 i* X$ o) N3 M. @: _
vItem.dwItemId = 0xffffffff;
7 g' Z6 F" A- m* z# I6 O2 u vItem.nIndex = i;
5 Y! R9 }+ W/ l! K4 c! Q! t }else {
0 ~/ p' K" p6 ^1 W' R0 l _ ItemProp* pProp = pItemElem->GetProp();9 [: e& g* C9 D# L
vItem.dwKind2 = pProp->dwItemKind2;: q7 D! i2 F* a5 I# T U" H
vItem.dwItemId = pItemElem->m_dwItemId;& T$ \8 O" m: [6 I
vItem.nIndex = i;/ T9 V% D1 R5 k3 o
}; g ^7 m+ A F/ H5 r9 a; N
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 ?! l' y* P T+ T3 e7 Y
}
9 b( ]6 D0 t8 j( f4 Y //////////////////////////////////////////////////////////////////////////
* l) {4 |; F& o3 |8 J sort(vItem.begin(),vItem.end());//排序# E4 Q& E) v, g) ?
//////////////////////////////////////////////////////////////////////////
6 y: s3 F- `0 ~' p @9 B //交换7 L* Y L# F* y# Z0 u9 k( L
for (size_t i=0;i<vItem.size();i++)
: i @! m5 q, \% \* ^ {
* @# Y0 S0 x+ T' R! d- H //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ c" ^9 D$ \# S4 q pInvSort->Add(vItem.nIndex);: G; v J( L8 T( A' O+ k! |8 K
}* E K4 e+ p1 n& @# Z, k( O
BYTE nDestPos = 0;
; l4 x$ a( f6 G9 H% y for (int i=0;i<MAX_INVENTORY;i++)5 f. m. b3 ]+ Y- c
{) d! k1 Z; C$ F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ B2 Z- v$ a8 Z7 K; F
if (pItemElem)3 G3 k' @+ V' I+ _
{5 J& e9 v/ Y. O; V! {% r7 d# l) p
if (IsUsingItem(pItemElem))
0 F0 t6 H* f1 m& v0 j {
: u4 Z( n, B1 [# W$ U* S //这个位置无法放
6 T' c! {0 } E nDestPos++;
# `& b. I3 M' `1 @ }3 w6 E8 J8 a: p/ f9 S; Y; ~
}. e% ~% k/ m# e2 h7 e) n
BYTE nSrc = pInvSort->GetItemSrc(i);
' x+ K! l" k+ K- i$ G pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 D$ \5 \/ b5 n! i# i* }- j8 G if (pItemElem)
7 ~& l7 f. y: Z# `& [# K {
) P" T) D( g0 K5 J- P if (IsUsingItem(pItemElem))
8 k( _5 p: [: R( L- s% h& K {
8 g- V# o6 F. i! [9 v //这个道具无法移动,跳过6 P6 i- N [5 q( `0 E
continue;
8 \( ]* l6 J8 h) Q }
& R$ i+ t8 L+ @ }else{
+ m5 l6 y* A+ |! F //空位置 不用动
0 R H/ C. ^# K; u2 H7 d continue;
8 z# y- N' Z4 \. Y' @6 P9 V7 o }
# |( D8 ^ e: j( e" X T6 S) U //////////////////////////////////////////////////////////////////////////
5 F/ I! J, J- D" b, i+ h8 B9 S //开始移动/ z( O `" f4 T) J0 Q, d7 A
if (nSrc == nDestPos)
. A ?2 h8 ^' k* `3 P. b6 e* q, y% | {
. C: J: Q+ z2 D. `. K, L" ] //原地不动0 p* D& }8 T- M1 C, p7 o. D
nDestPos++;
# `4 Q& ]' G$ t" y& F# m0 u M continue;
; X8 t6 [; L" [0 ^. F }. D1 u$ e! e* Q5 a8 W
pInvSort->MoveItem(i,nDestPos);: N: o: R" D" u$ s2 h1 I4 O( P! J
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 J; ?: B# P. l4 _3 a Sleep(5);
$ V8 q9 P7 w4 ?" y //Error("移动 - %d->%d",nSrc,nDestPos);( s3 L9 U+ R5 @& D. u, H) b
nDestPos++;
0 @: N, n" c. T5 Y9 @ }
/ D( P% w: c' g) ~ J- a- s4 Y //取第一个元素的信息
1 e) n' w! R1 g: F( Z, z; s2 i; r /*( [' T: `: y: ^" D% j. y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% x2 L) [4 _3 I9 T2 f( G7 {
{" w( n. ^. M9 I" |7 J: Y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 Y# s. h2 @' \$ o
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; b4 G9 D* K( G/ T9 U }+ t x4 M6 {7 L/ h2 a
*/) ? h! X2 y" t$ C: Z( X5 J
//////////////////////////////////////////////////////////////////////////; W5 r- x0 `1 X
break;. s& G- Q' ]/ D1 g4 W" z
}
5 f$ i1 l7 l8 Y1 | }
! {7 j- W% R5 H; N# W}) S" c# l$ r! p* o
m_wndMenu.SetVisible(FALSE);
* |3 b) k9 j* u! a- J) _/ |2 A
1 @$ U' m) w5 I/ M$ N2 {--------------------------------------------------------------------------------------------------------2 @; O! r( |) }6 G7 p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' ^- ~0 R f/ D5 v3 I8 ]+ x" D+ t
{
; q- A& \. }7 d/ w& e" w5 P" {; X" LBaseMouseCursor();
# Y1 p9 a* l: l' B* }! T3 A# G}1 x0 L3 p& v3 b1 S
在其下添加:
) \/ }4 f9 j. z8 Evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: v! y- b) [( F+ m{4 g' J; h# B0 e# U6 i. h
m_wndMenu.DeleteAllMenu();
% s5 l0 P$ O8 F/ i' i- }7 ?m_wndMenu.CreateMenu(this);- w+ [% d, O9 l5 a2 f* N
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: F0 R9 Z( h# O& `6 i: Q
3 a. h) w; r' Y4 H$ |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 j0 J( }$ h j
{
$ q% m1 N' ` \; Q9 k //P以上级别才可以删除所有道具
/ D# d" S8 n @& X8 d" [: z: r m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) G4 P0 T" ~5 E}' z4 \) b- J6 ~$ X2 N( Q
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- v$ [$ q$ Q; e; r
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 _5 E# T" \* E- \* g7 K8 E$ t N
m_wndMenu.SetFocus();
* U/ g( ^* _1 ]) J/ Z}4 g1 ^; e# F' ]5 y( H/ t) j
------------------------------------------------------------------------------------------------------------# V/ u+ x6 i- e7 L/ ]% t+ F( V6 b
*************************; p6 t/ V5 G; h" z( q5 v& P$ d
WndField.h文件
$ w; }9 B6 r$ k8 Y. F- I*************************
* {0 }3 b; q9 y搜索:BOOL m_bReport;
3 M t7 g! a8 l C; M其后添加:5 ~5 D' j0 ~- D: Z' J2 Y' p5 b: _, ?
CWndMenu m_wndMenu;
* @% a% R5 S" f6 h2 U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 y0 T8 ^0 T& M. C7 e
其后添加:
+ ~& z4 r; x) `virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 g7 l \ R" T) o
* o9 ~0 v# F& T# P' L* @% q9 U" y0 [2 J, K) w
|
|