|
|
源文件中_Interface文件夹下WndField.cpp文件7 h9 {' u+ B! X0 A- |6 U7 t
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. B- K& _( h4 d0 ]
( A2 x' U* Z3 s: }2 X5 `2 W1 S9 L" nstruct sItem) F+ ~' k3 R) X. Q
{
/ V+ F; V5 V1 M: D: }7 r" y9 f" X) ADWORD dwId;8 S9 D+ _+ h. O. Y
DWORD dwKind2;; h# x+ |. P S7 s3 j6 r- r
DWORD dwItemId;
6 W; T3 E( Q# D& b2 s% A7 B( Y* `3 ^BYTE nIndex;
- v, e! h' R4 _1 F, DsItem(){
( D: h; Z: Q6 T9 {0 \. \7 C dwId = dwKind2 = dwItemId = nIndex = 0;
" H$ L5 u8 q$ p4 x}
) L8 [4 [# }, Qbool operator < (const sItem p2)4 L) {$ ], a6 q, D
{" f/ B$ l# X$ {2 ~* B O
if (dwKind2 == p2.dwKind2)4 p! Y3 z: t$ g* n4 Z/ R& B
{8 m( @0 t3 Q+ j8 Z. g
return dwItemId < p2.dwItemId;& b' O2 k( s) I; h. a4 |
}else{
* W. C- k) i/ u( m4 S% y: D return dwKind2 < p2.dwKind2;
" `- w* e: P" o$ t3 @3 x }4 H5 h4 s9 v) W9 Q& R
}
3 E% r6 X3 G. V3 G. ^};5 I3 `' @0 t8 K" B; i# H: P
class CInventorySort# D$ e+ s- W! Y8 y, j
{* j- T- v- \0 P% [ u# z" D
public:
9 e& U/ g4 u" W" nCInventorySort()6 @# M! t" C& h( r- ~# Y6 V( K
{( X* I3 c% |3 ^( T" H1 @. u9 f' x8 v
m_dwPos = 0;# x4 R6 D8 x0 J3 V4 \8 J
}
& ^- o" S/ n" u5 k5 r8 @~CInventorySort(){}. A" b* c, R7 s6 z$ P! Q
private:( q5 u6 I; x5 x% T* I4 `
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! \3 N' k; z% ~ t
DWORD m_dwPos;0 e% X* c% {( r
public:9 B6 z2 Y- A2 L: @. P- }/ J/ t g
void Add(BYTE nIndex)
7 u$ u9 V( h/ |{
6 _- B) M6 Y9 Z% n$ P2 c if (m_dwPos >= MAX_INVENTORY)
, v; p; o/ X; a! k" n' s+ Z; F' ^/ U9 K {
, q3 F0 h1 ]8 G. x& T return;0 F6 Q3 W8 \% h$ A& S
}" n( u/ ^" s9 X& k
m_Item[m_dwPos].nIndex = nIndex;
/ L c# \; g3 | m_Item[m_dwPos].dwId = m_dwPos;, G1 S5 Z2 Q1 w+ O% o
m_dwPos++;
4 O9 Q8 m* e3 v, U* o) i}6 j; B) Z8 d2 U: r- g9 J
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ R9 D: q: ^+ A9 Q) R' C7 G
{) h- k# h- \. e2 Y; h
for (int i=0;i<MAX_INVENTORY;i++)- I* r/ Y, s( Y- X
{1 R; R* d; W. V6 q `
if (m_Item.dwId == dwId)8 D: X E, u" n! c/ w
{
' H# H5 s& K, x$ K( Q return m_Item.nIndex;" k& Y+ V1 b1 L7 J+ i
}
- a! D4 y. c0 ^4 B+ I7 M }9 {4 I1 d1 J$ [* {! T6 T
return 255;
% Q9 ]4 C- b% h- h7 `}. V: ] m* I9 z. @' ]7 d; ~$ p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 y, N- T) l! Q' G- r6 ]
{
, N- o! M) _2 H% ? BYTE nTmp = 0;; Y* D9 I8 s2 J' }9 p
bool bDest = false,bSrc = false;
6 D$ a$ x1 ]+ j9 ~ for (int i=0;i<MAX_INVENTORY;i++)
) H+ V+ L% Y) k/ s2 S+ R9 S {
* l: z4 F. r6 a4 m9 F3 ] if (dwSrcId == m_Item.dwId)
( W/ p5 j" E+ @ {& M! G/ z, H9 j Q: w
//id相等 则 改变对应的dest和src
. a" F/ C# l$ p( z- s nTmp = m_Item.nIndex;! H8 L! g5 H% f; _/ B1 j
m_Item.nIndex = dest;
" c3 `$ _6 G' |: W* h }
1 y+ }* e) p( o4 C }; S. S6 ? W! Z: U" `
//临时数据保存完毕,交换开始9 s6 C$ [+ [3 l6 [7 \
for (int i=0;i<MAX_INVENTORY;i++)
! [8 X$ g* ^, {# s {
# Y4 |3 Y9 U' b+ Q4 P4 ~# M/ A if (dest == m_Item.nIndex)
, C. S/ Z$ F: j& W# K {( i& \) n2 p! X3 i$ c) R @
//id相等 则 改变对应的dest和src- k5 w$ M4 ^/ f
m_Item.nIndex = nTmp;) Y& ? c% ?. s+ p% c, J3 |0 F; W4 E
}
) N Y6 V4 u; |" H }. x4 Z. B& ]# [* w' o
}/ N) E6 O. {; t9 R; Z2 Q' ~
};
' @+ y4 R1 e6 E$ T7 ~-------------------------------------------------------------------------
& r1 S/ D5 y3 e m+ ]& w依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ P$ E4 q5 @& l! v搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 q# H3 d2 d% ~. x8 v紧靠其上添加:# K2 U% y6 A# q6 S( l& O. n6 A
if( pWndBase == &m_wndMenu )" r9 I( o+ I+ g# V( {( P Q/ q
{+ E$ U8 N' P/ _
switch( nID )
* @) b% t. b8 A; j; P {* F* ~- C/ }/ N! P* h
case 2:
( R* F9 M0 s, Y* s. i9 ?% a {
U K! |+ B6 e3 b* |: } //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL); Z2 M( r5 L, l# [9 I
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* N1 V+ B" C, Y; _$ D1 \5 U
{# I/ w+ T( I2 C/ j5 q* _8 X$ e T
break;1 V* O" Q4 w! }- j# ]- L1 ]
}: e6 r2 }6 A a6 {4 o; g/ V
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 z1 R3 N6 X5 w {
- ~1 _0 q: b7 \& ?% G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; A$ x% K S" @$ {/ P8 q! v9 `# k if( !pItemElem ): @9 j, g6 L$ T
continue;5 Q5 C* g1 l5 E: w" ^6 e
if(pItemElem->GetExtra() > 0)
j) D3 a0 [2 r continue;9 N: |0 w0 A3 O1 I1 k
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
D/ M7 ~2 V# { continue;+ x1 [: o! J/ J! K# ?
if( g_pPlayer->IsUsing( pItemElem ) ): g" @1 Z3 y4 z! S0 b) z: g% H4 {
continue;/ s4 R( X& B8 [+ |! s# E3 f0 E6 J
if( pItemElem->IsUndestructable() == TRUE )8 g" m% p7 t c+ X8 m+ x7 I
{
5 a3 j( k+ Y& f: V8 O g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 F6 M% h( [2 y. o5 Y
continue;
" b' d) Q, Y% z" S0 f6 i1 P }+ H/ f6 \5 K' @5 E+ b" r! W L
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( T3 | ]0 e0 l# K: H }
: N5 f' u' v8 d/ n# z break;
6 ?( u- u1 h* t1 \. @% j r }
6 q6 G- B1 ]/ B& m x3 ? case 1:
# Q* ?% A y3 w* T {; W' ?' c2 s" b8 ~: F
//整理背包3 @9 m/ p3 l+ B* \- N
//////////////////////////////////////////////////////////////////////////6 g$ \) k/ G1 \4 _' y' y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& d/ [9 x/ ~! ?% `3 `
//////////////////////////////////////////////////////////////////////////& F# Q( s% Z7 y' j1 D% H- q. g
//////////////////////////////////////////////////////////////////////////1 `% A* W: n( o/ x2 |! m$ w
CInventorySort* pInvSort = new CInventorySort;2 }6 _! B2 E- h4 o1 q, l
vector <sItem> vItem;
: [' m! A9 Y" \; X* M8 |8 x: V( s vItem.resize(MAX_INVENTORY);//初始化大小( X& R( P9 H3 }9 Z0 B6 e. Y
//////////////////////////////////////////////////////////////////////////
0 I& Y( B2 J4 K+ N) } //填充数据% h8 g* ?9 p3 ^
for (int i=0;i<MAX_INVENTORY;i++). G) B2 N( n2 G( v
{
: q/ W& H+ S/ H) T' B+ L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 q- V9 _; R+ m' Y1 x# p% R
if (!pItemElem)
: @& O0 A0 @# P3 n6 i6 c- J% W {3 S" g5 _3 }5 u
vItem.dwKind2 = 0xffffffff;3 @% d/ A* `! T9 I2 v
vItem.dwItemId = 0xffffffff;
5 G9 }- R+ z6 c6 d! W; r vItem.nIndex = i;
" A( F( g6 U# q; y8 W }else {6 f$ n6 c* k- T S
ItemProp* pProp = pItemElem->GetProp();
# [7 D- i! ~. O! [! H vItem.dwKind2 = pProp->dwItemKind2;3 u2 c9 g z$ Z2 |" p" p5 j
vItem.dwItemId = pItemElem->m_dwItemId;
9 o7 r$ F8 d4 g6 e7 H vItem.nIndex = i;5 g* L H, P" C9 ?6 a% j- ?
}1 I, J% C J9 |' H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: h+ u; \0 J- n1 _; w' q }( L. D7 A! c; W5 H- _' {
//////////////////////////////////////////////////////////////////////////
$ w7 x# v: m+ i3 x3 @ ? sort(vItem.begin(),vItem.end());//排序
9 ~' x2 k; c8 z! \1 E5 w //////////////////////////////////////////////////////////////////////////" u+ V8 e ~: n S: m
//交换
! \1 H; b; @1 M2 q for (size_t i=0;i<vItem.size();i++)
$ } x; C+ X, w1 G# i {4 m% p/ x6 r8 n/ K0 o/ |+ `
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! c4 D' Z. p) U5 o* S. [( v& u
pInvSort->Add(vItem.nIndex);
& X, D) b; W# B) }: T# E }
$ v- n1 x2 J0 r% }8 S; u9 i BYTE nDestPos = 0;9 n- ~: s/ `: Z! M
for (int i=0;i<MAX_INVENTORY;i++)
" d+ L: {0 V1 Z, H/ j, b3 ~ {& B4 T4 D1 h* {2 M: V1 d( e. t; f4 Q9 e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% y( V# `' k7 f- D8 y
if (pItemElem)' ^- w' B9 E# N& O# Z+ ^
{, @; b; {3 z4 S
if (IsUsingItem(pItemElem))
* t+ v# Q$ U) B; u9 k# k {+ a* Q; B4 ~5 f2 f
//这个位置无法放( \# v5 p1 G7 K
nDestPos++;
) c3 s4 K" c$ U7 q# S" r }; v8 Q' k/ @1 T: y
}) \, |! L! p8 S
BYTE nSrc = pInvSort->GetItemSrc(i);
: J. g% Z" K- [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ ?4 K" C% @& h: @4 V if (pItemElem)# ^% N' a5 F, @% i
{8 P3 g+ F: ]; V7 b3 N+ }! j
if (IsUsingItem(pItemElem))9 d! p5 O7 g3 S6 k# ?) D: |
{
" L9 l+ C! d4 W8 Z. F& P, y" u //这个道具无法移动,跳过
+ v9 T1 n; r% N continue;3 x) }, l% ?6 Z% P2 l( c
}0 o+ N0 w9 F2 q6 M8 K( ]$ h
}else{
$ ?# O, m. S" \ j5 ` //空位置 不用动1 [+ l. N6 `* I6 ^
continue;/ s1 S7 O. X5 k! K, z
}% w2 S: B5 p5 {8 M
/////////////////////////////////////////////////////////////////////////// V( ?: I$ w6 M/ T/ ~! x
//开始移动
6 p2 f. e' ~: k) D% E9 F, l if (nSrc == nDestPos)
; a- \$ `) K8 f+ P) j {
- w0 U" M+ v; g% \2 C+ q/ v4 k) W //原地不动
7 \0 V' R8 z' h( ? nDestPos++;
3 j9 t8 y" O/ P+ B6 m continue;6 D) E6 {0 D) t' e" G
}% y; G3 w/ _5 O- O: o
pInvSort->MoveItem(i,nDestPos);2 A7 W9 m" A' r( i9 H4 t6 \
g_DPlay.SendMoveItem(0,nSrc,nDestPos);* u' G& A# V6 X6 S
Sleep(5);; e& {) v& z3 H/ L* ]
//Error("移动 - %d->%d",nSrc,nDestPos);8 D( Y: O9 f, Q. g2 J
nDestPos++;
# T/ W1 t4 ]6 R4 C% x }
/ u4 Q6 U) E5 _4 F" L' v d //取第一个元素的信息# i( H D3 y: g* D( X9 x
/*0 w$ D: x/ C4 W( @$ t+ N9 y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 ^8 P: f& n) _5 e
{
% t# e" O+ K3 ?- s) u! P: ~( ? Error("Move - From:%d,To:%d",vItem[0].nIndex,x); }7 n, V7 u9 Q& x3 X/ A" R
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# V+ T! V: |$ H9 e. {
}/ Y9 W4 ]$ }! \
*/
) o8 b4 A7 O9 W2 `8 }( [$ c& p //////////////////////////////////////////////////////////////////////////$ k. T1 w9 t: l9 `" J
break;
# d8 N' M8 f+ n g1 g, M }( X9 s* b5 k. b# J4 D) T0 y
}
9 ^& X5 z; g, R3 u" A. I3 U5 e9 M}" h* ~, j3 H9 B! g N
m_wndMenu.SetVisible(FALSE);
# I( M9 i! l1 @9 ?" X) ^ l2 T5 g; R u1 B5 |% b$ K1 O
--------------------------------------------------------------------------------------------------------: [- s1 L) v1 g" e, s+ r% e) I
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 a1 Y1 e4 F1 E& I1 k H$ }{
}8 ?( Q+ Q2 BBaseMouseCursor();
: s1 ~7 f0 u1 L} Q5 O+ T5 v' P5 N/ e8 k
在其下添加:% i$ `+ [! J9 h1 X1 O7 D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% m( ~3 [. p4 a0 d
{6 b$ g- {' N7 Q1 @
m_wndMenu.DeleteAllMenu();
8 \; |7 ~7 h& y: ^m_wndMenu.CreateMenu(this);% A6 ?8 U5 `" P. c% P3 S. J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# n2 [ T5 p& X4 ?; @2 P# b# M
- D4 d1 {# a+ R& Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' ^& _# E3 ]4 O2 ~
{$ E$ r1 \2 u1 D5 l$ m
//P以上级别才可以删除所有道具
+ }* [1 c( w- S4 D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# Y/ D6 p# i6 U- M3 e}+ u9 M/ W* E' y0 {2 E T& k6 }7 t; G
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 A0 G O S# U1 u$ \
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; j F( j: ~! V# D, e! \
m_wndMenu.SetFocus();! Q7 o# f: k9 x }$ B/ b! l( P; b
}
. G2 L8 e, ~. `/ ^, D6 M------------------------------------------------------------------------------------------------------------
* C! w/ O ~+ h6 j' q*************************
# F5 m2 V( N2 R9 c. O/ x" dWndField.h文件; T/ M: S6 Q0 ]( g/ s$ `- i
*************************
% f" K. S$ ]; P d- `搜索:BOOL m_bReport; k; F3 p2 q3 p/ |' x- N
其后添加:! H" Z1 P8 ?5 ?. _9 X' ^. t
CWndMenu m_wndMenu;
( {4 C9 u6 O9 w$ I! R# }搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" Q$ \) Z y8 c5 z% Y. |其后添加: ^0 ^8 l2 k2 J" n' G% K/ K$ U
virtual void OnRButtonUp(UINT nFlags, CPoint point);
. Y1 x- W/ g0 g
6 }4 ]3 r) }' w: H/ S$ E( Y# z0 `" O5 r; | L- u
|
|