|
|
源文件中_Interface文件夹下WndField.cpp文件) @* r7 L1 [0 q4 f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); @% W) x- W; k
1 J3 B3 @' f& j$ c. V
struct sItem0 R. }7 u/ ?" z2 ~& P% |
{. U1 d4 Z: K8 r# N5 y
DWORD dwId;" J, \1 Y. Z9 O+ C8 l
DWORD dwKind2;, W( R2 r7 w% V9 p
DWORD dwItemId;1 [! i1 \) k7 ~* H9 A8 H
BYTE nIndex;9 O; a& v# M- D- m# m
sItem(){
* H, ^/ S( V2 c$ R, [4 U dwId = dwKind2 = dwItemId = nIndex = 0;
6 q! D% U& o& K" k' k, G, U% ]' v, |}6 |+ f1 T4 K- j' g8 d1 o4 G
bool operator < (const sItem p2)
6 l% C& g6 ?( R& {3 J+ i: o9 T{7 U6 C6 q+ [+ z1 W
if (dwKind2 == p2.dwKind2)
0 _1 `5 u- M7 A: ~) q' i% _5 Y {
( |1 `6 h% z$ Q, S return dwItemId < p2.dwItemId;6 R: P: t, z0 ~
}else{
/ m7 X# _& ^2 `0 ]( V9 _ return dwKind2 < p2.dwKind2;1 B2 B3 z# m: Y$ W! X
}4 w2 f* n. u& L. B3 i* b9 B
}) ~; ?% {9 e% U% T# J5 n: u
};; V2 @# s5 h; a, ^* ^/ s# z
class CInventorySort W- w0 {! ^* V# V1 n
{
2 ?% b; S2 k3 B: J2 u: apublic:+ l6 h. n/ {0 P1 t+ @- C
CInventorySort()" L$ K1 r# R2 b
{
! o* R l) h2 D# r m_dwPos = 0;3 o; ~' ] Z0 y% {0 Q) d T4 w
}
8 l1 F! X+ W% V! ^~CInventorySort(){}) f+ }/ ]: ]: ~# O8 ^# u. }: v
private:( ^6 q, N7 w9 l) h3 d I* p( W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! U' a; b2 z% N8 X/ V$ j
DWORD m_dwPos;
$ |! P1 ?7 i& s$ P$ X3 fpublic:
% @ q m( T2 m0 t/ bvoid Add(BYTE nIndex)% U2 e4 o8 V5 e* l
{3 @& Q1 Q6 A8 Z% u- q
if (m_dwPos >= MAX_INVENTORY), B1 _( _- ~6 d3 `
{- y3 ]: }- V' a9 x
return;
+ q* O0 a3 D9 u$ c* g! E4 r } s5 W- L/ c+ F8 j m
m_Item[m_dwPos].nIndex = nIndex;$ F3 h" B' W' M o
m_Item[m_dwPos].dwId = m_dwPos;
" }( q7 N+ h' O7 f! q9 B& D5 o' X& s m_dwPos++;
5 `% t: d7 L, I2 a6 O}5 y3 Q/ c& h* Y1 P/ s1 S7 U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 c5 y& D7 R' z4 W{
( X9 l: w) \& R/ U7 [( ]5 D$ F for (int i=0;i<MAX_INVENTORY;i++)
2 k. k, y& L N# {5 {+ v- D$ j/ T$ e) F {' `( L* W" T' O8 |) V' k& `
if (m_Item.dwId == dwId)9 M9 B; u) b- w5 D
{
6 v5 [6 V7 a, j5 ?% s) r% Z! ~( k& b return m_Item.nIndex;
" y0 |$ N/ x4 ^) G9 `9 j6 Y+ l }( p* ]# S) x1 f6 P$ ^2 H$ f- K
}8 a+ d" W6 E3 V0 c
return 255;1 E! ~" m: z9 O& D. B4 d
}+ ~9 l, K w8 [3 P% Y* u
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 c; K9 @( E) _1 B' w% i6 a{' K0 r5 g- d- N m% q
BYTE nTmp = 0;; t, n* `- \2 f$ F0 e
bool bDest = false,bSrc = false;8 G- l9 D$ u( c
for (int i=0;i<MAX_INVENTORY;i++)
5 N. |0 [8 W2 I! B {2 J; K- |6 M a& Q9 E" G& z
if (dwSrcId == m_Item.dwId)2 @$ [* i2 V; }* H$ `9 {6 X* b
{
$ M% T* Q2 i4 u //id相等 则 改变对应的dest和src( e' c7 t1 R( w+ F
nTmp = m_Item.nIndex;& J( G1 I2 d; P5 S% T5 {5 g. q
m_Item.nIndex = dest;2 R5 {" k5 z5 J1 q$ f& H
}% Q5 [" l' g% I% a% J- V. O
}
4 N) U) u% B- r4 p$ q# L6 B //临时数据保存完毕,交换开始
" u* H6 Q, S. e! Q for (int i=0;i<MAX_INVENTORY;i++): L6 y7 Y3 L3 o8 X3 g
{' T4 |" N, Y3 M' n$ L# p
if (dest == m_Item.nIndex)
- U8 t: ]. P9 e! g8 c {
9 \8 ?& T4 u5 B7 x //id相等 则 改变对应的dest和src
' J0 p7 k/ o2 q9 w3 [, |% k m_Item.nIndex = nTmp;
8 U. D2 t3 r* y6 a; \ L" K }6 T7 O2 G" ]( T
}
! g& G2 t% [/ ?/ ]! _, E}- R) q3 p$ b$ D1 D& f }" ^ `
};4 _4 f- t% a7 Q3 n' p# f6 M
-------------------------------------------------------------------------
. M' x& b {4 X. f+ @) F依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# N; k+ i5 t3 Y4 y4 |. w1 s* U搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# [# o# B2 k+ K# h% ?; Y紧靠其上添加:
" D c L2 _* J+ C" b) n; l$ R. Zif( pWndBase == &m_wndMenu )
- J3 H4 ~6 Q# [% e: U6 Z{
4 O7 K. I9 [8 q- Y4 A switch( nID )
`9 q5 t1 F4 ^$ C/ m& q: @( V1 V* P {
' n M. n+ B9 u4 | case 2:
6 W4 I+ L' H4 X! Y& P {
; R/ `. G+ D8 L- p //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& R A: j" W2 c' ^/ O4 H8 G
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, s; ]' c1 N) E2 O {9 r. ~7 _( h/ I' C- \* L9 x3 ?
break;
; P4 E+ M; N; b: ~- k* e }: u# D" t# W9 g: U9 P- a6 {* h
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 H) a# i: E7 E3 N. ` {
& U$ s# d1 z& Z0 f G: I1 u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 ?! s8 O# E8 q if( !pItemElem )6 ?# u9 u" |; Q# E3 d& D6 g
continue;9 N4 r) z! b9 z( P$ {0 Q, I( H% X
if(pItemElem->GetExtra() > 0)
. w8 B/ k( a7 y) _, j continue;
& g2 t" _+ K5 O+ h if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 A' c& N+ N& k
continue;/ ?: Z1 P1 x7 L
if( g_pPlayer->IsUsing( pItemElem ) )
1 m% I; ~9 [9 o& p" |9 ~ continue;) s' q0 C3 b1 b
if( pItemElem->IsUndestructable() == TRUE )8 o5 D5 t" I$ N; [' J( X
{
0 T0 s9 u7 w) H5 u$ r+ n) ^5 H g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 Q. u n+ o+ t$ F& n) m; \ continue;
% m& y1 y9 l5 f/ z% B }- {2 o$ f9 P: r8 E* S% \* h
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 ] h6 b1 T5 ^' |# E& Z }
; e! a8 B9 N9 w: t break;! }2 }% E4 b& U
}
6 v6 X' t6 ?4 i; _- j. Y% j; V+ M+ p6 w1 D: t case 1:
. P$ q) D* H T" E {2 i9 L# B! o- d
//整理背包
2 T) K: I4 d+ @ @! Y5 t4 k# d1 K //////////////////////////////////////////////////////////////////////////6 r# x8 B% L% `$ O3 _
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 U: ?6 c! C8 k0 ` //////////////////////////////////////////////////////////////////////////
3 d! ^1 x& o; p% f /////////////////////////////////////////////////////////////////////////// f5 N8 q& _1 R- ]% F8 Q
CInventorySort* pInvSort = new CInventorySort;$ |6 w* g0 B7 I# H
vector <sItem> vItem;
/ Y M# y" t7 L8 d# s vItem.resize(MAX_INVENTORY);//初始化大小
- t' u4 R3 B$ v1 E3 g //////////////////////////////////////////////////////////////////////////
# }7 l6 b- y6 x$ P0 X- H //填充数据- ]: b( Q/ l; Q; ] o
for (int i=0;i<MAX_INVENTORY;i++)- p7 T% L: h( \( j
{" O' \: G; ^) g) H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* }* w1 E; t& x" U
if (!pItemElem)' [1 V, E) i9 {' R/ Q% N
{4 y2 |; b' b3 w2 U$ i
vItem.dwKind2 = 0xffffffff; h) y; p! z8 K/ Z. I1 q( d( ? \
vItem.dwItemId = 0xffffffff;
6 ?' t1 |5 c' _ vItem.nIndex = i;2 c" A/ T3 M; p
}else {: j, g/ {5 ~" }/ P/ R2 e/ X
ItemProp* pProp = pItemElem->GetProp();2 B& i! S( M; A5 X0 D# z3 d' R
vItem.dwKind2 = pProp->dwItemKind2;
! _9 V7 x1 ?* T9 y8 m( n7 ~# U vItem.dwItemId = pItemElem->m_dwItemId;& r5 f& B7 X7 k
vItem.nIndex = i;& O4 W3 l' b/ H5 Z1 x3 r
}
7 C3 n/ G. j3 p% a7 f //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& Z; ]" {* I" @) [
}
5 b2 K8 i7 {( t- L3 { //////////////////////////////////////////////////////////////////////////" ]3 W. ?' U4 L$ u% M' q
sort(vItem.begin(),vItem.end());//排序
. e7 c1 F' R! o //////////////////////////////////////////////////////////////////////////
6 b4 J8 L8 X8 F( o9 k Y! A% u& o //交换
8 a5 |0 f8 Q" x# j9 o/ w9 D/ F8 | for (size_t i=0;i<vItem.size();i++)2 d) O3 |9 i; r. l9 Z2 U
{, d* y0 n+ z/ A
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! x8 D) ~4 |9 v: _6 v4 j pInvSort->Add(vItem.nIndex);/ L2 G! R% a# |, l Q
}- L( u6 \* j0 Z! f& G Y
BYTE nDestPos = 0;
f S$ T8 o4 ^! w# j3 ]9 e! x for (int i=0;i<MAX_INVENTORY;i++)
' G" N. e4 y; ?) V {
; V6 q5 ^" n5 P$ f# Z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 G' l5 U6 p+ A4 O7 i; w2 j
if (pItemElem)
7 t, ~( s7 F! Z {) P+ r4 d* P( Q5 I
if (IsUsingItem(pItemElem))+ G9 n$ L' b: w
{
, c0 n$ V3 h: c //这个位置无法放+ H, G+ m x: @) x! T) q
nDestPos++;
$ [4 c* O1 A4 S* T m }) z8 Y$ m8 p& u7 X; D$ }
}6 D# r9 k3 w6 }6 J9 ]) y7 D
BYTE nSrc = pInvSort->GetItemSrc(i);
% X4 y1 D6 W5 p; K) u pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% n- }1 d! w$ ]" {' W# w if (pItemElem), L1 Q5 _) [+ Y" T7 |3 y$ B
{* g% W( P: O7 k8 Z+ T% D; u
if (IsUsingItem(pItemElem))0 Q3 f$ V6 E+ p
{
( [: B) A8 f, }- y' p0 H //这个道具无法移动,跳过
6 D4 W7 N5 L& T3 R( y" { continue;
% g$ N% c& w: J( n }
5 K, x) `. q* ]0 p, B; E! ]$ \2 ~* h }else{
! Z Q9 }) |- f9 { //空位置 不用动" P1 v7 c. Q7 S7 k7 d8 ~
continue;8 R6 S5 `9 I9 o1 l6 b& |
}
9 D5 E# `1 S. @' J" c //////////////////////////////////////////////////////////////////////////
7 l; @ z* n# q" h% ~2 U' s //开始移动
. k( i3 {3 b, B, W if (nSrc == nDestPos)
+ a7 B3 @7 T0 z$ x% B4 R, V {/ M4 `- e! T1 p
//原地不动
8 Y9 S! h2 t0 R2 ~0 A! ?5 V nDestPos++;
; Y# }: I+ I W8 i; I+ m" i8 @- S continue;2 H* M' `! C+ j$ [0 P0 d2 M& P
}9 u* y- Q5 m( W3 Y
pInvSort->MoveItem(i,nDestPos);6 Z: t2 T. n/ Z1 @: u! _4 T. G1 X
g_DPlay.SendMoveItem(0,nSrc,nDestPos);* s( C$ s! u+ z9 K
Sleep(5);, u/ D# Y) a. } A+ F8 l
//Error("移动 - %d->%d",nSrc,nDestPos);* ^. j& L# g# A7 b/ E
nDestPos++;
$ I- l! j: t9 ]! }3 d" c9 d+ ` }
1 a8 S I' `9 j" W //取第一个元素的信息
) m N! A. O+ d2 m /*) }# u8 m; I5 G& k# a
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) }% | b5 B; P% f' a! }, { {+ L% q* d8 r( z3 v+ [
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 Y- {' V+ k+ L' B0 l: B+ @
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( v& {4 m& s! L6 \( m
}
/ ~4 A! F4 h" R0 v) a */0 h5 z/ G# `0 Z! D& P* v+ P
//////////////////////////////////////////////////////////////////////////
. Z3 ~4 I8 { ~' R! e$ X break;' O% l% E$ M7 h8 Q) T
}/ M8 {3 O2 C6 N% o$ ^ d+ U
} $ P) X7 r. {( ?" Z% e5 O
}
0 J$ i3 ?+ f; im_wndMenu.SetVisible(FALSE);
# u; ~ i, ?7 B
/ f. E1 ^$ f) s, n--------------------------------------------------------------------------------------------------------# K0 J' A3 [" K! d% n3 M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 {# I- @5 A! R2 Q8 g{* d" z% G6 o( {
BaseMouseCursor();5 n' }' G# ^) i2 g; x D" A8 @% n
}( U" D& F* N6 Z- o+ G# ]
在其下添加:
V W$ F% R, @void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( d) C1 Y, N2 G5 J" f9 s6 U; o/ J) _
{
4 Z1 w2 \, @9 _& h& k' n; ^m_wndMenu.DeleteAllMenu();
% j. t6 N% s+ Gm_wndMenu.CreateMenu(this);
+ N I& Z! S e1 y; c% F1 ~3 Fm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 t1 P) i+ W$ d+ u
- T0 c" d5 g' ~* Y. a4 Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); }+ K( k0 s( P7 L
{) X0 p& h' q8 C
//P以上级别才可以删除所有道具
& ? E$ h1 H. M! A! k" g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
8 J0 \* F2 e' a( p V$ h}3 I) {2 E7 g5 ~ q6 C; p; N9 T
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! `0 I: e( @, p Y5 W& _, a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& `1 d( ?; `6 Wm_wndMenu.SetFocus();
( V# m7 u% _( }9 q5 F! i& Z- Z}
L; u* {8 r" T. {0 ~3 b------------------------------------------------------------------------------------------------------------
! T, I+ S2 R4 n; v$ @*************************
6 x" F" l/ g! d9 ^* gWndField.h文件; _7 D, Y; V: ]: Z9 c" w
************************** H3 b- n& s& ~- C" `) K
搜索:BOOL m_bReport;" \- E2 Y: U- B, V0 M2 b
其后添加:
" K' w# H7 |& w8 |8 H0 K7 FCWndMenu m_wndMenu;( i& @* g/ s$ b3 _$ \; Q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 G, `! G+ X' l, T' v
其后添加:1 N5 y6 G( j `. a( E
virtual void OnRButtonUp(UINT nFlags, CPoint point);, }7 q* {$ K9 T; _ c* R% Q* r( U0 J
1 [: C0 L& e# {6 ^7 f" w. f
3 C0 r0 h0 p0 z3 f |
|