|
源文件中_Interface文件夹下WndField.cpp文件
7 z6 Y' F1 \ G3 ]3 u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ u. d+ [: y+ z" |" n/ Y
* L4 \0 M; z+ ^8 \; }0 _' {struct sItem, ^5 P. t/ l4 e' A( ~" r
{( s1 [" ]8 z8 `. F T
DWORD dwId;
8 i6 M: V1 Q; r' O$ nDWORD dwKind2;
* ]: g. u$ a! |, @9 h5 GDWORD dwItemId;6 T( p2 i4 A$ x) p6 x7 \
BYTE nIndex;# J3 e/ U2 q! [+ J. B
sItem(){
9 X1 u( X$ U5 B. }3 m, Y9 f dwId = dwKind2 = dwItemId = nIndex = 0;; w0 j: V9 }; U4 k, F( \% r t- O
}
9 U$ ?6 w6 u3 P, l* ibool operator < (const sItem p2)
+ n7 y3 W; G; H4 A8 T ~{
: l- E" s$ p3 Y f$ G# e6 O, w if (dwKind2 == p2.dwKind2)2 h+ S8 ]$ Y, K% W
{3 R1 ?8 j. I7 p% `) k6 u6 A
return dwItemId < p2.dwItemId;
/ r3 a1 A6 F; b. O1 Z }else{
8 E% x' W1 p0 P return dwKind2 < p2.dwKind2;* Q9 K) |3 E/ t _; z
}
; [$ V% y F" k}0 m! s3 e' W# P3 W6 o( S6 E
};4 }* O8 `- d$ B) I$ ^( V2 t& l
class CInventorySort3 `* C, u+ s5 ^; p
{
. {6 {9 N. x* j4 }- @6 Tpublic:. m" Z P3 Q' u( h$ V/ M
CInventorySort()
9 _3 ]# ^; o t{
% t4 p5 J+ t O/ F* Q. m& j- w m_dwPos = 0;
2 j( Y/ I* b" q/ P! i+ f/ D: B$ T}# ^+ R; k1 O. Q2 E6 a/ J! B) ^- F2 A2 K
~CInventorySort(){}+ r5 q/ D6 j7 a0 Z
private:1 f/ q. `" }0 D7 B
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
) n2 n" P2 z2 {" f2 gDWORD m_dwPos;
8 J' @# l) r' Hpublic:
. f b+ x/ @: U- [3 w: `9 c' Pvoid Add(BYTE nIndex)
( N! ^7 Y- {& W" x9 \) d1 _. y( D1 Q8 K{1 O4 m' C% P; m( v
if (m_dwPos >= MAX_INVENTORY)4 {% _) ~* B+ o9 R& s" N+ V
{
7 X. L+ ~, M: V: u return;6 }# _7 L$ {% M
}3 O# {* X3 g7 E8 r, o) a
m_Item[m_dwPos].nIndex = nIndex;. f' R; y# [4 U! K# D1 \
m_Item[m_dwPos].dwId = m_dwPos;
: F `0 W( e1 Z0 N m_dwPos++;$ M R: J+ x& A2 h/ W& i/ |# ~
}
0 ^: h" X# J7 I& v' c: rBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 U& p) B7 Z2 g2 S: I6 ?9 Y. {{+ _! F( \6 s. q" h D8 D& d
for (int i=0;i<MAX_INVENTORY;i++)
) H+ N* y' i! f: b( ^) A {
8 P- j# k. ]) `. S" _ if (m_Item.dwId == dwId)
2 z0 u- u; X1 m3 G4 p {
9 \8 F- m/ S- H# s5 d7 Z return m_Item.nIndex;) v: ]% f% P5 B4 c& J6 n# W4 Y
}
* s0 p( o' o& d/ B }! E# N8 t' U6 Q/ q4 X
return 255;
0 q1 c, P5 X# ~/ T# S9 R}
8 z; x6 d: a0 g7 i' I- Gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" T, U/ o8 P, f+ V
{" D; L1 u5 |4 z2 K _6 n. H
BYTE nTmp = 0;
4 r V" ?3 Z& t' z4 l5 n0 i" o! D- y bool bDest = false,bSrc = false;- D/ A8 R8 ?7 u! l
for (int i=0;i<MAX_INVENTORY;i++), y* f# U" @' j9 ]1 S% X
{
" i% m# q1 x, Q- r7 ` D$ _) E if (dwSrcId == m_Item.dwId)! Y% g$ P! @# p8 G1 C
{
R- N6 T8 L1 F //id相等 则 改变对应的dest和src9 N: P4 c+ S, t$ m" `3 m' o, T
nTmp = m_Item.nIndex;4 a4 |# J5 M0 y0 y# w3 O" \, _! R
m_Item.nIndex = dest;
6 Q7 {6 ]5 |( c9 H [2 |/ b" N }$ q5 r' `; |, \
}
2 G' L u+ R& v- t: s //临时数据保存完毕,交换开始
# H8 y* p% e: q for (int i=0;i<MAX_INVENTORY;i++)' v! c8 U4 ^* }
{
% \2 l; J+ G1 Q3 E5 h0 \ if (dest == m_Item.nIndex)1 g' ^, _* u$ Z1 N9 d' R/ M' \
{
9 i) {6 u* H3 l, I" R$ d. y2 G //id相等 则 改变对应的dest和src, f; F6 b+ }3 U3 a4 M" N; m
m_Item.nIndex = nTmp;
. l" E i: S. H/ D5 P }' P0 X7 {' o# O! j4 n O/ q
}
$ L1 s: O" S7 d; r, Y. u}. H6 [3 j' k/ x" I! ~
};) ~8 x5 \# C9 l: B( L
-------------------------------------------------------------------------
+ j6 S+ _+ h" p依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 X" `9 ^, e% c8 ^/ T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 L- B m3 q+ d$ @" c. R8 ?
紧靠其上添加:# m$ @/ n D5 y: Q9 O9 S, v! M
if( pWndBase == &m_wndMenu )
4 r# t7 f5 u' H6 L) w, D{
$ V- }9 g' z' c+ s switch( nID )3 I1 x9 F9 M9 @
{" d% z4 S4 g8 H4 D
case 2:
, [2 @2 @" \1 \ Z9 R9 F {
" d2 j+ }+ C# K, H( _! r! L) A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; {. X* l9 u* e l, Z+ `2 x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& f b+ F5 E1 q7 M
{
( _' M: O& i# u8 d) U3 I; G break;
4 U# R4 I) A, b4 v# o9 P8 ` }
# c# c! x9 y' x( A$ L& s( D; w0 |* U for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)- |* [* O, X. E$ h( Q; k: E/ B
{
0 N: n- _( n" R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 ]8 d7 s: S9 h4 k if( !pItemElem )9 W0 j1 \# z, v5 z: {
continue;
4 R( n+ o/ j- u8 u& E w2 J if(pItemElem->GetExtra() > 0)' d; F- o3 S7 K6 N, e+ M9 y
continue;1 H! h$ A/ {) O- w7 B) L4 ~
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 N) U! J$ S0 I% A
continue;
; V% N' u+ ^; b% X. X% E if( g_pPlayer->IsUsing( pItemElem ) )* G. ^ n) K, J$ ?% p
continue;& i X3 M, v9 g! f! i: ^
if( pItemElem->IsUndestructable() == TRUE )
- ~ }4 A' N8 t/ ^3 Q1 r {
* q3 ~. r9 D) l) ]( ^/ G g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- F1 J5 ~% ~) S5 u/ w7 D& z continue; O ^( E2 e0 d4 ?1 X8 ^; Q
}
# j2 j! g+ {5 k" A g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 N# i6 k; G( X' L s) m5 W
}* q" w; L7 L( T `) U3 u5 X6 b G, o% K
break;
~3 z8 d& [. a+ W }9 D! v6 ^1 E1 Y: g
case 1:
% K' r$ D7 J9 m {$ A- T2 e* G0 Z H2 g# ~: B
//整理背包1 E" H, M: h ^- C
//////////////////////////////////////////////////////////////////////////
+ s# s/ e, w# I //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! e: ]: O& @- ?; Z' q- S- X
//////////////////////////////////////////////////////////////////////////1 R* J+ t. Z/ A
//////////////////////////////////////////////////////////////////////////
# i" d' C# N% M5 _ CInventorySort* pInvSort = new CInventorySort;
! L* m2 N2 t4 K vector <sItem> vItem;& F( t, S4 u4 a& z( n/ y
vItem.resize(MAX_INVENTORY);//初始化大小
1 _: P, T' T p. I //////////////////////////////////////////////////////////////////////////
9 M( Y7 q {( ^# b5 S* I //填充数据, G) ]$ F/ x: O9 N" a+ n9 L
for (int i=0;i<MAX_INVENTORY;i++)
& l& i3 D: f6 ]; h& k g {2 g, Q+ `% {0 ?0 g: K* U# m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 r! Z [# O- @" P+ u! _7 ] if (!pItemElem)
5 o" \) d& Q- T" W# V: P* m2 i {
0 `. F3 l/ v7 K" d vItem.dwKind2 = 0xffffffff;4 S0 F8 S7 B9 V$ g
vItem.dwItemId = 0xffffffff;
U3 D/ J, b) O) X K vItem.nIndex = i;
0 O7 H8 o7 l- X- w: ^: K }else {
9 | L) A. K+ @. T; A2 A6 s ItemProp* pProp = pItemElem->GetProp();0 d) e7 X7 Q8 I# I$ H) Z/ A" q
vItem.dwKind2 = pProp->dwItemKind2;% x9 b2 v; @3 c' h
vItem.dwItemId = pItemElem->m_dwItemId;
" L5 z/ c. a( _6 q vItem.nIndex = i;& T- \0 r) t' N$ w* ?# E# W- G! }
}
0 z* P# y6 H2 _% ^' _, t. D# g //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); L. I# F- \' E/ s
}
5 m' Y% ~1 f# U* f3 ~ //////////////////////////////////////////////////////////////////////////
8 u- W. r$ p# P r7 Z4 H3 Y I- z sort(vItem.begin(),vItem.end());//排序2 x2 y0 ~4 J/ F3 A. @0 m5 m' m
//////////////////////////////////////////////////////////////////////////8 s% A9 ^0 w9 z' `
//交换
( y5 e, Z9 C2 n: x for (size_t i=0;i<vItem.size();i++)& Y: _3 D) ?8 {0 U4 g8 V
{' q3 u% C5 f6 U
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 `/ b8 \- g9 w+ A3 B' m* Q3 G
pInvSort->Add(vItem.nIndex);1 x; e" f' k* i. Q
}* i& G: p0 W5 {
BYTE nDestPos = 0;
& Q% t, R( }, J5 R+ [ for (int i=0;i<MAX_INVENTORY;i++)
% \2 f f8 l( m+ m I {
, [- g# v# F% a. j) c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% w& l& {* `4 |8 P if (pItemElem)1 N9 f8 B$ {% o5 J1 p
{
7 J( ~! r7 S$ T2 g3 G if (IsUsingItem(pItemElem))
# q) k5 w# h/ O( Q1 @. T {0 _6 p. T. M0 ^# z& g: ^
//这个位置无法放9 h! P/ O* M, q' V9 y) L
nDestPos++;
7 G. L7 c% R$ j) e' d. M( j! [ }+ H* i% u, R( W8 x
}
& y# S- {# v) H7 G- v* r f BYTE nSrc = pInvSort->GetItemSrc(i); i- w* x; e3 ]3 Z# B
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ f7 @+ S' `+ D, f: P I
if (pItemElem)
D' E- p4 a& P4 @5 [ {0 I& b/ `) a& B# {( x
if (IsUsingItem(pItemElem))
% d) M+ U( K0 ?$ s) l- n {1 u+ u9 j6 M6 U
//这个道具无法移动,跳过
a& I. ~+ o$ p$ {: U1 M+ _ continue;
5 R: [/ N! p& c8 Z5 q }
0 L- @) ?- }& m8 @5 a- `5 Z }else{0 Z( |3 o0 [9 d
//空位置 不用动2 M+ k; ]1 M- {9 B* o ^
continue;( t* D& \' N; ]# J+ j, A
}. F: D9 V9 w4 U' k% w& P
//////////////////////////////////////////////////////////////////////////5 Z! a8 e- c$ D# V( K; }
//开始移动, b" I' }7 s/ W- ?* V1 q c
if (nSrc == nDestPos)
4 ^+ }8 C+ Z: K6 W. ^) S0 J {8 v8 \- l1 S. }0 W/ \" \& s5 M
//原地不动
: I% }* b: }! r- `* n0 t5 }! W nDestPos++;# }9 X% o' `* Q; a
continue;& V: O ]& d( o2 D! w: b
}
5 v' n1 {6 L6 Q pInvSort->MoveItem(i,nDestPos);# V7 y) X+ P; S$ {; }! R7 W
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- |: R8 K& S% B Sleep(5); ]% }0 x" ?- m. |9 b0 w( i
//Error("移动 - %d->%d",nSrc,nDestPos);
( u/ N0 I1 f) \! h+ | nDestPos++;: M8 z: H" ]$ s7 H& o2 L
}
1 m( m% z) K3 |& u" C* k( A- N, H //取第一个元素的信息 I" T6 y9 g. v/ [. g/ |9 R
/*2 V5 Q1 M2 T8 F# j9 J$ r. j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% ^4 z1 J* D3 J2 w1 x& c
{4 \8 h: e' l/ e) x
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& ?, R8 @% b& Z6 i$ S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, z" _. z2 [* w }7 s) i1 W/ Y( z+ ~5 n: A
*/7 a! r* R3 z+ P
//////////////////////////////////////////////////////////////////////////
) s: v( \; r4 V/ w break;
( Z- G+ \. [& g }
. E3 }# R8 }( V5 w* Z6 V. D, l }
$ ]# i0 |& T) Z2 P}
/ ]: K2 Z) X7 ~# _! ]5 k& Z8 o0 mm_wndMenu.SetVisible(FALSE);& V' r; `) r# \
* l6 a" D3 H$ j, m3 s4 v--------------------------------------------------------------------------------------------------------: S9 q; R2 J" F+ m
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' Y) _- l3 W; p8 N" B
{, b5 E+ F+ ~' S5 ~: F
BaseMouseCursor();4 n) X- P4 L- i& {5 {* K, u# S
}6 L' J; L! [* N' t- A
在其下添加:
3 e6 Z+ f3 j+ r, w( Pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& h6 x3 n% e" e% Y# v{
x3 g# V. k/ X2 n5 Ym_wndMenu.DeleteAllMenu();
# p$ O& k# F9 O' b$ k$ i2 sm_wndMenu.CreateMenu(this);( b: M3 S( H6 s' v& s. c
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% B/ y' N5 D5 \2 t) u6 J( Z: Y6 F ?
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 Z. f9 m4 Z: ~7 y1 w1 s s{/ q5 f! {# ]! |
//P以上级别才可以删除所有道具5 q0 _, {8 C2 O/ I d" Q
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- |. J" t8 E+ \1 K; s
}- t9 ^0 N2 ^* ^ H
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& @* T! @& P* Y" c6 h, ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( H$ P' @8 @( o. i! x
m_wndMenu.SetFocus();
" L/ L, h+ N n9 m}( X/ E2 T9 Y/ l$ g9 ^& u3 K
------------------------------------------------------------------------------------------------------------
~% s* M# R* q*************************
. N' @0 ]+ s# Z3 q, f( y$ IWndField.h文件% ~, x% o W# d
*************************. ?) y9 x4 }) [1 y4 L m
搜索:BOOL m_bReport;; b4 C6 W% w! u- M& @( {5 A
其后添加:
. q2 U6 a9 E% j4 B" n5 M# ACWndMenu m_wndMenu;$ C* q; H1 }1 S( L* |4 C' l$ e
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
/ E" S" w# Y2 y; D3 Q$ n/ O' k其后添加:+ j+ p& s( N1 _; z6 G6 L0 N
virtual void OnRButtonUp(UINT nFlags, CPoint point);" O5 h% N! X+ s6 I G! O
' U9 R/ @5 u. z7 l8 U7 r* E+ I0 d& j! F1 Z
|
|