|
|
源文件中_Interface文件夹下WndField.cpp文件& X" {( L7 x; g6 K/ P3 K
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) ]8 s+ @/ U6 M, c
! l1 V8 }9 w/ } O3 B8 r1 B' tstruct sItem
, X) K$ p F4 ], E [{! }* I+ T! C( V7 [9 D6 e- j8 f5 \
DWORD dwId;
! n! t, V7 x3 Q3 tDWORD dwKind2;
/ ` P2 R7 S: ]DWORD dwItemId;
4 K+ j! Y) `1 R6 ]" y0 ~+ iBYTE nIndex;+ w2 ?' g; W! Q2 g, H
sItem(){
9 b1 X% V6 j; V* m5 @, j dwId = dwKind2 = dwItemId = nIndex = 0;1 i+ [1 R v' j- g. Y
}
/ v& H( D9 Z T [* a' X; gbool operator < (const sItem p2)
& [3 I: K' F3 N{' q7 H6 A" k: i- f7 a
if (dwKind2 == p2.dwKind2)& ]8 Y1 Q( h' q1 e5 w2 Z- F3 ?5 l; c+ m
{
; F" d/ T$ o9 `( e1 Q return dwItemId < p2.dwItemId;
. d! f1 N2 ^" A" w" _; [0 K0 O4 W }else{& l; z# X( L8 K+ H: J
return dwKind2 < p2.dwKind2;
. R5 B' J& [# b0 T3 y$ r# |& ?. j }
- p6 j- H( Y3 T# g% A; ]7 A}, l2 `. A3 l3 x$ X) T9 ?+ H5 l
};
2 I; B1 O. `/ L; l4 f9 yclass CInventorySort
. c3 x k% B* U4 O l5 F{
, Q! @: F3 t% x9 I( }5 Wpublic:
# y9 W p& Q' V6 VCInventorySort()
3 S/ _/ h2 F/ w2 H' w{
( N% k8 T5 Q7 u1 V% J m_dwPos = 0;
' e, A* J8 @; s2 J1 J}
" Q, V2 d1 X9 B$ T: A: Z~CInventorySort(){}+ w# E9 H1 V0 p& \
private: l, x: u+ d9 t- U! {: [, J
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# l/ b7 e/ V2 U
DWORD m_dwPos;
, v/ G' ? c- L5 E* Gpublic:! s9 Z. o$ k; p+ l! w
void Add(BYTE nIndex)
' H' T7 |. e' O1 L( m& l6 v0 B{
$ \3 S# Z$ b8 n0 z, V) ` if (m_dwPos >= MAX_INVENTORY)
; S; S- S/ D( G$ ?$ K6 S {
1 j0 p! P- y1 w' U4 B return;# s( n3 _- S4 h$ k& k
}
4 l) i# g4 \$ i2 h* }. }6 `7 {2 c m_Item[m_dwPos].nIndex = nIndex;" f8 a7 P8 G5 u5 q
m_Item[m_dwPos].dwId = m_dwPos;9 y/ z1 z- N ?2 g5 @! }
m_dwPos++;
7 q7 k6 S+ U1 X/ Y0 N* ^ q+ Y( b}
' H# A7 W U& o% ?- iBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ H5 A: Q1 @+ @% b7 n/ P9 E
{
; C/ T# M8 h7 J4 R; t for (int i=0;i<MAX_INVENTORY;i++)- Q- e0 f$ j: a3 C2 E
{1 d' n0 I. @; ?9 P$ N+ w1 X q
if (m_Item.dwId == dwId); ~' h! N% `% u: i# T" p8 r! W
{# r- v" Y; {: }1 u2 Y
return m_Item.nIndex;
2 H( R9 T s+ h" T0 [% @/ e }5 q; `/ c* b0 x1 H6 [! Z4 P4 c P
}- @1 F0 v! V% `% P
return 255;
{2 f9 L% G1 c: G/ E}
! Z% ] g* x. S/ ?6 p2 ]7 H( Bvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% `: y% `/ n- b{
\ }0 Q" s; c& o+ t BYTE nTmp = 0;$ Y) D# x/ c& y/ L5 p" |- o/ h
bool bDest = false,bSrc = false;# E0 C8 R& R' a
for (int i=0;i<MAX_INVENTORY;i++). Q0 o2 O& _. v0 r' ?
{( O$ w' ~6 s1 E! j% b
if (dwSrcId == m_Item.dwId)
6 I/ c9 _, K0 w: _" d; J; b$ B8 M {5 M% L& ]) l3 A" e7 H
//id相等 则 改变对应的dest和src
- @/ k$ M2 M: ]. [ nTmp = m_Item.nIndex;
* l0 K% }7 a$ x2 P8 f4 p5 k: N m_Item.nIndex = dest;+ X, _9 y, R+ L9 ~- R, f- R* w
}/ @6 w! o* T: v" u s
}
/ |0 T' B# D5 W+ j$ ^; t, ]4 M //临时数据保存完毕,交换开始( J& {! K! }+ @! d# q9 I
for (int i=0;i<MAX_INVENTORY;i++)
+ F! Q, y1 J) S {3 Q$ Z! D% }+ u0 a% b
if (dest == m_Item.nIndex)% l& |/ b& U3 z; i5 A6 L
{
. G& B: U4 x2 j) L4 w, M //id相等 则 改变对应的dest和src$ j+ M r* m$ m9 V
m_Item.nIndex = nTmp;3 a' @' ^& [" K- M# k k7 ~( J
}, M* |, N! k9 t6 x
} n7 N M% o/ p6 m
}
4 ?$ I; _. \! {& Z* S};
2 P, a0 P) {" z-------------------------------------------------------------------------) N7 e9 n% @- A
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& C2 l0 K4 J& k z- ^. V3 r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 K% Y7 q, t: Z1 Z% V
紧靠其上添加:+ ^3 i: q& J6 u# B4 W% P+ p1 E( |
if( pWndBase == &m_wndMenu ); k" q2 @) W* H9 f* H& v9 B. c
{. ]5 K( r K6 Z3 `
switch( nID )
8 I" J. m4 ]7 q' N2 t7 h {, b( Q; d$ G* d. ^
case 2:4 ^& d' c& U# h$ b# t
{
& Z3 `) b% W6 z+ _: e //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( D, _& B/ H* T, j" L$ D/ b
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
a1 v6 i$ G5 F, ?0 u {0 I# e6 h8 c( s0 x& ~
break;
G+ t8 E8 R% e$ h! X8 w& g }) U* I: n3 L% Z& f8 E) `+ B
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 T9 @; |1 q1 ~' e {( v% o+ R0 D5 B, H9 q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( a, [* D' ?7 ?8 m if( !pItemElem )4 [2 c. |# @& I# s
continue;: S6 N- e5 D3 }
if(pItemElem->GetExtra() > 0)
% @5 `3 h+ L: c0 ?& ~, c5 H continue;* [; a) \ q7 N; u) p1 O; N# ?+ a1 M
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* ?" ?9 E3 B) N- e continue;: F: N7 m0 `: _. Z2 {( n. a
if( g_pPlayer->IsUsing( pItemElem ) )( U, B5 D2 A0 R9 L
continue;
7 o3 v1 |! O1 z/ O2 ~2 m4 w if( pItemElem->IsUndestructable() == TRUE )1 j# T' {0 F6 J* g; P4 D* |# E
{
0 b2 ~0 w$ P+ a6 E& D# p g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 `/ a) p! m' K/ e7 }) R
continue;
, o7 I: Z3 }0 f0 D* [ }
6 A9 S% c* n$ u/ ?# ^( m g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% S% l \/ e- [9 m: g$ N1 O
}
5 j& x, u4 E2 B/ v+ t+ L; m break;2 D& F0 h6 y6 e) l6 o
}* u- R# [6 i! T3 Q0 W6 z
case 1:# h/ v; w- D$ @" H
{- T5 {0 O8 `8 ~# d# u" M
//整理背包
# C/ P' ~, Y0 F //////////////////////////////////////////////////////////////////////////. j( K0 B0 N q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( J& f$ V a$ ~( [
//////////////////////////////////////////////////////////////////////////1 r1 L- `1 j# h+ e& p
//////////////////////////////////////////////////////////////////////////& O0 x, g4 a8 {; j& X6 a$ }5 B) y
CInventorySort* pInvSort = new CInventorySort;2 Y% T# |9 F! D8 i- Z6 S
vector <sItem> vItem;
3 h8 Q3 H8 I1 g# C* j& @ vItem.resize(MAX_INVENTORY);//初始化大小
* N, ?. h0 M8 ]4 N+ M+ x1 X5 P //////////////////////////////////////////////////////////////////////////
+ c2 Z& b( T( a6 C& X //填充数据; N# w6 N% O! y; D
for (int i=0;i<MAX_INVENTORY;i++)
J, J8 {' p* ^( u' z {
$ k# u. F! E* s& x9 C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 F' ^$ m0 \7 Z# V if (!pItemElem): o3 u! |) S+ j6 g2 _
{
( b0 N2 b, A" C8 u2 A vItem.dwKind2 = 0xffffffff;' c [5 U$ @8 |; g6 V1 X* ~
vItem.dwItemId = 0xffffffff;
* K7 w* N* B( t% t; N8 ? f vItem.nIndex = i;+ i/ l% \, T1 b% i @' B6 ^3 q
}else {$ P3 {3 h$ ~3 L5 l: p0 n
ItemProp* pProp = pItemElem->GetProp();
' }1 Y7 f8 k6 s! p vItem.dwKind2 = pProp->dwItemKind2;5 O; Y$ J" s' N# g. U, E
vItem.dwItemId = pItemElem->m_dwItemId;8 F$ }0 t# I6 ]2 y
vItem.nIndex = i;
6 _) Y0 Q0 [9 r. Y( m }. Q$ q# G/ p5 T% K) {( i
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' R" p9 b7 ^4 U1 T8 W; N }
0 t1 u+ C, Y9 _& A //////////////////////////////////////////////////////////////////////////" w6 d( `2 ?; n% X
sort(vItem.begin(),vItem.end());//排序
0 U- o7 c' p7 D. O5 y$ c" f //////////////////////////////////////////////////////////////////////////9 K/ s% I0 g6 Q6 b* g* k) w
//交换- O7 [$ P+ n0 J' o: Y& t9 O
for (size_t i=0;i<vItem.size();i++)
+ X4 Y2 t# o, J( l7 n. i9 j. U( m$ X {' h( s' A, ~2 T' Y8 {8 Q" S
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 i! s: [3 Y( e: t. T
pInvSort->Add(vItem.nIndex);
3 {9 t( s" K2 ~! {" R0 p2 [8 g, h }
1 P. o1 f9 H6 y5 K: e# l7 @ BYTE nDestPos = 0;; W# ?' m- b$ H% g( m* V$ T
for (int i=0;i<MAX_INVENTORY;i++)
6 j7 s. ^3 l" J( j1 g2 t {1 {. l _3 l5 [. J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, s/ \( c R1 \ if (pItemElem)9 _9 T* G, h- R L, F# Q* w
{# e4 D( K! Q" c* e+ W- }% v
if (IsUsingItem(pItemElem))
: E+ O `0 C) l5 q6 b5 P" e+ V; { {
9 ]% ?' @6 T6 c //这个位置无法放* q3 U7 g# f' ]* i
nDestPos++; R1 f2 [0 s4 M' [/ C
}0 r0 r0 c2 b# Q5 p+ G5 b: t( T
}
6 h: D9 _; [2 o: s: B* I; U. T& Y BYTE nSrc = pInvSort->GetItemSrc(i);' ~) j3 B. U9 m. \! Z: z+ x) F O
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 [; s$ {6 u# F$ {7 i I- _8 d
if (pItemElem) F' Z5 \! \0 h" ^, `) B
{
3 @+ C; v( X- K7 g: s if (IsUsingItem(pItemElem))" a3 i/ L+ a' w; |* [
{# c) O' ]7 F% ~
//这个道具无法移动,跳过7 Z% _9 E9 ?' n6 W
continue;
2 q8 L) X1 m8 K* z% y7 J }
( z! m5 C& L+ e+ G% K }else{
) l. ]0 L' M# Y% e: s) U7 O. j4 _ //空位置 不用动4 i. k2 ?4 }" p& R) c. }+ a3 g$ @
continue;
5 Z( g' J' X, f1 l" Z0 J. r }$ I' U) B1 p( u" X9 b$ ` i
//////////////////////////////////////////////////////////////////////////% @9 r. c7 }% g6 p, i
//开始移动
K6 h0 s9 G# u% N$ r7 X if (nSrc == nDestPos)/ B/ D8 e$ q4 ]2 W* F/ L. f
{
4 L3 ?' e6 W1 k, c' C# k" V4 J6 P //原地不动9 l# I4 l% R2 B, v; |- s
nDestPos++;
. {6 f( ^9 s6 E; Y continue;
+ ^. v5 M3 s* O# E! u }
% X8 _8 s3 z% `0 q! T6 D6 h pInvSort->MoveItem(i,nDestPos);% s& {* R( \' y: z$ X H: S* R9 t2 {
g_DPlay.SendMoveItem(0,nSrc,nDestPos);- Q2 y9 {; t: @8 J( c0 ~; k
Sleep(5);) M+ s2 i0 {' h9 l2 a2 Y4 H+ S
//Error("移动 - %d->%d",nSrc,nDestPos);
& ^3 k! c* h( {* m" c+ ^% |6 I nDestPos++;
+ Q6 u* @: }# z a8 \ }+ ?( b4 t5 [5 L; p- m, @5 d
//取第一个元素的信息
& m, ^5 B8 D: C. W7 U0 F$ C, d$ F /*! S' @9 i0 ^/ [; l/ P
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) |' a' t$ f% h- G \ {
$ B+ t/ F; f8 h, O9 f Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- J+ V O5 e* J* l1 X+ z/ I# d g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" \1 \" S/ _/ `' o }
2 u7 O( Z1 M' k5 G */9 G7 n( v% b$ E; g( w0 @: W
//////////////////////////////////////////////////////////////////////////
A5 P6 u: A' h; i3 F break;' ` G. o3 k! B5 W; g
} k, ]6 R. w' j, V m0 j: k
}
; H5 v& @' V) j- z3 f5 a# l}
, t0 Z1 L" U2 V8 Ym_wndMenu.SetVisible(FALSE);
f2 F) s0 I3 ? m6 l# r4 v8 |# ^5 d( j/ o! H9 G
--------------------------------------------------------------------------------------------------------
$ N( S' g5 R! Y; v搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 D6 f& o' a& d! f
{
5 }1 p' @0 o9 ^BaseMouseCursor();8 @% z0 Q2 g5 m: l7 E
}
% \0 O4 A4 P& Y$ j3 I# }在其下添加:5 h7 {+ c" c8 ]4 f& o) T+ M8 N( f
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 X d1 h/ |) ~8 }( O$ ~! \{
) K# I1 |/ G, h! Sm_wndMenu.DeleteAllMenu();
2 S" ~$ h; y' q$ L' Km_wndMenu.CreateMenu(this);
- `2 s, ^( t) N0 Km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ e2 l& E" |2 g9 X: X. l* R5 n
- _5 c( w# [" r) C$ V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), o5 y3 o! T6 D$ B
{
# h1 d4 I% T9 s //P以上级别才可以删除所有道具
+ k( n0 a4 g* f8 Q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" e8 e S0 V% P2 L: G( ~$ }}
7 j: ~6 j9 G& W+ `3 c, Om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ j. Z* T b( Y% I
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" R' f2 D q, B) J: ~m_wndMenu.SetFocus();
2 b$ s/ @" [/ q& I* i} w, A' W9 K3 X; {" A' U+ b
------------------------------------------------------------------------------------------------------------
& V# x( c; l. K9 g# n: C*************************! M# u; ?9 {$ Y* ?1 m9 @" D
WndField.h文件
7 g" |* N. V2 Z+ j4 E*************************+ W$ P3 G2 a, E8 o2 ?+ T, k
搜索:BOOL m_bReport;
1 ~( S& e! R8 j3 q3 W- z. c" _其后添加:8 K6 x# C7 ?; a; I$ N
CWndMenu m_wndMenu;
! B% @8 Z4 [. B' U5 K, M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& w! f# _% Q* @, z其后添加:0 G. `" K' `& a/ c. p+ J: d9 X
virtual void OnRButtonUp(UINT nFlags, CPoint point);$ \/ ^5 ~7 a8 m# G
( k3 z+ F$ [/ t$ ?5 g6 U
* ]' V0 s8 x- j |
|