|
|
源文件中_Interface文件夹下WndField.cpp文件
4 C4 U3 @- [7 p+ I搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( m1 ~- y3 b8 F. v
# d$ V: j1 s$ }/ Sstruct sItem6 S' c( F& e4 E8 |: W9 |
{- e7 _) p/ y1 i( W/ |
DWORD dwId;/ x5 f1 v/ p6 u! K9 T8 K& T
DWORD dwKind2;
7 Y% d U% C& D Y4 gDWORD dwItemId;
" F( [8 k$ ~( F2 @4 u( L! lBYTE nIndex;" E$ k1 i5 p+ p3 ]3 M
sItem(){
% n8 j( n4 X' @3 ?5 f dwId = dwKind2 = dwItemId = nIndex = 0;: O" [" D: ^5 H
}
2 z8 }9 |5 A+ S$ S: N8 g) L/ obool operator < (const sItem p2)- o6 a) s, Y! ^
{ V! ?/ z% T: v3 |7 M+ o; z
if (dwKind2 == p2.dwKind2)5 O$ ^: r, i6 E. D
{
1 }/ {: T. b8 w m' p @7 v& Y return dwItemId < p2.dwItemId;
* ]- N6 o! y, P9 J) N8 v }else{
) O5 N; `. |9 e return dwKind2 < p2.dwKind2;
3 J+ p5 f4 ?9 Y! l0 S" R# t }8 B! _) e8 A. ~$ c6 P! h
}' ?8 R8 c/ n% s: H8 n1 D
};0 w ?7 ^, d6 N8 _+ l' N( Q+ D
class CInventorySort
# \. y6 @5 B9 F{, W2 g X* G% U& }* ]
public:& w0 @' M* K# ?# ]
CInventorySort()0 w+ W" P3 r" H5 z- H& h9 J
{
7 d$ @% p' H5 P4 q m_dwPos = 0;- U4 o4 G- h; k: j n6 h
}. a; b; C; n" w& `- p
~CInventorySort(){}
8 M7 G$ _) X& k. l, Y3 Sprivate:. Z1 I& p- U, e' z S. k
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! F# ?* V. p! r' i% tDWORD m_dwPos;2 V+ \9 D6 S, g/ n- I
public:
, d3 T( c$ D3 i! h, Gvoid Add(BYTE nIndex)( C0 `0 X) c+ V6 N8 S" [2 q/ X1 T8 i
{
9 o& v$ B9 U9 f6 h7 U- B if (m_dwPos >= MAX_INVENTORY)3 C# a z0 U- Y" l* ^8 C# C5 }
{$ _# a6 l+ R/ m* Y4 e
return;
Z9 w, X9 I% o1 e }) q9 k0 O( c8 \4 A* y6 Y
m_Item[m_dwPos].nIndex = nIndex; Z" Z1 b9 t2 N9 X; o
m_Item[m_dwPos].dwId = m_dwPos; S- J3 @0 @- @0 P3 @* m+ u9 `
m_dwPos++;
2 b/ P O5 O6 w# x8 l) z}
4 E4 d$ C8 R3 {. I0 OBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' u! ?6 C3 X( w5 W) y6 ~. w
{
; g: W$ y, ?* d% n for (int i=0;i<MAX_INVENTORY;i++)
% C$ n5 Q+ w% ]# k2 B3 ^ {
" T! O" H4 I" I. I; Y! f if (m_Item.dwId == dwId)6 ?. N8 m! ~0 e2 P' j# e/ e
{( q0 J$ W& e- |& E
return m_Item.nIndex;
: p8 l3 T' n" m' d, B) p }
2 J, C7 g$ L% | t( e8 c+ K }
! S9 ?* L) `7 i- f. j7 R return 255;
( |. d& q) I" T" E$ {# L& |}! M$ Y3 w; p0 s* W6 l" k d& D
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 m, w4 p z9 a; b3 c& h/ `
{
* `8 y3 c1 @ Y0 f; Y5 W# p0 V BYTE nTmp = 0;2 N; g1 U8 \) ^! I" I. u
bool bDest = false,bSrc = false;
6 m, P: E1 L" N$ p for (int i=0;i<MAX_INVENTORY;i++)" v9 X2 A! }( S3 Q9 Y& Q' m
{
7 D2 G4 q- G4 v9 ^( o if (dwSrcId == m_Item.dwId)- b ^9 T, D K4 \, T" t/ I# I5 f
{
5 E' u9 i% C1 Z: i; b! ~- a4 y$ @ X //id相等 则 改变对应的dest和src
# A: O$ p3 g: X# i* F0 G nTmp = m_Item.nIndex;- ~8 x7 r" `, {; A, P
m_Item.nIndex = dest;
' F) F1 Q! B& R+ ]; F0 X }& i: X8 k- R3 A" h
}
. r% I. [) J" [% X* x% H1 Y //临时数据保存完毕,交换开始8 I4 T' c5 Q {- x3 }# p4 Z+ J
for (int i=0;i<MAX_INVENTORY;i++)
9 S7 O7 C. ~; p: j2 q {0 I" @' j. U, t/ C% b! |
if (dest == m_Item.nIndex)
% {- W! H. {- h) R4 U* o5 W {1 p% X7 x3 b7 k. Y
//id相等 则 改变对应的dest和src
X7 R8 ^, _ A0 A: ~& A m_Item.nIndex = nTmp;
9 n4 O! {% r5 \2 Z9 ^ }! ^7 C5 i/ ?$ O) o
}! p3 j' t8 q* e5 S: _" q8 p
}* M1 v6 n O+ v N
};
) v2 E1 [) j- @# N5 |-------------------------------------------------------------------------
$ S- E: H: ~ h8 F3 I+ v9 o依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 j4 X5 q0 k- Q# |! j3 H搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* z, o3 f) s; X' J4 ?! A- Z紧靠其上添加:7 f. r2 F6 b9 n8 ~* y& X3 G: p
if( pWndBase == &m_wndMenu ), B' S7 U3 \+ N; Z' W( Z3 y
{
3 [) C5 {% x8 O1 ]6 Z, a5 s) Z1 D switch( nID )+ R X( `8 j9 o. h+ [/ e8 b
{2 ?1 U. \6 l1 [+ z0 ?; j" n
case 2:( [# K8 ]3 V3 d8 ?' a4 v- M* H
{ N( i' A- d. f& U/ w/ N2 P( F+ ?! m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 J6 Q2 R8 b, \* I9 a if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& y8 R' f6 `, E. | {, {, t. H5 t( D* H# ~& l: h
break;9 u: P g6 K9 `. o! n
}
' a% \+ X6 ~) x& w1 M. _ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 \! Q( ^# `: K( o* L {' b1 v W) s% l' c, F' `. d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 w3 e/ n2 t& L3 E9 B' _0 T8 m if( !pItemElem )
, n8 V5 H5 P& {6 k0 h continue;
! v: ]$ y, l4 \5 b* k0 K if(pItemElem->GetExtra() > 0)
* L" \# @7 I6 i J- b, e8 B: O continue;4 R& T( A+ ~7 {; G( q1 z0 {
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- R/ c- ?( M) J8 O3 E# s continue;
' Z7 N& e; }5 C2 s2 a( i1 u if( g_pPlayer->IsUsing( pItemElem ) )8 P% N2 |- w2 x% K: }# a
continue;
2 `0 f1 x* h3 {( V$ Q if( pItemElem->IsUndestructable() == TRUE ). J/ f" C, {1 k, e8 Q
{
3 {9 m/ P5 |. s g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 U0 y/ L7 a( p8 o. ]% t- B x continue;: Q0 T; B% N+ [& n5 g. v. R
}
( u3 z' ~# M# E' y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 |) C. V) w1 P& D+ P6 f }+ b* c- ?9 Y" k) A. }) g
break;
" E1 a% S- u4 p/ T }+ f' p- R- f# g% ~1 @
case 1:
$ D5 E& z7 B# Y" ?$ G% U$ ~ {
: x: _1 O. |+ J6 Q) l //整理背包& X9 ~( m+ i5 u
//////////////////////////////////////////////////////////////////////////
: A% Y" K* H: G6 [; ? //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 {) _# m @: g0 M //////////////////////////////////////////////////////////////////////////
4 g7 T/ V# n* R: G //////////////////////////////////////////////////////////////////////////
* @8 i$ _! j: r4 e# w CInventorySort* pInvSort = new CInventorySort;, S$ I; g6 m' P4 a$ {5 K( R
vector <sItem> vItem;2 q9 x; F, U1 l1 z
vItem.resize(MAX_INVENTORY);//初始化大小& W5 y# s8 m( R( ~ Y' p
//////////////////////////////////////////////////////////////////////////0 v: f: v% j6 H& b& J* M
//填充数据
) T: S% z' b7 _9 v8 K9 j! r for (int i=0;i<MAX_INVENTORY;i++)
# C" C9 K! m, h1 j+ g0 M {
1 Q& N, E; U- s3 u2 W B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* q9 \! n/ l0 j* e) {( }+ i! z if (!pItemElem)# ^4 y4 E; |/ I4 x" t: K
{4 a/ r% m: H% `* p7 R i
vItem.dwKind2 = 0xffffffff;( c2 t( G& f, f& i! i* F
vItem.dwItemId = 0xffffffff;
8 o$ ?2 Y) B+ X, t6 C vItem.nIndex = i;
! p1 K- v& p6 x }else {
! P# Z/ o4 q! ~; l+ a2 \ ItemProp* pProp = pItemElem->GetProp();" J% O* A, s- J- s& E
vItem.dwKind2 = pProp->dwItemKind2;
, f2 Y9 o) ^# c" S+ p! Y% F: ~( O vItem.dwItemId = pItemElem->m_dwItemId;
8 K; O6 b7 ^ q3 | vItem.nIndex = i;
: G" v4 O# B* J2 W0 S q }" ]6 R4 l; d( e3 f2 ^ k, C
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 w. T- o5 r( {0 Q$ B; L }
9 F7 g# A3 |. l' w0 T7 i: J //////////////////////////////////////////////////////////////////////////
, k& N. R9 Q2 H; ]7 X' X. N sort(vItem.begin(),vItem.end());//排序) A0 i% F: W# a! t1 y% K
//////////////////////////////////////////////////////////////////////////
. d6 a% k1 y7 X! {3 U/ y6 t //交换
+ e8 m0 u4 `% A for (size_t i=0;i<vItem.size();i++)
2 ~% `4 C- c. W4 R8 a {& O9 z% M5 X. Q* {
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& e) N0 Z. ~* d4 v6 w
pInvSort->Add(vItem.nIndex);
5 Z. n2 B/ k- [ T: T2 O) X% i- ~ }
" t% C- _% h" B, q BYTE nDestPos = 0;) K+ F: T" d& C2 a; m
for (int i=0;i<MAX_INVENTORY;i++)
. D3 T* L9 ]6 T3 Q! @! T3 i, T {
3 ?. M* a2 X: m& b' L" l- u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); o0 z5 u1 ~ K N
if (pItemElem)
5 ]) D) \3 z1 i' I( m {
h8 F; ~. P# s3 ~5 C+ P) i: `+ D if (IsUsingItem(pItemElem))% L [5 P. o. W/ S" H
{
/ `& W& s v A( e/ p //这个位置无法放% t9 n" ?& W: H
nDestPos++;
% p5 d4 g" k: z' y4 y% \ M }* x. z# c" r: B* s A' b" d
}/ Z6 C7 v* ?) ^5 @8 [" `$ `- {
BYTE nSrc = pInvSort->GetItemSrc(i);
3 a I5 H" Z1 u6 g- w! _: c- { pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 z3 L4 B5 X! W7 m$ q if (pItemElem)
% i* R/ K5 h) ]7 O8 L" a { Y4 {# v6 D9 v. s9 n. Q F/ k: ?
if (IsUsingItem(pItemElem))
" d5 @( E, \! }7 a {3 }# ` {
- U/ W6 V3 h" Z& Y' x4 R //这个道具无法移动,跳过7 y0 y, e* g8 B8 C" r* Q
continue;
$ S6 P! b- M; Z0 o: c }
" p- @" G2 g- F0 S1 z! x& v% Z }else{/ `6 p) J8 E7 p" @; u0 g! z
//空位置 不用动, {' ]8 A& y" D r8 U. \3 L
continue;6 d& Z7 p& w( c. X, N% H3 C
}4 L& k* k4 W" P& c) i. \
//////////////////////////////////////////////////////////////////////////
% U; i4 H9 `. r% |. H //开始移动
& G1 o- E/ @$ S. ^ if (nSrc == nDestPos); v3 t- z6 p' o; z5 T8 Z
{( g0 m# C8 C/ V
//原地不动
6 d: a# d2 K9 q/ U* [* G nDestPos++;
' d% n6 W9 ?! O N8 k$ H6 Z* O continue;7 D! B8 F" Z0 z
}
C) @! ]% |+ i( V) i" O; O pInvSort->MoveItem(i,nDestPos);
. B ~& k# d) a h0 H g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 Y P+ c+ E* F7 `8 T- f
Sleep(5);
" E8 V& c9 ~( C6 c9 o' p8 S //Error("移动 - %d->%d",nSrc,nDestPos);& P( N7 c: M, N: S" D) W/ o
nDestPos++;
: l5 R) v/ e) ]8 m# `# _ }% h" D$ z5 F. S2 v# g
//取第一个元素的信息5 l y( U9 o2 u0 i' S
/** @/ Z) y) I' d2 M t9 g
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# V6 h# n; s9 z
{" q1 ~( H/ k7 o) m: P9 X v0 |
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- b$ X8 |. \0 c1 u) H# n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& e4 B, R4 ~( m9 ~& i9 s+ [" h2 I
}9 P7 b: \( ]3 c4 C6 P
*/
$ @* [. Y7 ~3 U2 U3 ?6 r ////////////////////////////////////////////////////////////////////////// K7 l8 d$ v0 s7 F* `
break;( D3 O# { Q$ M8 s- i! V# @) F
}
/ F) B. P% D. p+ I }
' G' h: t" j4 w! A- u' R! a}5 N+ N# ?& I9 G' a1 R! H
m_wndMenu.SetVisible(FALSE);- I. r2 o: E& @% |1 [8 Y/ t
% T. G# S2 F6 ]$ [! y0 h$ ]! D--------------------------------------------------------------------------------------------------------/ R9 _* u# e% a! H) U- I
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ ^' ]6 M$ ~: q' j4 a7 A{5 S' Z8 M. z* n% i
BaseMouseCursor();( o. X, Q' ]2 t, ]5 s
}
6 _2 ~6 f" E* N在其下添加:
5 y1 R1 s+ w0 L0 P w+ Y" [/ Z( Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: Q1 y( W# a: e/ x{ V. g4 E0 A2 Z% o$ _# k/ |8 F* \
m_wndMenu.DeleteAllMenu();
5 s8 z, T5 S0 C! f4 lm_wndMenu.CreateMenu(this);
$ y; u X& [; ?4 ^) m; U6 P# Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# R5 I5 S' w3 ~' e0 M- Q+ u
* T! h* `) A3 \8 P$ N/ A- A
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 O( ^# p$ y4 U+ B! t{9 g+ A5 G9 I# H# A7 r
//P以上级别才可以删除所有道具6 D; m! C; B9 \' ^& [( m% [
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, \7 N7 C" W+ }) F}
% Q7 Z# Q3 f9 {. Vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 X \+ q1 W* ~- Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 G1 Z9 w& \: w! O, q1 a
m_wndMenu.SetFocus();
$ M2 D# A, S$ L& O6 W" d ~3 i}
0 X1 T- D; a- O% [$ D------------------------------------------------------------------------------------------------------------! }6 _8 u/ M4 O4 G: q6 r* [
*************************
- I7 N. A. u n2 q. `8 EWndField.h文件# n5 L/ F$ Q) a
*************************
& |& x0 a/ D# L- z7 m搜索:BOOL m_bReport;
2 S. M( u2 y6 H- j6 C其后添加:/ x- } A3 P5 H& @) Y" u0 ^
CWndMenu m_wndMenu;
) `3 n0 X4 ]3 }7 h; h6 K搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 A8 x/ D; H' n. ?: T其后添加:
9 M; v# v0 ~3 u- bvirtual void OnRButtonUp(UINT nFlags, CPoint point);" S9 ~( k, p0 c8 `
/ u! l s3 q5 F# K
{- X1 k" o6 ~7 T! u" W3 S; @
|
|