|
|
源文件中_Interface文件夹下WndField.cpp文件, ^" g2 D# U' d2 Y4 g1 t- ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% N4 a: `- m9 S1 l% Z3 y4 {: H+ d! Y* d
struct sItem
' z1 ?7 I8 }3 s( {1 O! b{
4 Q& l( x& m4 `7 D {6 M, c* aDWORD dwId;
7 y, p9 w7 u# E t: `DWORD dwKind2;
; L9 U7 ?& H4 {* K$ ]DWORD dwItemId;
, d0 r( j+ [* U W7 ?BYTE nIndex;
& ]- J, O% Q+ d, Q3 msItem(){
% A/ E5 @3 a/ R d; W dwId = dwKind2 = dwItemId = nIndex = 0;. t' x% M9 x3 z9 b
}4 ], p8 z# o: L H \* _
bool operator < (const sItem p2)8 v+ H; Y, O% F0 o7 K
{( N; b8 A% P/ [/ o4 A
if (dwKind2 == p2.dwKind2)
, Q/ m5 w+ j; A3 o4 Q" Y {
- K- a/ Z, l8 v return dwItemId < p2.dwItemId;8 b: \) M7 D& d/ o+ V- ^
}else{3 k' ^* C* H4 u4 P d5 |+ y
return dwKind2 < p2.dwKind2;% r2 h8 D; s8 \- W/ W& Y8 l
}6 l% t4 R# D; g2 M
}. A) f$ F' l4 w# M1 X8 c
};
3 Q5 x5 g- H" h6 Uclass CInventorySort' j/ \3 B4 i# V5 F
{
9 }+ D# T% f: G9 |. t7 Y5 Lpublic:
c, H- p6 S7 X! ]- q4 ZCInventorySort()/ c& H" F' {, G! s* Q4 `: D% B& N
{
& z3 K0 X8 R" w; _, K4 d& x- \6 g m_dwPos = 0;
1 z( J7 Y& b9 l* h% q, `}
x( p% k. N4 t/ A0 j~CInventorySort(){}5 i# K4 v p# N* m: S* e
private:' x- V1 X+ f, ]0 ]4 W# h2 ~1 T; E
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- O6 ~5 I: \- Q& S; k
DWORD m_dwPos;( @# V6 l: a2 b. J% g
public:
$ A6 F: B& h! H) ~: D9 Qvoid Add(BYTE nIndex)
' G& L! [+ ]( E$ c6 p$ p2 I{
* z" U& l' d) n: u8 u7 j5 f if (m_dwPos >= MAX_INVENTORY)
: i7 \/ F! }: @+ W {
; t, k. f" C9 v3 U a5 ]8 W return;
+ m/ f3 T. k4 z6 E: y/ ^0 E }
, x2 P0 z! d: _' z5 z m_Item[m_dwPos].nIndex = nIndex;' r' @+ y1 E2 a6 `
m_Item[m_dwPos].dwId = m_dwPos;
6 Y. t5 s' [! n" g3 m& x+ m m_dwPos++;
2 l7 b# n# U: [/ T, G; x}
% F/ L9 g& n, U- O: @BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( h+ s. C! y+ O) `9 }- i2 m. \{0 s. P1 k- J9 ]. d* Z; E* }- S
for (int i=0;i<MAX_INVENTORY;i++)
% V. [4 g: w- S5 W0 A3 ~ P+ h {: Q' T- w9 ]1 w
if (m_Item.dwId == dwId)! W% k6 _% d3 F# v& w+ t
{1 v+ x) v! J1 O! I
return m_Item.nIndex;
# b7 V* u5 F8 u }; E0 M0 }0 m7 C! q: i- M
}: c% A3 s2 Y; W& k
return 255;& L' U" W( z9 ^" @
}9 ]. d' v; E* o) k3 B7 c( x) z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
1 H$ n7 Y# z% A( {: e; ]2 P{
, u' X2 R/ z F% v) ~- p: o, u BYTE nTmp = 0;
' h6 E- E# C- o/ S& H! d, H bool bDest = false,bSrc = false;
8 {% B1 [8 N* q8 y C" K& @2 |! Q for (int i=0;i<MAX_INVENTORY;i++). |2 _/ r% W6 P4 q& r
{* k. y* O8 G) T; T9 r" E
if (dwSrcId == m_Item.dwId)$ y, ]( ?9 F" Y
{# T1 T+ U; T1 N. V
//id相等 则 改变对应的dest和src
. i: a }; M5 n8 o nTmp = m_Item.nIndex;2 I) j1 `3 b* J0 ?5 Z7 l
m_Item.nIndex = dest;
8 l( ^1 R) g* ]: W }
" P& d( c/ z. R }
/ y& T. Z4 Z2 V. M //临时数据保存完毕,交换开始5 N. e6 R- M* N, F8 Z9 t# R
for (int i=0;i<MAX_INVENTORY;i++)" d8 Z- j( ]. n, a3 r* P
{
. y9 J3 S( e/ R4 x if (dest == m_Item.nIndex). v# d0 V) F8 n* G
{
' _! ^: @) o8 d; y6 K/ ] //id相等 则 改变对应的dest和src
8 @$ j3 w8 n6 r" ? m_Item.nIndex = nTmp;/ g/ a6 m1 \( M( M5 B) ^$ H- u$ G! S
}
* q3 x" o% b' l: u: v }
$ A" b5 S6 Y4 Z" ^1 d) p5 G2 E}
Z! `9 @0 _) [};' p2 |! d$ s( V4 }" q9 _' s! n7 i
-------------------------------------------------------------------------; P- Z+ d; T9 K+ ~
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 f$ D6 w% Q2 p6 H5 v0 a! K% O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* H. Q! ~! z. b4 L4 o4 B紧靠其上添加:6 M4 y. u8 c* N. @! } {
if( pWndBase == &m_wndMenu )
3 y3 R+ Q# S, P; J4 y, r, p{7 s+ ^. `% e; B8 y0 w9 G# M& t
switch( nID )
- J% b- j7 k" o( e {1 g- e% g' `: c; h
case 2:, t: A; b) A) [6 K0 }
{( I" I, z) u8 z* H! w
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
m: q x+ B5 ^% H- y: c if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ ?- o0 u5 F4 K5 R0 s0 ^. S; A0 x
{
' |4 q5 u$ `! g! T% F% n break;4 L5 C/ ]$ ^6 H$ j$ ]. E
}
9 c% ~# i3 ?+ H for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). g) y! Y0 G# ]7 Q
{
; L1 L2 t3 k1 C V9 a0 q7 E, j( y: ?3 @ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# t" P( v9 n) h
if( !pItemElem )
( l* v+ F/ h' \. M! K1 _ continue;
/ o: ^6 t# `; _; I if(pItemElem->GetExtra() > 0)
" |1 h8 W7 m3 k( O* ?9 k% i continue;. V/ F! {; k2 `) R# i6 U7 I
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: K3 P% N4 j' e. E! v: d continue;
1 Z( o M* w p+ m" @ if( g_pPlayer->IsUsing( pItemElem ) )4 J9 V L: Q/ S1 j3 [; B
continue;/ z5 t4 J, g' p! r( E% R
if( pItemElem->IsUndestructable() == TRUE )/ W: B1 B4 @/ ^- b1 M+ `4 y
{9 h9 @) c7 e0 c( I- Z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
& {; g% E S7 e' r! V4 Q9 f continue;
" ?7 v; v5 M, m: ]1 S }
$ E3 k. k9 L: H5 }7 [+ U- s g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 ?* P5 U; ]% C* f1 e
}) V& Q* l$ E3 Q
break;
8 K$ D0 b. p" A! H: ^ }, {$ k/ U- | w1 R, ?# W& h
case 1:- E2 ~& V! [) s1 d! a8 o0 P
{; C& x! U0 d6 {9 u: p/ {
//整理背包
6 X% @& n, c0 Y //////////////////////////////////////////////////////////////////////////
: Z8 l. Y3 A" l2 X9 \6 _% Q- X7 w //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 A/ O0 {% l9 g$ y7 x: ^3 q+ Y1 f //////////////////////////////////////////////////////////////////////////
6 w0 y d4 ]% U9 A# H3 n1 z //////////////////////////////////////////////////////////////////////////
5 @. ~2 E( ?8 B: M, u/ U, G# k# v CInventorySort* pInvSort = new CInventorySort; `- c* [% v, J9 |% k
vector <sItem> vItem;
0 ?7 F% Z. b8 b8 B: C9 V. C' t vItem.resize(MAX_INVENTORY);//初始化大小
# _' n' h Z1 Z8 g, v //////////////////////////////////////////////////////////////////////////4 m6 k [" k1 R& ^! {
//填充数据 M3 W: }' D+ m
for (int i=0;i<MAX_INVENTORY;i++)9 R; W; i/ M2 _; Z
{
3 [! _% V0 R" v. v: ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 k0 |# Z. \* o$ U( y, X. H) W5 r% }
if (!pItemElem)8 e( F! r" d4 f4 M- x
{, D+ ~/ o2 R5 d9 A
vItem.dwKind2 = 0xffffffff;# l2 b6 }+ i$ A, ?! j6 `9 H
vItem.dwItemId = 0xffffffff;% o/ q* w5 T4 U/ C3 I
vItem.nIndex = i;
0 i& k0 H, y3 T9 Q6 L1 j }else {
/ N6 g, S. @; k# O$ }, r$ z ItemProp* pProp = pItemElem->GetProp();
5 O' d! Z5 \6 t# ~. f vItem.dwKind2 = pProp->dwItemKind2;+ k* ?! G F$ W t
vItem.dwItemId = pItemElem->m_dwItemId;
3 g% d' {* }. G& `( m Y9 \ vItem.nIndex = i;5 ~8 k1 r5 X2 \0 X
}* E( W8 r5 ]2 S( X R
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 n0 c6 b0 M% ?: ~; A4 x9 J
}. a- z K- y5 d$ A' k- C
//////////////////////////////////////////////////////////////////////////2 X/ C+ {0 V3 [
sort(vItem.begin(),vItem.end());//排序) _. Z" h1 s1 @ ^5 x* A
//////////////////////////////////////////////////////////////////////////' ~8 l8 U$ D, e x+ M
//交换( b) V& E9 U9 d5 W* }7 g
for (size_t i=0;i<vItem.size();i++)
4 B$ k+ d, V' k# l. q {
_/ l/ d: g1 x1 A4 ^ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, M. l5 Z/ F% ?5 q: G9 x
pInvSort->Add(vItem.nIndex);
" Z3 u8 N2 A0 k! D: C h }: B1 [+ w- g0 a
BYTE nDestPos = 0;1 P- f3 O/ u5 P' \: k4 @" i
for (int i=0;i<MAX_INVENTORY;i++)" B' Y; a: Z: Q# f; c _. ^
{
6 T3 `+ e) \4 I' X, q% `8 {/ z9 l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, u1 E0 j' V: o5 `4 G1 j! |2 L0 M if (pItemElem)
9 M0 R0 P8 `. b" X {; H/ Y( F0 m J
if (IsUsingItem(pItemElem))" @! R& g& V$ N
{# ]7 y3 E" T* p
//这个位置无法放
" Z- ?/ N6 |* ]. Q* O nDestPos++;
( d, ^: U) D" d/ Q/ h9 m* v }$ V$ c' P" b5 Z$ H1 m! c
}
: q* W! Z" b9 D" c9 i BYTE nSrc = pInvSort->GetItemSrc(i);
0 M/ j: B# I9 x- C. D$ v! {6 w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# v) c* I2 o6 g
if (pItemElem)# f( }; [: V& l8 D) J
{1 ~5 S% Q7 B5 g* s$ \
if (IsUsingItem(pItemElem)), t5 U0 r0 P) x( J5 N O2 D4 W
{
& o: V8 ]4 \$ q. [! `/ v, \ //这个道具无法移动,跳过
" k" |* n& h. w, \# U4 V! a continue;& X1 n! Z0 ~9 k
}( f2 K$ O0 f8 t, A. {* P3 Y& w
}else{7 P7 ~+ u: k& d" d- u
//空位置 不用动
$ {" @& c1 {4 d# e6 x continue;
! @1 ~6 v" e4 T. [7 M& w4 o }
# h* M) s% g' \- w //////////////////////////////////////////////////////////////////////////
* ?- `) e8 _, N! E v! Q7 I //开始移动/ @! ~- l8 n! g t) ~
if (nSrc == nDestPos)& H6 @8 B w. V( T. r
{
$ B( D6 S+ y$ R! I0 S9 g //原地不动
4 s4 {; Q2 y3 I" ^( [' k nDestPos++;
# e+ H0 h9 O1 Y5 k% n; U$ d+ r0 s continue;
3 w3 O* m, _8 Y }
3 `; i/ S8 E* [1 s5 W pInvSort->MoveItem(i,nDestPos);3 y1 }0 O/ j# h5 N
g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 |, T; z* m! Z- C: m) W
Sleep(5);& }$ R& h9 L; K! q! Q( y
//Error("移动 - %d->%d",nSrc,nDestPos);
( P. l+ k' g$ \ nDestPos++;
. k' q9 X: i/ D7 s D }7 A$ z- W+ Y$ Q0 _$ l
//取第一个元素的信息7 V6 y2 ` C. w1 c: X3 ?; e8 z# J0 y
/*
, ?6 I: h0 A' d if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) [2 z& Z# z# `/ \% W
{8 {- F1 M9 q6 R3 J
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! Y% D2 G) r% m" H6 a$ P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; `+ J! a5 ^, U: F. L7 i }
w3 v/ A" U5 R9 g# P/ G, L; I$ H- z+ Z */& |4 x0 p2 [* i* x
//////////////////////////////////////////////////////////////////////////
! B8 Q, {- F7 [7 c break;% P, p* I4 ~% x% }% B
}
% i$ W+ g6 h+ R; }( B2 S: d7 ~9 K& U } ' [, a+ R; G/ T/ ]0 k* ^7 u( G
}- o. m; l8 h' ~. E7 u
m_wndMenu.SetVisible(FALSE);7 W9 x/ Z* x: T0 q3 {' p9 B, Y# B
3 D& G1 {; k7 l; e" C3 w/ [
--------------------------------------------------------------------------------------------------------' F" W5 O. h$ c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" ]5 k/ i' @9 E6 C' G- Q{$ h& {6 _# I; T3 g6 Q
BaseMouseCursor();
1 v4 O+ _+ X; u2 q' ^- l2 v}
' H# F' g5 w$ D% I* s在其下添加:
8 e) L Y) N; C c. N' E Q: @1 [" vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 n7 m0 B$ v# W. r) G
{4 z" s, e- J5 O* T5 e# ^
m_wndMenu.DeleteAllMenu();
. h. K: Z6 O% E5 }1 O1 T5 rm_wndMenu.CreateMenu(this);
6 k6 i: w9 o7 {$ C; C, \7 Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 r4 X9 ]0 p f* Y4 A5 U
+ t: h4 `( c) U( Z7 r6 ~4 uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 T5 N1 y+ w$ E: D& V6 s+ D7 _
{
- f6 x/ s6 }3 X/ Y //P以上级别才可以删除所有道具- z3 w/ A: f! o
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 r/ p5 y/ j) N% I. M: v
}4 I6 Y0 e" G( r9 N6 n+ B. D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 a( k; g$ e" L' i' P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 b6 A& l& S1 f: x. t8 sm_wndMenu.SetFocus();. S( ^, k. j3 O9 F, x. E
}" p7 c$ X& B4 D, t' j
------------------------------------------------------------------------------------------------------------6 L4 e( f" v, O- a) u/ x$ ]" P
*************************0 b: _1 I; y% k$ y% a/ E
WndField.h文件
5 U$ b& R/ V( r. }) b*************************0 d/ N8 n4 q3 e# M' M. ]3 }
搜索:BOOL m_bReport;
' N5 s# K( c) d" [$ D其后添加:
5 ]; u, d; j# O/ ICWndMenu m_wndMenu;
( d, Y. D8 r- q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: J$ q1 b, p* b9 i
其后添加:
& u& R4 o5 }7 rvirtual void OnRButtonUp(UINT nFlags, CPoint point);& R3 [/ c* P/ C8 w8 b9 ?
- D5 f+ d" V# K& i0 Y
4 z. T) t- T* R1 K |
|