|
|
源文件中_Interface文件夹下WndField.cpp文件
/ H$ u/ B- w6 N( ]0 G. `9 z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
b- h: z- w S: F' ^; ?6 v: C% u1 P) E3 t$ P
struct sItem6 j6 `8 |1 t1 s# V
{( h$ F' r5 k' b: |- x: ~6 V
DWORD dwId;3 M( _5 L) R' T- X8 j% W) O
DWORD dwKind2;
( V4 ^& g) A& `' i% e+ j l6 WDWORD dwItemId; K+ g0 A$ U3 x8 X+ Z+ g" E
BYTE nIndex;# d0 ^0 W5 @9 O( R) F
sItem(){
) L3 A% S8 D6 M: {8 a, ? dwId = dwKind2 = dwItemId = nIndex = 0;* Z5 N e, C- E) t, I/ L: t
}
6 @8 @* ]% m. K3 o& D& xbool operator < (const sItem p2)
4 Q* a. v$ y. S! M4 x{2 _/ j7 ], o8 l
if (dwKind2 == p2.dwKind2)
0 H* o* Y0 J2 t% L0 h( t5 N {1 x6 e, I6 v7 r n: m/ K7 r$ ~
return dwItemId < p2.dwItemId;
# b% o! T7 y/ d& Z+ S: X J) D }else{7 C: y; Z3 _+ \% A% d) o1 w
return dwKind2 < p2.dwKind2;1 p5 J- F F* J- B+ D& z4 B
}5 d/ H9 d: K4 v$ G5 B" H
}
5 o9 k' S6 w" D/ w4 \};# C' y. f& F; Z/ S& ]/ u
class CInventorySort
* \, ^( t- O9 x" \" E{
7 ~% K$ j8 t) Spublic:
( x4 V7 H5 h0 S- x; UCInventorySort()- a0 ?% K" d1 f5 N
{7 V3 Z) w4 \5 z4 D2 \0 N6 ~$ B
m_dwPos = 0;
! L( j! w4 |: v# R6 N}# ~' e$ x7 @' |+ t# A
~CInventorySort(){}
+ W9 B' P) i. f2 n/ N* g; U% bprivate:6 q5 i& {+ Q- \/ n, \6 i, U& \
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 o- y* ` l5 \% LDWORD m_dwPos;
: F% ?. w+ |9 l ]9 q. J& T3 spublic:
7 ^9 G+ x+ v% R$ k' ?9 Xvoid Add(BYTE nIndex)
" V; G3 D# r3 C5 Q8 {9 J. Z l{$ W7 n% B# `; [" g& {: I
if (m_dwPos >= MAX_INVENTORY)
) I9 X0 b% g5 A: b ?# q8 @ {
8 p6 d& D x+ I- J- K return;
) z, b& f5 ~! A }
5 s* d5 J0 f2 N* k m_Item[m_dwPos].nIndex = nIndex;
3 @- k0 t- } x5 c9 m6 S m_Item[m_dwPos].dwId = m_dwPos;
! S1 D4 @, S- _: H. r m_dwPos++;
1 F; m1 m; Z6 y6 _0 V1 _* p% A}
8 d# Z/ \9 j+ ]. RBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" |9 Q! V: i2 x k0 T# |
{
# `8 K6 p$ [& H- b) x2 v1 O for (int i=0;i<MAX_INVENTORY;i++)
) R. j, F) D& X {
5 X7 {: [ S! s' G, @ if (m_Item.dwId == dwId)6 y( n v1 G; R+ l
{ r5 p+ f5 A0 k$ I
return m_Item.nIndex; q/ L9 s2 D7 U8 W) z$ M
}
) z A) ]: L9 Y8 s8 a: m }( c' O* E4 `* e: y: G
return 255;
# d( N, Y' \8 T& y}: g% y; v4 Y+ H8 f; S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& N4 u4 p) v$ g
{. m$ V& b0 ^6 N- ] w3 n
BYTE nTmp = 0;
e @# B4 {4 n% l8 y bool bDest = false,bSrc = false;, L7 [% b1 {$ V, _0 O
for (int i=0;i<MAX_INVENTORY;i++)
" |. s* r* a5 E# D6 t) ?8 G% {; K {
6 _3 ~/ c1 L; \5 q& w6 ~ if (dwSrcId == m_Item.dwId)
# ]) H# H {( X! ] {
q! l G; O7 l* G1 ]7 i //id相等 则 改变对应的dest和src, j* }& `+ n8 R' }* ]4 J0 @
nTmp = m_Item.nIndex;: C; M" q$ c3 p
m_Item.nIndex = dest;
% e5 i {! L# y9 h, ? }
: O% {2 l) @1 W. L }6 i ]7 q2 K# _; Q
//临时数据保存完毕,交换开始) [' T1 L$ a* J# u% h
for (int i=0;i<MAX_INVENTORY;i++)+ s9 ~- _6 A5 ]; H3 M: }) H! }
{
2 V. O' l0 y0 I if (dest == m_Item.nIndex)* f3 r3 |" O8 f: r2 H
{
% f; O N; U v9 T/ } //id相等 则 改变对应的dest和src8 N1 {9 I7 [9 Q! G* m2 P
m_Item.nIndex = nTmp;6 O1 P* D: v9 N) Y' S* @8 i
}. E: N) W* h( a7 k
}
: S D" X$ P8 \. P1 \$ f}
8 a) G8 _$ ]; a5 v. N& E};
' J+ i1 e9 `" X) C-------------------------------------------------------------------------' p8 e. j) f" L$ z) W- C, ]+ Z) G
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 ]. o# ~9 M+ |! C: B搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) v1 Y! f1 A, J: K4 K; m3 f. |
紧靠其上添加:; L; ? `$ b6 M- w2 V6 r; L- U: I
if( pWndBase == &m_wndMenu )
+ R5 p0 U+ @ ~$ @{+ d; I6 A) H% z* k+ T+ D3 h0 x
switch( nID )5 }7 b# j% u! p j3 O5 K+ z
{
5 q, M; T$ x5 R/ \8 ]% ^+ N case 2:* C$ [8 q [% \, M* i/ P8 |
{# e4 `! @" u- E* c0 m9 m+ O7 u9 Z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; x+ }$ l0 L3 k. _' @ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 g! r' l4 N! w# b; i {3 B6 T) D" X+ y8 Q' @( t) h
break;" k' u1 P& [% A
}; p0 H6 D9 G+ B9 g# N
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 `" q: s4 z$ D" J6 ]" X' u
{
6 C9 R* Z' B3 b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* a5 J. B5 [0 p6 j
if( !pItemElem ); u! V1 `' P2 e# G$ Z: M' t; G
continue;( J+ O0 B- v9 n2 o' y* F
if(pItemElem->GetExtra() > 0)- C. y+ W! k# K. u
continue;
! I# Y+ Z- X+ M" x- b; ` if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 R @9 g s6 W3 e0 A, q
continue;5 r; s1 C8 C7 A% f
if( g_pPlayer->IsUsing( pItemElem ) )0 ?0 z4 h9 l: H7 J
continue;" j) _* G, r4 p9 R \( t
if( pItemElem->IsUndestructable() == TRUE )
: |4 Y+ |* u- H- e- y; w( ? {
, {! i& T; ]% a g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, L! _) c* K, t4 z4 d# e; B1 z
continue;
6 O8 m3 M( u" V2 t/ j- I. j }1 V7 W* C7 d9 ?/ B8 @7 ~
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 }3 D# a9 a* f
}
$ T% d: d7 Z* w% J) h) P! `9 c break;
1 U9 l: p. |5 g7 N, P" { X3 g }9 I) V) Z6 B- Y% V/ `- l) y
case 1:! y7 N' ` W- Y d
{5 `: T" t& j! |% q3 [
//整理背包, {4 K8 b: Q6 Q9 Q/ [
//////////////////////////////////////////////////////////////////////////* I' i# T8 {9 P e G4 m
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ A* i( @; r' q' W
//////////////////////////////////////////////////////////////////////////
/ q1 C7 Z/ p' t6 y+ ` //////////////////////////////////////////////////////////////////////////3 \( j. ^! _4 y" k3 x) ^8 U7 _8 a
CInventorySort* pInvSort = new CInventorySort;. [: E0 t6 u- B7 _: `7 Q6 c
vector <sItem> vItem;
- i& R, F! v6 J9 N1 |" w vItem.resize(MAX_INVENTORY);//初始化大小
% s# l3 P% Y) O% d( T9 H //////////////////////////////////////////////////////////////////////////
2 L: r. w2 B5 X, o' o //填充数据
3 i6 V- M& X% m4 e: H for (int i=0;i<MAX_INVENTORY;i++)
7 a" }, s$ t. c: L) N% k {
' u Y- q$ \- C( G* g' }6 h1 p3 @( @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 i6 s- X8 ~7 ?+ a; D6 b
if (!pItemElem)/ D0 N* y# Z( a; [0 ^; B& M2 ?% R, Y
{5 b( G" F% v" |4 [; S
vItem.dwKind2 = 0xffffffff;! S# u" D+ ^' n5 p
vItem.dwItemId = 0xffffffff;5 a6 y, J% X' O+ N% b# H" z
vItem.nIndex = i;6 n* W2 |& e& w7 z4 Q+ c
}else {, \! c3 ^) o Y) c6 ?+ x& T" Y
ItemProp* pProp = pItemElem->GetProp();1 q8 { `6 I0 z8 f
vItem.dwKind2 = pProp->dwItemKind2; G6 s4 ~0 r" |- ^ {) a. U$ Z
vItem.dwItemId = pItemElem->m_dwItemId;
/ {: Z0 Q7 k7 I/ f vItem.nIndex = i;
. k2 g2 }6 `: u& i* I }
% \4 i) d' e# h. ^/ `6 u+ O //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ V% ? ?6 j$ S3 z7 {2 ~
}
/ G% l% |% [/ ]6 X4 E //////////////////////////////////////////////////////////////////////////& T$ O5 O3 J: Y+ C' D
sort(vItem.begin(),vItem.end());//排序- P5 D7 e$ `8 F* {
//////////////////////////////////////////////////////////////////////////
6 o6 ]; Q8 s! I# c //交换
k5 H* R5 q7 Q8 {2 u! s" d( F for (size_t i=0;i<vItem.size();i++)6 m" ~# H* B& _) |5 J7 @! D
{" p( X) f# c# e
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); k+ b! h9 f+ l7 a9 y4 M) N& m/ \
pInvSort->Add(vItem.nIndex);0 \1 g4 v: P* Y+ z6 e+ [2 _
}
- s3 P5 f; Z" Y9 c% h BYTE nDestPos = 0;
8 ^7 i+ J2 T) t( {( E L/ a8 H for (int i=0;i<MAX_INVENTORY;i++)& L# _; K# r7 ~1 e
{; d+ I& \& e0 B# V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 h% l7 O* [1 S1 T7 z* Q! P* s if (pItemElem)0 f+ a7 m$ h- m Z
{
& [3 `0 w4 F2 y' W if (IsUsingItem(pItemElem))
) ]& c3 x9 N# ]8 M0 C3 B {! Y: N$ j3 W4 o# l
//这个位置无法放* G# ^2 r/ }0 f3 r$ h$ u. a# s
nDestPos++;" ? P: N, |3 J. h" C" g2 A( g
}
% D! f% M2 i& ~( ]) }: t }
6 t. k# [1 c- B BYTE nSrc = pInvSort->GetItemSrc(i);
^* ~5 j* h3 f pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) z# Y1 ]7 [# g- u; j0 u: ~
if (pItemElem)
# V( I- C6 n, h R* `# Q {/ k2 t m9 O3 x$ f$ q9 F
if (IsUsingItem(pItemElem))" t6 m9 @' f0 d& I+ I0 H- L
{& u0 {8 @2 b* _4 @. @$ o" W8 E! l
//这个道具无法移动,跳过
3 n3 R# X3 G. j% m continue;
( m- M) G% r2 g! A& b# X }& G% a' J6 j/ h' N
}else{
6 V+ s5 b# Y' S //空位置 不用动4 \8 ?$ _# k- y
continue;
, L* F6 }6 q$ {! j0 {6 u( D3 I }
( v1 G; I0 D- M" K, ] //////////////////////////////////////////////////////////////////////////
9 x3 E7 ]2 v; b5 O4 K" W //开始移动
- u! |+ O1 h; }( L/ J- \: V- N if (nSrc == nDestPos)' l7 u$ T2 I* Q h# ~5 _
{6 x2 I2 b2 p* }
//原地不动& C+ a' L6 n: q3 n
nDestPos++;% g# B# @$ J; C o
continue;7 R6 }& C# e/ ]$ Q- `
}- J+ h2 D4 B: i3 |: F0 ]8 H1 w
pInvSort->MoveItem(i,nDestPos);
! U) K- N: t( e4 |2 s g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 P9 C& [" ^9 G o, R7 c6 Z Sleep(5);( |& d9 B5 B- L: [, P* N, K- M
//Error("移动 - %d->%d",nSrc,nDestPos);
$ |: H. A# n3 \% g h6 z3 N* K$ S nDestPos++;
$ u, q/ T+ k2 t2 T: M }8 `8 T! t- w# R U, ]. n7 V
//取第一个元素的信息! M; _0 D6 A5 {. ~+ @% d* N% [* ?. B4 e
/*
[+ P: f6 s3 q4 r! E/ L8 z9 G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 {4 x! c6 _4 c {
7 a. C- U& g4 x. u E6 k, T2 z Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 a& x# x) q+ C0 } g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# C7 N, ~5 I$ c$ `5 E& A5 ]
}
" _, x4 s4 ?# n. x+ N* b */
7 P0 K, _+ ?- } //////////////////////////////////////////////////////////////////////////
- _ U5 M5 }8 W& x! \& J, a break;
$ W3 E) c% [" {$ j; b- Y) w, V$ R } J9 j) s9 N: D+ k
}
: C: D5 i5 ]! z7 U/ |& g}( |" u! @: o; Y) S- v3 N3 \ L
m_wndMenu.SetVisible(FALSE);: n- c" f. }. j2 c4 u
( H- a( w: x5 G: s/ l, x" \, C
--------------------------------------------------------------------------------------------------------
0 x4 V: f2 [/ Y# P/ E) R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ D2 D7 p+ J" ^$ [$ s7 z3 z{
$ e& X& {7 w7 L: y ABaseMouseCursor();: b6 o4 ~4 }5 x$ Z5 e" [+ e
}
2 i! d7 H% W ?: w在其下添加:" [+ V+ A# k* ]0 u! O; l# M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 b) u' U1 U. D8 D$ j: ?{5 ?/ r7 l) h" k6 W; `, O9 E7 ?
m_wndMenu.DeleteAllMenu();' n4 G7 v* {4 k# u; v6 s; T9 S4 c
m_wndMenu.CreateMenu(this);
3 }7 v) R- H% @3 T! `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 S2 Z1 T9 L9 F
0 h. O8 |8 o! o
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' x/ Y0 ]/ H; ]4 y/ G7 W
{
/ p% H! d3 z; C2 u# n! K% o' J //P以上级别才可以删除所有道具0 q; V5 E. z5 |3 L+ |" k
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- O ^. w! X, _8 H3 C- \1 }}+ G! D2 Y1 s+ C4 k, i2 S3 s
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ D/ \% I( {4 z- r9 D" S. ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; `2 ^, A; E5 c) R N/ sm_wndMenu.SetFocus();
+ r$ I! r0 q# q4 B}. u' E+ U6 B# ?0 R- ?( a& b! G
------------------------------------------------------------------------------------------------------------
+ P: S' g. o1 u% O7 x& [8 }6 L% Z*************************
6 h0 d# L, K8 n7 H" r) RWndField.h文件, y5 X% x; m/ M$ ?: V9 G
*************************
4 U. g+ n7 e7 {4 ]% B) k( n3 ]) B搜索:BOOL m_bReport;, Z9 U# D$ v: W! j
其后添加:, y, T/ \+ f. s
CWndMenu m_wndMenu;
6 [/ G: N7 Y4 \% K$ _搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ \$ J0 F# Q* j* A0 M" M3 [
其后添加:' W7 Q3 t9 n# i6 @! V
virtual void OnRButtonUp(UINT nFlags, CPoint point);5 R$ ^% m* q6 E2 S' M. ?' y
2 f* ^, l' c5 l2 E% v4 D, Z3 o
% Q# g! Z# e( W. N
|
|