|
|
源文件中_Interface文件夹下WndField.cpp文件6 ]: q% f8 N" D, _
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 A8 I$ y1 i' x1 s2 ^* |
7 x2 ?( m- {9 y! M: Q* o% n( ?: E: gstruct sItem5 ~# o* P2 S; T( C3 }
{
( i3 m# W# y) ^, d2 PDWORD dwId;
T. y& L! o/ D IDWORD dwKind2;
" W( e3 K6 b9 }3 k QDWORD dwItemId;
: E- i/ E8 j y- wBYTE nIndex;$ f( U1 y" S Q! b
sItem(){; r5 t2 l$ k! C
dwId = dwKind2 = dwItemId = nIndex = 0;
% q8 j* y/ n- h. H/ \1 W- G}1 h! U; f5 V$ s5 X# \
bool operator < (const sItem p2)
t2 j; t" A: i( {( A" s9 \{7 a8 E/ c6 ^* \1 \1 k2 }; {
if (dwKind2 == p2.dwKind2)
& z# s- d5 Y' [* s& n7 p1 G- E {
+ n, k' X0 o% a- | h3 s return dwItemId < p2.dwItemId;
9 b$ h: ~$ h7 R' l; e9 N- X }else{
0 p# q3 a% Q; V3 N0 D& K s return dwKind2 < p2.dwKind2;4 ^& Z* C0 d9 B8 e% b4 r
}
]. U* h' o8 A* k {# b3 M: n$ Q5 f}1 h0 O1 q+ s! C7 i
};* F2 F- h2 b# ]# v C4 d
class CInventorySort
4 h5 e3 ~9 W5 ~7 E{! @+ ^& }7 ]& M: L* ]& |
public:- \$ g: P- l3 T) T' Z
CInventorySort()$ l( }! R( P$ G
{
, a9 g+ R H G" W: s& E% S m_dwPos = 0;
3 D7 G9 U9 j! s# n" A/ }) K" c# N}6 P7 ?; v8 J- a
~CInventorySort(){}
6 M z- ]2 q9 T. d4 r3 m. T3 zprivate:7 ?( S% L* Z. _( t0 F4 ~& n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ S- W+ o* m7 R P# d# U
DWORD m_dwPos;
+ u1 s- T# d8 M. t. ipublic:
' A. f6 p7 m0 Q; `/ Y7 W% j3 Tvoid Add(BYTE nIndex)
. e& Z/ B9 V' `: N# i+ J{, f8 U: P/ T9 J
if (m_dwPos >= MAX_INVENTORY), d0 L" ], l( G( u/ ~
{
3 P7 n- t' B3 x. Q* ^' K2 I return;
9 a& v4 @8 r1 c, d }
P1 D4 Y" h+ r( t# X m_Item[m_dwPos].nIndex = nIndex;# S- b* Y; m( I L- @
m_Item[m_dwPos].dwId = m_dwPos;
* G% o- F1 U4 O7 `2 ~ s* q$ ~8 S# d m_dwPos++;
; g& R& u! \ t5 G. m# h4 f4 e3 l( t}, \ o# I, X2 v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 T- @, W" x" m; s, G) W" E& y
{- s0 J6 J) ~' |8 B% a8 f9 y
for (int i=0;i<MAX_INVENTORY;i++)
8 ~: i' Y: r: y/ n {
( Q' I, ~3 \" y' H7 N5 J if (m_Item.dwId == dwId)
0 q, c1 \5 F- F- S1 i! B. L$ J {
1 P) h4 z( ?; y! L0 n5 s return m_Item.nIndex;' R, ~+ K9 _( U4 r
}1 x9 A- k0 G7 i9 b
}4 R* K! Q) u: [7 T6 B( i
return 255;
5 M# t$ Q! c; k/ @1 @2 n}
+ s. c: Z! D0 u+ p( evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, j/ m; S* p$ m7 w/ v# F{
8 |& u/ w7 M2 E BYTE nTmp = 0;
' P+ l r1 |' h- _/ c bool bDest = false,bSrc = false;/ }. z, X( [) y1 W" _6 @
for (int i=0;i<MAX_INVENTORY;i++)
3 D+ ]. ^: z. \, E7 }! [" X% B {$ z/ D) f& w: ?% f/ O, n: n$ o
if (dwSrcId == m_Item.dwId); _' ]. w" W' q% M: v
{
$ \6 |6 C3 O. w' h& G6 T& {) w9 c. q //id相等 则 改变对应的dest和src0 P" J# U: ^/ @4 _; K4 y2 f( ~) G
nTmp = m_Item.nIndex;
" J2 m4 E. I, r( l m_Item.nIndex = dest;: O* k5 u- v1 y( c i
}
) c) f- h8 r2 E! K3 q }# V' t4 g) e; v, n [
//临时数据保存完毕,交换开始
& E* G! u2 z( @4 a# [8 X for (int i=0;i<MAX_INVENTORY;i++): G, }. r& @, ]
{
0 T$ I8 O" r9 d# m6 ?8 f; U if (dest == m_Item.nIndex)+ s4 @$ y+ g3 h! u- R
{
+ z; K* G) C g4 {; p- W //id相等 则 改变对应的dest和src
2 g9 v& t) A: a6 e2 g5 U, p0 `3 P4 R m_Item.nIndex = nTmp;
# ~) ]4 V; a7 F3 a5 W$ q. j }& r7 [7 a4 X( i5 E3 V' E8 N
}
7 r+ @; B* v5 C4 [' K2 X* J}' I9 u3 g; o% l
};
. n$ s- B! C9 m! R1 h-------------------------------------------------------------------------
/ i+ {! H9 ^+ n/ q2 f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ \' n/ W- U5 X
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, G2 F0 y. U. r8 Z% n% |3 y6 [" y紧靠其上添加:7 s% ]3 x2 m1 u$ c+ L( N$ O. }8 o
if( pWndBase == &m_wndMenu )
6 g* t; S; A2 N! h x5 H{ S' y( `9 U _( G5 R. Q7 z
switch( nID )7 q4 X, w4 W! S; \
{
9 R' L7 S t! f2 |9 N case 2:8 n9 g7 `3 D% `$ O/ _0 t
{5 u1 h0 s5 ^; j0 d( x. r
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 X& h8 K- `1 T1 O if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% g3 [+ T7 Z5 X" c/ E- c1 ~ {) W& Z1 ^7 R# v" F9 I- c
break;
7 j# V6 z; W# s3 X }0 Z0 t/ v/ t/ N- u
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% F8 `2 h4 w8 @3 q {& ^# l. X) u6 m$ V1 S! K% X# v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 M/ ~4 b7 b% Z$ \0 k4 v: _2 Y& u
if( !pItemElem )6 w; }& q( c- l, O- x$ s; _% B
continue;
$ [- d4 g/ ]+ I9 ]9 d if(pItemElem->GetExtra() > 0) J6 I; G. F- \ C5 |: E
continue;
8 H n J# O/ `8 K- t/ Z* p3 e3 o if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - n! Z4 m( R3 l9 \7 b
continue;
' K) K- e& j7 v, r" x1 F if( g_pPlayer->IsUsing( pItemElem ) )
w! m' ~9 p) M) K4 N continue;$ Y( c% [' ?$ h. `
if( pItemElem->IsUndestructable() == TRUE )* A9 J) O& P/ ^1 r6 x
{+ v- m8 l& A/ y$ E. V u1 u3 r
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" }6 t3 R$ N% r8 N continue;6 M6 E/ b" v( A( X8 E" l
}' T: v; R. A1 S2 H7 w2 Y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% @$ O" D$ T! j- p
}! J0 v6 b7 O) m4 v, f
break;
" A l& _7 z! Y9 m3 T7 n7 j }
* X" l6 c v" ^6 Y3 x( a case 1:! l2 @# F5 B1 `
{6 k3 B; N1 t# _$ D1 r- J$ V+ F
//整理背包. b4 ]; o4 M/ S. K* {) a, a. S
//////////////////////////////////////////////////////////////////////////
6 b4 ?2 r; a8 v //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
O/ z) l. z2 _" v- C8 Q# e //////////////////////////////////////////////////////////////////////////
. ^! q& k2 t4 o0 \- y //////////////////////////////////////////////////////////////////////////
) i* N2 B# Z) B CInventorySort* pInvSort = new CInventorySort;% U# ?' j) u# g# m6 h
vector <sItem> vItem;) Q! {* b8 V8 O, Z
vItem.resize(MAX_INVENTORY);//初始化大小/ \) l; c* i# w5 Q, F6 J7 [& {
//////////////////////////////////////////////////////////////////////////! B8 b; f9 D3 W' i+ R
//填充数据
4 S; q5 T. x" X* p4 m+ R for (int i=0;i<MAX_INVENTORY;i++). k* v4 t$ ]) o/ Y. f0 C) _1 k
{7 h( m( Z6 I- ]1 n' C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 g0 l! m* j2 C( k# _( h1 ?
if (!pItemElem)' T6 t0 j/ k# e9 V- J
{
5 ~+ {# f h) s: ~1 B! e7 } vItem.dwKind2 = 0xffffffff;! b& {9 b2 N3 _9 T; F, }- Z
vItem.dwItemId = 0xffffffff;% |: u4 w/ J* _% g5 g/ q" e* A: z3 Y
vItem.nIndex = i;/ Q Y5 ?' v' f H5 @, D
}else {) f+ ^$ R# R+ _% l
ItemProp* pProp = pItemElem->GetProp();. K7 f- f8 k# ?
vItem.dwKind2 = pProp->dwItemKind2;$ R1 R8 @" s' j. |" k+ }# [
vItem.dwItemId = pItemElem->m_dwItemId;2 T' l7 W a5 q6 L5 g
vItem.nIndex = i;
1 Y7 O) s2 ~0 _) ?/ @ }6 p; Y4 S2 S% ?. Z& J
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 a2 P; i- |4 @3 @ }
/ U8 x' s8 g' G. g- A. _6 P" { //////////////////////////////////////////////////////////////////////////
@, x# P$ ?# M* m& {1 f- P/ l, K sort(vItem.begin(),vItem.end());//排序8 p" F% [! v) |5 s9 b
//////////////////////////////////////////////////////////////////////////2 }- ^/ e3 j4 `% R' G
//交换; i n8 |: w% w3 i
for (size_t i=0;i<vItem.size();i++)/ X1 a+ i% R( c4 H1 \
{
" v: ~4 |4 U7 p$ }. m5 N! N, l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 ?# e8 B8 Q/ X2 v2 r; g& C. s
pInvSort->Add(vItem.nIndex); J2 B. i& ^' A+ F; q) f
}
' b: m7 k% w$ p3 @ BYTE nDestPos = 0;+ d9 m) _( b+ g! ?6 v3 R
for (int i=0;i<MAX_INVENTORY;i++)+ T5 j/ v M `! f: P5 [
{
( C. d) H) J) W, k4 ~0 J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- ^+ ~2 I5 s) A! U% u* ~4 g2 ? O n* W if (pItemElem)
, v. n9 \5 q7 U {; |2 q3 v2 J7 r- d9 _! ?
if (IsUsingItem(pItemElem))
, c( Y6 F% I u! S. m1 H7 ] {, U H& B! r1 A0 \$ m3 V! I. L
//这个位置无法放+ c4 d% n. A) Y. t8 u# R/ I
nDestPos++;0 V. |- R8 |( B' W9 ~
}
; A: _7 p# K9 J. u }* j! s+ {, _6 Q! H
BYTE nSrc = pInvSort->GetItemSrc(i);
, w% N. x4 r! ?* k pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 F- p8 z( f: B3 a1 d if (pItemElem)! c$ a' c, B6 Y; a! _- ]/ [: _
{
0 z; ^9 `4 |" z. r4 y& q2 ~ if (IsUsingItem(pItemElem))9 X8 o" _$ z2 |) r8 I
{2 i) W2 P8 }3 Q1 P% }
//这个道具无法移动,跳过
B9 j* }; F% W! ` continue;
4 ^! v7 {1 ?) Y( c: u$ W }
* S6 A1 s% r# t3 v }else{5 o6 B8 _, e. M, L5 ^ G
//空位置 不用动
/ }* M7 n2 v* N# \ continue;; ^% V% h s+ U1 i
}
' t, N; G y* r* A0 u! b //////////////////////////////////////////////////////////////////////////% A( X; q2 s/ A4 g3 P( d+ B
//开始移动
! s% o0 t" p! x8 r. d6 T# \! u if (nSrc == nDestPos)
. K- x! n7 r: U5 E0 `2 D- X* a {5 W; Z; _. a* u6 Q4 F
//原地不动4 y: \& ^) p" B! H( Q* d
nDestPos++;& l9 @- m; c/ a$ y7 B
continue;7 B: L1 V0 Z* j; }
}# _' e0 U, r0 ~. J$ r3 X; D
pInvSort->MoveItem(i,nDestPos);
+ Z. w6 C$ L9 _9 X! ] \ g_DPlay.SendMoveItem(0,nSrc,nDestPos);) S/ X/ f, `/ l8 H
Sleep(5);
: {$ S7 h8 K1 `0 n4 A* E: e' k, L //Error("移动 - %d->%d",nSrc,nDestPos);7 Z9 K: Y. v( k8 u7 y2 h1 d1 ]
nDestPos++;
2 ?! ~5 V% `5 P+ r3 b }7 c0 Y, B* o9 F, U. m
//取第一个元素的信息+ N/ Z, F9 B6 i, ]
/*
2 i2 H1 X6 k9 ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)0 y4 W. L3 f) g; b
{
0 C$ O$ S7 L3 V2 x8 h! w# Z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! n2 A( J* r6 V# c g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' v/ U1 I# K5 n# d ]& @ }
' W: P7 S% C- J" C3 U) J */
L& r0 q- l) a& p; y) t" V8 k ////////////////////////////////////////////////////////////////////////// |4 r# X8 u- z( A1 q9 X
break;+ Y1 j) ]9 W3 N+ G% @
}! ]) h, f4 q4 K8 G6 P; L0 i
} % M' m# [0 z8 k8 s. i8 G6 `9 ?* W
}. E; z# j8 f v" U0 o, R
m_wndMenu.SetVisible(FALSE);" r, `7 Y* u* B8 z7 r
, D. F9 K# w5 V' B7 x5 F1 l( a--------------------------------------------------------------------------------------------------------% W. [/ D0 W2 j# E; m
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ P1 m, K% @7 Y{
' i6 e. z# H f6 L$ E6 M# NBaseMouseCursor();, Y0 i! G+ n; s2 c2 `- K; b2 n
}# I, ]2 G8 u& R
在其下添加:* d# j8 e( y( L2 z3 _+ ^
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) B y% N0 t( B3 [0 N7 R# l. h
{/ ?0 i8 Z& J, v9 j1 c$ Y* ^
m_wndMenu.DeleteAllMenu();& Q6 ]" d6 \7 Z! z
m_wndMenu.CreateMenu(this);7 z6 y) q5 `# t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: j7 R# J9 F5 n: K+ P& ^( E
* N3 d8 O! A' t1 C% L/ d( N; @2 \
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' ]+ k, @6 l5 _5 C{8 q$ V7 H( D7 d: T8 C
//P以上级别才可以删除所有道具. n) O2 Z" p5 b; b) o& q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
k6 K. C/ x) i# v, o# }}5 m e) H [- Q9 N" u# H
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 z0 M0 ?& |6 `& j; ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 O+ T6 i& ?7 G! p2 P2 em_wndMenu.SetFocus();
, @6 f, u5 W6 O) F7 L3 ~, } v}3 l, R$ [7 ?. U% P* O; K
------------------------------------------------------------------------------------------------------------
+ [& r6 }5 {: @; g*************************
+ U3 h$ s( f2 U$ v# WWndField.h文件
- e2 P4 U( z) K% L3 C- L*************************7 T" S# C, O) r$ O: d
搜索:BOOL m_bReport;; x( C* t7 k# V E8 s3 c
其后添加:4 }8 u- D. l9 X. g
CWndMenu m_wndMenu;
$ L% j2 S7 H6 X9 c1 t" [$ i5 Q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 c: w3 f1 X- R, L( x
其后添加:0 h ]6 k/ I, L: @0 F1 \) o) V
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, S f5 f4 p# i1 Y& {2 p5 o9 p9 V7 W T5 }9 T6 r( ?
% a9 M2 l4 P- C9 i U$ `0 k* o. z |
|