|
|
源文件中_Interface文件夹下WndField.cpp文件
- w9 O; N, d3 A5 k% ~搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ ]; H" v) Q( W5 l x
+ V, r* L: y) F5 \
struct sItem
' M9 p- l- X# B& G/ T7 `{
; W5 S3 E% k" f$ u% g. ` E5 LDWORD dwId;
- r3 D* ^" p* P. V+ i- o" O0 CDWORD dwKind2;
' f3 y8 B' ^0 g( S; \+ JDWORD dwItemId;) C& I X% A2 D6 M/ v
BYTE nIndex;
+ K$ ~* P( K0 k0 [sItem(){
* U. n* d1 o- y# n dwId = dwKind2 = dwItemId = nIndex = 0;
9 E( q1 I2 X. n. k U}
7 K+ |8 ?1 A8 H3 I' Jbool operator < (const sItem p2)
2 j2 P' y0 r6 K; X8 T! H{, u) ` B9 q) ~& U3 r2 M2 m$ T
if (dwKind2 == p2.dwKind2)
. ^" F2 Z; I F% w9 m- M5 r% ^ {2 R+ @: J$ ~( \ z. f2 B1 P# y) S
return dwItemId < p2.dwItemId;
, p( Q) `' r$ u# a& l4 ? }else{
# D* @0 z+ K5 T6 A3 H9 g' `% j6 q+ t return dwKind2 < p2.dwKind2;
3 w' C; q4 ]$ n$ V9 ~! q w, k, o }
+ l# S% m8 K/ Y/ y}
' c6 p7 c/ p" i2 b5 L \0 `- O};; r9 @1 A* S6 L# W: L" D$ }
class CInventorySort) y" ^7 ~8 `! c- t4 F
{
7 h) K6 ~" O4 p& c5 dpublic:
+ O- k' Y! _& ?& {) hCInventorySort()
/ @$ u; Z* H8 A: K5 H{( M. d) d1 ^5 s1 l
m_dwPos = 0;
+ ?- ~# z. `5 |: w+ |}
" ^2 _1 E; Z: o6 A* B~CInventorySort(){}* K3 x9 r( u% n. l2 `! ^3 \
private:8 d6 v5 F3 a5 l) C) X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% H& h1 h/ H$ `5 T
DWORD m_dwPos;2 N; r- { m# Y/ z0 Y {$ W3 g; j
public:' {' X4 I2 ?5 w+ N: A
void Add(BYTE nIndex)
L! ?7 z6 M6 i N{/ F, K+ Q6 `6 c8 D0 ^8 p" ^
if (m_dwPos >= MAX_INVENTORY)
) Q7 j- X$ u: g3 E! C {
# v: \- o5 z) a8 S/ Q( x return;
% I/ e/ B4 i$ {1 ]& @ }
/ f" A# ]3 q* k* ] m_Item[m_dwPos].nIndex = nIndex;
! l+ g7 p; D- k* t m_Item[m_dwPos].dwId = m_dwPos;
) a( ]( ^/ j0 f3 ]- u m_dwPos++;
# N* S g8 F' j( V} j% \: }9 G6 n/ S0 H
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 }( ]) \6 X% c4 U6 L
{
$ o% \# O- P+ v0 {6 `2 [8 {* Y for (int i=0;i<MAX_INVENTORY;i++): Z1 G6 W: L! f7 _
{
3 q4 C- x+ ~% ?, {' ]; h if (m_Item.dwId == dwId): E& h5 I9 K! a% N3 Q$ e! }4 m
{
2 p5 |$ s+ V( M# K% b return m_Item.nIndex; l* q& u7 D/ y
}/ j/ `% X' z. Y s
}0 j% |, S5 h& P
return 255;
?" n- w: v9 ?1 B1 U4 D}* Q2 w4 e; _( n: n, i2 F+ V) E% p: J
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# v% w. g, \( {, K d7 R# R{
% U' e- d# Z- B: z( g) L. u BYTE nTmp = 0;4 H2 _" `8 r3 @9 q* j
bool bDest = false,bSrc = false;" c! _& R7 L' v5 C$ S8 Q' a
for (int i=0;i<MAX_INVENTORY;i++): I% c3 p' L. W8 W' x- x9 U
{" w0 y( E' Z0 x9 l: }
if (dwSrcId == m_Item.dwId). Y8 K" P* b0 L4 J
{
$ N% W6 ^& E2 i; _3 n //id相等 则 改变对应的dest和src
, T1 R) a% L# b: T nTmp = m_Item.nIndex;
) Y( U1 Y4 ^. z+ o1 ? m_Item.nIndex = dest;
' L7 I6 F# E' a$ v }0 t: W. C. a/ o0 i w7 U+ p* ^
}# `6 ~, \, I5 x8 L; ~
//临时数据保存完毕,交换开始
" p! x$ z+ D* j, h9 d4 U( a: g for (int i=0;i<MAX_INVENTORY;i++)
; m$ ?1 s' Z K' ]/ c- q; m- A9 s {
* v: Y" b5 {$ O if (dest == m_Item.nIndex)/ t" p, {( w3 ^$ }! M' T
{
/ F. s9 {# {4 g4 @( S/ s# y! N) p //id相等 则 改变对应的dest和src
' P2 L8 N% M$ t( x9 ?% ^! t7 o m_Item.nIndex = nTmp;! o$ _- C( A+ c3 E* {3 s2 U
}8 h7 y% S8 k" q1 H3 p% q4 m4 I
}
0 V( w; ~! C) G# Y$ d$ C5 D6 Z( ]( V}
0 Z/ d4 B8 \. t};
$ b" r2 @* Z$ f" g-------------------------------------------------------------------------
1 J1 @) P# }# T s& @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 w5 x( c1 w% Z% \
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 D, a) T- }4 L' @紧靠其上添加:
+ Y3 @3 I8 U! [! B) d$ ^if( pWndBase == &m_wndMenu )
5 y. C k/ U4 X; ?{
5 @( n- P* c8 o/ j switch( nID ); x) N$ ?# o0 Q! j) C( j6 J6 v
{
, m" _( Y! V) o+ m, h case 2:
" G5 {: J6 L0 K4 e# ^ {
4 f+ O8 D0 G) P, C7 A" ` //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 _! R! U% ]% @; h/ k0 [
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ @6 `# H z$ v9 v
{: E& b: d) v6 P9 g$ |4 Z
break;# [# O$ s+ i$ J, q, q
}9 ?' D, ]0 d s: O7 X/ N' x
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* L- G% u$ E' q# t {
" v1 c3 z: } K$ [8 v8 u5 {- G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: \2 r( P: N" d, G; D+ v; \
if( !pItemElem )
: @" A. }1 G' A% p) L: {3 x continue;- {! Z- }: b2 d1 _& X
if(pItemElem->GetExtra() > 0)& M2 |6 b& m) ?( z, }/ O! H
continue;
A3 O* D. S& I0 Z: O8 L1 i/ G5 E: G if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 C+ U) T: Y7 [* O continue;
( P2 T9 z, T/ P. A/ m1 | if( g_pPlayer->IsUsing( pItemElem ) )
) [% t9 Q+ S, X6 Q continue;7 F5 w4 Q) T! D% k6 U% Q6 a# h
if( pItemElem->IsUndestructable() == TRUE )1 {( ~4 e" R) O1 o
{! P5 M0 o* m- j$ G
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 _4 F% |; b$ z
continue;# _& G! ` Z0 }# m1 ?1 Q$ V
}
5 d- a$ z! Q# ?+ F$ ]# ^1 h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 o9 u, m/ i# \. a; X+ @" c }0 k, K1 M/ v, R; ^
break;' f# g5 E! ~& M7 U) S5 c
}% C' z: E i" v
case 1:8 V8 F5 \! Q& ~& X1 B. {
{
_% ^3 `0 T9 T7 v$ d7 |8 V //整理背包. m; @& A# p/ j; {
//////////////////////////////////////////////////////////////////////////
) Y3 ^1 |& x* i9 |/ P8 ^6 A) k% U, I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 R' q5 K9 @+ z- [6 i/ G. ~
//////////////////////////////////////////////////////////////////////////7 u( a. ~# E+ y. k; J0 e
//////////////////////////////////////////////////////////////////////////
3 X/ [1 A% t; {$ d CInventorySort* pInvSort = new CInventorySort;
( `% a. M. U5 ^& }) f8 [ I vector <sItem> vItem;& f. ? m! x2 L. y* u
vItem.resize(MAX_INVENTORY);//初始化大小
/ K. g- g9 H) P //////////////////////////////////////////////////////////////////////////3 H: g2 W+ q& X# ^; h
//填充数据$ i# R: y' x( F3 j6 Q5 \
for (int i=0;i<MAX_INVENTORY;i++)
# `1 q! R R/ `; o4 \2 q {" G4 C2 Y7 x( f) `- \' C7 o6 {. \7 [, f. p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 W1 z1 ^9 o! R* p" X% f$ p
if (!pItemElem)6 G( |* g7 Y c, G$ V3 h
{6 {8 T. _- Z6 l+ _+ G1 k8 K$ J
vItem.dwKind2 = 0xffffffff;8 R) D( a5 k+ w4 S
vItem.dwItemId = 0xffffffff;
* g/ n' m& O% F vItem.nIndex = i;
+ S& q: Q# s/ X }else {
/ ?% t; {, Y6 ^ ItemProp* pProp = pItemElem->GetProp();
/ U0 ^% a5 w9 _4 V+ L# m vItem.dwKind2 = pProp->dwItemKind2;( s5 o, I) a8 _2 R
vItem.dwItemId = pItemElem->m_dwItemId;1 r. p- m$ A) a* {
vItem.nIndex = i;- y; H3 w0 ?7 j" n, Y, `
}+ E2 [$ g/ d2 O5 }6 m7 c( W6 o
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 Y( h" c% J: I g! U2 ~, i9 P; B k0 e
}( Z, i% j0 X4 N0 b; i
//////////////////////////////////////////////////////////////////////////
+ s! f9 [. P7 O/ \- k' a, x4 c sort(vItem.begin(),vItem.end());//排序
, |3 B4 L# J1 ? //////////////////////////////////////////////////////////////////////////" G" O1 q1 a' I- H
//交换/ b6 p) R+ u$ ?0 w
for (size_t i=0;i<vItem.size();i++)
3 g0 `: T6 E9 o8 _! t- U {
$ |% N: B9 A$ P' |7 P6 f //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
]" i z2 Q3 L8 i" b# t6 N pInvSort->Add(vItem.nIndex); y; Z$ i0 g7 u/ l
}
. S! c! Z \. A6 `# m; D& |% F BYTE nDestPos = 0;
5 w# K R' g% i/ P8 J for (int i=0;i<MAX_INVENTORY;i++)* K9 b% E, T, G* ]
{
# s" v5 r! G! K' v7 R1 ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 d1 R% R# a8 k
if (pItemElem)
0 _& M' a$ t- }8 d6 {: z7 l {
; i' R3 n) z8 F* f8 I/ M1 F if (IsUsingItem(pItemElem))
% V* a6 r/ J1 t& j {) Z$ Z! Q; ~- @% `. j
//这个位置无法放2 A# ]7 ]9 Z+ l) }1 i3 ?
nDestPos++;2 B- @) k. ?, M7 V1 p! v. @& s
}
; Z. m$ }6 p5 U& b+ ?4 @ }
8 `4 d. k( f# ^* ^5 F) \9 ] BYTE nSrc = pInvSort->GetItemSrc(i);; J6 Y0 ~& q# t* `! L5 f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; b1 n1 F' w7 k0 k, M! B
if (pItemElem)
3 Y& K$ I2 o$ _8 j" m3 G, t9 l {
: Y, o" M/ p# q8 g2 q if (IsUsingItem(pItemElem))
- J& R8 q4 @2 A0 r- j, p/ k9 x/ d {
1 R6 J: s0 V( R! d //这个道具无法移动,跳过+ ^1 z ]( }6 Z3 @" X8 M
continue;
- A' Z# v7 r, T2 t }5 W+ \; F& s7 c3 F
}else{- X. v' m/ @( ^+ D/ e( Q
//空位置 不用动
1 T3 e2 N1 S/ `7 d% m continue;
: _3 l& @: V! V2 a }
* a4 v7 O" L& P' ^! j/ C. ~ //////////////////////////////////////////////////////////////////////////
7 e+ s& H6 A6 I4 ~, a //开始移动
1 }+ [- R) Z7 l- S$ e if (nSrc == nDestPos)% A9 e: l1 w$ j0 S, N2 F
{" N) O4 A% Q b, J @3 u
//原地不动
$ }$ ~: M e: m: j' O3 n$ e0 h( ` nDestPos++;
4 l6 O/ u4 w" m% f9 R1 r continue;
3 c. b3 T" ]2 s! y8 Z7 W* n }
4 P. ]1 }6 q+ l* Q2 |) G. K pInvSort->MoveItem(i,nDestPos);- O6 n; X. i# x0 m$ i% P
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- a4 W8 N7 z; Z" U7 K; h: h Sleep(5);4 J& O f( m. j1 N
//Error("移动 - %d->%d",nSrc,nDestPos);
- g; e9 R) S$ M4 ] nDestPos++;
4 j6 t) Q$ ?" S6 a6 G7 ^ }+ q# ]& t; G( g* S8 p6 C
//取第一个元素的信息
, z6 e8 v' t! f% k/ P/ D /*# d9 b5 @3 K$ h1 C
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 M0 Q+ b+ l' M+ z0 ^
{
& G9 o/ k/ H7 z, k, f. p Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 F8 a0 P4 |. [+ A2 W4 A
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 n% u/ N! Z4 u( K1 K* K) J( c# t } t& w0 f) x% B6 W# n6 ?
*/' L( H% F) R D, ?' ]. i; M: J( U
//////////////////////////////////////////////////////////////////////////# Y+ M( T% p& p, p
break;
1 i2 T7 g7 Y5 A. l9 [, M; q4 i }
8 f. s' a) F. @9 Y* E) F' d } 0 V/ g0 ?. [8 j, H3 f$ w
}# m+ U6 d/ u1 p; g0 \
m_wndMenu.SetVisible(FALSE);+ w$ A6 R9 C% ~& X* H2 O# e
' {$ m. S# a( ]% b. J--------------------------------------------------------------------------------------------------------
6 ?9 i- `: K& Z6 t( O% ^搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" K7 `( l9 h& ^) b{
. s8 y) F9 o1 h# w1 `4 RBaseMouseCursor();
2 A- ^' ]0 M& e+ F2 l; A}' ?' t- k8 z0 Y q! Z" _3 P
在其下添加:' e5 q% p3 t+ t! y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( m3 C4 h" b4 P/ Q: Q{8 u& P7 F# e; |2 m. s. o
m_wndMenu.DeleteAllMenu();
+ |7 ]% {/ |) Q9 Am_wndMenu.CreateMenu(this);
) K4 k% v% ^( I. [m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
P2 ]/ G5 `2 u. I! B* b
. ]/ X& S' K* t' s1 T1 hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ t7 ^, e7 |4 j( r* H- |
{# ?4 c- ~) h+ l
//P以上级别才可以删除所有道具9 W9 r T0 Q5 L- l
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- G3 L7 C* v$ ^, v% @- \* f
}. ?+ L; u& P! x& R3 @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ M* j8 V& x; D/ W( d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, W/ c9 b- ~) I) P4 S, m
m_wndMenu.SetFocus();
$ D/ C4 k( s- D+ A}2 `4 c) L4 S# \8 ]; r/ R
------------------------------------------------------------------------------------------------------------
1 Z: c, N$ d2 m4 g3 X# |* l*************************
% n/ R1 x( d) j" h' e4 q1 EWndField.h文件
6 U; g: B; R4 Q* p$ _7 k*************************
6 g# J& i0 @/ s' }搜索:BOOL m_bReport;
8 A0 O( G& U2 S# G其后添加:" ^' K) \' g& J* l
CWndMenu m_wndMenu;
6 w/ Q6 n5 Y+ I6 M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ z2 [( @( W3 t- m8 y
其后添加:0 M6 I! ?) v$ u0 Z& K3 W
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# K* C+ Q# s: \0 q, y& Q; q2 k4 j& c) b' Y
8 |7 V5 p+ R& V2 j* r, d
|
|