|
|
源文件中_Interface文件夹下WndField.cpp文件# O. |& P- x- ]+ l( f% P1 e
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ y8 V3 I9 `- I" ^0 `( d4 f$ h/ }, [% b; k6 d+ m5 e# |; v0 h8 `! k
struct sItem
. x4 Z& ]+ y4 U% b* T{- ]! @1 z! S- S
DWORD dwId;. H- K5 I8 ^4 z9 b4 m; n, V) _/ W
DWORD dwKind2;
$ g) H+ e% W$ w3 W) k6 TDWORD dwItemId;# `4 g& b% w. D" k% H
BYTE nIndex;; a8 h; M: M% _
sItem(){
& m8 k0 o9 S3 `1 p9 j dwId = dwKind2 = dwItemId = nIndex = 0;
: _' K" T8 I0 h( Z( L}
$ D) J) P( C$ e, s3 B" Bbool operator < (const sItem p2)
8 L" Z& d6 N7 h9 } F: `1 I1 H{0 V+ o7 E: n. X( g6 x
if (dwKind2 == p2.dwKind2)5 G- K* @; }6 t% h- S, j
{
/ x+ @5 O, e2 S( B return dwItemId < p2.dwItemId;9 S& p) A; Z: M/ r1 j
}else{' J1 s4 s1 T/ ?- U8 Q H' ~
return dwKind2 < p2.dwKind2;
2 L3 u4 u3 i' f/ |& H8 R! U3 A }8 E. g. C; K1 h. G/ D8 E
}6 d. m. B0 z% t; S9 v4 ]7 o
};0 v6 j1 ?( g7 t
class CInventorySort& j. L+ ?3 m& E' Z
{
/ y+ f/ D) j' F1 P/ y* Cpublic:
7 d& L# o5 P k. P" xCInventorySort()$ [( w+ M6 ]9 t
{& v& r t3 W; A* `( p
m_dwPos = 0;
3 o& ^3 @8 @* k; Z& N' a6 b}
+ _& ]+ C. K0 \1 g" Q~CInventorySort(){}
9 Y7 O! E" Z" O9 [/ V& Wprivate:6 L# @) u' g4 @- n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 b3 r! r( k3 q$ c" _ }DWORD m_dwPos;# a' L/ k; H7 r7 W( b! q- `- ?
public:8 ^2 y) x: f( a' k3 s4 q
void Add(BYTE nIndex)* y% {- b6 w. k6 F& S8 g3 _9 X
{& s( L1 |3 W l% f% t$ I
if (m_dwPos >= MAX_INVENTORY)/ K; s3 w: H- W5 C T+ a, r8 B3 ~2 K
{
* |/ @4 G) {3 T. d y ]2 {' U return;
8 Q; {: A7 X! S- V" ]& H }
) q; X8 _3 s5 ^9 K) d" N. N m_Item[m_dwPos].nIndex = nIndex;
: Q9 A" Z& l0 Y( H4 V m_Item[m_dwPos].dwId = m_dwPos;, [& {% H; g' B9 G0 _: w& \
m_dwPos++;
( [" O: \( Z$ c. Q: Y5 ?( ?$ H4 F/ N2 }}
3 z, m$ b3 e! b5 g& L- i; ~BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- I$ f5 x G+ e; f3 R{
4 g* S8 i; K/ Y% ?& t6 l Y1 z for (int i=0;i<MAX_INVENTORY;i++)
+ W6 P/ i' n2 U f+ E+ O {* X% Y6 b7 A+ I" |, b0 h& x, K5 D7 ?. A) S
if (m_Item.dwId == dwId): @+ D5 W% D D9 X1 L: R
{
# M3 }- M. {3 X0 R% {3 e return m_Item.nIndex;5 m N& {2 u7 P/ j) d, ^( G3 u2 d
}( a; v/ G/ ^0 M) t9 {
}. ~( U$ N3 R* q, _9 O6 @
return 255;+ j8 v% e# Z5 U/ N; z
}
/ u' ]* b' X% e: F7 vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) `6 q, Z6 b+ J4 Y, M6 A6 S
{. l* [8 g, X5 ^
BYTE nTmp = 0;( m7 I( \) A* s$ o$ C
bool bDest = false,bSrc = false;% z) F# E, l7 Q$ v: c$ u5 i
for (int i=0;i<MAX_INVENTORY;i++)+ i' a; ^0 R% G/ m& t$ V1 N9 Q
{$ W4 r1 p# M, \' M
if (dwSrcId == m_Item.dwId)2 @9 Q2 I* i3 A( K
{
/ Z& {' h- M6 u3 y% S //id相等 则 改变对应的dest和src3 ~. _' [5 G+ p+ Y }: z
nTmp = m_Item.nIndex;
- Z# q( V; m: l+ q' \( B m_Item.nIndex = dest;
4 @5 ]4 U4 l9 l, d% C) L! P. Q. O- _ }
u4 d8 \; |' x9 Q/ c2 X4 l2 x- a/ k }2 L: c" }& b$ L
//临时数据保存完毕,交换开始
9 X3 ^, @4 {' `# P; v for (int i=0;i<MAX_INVENTORY;i++)
" G+ i, C: M# m/ n) o; o5 a! ^ {% J5 c$ N5 r5 }% B( {
if (dest == m_Item.nIndex), s# ]$ `0 z9 h: S. N
{9 L j6 p- G. k. S9 p3 w
//id相等 则 改变对应的dest和src) m# E( e; q0 A+ A9 p6 x: }
m_Item.nIndex = nTmp;" }0 }6 t/ S2 l! n
}$ g; U+ ]% Q: N# o" g L& `
}7 K, h! P/ `9 i- G8 [, {
}
. U" ~ m- l7 X/ h J4 R};/ n4 z O9 d# s6 @* R) `( t
-------------------------------------------------------------------------- u! B) i' b4 L1 m, b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ H' A# m7 x; d搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 C, n b. l; d J( z2 s' A; F) N
紧靠其上添加:- F! f5 z ~0 ]6 M7 ~! x
if( pWndBase == &m_wndMenu )
4 P. u9 r4 C# _% I{
7 C7 v2 V+ K1 C3 J% O. t, U switch( nID )' [! r2 b* F% L' p' H0 g
{
; y& \( } \) W: n case 2:/ J% e: z2 v/ F) o
{
: b# F3 r: B6 s //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' z7 t( D4 x# m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 e& a3 P! ]8 ~
{
' k% E/ B' X3 T2 B break;
) ]& O9 i! a" X7 Z) G% O% ` }$ w, c( I( s3 M2 i- Y+ l
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 v( M$ L) ^( a+ U {0 o* W& d: t& p/ @' y( P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; g: a- n# h% R s6 R0 k& X if( !pItemElem )# r' ?+ f/ a" P5 B9 J
continue;6 P+ T0 Y9 _$ u$ P0 {7 R, |
if(pItemElem->GetExtra() > 0)) y( V8 B" c: i3 q" r5 Z
continue;
3 |- y, h \4 L7 n" \7 @5 f if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) K: g; @' _! N: r* \* Q
continue;
- j" `9 [: {# [: @ if( g_pPlayer->IsUsing( pItemElem ) )8 ^3 E( O/ m7 a8 V
continue;) C# O7 R. j) p
if( pItemElem->IsUndestructable() == TRUE )# s6 a3 L% v! E/ s6 Y
{
& I. [) M8 q1 ~, |. t g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 X3 A; B; u6 |9 ^ g4 j
continue;4 n0 j, G1 j% P; m
}8 p5 P4 l% l3 p5 K2 V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# u8 K6 ^" D# H+ M) H% u5 `0 h }9 E, | K% N# G! k; |% T, E
break; O8 E4 P; h7 E" m- b# t
}
. i$ W6 ~- N2 c* C' \ case 1:
7 v2 g7 F" u% h, o' p% S {- n9 R5 R5 i: x5 r6 e1 _- `& O
//整理背包
+ i# E! N# |4 a //////////////////////////////////////////////////////////////////////////
# _; a' B5 o' z F; i! j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 y, i4 Q9 U% D; ]1 Y6 f$ F& ~7 i //////////////////////////////////////////////////////////////////////////2 L$ \0 M' j5 Z: @" n
//////////////////////////////////////////////////////////////////////////
( H2 u3 d7 u) @- N4 t$ S CInventorySort* pInvSort = new CInventorySort;3 T" k* [# c% C, c
vector <sItem> vItem;! t* h2 s8 D5 L* L% Z
vItem.resize(MAX_INVENTORY);//初始化大小- y% p5 r" o% `7 p; w
//////////////////////////////////////////////////////////////////////////
K2 M9 s6 C) G //填充数据
`$ I4 Y/ }2 g7 }4 \ for (int i=0;i<MAX_INVENTORY;i++)" I a" k% @0 Z$ {+ U) G4 V: E
{
3 ]( h; t" E: K1 L! K: W7 X6 K( i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; ^8 p% g& D, a/ e" R2 W if (!pItemElem)7 u) l& v1 M3 f1 n& j9 F S
{1 V8 C3 Y8 B1 L, _/ z. I s2 R
vItem.dwKind2 = 0xffffffff;& U5 e0 n; `5 x3 _
vItem.dwItemId = 0xffffffff;/ Y2 b/ n/ z3 U( y9 z$ s, l
vItem.nIndex = i;1 t0 P; d* m* Q6 Q2 b
}else {
) L8 Z; W7 L' y% ? s$ h ItemProp* pProp = pItemElem->GetProp();
P) c1 L' B4 d- N2 `- \ vItem.dwKind2 = pProp->dwItemKind2;& e: j2 ~( Z9 p2 T& T
vItem.dwItemId = pItemElem->m_dwItemId;* J# u" Q3 a8 Z- D0 h
vItem.nIndex = i;
5 a5 j3 s2 ?/ O% g( _7 T4 { }
2 V4 J5 W, W5 U* O* ] //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 A! _! O* u) d, j9 G- k0 M }
' e8 ]) }. P5 r- l //////////////////////////////////////////////////////////////////////////
0 b7 K7 Y+ N; Q& u2 b3 A; v6 L/ ` sort(vItem.begin(),vItem.end());//排序
% G* K4 O) @3 w) ~3 P //////////////////////////////////////////////////////////////////////////
: ?4 _) { Z2 L: U //交换( }; P: t- R) t
for (size_t i=0;i<vItem.size();i++)
' ^% g1 @8 J" L( a {7 ?5 J" |6 F7 R/ c
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 R6 p5 w; j/ ]% {' w- U
pInvSort->Add(vItem.nIndex);# h* u9 K. L3 T' _6 J$ j( f* z9 G
}
" j) k1 x: N7 p( w4 } BYTE nDestPos = 0;" u7 F, N! f6 G. W: G2 h; {
for (int i=0;i<MAX_INVENTORY;i++)
' W7 J; v) W. [ h5 N {+ x6 b) A3 J! f. F" y6 G) ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
I5 S# J/ m9 J3 L1 K6 P7 V if (pItemElem)" r }2 y0 Z) e2 [3 N* @3 g) m9 A
{
' x$ G5 r3 I( c$ d if (IsUsingItem(pItemElem))6 A6 w O+ L3 }& A
{* K3 S! W D5 G! e. L; O% r1 q
//这个位置无法放! p) S0 H) b( ^ A, u8 I5 x
nDestPos++;
& P/ \9 y' B+ }4 e/ \* J; O" i }( {: r0 ~( n7 g
}- E! Z: R$ V" H d" e
BYTE nSrc = pInvSort->GetItemSrc(i);( W, f$ b8 M! W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
S+ d: f' _: a8 t2 B Q: I if (pItemElem)8 _7 k; l |& Z$ x: a: a
{- G' K/ b5 i5 Y; i% ?; z
if (IsUsingItem(pItemElem))
* `, r- Y" b9 R5 E Y {
% S1 E9 l/ i0 ~: ~& u //这个道具无法移动,跳过
5 l" O* t; S9 v+ u0 D continue;
3 z, O/ _, h I2 Q3 _& I" @* A }& d" r* [9 C* B" F8 ]
}else{1 c0 q$ |0 i0 `; U1 Y* v
//空位置 不用动( r3 T) g. d D+ h5 q# F5 ^! }2 G
continue;
. g- J6 n) Q8 U8 Z- A& R- U }1 [1 ^ S/ u2 S
//////////////////////////////////////////////////////////////////////////0 ^2 `" ` k4 g' i; p
//开始移动
5 L+ y" g9 C. d8 Z" {$ e if (nSrc == nDestPos)# @7 m O8 D9 t: h
{! ^6 E, }$ P3 d
//原地不动
8 p! Z- F1 C" a0 b nDestPos++;* h( p* Y8 G* d8 |# ~- {8 M
continue;
- E. G( S+ l' Z! k5 X% z M- `, Q }& C5 V6 t8 t) X" p) f( k/ P
pInvSort->MoveItem(i,nDestPos);( Q0 Q# n2 Y6 g" W. }
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( T0 A4 `; \- d! t/ G) G% g5 x7 k- N Sleep(5);
% a& P* Q1 C4 i. Q( @. l //Error("移动 - %d->%d",nSrc,nDestPos);% S% E" N2 }) h+ N% G* u; s
nDestPos++;3 n( a0 D4 N, G% u! |1 m
}$ D2 {1 ]: l6 V. O9 k
//取第一个元素的信息
& A- M b7 e) b) l! b" w /*8 q: b; |7 j! J" ^! A4 c
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: n$ T/ l- a9 H1 M {+ c& T' ^, N7 e! ~! j
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' `; V0 W" l/ `
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 P& X9 N! T4 `$ x1 d
}% l9 e1 n' @ l
*/
1 \# R6 R4 X1 n //////////////////////////////////////////////////////////////////////////
1 s, E5 C0 }( {( O5 o8 g( d0 V1 P break;7 N% o$ u1 L/ o; R
}4 c3 g k v6 Y9 f$ e
}
6 F7 M) w& n4 Z" \* ~ L( s/ w- J}0 I# X* A1 X1 a# S3 n: E$ j
m_wndMenu.SetVisible(FALSE);0 R5 U+ R5 g/ L3 |/ f2 G
1 w! K* A2 n( b+ Z9 O
--------------------------------------------------------------------------------------------------------
7 p4 A" q- {0 \/ t5 F搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ C/ }) ~% ?5 q2 c& t0 H" [0 v
{4 V2 U' p9 ~+ d8 z! G
BaseMouseCursor();
3 C: x$ Q) P) X}2 h0 Q& _# H" W% ^6 M( Y
在其下添加:
/ Y' ~5 |. |: r zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 n/ A; W* @% O! N{- P6 t8 G) a" M0 c8 l3 f0 j0 w+ D
m_wndMenu.DeleteAllMenu();
: c; F4 [; ^3 H1 K' s+ hm_wndMenu.CreateMenu(this);) P. x4 z! t' F$ g. p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) T! y( f& e& C) D1 Z
8 i- y, _( j, Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ M1 r. E8 w* L4 J( \ `{
% M* {) M, x, N1 g //P以上级别才可以删除所有道具
# }8 f0 O$ [- f) \; y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 A9 V' H: b& ^8 |1 [
}( Z5 P6 M: f- q# p
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" S5 `6 t1 l8 W- B W8 C, {0 _m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' X* {8 J/ x6 q. gm_wndMenu.SetFocus();
/ ]( a7 l1 M1 ^}4 e' s" F! O- R" G- f, J# o
------------------------------------------------------------------------------------------------------------ `; p" r! w& v% R6 B
*************************
# j+ r1 V1 a3 I7 R" T1 U2 rWndField.h文件
" ` W' B" E* j% P4 Q! K4 m, ~; m*************************; ]: r7 I: C u5 z& p! p
搜索:BOOL m_bReport;: S. Q7 w3 @ V% \
其后添加:
2 c: C8 Z( ^2 z5 `; ^CWndMenu m_wndMenu;. C6 {* t( y- x4 i1 U j6 |
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, U& M1 F6 w$ s2 r
其后添加:
4 h9 o3 T) c7 f" ~1 `$ R! v, Fvirtual void OnRButtonUp(UINT nFlags, CPoint point);7 \- ?5 A4 m+ F
: M% |+ g: g4 }
$ c6 K" | h+ P$ A3 P: o0 V2 a7 c2 b1 e
|
|