|
|
源文件中_Interface文件夹下WndField.cpp文件; n! J( z- N1 q) w, {
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
k! a- x) C0 F$ Y: ? G1 {2 t6 c
2 y* {" E+ D/ b. I/ ?# pstruct sItem% W! i8 a: e5 o# Z( ^3 w
{
, S0 Q' W0 i: R/ C$ ^( m( b9 S$ cDWORD dwId;
% S" R0 v T" Q! O, VDWORD dwKind2;
1 f3 ~3 V8 q) sDWORD dwItemId;
1 ]6 R6 i1 C. j, x( S. _BYTE nIndex;" E: D8 _: g1 r, Z. `
sItem(){
1 a/ N& R, Y' O" Y5 ]! D dwId = dwKind2 = dwItemId = nIndex = 0;/ y: Y& ? S" w+ W1 C7 l, h
}/ p: L# J) e1 q1 S
bool operator < (const sItem p2)5 J+ \" C3 p8 k0 J
{
& u1 e1 [1 N1 V* e0 V7 j3 P/ R if (dwKind2 == p2.dwKind2). ^% O( E( X$ H4 W. r. m
{$ z' V4 [: I6 b! [1 r
return dwItemId < p2.dwItemId;
* s% O. X$ ]' P4 T- m F }else{
( O4 w% w7 T6 V- f# b C6 P( d* t return dwKind2 < p2.dwKind2;, t% a, m# s8 `' |! D
}2 i7 r! M5 I3 n8 S; l( D
}2 j9 ~6 F) O$ ^3 F" Q
};) Y8 s/ t6 @( D9 {+ z, |
class CInventorySort9 I" ~; f: O" q2 u
{4 G! |0 Q9 C) Z7 x4 Z; i; ?2 e+ g
public:3 S. b+ O3 | V$ a$ V2 b. V
CInventorySort()
6 S9 L/ N' X0 t- k* `8 S{
# o7 j7 w, o4 t5 P m_dwPos = 0;+ n% ^2 x* R9 R# Q6 @9 k# Q
}# |' k3 n6 T0 Q7 _
~CInventorySort(){}
- r$ E) V* f0 B4 \% g8 a6 v5 Vprivate:
. ?3 P9 }! d1 @" @" {9 RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 Y7 S) v( m, u( S* rDWORD m_dwPos;
8 D- H# u V. T6 M7 s, g- W' Cpublic:
" T) U+ a5 |/ f' Ivoid Add(BYTE nIndex)
r- E: D; {8 k{1 b' {5 r! @" Y% j ^
if (m_dwPos >= MAX_INVENTORY)
$ o* Y. I9 O6 b6 v {
g. Z4 s5 D5 D/ n+ z return;
* A& |0 V( l5 o1 `1 a+ M }
: Q& o' `# X. u* E8 [ m_Item[m_dwPos].nIndex = nIndex;
$ ?# z1 t3 Q& O# x7 k" K5 U m_Item[m_dwPos].dwId = m_dwPos;! Q# z/ ^* m+ S
m_dwPos++;! M$ k6 [% @) n2 m7 `
}; G# E0 \/ U. j) v7 P" F e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ h& Q6 x! W3 }6 P
{
" ~ l" @% S4 j! T+ \ for (int i=0;i<MAX_INVENTORY;i++)
) G, Y6 y" G0 M+ h; ] ~3 i {( C2 ?, q9 R* A) T) D' o# ~
if (m_Item.dwId == dwId)
( _2 I$ O( l) @' w& G( z& A {8 ?. g5 q5 A; M, @ T" ^' Z' d
return m_Item.nIndex;
! n+ d6 H) K& {+ [ }8 s$ ? d% \& }
}
0 c6 _7 M% K' {( E# S return 255;
" n1 `+ O6 y3 r1 C: E} [* D& J+ d) Z- G* @ A
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 z5 E v7 Q& N6 d0 o; n7 N{
+ ?- [' A' j9 f- j# t BYTE nTmp = 0;
. q" k, p2 _% O, T bool bDest = false,bSrc = false;
) [2 a, C, b. Y4 V% b for (int i=0;i<MAX_INVENTORY;i++)
" I( b D. L4 k* F {/ h% g3 H! N* M& z. [9 D# F2 s. G
if (dwSrcId == m_Item.dwId)
4 D$ p: E9 E# r5 ?! P- w {8 a" b, i9 W5 ~" H" F
//id相等 则 改变对应的dest和src
& v; _0 L2 R* _- s, M% z nTmp = m_Item.nIndex;; N' Q: v% ^5 L0 n. V4 C; N
m_Item.nIndex = dest;3 i2 y1 h/ ~2 `! O
}
/ h k+ B% v7 l1 g# @# I }, V' n9 ]' z4 C
//临时数据保存完毕,交换开始; u# u; R9 L$ ]0 Q0 S& u$ I$ j
for (int i=0;i<MAX_INVENTORY;i++)1 k- E% ~; g, A: L
{0 B/ v3 h" e ~ v+ }( g, ]
if (dest == m_Item.nIndex)+ \+ h3 ~; U3 `5 o& _9 U- ]
{! [* s* \! @& u
//id相等 则 改变对应的dest和src
: i8 m: [/ Y) ~4 O) Q m_Item.nIndex = nTmp;& r- A& A5 Q: \
}
" J4 G& X2 p3 r; E6 g" H s8 G }5 {, o$ b# a% [) i9 f" L
}
$ p) h* t/ X2 ~+ Z};
: e1 q/ C4 b% e' ]-------------------------------------------------------------------------
' _8 |# V5 `5 m; k9 R. h. ^5 d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ X3 M5 G' M5 A/ ~2 i搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
y( ^3 \1 O; s8 W W4 i9 G紧靠其上添加:
o4 _+ G2 h, U4 xif( pWndBase == &m_wndMenu )1 d2 K; W' l! P2 J
{
; c) h7 }6 Z. t2 { switch( nID )
! C+ N4 s9 G+ R: r6 i/ X {
w" N% _, W0 I5 ] case 2:# T3 ?$ S4 k$ u, L3 l
{
' w a9 G6 A( P' V& q6 i; Z/ s //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 W' m6 K" e5 j- n$ k+ d$ E if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" u9 S$ x" E q8 v1 a% P" O
{
) C3 f2 f( L% E' y3 P break;5 y) A2 @: a& P
}
/ G9 `. e9 V2 F1 _1 \9 E/ V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 ?4 N) [# T/ J; B% C1 H4 ^! ]* i2 t {! H" E8 D& a! V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. p4 m( g0 i+ b2 |2 _ if( !pItemElem )# D m3 L+ V+ x& _
continue;
7 A4 o( Z* @6 k! u if(pItemElem->GetExtra() > 0)& i9 {5 Q7 R. k: h) I: q8 _
continue;
( q( j5 P$ `: T2 T; S7 E+ j if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) a2 ^9 o2 ` Z( o5 Q3 Z3 q
continue;8 g2 P+ F$ |9 t( `9 l0 ?
if( g_pPlayer->IsUsing( pItemElem ) )4 @ p4 P9 v% u, W& H8 n
continue;' }# o, {( }7 k- w
if( pItemElem->IsUndestructable() == TRUE )4 ]- L* f( C/ A2 K9 x
{4 x- c1 I* N+ `+ x6 i, w
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );5 A) i/ o- `4 B) I; N' w* _
continue;. v; C( c) S' T$ a. I' s. }2 }6 {1 j
}
- s! o; @+ u R& g3 N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 m: V: \& E0 N4 z6 V/ u
}, Z9 l6 c+ `- I# u
break;
- H/ j! Z/ |5 |' ]5 M. k }
8 `! s, W/ L4 `" r { case 1:
: T% H- g0 o7 T3 e1 E3 O- I {
. B. a+ l: u5 J) R! { //整理背包
8 u6 ^' }& Y: A7 M3 S //////////////////////////////////////////////////////////////////////////7 C; L4 ]4 `; t
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- `- @# q0 n! H //////////////////////////////////////////////////////////////////////////, c4 H& T$ L8 [8 \, o9 g! [- ]9 q9 [3 w
//////////////////////////////////////////////////////////////////////////
2 U) Q$ `% b. M' X CInventorySort* pInvSort = new CInventorySort;% d% [( g+ Z4 e( \- P
vector <sItem> vItem;
. }: _: N* S$ b& }6 `5 ^ vItem.resize(MAX_INVENTORY);//初始化大小, s: Z' a- M: O' Q4 w
//////////////////////////////////////////////////////////////////////////( \( l7 o! Z. }# d! y' u/ k
//填充数据, Q7 H8 [3 z5 m/ `0 S B% L
for (int i=0;i<MAX_INVENTORY;i++)2 N& K- [# @5 _, ?
{
8 X& r! Q2 e4 o# ~+ r& {9 Y2 P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 K/ r; y1 \8 q1 w% m& S if (!pItemElem)3 w2 W V* S; }( T4 C$ F5 S( J
{
" ^# X& I0 B& y% G8 J. u vItem.dwKind2 = 0xffffffff;4 G' w- L; \+ `. ~5 s2 n, A" V$ E O
vItem.dwItemId = 0xffffffff;. ^6 U1 A) U. S. A: A( }: F
vItem.nIndex = i;
1 r. b' ~* U& r6 q7 o }else {
, Z& m7 H; l9 N5 R( I ItemProp* pProp = pItemElem->GetProp();
" D) X7 Q% ]: U9 r" |. _9 t6 N& i$ u vItem.dwKind2 = pProp->dwItemKind2;: [% i0 v3 n* H. p
vItem.dwItemId = pItemElem->m_dwItemId;
# A* B6 x0 Q) P vItem.nIndex = i;
) @/ l) j$ z4 s* R* O }# }, O# h' ]- ~( B3 U1 s8 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ ^; d7 [8 ~( g) j3 M1 U4 o
}
3 B, }2 {7 z% u //////////////////////////////////////////////////////////////////////////7 R# B: o2 u8 B5 W
sort(vItem.begin(),vItem.end());//排序$ B' I' G) Q" m( _; x' u. J3 q2 H: ~
//////////////////////////////////////////////////////////////////////////7 o/ k* W l3 }# X- c
//交换* b. _) J- B9 ~4 T3 y: z
for (size_t i=0;i<vItem.size();i++)
5 V- _' G* u1 C, @ {% {; F( T- B( [4 p6 x6 l
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 Q& O/ I4 J! E9 [
pInvSort->Add(vItem.nIndex);6 P: g# a" p. f4 a4 a
}2 ?7 c! J& o7 u' t. J( Q, B
BYTE nDestPos = 0;, M" _- X$ [6 ~& w `
for (int i=0;i<MAX_INVENTORY;i++)0 p% P0 o% n3 o+ A. Q
{
) `" @& b( n" u3 {6 C2 W) S* A CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) x$ d1 @$ N5 w" W3 @/ x if (pItemElem)
# S- i6 o3 X6 w {
% p' r9 u! I$ P7 r/ ^$ A8 _& Q if (IsUsingItem(pItemElem))5 Z8 M: i2 A2 J
{
2 P3 t# ?; D1 r$ v+ X. N //这个位置无法放. @$ X6 W0 m0 v0 c6 R: R
nDestPos++;
5 \0 m5 E6 ~/ W% w8 D+ l }, ^- m" S( N9 K3 T* K
}
+ l4 U* r' t3 ?3 J t/ Q BYTE nSrc = pInvSort->GetItemSrc(i);- k1 F* w. W. `" ]# f4 {" V' \; V
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, }8 V0 d# |% `. f/ U' Z# c
if (pItemElem)
7 h' T/ m- H, M( ^( r+ [ {
3 c' n) ]& l5 O; \! a* A3 b if (IsUsingItem(pItemElem))% N C) ~ A& G. K
{
5 m& W5 }, e7 a/ o) a //这个道具无法移动,跳过
& u+ c W E; I C- g- c* R" V continue;. q2 ^2 \- P' x: |& O/ D" B
}
/ Z8 b5 M3 K/ ?: T: G5 c }else{
3 \: E* T9 F9 W$ i& K //空位置 不用动
: U; e; l# n; o/ `# q$ X continue; f h4 Z' t& C: {0 k( P
}' Q2 L. z6 O5 J) E9 s
//////////////////////////////////////////////////////////////////////////
) I- K1 H! O5 w) y; J //开始移动: P* Z8 Z! J* `8 I% h
if (nSrc == nDestPos)
" z$ T4 o. P6 h+ D/ P' } {
( h8 x* L& K2 y: n //原地不动
. H# A1 |6 {# N' W1 b nDestPos++;- M# K. U2 T& y6 m O0 U% e O" Q% x/ |
continue;; `5 r- [8 Y, q8 A3 ~' w# R# _2 K
}
, ^2 ]7 s' O$ ` pInvSort->MoveItem(i,nDestPos);3 O0 C. f9 Z, m j" u+ s/ b
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 h8 @: |( o! s0 N! l( X: x Sleep(5);
. r o7 Q/ O0 J% u9 \% { //Error("移动 - %d->%d",nSrc,nDestPos);
l- N" k! c$ t nDestPos++;
$ |3 c5 [6 ^+ p4 ?4 u' t }5 n% b6 r9 J2 @: D; N/ t: d
//取第一个元素的信息/ f$ |" n9 M7 G8 f. o
/*7 D4 l- y! q6 O, K/ t
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 {! ?, N6 @$ F, z$ ?) K* G+ D" J {
c% ?- v# t$ q3 X# S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; P+ a6 R! p7 @9 Y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 z; J+ ?5 e. v8 R5 h( K+ u" Z }
3 X+ ~. I s; f% P. W0 q7 b */ ~$ q1 R8 C/ K3 e9 w9 P
//////////////////////////////////////////////////////////////////////////) r1 V$ o* e( m- a) C9 s0 o
break;
" m# ]0 H& ?3 p& i* @" A$ ~ }
& ]% |3 D- ]( b3 y }
( {* S8 a d K- i; H) e/ e5 c}& M2 `5 v( r/ _% f
m_wndMenu.SetVisible(FALSE);2 ^0 }9 t `) E( [! b1 c! M
: Z6 }. ^8 x g) ]
--------------------------------------------------------------------------------------------------------- }$ d9 C( o' u. E2 F
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ X! w+ n4 Z5 t* E) ]& z{, I. I# S2 N: Q% \ S" T0 s
BaseMouseCursor();
: M3 Y+ r4 E& M* K o( a}
2 D- P, w* x" q在其下添加:
3 G& ?- R8 p7 d8 Z, q1 N2 s0 avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 q8 c$ \* F: t; ^7 Q{9 s$ Q$ S6 ^7 z
m_wndMenu.DeleteAllMenu();
1 [3 p# `/ `. H% ^4 N1 h/ T" lm_wndMenu.CreateMenu(this);
7 b. Z( R) D& W) K) `; Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 n" n6 W$ S0 P+ I9 {
$ d1 Y, m. y0 C+ iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 ]1 q; l9 \: ^- z{0 }; j1 N1 t# p! v& G) p
//P以上级别才可以删除所有道具
, H2 T+ T/ d$ y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 Z' \2 c0 E$ p/ w- a
}
; N( B) l, q# s! A4 L: Jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 K' v# `: K! T, w# H) @" V# {5 `
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! n4 @) K2 K5 s3 q! w( am_wndMenu.SetFocus();3 ^6 S# I0 ]* w# \8 {9 @2 g
}% |: T7 d! @% i9 g4 q4 K
------------------------------------------------------------------------------------------------------------
' Z9 J8 n# O0 g% c- q*************************
/ |6 j& S2 v; Y% s) ]" C) }2 CWndField.h文件) ~& g5 k* R1 B; q# M9 G* F
*************************7 o: e. A, n1 r! W) X
搜索:BOOL m_bReport;
3 K% I. v; F: z: P' |: Q其后添加:& T }0 D6 Z: D# _
CWndMenu m_wndMenu;( j9 ~7 n+ C% w6 g+ U! ]1 t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- `$ b3 T% I5 F8 N# w其后添加:, f; B8 R" @3 ]: ~
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 X' h* H8 h+ F" }
7 N4 W( h, P7 [( z" ?
& O9 s; X% D1 V" Z7 i. C& S% t, q |
|