|
|
源文件中_Interface文件夹下WndField.cpp文件0 `, e7 j) r& N H' C x! ~# R* R8 C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; _; p g# ^( k1 I7 T2 P- U0 x4 S& M/ F) `# B
struct sItem
4 B% X/ V7 l7 y! m) ?+ X6 `5 v{
: a2 u/ ]6 |* TDWORD dwId;9 T: J6 [, L$ g2 p
DWORD dwKind2;9 ~+ I. S/ L7 [. n! c$ Z/ @3 m
DWORD dwItemId;
$ R% ^3 k2 f0 I1 Y9 L7 @9 O; hBYTE nIndex;
% I2 I8 O# D% p* x- msItem(){9 [7 z: `- C b" n: Q2 S4 e- v% d
dwId = dwKind2 = dwItemId = nIndex = 0;
2 b/ h) R% Q- N" f3 A, [8 o r( j1 o0 Q}
2 B5 O- F1 H1 a) I$ dbool operator < (const sItem p2)
5 x8 z. v) l7 p& O: q& r: n{2 Q) X/ v, ^* S3 a
if (dwKind2 == p2.dwKind2)1 I3 S! S2 h: ]7 @ o: t
{
' n0 h* g( W% [ M return dwItemId < p2.dwItemId;
( M; @9 @7 L% A! N( S# ~ }else{" k8 K. z4 f3 e, z9 @
return dwKind2 < p2.dwKind2;
% x! Y# O1 G( W- m6 ^ }6 K9 A8 u/ l1 f3 O+ o) ]
}. c3 { S- O3 _% n
};& o. t, X8 s: @3 x# Y- R
class CInventorySort: @/ v7 s& s+ O+ b% L5 _' l
{& L0 G6 K: T) W7 z6 K9 v& ?
public:1 K- s/ G; _: p! `* n2 V
CInventorySort()
7 r# R8 f, }- n3 w- m& L7 V{
' M+ M: D1 P/ c7 q7 p: r7 _; `8 a% T3 m& w m_dwPos = 0;
1 r- u) M- |1 B0 K8 C/ X( c}
* [# c/ z) v, }* R* C# q~CInventorySort(){}3 @3 J- n3 T) y4 M5 o
private:! C4 L/ `+ O: P9 ~
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 F: C& k* `2 F5 e# i/ T# }
DWORD m_dwPos;
/ E, ~. v2 a% }. f0 S: ~ N; K7 T7 Lpublic:- h" a% ~* B; H' i
void Add(BYTE nIndex)
& _* H K6 z" p1 r8 r& p" `+ }& M{( c, V) J% X0 ]( W
if (m_dwPos >= MAX_INVENTORY)
, `/ y' ~. V: S; W9 i& e1 ~ {3 R( |. V/ N/ h9 h s2 A
return;
/ H5 z9 v# Y' C0 J: O( Z/ D) N }* N& @% z9 M+ q2 x2 k; v/ u
m_Item[m_dwPos].nIndex = nIndex;1 I( @' D0 X8 t, b
m_Item[m_dwPos].dwId = m_dwPos;
9 E g5 q6 c2 c) M8 R6 k m_dwPos++;: z# U+ j. `3 x* `, h2 U0 T- G0 f2 T: ~/ }
}! J6 e) V2 E8 q* H* w; o
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 C+ ?* L: V& a2 n" L$ [{# d% l4 G; q* \1 }. A
for (int i=0;i<MAX_INVENTORY;i++)3 l0 }1 \. |' `1 t
{" ]0 J S, X5 j9 n4 h
if (m_Item.dwId == dwId)
3 I* P- A# Q4 ^) ^3 V, x$ k+ ~ {
1 t8 ]# K" g5 g9 M7 { V; i return m_Item.nIndex;
5 T8 V) ]3 v+ m* F( f }( H* C4 G$ j, o4 I
}
5 b1 \% r9 \* `0 Y e. z return 255;
- Z# ?- g- B: `3 M7 D7 w- C}
6 W" d! v- y" o w1 ?: O" F: l. Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 W9 `* r: U3 S) U; `2 I ]- Q, o5 c{
/ F0 {2 P4 o |2 S! `& c BYTE nTmp = 0;
3 j9 k/ f5 ~1 W+ D% R: P bool bDest = false,bSrc = false;, a& L8 W& |$ J3 r; p/ D4 R
for (int i=0;i<MAX_INVENTORY;i++)
5 H) z6 n( b- I8 R {, g9 e5 i2 ?9 C
if (dwSrcId == m_Item.dwId)( \! t" i- Q3 [6 e' \% M2 `
{
& S# ~' t2 B4 q s0 c //id相等 则 改变对应的dest和src/ }: K3 `5 T5 _2 |! ~
nTmp = m_Item.nIndex;; S% u# T7 U. [
m_Item.nIndex = dest;
9 t1 P s' k6 k3 V3 |3 c1 { }- d! ?4 T. w8 W
}
! W* y! s( \; P, a& V //临时数据保存完毕,交换开始
7 y1 t( J; m/ a$ m for (int i=0;i<MAX_INVENTORY;i++)
2 c/ a! W4 E, n6 d {2 [) \; z) t* P/ D) b
if (dest == m_Item.nIndex)
, J, `. o1 [- }' ~0 h# z. y$ s6 g {8 O) @- Z& y3 k; D8 L6 U
//id相等 则 改变对应的dest和src
0 R1 u2 H0 [ c- G3 n4 ^ m_Item.nIndex = nTmp;
0 B; R7 L' h. b0 e% y% R2 n }
' ]$ N, J+ c0 u4 W4 q, ` }
- U& y4 r, V" F}
4 m2 E/ N7 A& Z6 Z0 @};( n- a. J& A+ k% P* ?* @8 C0 R
-------------------------------------------------------------------------" |6 |- p& t$ u7 h5 X) T6 n
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& F' D9 @$ |% p
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 u5 |% H X9 W3 w. j) H+ a/ o紧靠其上添加:& C' N$ ^9 n, V) |5 B
if( pWndBase == &m_wndMenu )
- c5 A, u& D& _7 T7 \{( y* u; a0 e# E* _
switch( nID )
% V; R5 ?1 c% E1 ]* J2 ] {$ U0 f: V& D. f C. b% q% m
case 2:
+ r. u) J \, W' u* q7 t0 X {% T8 b; w% A' F1 q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 D' n$ M' G p' X1 K2 \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* `. i" V \ u
{
2 K* S4 R, n6 W: M8 b break;
. ?2 M' e; X! K( X" m) K" ]3 d }
8 a0 M Q+ x6 B- A9 } for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ l+ w1 y j# m {8 v& H1 u9 V2 i1 u$ r! f
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! L* R2 W, ~# | if( !pItemElem ). b& s7 `- z# _8 {& v
continue;
9 I ]% D! h( }+ a if(pItemElem->GetExtra() > 0)+ y, U/ ?$ n$ z' P$ h/ [* E
continue;
1 D2 Z8 G% U1 `; F$ O! c if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 c# T4 V6 d' I( C( G) a3 G
continue;5 J. P0 p' \ D3 f, L: N+ \! y
if( g_pPlayer->IsUsing( pItemElem ) )
5 Y& Q i5 `" @' B2 f& S continue;
$ G/ u* I2 l1 g* G# r# k if( pItemElem->IsUndestructable() == TRUE )& f/ L4 f2 Q) a% i
{
' W8 P) ?! p' G' y" j5 e5 `" N g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! S5 T# K+ ?+ f M/ y* y+ r
continue;
- W+ l9 D n" ?: o3 a }
% P- ]" N; q j9 V g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ ~2 x. |' _# U: L4 O0 T y& O+ h8 p }. l" ^/ z* d _% `) R9 v, O2 L9 M
break;/ f9 {2 y. w0 p
}9 O4 S9 o0 ?9 H1 p' [9 p
case 1:" k( z: |5 H9 i" I* _
{
) `7 H$ h# M2 K. d, u: k- g% V //整理背包# g T% o, b h# F0 s- Q
//////////////////////////////////////////////////////////////////////////
0 Z! }) X u) I) z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ C1 h: _* p) E8 n( Q
//////////////////////////////////////////////////////////////////////////2 _/ b8 v7 h0 K
//////////////////////////////////////////////////////////////////////////
8 y1 N% w. I( w) h- V3 h CInventorySort* pInvSort = new CInventorySort;
( Y. {: {: d$ Z( O vector <sItem> vItem;: R/ i" O7 z1 _. e9 @" Q3 x* c
vItem.resize(MAX_INVENTORY);//初始化大小
/ l2 G& @" c+ U //////////////////////////////////////////////////////////////////////////3 B3 e1 h* `1 J
//填充数据6 i( ?1 M9 I$ R. N% g6 E3 Q9 i _; F
for (int i=0;i<MAX_INVENTORY;i++)
; R: C0 o. T; c7 \; K {
5 C# E- M; W# j0 N8 N6 W2 D: K# _9 C/ W" S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( H7 X* z: e# V9 ~( U5 v7 u if (!pItemElem)
3 X' z1 w5 \2 ]3 P6 X {
1 l& q2 x/ y' {' Z2 K vItem.dwKind2 = 0xffffffff;
5 S. Q2 _3 j# p7 _ c- q. o vItem.dwItemId = 0xffffffff;
1 b, T# q+ k) n. M9 t0 L vItem.nIndex = i;9 m( A6 @. E7 R" J" E# B* U
}else {
0 M6 t% [! |1 L) ?% V& m3 Z ItemProp* pProp = pItemElem->GetProp();
! f5 m% E- w$ L( B vItem.dwKind2 = pProp->dwItemKind2;* i; X4 g7 j# k, h( r
vItem.dwItemId = pItemElem->m_dwItemId;3 `1 q' u" j% f3 {+ f2 [
vItem.nIndex = i;& z0 e# I7 N$ @& X9 b& C Z
}0 T. x5 e) P! O) j j
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* E' N/ o2 O1 ^( T2 ~
}
w6 w# V! ] t& y4 V n //////////////////////////////////////////////////////////////////////////, a+ c' k7 t, e5 P) u [. M
sort(vItem.begin(),vItem.end());//排序
" V% c6 W1 D9 m //////////////////////////////////////////////////////////////////////////
6 S# c' Z# z, y: F0 A //交换
& a; t2 V4 |9 _0 S1 e) a+ Y for (size_t i=0;i<vItem.size();i++)
( Q0 ?: u2 @7 G, U2 ?3 r+ L {
" G+ X( U; M! H) Z6 a8 F //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 x# t( @5 f f$ l pInvSort->Add(vItem.nIndex);
1 \9 H! W9 Z8 ^( ]. b }
% f2 q U$ c$ l* o BYTE nDestPos = 0;" s% z3 {; G% T" [9 E' D4 z7 E
for (int i=0;i<MAX_INVENTORY;i++)
K+ b9 J: h+ |( A* Z( O {; g1 w6 [/ {" X0 [$ Y( w0 @& @: `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( t% @" X3 l/ c: T r" _ if (pItemElem)
. t6 [, B/ c' |$ j+ J {2 K+ \8 T q! M: d0 l. x- A# }
if (IsUsingItem(pItemElem)) ~# n& v+ O4 [' t4 E- Z& Z
{
* @3 t* t: c: g2 @! x$ ?# f" H //这个位置无法放
5 ?1 x8 }0 c% I nDestPos++;8 W; A+ w7 S5 T' d
}
* L e6 _ N3 f$ z1 M; s }3 L2 }1 e& y7 c! p8 W( L4 T$ a4 u
BYTE nSrc = pInvSort->GetItemSrc(i);
3 W5 r0 g! {7 Z- ?0 `1 d* e# V- B8 V pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 p" g, U5 R( [, U$ g1 m. [ if (pItemElem)
2 H! D* a ]3 C0 U6 X. M! z, P3 t {
+ o, O9 @$ I. |8 k6 {" ^! P6 L if (IsUsingItem(pItemElem))9 Z- V W; Q/ d8 g3 k
{
W" c9 o; O1 Z2 R! k7 D6 W$ {6 y //这个道具无法移动,跳过
$ l7 ~; x1 U; \ continue;: Z2 d6 A$ d8 B( d
}
% P. z2 n- p; ]. s }else{% Y( x7 ]3 }9 D7 ?$ s8 j
//空位置 不用动
: }5 `8 Y& ^1 _7 @ continue;
* M& a& P' Z. J# c7 j" u8 J9 Y }- b5 P4 S0 _/ R4 A, p
//////////////////////////////////////////////////////////////////////////& ]1 i3 W8 Y! V8 r6 {" |
//开始移动) u7 l% {0 R9 F) N5 u/ t
if (nSrc == nDestPos)
) \! o2 Y+ z+ Q: J+ s5 s {" z# b; ~1 X& d1 \
//原地不动* c: K( J1 {$ N( J* C
nDestPos++;
6 Y5 h5 `2 r8 y; m continue;
2 k; P! v' N4 k$ v' k7 j }
% ?' D0 e% M% ]" ^3 N pInvSort->MoveItem(i,nDestPos);) c& C( {" R; b3 w/ q6 q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& Q( g( ?7 j5 j: d8 k Sleep(5);
- l- s5 u5 [& U- T //Error("移动 - %d->%d",nSrc,nDestPos);! a3 ]5 E1 ]0 d) _
nDestPos++;
: R4 g, C5 B" L1 ]9 |4 } }
' i+ B5 n3 b. e E //取第一个元素的信息
: v* c! v$ s8 s: O /*
. F, l1 X) ?4 U( k/ ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* D3 q* J1 K3 a6 w) ?4 G1 k {
# u: u7 L+ j; {- L. V, R Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ [) a! w7 p( P9 j) z# O) I& t g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( m# y5 Y* R, H3 b) M' u. ~" @
}
+ l! p. R; b K5 D- G, K */
) T+ I ?! j' N2 R //////////////////////////////////////////////////////////////////////////
. u. R5 e: S) q3 W4 O0 U! } break;
; q. v1 J+ f8 \6 x4 J# X. @: ~ }$ l2 D9 i* V9 x
} & f) @9 @2 d8 P2 x2 N. R$ d. J2 }
}
Q/ v& H5 g' c! N5 [8 dm_wndMenu.SetVisible(FALSE);; L# t5 U+ `0 z( E$ t0 W
, w' ^- D. q. K! P--------------------------------------------------------------------------------------------------------& X# O# d, I/ M4 f \" t/ F
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& ]3 D" s( K7 s' a0 R$ {{4 o# T" i0 n1 _. M
BaseMouseCursor();
2 g) B7 ~! W8 C, l}7 h. Z( |1 W7 ?0 z* J/ D
在其下添加:: j! N3 _$ m$ o7 y& q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 ], t' x# J: t, P$ G
{
" f; C) E4 e+ H7 X+ u5 Xm_wndMenu.DeleteAllMenu();. ^" g. R l- V- h- G: ], B9 }* @
m_wndMenu.CreateMenu(this);
& U% P2 ~" \3 A Q9 Qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, d+ R0 j$ @' a1 U5 Z1 {, S9 l; o4 X+ D: l. Q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) Q: B% x/ L; O% P3 f, z
{
1 z8 h4 k/ n5 O; Y; \" c5 v) M //P以上级别才可以删除所有道具
) E1 K: |$ b. ^* y& f m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 k% C$ w. } S9 n}
) ^$ E, x& `3 n d3 V* S& `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. h' T. e: G) a$ _+ m8 d' c9 km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' a/ Y& U) e9 R3 W; B
m_wndMenu.SetFocus();
/ V$ e% N/ I1 j K4 |& Q/ i3 d}
* h( z" k+ R0 U; ]* ?" |------------------------------------------------------------------------------------------------------------5 I6 R* q7 M9 @6 U( M' D& L5 u" M
*************************
: V$ p1 p8 z& ~9 ~2 z, JWndField.h文件0 K& w" w b% K: d* j' F
*************************
{" \$ n j& N4 _搜索:BOOL m_bReport;
# w- Y" @. g3 k/ i8 C/ O其后添加:
( e3 K: Y" |- o. Z" s4 m9 D6 jCWndMenu m_wndMenu;
6 ~: z( s% A. d# }& ^搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, K! w1 W2 \4 F3 a Q& E9 D其后添加:8 ]; Q' K. T1 @& p/ T
virtual void OnRButtonUp(UINT nFlags, CPoint point);$ ^; @6 M2 ~1 P3 c' I
. s4 i- s. ^* Y$ l
8 M0 H. X' f6 |+ U) N1 \( }
|
|