|
|
源文件中_Interface文件夹下WndField.cpp文件9 q) H- Y- a2 [; s* L1 @
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 H- n: a/ t2 |- v5 h4 g
! G& F# e( f) l L+ i1 b
struct sItem- B; P# D$ z) u& p& R& X
{( a) T3 A& _9 j5 S+ r
DWORD dwId;5 u. l; q: B' W; i
DWORD dwKind2;
, d$ e) `& C' p+ f' iDWORD dwItemId;0 {, c8 v' X7 k* y E
BYTE nIndex;
, B# g! y4 y9 i0 ~8 I. IsItem(){
4 Q: T6 R) U- }. i% D7 X) G dwId = dwKind2 = dwItemId = nIndex = 0;% L# R' X* ?5 u1 Q2 t
}# p# d3 `: Y: A
bool operator < (const sItem p2)
% l- ]; c* D1 v8 L5 R3 }{
% C- |. J# z1 O3 o7 j# H/ L* U$ A if (dwKind2 == p2.dwKind2)/ H i/ Q; i. E. ^8 X
{
* H* I& U* U7 U2 Z5 ^- x return dwItemId < p2.dwItemId;8 M$ r" w" }- G) M' x H8 Y3 }
}else{* y( ]1 m) j+ Y: c
return dwKind2 < p2.dwKind2;, t, @ p, g" @0 X2 `8 ]0 w. @
}% ?+ m$ V0 L8 _" k6 `3 ~0 U/ R
}( o% A" L3 v* v6 K4 H
};$ c: q$ l1 v5 r" A! H1 ]6 R* }
class CInventorySort. w. T# Z: z* | P
{
4 d7 O; G( ]+ s7 ?/ ppublic:
6 a! \) T; e! H5 D6 sCInventorySort()
# p) Y" f$ D, i' ?9 R2 ?, S% d{
0 ~3 P+ e- r" p% m; p m_dwPos = 0;. Q8 c6 {/ b) O i; s9 K
}- t7 E- c0 t1 H$ ~
~CInventorySort(){}2 }% K2 |8 [3 |5 ~
private:
' g) H5 K% @( E6 E0 K% k" @, usItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# l; a& I, E `6 b
DWORD m_dwPos;
/ @. F" Y& a( W5 K0 P; m$ G1 H5 Npublic:
& F- e4 c3 @2 z, lvoid Add(BYTE nIndex)' _6 q7 U% |1 O4 ^' k; E
{& `% p% y/ s$ f7 t3 r
if (m_dwPos >= MAX_INVENTORY)
, ^3 Z5 X6 d+ `/ O/ Y) { {
% F5 l- p8 G) t, H! K0 F return;( F2 S Q0 M2 e+ O8 s! ]
}
; A6 L4 {/ K, p+ \6 r5 L3 X( l m_Item[m_dwPos].nIndex = nIndex;
/ f. U0 f: Y$ \# M" x; Q m_Item[m_dwPos].dwId = m_dwPos;
- O7 D! Z/ O- v! f4 E$ y m_dwPos++;
8 a8 O, H/ t1 u* i}
6 r* J1 P. R7 z9 N) W" o; _0 TBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 K2 h5 q& k$ k% H: b+ Z3 E: a
{
% e A! L1 Y: G" g1 j for (int i=0;i<MAX_INVENTORY;i++)
a! P% u" ]9 U0 d, u0 J. C {
8 D2 D% r4 P3 T3 k, t \7 { if (m_Item.dwId == dwId)
- } L( u7 Q* `% j* U {: a4 g1 I8 H5 z& j: B. N4 T
return m_Item.nIndex;
) F6 t+ ~" R; N: z5 L- C }
M6 ^7 [+ G* S* `2 _8 A" j3 r }4 h4 P4 @5 i$ \2 p' e$ d- ~, c
return 255;
6 P9 n/ f+ X' o% g}4 V* D1 e8 c; u% M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" x) p: m- _$ p- g" @ |$ x; n: w7 E
{
. @ C1 {6 b, m6 u' R0 G BYTE nTmp = 0;
/ W; y1 D4 g! D) ? bool bDest = false,bSrc = false;
* y, p) ]" ^) b: a# R for (int i=0;i<MAX_INVENTORY;i++)) V3 y, `8 X* b/ d" ~( g7 N: s) I
{
# H. s/ _# J) U8 O& V- f5 s, z if (dwSrcId == m_Item.dwId)
- V. R) `0 b+ X8 F k/ } {! r7 e( p; i% ^. S
//id相等 则 改变对应的dest和src
, }; ^4 T# M$ j( J3 _' j nTmp = m_Item.nIndex;: v* t6 y, [5 z9 S
m_Item.nIndex = dest;
) t0 A8 H6 q6 o+ c( W% Y) y3 g, q) O3 R }& O, A2 a1 i5 @
}+ `5 @) k" o& W8 }$ S
//临时数据保存完毕,交换开始
( V+ C, y. E( v3 U* ? for (int i=0;i<MAX_INVENTORY;i++)
/ V1 f+ n$ e: k2 T3 a* ^ {' b9 C/ p7 M: R' i1 d9 e& P
if (dest == m_Item.nIndex)" U; n* k, h2 @ \7 w; A( I
{4 \+ F. L8 r7 L% i* j6 `+ j
//id相等 则 改变对应的dest和src
* H' A& g- L3 s" I" J5 o m_Item.nIndex = nTmp;7 c5 N$ Y, F5 M! R" t0 l( b
}9 H& G; y7 F* ~
} U& ^% i! {0 a, u! ]! {
}
6 Y$ N/ g2 W, s};
4 o+ C5 P1 n7 x- E9 y-------------------------------------------------------------------------% s( a9 C$ Y4 F7 L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) g% u- n- x/ c2 G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 I9 H0 [- A1 `. T紧靠其上添加:0 D' ?9 D0 X$ u! {. ^$ v
if( pWndBase == &m_wndMenu )
7 M9 v8 n( s7 [, G/ Y/ I, s( C{
+ T# Z3 p o' |, T4 E switch( nID )
$ g$ h' ~2 c. y {* D/ l- q. Q( e: ]# C# v4 o4 K6 P
case 2:
8 X. U% {4 L* R8 z( [8 J$ ~$ Y {
7 s4 }3 V# ]5 g4 q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% o* o9 a* {) ?0 h
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ ~6 m% T& q+ ^& ]$ C5 {& f {: \5 c/ L8 S3 F) W3 d8 f6 C
break;
8 D8 s* d9 C$ O5 g8 K }2 B8 |1 g1 _! N- E
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 A7 l; }/ n! }/ W% ]3 l
{
# @: h5 @2 `: @6 o' `, J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 O- W/ |5 E/ }) L; }$ p if( !pItemElem )% R$ _ z% ]5 ?! {
continue;+ `# A! [. B. m/ w% R% A9 p
if(pItemElem->GetExtra() > 0)
& n8 |3 D' z* j% f" G7 v7 |1 h9 J continue;
' P8 P9 B$ b* d; d8 k1 k" V* H- z; q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) h4 O! |4 ?4 D8 ?, p9 [. M$ h
continue;1 D* R* A/ y1 K0 N1 W6 {( j" ~0 O/ R
if( g_pPlayer->IsUsing( pItemElem ) )) K* {% J& \2 e3 X
continue;
% g5 C+ ?9 D6 d, C% O if( pItemElem->IsUndestructable() == TRUE )
5 o8 r& a, S5 Y8 { t& V& ` {
+ k1 d( ^1 |5 ~9 ?8 c0 S; D8 ~ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. w; y7 j/ _5 v# {' f; i( \ continue;, X' [) v$ Z2 O) l6 ^$ C
}
3 E# P z% x* P4 V- q- P g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ k" Y( Y& [" I* T }
! o$ E6 h6 V. u break;. q( Y& L, \1 x2 [+ {
}
F7 [" J$ p9 }& M case 1:
! V- _4 V3 V0 r- G2 b {
! q" h$ f/ }# p+ r8 Z/ S //整理背包
# J6 m/ r" o5 b8 U* F: | //////////////////////////////////////////////////////////////////////////' X. L) K! y* m' J) r' Z& z6 A
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# ?7 k2 A, ~1 L; H. I //////////////////////////////////////////////////////////////////////////
. V. J4 p \8 M* N //////////////////////////////////////////////////////////////////////////
) r. V: W: s: n6 { CInventorySort* pInvSort = new CInventorySort;
- y, F3 b4 P" }- l) S vector <sItem> vItem;1 m9 c$ g" b* C* j7 c
vItem.resize(MAX_INVENTORY);//初始化大小: T4 L3 E! l7 ]1 _8 r: O+ B+ U
//////////////////////////////////////////////////////////////////////////
, l; P+ f) b2 O/ j* |) \; I }1 W5 c //填充数据 e% R) L r! F
for (int i=0;i<MAX_INVENTORY;i++)3 }/ x Y# g, t" y8 E
{8 S) i# _/ R# E. i# ` l4 ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" A' {# C1 J( \7 l+ x6 j if (!pItemElem)
: |% n1 ~, k+ u* W/ P0 ] {
+ e1 w6 \6 G7 h( G* q vItem.dwKind2 = 0xffffffff;
( W" G& g* k$ J* L: x2 n8 \% x vItem.dwItemId = 0xffffffff;' S- F5 @( e" {; D, v- a5 e
vItem.nIndex = i;
1 { g( k Q3 R# ] }else {
# f" @" S: o1 G; R ItemProp* pProp = pItemElem->GetProp();
1 {% j3 f3 X: r: P' y! R vItem.dwKind2 = pProp->dwItemKind2;% a* M& w1 a+ p8 _4 K& @3 |8 x
vItem.dwItemId = pItemElem->m_dwItemId;
1 }3 F8 [: q" _5 E7 t vItem.nIndex = i;
$ \ W0 x- m1 u1 N8 } }
, F! h" w. z" k; }/ i //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
s3 L6 @- }8 u, T C5 l8 ? a* k }
. w; x) u8 `5 _( m' B, r //////////////////////////////////////////////////////////////////////////) ~( k$ F0 W$ j( R. Q
sort(vItem.begin(),vItem.end());//排序; a. W9 u9 T* V2 b- D1 J! H0 l: }1 E
//////////////////////////////////////////////////////////////////////////
" o% r: L+ c- [3 E/ o# U% ? //交换
; ?7 S2 K2 q, t2 h$ q8 c for (size_t i=0;i<vItem.size();i++)% U; |- T$ `& c9 i7 u' z5 J! X
{
V5 {* M( ^) ~1 W, _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 y& Y; B" v: D. {0 | pInvSort->Add(vItem.nIndex);& B( V1 m7 Z3 P" g3 W; M
}
5 z! @7 n# x) {2 t3 g* t, y: k. T BYTE nDestPos = 0;/ {+ a) R7 j) H. y& r! A) L
for (int i=0;i<MAX_INVENTORY;i++)
) S+ L2 K$ l [2 z3 y' ?2 @ { ^$ y. R# Z5 L+ v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 _' l O' p0 i3 D if (pItemElem)8 Q$ }4 `+ v! u( s) h% I) [7 n
{
% E* H F+ F1 U' C4 _. Y if (IsUsingItem(pItemElem)), k1 M2 B( g' f/ k- L' `( W( u1 Z
{! X/ o K# O% Y. c# |$ R0 p
//这个位置无法放
# T7 s+ k" F$ f' _" B" c; B nDestPos++;
) k3 u/ m! f- n+ f( o- h7 p0 K& l }
2 k8 l& B1 \3 s; j7 {3 @ }; O- {) k \' s; T$ J. Y8 a
BYTE nSrc = pInvSort->GetItemSrc(i);
8 U6 x) Q. G/ D4 C' o: t pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc); _( M8 {) `8 {7 A( M, C+ n7 l
if (pItemElem)) R$ _" T ~6 y' M; N
{& s' _2 x. X2 E8 U j
if (IsUsingItem(pItemElem))3 `" H( c! `0 u8 |1 x
{
7 T8 t3 \* S; |1 F8 e A0 C. B2 M //这个道具无法移动,跳过5 u8 e8 [/ \2 s: r
continue;( @( v! c; S( U9 A
}
9 b3 H, s z- g$ t }else{ M- w% _ f, i1 }: O
//空位置 不用动+ L4 M& i3 d4 A" O4 C. x
continue;" U, o8 t4 Q# S8 }8 A9 y" L6 O
}' P$ {9 _& e& T( S6 M
//////////////////////////////////////////////////////////////////////////
3 x7 {. K% w) t! x6 ~ //开始移动" l% B, H! U o1 G
if (nSrc == nDestPos)4 g& x" N( X, N9 f& E. L7 }) p) t
{
2 q1 z- X3 L* P4 j8 u. P //原地不动
# Z" d) l, O& O2 N& Q$ R" W4 E# q6 { nDestPos++;7 F) u" `6 Y: l+ x4 g5 J
continue;/ M1 y. Z& ^1 O* p. }% _! J" T# }6 }
}
6 f* V2 H+ B) b/ y$ t9 o: _ pInvSort->MoveItem(i,nDestPos);, I1 `" j3 L( _2 l
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 e' i4 ]( x, x; Q, {$ u2 T Sleep(5);" [" R& \- m6 f; Z. z4 ~4 ?
//Error("移动 - %d->%d",nSrc,nDestPos);
& C' k/ z+ `) T/ C) _ nDestPos++;* m/ ?0 C# z% h- g$ ^/ w
}
5 g' u4 N8 o. H; @5 J //取第一个元素的信息
* p) B9 ?# Z1 }5 H& r# } /*
# t: ^, X9 P' c+ N if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 m4 H/ ?$ D7 j4 N" i, y- Z {
1 I9 j* H7 Z1 V: G Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 V/ U1 n0 y; s. M! `
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' `( I+ V, [' }: s
}! K i$ r$ J& {. ]% g. ~1 a- U+ ^
*/
2 i8 ~; Q! z5 Y. L2 ]- m //////////////////////////////////////////////////////////////////////////0 l* p2 T6 a% G+ J
break;
: L' }" a8 `* ~/ ~1 E. v5 P1 R }- M! D2 o. t( c9 p8 ^9 Y
}
8 p+ X( o5 N0 q% X" K- S& B3 Z}
% F/ [7 C$ c0 \5 \/ R( }8 J4 _7 um_wndMenu.SetVisible(FALSE);
# V1 S- { D' f3 m
- J! c, P* [( G2 [--------------------------------------------------------------------------------------------------------
3 m( l3 D$ W8 `5 J! _4 o9 Y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' \# q/ O: A, s S{1 m7 k( E9 J J; T
BaseMouseCursor();
- |8 S6 O3 p4 ^% X/ r}
9 R' X- M+ D9 q' ~; V在其下添加:6 x! | F; H8 d; H: J8 c" W9 T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# f4 p- @2 b7 w5 e3 y' d1 @- T8 ^; c
{
8 L% x/ }& x( h0 ~9 D; v8 \m_wndMenu.DeleteAllMenu(); _, ]0 n- i# u( Y7 u: v
m_wndMenu.CreateMenu(this);
6 F1 ~; @/ [6 m( I/ dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) p9 Y& J$ O' t4 _+ y! X$ W; ?1 u m( Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 F& k; D; i" j+ o# r' S{$ A: o8 ^9 C" u+ \
//P以上级别才可以删除所有道具
" n+ i+ @: V9 l& V t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 C& n) r |) H) ?1 B C0 F4 J- R4 T}; \8 v7 {. ~! w' X: y' q! @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% n4 ?2 O. P) Z# l( `
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 ]8 b, p, G* ]1 j1 |) H
m_wndMenu.SetFocus();6 B! J5 \# U2 o4 d9 L* g# Q6 Z
}
/ w- Y) A& J# _; t- r* V------------------------------------------------------------------------------------------------------------4 B4 v8 J* I* R
*************************
0 H) a' h7 V' o' Q2 nWndField.h文件
- P/ |& P0 W! }3 I" [*************************
[4 Q$ V& n2 E G& k/ d搜索:BOOL m_bReport;) U" u" w7 W- }- q
其后添加:2 e8 N8 g; j$ \7 h1 t
CWndMenu m_wndMenu;
7 D% A' | E) l8 j搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 `3 C; {( _. I) T4 H" r其后添加:
0 L/ P- G1 i6 s5 D% Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
1 P8 |- v2 A; k& r2 D
* T, T' `2 D U4 s2 {) s9 C7 m- ~3 E. u3 m' X s. S) O
|
|