|
|
源文件中_Interface文件夹下WndField.cpp文件
" V7 I/ _+ ]9 Y- }+ H搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) i9 f: [& o* ?" ^
: z; u. J: A1 Z a) y: ~
struct sItem
. o, C6 W; u K1 v' a* A{
' h) u9 X6 @) L! h: j: PDWORD dwId; B9 K+ K% b; o1 x1 G8 [
DWORD dwKind2;
1 r/ y/ r+ {+ f# n1 l3 M5 @/ PDWORD dwItemId;% }! o* r1 x. ^. {4 ]
BYTE nIndex;7 [2 p5 X {' i" O+ ?1 b
sItem(){
: f8 t# y# i f4 [9 B1 b dwId = dwKind2 = dwItemId = nIndex = 0;
( E; [5 R. h- m! A}
* _5 |: N. F/ h" ?0 A, ^bool operator < (const sItem p2)
( X5 {& X/ N \1 t( o{
- ` Y$ v' a+ `& h8 ?7 v if (dwKind2 == p2.dwKind2)
; G* }, w. B8 \9 B: J: e {
' R" }0 ^6 W6 m& Q2 B* ?* G7 j return dwItemId < p2.dwItemId;
; p% {& r( @; j3 B5 Y }else{
( m$ B- ?3 i; q8 E! Y, o return dwKind2 < p2.dwKind2;& S5 p% X" C! i6 `8 r/ \- B# g3 m( N
}& p0 G9 ?/ b5 J$ i4 q: L. R. S3 b
}& I" p: R; z1 T7 b1 r
};8 H8 a* p5 Q0 k: X) ?9 g2 M
class CInventorySort
' u! O9 \1 C' w' k/ i" T{
9 |9 ~) M7 g6 Q9 Y, H) z# Xpublic:
& Z, k# ?9 N$ j5 B' H% vCInventorySort()
# d, c, X% }/ R9 U) s{
R( T; ?) f# `) L0 s m_dwPos = 0;$ k$ \4 J( l% Z b
}
6 _2 n& O) p) b% Z) E1 n" U$ S~CInventorySort(){}
: f! P1 \! c% n: Q% l+ v5 iprivate:/ ]6 C: z( d. |. R, W- [6 C, Q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# b% [- G5 T% V; K
DWORD m_dwPos;
- W6 i) o7 }. c" Z. T2 n: f5 ppublic:2 b# U$ V( q3 M! d; G2 g
void Add(BYTE nIndex), i2 @5 k H3 i" f
{& {6 Z- ]5 E6 i! E7 ~4 Q$ j! i
if (m_dwPos >= MAX_INVENTORY)/ K/ p& C$ F6 H# o4 y) ]5 W) D( w
{9 n' P5 Y1 J- w- K; S1 C( w
return;! _6 |( k+ }3 R: f R% R. d" T
}# R9 d7 r. w( D" F6 K
m_Item[m_dwPos].nIndex = nIndex;+ p( `2 K" B1 b7 k* {4 |
m_Item[m_dwPos].dwId = m_dwPos;
/ C7 l" @. S+ p8 l5 E9 z m_dwPos++;: _7 _) I, s2 j9 K" b0 m6 i r L: a" S
}1 C1 D3 ~+ J, [! j% Y- } K+ B
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 {$ ]8 F) s {{+ d0 O) P1 _! z/ o2 K; b2 D
for (int i=0;i<MAX_INVENTORY;i++)/ o1 `5 H; p2 i+ U! \/ B: B9 m
{( F) A' I, A. i$ c+ v e( B
if (m_Item.dwId == dwId)
3 X- @1 U+ D" j# u {
. p9 [+ z2 Q& a! L return m_Item.nIndex;# W7 |3 N6 z6 i3 y; v' F: Q& Q
}9 F% ` a, G8 k& q4 j; V! ?, K5 i
}
5 T4 {, I. Q! W; `2 v0 x6 \; P6 y7 e return 255;
6 p* o z" ?6 ?1 g8 M# |3 {}
2 N# s" K7 |7 F- B+ Avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ E0 _9 ^- D2 j$ u- N. r! a' F
{) v1 I1 P8 ?7 ^6 i& y" r1 ]
BYTE nTmp = 0;
* Q& o- `# _4 h: t( G0 ~* D( S7 v bool bDest = false,bSrc = false;$ W( r7 S& t- d5 r6 ~
for (int i=0;i<MAX_INVENTORY;i++)5 p- b7 Z6 ~2 a! X' j
{
8 s4 s; V4 ^' ?/ ~/ I* I3 i; o if (dwSrcId == m_Item.dwId)$ }: l O' p# n) K/ H# l
{
( Z; x: V; g% N" c( m3 T |7 t/ R' N0 g //id相等 则 改变对应的dest和src/ |5 u p# R) k1 M& h
nTmp = m_Item.nIndex;- `' c# c8 S7 g& V8 u+ W, T% n) u
m_Item.nIndex = dest;
4 Y, ]7 T+ ]$ w: B) x9 d }
! N6 l/ s- J8 Q, d, i. w }
% k* @% N& w5 `0 k% | //临时数据保存完毕,交换开始
: F, H8 w0 d. e6 j; ^ for (int i=0;i<MAX_INVENTORY;i++)& u% @1 X/ n& l0 F
{+ v( Q2 C! V* K; o' V- k8 {
if (dest == m_Item.nIndex)# l/ ?6 Q9 ^/ _+ I9 t
{& Q* ^' f+ o# Y) I* [5 [
//id相等 则 改变对应的dest和src
3 k" C! t- c8 }$ w; y m_Item.nIndex = nTmp;
. J$ j+ u, f% S4 e }8 i* ]9 [ j( D: n( ?' `! @( n( k
}3 a+ m# p9 N# b; G# h. K o
}
0 V( z5 l4 F6 E2 C7 A" Z};
5 C% E8 L. | g- R4 d6 Y5 T-------------------------------------------------------------------------$ ^6 G% {; p |. Y# J9 N. w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 v# _" a$ h0 a0 V# n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ L# c U y2 j& N" i$ S5 S* K紧靠其上添加:
' j- f2 q5 Q& h4 L4 l, i0 wif( pWndBase == &m_wndMenu )
( \6 X$ L1 n' e9 R{
# v7 b( i0 g- _/ Y9 L& T& x switch( nID )
; h% n5 a2 ?3 @7 V% S: I0 r {; }0 b+ G+ |+ G+ I& [
case 2:. k: c+ |, R* F; M* a0 v
{6 q1 P6 y; I P/ j* H8 D( z9 X
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 X \6 q) v8 S) |% c" ]* P if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' ~4 h8 D3 V7 _, g0 l, i {
7 M: O, X* i( U$ y break;
1 u1 G5 m2 _2 C: ? }6 b. w5 ~* ^" U$ U/ v
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) {: P* N( u) j# N2 {$ X
{8 e/ ^1 }0 o. Q: U2 }7 i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 R g7 g+ ]4 x3 i C7 G8 h if( !pItemElem )3 M3 N* e/ a6 p
continue;3 \% E, L4 Q+ ~
if(pItemElem->GetExtra() > 0)
5 L3 D. J; L- w8 I( [; |) | continue;; j, T2 M& U+ I4 Q/ z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : T2 h& ~1 P& e
continue;7 A T( A. @6 g2 D# F. j. |# k
if( g_pPlayer->IsUsing( pItemElem ) ). ^+ d3 k$ v0 Z9 F4 l8 a
continue;
C, `: W9 O7 \8 G( e( I! F if( pItemElem->IsUndestructable() == TRUE )
2 B. A' K1 _) N& R: E8 O {8 \" w7 F) m0 P
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: ]. @, S/ N. P) T4 ^* O& _ continue;: ^0 t1 G. `8 k% Y; r3 E% {
}
/ X% }1 F( B3 {0 T g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 x( a0 }/ B2 c8 @$ d4 k- f
}
C! I \ w: A break;
/ a* B! [4 s$ f6 n/ k0 M6 J }
8 M: e0 f. V3 O! V' K4 t% W case 1:
0 k: M+ e6 L8 X! \" }+ Z {4 Q3 t$ ]3 A3 O, L
//整理背包- @) I+ S$ A; @- B
//////////////////////////////////////////////////////////////////////////
4 \5 K- V+ _& T' h- U6 _+ r //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 J4 g+ i& _ r& r9 u( P
//////////////////////////////////////////////////////////////////////////5 i& T: l4 e) O, \0 Q) J+ a
//////////////////////////////////////////////////////////////////////////6 L+ \" }, h5 U$ a: c: O
CInventorySort* pInvSort = new CInventorySort;. q( M/ T2 v: K2 |; r
vector <sItem> vItem;
6 \' ~1 L% ]+ X. Z. X vItem.resize(MAX_INVENTORY);//初始化大小6 u# M4 @ c3 z2 K
//////////////////////////////////////////////////////////////////////////
$ _" c+ I. e: V9 m0 C7 H* m4 `- I //填充数据
6 E/ Z: _6 h) }- p5 U5 h$ V for (int i=0;i<MAX_INVENTORY;i++): a! g" b2 ~) J9 X
{2 w2 _$ ~1 d- ~8 {' ^& R1 ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 x( r1 Z2 i" Q F4 U. D* [' G/ Y if (!pItemElem)
) p7 u) E) d3 R+ z( k' a8 B& e {
+ i2 ~- t- Q4 P8 T vItem.dwKind2 = 0xffffffff;
! Z: n; L! ^. V: }0 @ vItem.dwItemId = 0xffffffff;& I( W) g+ v& a7 N" T
vItem.nIndex = i;7 p& l5 \# L4 K6 T4 I
}else {' R- s4 C2 U! o$ R* R% m
ItemProp* pProp = pItemElem->GetProp();3 {8 O/ B' C2 m
vItem.dwKind2 = pProp->dwItemKind2;
. Z8 F4 s4 P$ ~; p5 g4 t vItem.dwItemId = pItemElem->m_dwItemId;6 ]% D8 K$ ~ ?) Q
vItem.nIndex = i;
: [ |3 {- A5 T% y8 w$ n }8 }& r# T) H; s/ F' x* p6 e" S
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 E3 w7 G$ k( H7 L$ ^; ^ O; Q4 g
}. S2 U( M2 k) m+ o) J4 [4 n/ v; i8 A: ?
//////////////////////////////////////////////////////////////////////////
1 y& Z1 z4 J: z. a0 X& R) w sort(vItem.begin(),vItem.end());//排序
6 u) I( _1 s% v/ |! r& P( { //////////////////////////////////////////////////////////////////////////; f$ ^* E) f* b9 `' a2 s: ^
//交换1 s( e* S! F4 w1 q+ \5 L/ l. H9 r
for (size_t i=0;i<vItem.size();i++): K5 M" S2 K3 k& P1 O
{$ b$ a8 z# H# ^( [) m6 F! F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 d+ |1 L! D; ~ pInvSort->Add(vItem.nIndex);9 O. o" t+ O3 i5 `2 ~! j' H
}
5 [, D v& a& ^) ? BYTE nDestPos = 0;$ ^4 d8 h X2 d) H: e& Q1 Q2 q9 h
for (int i=0;i<MAX_INVENTORY;i++)
% o) f( v0 x' n& H {
( A3 s% g7 ]1 V9 Y. \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- i8 D) `- L+ h, k* m, p! ^9 ]7 \ if (pItemElem)& X% u$ F6 O5 r: t- _0 R e" C
{1 }. K, k, F4 C9 ^5 g- ~
if (IsUsingItem(pItemElem))
) D {: a" a$ a6 T5 Z! _ {$ ?3 W% i- Z$ v3 ~; g
//这个位置无法放) M5 J) _& f) z9 |6 _* I
nDestPos++;- m) p) G1 X5 l' J; [3 ~
}
4 ?. l y: Z% D" Z2 | }
6 Q' K! e" K/ e( k5 m& t0 x BYTE nSrc = pInvSort->GetItemSrc(i);
( y- e1 f$ g+ R4 X" Z5 |7 p6 R; Q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 o* Q) Y F) O* o- E' C+ V4 j) @ if (pItemElem)2 n, H1 { p1 I9 U* ]
{8 J4 \( @" h* Q; D" s
if (IsUsingItem(pItemElem))# s) O4 C' i6 Y" p1 ~
{
3 p5 d: l3 H3 _1 F) a0 ^ //这个道具无法移动,跳过7 `6 T8 j ^# Y. n2 M( {) J
continue;; a! a; F/ y: z* d3 t
} V2 F& T4 C5 g. Y9 S* X6 G
}else{' H8 L p1 O9 g( X$ D6 W7 {
//空位置 不用动
, ?* v+ s9 @# O \& l( M2 ^& X continue;" f2 u0 M& W( O! h8 a
}
; V, x) d; N7 e( y //////////////////////////////////////////////////////////////////////////' O, d& r9 ^6 Y; A; o/ r
//开始移动
/ K( S0 _. a: I' c if (nSrc == nDestPos)8 Q7 l! `. y* k6 h9 d4 s' \ w
{1 f6 L! o+ z: O% a# I8 ^
//原地不动
0 g( l% g& P" L2 b: t9 x nDestPos++;8 _" A- S% H/ f1 `, Y7 |
continue;, i1 m4 G; r$ {
}
) N, X- P# Y/ d5 c pInvSort->MoveItem(i,nDestPos);$ ^( k2 V# G( l1 r' m
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( G9 N4 X+ q# u% y W$ X; f$ d( ] Sleep(5);
& E4 L4 n3 u1 o8 j //Error("移动 - %d->%d",nSrc,nDestPos);1 D# X5 h% Q: d0 t# ~
nDestPos++;" s7 @1 p' |. Y' d% y9 z) @' X
}
8 O. R& `& h' C: Z( g //取第一个元素的信息
3 z' p% x7 C, w% l: D: s /*$ e1 R. R, {6 g; Z" }' Y; i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 D7 V9 ?' N5 [; j3 @ {
% P3 d' g: {! R( }* a* a Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; w* K: V7 L; |6 R/ ~ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 E! T- e6 v& \! n$ M% L6 _
}5 p, o4 D5 W. H- o& R/ m) q
*/1 x: D% t7 ?) Q0 I4 s/ y3 u
//////////////////////////////////////////////////////////////////////////
* ?" w3 B" o2 [; q+ t$ x2 H/ G0 Z break;& L5 R. b' Z) o/ ?+ C
}" ~2 F5 |& @3 c) Z) o5 u. c
}
/ p% J6 y5 y! d: c8 D}- O$ m8 f2 u* q( ]
m_wndMenu.SetVisible(FALSE);* Z/ o9 x G B1 R# L
6 p$ b( V, x' M2 v
--------------------------------------------------------------------------------------------------------
. E& w3 f4 L/ B: Y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); P4 p0 l+ [% M
{
$ ?0 U* X" |0 f9 c* m6 l4 XBaseMouseCursor();9 W2 A# n: f; t' v% r$ I
}! h# A \; P8 X9 B8 {& ^
在其下添加:
/ X) k4 l$ x/ \. X; M( ^# yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 J. {5 K& B1 |* d5 _+ r
{
; P' l( n1 T; R2 z2 Am_wndMenu.DeleteAllMenu();
5 q, ?5 r5 O3 S# ]m_wndMenu.CreateMenu(this);: r4 Z. N' ]* ?7 d, |6 L
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( r1 ^9 V$ h% O. l5 p- y6 {9 J7 e: K$ R
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- y5 Q$ s7 U, g3 g7 _% ~{
; T5 A. o/ k, F5 @* M4 ?" v4 t. Y //P以上级别才可以删除所有道具
8 c' H4 Z3 I5 P! K4 z m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. N' m9 c/ F. u2 i6 a7 |& D4 ]
}
2 V5 i( @$ h6 D+ |, U/ m+ am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& G( R e3 B% v9 r6 p( u3 ?* I
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
^. Y2 e/ _; S$ v g7 Lm_wndMenu.SetFocus();
0 y5 ]8 ]2 t* J* |}1 p' C$ ?+ ]2 t1 k, C
------------------------------------------------------------------------------------------------------------
: t9 f. J) |3 c2 }5 @*************************: @5 P1 b6 \: M* {5 k
WndField.h文件+ P4 O: n+ f% ]# K+ V
*************************
5 I: O* @" p7 P$ e/ L1 c( E搜索:BOOL m_bReport;
5 I1 U% F: x$ l% X* f2 x" c其后添加:
$ u7 J z; `2 e5 U' m( cCWndMenu m_wndMenu;
# w a! z; y3 O; n9 l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 F t1 P: J; `8 E* F其后添加:2 I. R) u: G' V% i
virtual void OnRButtonUp(UINT nFlags, CPoint point);
; q% E4 Q( h3 P; H0 d* C( w3 |/ _/ O
9 ^% p; d* d6 U" J
|
|