|
|
源文件中_Interface文件夹下WndField.cpp文件; }% |2 n7 w2 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% {# v( R0 @ D3 P9 s" J) H" J% Q2 S! F& a; M) a- z
struct sItem! N" J) T1 F+ r; d; m, |
{
# g9 O+ d2 B2 ~DWORD dwId;; U( d) z2 I" D" H' |
DWORD dwKind2;* T6 i, M d8 ~) b: N4 R
DWORD dwItemId;# J+ j u: x7 R6 E
BYTE nIndex;
/ D; A, s1 D: WsItem(){
" F" W- J% Z9 g8 a9 K dwId = dwKind2 = dwItemId = nIndex = 0;' X! n6 z; V8 N+ z6 ~% \- i
}- `& S/ N! n0 o* m( ^( H
bool operator < (const sItem p2)
' c3 w6 f+ _$ B/ V' f. K+ d- g/ Q; [{0 c( A, s d. }' }) t8 I
if (dwKind2 == p2.dwKind2)
9 b: X+ ?2 X: K0 l1 ~# H {; t" m1 A' c" ~
return dwItemId < p2.dwItemId;; v# ]: y6 r3 V R2 k+ A0 M
}else{( u1 A/ t$ ]; ?& c
return dwKind2 < p2.dwKind2;
; ` X6 D3 i9 _, t6 F$ x C ^4 F }
& B; K9 X4 X* D. I, M8 M8 ~6 j}
# q% H v. y' [1 I! n5 c};
( ? ^8 s+ N( F! L/ O! Oclass CInventorySort! w5 G @! ? H" s
{
5 Y% P- ]' z7 n/ e# [7 Wpublic:; a) _" T! h9 N
CInventorySort(); K: e4 s3 Z. s+ G, f
{
7 m* i, L5 W: _- P0 S0 S# p( ? m_dwPos = 0;
# `. z; N; g, G! \1 ^}" [; Z) `& A: I; G; o
~CInventorySort(){}" Q& q7 D8 A( j7 ~4 C: L! e1 j' X
private:
: g9 [* H- U9 O3 c; ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, Z- d" ?+ J0 m0 F$ y3 E* L* O5 eDWORD m_dwPos;
. {/ h- y- o. }- i2 H; u$ Epublic:7 ]: B; W e- \* Z) c- {7 n
void Add(BYTE nIndex)# J! X0 [9 ]2 q6 z
{' @$ |/ o) a* |* m9 J* C) ~% K3 h
if (m_dwPos >= MAX_INVENTORY)
0 u# C# k6 ?& y3 ` t {
5 g3 m+ T: L) _2 A9 _3 Z return;
# |2 I# D, E& f/ F+ ^6 E }
" V) j3 f+ [9 s2 i m_Item[m_dwPos].nIndex = nIndex;0 r: Z( }& I" T
m_Item[m_dwPos].dwId = m_dwPos;; a( l7 R- O: P
m_dwPos++;
5 G- I) b( _ J; _* Q t& s}( C: \% ]3 x) ^, e& u9 |7 T9 l J
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, u% x( p6 S* T: B$ b{( m$ ]+ ^' C3 O# \
for (int i=0;i<MAX_INVENTORY;i++)
T% p" I( S5 m3 k, {+ o {0 e" j. K+ M' }) A/ }) g
if (m_Item.dwId == dwId)
' f5 P i5 P7 I, k! [5 \5 a {
6 o# T5 Y) b0 U/ s6 E. v; f6 b+ | return m_Item.nIndex;
+ l0 v+ K( @( X w" E }
6 ]" F, U7 F& U! B& h }
1 [& s S7 _4 _2 y% f return 255;6 a) t' t7 M& u1 ^+ i. c( P
}
7 ^& S4 d# Y1 t" Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( m* Y" s. ^/ M; {
{' k3 r' V! d& M, _
BYTE nTmp = 0;
5 y- q1 O- o, I bool bDest = false,bSrc = false;
( `( j# @) L$ j5 u for (int i=0;i<MAX_INVENTORY;i++)
3 U; O- F5 t& p( p3 _% f { s+ t! Z/ g$ }% S4 T! r& y+ C# `
if (dwSrcId == m_Item.dwId)
: R5 Y9 W. G- \+ Z, R7 M/ p {
* U9 o+ V! a; ] //id相等 则 改变对应的dest和src' E6 d& {6 s# B: F
nTmp = m_Item.nIndex;
. d* }. N, p5 B1 ^7 ` m_Item.nIndex = dest;
! Y) v$ b+ S0 K" ]" p }
1 I$ k" Q. [$ ^5 O: M# n' O6 @! } }
# v* b+ n/ n! V9 L5 ?- S0 D //临时数据保存完毕,交换开始& U3 W, F. m7 X8 o9 y7 ?6 z
for (int i=0;i<MAX_INVENTORY;i++)* |1 U `$ d0 _- F
{+ [) L( z2 C) b% h8 M$ R
if (dest == m_Item.nIndex)
; u$ A `2 K/ v) I& G* @ {& m# A, x' v3 ^5 W; B! X' E
//id相等 则 改变对应的dest和src* R& Q# ]$ q7 | j' W
m_Item.nIndex = nTmp;
8 l% R9 _0 {' J. e }8 s' l: I) z; g; m& R4 A8 \, f
}
& Y# M# E) h! D1 K; t+ d}; T7 C7 V; H/ ?) e4 [+ m8 k9 v
};
% L. q3 e7 R2 B8 a1 f! |' l. m-------------------------------------------------------------------------
0 n& r& g- o9 k: L依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 g7 u6 D# V- Q4 n& f( {/ }搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& g$ K( W8 ^% Z8 ^* F, h
紧靠其上添加:
( z( R7 f/ P# V( I& fif( pWndBase == &m_wndMenu )0 K" b/ ?# H* ~6 e6 W
{
. M4 Q+ ]0 t3 U5 V6 F. f6 S# Q switch( nID )
0 i9 F. d, R& ], B. D4 p9 r {
- w; A5 K$ b2 z$ j9 @6 \8 C5 l8 {$ n. ] case 2:; a$ G! q+ ~" L _$ @& r
{
' T, E) F! \ E! y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 P" N: P; B: h! h4 N
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 _9 b# L& y' l6 \. F; @
{
5 I+ n6 f; u$ E break;
9 n# [5 i& i4 V }5 W2 \6 k& c% V4 S2 Z9 r0 x
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& v8 |8 t- |1 a& G$ S {: S4 E, y+ C3 u0 r' ?8 o0 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- J' r' Q) B, Y$ q: `, { if( !pItemElem )
0 R$ X- p0 e3 z: l r continue;+ q4 X# o* _. n6 [8 ]9 k
if(pItemElem->GetExtra() > 0)& d) B6 v8 A4 a
continue;' h( D" [8 B8 d
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ x) \: `: G! G+ J% s) z0 E8 n* r continue;
) H% V* B3 ]1 U2 G1 Y' h' s4 X0 c if( g_pPlayer->IsUsing( pItemElem ) )1 p3 n* ]+ y; J0 n
continue;
7 O( L4 Y4 |- B) B0 ]- Y if( pItemElem->IsUndestructable() == TRUE )& X, e# i0 g3 S* D' `
{0 N1 g4 ~3 f" D+ v8 Z1 E" [
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: s1 |( Y3 q4 v1 z9 k continue;. \7 a6 _$ m! k' _$ O
}" Y/ B2 L2 r# m1 K1 ~/ d+ V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! A5 p1 t3 b& j+ S& v/ s! N% E& u }8 B, I- ~* u' Z8 ]1 S4 o9 L. K
break;& E2 J! d) K; a/ ^+ @4 ]2 @/ N) x
}4 C: e* l" w6 e) s# o/ k$ m, ?
case 1:4 L! z, m$ b: v
{
+ C6 t) H! B# ?/ w6 r- N+ O //整理背包. U0 V9 B* Q* @ E* U4 N0 x
//////////////////////////////////////////////////////////////////////////: U# ?( B7 K- T, B$ E
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 R1 ?- I6 @: M$ c, w# v- h* C# f3 w2 G2 e //////////////////////////////////////////////////////////////////////////
7 F0 x0 W5 V, \8 a3 ]3 n1 L //////////////////////////////////////////////////////////////////////////
; x* _0 Q6 J7 W* ^2 F" a. ]7 J CInventorySort* pInvSort = new CInventorySort;
/ L; W& i' s- U( ], | vector <sItem> vItem;
0 p, W* l1 |5 b5 ~ vItem.resize(MAX_INVENTORY);//初始化大小
& F2 {% K$ |6 M- C$ k! c1 a5 k- B$ ^+ D //////////////////////////////////////////////////////////////////////////
9 z2 t0 A2 C% w. J //填充数据: n& |( u+ V+ L" ^! V
for (int i=0;i<MAX_INVENTORY;i++)
' F- [7 P3 p0 u2 G( ]. t$ e; X/ K {) p/ T% C# Q5 U$ U" n* Y, F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. p3 e! i/ R! C$ @ if (!pItemElem)% @+ l' [, `' @. t9 a- @
{. [ P8 A$ V; y
vItem.dwKind2 = 0xffffffff;
. a- F# A! B) X- k vItem.dwItemId = 0xffffffff;3 o2 w9 Z* O( [, N; N2 t
vItem.nIndex = i;
3 o5 S" X/ y! | }else {" c# r @- J/ h5 l/ J3 a. d
ItemProp* pProp = pItemElem->GetProp();
2 T7 t' a* `5 x I& F* N8 _ vItem.dwKind2 = pProp->dwItemKind2;
: j) |1 K$ I' }" C vItem.dwItemId = pItemElem->m_dwItemId;; u' n0 S$ B( ] b# p
vItem.nIndex = i;
' ^, x! l) V/ |, z: j }
0 |7 Q, q; B" l$ J //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 r/ S- m; W& u" ^
}5 [0 ?; ~7 w& d
//////////////////////////////////////////////////////////////////////////
4 `9 {. ?" [; ]# d! r; m. ^5 c6 H sort(vItem.begin(),vItem.end());//排序& I: |# F3 r% R4 J, |
//////////////////////////////////////////////////////////////////////////' U x; C4 Z' C# @3 N5 b; ~
//交换5 p: J) \8 H8 e% C1 a& @& ]0 E! o
for (size_t i=0;i<vItem.size();i++)
1 q. Z- n/ l, n/ `" x2 a0 n) h {
1 y: L& G+ s) X0 h* ` //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ [8 h- p" s: E pInvSort->Add(vItem.nIndex);
) r1 k X: v" [8 Y4 X9 t$ @ }
' p3 l4 P& a2 T S2 M" q BYTE nDestPos = 0;* q: X8 x( U9 [1 f( s7 \
for (int i=0;i<MAX_INVENTORY;i++), y. |1 J; W! u' L; t3 q
{$ {9 v) f6 A0 p3 K0 \, C8 Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% M. s: k! _( q3 f3 o2 T% ?- x
if (pItemElem) `7 }( R; t" p0 O4 C: J, t" ]7 R
{
0 ], L& D& F/ _) n, A1 Q7 \$ C Z if (IsUsingItem(pItemElem))) I. l$ {0 `" l0 w2 E- `! O
{5 P3 z* l5 @- J0 t
//这个位置无法放4 `5 y! M9 a# U! V/ X* R5 x0 p
nDestPos++;
' h7 ^% B9 _; k+ d. k }
, W7 I n$ h, y3 d }8 }, u; a9 @. P! \# w3 v0 d1 M
BYTE nSrc = pInvSort->GetItemSrc(i);( I- ]1 \4 V4 `) ]! N6 g
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 A. ?5 Y8 [; F' n7 Y
if (pItemElem)
4 @+ |3 J" ^& E {
2 C: e7 q- t% m" l/ N' v3 j if (IsUsingItem(pItemElem))! m8 R$ a( a) c
{
3 c" A0 V) S& [3 t+ C( ^9 T+ m5 W //这个道具无法移动,跳过
: u V. g P5 w continue;2 p, r) z" p9 l7 v6 R
}
; S) T A7 T9 O% I, Y }else{( }1 q9 _8 |8 t- @/ A* h
//空位置 不用动
8 x d) T* E9 \0 w8 ?' [3 s continue; O. `9 o/ V5 D2 X- F: g
}0 ~# u/ a/ l4 a1 P* i# `* N
//////////////////////////////////////////////////////////////////////////
2 N+ a7 J8 q( w) F, ]. H* F //开始移动
8 l) T3 i7 Y# v7 U if (nSrc == nDestPos)
H' }6 ~3 U s5 Y& P7 m( p {
, N. u) ]9 u$ R& a //原地不动
: u' v9 r; o1 R1 _( H4 o" g+ C nDestPos++;
: x3 z/ i. n6 \: s- \+ X2 C1 L continue;
' {: W& U6 g+ ~9 Y8 Z8 q }
' o i5 ~7 M1 F9 \+ o pInvSort->MoveItem(i,nDestPos);! Z! L7 m" [# X# p* n
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 {) b! d6 _" A; T' D Sleep(5);
$ J% C2 H8 v* A2 F //Error("移动 - %d->%d",nSrc,nDestPos);
- o0 k. M: E) r4 U4 c# k nDestPos++;4 ^' h! ~* \( `4 I/ b4 ]
}0 g% W; _( F% {8 c; [+ g
//取第一个元素的信息
6 F1 E0 m( ~& D k' O1 X8 y7 X /** w( _1 z" q* Q' u
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) T, A. ]- V" D% |7 @ {# S3 q# `% I- h4 v( W8 ?
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' o q% A2 v9 h' u7 b0 A; ` g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* z$ B3 V' ? O0 j% Y }- A9 P4 k) s% ^* ]& y
*/0 i: L+ V6 _3 [
//////////////////////////////////////////////////////////////////////////
# ?7 y4 e, w+ x$ j$ g6 g/ ? break;
1 Z8 r" }7 `( X3 g }
, m1 z, t; o# g u8 _* o } $ i$ x+ q& ]% n* }: Z
}. O- m0 I* U: C* ?/ z- B* m+ z v
m_wndMenu.SetVisible(FALSE);+ p# [' Z: g: ? h
9 M& H+ q* _' h: a
--------------------------------------------------------------------------------------------------------
2 l! f) N" N% E0 V& x4 B& r5 v搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 e4 `0 a9 K* S7 p# o
{( i7 m* d3 y& o7 w7 q9 Y3 E
BaseMouseCursor();
/ T2 o) @: a9 B& A, q$ F3 H t. S}
, J9 N. Z; k# [在其下添加:
" \+ k t! M/ o4 G6 qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) N8 }" x, Y/ `6 K5 ]- I+ m+ t
{
) A1 \( Z4 c vm_wndMenu.DeleteAllMenu();
" ^- R$ G7 K5 d7 W' s& Um_wndMenu.CreateMenu(this);% f l, x% G1 \' {
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: J% i3 v" s" ~8 B! o4 Q8 j0 s( S/ _- j8 P1 Z/ `
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 o! t1 r% K& D C{* V2 F- j9 J3 T) |
//P以上级别才可以删除所有道具$ W) g: Q& k; u
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 \+ `( @9 P" T: ~: n# b}0 a6 F, T Z& \9 ]
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! Y, y) Q" b% F1 `( p& J
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* j! E+ g8 L& y/ J
m_wndMenu.SetFocus();6 i4 r, }2 S5 g/ l
}
4 N/ L! K( m7 }1 R9 P$ R------------------------------------------------------------------------------------------------------------
c: @( d1 e6 X*************************7 M5 f5 A5 w2 U }
WndField.h文件
8 F$ Q6 f# ~+ o$ F8 Z*************************) A+ u1 e* S! o' M6 v8 R1 g; w& T: T
搜索:BOOL m_bReport;
: n2 Q3 A) \8 X- l) k其后添加:
) x4 ^8 q. E. B+ s$ A- fCWndMenu m_wndMenu;
, H9 P. i' n Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 X* D3 Q0 n9 b$ ~* ~" ?$ r
其后添加:
1 m9 [/ }& R& M5 w( vvirtual void OnRButtonUp(UINT nFlags, CPoint point);7 v* x4 G0 c$ c7 Y
' f& Z# P3 \8 C/ `) [# \
% {! y; s+ ^4 T# T |
|