|
|
源文件中_Interface文件夹下WndField.cpp文件+ X; U5 R$ P' F. J. u9 D8 R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 S- }' w. f- l# F
% ?" C) x' @! Sstruct sItem
8 p+ h, ]" w) t# M s7 e' a{: p" P, J6 b3 [* c
DWORD dwId;% K4 s0 C v7 O; `- r
DWORD dwKind2;
0 I! V! q; a* H$ z4 MDWORD dwItemId;! r( k3 p' E1 v. x/ ^- A8 d8 ]
BYTE nIndex;
# N J8 e; n- z- AsItem(){) m! i( c5 U( E* _
dwId = dwKind2 = dwItemId = nIndex = 0;
& E# C' P9 I: w; o- u}8 F+ R9 }, x) {! [8 U
bool operator < (const sItem p2) [( ?0 H9 D$ U5 [
{$ M+ G* ^ r z- ?
if (dwKind2 == p2.dwKind2)5 d6 b' ~0 f, w5 x
{
$ M0 S/ Y7 C- d- b' W8 ~# S9 ] return dwItemId < p2.dwItemId;! L* q: d$ T6 y: M
}else{
. g7 `) D0 H4 f return dwKind2 < p2.dwKind2;$ ~. P& @2 x) s/ O3 Z3 F
}4 h" N: f9 ?# Y0 M! E; ^0 n$ b
}
' ? p# p- C% S* X6 x+ t};
! c6 T8 n V0 {& F; @' i- qclass CInventorySort+ Z2 l1 V& ]0 Z* ? b5 ]$ l
{+ n0 N% e! I( D8 ~; F0 O
public:2 Z h/ L! [; z, q6 }1 K) u: u
CInventorySort()+ A( e& ~7 ^$ S3 z
{# j8 ]( v0 @, N8 v% E! U
m_dwPos = 0;0 j% M7 ?( p4 X& Z7 {. y
}" \) s$ P$ T- g$ p# {' O
~CInventorySort(){}
; f) @' P; c0 I& t2 {" ]6 w# Yprivate:
: j7 R1 p( x; rsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" R, [: r% `! S3 J; d
DWORD m_dwPos;/ s6 D9 J2 \& B% X( _3 h/ _
public:! Y% u# s8 Y) J1 m0 y
void Add(BYTE nIndex)' S/ o& J/ O2 t! N
{6 H/ K7 U8 F' |' a4 G
if (m_dwPos >= MAX_INVENTORY)) G$ `- _) I% v
{
' M0 f/ m! ?7 F! V1 Z' S return;
, q# w8 G; R/ W! p }1 U. A, p, J1 R- c: c: y/ C
m_Item[m_dwPos].nIndex = nIndex;: s7 d9 m. n) E$ V8 X
m_Item[m_dwPos].dwId = m_dwPos;
1 X2 @; _( k9 P! E m_dwPos++;9 w4 }* T, T _/ P
}! c: N5 C; ^2 N& z9 @
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 T( w$ `8 V0 W! U
{
* K# D0 o9 i- t5 w4 c for (int i=0;i<MAX_INVENTORY;i++)& a; G: ~4 ^. F/ p
{6 Q \2 K; o' I! D- Y+ [7 D; N
if (m_Item.dwId == dwId)
/ i' a' E& @+ o: q7 u V {: k! j/ s* s# y+ _% n
return m_Item.nIndex;
, m1 `' n2 [9 J+ p }
3 g, k5 Y$ |! G8 N0 G& S }
; T) }1 n" M/ X4 h5 r" U0 l. c1 d return 255;+ a2 z2 Y3 \2 i% {, u: v2 z
}7 T# u& e7 `5 @* i- X8 a+ R6 l
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 A" ^6 U5 F3 W% m
{& L+ o. c S& Q! j! w8 v3 G
BYTE nTmp = 0;
W' u# X7 A7 l4 J) a% c6 G bool bDest = false,bSrc = false;
) M$ I: T% x9 [8 D! D) Z7 ` s+ S for (int i=0;i<MAX_INVENTORY;i++)
1 b/ c$ o. B+ \4 U9 A6 b {# K7 Y# ^* H/ {8 R% |; |
if (dwSrcId == m_Item.dwId). c6 K, U- e; ?" F# P% ^
{! \ }$ _- E. f; Z3 I L9 x6 U7 A
//id相等 则 改变对应的dest和src
+ ? z9 {0 m2 p nTmp = m_Item.nIndex;
, e3 W4 _) M1 m m_Item.nIndex = dest;
. N9 g+ i: L. [. f }
: j, T( d2 e! Z7 J! f }
1 {) r$ Y) ?) ~1 L8 F: E$ [' d //临时数据保存完毕,交换开始4 @: N+ o; z. M# P
for (int i=0;i<MAX_INVENTORY;i++)
! `8 M* J* Y. J9 c( @# T {/ h$ y9 J" q5 g. M& ]* }$ [
if (dest == m_Item.nIndex)
+ @+ b( }" ?% B {3 a4 D# O9 J7 \ b2 J
//id相等 则 改变对应的dest和src# Y! |) }7 G, i" A
m_Item.nIndex = nTmp;9 N2 C {6 n! {
}5 q' v; A( m' a- q3 ~
}8 g9 r1 X ^) T3 {0 }4 _# Q' V
}! E2 R/ N+ p$ P* u5 ^
};; ~" P# b- ~% W" M
-------------------------------------------------------------------------
3 t Z) p# f9 C5 U依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 ?' c4 @" f* u' {0 y8 j$ _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 C7 j% C7 ?0 Z- H7 `
紧靠其上添加:/ \8 N) L% s# v4 n$ o, _: H
if( pWndBase == &m_wndMenu )
+ ~- S4 k- m3 t/ S/ b% n5 {{$ m& M! H0 K! V$ V( m) _) A; E
switch( nID )9 P4 @9 }& B+ F& P$ M) K! w( }0 S* [* d1 p
{
8 u. k& t) X" A4 ]( ^ case 2:
9 a7 S- u" g" B0 b3 \ {
( |1 D5 T9 |" N h) _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ }, E9 S& _+ F% ~# E ] if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% `+ f0 q# R r8 D5 {
{ `7 t: X7 A0 C8 R; L- C8 x! }( B
break;
* R; B* e" P8 w1 u- g) d# \- P% @ }
* n8 t) T5 \6 e3 L; f. `* n1 |: x for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 K' G V) O) r; f
{
7 H& W w; T# a. [1 K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# m6 S4 M; G" }" I4 O+ u
if( !pItemElem )7 u- {6 ^9 I; r$ p0 v) v. ? @
continue;
3 h: c# k4 m' s if(pItemElem->GetExtra() > 0)
! ~/ N( D) N" f3 ^ continue;
# s1 b8 j8 `$ Z2 r& K if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 S$ H- ?" z0 h2 `4 D) ^( {
continue;9 C# S2 m2 c% Z( D G) g& f
if( g_pPlayer->IsUsing( pItemElem ) )
% C$ @9 k7 S4 ]0 {9 [ continue;( g; p3 A; z \' x) M1 Q8 A* @
if( pItemElem->IsUndestructable() == TRUE )
1 _8 w# H* a9 f/ U { }3 u5 F8 C: J! C& a
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 [0 p8 V! U& n/ H$ [
continue;/ j- E9 `* s; D, p% f$ J$ J, k5 T
}
" A9 |& o5 c* u& Q4 P) c g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 ~( n7 W8 T0 V- j- `
}
2 y3 _% C9 M/ x: K$ Y8 F break;9 X$ G8 c% e6 ]& v7 z! G
}8 o7 j- _. p; m4 n) k: g
case 1:# \% W! ?" G7 v5 ]2 g% d* a7 m, Z
{
$ P2 K4 i1 Y% v9 |/ i //整理背包
( ^1 ?1 g, l6 z! C+ r: E/ q //////////////////////////////////////////////////////////////////////////
' `- e) |* E; W9 s9 P: F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* ?- J" T( J3 t. z X7 \) d //////////////////////////////////////////////////////////////////////////
5 S4 W! }1 ^* D+ } //////////////////////////////////////////////////////////////////////////" E$ R3 ]7 a) k l2 C) b
CInventorySort* pInvSort = new CInventorySort;
8 X# H6 [0 n6 r2 t% n) @ P, l* h vector <sItem> vItem;
' S" d% \% Y; ]& p, Z1 [ vItem.resize(MAX_INVENTORY);//初始化大小
4 C q$ m9 y1 J, b& m; W //////////////////////////////////////////////////////////////////////////: N1 S% m+ K% E4 D$ G' U
//填充数据$ k9 c' w$ m: f5 W5 C# W) w
for (int i=0;i<MAX_INVENTORY;i++)- Y3 C8 c9 x M$ {- S! Z
{
5 n" B5 p+ F3 p- z6 V+ o. M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. R' C! ^3 _* u
if (!pItemElem)* u1 y% ]4 {/ P7 n
{
* f" x3 n6 u2 S+ ~" S- d vItem.dwKind2 = 0xffffffff;
: h3 i0 q0 t( a: M vItem.dwItemId = 0xffffffff;8 A3 T6 B. {# r& r' P0 A" h
vItem.nIndex = i;: T9 @2 Q- `: G- _( \, H
}else {9 \0 W; H: }4 ]5 D
ItemProp* pProp = pItemElem->GetProp();
5 Z p' C4 B3 C3 v vItem.dwKind2 = pProp->dwItemKind2;
" g) F F* o- i3 X vItem.dwItemId = pItemElem->m_dwItemId;& T0 ^* x$ G& @( \. M" B
vItem.nIndex = i;5 Z9 H+ p# I G; Q0 I1 V6 ` q
}
9 b5 B( a4 r1 I7 e9 V3 T* o //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& a$ ]8 g% |) Y! U }
( i* W/ U) G! f* y! t //////////////////////////////////////////////////////////////////////////- J+ |3 o8 I: _" T
sort(vItem.begin(),vItem.end());//排序3 d6 [& y6 _5 L4 Z
//////////////////////////////////////////////////////////////////////////
2 x! N: w7 u6 Y# L+ z, `) H( V //交换8 A& d7 F0 s" {+ y& t
for (size_t i=0;i<vItem.size();i++)
$ F4 a+ W) h$ e% n1 t {# U: s0 ~* E' W/ v/ `( L( q9 x
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 I4 i8 [! y" {
pInvSort->Add(vItem.nIndex);
* Q; \+ s- n, z/ d. H- X8 { }
4 L% o# n" c, B4 p( _) [ BYTE nDestPos = 0;. r: ~/ ~3 ~0 Y) f
for (int i=0;i<MAX_INVENTORY;i++)
2 o. u- l% ~$ G6 \6 x+ d5 r, n {! A+ n6 f+ t4 Y& Q$ S# }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# j) z2 o% ?2 Z2 E) F1 T1 l if (pItemElem); Z0 Q# n# Z. F$ v1 I
{# t# ~" q5 l6 D
if (IsUsingItem(pItemElem))/ }4 c/ S! Y% p, L2 {
{3 H+ E' ]$ ]! a
//这个位置无法放/ t6 f8 J% i9 E+ Q1 _
nDestPos++;* {! A8 c- f$ I& R5 C3 p$ U
}
; t" N# C: ~! Y+ I' ]/ y }
1 s* c1 P! G- I BYTE nSrc = pInvSort->GetItemSrc(i);
- s" h( K9 T3 D pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' G# P* w ~4 p8 f
if (pItemElem)# M8 L+ V5 E: E7 m* L
{
- b' p V( \; f: \ P& r- Z. |$ e! i if (IsUsingItem(pItemElem))5 z) H$ d2 M$ o+ _
{
; @3 g7 ~0 ] f0 S //这个道具无法移动,跳过: \ |& x+ @* D8 M4 S) G/ e% m
continue;
- Q$ ?4 J4 i: r" T k W }
( ?4 M" J2 I2 e/ p: \$ b# B, j }else{' r$ [' Z, K$ j0 x O
//空位置 不用动
1 B3 R/ q' o8 k) a2 t continue;1 }. x+ F3 v# G8 w) M" M, c. ~
}
) b, ]& L+ T. i5 g+ n# p: h6 V9 e* t //////////////////////////////////////////////////////////////////////////4 m$ R, S6 s) T+ a* m) p. T3 ]; m
//开始移动* W0 @: D1 g& V: J; L
if (nSrc == nDestPos)
+ i$ N4 y% _0 u C" N l {" B s0 x3 [" |( H# W7 ~3 M
//原地不动
4 O; u0 V3 T; A7 g nDestPos++;! n6 E d) `% `) C) f* }
continue; `& J% Y, T" C+ P) Y" }& W& [! j
}5 Z/ y' P3 Y# O0 |
pInvSort->MoveItem(i,nDestPos);+ s. u1 {( m" \
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 i# y8 b+ _+ ^! R; L& L+ @ Sleep(5);" O" X+ i! \3 F# z; J
//Error("移动 - %d->%d",nSrc,nDestPos);: l4 J; h! m8 U: t3 k. P
nDestPos++;# ?; i. \. X# j" i5 B8 e0 j
}
+ k" p( u1 V# X& a$ z8 m //取第一个元素的信息- b' Z, a0 B# R, V
/*
. n; x. f/ [' C" d0 i( D if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& k1 k8 [& m5 j8 v! ]' T4 l
{/ B9 W8 ]2 T( q8 |7 t3 i
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 a4 b8 B6 E1 O7 l( _
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& q+ G/ C. u% H. Z# V) N }) f9 O! i. v6 ]- o& t
*/! n: E9 J% J5 y @9 H
//////////////////////////////////////////////////////////////////////////# l9 p/ s! L1 t/ Z. l
break;
7 f$ \( R1 R3 h }* E+ h0 ?0 [/ W$ u" C4 b
} : g" x0 t4 @- U1 q i
}& z7 i! g/ r. l! w7 L7 C
m_wndMenu.SetVisible(FALSE);
% |' [: z# T3 p$ v4 q4 M( t4 `8 A, l8 z
--------------------------------------------------------------------------------------------------------: R% E9 R: V6 I# A' S/ W9 X' `
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 E& S0 w$ r8 Q9 [{4 i* \& H( e% Q, |
BaseMouseCursor();
/ P" h9 H0 ~6 |" ?* U}8 x. l2 V/ ]7 ]8 T
在其下添加:
: E1 _- H7 x( Z- ~; Avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): E- z; }; i( u$ E, S: P y
{
! Z) r d$ l t" w6 Q' jm_wndMenu.DeleteAllMenu();
" O$ J, t+ ?, \# @1 t5 Lm_wndMenu.CreateMenu(this);$ H; {! i7 b3 N5 G% x2 U
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) w" M) y7 w& L) _: D% w" y
4 e1 ]: P& a9 [% D4 a; c ?if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): A- O& T0 B8 H* k" u J* k1 z
{
; K8 M4 v6 X4 w8 n //P以上级别才可以删除所有道具
$ L% z3 ]9 f/ J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: C# Q- L4 I& X, ~$ {( l* R# X5 e
}
0 H% f% g/ {6 r+ \, @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 L3 M6 k0 g2 rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' p; Q5 V- Z! R1 M6 |( Um_wndMenu.SetFocus();5 v" ~6 w0 M: z. u4 j. _( A
}" W7 p+ C# s4 }0 x# M7 k
------------------------------------------------------------------------------------------------------------% y3 M; x) s; c8 W1 N
************************** F8 q/ a4 N0 c; P1 B/ W8 p
WndField.h文件5 L3 R6 t+ _( z
************************* U6 X! c Q0 Z. ^
搜索:BOOL m_bReport;
* {8 M$ W+ t v7 ^" d9 U1 s* Q! h其后添加:: N# F. T0 Z8 U
CWndMenu m_wndMenu;$ d& X# i/ d( V: B% _
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( M# O# C4 w* C5 [* p+ L* X6 l6 D
其后添加:0 y% `6 o) U; B. l
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 Q" o4 U7 Q0 ~4 z4 y6 g Q. u1 l
- Q @4 l) z+ e+ r. U: S% K0 w$ M+ O
|
|