|
|
源文件中_Interface文件夹下WndField.cpp文件& w. k9 K2 e0 K0 Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# Y/ w n- P+ j- U) a4 c" F7 }$ y: }; O! @& y7 Y
struct sItem
9 \6 R+ E8 t$ F: i& ~. x s{" ] X) {$ q8 t
DWORD dwId;0 s' X4 J! E5 U6 {
DWORD dwKind2;5 S! X! J3 T0 A7 x. J2 |
DWORD dwItemId;
1 N, l, s# E- t8 @, |9 F2 e1 yBYTE nIndex;
5 l. m$ b& c; G6 {0 LsItem(){
% [9 `* S& v# N$ @+ |- Q dwId = dwKind2 = dwItemId = nIndex = 0;
. v; ]1 Q" D9 K( [}9 {$ N9 M: l3 F6 L b( L
bool operator < (const sItem p2)5 P+ @3 ^; ~' p) C6 S
{
) x5 {8 E. b5 a, W, a; g if (dwKind2 == p2.dwKind2)0 c) h; M* v' n# D. H
{
+ U# y6 C5 R, H return dwItemId < p2.dwItemId;' F9 Z5 _$ w+ C3 G
}else{
0 J5 i! R% O# I2 O return dwKind2 < p2.dwKind2;
, u3 b$ u5 H" a- p7 X5 ~ }
7 W) ?8 t$ F C5 E* ~3 d1 L' \: A) ]}
# @2 ^% M' y* [};
2 Z" H# B: ?4 f' g+ Fclass CInventorySort6 ^3 P$ ^2 f: O) {+ q0 B/ F
{" I0 z" j/ R, X, M, N3 |9 }# [& `
public:2 ~ G! j8 ], Y5 ]5 l% H9 V, h! g
CInventorySort()# n( ~, E, ]8 c! `- B' O- D
{7 _! [) g4 J7 m2 K# U" ?: T/ P7 y( r
m_dwPos = 0;$ \' K2 s& C( S9 b9 O8 w' t6 m% s) A
}! b9 L. U: B7 A$ o6 F
~CInventorySort(){}
8 ~7 X2 F: N @( w4 Tprivate:; u1 y) i2 h- h# h7 f& a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( G0 m. i) J, y
DWORD m_dwPos;' N+ Y/ b' S5 A5 Z' w/ N- v: x
public:
8 Q U1 @* K9 i z. `7 vvoid Add(BYTE nIndex)2 q9 Q" i" C7 `% }# H
{
2 D* F+ f* _( u$ F5 O3 c& h8 |5 J if (m_dwPos >= MAX_INVENTORY)
9 H+ }; L6 A7 g3 M1 v {
6 {7 R6 H& v5 E$ R& z5 h return;# O N" a, L' U* T. B
}
- Y* c( V! ~! j m_Item[m_dwPos].nIndex = nIndex;* ?2 {( L' Z/ l- S
m_Item[m_dwPos].dwId = m_dwPos;
$ Q( d, v: `7 S8 c3 w0 H8 w m_dwPos++;! g7 [/ |4 l1 p9 f; v7 Z% r( W
}* I, Y; j: G4 R1 H- ~6 C
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' ^* a$ U5 W7 C1 ?2 u) r{' }6 m2 Y2 ~" S, {5 k) \" m
for (int i=0;i<MAX_INVENTORY;i++)
; v: Y; u& W, E# `! ~ {
; g4 Z- N2 C3 s7 f! k0 O% I/ T7 F if (m_Item.dwId == dwId)' Y% `2 i9 k$ \% n, K3 i
{
: `/ `$ [% S c( C return m_Item.nIndex;
$ S* q! X7 j/ ]6 F4 ^ }
2 x4 }; O7 Z K& D) P }: j8 Z! v, B) q. R( E
return 255;3 J# Z! F3 C: ^ q" L, v
}. `, {2 w6 ~3 I) ~0 [( m2 z* @
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 `' v) e* f% c1 Z{
% X7 V( V D+ Z! S" I# ~ BYTE nTmp = 0;
9 q( m* r' |, ^7 y6 R bool bDest = false,bSrc = false;6 C1 w% H/ Z& R! b
for (int i=0;i<MAX_INVENTORY;i++)' L( C P. D! \+ o
{
2 c" S. w8 z4 \$ a0 I if (dwSrcId == m_Item.dwId)
' y5 f+ \- a% G: a* y; o$ Q8 }7 |1 C {
$ r7 T, o0 [- s J9 g, j //id相等 则 改变对应的dest和src
7 D9 W: I/ i; }( H' Q& v. W nTmp = m_Item.nIndex;. Z v4 k3 q' V
m_Item.nIndex = dest;$ p3 n2 F: U! n' t# O( p( ~
}( {2 P; e' m& S2 |
}
# y8 U) m$ `) q$ U3 g0 X //临时数据保存完毕,交换开始6 c% U9 Q7 t1 b0 r
for (int i=0;i<MAX_INVENTORY;i++)6 }1 h; n2 e3 H
{
& A. N2 O+ U5 J1 o if (dest == m_Item.nIndex)
: \$ j! \, @! @! `' y* ] {
" P0 V* Z/ d0 B- l3 T6 q& ~ //id相等 则 改变对应的dest和src I4 `9 d' D7 t# {$ c4 Q
m_Item.nIndex = nTmp;
# {3 u- N3 G" n3 N. o, s }
7 N" [' N& b9 E6 o9 B' u, { }
/ H1 b9 S/ _8 K9 n}7 Z5 y) g' ~8 _2 l9 T5 Q0 T
};
* s& z" \. _% b6 C-------------------------------------------------------------------------4 I& h* ?! a# {, h5 i! |7 Y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) S, ^, t# s5 P/ G# F$ k# ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 [, a1 }4 W3 M( }紧靠其上添加:
& o" }. J# r' D* _3 F5 v+ Jif( pWndBase == &m_wndMenu )9 Y" E8 M: G" D' k) ~: @, |
{% W$ x4 ?7 F; H5 ` S
switch( nID )0 h. x8 P2 [( W
{
3 R, t$ S$ |& `. g/ v case 2:8 d" w% L9 s8 p5 [. L5 H" B( q; [
{; X: C$ c6 ~, c
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 r, ]- l9 ?. I
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- |% } J7 F; g. ]9 K7 A
{7 V! `# r8 q! n: [& J) f6 d9 Z5 A
break;
, ~) d; ]5 D# x: E }
6 L5 y4 l! y. E3 e for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' s; g' {) w$ b0 A& `
{; T9 U+ v4 S8 z* G8 x8 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, d7 l$ V& m; P
if( !pItemElem )
8 ^; X( o) N. m$ Q m$ ~5 p continue;- ^ K' s+ p" X% ?1 A' f! K
if(pItemElem->GetExtra() > 0)
: \( u& w- y& V continue;
4 B+ z% S% \1 L; c if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. I2 N M- g1 ]' A# V continue;
2 m! i$ |' A, f# `% ?' F7 g if( g_pPlayer->IsUsing( pItemElem ) )
3 M$ K5 C. W) _ y continue;- g4 {% o7 D2 b4 [5 U7 S8 d. Y+ X
if( pItemElem->IsUndestructable() == TRUE )
5 z: A9 ~: q* ]* k6 w1 { {
# G, P' y6 Z9 g9 R/ y3 K5 W H; B g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' q% Y$ d. ?3 C; W
continue;
; f9 m: b5 \. s( F' G' { }! E( ?2 y/ k5 ~% Y' b- A8 Q$ \
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" p4 G0 ?. G3 L* U3 O }( m* }9 [" D: w; \ D# _! G6 A1 q
break;! z# P1 H" D8 O
}5 Y$ P1 O4 V1 R' Z: u
case 1:2 ^$ Y- I( w' \5 W) Q
{
u) _/ W2 G3 z7 P2 H //整理背包
% }2 y, `% v. f' u //////////////////////////////////////////////////////////////////////////
. o+ M5 O5 }! u$ S5 s% z( V //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: A8 _8 {2 w3 |! ~4 I: h1 B( Z) P
//////////////////////////////////////////////////////////////////////////
' N4 e, S+ |7 r. f. v //////////////////////////////////////////////////////////////////////////
: t" A; C; W6 X6 V2 ]2 F CInventorySort* pInvSort = new CInventorySort;
5 D% J5 S/ Z l& `, b4 ] vector <sItem> vItem;. f3 ]3 I2 \; K# T! F) w3 f C
vItem.resize(MAX_INVENTORY);//初始化大小
/ V) V' Z5 p# I0 i7 N: R" | ////////////////////////////////////////////////////////////////////////// a6 a4 r" @& `! u2 f7 \/ f% U6 {
//填充数据; {. K4 a9 a6 W1 d1 S6 g
for (int i=0;i<MAX_INVENTORY;i++)$ g! W0 c. @' l3 g
{9 H% H3 b+ ^: J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 e9 d1 b J% N$ y4 u1 O3 w if (!pItemElem)
+ j* |- d) M0 H' v p6 e( n$ ?( j {$ z" z. g- D6 c
vItem.dwKind2 = 0xffffffff;( Q" n# T5 o6 k
vItem.dwItemId = 0xffffffff;
8 K: V( e2 }, G4 E vItem.nIndex = i;+ E$ ]& }7 N7 d0 X& m
}else {( `) S$ {7 _- J: \
ItemProp* pProp = pItemElem->GetProp(); K9 d! r1 O" \& S5 K
vItem.dwKind2 = pProp->dwItemKind2;4 ]/ I3 c& W( o
vItem.dwItemId = pItemElem->m_dwItemId;
: ~# p z' t' r4 X vItem.nIndex = i;" ^" Q* l [0 q9 u+ O7 F
}
7 H! j& e/ L6 i) } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 q( x8 W% {# _% A8 n }2 B9 D) c0 Q& U7 ]3 B& Z* u# L J6 [% T
//////////////////////////////////////////////////////////////////////////; w" ]1 ^0 x& v Q/ k3 z- W+ T
sort(vItem.begin(),vItem.end());//排序
) K* f5 S! U5 Y( t- f //////////////////////////////////////////////////////////////////////////
3 q, R/ q: ^9 l# g# y //交换1 S& ^0 z% d7 q; V
for (size_t i=0;i<vItem.size();i++)
, y- a9 {- N9 [3 E+ F$ g {
% L% Z6 w6 w2 s //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- r* U4 C$ w6 |, p
pInvSort->Add(vItem.nIndex);
- W$ B0 H3 X4 B9 M' D$ w }
# S3 ~* M; ^' l; I8 b! r' {6 W; f BYTE nDestPos = 0;4 S% j; e9 H% x& M: y/ ^( @
for (int i=0;i<MAX_INVENTORY;i++)
7 [8 O. w6 X( F {, h4 b3 s8 C- |% l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 B; a! R6 x3 B1 V
if (pItemElem), ]6 t! Y* ^# j0 W% a; V% @8 y
{
% j0 |) M1 x0 `) Q$ l1 C if (IsUsingItem(pItemElem))
# |! c& m4 C" H4 e' m3 t: d% B( e {" W/ b0 ?, h7 X6 {
//这个位置无法放
$ {* X: C2 M8 g* `% ]$ U. P; K nDestPos++;# N: w/ Q, Q1 ~1 L# X9 v& G# u/ s+ Y
}+ `8 `- f) ^3 z: _! _; m. W! N
}* L# T( x$ j {5 N$ K
BYTE nSrc = pInvSort->GetItemSrc(i);' ^4 ] D* w& O
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 h9 n5 i" ]! A0 a if (pItemElem): ]/ Q5 m! }7 p1 t7 m
{
. ]- i) H( i( `2 e3 z if (IsUsingItem(pItemElem))( z# S9 b1 S: {3 U) ?* h5 r9 Z7 f0 m
{
# H' ~( U$ k# D' W //这个道具无法移动,跳过
) j$ M' U( P- T continue;6 [+ C3 o) ` A; g( o
}
# U9 T6 w }/ \/ ?5 m }else{, i# |! t! S2 S- H, D
//空位置 不用动% Y3 s& ?/ E/ C
continue;
' L6 ^9 r" n2 `0 U' K }& b5 a- w% i& N: A
//////////////////////////////////////////////////////////////////////////5 M8 Y2 [8 [& Z
//开始移动. N6 H" Z$ m7 ~: E
if (nSrc == nDestPos)
* K+ `; w* P" L* r8 d {! u1 |' y- D- L
//原地不动
+ O! C2 @3 z# [& z nDestPos++;
' p. l& {- d. X# i continue;2 K# a) g) L4 O8 E7 r
}
' r, B: v: I; x1 Z# o* b pInvSort->MoveItem(i,nDestPos);
$ S0 l; ^- a; u' ? g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ F) U% k; F+ v h6 H; ] Sleep(5);( Z; E& ?& T- \- }% g" \ p5 `
//Error("移动 - %d->%d",nSrc,nDestPos);
, c! a9 u; M8 g/ @" v, g6 D) I nDestPos++;
( v5 H* S& D- F+ o( ~. c }1 Q. v6 o+ \4 M/ @, H% B/ y# O
//取第一个元素的信息' u' g0 X6 z+ Q# B' @2 ]
/*
% V# D" M4 I5 g if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- \! g/ H3 X: W: D
{
: X' c8 {0 l, b9 L) {$ Q+ N Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) B' T$ {0 f& D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
* v6 q2 L$ i" O9 m" i9 ` }
5 P" @9 j8 G- U3 J& ^9 i( I* A9 u */
! {( _- x& u2 r; `- _. A //////////////////////////////////////////////////////////////////////////! B% M) g8 d9 h9 D5 l7 p$ o
break;
1 g( ]* Y+ Y/ A, H/ ]+ m5 ?, [ }' Y# \- T' u S! i5 a
}
4 l, k6 C0 ]9 I}+ B) ]- U K# V* b) d ]1 [
m_wndMenu.SetVisible(FALSE);! g0 U& t0 Y; @6 m% M0 S2 o+ _
! |6 @0 s" {3 \, W: G: Y
--------------------------------------------------------------------------------------------------------, ?1 y1 s6 c; k9 B( @" c2 {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, W/ d# q: A% S{! u% F0 r' G* L5 v
BaseMouseCursor();
+ \- f5 o" [$ t3 |7 F}
/ b3 {) N# H3 h- o/ Y4 c% u在其下添加:6 t8 ]+ L) E b9 _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 j; z% ~8 k7 H- `) i# U{
# L+ |! [0 Q% Im_wndMenu.DeleteAllMenu();
! a' {, ? i* h5 ^$ t8 S2 Zm_wndMenu.CreateMenu(this);( A" I$ C3 v! B- o* v+ q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" [) d% M5 z% e! \+ D& J
. G3 z: }: V9 e1 k' hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" Q0 I9 X( a" [9 G8 t{
( W5 t6 P% x9 K' f3 p //P以上级别才可以删除所有道具
) ?) f' T3 J _2 d$ Z P m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
. R% Z( Q6 d% e4 }- i}. \! e! s! G; x B5 p; E
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 y# w$ U; C9 T1 A! |4 K" w- U1 W. y2 Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: N0 e, C5 U1 _- [m_wndMenu.SetFocus();7 T1 W/ d( T6 j
}
" g$ F/ l; x" Y( n6 F% h8 v# W5 J------------------------------------------------------------------------------------------------------------
# y# c9 l0 |+ r4 F8 y0 _: R _ G*************************1 p, Z; j; M# K% g* q/ D: B$ f) d4 E
WndField.h文件
0 L4 x) {0 {) S) }: m1 T7 q/ s7 t/ U*************************
8 o# }3 w8 h' @3 Q0 f& y搜索:BOOL m_bReport;* T9 v% J2 o2 K9 K& Z& Y
其后添加:
6 q% M6 a( @- J/ s/ o2 k' T9 LCWndMenu m_wndMenu;; l8 \2 M5 B1 t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% `0 `* k1 P3 a9 T1 Q& G
其后添加:7 Z w0 n% S2 k. f6 \4 G; A/ r, I
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; |3 U$ J6 W$ L& P# I; G$ |) C9 b
: c# ]5 b3 X! C9 x& l* y0 ]
4 A4 v! c( \0 r |
|