|
|
源文件中_Interface文件夹下WndField.cpp文件
- j3 c" M7 T, Z# D搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. p: t7 G4 s* g7 e$ q* G) y9 b
W g+ S X9 R6 |/ W& cstruct sItem
9 _6 V0 u& Q6 G& W2 {{) v2 ]( V( J' I9 @% U7 v! }; M
DWORD dwId;) s# f" Z% d5 j: g0 b
DWORD dwKind2;, C0 w6 `- E" w0 x8 i5 y: p
DWORD dwItemId;4 T J& t2 y6 j$ A" g
BYTE nIndex;4 C' ^( I' e9 J3 [
sItem(){9 D* w ^% ?9 E% x' W- e' l. r
dwId = dwKind2 = dwItemId = nIndex = 0;: H* \" t+ b1 i# h4 ~2 h
}! H) _( i: @5 ~ S
bool operator < (const sItem p2)" V& e4 B4 a- i6 ]$ e
{& J2 t. |8 N3 T. m
if (dwKind2 == p2.dwKind2)$ g+ u% j* h) S( X1 L
{
& Y. q6 q' c8 D7 |5 M0 y return dwItemId < p2.dwItemId;
0 |" ~# _ x7 D& t) N" U }else{
* N, J: D x5 E3 f( J) f$ {. j& y" S return dwKind2 < p2.dwKind2;
5 }6 W: o) D( x( W; `) L5 A: h$ r }5 F" X4 G3 E) O3 Z7 X' B
}* K* E2 Y. \8 U7 \! A& U
};
- i+ B: r6 k9 p. A8 Q1 |5 y1 A7 Eclass CInventorySort
( k8 `- o+ C3 J4 R, y& ^{/ f) Z0 {7 `' j9 J6 q
public:
! F s( }. j' u. [) {CInventorySort()
2 U2 h' D5 K/ }5 \{4 H: i/ w3 n- t
m_dwPos = 0;0 C2 s" M# q7 w+ f1 P" O
}
$ m/ @& ^7 ]2 T6 o$ w) Y0 x~CInventorySort(){}
+ x( R. I3 q$ J3 ?private:! H9 C# X$ C6 |) z( r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 q$ s4 s8 Y! D; H$ s
DWORD m_dwPos;
7 a; T$ l) Y1 t" e, x" m1 B; B/ @public:
; [ P, E4 y# }/ C: n5 [3 ~8 zvoid Add(BYTE nIndex)
6 g9 a4 E* d6 X/ ^3 B{' x7 J0 v6 f9 l+ _* ^. z2 E8 y" M
if (m_dwPos >= MAX_INVENTORY)
* K- p( P( x3 u! x {& F) d6 ]/ L5 Y( H4 y
return;
" f- y" j- ]& V8 H# L5 u3 q; A }
% S+ E0 g Q3 N+ [2 e- q m_Item[m_dwPos].nIndex = nIndex;
# o: |2 h8 q# @2 e- }# q0 V m_Item[m_dwPos].dwId = m_dwPos;
1 D' s, o3 o& d7 U5 l" ` m_dwPos++;) ~ P7 W8 j9 p$ ^. M
}
( M# I7 |9 D1 d& Q+ GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
Q3 m6 C, d* j; `3 f3 T# y{2 m- }5 S! G/ ^4 E i: a1 A
for (int i=0;i<MAX_INVENTORY;i++)2 I5 O6 f; g5 \2 U9 k0 E
{
( o. }8 A9 z1 `1 V% l- h if (m_Item.dwId == dwId)% q5 M+ X+ W9 u, c; s6 t! g: x
{
" C0 `* D' T% a" F7 y return m_Item.nIndex;
0 a# r& f6 l, @5 p& D) j }
' x/ c/ v6 v' N) F6 ~6 _. N" t9 ^ }
% t$ f$ z' X' B; \* G return 255;6 y$ S7 L9 T+ ^3 V2 J& H( `
}. A: e. A! W% m$ v. w/ X4 I h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' ]3 H) Y" R n& u( I
{. v# q7 [ W8 o0 P3 X( b" U
BYTE nTmp = 0;, U* |( J# L* [
bool bDest = false,bSrc = false;
% ~: `! I7 _( h+ y for (int i=0;i<MAX_INVENTORY;i++)$ @2 {1 i" @, r/ L
{
- l3 _7 ?: z6 j: o( [ if (dwSrcId == m_Item.dwId)0 M/ ~3 j& ~6 V% ~ J
{
+ R" t2 A4 k$ R* | p //id相等 则 改变对应的dest和src
7 H3 @1 l, o/ E; m+ b$ T$ A. O nTmp = m_Item.nIndex;
' V$ k8 c& w; q& D* N$ k m_Item.nIndex = dest;
0 V7 i! C" T) b: V* g8 }# K }0 z7 H/ p& L6 q3 y+ p" `$ m, I- f
}' Q. E: a6 B; M5 P8 Q" n6 `2 l
//临时数据保存完毕,交换开始. f# f0 d( T! E7 h3 _
for (int i=0;i<MAX_INVENTORY;i++)
( k& R( s. X* o& z {
" f/ F. Y; E6 ^1 |5 |$ r, z if (dest == m_Item.nIndex)
2 I* R$ g6 r$ M, q: w) |! E {) @7 y' ~7 N: P ~/ {' {; d
//id相等 则 改变对应的dest和src
: l- u# i2 t9 ~# t" ?2 s m_Item.nIndex = nTmp;5 O! v& G! Y# k- ?) K$ F
}9 `# f% M4 P1 P
}
! S. p+ D; ]+ Q5 C5 Y* {}
7 N C4 U0 x- }+ W+ M}; U& Z) m; [" n; |* m% U
-------------------------------------------------------------------------
: I! ~: b* R5 @0 c+ y3 l5 F6 ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( k: C5 L$ T6 r9 }1 l. j S0 Z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 Z- ~' Y# F( b! N: Z
紧靠其上添加:" F- Q: c( Y% e, ]5 v
if( pWndBase == &m_wndMenu )
( \+ L5 ^1 ]+ A) b. O7 k: S{
: p* B3 r7 _. Q/ Y1 s5 g! A switch( nID )
7 k: w+ |6 S. n; Z {$ F/ D8 ]. O6 L0 k
case 2:
; _, p: k8 i0 _; l {
9 q0 q1 T( ^# c' J* [0 @ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ R6 [& `+ |: c/ ~1 p! O8 ?: \; g if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 p. c6 O' g8 j' q* a1 H {" ^5 w4 R, z: b4 [) u, G
break;
5 A+ t+ R9 V% z/ V# _, ~; C }
- `! Z( U5 E+ i# o; z2 f& I7 t for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ |2 k. J5 w. m. s4 v1 a {/ w, G3 u4 a7 r, D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ A4 j4 z: q( T4 G! |2 X+ F! p
if( !pItemElem )
]* L4 M% Z4 d continue;
# g8 l9 E) A$ z# m; ]/ A2 g if(pItemElem->GetExtra() > 0)
8 g$ w) V( U/ Z& c& m7 Z' L4 @9 P1 r continue;
6 z/ k: n' ~$ d. a4 j, N2 O6 [ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 Q! r+ r/ C4 N, ? continue;
) w2 o: g1 Y# Y& k if( g_pPlayer->IsUsing( pItemElem ) )
2 N" G2 s4 X0 R* R" K continue;
; U1 B0 t/ W5 }& P, i if( pItemElem->IsUndestructable() == TRUE )
! s* L- R, `1 n- B) n; d! E: Z9 N {
8 Y4 B, \9 f8 B( @, q6 o, r g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 P' ^7 V4 i. A% x8 i1 E. [ continue;8 [6 {* M7 B% J* j+ _ f6 s- T
}
" @! J7 \ B. ~# k5 U4 ^6 W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 q, w% b1 l& O1 T }; m& u0 D5 h7 p- {/ U3 T; Y2 `3 D
break;8 }" q$ `2 P/ E0 e1 j& P
}
, A8 d! }8 ]: x7 M, {7 B. n case 1:
0 ]" V+ N, ^8 J$ d) q { U3 A7 f9 p/ T6 G: T, v% P' e
//整理背包
: @ W; [/ O+ I' g //////////////////////////////////////////////////////////////////////////3 w' I0 l3 v/ ^( ?( f8 Z& ?+ o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# d( R3 y/ j* f //////////////////////////////////////////////////////////////////////////, B7 J5 k+ H5 y
//////////////////////////////////////////////////////////////////////////! O) t1 c9 _1 J$ b2 ^) b6 O
CInventorySort* pInvSort = new CInventorySort;
5 L: F% y$ @% d- Y5 |+ V vector <sItem> vItem;
/ o( H7 o: [* |$ i4 d+ ]2 i% h1 C vItem.resize(MAX_INVENTORY);//初始化大小
% A) q; V- _# F0 [ //////////////////////////////////////////////////////////////////////////
8 A! u8 y4 |5 f: G) m( C; K4 S //填充数据
- |4 @* c; C) _6 I for (int i=0;i<MAX_INVENTORY;i++)& o8 P( }' P3 G+ V+ a! F
{
( r, a, @+ n7 n) U4 s' d% W: W5 ^% A1 F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- r' f/ I7 q5 C4 X4 W) v if (!pItemElem)
1 E- A8 @- S( R' T* X( A {* u9 `! ?! D5 e+ G& N# Z) S
vItem.dwKind2 = 0xffffffff;
- [. e' T h1 e. v3 J vItem.dwItemId = 0xffffffff;
3 T1 p/ ~5 s- j" n/ g& U vItem.nIndex = i;3 u5 i/ O( p7 E* k% F9 w
}else {
2 l: O$ N6 Z. ^ ItemProp* pProp = pItemElem->GetProp();! a$ ]- [0 C# a0 N5 `! q) ^# ]
vItem.dwKind2 = pProp->dwItemKind2;2 G2 p1 b/ e/ e4 A' a2 g9 r9 N
vItem.dwItemId = pItemElem->m_dwItemId;4 F, M, K) A: B! t- M* |
vItem.nIndex = i;8 B& B. M5 {) O! ~7 d
}
N" b7 D$ P% I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ O4 K8 c& {* x6 d1 }
}
( w! P* O a; }1 {3 @ //////////////////////////////////////////////////////////////////////////) h8 t% P" A' G: G# x) f
sort(vItem.begin(),vItem.end());//排序
) I3 Z4 g/ Y+ r //////////////////////////////////////////////////////////////////////////" ~& K5 C: m: v- S
//交换
3 T9 b" D- d7 d2 P6 s6 Y for (size_t i=0;i<vItem.size();i++)
* @8 `) C: c% g* a {3 q# r( U/ A$ e# b" F0 t* @; F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- T" O1 s, }* ]: K4 [0 t pInvSort->Add(vItem.nIndex);
! M4 d# \4 ?$ H0 B7 L% N }
9 F7 w; C3 K: _ BYTE nDestPos = 0;( S" ^: P: W# n! E R! g
for (int i=0;i<MAX_INVENTORY;i++)
, W3 t# Z' E, }% j$ b) R {4 @/ z, p* O4 e4 E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 Y2 H/ ~, x7 N) E if (pItemElem)
& n6 x% m; c, x* J {4 C4 T6 n% L9 k0 G* U4 D o
if (IsUsingItem(pItemElem))8 C/ C. a E/ e* e8 r& h) T
{5 [# G, |! G8 @0 f- m, D7 d" z' `( k2 e
//这个位置无法放* n9 E0 B! ^" J- ~
nDestPos++;
8 N3 {3 G# t$ m v }5 @1 Q# Z8 j' n; \' X7 G
}
7 _( F; J) o2 C! B0 ] BYTE nSrc = pInvSort->GetItemSrc(i);1 b6 ?8 C4 `0 S
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 e$ l) @6 _% w5 L: y% o: T if (pItemElem)0 [$ f K/ i0 i U* |
{2 U. n* w$ N+ \0 v: c" G
if (IsUsingItem(pItemElem))# {8 W8 p+ P" d& D
{
, ^, |" T0 ]5 c8 c/ K //这个道具无法移动,跳过
( w1 D }7 C; m _ continue;3 ^+ K$ S" ^, x9 {/ E* f/ d
}
6 @5 ?$ Y1 F. k6 [" P, v! F }else{* H# |& k$ v' \% _. ~: p+ k. Z
//空位置 不用动: n1 m) n# { h$ B5 v6 u
continue;
5 B3 I7 F. L) P5 ^; Z }
8 ^8 F2 M/ T! g //////////////////////////////////////////////////////////////////////////% x) b3 Y8 U, n0 {/ M
//开始移动& e2 B* m" F F$ X
if (nSrc == nDestPos)8 M1 ^: ~9 e b! S- E
{
+ ]" g* R! R& `" i6 x1 r4 V //原地不动
1 [0 H/ L4 `0 d. E nDestPos++;
4 U2 x8 U$ v$ U8 @3 O5 U continue;
# b: g" U% j1 P. c! u" ? }* [' A( |- |# L+ z! U1 D1 m
pInvSort->MoveItem(i,nDestPos);
% \7 Y0 |5 \$ i {5 I) g, \ g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ X8 I, U) t* M% T9 G
Sleep(5);
% W3 P, O& g0 M$ m //Error("移动 - %d->%d",nSrc,nDestPos);
. c& l2 P; f2 ~ nDestPos++; ~8 i* k( n( g( \/ J! H* B
}
, F9 o3 ~$ V$ h8 w //取第一个元素的信息
, \- U/ s {5 D7 ^: m! j /*1 Y' B( c: S* `% h% o K
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
5 n, k6 I! ~% @( Z {( {& F; T' O) w5 C2 [
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ B/ J% D+ z0 J; U0 M
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! n; k& u6 N* E2 L9 l
}
. O. B) w0 h( q+ |, A! J8 R0 c0 n1 J */
4 u U* F) _ e7 ]; J: x* p //////////////////////////////////////////////////////////////////////////
& s, p8 I: _3 U' W/ B0 K2 }; r" R break;% ?# |" n% o! ~8 ]
}3 `7 i; q8 M% C
} , y d+ Q& t+ s0 q! D ]$ W8 t
}7 [! s% D3 @" G2 A' C( ~
m_wndMenu.SetVisible(FALSE);
$ i6 d0 g4 B, i* Q1 T) G; @1 I2 l$ p1 o' g3 V
--------------------------------------------------------------------------------------------------------
2 q4 N; u' f' }0 F$ T6 D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( k3 S' R ~2 `3 @7 C% M{
9 }9 g# k2 U$ m. ]* PBaseMouseCursor();
' u9 e2 ~2 ?0 p% d- ]8 d# r}
9 `0 R1 ]9 C& S在其下添加:
: u1 z! i* Z8 svoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: U$ ^. U0 a3 t- K3 m{! u: d* f2 K; w, g. i# K3 ?
m_wndMenu.DeleteAllMenu();
8 e9 R/ J/ k" x4 U' t! ?m_wndMenu.CreateMenu(this);$ N! W' T% m5 o5 ~& S" ]1 o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# x( a" a9 b+ D c
5 Q! m& }8 R: T. V( W7 j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ A" A' P4 o6 W% y8 r{5 v+ m( i7 |# O" z4 k
//P以上级别才可以删除所有道具
, q; {) l A2 L% P, c% |2 S m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* \' u( R4 s; O z! n6 v" A& F W}
9 t# v: O" x0 \9 v/ tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" ~" J7 a { H- _+ im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% {+ F) S+ K7 }: N4 pm_wndMenu.SetFocus();& p* W! `) j: D* t# R$ g
}7 i3 I, o5 d G- w. }! d
------------------------------------------------------------------------------------------------------------. Y! ?( }9 ^, f6 I( K. u- [* W
*************************
5 Z) K" v* r( M$ sWndField.h文件
% z- j0 h% z, {& Q*************************) E7 _+ \' v/ ^1 {, R# j
搜索:BOOL m_bReport;
$ D' ^+ m+ r! V; g! n6 v. G其后添加:
! Q4 e" Q' {. y) o: mCWndMenu m_wndMenu;: h% S5 b( O: F* n" w/ w
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* N& a0 q5 ^& l; U- d# d4 n
其后添加:
$ f/ s# \/ W# w3 k' h2 R$ u1 Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
, e/ J6 R# j- P5 }4 C& U- k% s
) S- r/ H7 j6 H( a$ [$ `* ^' z9 V0 @
|
|