|
|
源文件中_Interface文件夹下WndField.cpp文件
7 d( j: L+ V6 v. p' k2 i9 x7 {搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 s9 p4 J0 G) d, S3 t( O/ {7 m
. e9 |% b" P7 A8 V5 y
struct sItem
! ^; C* b7 ?! _$ K, ]! y{% q% T) C0 X1 [6 ~
DWORD dwId;- ?; z, a" b7 z2 {0 u6 s
DWORD dwKind2;
9 i1 n4 x, T# I9 V+ qDWORD dwItemId;
9 o" q* f1 q1 y0 ~0 Y3 L* FBYTE nIndex;
+ E$ _1 t9 Y* ], n$ F; GsItem(){
+ m) u5 K' R& N dwId = dwKind2 = dwItemId = nIndex = 0;) \+ G2 s3 [' z5 P
}
% F; ?( N5 ~( H( G; U% I4 dbool operator < (const sItem p2)
/ p3 G2 O# D; |6 q% c0 t4 [{
$ }1 ^6 i7 y) S" r if (dwKind2 == p2.dwKind2)
( V: H- R( E e' y {
. H+ ]# M9 f1 _ return dwItemId < p2.dwItemId;
1 @* y, z' n/ f9 |1 ~9 k9 }4 T2 @, ` }else{% Z8 M" ^7 I6 h# V: M R9 `
return dwKind2 < p2.dwKind2;
0 O# y8 B1 T1 s5 a2 O6 \, f' z }. H! J8 t$ j+ }# M
}. M# F. p) q% b$ J/ W4 Z" y0 T
};/ ]! @* J0 }4 v" I: O* f
class CInventorySort: V. C# O$ w4 {
{
: [$ V4 X( y7 E9 l2 R4 U% S! Ypublic:
2 k4 G6 Z3 q1 p y% N6 CCInventorySort()% f/ W; @* Z9 f I& U( y: t3 h
{' Z3 p- H6 {& S
m_dwPos = 0;
! D: Z5 Q: t9 m& Y3 w! o}
/ r0 y5 U& N& b5 d~CInventorySort(){}
: U1 {6 ^& U1 {5 o2 zprivate:% Q3 U9 X' T8 ~. F7 h! P! N w' j5 @
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- K' r- I1 Z1 q' F7 w6 a8 RDWORD m_dwPos;) v" l G2 Q% L6 G: q" h# Y" T
public:
+ ~6 Z7 X' Y+ M; Hvoid Add(BYTE nIndex)$ h' D F$ K, z# C1 O/ p w- c
{
, Q% v' A; m7 f# U if (m_dwPos >= MAX_INVENTORY)( m+ ]) G: d4 N( S1 k
{
6 v+ q. z# {$ V. S0 L return;
+ D* c3 W d* C2 Q' m }
9 u2 G D' U) m: F: R _ m_Item[m_dwPos].nIndex = nIndex;
) X" z8 \/ G% a6 A m_Item[m_dwPos].dwId = m_dwPos;* p: m2 W* `+ g( M
m_dwPos++;& F" l: z$ X& D: C3 ^
}
' z" U* A) O' o/ x- iBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- z+ G8 ~' l5 Y# c2 W( ~6 B$ i. _{% Y: L9 P8 G6 Q2 g' P
for (int i=0;i<MAX_INVENTORY;i++)# q% Q- c6 Q$ s; x2 g
{
9 s" K N* M7 \ if (m_Item.dwId == dwId); t8 a9 p) S4 c& `0 D- R% p
{
/ c# E: s& D$ n( B! X) L2 ~ return m_Item.nIndex;
" g, y$ l) T- G. N' o0 z$ j }8 W- |6 N, n" x3 [8 t+ L5 T
}
3 h7 u" q0 E* c9 x9 | return 255;
% c, W; z7 o/ [, W u}5 }1 t& v% Q" R4 p, v, z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* @5 R9 b7 d! u" s" y' C0 r; q
{
6 M4 h: q; k: H( }: d7 l2 P+ ~( n BYTE nTmp = 0;% A% l0 E8 S" x- u& x
bool bDest = false,bSrc = false;5 {5 b" w: s3 y
for (int i=0;i<MAX_INVENTORY;i++)# W2 ?# G. {8 _4 L1 E5 T
{' f4 k. A% f" Y( ]
if (dwSrcId == m_Item.dwId)* F9 T, D. z* N! g
{. d9 x) t, D$ ]. V. n# o: C3 B1 m
//id相等 则 改变对应的dest和src
; o+ t1 P/ o4 Q+ S8 Q; C" y9 A nTmp = m_Item.nIndex;8 V$ Y& [! D! c9 k/ ^
m_Item.nIndex = dest;- w9 V$ E* H) n" z* R
}" Q; X8 E A! t& p
}
/ O: \ h; W# Q4 u9 x //临时数据保存完毕,交换开始8 g& \! D; }2 m2 c& @+ ~
for (int i=0;i<MAX_INVENTORY;i++)
% Z6 i% ~( y* ]$ V9 [( j {
, X8 \: |" G/ k! I$ R if (dest == m_Item.nIndex)
, x3 b( m! J8 a {
/ r! S$ D L% T3 r- ~ //id相等 则 改变对应的dest和src
! S5 m7 |* b- J1 M. [# q& f m_Item.nIndex = nTmp;
! _+ a% X: K& A! w }
# a+ U+ {( X, t& ]( u+ ?9 w( P }9 `5 k* T) H6 g, t
}
3 p! o; E6 w: B: B% g3 P};
* Q L% A6 x r) v7 |( i-------------------------------------------------------------------------. n7 x% p9 A* F @+ U0 R" q T
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( {/ ]+ h6 Y+ v# R搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 ?6 g7 S# m9 `7 z$ P; j- M" w6 t* d紧靠其上添加:- Z* t$ o( c ?0 L. y3 u9 Q
if( pWndBase == &m_wndMenu )
8 w5 m2 M! \5 V( k) H& k# Y{# y" K* {- p4 c# W: ~8 }2 i/ u/ W
switch( nID )( L- ]) J* I: g0 H& ^1 l4 N1 |+ P$ X
{
6 O/ H- L( y, P case 2:
/ r5 F+ e; N" V n# @+ b {
" \: ^7 a% L- Y+ ` //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" L0 m% o6 I6 G3 |9 N- R3 N/ \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 w K/ W w7 i+ d% F! u
{
' ]; C' t- o) A4 | break;
; Q9 s: h! g0 L$ O }
+ V8 ~5 u% A" K, V$ }" i, G) q; N for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. Q$ W8 w# Q; F% q7 O6 q+ Q/ W* i. q {$ `0 a8 b/ a( G7 H; F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( Z4 l/ ?/ N1 s" ^' d1 U
if( !pItemElem )* C/ e0 z9 O6 T! a" {8 z& c
continue;+ w' d$ U4 Z. { f- p, u
if(pItemElem->GetExtra() > 0)2 f6 u8 S' N* [
continue;1 b3 i) v7 z4 [
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + l* _' y! Q% U: K# x
continue;! j0 H8 N5 f" K
if( g_pPlayer->IsUsing( pItemElem ) )
9 q3 p/ Q, a7 l+ h& B4 s! P continue;
' G) l+ Y! C1 E if( pItemElem->IsUndestructable() == TRUE )$ ^& G$ H5 \" c! P$ k0 d
{
' K8 U' t& O+ o g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; _% O2 U- X/ [9 }; j# H continue;
5 ^! L7 a H) Z }# o6 U* A; u$ T) o0 |
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! [5 x* A& ]2 l0 M
}1 O* ^6 I/ a& [& Q: a/ a
break;( B( L6 B! c2 ?
}2 j# \# W2 e+ F8 _. r9 W1 J& k
case 1:
0 ]; K4 u- ?' m; Z {
" b M! R0 x' l, m" }1 U //整理背包
% y% Z+ O6 E j' X5 y: M2 b* h //////////////////////////////////////////////////////////////////////////% _: e, t- q& ]/ \7 ~! N
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) I& o8 g- z+ I, F s6 T //////////////////////////////////////////////////////////////////////////3 D' F+ @' G7 O; p
//////////////////////////////////////////////////////////////////////////" z$ G4 n8 U# ]8 S5 r/ K+ ~
CInventorySort* pInvSort = new CInventorySort;7 g. x% I8 v4 N
vector <sItem> vItem;
2 F- i# ]" L3 }/ W1 J; B vItem.resize(MAX_INVENTORY);//初始化大小/ }) [5 P3 G5 y5 ^; N# H
//////////////////////////////////////////////////////////////////////////
8 o; Z/ K8 v% t* L: W1 E3 N d //填充数据
3 V7 a- p& q* v3 d5 R5 w8 C for (int i=0;i<MAX_INVENTORY;i++); U, K" D1 q- \( i \
{ Z2 G3 s. U) _) g) s. o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ O( l8 W3 S G4 N if (!pItemElem)
4 a" @7 N. i; K# ?9 i5 h0 t& D% | {
7 c' |: k% v8 ~/ a vItem.dwKind2 = 0xffffffff;
% p/ v& V6 h1 c+ k) S vItem.dwItemId = 0xffffffff;
# G* u8 j0 {5 e# B vItem.nIndex = i;
7 m8 G" i& T' c; `; X N7 C; l/ b8 F }else {
! {; u3 H! Y) ?6 L. r0 E ItemProp* pProp = pItemElem->GetProp();
& c) h; A- a' z9 E+ T vItem.dwKind2 = pProp->dwItemKind2;
& E' p& b8 z3 ?5 ~ vItem.dwItemId = pItemElem->m_dwItemId;) Y( W: A/ N* r( C& H7 L, k
vItem.nIndex = i;0 n5 \9 }4 r8 k" ?4 ]1 j( @6 U
}
& w4 \5 |8 u+ i& ^# @ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; x# E" l$ y* y) f: x4 N. D7 y
}
; l4 a. R- h/ c6 v //////////////////////////////////////////////////////////////////////////
5 _+ t- ^5 e0 t) ^2 O" Y8 h sort(vItem.begin(),vItem.end());//排序
+ o/ u1 l3 B. s+ Y7 D/ f9 f //////////////////////////////////////////////////////////////////////////
% J* ]. {; }4 C9 C r* ~ //交换 b1 }' k6 [& r" a6 w6 n/ E' ?
for (size_t i=0;i<vItem.size();i++)+ ~0 U2 O4 O: H( i) M
{
* x* X% D) t8 S! S% {+ A //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); z8 ~2 I: M; Y- h0 J* X6 N
pInvSort->Add(vItem.nIndex);
; O- k( d c; Y% N# W' k' I }. m# F6 i/ I; [( a8 k9 S
BYTE nDestPos = 0;' F; ^ p, V& I1 [3 ^4 L" U
for (int i=0;i<MAX_INVENTORY;i++). i/ h" x4 L: B, M3 d* T4 t+ K
{% ~) L' h! \. {2 `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% M' O. W9 l3 E0 } if (pItemElem)
* c6 ?# h$ x1 B+ W% k: d2 U {
( R8 a4 _, I/ a1 Y$ Q9 _; T4 P if (IsUsingItem(pItemElem))
" g- X& c" Y# M( R$ L; F0 D {
S% R" E1 Q6 T+ z" h //这个位置无法放
6 c8 j1 m2 {+ i nDestPos++;
8 ~, e: O6 D# e S }
5 {7 _* q' W4 p3 u# |& Z+ y, [ v }3 e$ g' f1 Y! L T
BYTE nSrc = pInvSort->GetItemSrc(i);; Q" I* X- G X0 q# {& W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" G& F% y6 H: I% a6 [. k
if (pItemElem)
. J6 A8 ^) x/ A9 D+ J {
$ A" J4 }% z% x if (IsUsingItem(pItemElem))9 o2 J$ `) T6 T A- a7 Z9 E
{
& Y, a3 w2 @- L* G3 j1 V2 C //这个道具无法移动,跳过3 E7 R/ C( U4 n* {( E- V" O
continue;/ z4 k) a" o* e
}( ` s7 T+ x4 l4 j( d# I
}else{4 @! O( s9 m1 z! b- Q) J
//空位置 不用动, p" f* m, y9 N' S3 ^/ Z; z3 y
continue;
- }* v: I4 ~& T* t% N1 T* O" ?4 ?; D" F }
+ c# T$ N4 P5 E1 f //////////////////////////////////////////////////////////////////////////
; t! x2 F( r8 w2 B/ T //开始移动
& z8 ?9 @( I6 d/ Z: V0 B. S$ r if (nSrc == nDestPos)
. j) c) m( c9 D- k' O {: ]3 o" v" W2 Q% I- N
//原地不动9 |+ f! } |: }/ e9 B7 X n
nDestPos++;* I' w$ f. z7 `- v6 K* P; j
continue;( Q5 v% E5 D: J9 ~8 g
}; A' Z- {% Y- N1 J
pInvSort->MoveItem(i,nDestPos);* S' N: k5 Y5 U; r0 F; i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) m8 F3 ~4 d Y7 L& n Sleep(5);
; a$ m+ k& C' ?* G1 z+ p4 B: F) O //Error("移动 - %d->%d",nSrc,nDestPos);& |( W, D$ \+ ^, _4 v, b
nDestPos++;
4 ~+ K6 T; i# a8 P5 q }. ^2 n3 i# G8 \" x3 V) w% B! M8 ]
//取第一个元素的信息
. r1 \6 L. T$ |- k$ ^8 t. Z6 G2 |7 k7 d /*$ l& L, S- C$ X
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' C8 E: m5 Z4 I$ }9 F
{! j% C m" y* v- W; E; W1 @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- N x( L; j$ N5 K3 V8 i
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ u7 Q( Z A; G
}6 F$ \, l' k7 k' O! c k7 L
*/0 Z" J' Y3 q' F# u+ w
//////////////////////////////////////////////////////////////////////////
; t& @' b) w+ A2 U break;
! ]! n' i3 k+ Q8 @7 K7 |: Z4 h }
! u& w R5 b$ X& Q8 B } 4 L. w: j9 I7 T* [, M9 @: d) S
}
, K/ q6 A* x8 Z8 P% H( rm_wndMenu.SetVisible(FALSE);
( `* m( w9 q* V& }; F) V, b r% W
3 d0 U$ m( |- c, h/ v--------------------------------------------------------------------------------------------------------( H/ H+ \: Z; o5 y/ _* s3 w- \+ W
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 y( z2 G( R1 I% J/ h3 q5 b( G{
& q' k( [ y8 {BaseMouseCursor();7 _8 w- C- j2 u& h! E
}! \* ?" h9 M+ d5 z" L6 e# p+ H
在其下添加:
2 c8 X# Z, ?) B1 a( x: @void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" K. ^5 Z K! o8 [$ P" V
{* |, j% y/ F2 K9 l6 t& U, b1 z
m_wndMenu.DeleteAllMenu();5 ]+ G+ |. U" r9 p
m_wndMenu.CreateMenu(this);
R9 f% y7 T! X& W. p# ~6 a# z4 }4 Ym_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' D8 m, `6 F, ]2 ^& d' W& B7 P0 ~' U U, B. b5 a0 e( q/ V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* U" y5 ?; s" t( Q3 d6 w5 r{
a* w) a, F5 q //P以上级别才可以删除所有道具1 h" F4 b4 ^# i! D
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, p( O8 w1 n; C& z8 }9 U
}
8 ^3 D1 h+ D. K% k# Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 e- H" s+ ~: R9 Xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ z# U% S4 C" e( y5 Q% q7 \
m_wndMenu.SetFocus();
, |4 M/ p9 n- ^% Q4 H5 b% g}
h6 Y0 e$ R: V* ~* _------------------------------------------------------------------------------------------------------------
$ X* q9 W2 \. B( G6 _* |* A0 @4 a*************************) \& r4 j/ T' z' G( S
WndField.h文件: S0 `3 ~9 S) Z/ u8 B3 \
*************************
0 }( N6 u8 t* T; Z搜索:BOOL m_bReport;
7 a+ A9 P& ]% L) f7 Z' S# K其后添加:
* Y* g \4 {/ O' y! \+ b2 Q5 Y8 VCWndMenu m_wndMenu;
! O# M! \4 X6 x9 f搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
f0 z4 \! `& }" v9 ]其后添加:
: c$ I2 p) }1 Y5 Pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
- K3 N6 Q& v$ W! g( Z& ]
% e" B9 u/ d q ]& {# o- U1 u) v
|
|