|
|
源文件中_Interface文件夹下WndField.cpp文件, G7 G' U \/ S# W$ C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ C: Q+ c) s/ d' m$ x5 p# U+ g# m9 z: @8 }! m P- f
struct sItem
5 P. ]6 u, F6 ^2 {- p{1 H0 ?0 T5 d9 Y. c0 L3 J
DWORD dwId;
9 Q$ x! `* [) FDWORD dwKind2;8 L' R3 G( S9 c% }$ r
DWORD dwItemId;" U4 j/ [. R0 |7 p
BYTE nIndex;! ?. I' t- C% F- v
sItem(){, Z6 r0 T& h( _3 Z0 n
dwId = dwKind2 = dwItemId = nIndex = 0;
6 e, _+ e4 f& ]}8 ?0 Z7 |. I' n
bool operator < (const sItem p2)6 I" E9 f: b8 k. R
{
$ y9 A& ~/ r! O% [4 ?1 H: @$ X if (dwKind2 == p2.dwKind2)- B0 O4 I( H" L3 H& F G
{( S y% u$ d2 q, J$ h
return dwItemId < p2.dwItemId;, a: j5 }( a ~6 q% Q( U
}else{7 v) {5 P3 G& j1 O8 A6 v( [' i
return dwKind2 < p2.dwKind2;1 A/ y; [, B$ [+ {5 u
}
9 H: O8 p( R+ j, e# I }# t}
+ \# H* C$ k! E: m1 n& ?& I9 O};$ J: \ l1 o4 r4 s
class CInventorySort9 u* c: }/ v( Q
{6 E1 s8 h) r p+ j
public:! e) U3 \1 n2 j+ o
CInventorySort()
1 a. D' P6 v y+ M8 {$ j{$ }. M# _4 M. |3 e. ]) V
m_dwPos = 0;
4 A6 U# s- M- L/ t* S! e5 y/ u}4 C% J5 @8 e) r! F' J! D. k! B
~CInventorySort(){}* d) } h0 z5 V- {* L9 K0 `9 f' Q
private:
9 P- ^3 i( E* X; h' {% e: F+ [# dsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 |9 u( Q" H' I& T5 m$ x ZDWORD m_dwPos;8 o# v$ R$ Z! l! s
public:: W9 ~; L* P8 [; N1 z% n5 H
void Add(BYTE nIndex)# s8 ?0 d+ W5 t5 q5 Y
{" p2 _9 ?$ f! ^* l% _1 r& k
if (m_dwPos >= MAX_INVENTORY)
: G5 g5 r; `5 o6 J {+ {' E; Q% ~& o0 F V
return;7 s- e6 h8 ]4 i$ A. p
}
$ E% |) ~9 C5 l# `0 r m_Item[m_dwPos].nIndex = nIndex;6 ]/ ~- g" r2 E, ^) |( M
m_Item[m_dwPos].dwId = m_dwPos;
+ a. S; N/ T% Y2 U0 f# y+ t$ T m_dwPos++;$ z. ?. Y2 w% U' m# d
}+ r J' r" ?( t" j$ D' ?, M) D6 c$ [
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列) I# Z3 a. V4 ~- ^7 |7 v* r: \3 Q2 B
{, M5 y8 ^! F3 F j% j6 g* C
for (int i=0;i<MAX_INVENTORY;i++)
$ d# x1 l5 A( F1 A {
% ~( e! c" y, V0 u# G; Q if (m_Item.dwId == dwId)4 l9 q6 \) @9 [+ v" D7 S( c
{. Z1 K1 |# E+ v4 |, K
return m_Item.nIndex;
7 y [% E' C9 [) s @- l }
. [6 T/ S' P/ i; o6 f }
5 O2 P5 `3 V0 o9 u return 255;: R) S5 v5 G% _& {( R4 H
}. r W9 a6 Z4 s7 W
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 O, M. w6 l" f9 ]) w+ t) F/ k{+ s- p D; _1 v2 o1 { z; R
BYTE nTmp = 0;9 ~0 O8 e( I* J: L1 U; S* Q
bool bDest = false,bSrc = false;
! z0 ~3 n; s4 j for (int i=0;i<MAX_INVENTORY;i++)
& U- p3 C9 n8 W3 E; X {% T' w) ~8 E$ ~
if (dwSrcId == m_Item.dwId)
8 [6 u: K+ B) }! J {
" b1 Z9 C9 R" _, Z5 H+ g& S //id相等 则 改变对应的dest和src
) _, V! c8 z" Y, }( @: I; t# | nTmp = m_Item.nIndex;
. {: x; ]9 `0 z" q/ P( t- L m_Item.nIndex = dest;/ E/ V# w1 q+ Y. D- W
}
9 O U( Q, s. D' H }8 T0 Y1 w% j8 t$ S |
//临时数据保存完毕,交换开始
8 ]) _ U% ? E4 u! `% T# ~, K for (int i=0;i<MAX_INVENTORY;i++)$ L* V% x3 P- m% Z$ B% X
{
9 J( M5 S6 F/ v" b if (dest == m_Item.nIndex)
% V* n5 Q& K' ~% N {, C o: d9 Y. u; m7 t
//id相等 则 改变对应的dest和src
0 a& d6 l$ ~9 g# _) }0 h4 E" P# d m_Item.nIndex = nTmp;1 Q) a% i' j+ X/ B0 X2 Y1 I9 c
}
. ^1 u7 Q, f. ]7 L }2 w8 q( w6 n0 j; Y
}4 P7 f8 A8 g: y9 L% X2 p6 g2 _
};
! M1 j# I3 r, g% {1 h! Q) K# M-------------------------------------------------------------------------& _, w: V2 [4 {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 W) U1 t; ^3 `: j6 i6 q2 Q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* N% m8 ]# G/ d* \, P% a3 i
紧靠其上添加:
0 F/ y+ i* x4 m. q' W( b' Lif( pWndBase == &m_wndMenu )
[6 S, E! k5 l7 F# G{+ Z9 p S# U! C2 c- Z4 Q* {+ ?
switch( nID )0 G$ _, [1 w- L$ V8 \
{1 v* Y, Q+ m# k6 [: g
case 2:
( Y" s6 h1 B& m$ s8 M% N {
3 [8 o7 T" B. _* e //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL); P$ q) K* ~: i/ `2 I; E
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). \" w* _+ ]' Z: k
{
6 `. B7 a# \# O% e: p break;
( r2 s! L0 X- G; M+ r9 j }5 o' ~# ?# O; @. [9 x
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), A8 Y9 K0 W% D9 _* R
{
8 `* S6 D3 ? ~4 m CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, s; P7 X6 E: U% D
if( !pItemElem )
0 }( H. x* Y! P$ l0 Q! r, F) \ continue;$ R$ s9 k! h4 d+ D7 f
if(pItemElem->GetExtra() > 0)
' j! M% q' j, C/ ]! i continue;0 `" T6 s! B5 T2 E0 l3 r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 P6 ^$ E6 q) a continue;$ S0 p# f8 ~8 u9 v% i' P6 X
if( g_pPlayer->IsUsing( pItemElem ) )
1 f2 E f$ O8 t" ^) G continue;! P5 w" {; G' p1 V4 {/ K
if( pItemElem->IsUndestructable() == TRUE )/ V B* [( _7 B, q
{
+ c- @# u9 M. m2 q3 W# } g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 K& y; B) k1 Q; G' b continue;
* p' W p W* K2 t- f }
! M( X! G% ]8 l# c g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# ~7 f5 `/ T. f8 }
}# c' Z/ W5 \6 q
break;
( E. E m- {& w" q- H9 v }, C" G& g1 u7 E" a1 n( x
case 1:
: Z m, K8 W+ v+ w {2 e3 {0 r1 z. c
//整理背包& n* p& G/ U! \; U1 g- w* V
//////////////////////////////////////////////////////////////////////////
: L! F$ U# `& Y2 w/ X9 W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# [1 m6 _; }1 U# }: ? //////////////////////////////////////////////////////////////////////////
9 s3 k9 r2 q2 H/ ?2 Z //////////////////////////////////////////////////////////////////////////3 ]1 z6 S7 `4 N. r
CInventorySort* pInvSort = new CInventorySort;
- y1 `( u5 ~/ s; h1 U( I) C vector <sItem> vItem;
3 O/ @; j* s1 x vItem.resize(MAX_INVENTORY);//初始化大小
4 t8 k6 O$ }( W$ u: S" W /////////////////////////////////////////////////////////////////////////// _1 ^" F5 Z/ R1 d" L. p! T
//填充数据5 Y8 U r% Q$ [( M) E
for (int i=0;i<MAX_INVENTORY;i++). V- A; X' I9 h# f, _: \$ z
{
* ~% |; \& t9 n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 A/ X8 k: C3 ?' P! T% t9 P
if (!pItemElem)$ s6 v9 {) M) n8 r' m
{3 j' |; s7 Z6 `) [, S) A p" Q
vItem.dwKind2 = 0xffffffff;. o! l. T6 K3 _7 _3 D2 A5 z! \
vItem.dwItemId = 0xffffffff;+ \( @7 w- ]( F( C- ~6 N* n
vItem.nIndex = i;
" T8 i; l/ y2 h) _' j5 g# o2 u$ R }else {. V, P; B# D% P" J8 W) k/ s
ItemProp* pProp = pItemElem->GetProp();$ t# P* d3 X& w
vItem.dwKind2 = pProp->dwItemKind2;# {8 Q5 R6 h5 i# y4 m& E( d
vItem.dwItemId = pItemElem->m_dwItemId;3 \( x; t) s- o
vItem.nIndex = i;
: W: t0 _& [' L. R: j0 h }
1 H2 B+ T+ H/ X! Y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 x7 L$ T4 g# w
}8 L8 c% a* X! o! ]( ]; W7 O
//////////////////////////////////////////////////////////////////////////, Q' w: k+ Q; [, \3 s$ Z
sort(vItem.begin(),vItem.end());//排序( n+ x8 a6 I5 O$ A* l3 V! ]
//////////////////////////////////////////////////////////////////////////0 B/ n, L D& \( F. l. c2 }5 B
//交换; C( j' X8 {+ W5 T: Z
for (size_t i=0;i<vItem.size();i++)% r, e) v4 Z% c* _
{
7 }. Y+ v7 U6 r( z4 s" s //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 Y% x2 m: [ b0 H! M6 o8 z
pInvSort->Add(vItem.nIndex);
4 Q" W8 b' z3 y7 n2 w+ E }2 p: S- D0 m, |- N9 U( r
BYTE nDestPos = 0;
6 }3 I3 }( t( n for (int i=0;i<MAX_INVENTORY;i++)
' o1 R* Y+ [ b, x$ {- o7 H {
4 X L: Q. L! | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 _/ ~1 `/ X" i2 p8 A' z9 z' {/ u
if (pItemElem)3 k- u3 Y, A0 n
{/ S8 J4 ], r2 j$ ~% m1 n2 |
if (IsUsingItem(pItemElem))
! s% t" ?9 `; y/ c+ g {8 K: f) f, p5 C \3 q8 @( G7 U; Q
//这个位置无法放! F/ {) Z) J9 g H
nDestPos++;
N( N, }% D5 e0 y) `& \8 p }
8 a# G {! j( L8 V# e+ T8 y }% o: b8 A: s! H0 T) r" T$ Z+ I3 z( k
BYTE nSrc = pInvSort->GetItemSrc(i);
' O& @& ?, ]) J pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ \' I f! P/ d$ |# l, \ if (pItemElem)( O+ d$ g7 _( a# ^# U' Z
{/ C2 y* a* m- b# W0 B
if (IsUsingItem(pItemElem))
" R& x! E+ f# `$ P0 q: L {
" X6 H2 }/ S1 ^' g; m" t8 F% r //这个道具无法移动,跳过
, `3 v* Q$ M0 F+ h3 Z: w5 }, N continue;. m, y7 U9 L0 C6 M- [' `
}, R# Q2 u: z, W/ r% O$ z( F
}else{' }$ P C, `+ v; W2 p
//空位置 不用动& q3 |1 v( \: E. E
continue;3 m9 E2 k/ i' l( w
}% H# T* L* @1 C. a$ l
//////////////////////////////////////////////////////////////////////////
% _) g" v- V5 A" g* l( W& _; r //开始移动
$ E4 y! ~' V9 i4 e% B% ^9 g6 D, p0 F if (nSrc == nDestPos)
8 y e2 }2 s6 V) C0 N7 j) W- ^ {
6 C' _) k/ n- q# m //原地不动
* q4 j b4 @) R9 ?$ V1 b nDestPos++;& V, [3 r, \. w
continue;( J, v9 z; Y% e5 i
}, T: }! d6 n1 p) n9 E
pInvSort->MoveItem(i,nDestPos);- N, R$ Y- }5 x% H
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% }5 n- P9 @: a: `+ n
Sleep(5);
& h# S7 r5 g' ^1 B1 B //Error("移动 - %d->%d",nSrc,nDestPos); l( Y8 y8 r! G$ C( s% |
nDestPos++;
O! u6 [* T- ]/ {0 E }) W& w& o0 ?5 x8 J" Y# ^
//取第一个元素的信息2 F; E/ u. D" j3 t
/*
1 H0 ]7 k9 w+ H% Y5 D/ { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 G* P% W* m8 G2 h( _
{$ n2 A4 {! l# J3 Y) r' E
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 d2 ]: g% n" R
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 @% W3 o2 m- Q- L3 r1 Q
}
* g. H! e$ v1 e */
) g3 h6 u9 |" i4 l. B `, p //////////////////////////////////////////////////////////////////////////
( f4 C0 G/ j2 |* ]# }3 a break;/ C" v* Q8 I- i! d# L+ r, p
}' R) p' U' ]- P- [
} $ K3 E3 Z' z& |: Z- x: q1 j
}
$ I7 M2 X) V) u9 M" K8 o& `. dm_wndMenu.SetVisible(FALSE);+ t/ E+ Q: K [
+ d6 q2 [, u5 ~
--------------------------------------------------------------------------------------------------------
- {- A2 J8 C( S# l e( J搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* N- h% i' K* Z
{
+ M# L b: ?* r, l7 [8 p( k. [1 yBaseMouseCursor();+ v7 l3 m( _* n
}
& i3 R1 b$ h& `在其下添加:
X0 `- j7 ~1 ] {void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- S+ f- i5 W2 ?- C" C
{
9 j2 I# Y2 w3 b/ Em_wndMenu.DeleteAllMenu();6 v( g m9 w1 O
m_wndMenu.CreateMenu(this);
7 b. ^6 y4 k8 Z2 j" {! Hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); t9 H) K: `4 d6 ^ E& ~4 @4 v
! ~/ l% c; d% iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 M6 ~( t8 \1 K! \1 m1 J2 m
{
6 Z7 g( R5 T, m$ T9 Q# d. z$ Z //P以上级别才可以删除所有道具- {. C7 b( ~( Q- ^# L/ \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 J4 z# p/ \% q( q, \} T/ T3 `. |, h3 H' c7 `0 Z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 Z3 U$ J, D1 Y+ z# Z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: l b) F1 j, a$ B ]m_wndMenu.SetFocus();. L0 D a: I# E7 ?
}; f, }8 W7 C- F( q
------------------------------------------------------------------------------------------------------------7 Z- e7 g! n# P; p
*************************
9 J0 G1 B* Y- g0 }' I. JWndField.h文件
! y4 s& ?; V6 A" @0 A# v2 o*************************& e- v- f0 _# `' r2 e6 \. q+ }
搜索:BOOL m_bReport;2 b ^0 z" d7 x6 ^
其后添加:
; f% w- H5 w5 G, n$ TCWndMenu m_wndMenu;
7 F+ s- O# Q* o& | c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% S0 h$ M7 K# T2 x# p( m
其后添加:% p4 }6 ~. ^3 k# @& R
virtual void OnRButtonUp(UINT nFlags, CPoint point);( U* ]* [, M+ j( e+ S0 h
+ P* b( }7 M* T" J6 N7 a
% B7 F; o5 q ]/ U9 v) Y7 [
|
|