|
|
源文件中_Interface文件夹下WndField.cpp文件2 |5 ? ^7 ^% b& `
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 B# z) T* g: j# d
( G: I5 k6 C% v# K+ v/ Q3 y, |struct sItem5 H3 n) x, e' W/ ~ A
{
2 q9 L% o$ r9 c. V- ] uDWORD dwId;
1 |0 k4 O6 E4 ]DWORD dwKind2;
: X/ U. Y1 z o' _- DDWORD dwItemId;
0 k( t% j6 K+ T+ ?! R IBYTE nIndex;2 P+ U" s, T4 S. |- z; D
sItem(){
9 _2 D- ?) V* \" @! B dwId = dwKind2 = dwItemId = nIndex = 0;4 w* h1 Y- ?* m) w; Z
}
% k* o3 R2 |' \5 a3 G2 S: pbool operator < (const sItem p2)
4 E2 c# b9 J' ?+ i* h9 K{
/ z6 ^( P2 ]' s" Z0 I: @7 u if (dwKind2 == p2.dwKind2)& i; H& Z3 b% X$ e0 e( }+ a* s
{
3 B5 C$ u" d* @+ j, h return dwItemId < p2.dwItemId;0 s a% \ ^7 w* |+ w
}else{
% V5 f. h8 D" `. R! p. M return dwKind2 < p2.dwKind2;
: D. c' j' k$ W0 ^ }
3 G" ~# O0 [. n) r}
' g" v' ?; y+ {( u3 p7 U0 P+ g};
6 m* K' y. v8 |5 k1 G W+ lclass CInventorySort) P( K- k3 x9 i" {* P7 Q; W
{1 x$ {4 I, }2 v' B$ O
public:; b* x8 U9 G3 J9 T1 a: N, w- e
CInventorySort()7 ?) s* ^0 H! e# K( j* f
{
* n7 o& _+ n7 U2 H) t5 o m_dwPos = 0;
( F. f' ]& f# k( v# {; G5 ]& K2 K) l}/ \& E9 G+ k* x$ i: W% M
~CInventorySort(){}
) v% g8 N% i8 O- M( u! {& Uprivate:( w& R6 J0 c' O) ?; U3 {1 o
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 }$ m! d- W; O
DWORD m_dwPos;
* P* i0 B' V k }/ J6 B1 apublic:
9 i& b( e: ?( s0 D$ c- O* k) w: Yvoid Add(BYTE nIndex)( S5 Z! H# d, ~
{% u" C7 U" n$ B6 G
if (m_dwPos >= MAX_INVENTORY)
, y5 C" `5 w* h$ ~9 n) J {$ v: ]4 y9 o% t/ u8 _) n' G- g8 V; f
return;# a$ u. [' {' n6 a) k3 `
}
. v: T0 f+ `' D+ [* b7 o m_Item[m_dwPos].nIndex = nIndex;
% D' f0 h. v- N- R6 ] k. z) D m_Item[m_dwPos].dwId = m_dwPos;
2 ?; t6 ?) X) f" y: V( \) F m_dwPos++;
+ p* S# ]- d3 P, M( W! w5 [}! W' f) t' n' V; b
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( ]6 ]; L( g @1 e- f; F
{
* d4 m v) J) J- N7 s7 W for (int i=0;i<MAX_INVENTORY;i++)7 ~ r" c6 ` k4 e& s. v9 L
{3 }! E0 {) ^% K y4 p+ I# {
if (m_Item.dwId == dwId)
& v. v Y# E% S; I {
% j6 O0 `! J, n) q return m_Item.nIndex;
+ k9 m# ~4 H( c' }! X: ^8 F }; m) J" s% e' W$ P
}7 N# H* o( A$ i' }5 [" e2 Y1 w
return 255;
- N% Y& o3 e% \- D% t1 w6 K$ D}& P: `5 A1 Q) e& M
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 W. u- z8 ]2 g( t3 ^) t6 v2 A+ {{
$ ~' X1 S: U. w) J! x) g BYTE nTmp = 0;/ V9 z. A" `/ I" \0 O- {$ ~1 L
bool bDest = false,bSrc = false;& n9 A( ~' w/ C5 h a
for (int i=0;i<MAX_INVENTORY;i++)2 t& R% Z' f& @
{" Y( e d) H6 {
if (dwSrcId == m_Item.dwId)
0 v$ L& r: A& {" C5 N/ e {
, P5 q$ S7 [( Z //id相等 则 改变对应的dest和src: }3 g% }$ H9 {+ w8 e4 d! W
nTmp = m_Item.nIndex;
6 P; I K' |6 g* M+ t( f0 ?1 f m_Item.nIndex = dest;% g1 o) v. [9 T. E
}+ V9 L, z# d, i
}. R, k6 M7 n% O1 m5 _, L
//临时数据保存完毕,交换开始& H2 ]( I' i5 R `2 N
for (int i=0;i<MAX_INVENTORY;i++)3 R! V, a: o' t; O
{
3 M# Z) h) N( ?+ X2 _! I if (dest == m_Item.nIndex)
: i8 E( s+ V# I) N1 \, d( z {
, z4 C% |, A' o% B; a( v7 J7 c) o //id相等 则 改变对应的dest和src
0 w2 H( n# u- ? m_Item.nIndex = nTmp;
$ I1 x8 b) ?7 y }- g+ F4 Y" G2 v! v) l
}/ n! ^% N, B3 ?, x
}
j0 \8 |; |: C/ w/ @2 {! h};
1 a$ V' Z& O8 g+ r+ H-------------------------------------------------------------------------% ?: p" r, i: \
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 z9 S" E, L# W \! p$ X
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: d9 Y! a- x" H紧靠其上添加: S$ ]! f; i+ q- m
if( pWndBase == &m_wndMenu )# |6 f. f8 ~, _ S+ s, Z4 Q, s
{+ `' C7 a$ a0 o0 k
switch( nID )' i3 o7 ~" h8 b
{
( G: b: b1 A+ x' ]0 Z8 w1 N case 2:
+ c( A$ v0 h* f6 K9 R3 O4 X# X, q {
- V3 p, F' p" ~ y! a8 l! t //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, Y# X3 @6 R* g
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), q6 c0 p8 U7 p' Y8 `7 l5 v
{
1 Q# d: ], F5 P8 Z! u9 R) z break;# }7 Y/ J) j' `( U
}
& a/ o! t; T: O, C9 y3 t3 R for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 z5 b4 `( P- u( h$ k, [
{
/ ]5 g3 {- J% ^) Y! [5 u$ U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ K' J& a, ?+ ^. w( _+ K if( !pItemElem )7 d& `% N6 G2 _8 |
continue;
4 j0 k% ^6 Y* h& C( I+ F3 f if(pItemElem->GetExtra() > 0)
: A: b, J, k+ m continue;% i3 m i$ [, c
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 `& A! q" S# S. E
continue;
; }" v" k) ?" Q1 @/ g8 y5 H if( g_pPlayer->IsUsing( pItemElem ) )
5 p7 B" C$ f/ P continue;3 c% x1 o7 m2 c/ h( {- R+ |; ]
if( pItemElem->IsUndestructable() == TRUE )) J: w! S0 I7 m
{
% D: F. ^' B% h0 k$ j' y g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 l# x! @( D& I- Z5 L0 i2 u3 m continue;; j$ g# Q1 e, m/ X
}! M# a+ [1 m5 i+ p6 C+ j- v! J& x0 w
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ X3 H5 H p( x- _
}# B( }3 v' H* ~6 ~
break;
. n) B# a; p' [% E }
/ w& w8 B) Z2 Y% C' t case 1:
' a' K3 j7 q3 |7 d$ d {
. ^ n) ~0 l; G! O0 y& ]; @+ N //整理背包
& T2 P8 C) z1 V+ J! q. t8 z1 _ //////////////////////////////////////////////////////////////////////////
8 a/ w5 v6 }+ G u //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. ?2 e! Z1 Y* e
//////////////////////////////////////////////////////////////////////////& ]( k* c- c# e2 ]* K% k1 K
//////////////////////////////////////////////////////////////////////////
0 [% \0 p6 g% m; z4 a3 N0 _) C CInventorySort* pInvSort = new CInventorySort;
: n2 o/ m( @7 K* } c/ O vector <sItem> vItem;
' D$ r+ }0 ]" b* v. t/ N vItem.resize(MAX_INVENTORY);//初始化大小
! Q* H: P9 r# o" A //////////////////////////////////////////////////////////////////////////
: g+ }4 }6 N: p: [8 U3 P //填充数据
; T8 ~6 N( b* }/ a for (int i=0;i<MAX_INVENTORY;i++)6 L. a7 }* @) D l
{
s: Y9 S0 W- l* R! R3 O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 v% [" o# S5 Q6 S. ^# c& @ if (!pItemElem), n9 c3 c3 K; J+ h! {
{
* o3 R% A. V2 q/ E& g% H9 Y' ` vItem.dwKind2 = 0xffffffff;
5 I" f& P& q$ V% n3 e vItem.dwItemId = 0xffffffff;
) ^3 k6 H" F$ ` O vItem.nIndex = i;
* i# P( x) i. S k }else {
; h6 Y1 h$ z0 x, n7 E( w' Q ItemProp* pProp = pItemElem->GetProp();# X( x% U5 K% @; `" E6 q
vItem.dwKind2 = pProp->dwItemKind2;/ L# G! _ w! Z7 @5 S2 V' r
vItem.dwItemId = pItemElem->m_dwItemId;
% m- h3 M* w# e! R vItem.nIndex = i;
0 B5 ]4 _+ `. T: W$ ?6 ^ }
! I3 w6 ?* o+ e( ]1 b1 Q d" p //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 a: r+ c6 y% C" k
}. k4 r* ^* ]7 D
//////////////////////////////////////////////////////////////////////////% @. \$ U+ E; w9 c/ C
sort(vItem.begin(),vItem.end());//排序
0 Z& ^5 X8 w( l0 w9 N; q, K //////////////////////////////////////////////////////////////////////////
! O4 @: B7 G9 t+ I //交换
% b7 ^! B! G+ A6 e& V# G# ] for (size_t i=0;i<vItem.size();i++)
6 S# g8 g8 b! A* L {
$ S7 Q/ B- c* G4 U8 t) e) v# ~# N+ ? //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 D$ _$ |5 S9 O pInvSort->Add(vItem.nIndex);
, [1 s- g; s! T1 Z }% ~, p4 Y W$ K% E+ y, J( Z
BYTE nDestPos = 0;( M2 L! u) p' }
for (int i=0;i<MAX_INVENTORY;i++). U0 g, ?( _: r5 N+ Z6 J
{
1 `2 b( U1 u; r# ~3 ~; i8 w+ G0 R/ } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% L5 Q: p# |3 `( T8 r8 {) D& O
if (pItemElem)
( a2 i* q8 t4 F" I5 N {8 _( ~$ C9 w+ g9 d6 x
if (IsUsingItem(pItemElem))
$ W2 H' D( J* z' o# @ {: y: ?, F4 z9 n/ L' D4 O
//这个位置无法放
* L2 @; O8 W) c% Z nDestPos++;( n8 X3 `( k" ~- A' Q. ~' f7 p
}
3 [+ m) D8 x6 Z% `+ M }
- p( a, l% O: Z# i3 B4 p& g BYTE nSrc = pInvSort->GetItemSrc(i);
% b# E: Q+ X Z5 U pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' V' v% `1 z. o3 R) M
if (pItemElem)
I) f! x1 R5 N l2 F {
$ n! b5 t0 g2 ~% E) X' A% Y2 W F if (IsUsingItem(pItemElem))7 B) E q8 d; P1 ] x0 h
{
: m% z( `9 e* }7 E3 ~' S' g- w //这个道具无法移动,跳过1 o8 I# b% z ]& ?3 p4 X7 j( X
continue;! {( e3 s! ~4 Y7 U0 o
}
- `& _% q1 W, A" N }else{
1 y. H" E3 y* {% o //空位置 不用动1 G$ M! o! W" e/ n# `7 Q
continue;/ H# i9 a8 _/ S. D1 C) Z+ U
}; ?" e- r0 {, A& Q( f
//////////////////////////////////////////////////////////////////////////
1 i- [/ f1 K0 \; h( L7 I! ~ //开始移动
. b% i& \ \8 c! N0 s if (nSrc == nDestPos), \5 n2 F% ?$ A' o( c
{/ h* _/ k, c2 c0 q! i9 M w
//原地不动6 j+ [$ D( K) j' ?+ a+ [( v
nDestPos++;: x' j0 B2 Q1 K4 y$ b# U: w) t
continue;2 X- A7 X2 v& O( }8 D
}
+ z! I0 ^9 ^. w: J5 Q, ` pInvSort->MoveItem(i,nDestPos);
! E4 ^( M5 G$ E5 |$ V7 v3 c# E g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 G" K# {5 A. g
Sleep(5);
7 ]: A: P A, p; u7 s- u //Error("移动 - %d->%d",nSrc,nDestPos);
6 B! L/ p) w1 [! |- |% N nDestPos++;) p) ^, Y1 D7 d$ @7 b# h
}. w- s! \! M# ?% {5 Q# v
//取第一个元素的信息4 I, w( Y( c6 h: S
/*, l# e; q8 V( s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, w: V$ ?' T. ]) f; v; T {8 `5 f' o" _% i$ O. A; \4 Q: a
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* } s3 V5 C% w1 i0 C
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, w2 R# D- b* f }
, j/ J' |; d9 Y |: v */2 X+ u k6 E6 H% Q/ G
//////////////////////////////////////////////////////////////////////////
& d) @4 M8 ?3 x- I+ n _- x break;, ?! R) y0 Z& B) b" O
}
) Y3 h5 P( l; T# o* A6 y2 i } - t# o# q4 E g! o7 _
}
) g4 \+ X1 C& D# P1 u9 F, ?m_wndMenu.SetVisible(FALSE);4 X' @0 F! @2 ?/ ?" }6 Z
- F! h- U B# F4 @, k" L' Z( i--------------------------------------------------------------------------------------------------------
$ f5 K2 ]) D2 Q9 C9 m8 i搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ O4 ?. ]- o7 f8 U9 c
{( }! c* y% M* ~+ s
BaseMouseCursor();
5 v" Q) v5 o/ v3 u}* a: K2 T3 F% n
在其下添加:% Q1 d2 `3 M$ i* ^1 g3 J0 U) I
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- W; {. i9 u' g8 @{
, W" w# z0 {$ Y" Nm_wndMenu.DeleteAllMenu();) ~6 G7 x' H5 d8 Q# l$ v9 c
m_wndMenu.CreateMenu(this);
* O1 V5 t5 ~+ r9 X/ ^/ Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 F( O* U+ r# i
~- q H, {1 A; ?
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& Y; u2 R2 J# j3 s9 T* X& @
{
9 [6 O% j5 L# g* z( v //P以上级别才可以删除所有道具
2 V; M m! Z2 y0 Y$ A' m% ^3 o5 o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# j- G, W; o8 M1 V, m& \7 H/ V
}
8 N; H( `+ S9 E) n# z' fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( i# h1 Z5 u& q) C1 ~m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
?- o& [, f( `6 O4 s3 P: ~& wm_wndMenu.SetFocus();
+ O& H2 X9 [- {' r5 c" T}6 l' J/ ~. W8 _, G9 U
------------------------------------------------------------------------------------------------------------! u7 L! B$ x4 |1 u8 X, i6 Q
************************* G$ z) j9 q: d1 R0 T. E
WndField.h文件
8 N' h- X9 @7 m6 {% r*************************
* R5 L# t8 r1 ]5 s搜索:BOOL m_bReport;: R4 e1 J3 v' S% r
其后添加:9 ^ v; w! a/ v9 M
CWndMenu m_wndMenu;
/ Q/ u2 B1 Z9 N- X搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. q m- a9 ?* U( t' c$ Z) |2 z1 L其后添加:
4 `$ A7 I7 N$ cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 X7 e" c W* q/ N- @, t1 Z( W
7 x3 P* M, \) g4 M+ H1 _. P2 ]" b8 Q! W) u9 |8 X, p5 q
|
|