|
|
源文件中_Interface文件夹下WndField.cpp文件- R" [8 v0 g4 f1 T
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, U6 @* Z5 }0 A' f" o
& `$ C; z) l Q" g7 V/ u5 N" Q6 S0 |' Nstruct sItem
4 l( N' [( g, O{
- V# i0 {, n* \7 m1 ?4 K" [DWORD dwId;
9 s! P( M/ ^9 n6 ^% _DWORD dwKind2;$ x5 X8 R; ?5 ]% h" m/ H
DWORD dwItemId;0 Z! C1 n! `6 w9 m @
BYTE nIndex;- n0 F) ]8 X$ ]3 H/ L. G/ A" L
sItem(){) X) l3 q/ {6 U1 V- {
dwId = dwKind2 = dwItemId = nIndex = 0;6 b M3 M, N4 `' H5 t( D3 ?- d9 z+ Z
}& f* I x. h8 Y5 ?
bool operator < (const sItem p2)9 G( D% j0 i& V7 f" W4 e$ q
{
) n( s: q* Z2 o if (dwKind2 == p2.dwKind2)2 b8 z- F+ N, O1 R( I( `/ v3 ?
{! D+ ?" m" P7 F6 `4 N
return dwItemId < p2.dwItemId;
( t3 F2 j5 S. v: a4 b% X }else{$ {8 l5 c9 m$ z9 c
return dwKind2 < p2.dwKind2;* @5 n1 S* e' W4 K, H# `; x
}
P1 F/ C0 N2 K# j# p}3 A+ E& Y8 z! S7 h ~
};8 O# o3 ~# t7 q
class CInventorySort
2 z' g0 {5 ]9 e; R{1 ?7 P1 u# P4 |% v# G
public:9 q" }" Q, u1 i6 v, `! n- s
CInventorySort()) P5 V, B% }9 z: F1 X. B
{
2 [2 I7 a! N( _, Y% d- a K" R m_dwPos = 0;
" b$ q0 G5 G& c8 R1 @" z2 Y3 L% M}
9 e B9 g( ~( ]; a/ x9 m& t" a! c~CInventorySort(){}3 D H- e$ T6 U& I5 E/ }
private:7 N/ b+ q* F& ? j7 z, d9 Y' h
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 |/ H1 ~' }+ A) J3 h7 {" N5 L1 F
DWORD m_dwPos;
7 P. {, `" t# R( `% M7 g" Lpublic:
# l1 q/ D% l! `7 u. j" Xvoid Add(BYTE nIndex)
1 B% b4 l; S) p' F7 b% N{# u' i9 j% j) i
if (m_dwPos >= MAX_INVENTORY)" q8 N m4 e9 ]; I% A# B" I
{
# k. U$ a& @( c+ S return;
) W/ M- K, a" r }) }" ?) q }
' Q/ e, S" W% J m_Item[m_dwPos].nIndex = nIndex;+ R9 `( q7 s. ~6 M8 @
m_Item[m_dwPos].dwId = m_dwPos;' P1 ~$ s3 W$ d5 w/ y( E/ p' S2 f
m_dwPos++;
8 A# G( z6 r8 A; T7 t. K, w}3 J' q# [1 }& x! R) q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 z7 n) k3 ^% j ^/ @2 Q
{. m) E, j1 P$ Q4 c6 \
for (int i=0;i<MAX_INVENTORY;i++)
0 C5 V9 F5 A+ L6 Y2 z+ I# k {
$ S% M% D9 ^& P if (m_Item.dwId == dwId). S' j1 h" I9 E& W6 n/ J
{
/ I" Z% H7 j5 W+ E' ` return m_Item.nIndex;
7 ^$ }3 E+ e" Z; G* P }
f! D9 Y9 t7 P }' H# m5 r7 G/ e B; Q& w
return 255;! n+ D& u/ ?0 `( a2 O" d
}
1 o" o) \9 C; y: m/ U0 y! Zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 Q5 H' a6 c: d4 m% F4 M{
( h) F- I$ w# y# ?" }9 u BYTE nTmp = 0;
- U& E8 @) \. ? m, D* F bool bDest = false,bSrc = false;
+ {; r6 x/ e6 s' W) P for (int i=0;i<MAX_INVENTORY;i++)3 L# w. [, t! c. l
{
' P" V' B* J3 ]2 m7 `" _' e if (dwSrcId == m_Item.dwId)1 _- Y# B$ H& [1 W+ G
{
* D W3 f5 X. Q //id相等 则 改变对应的dest和src
8 E) e2 \3 h0 t8 t2 a9 x- I nTmp = m_Item.nIndex;
7 t6 X- z0 B0 z: x m_Item.nIndex = dest;: w1 e2 F2 L* ^0 b& E+ K* v5 ^
}, d/ P7 J5 k' I, ]" ]5 S
}: U l3 p4 ?2 o8 O
//临时数据保存完毕,交换开始3 \9 {9 C+ O. p
for (int i=0;i<MAX_INVENTORY;i++)) c& F4 F& f9 ^- p, S) j
{4 f* E9 s: t2 q ^0 z8 V& X8 `6 Z
if (dest == m_Item.nIndex)1 f0 w% f+ Q3 _% w( g
{
! L. C' `) P& c //id相等 则 改变对应的dest和src
+ B! E8 r7 z1 B4 V8 i& H! ?" o m_Item.nIndex = nTmp;1 A" R6 l0 b0 O c- u. M8 P2 M y
}
8 I/ k1 X* L0 P! H' Z }7 {# ], g6 M/ e& W2 h
}
! h( F4 K/ b2 a( P. V};
8 u( o; }% G# Q' X4 |* `0 H-------------------------------------------------------------------------
1 }% w* ^2 j0 W依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" Q" [" {; @/ {7 c4 a
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. ^( z) d7 i, W) H0 N
紧靠其上添加:0 O: y" g ]6 s' c# C
if( pWndBase == &m_wndMenu )
/ t5 A- x6 `2 n3 D' f& |- u% h1 |* _{
- Z- F0 r4 C2 `3 Q# `8 @7 d, J7 S7 O switch( nID )( _' b! v0 R" L8 e' x z8 M% L3 T& D
{6 A, ^" \# [/ K4 j2 W$ R0 A7 |
case 2:& F; x" L: [2 d, g
{, r- Q) F7 O* Y, X- j: E# ~
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ l* g" I$ d( f: j0 ]2 e3 _: T' g if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 N G- H* z) q: d3 Q9 z8 L8 K) h* p
{
5 Z( q* U1 [. I$ A' b& \" R break;
# m" G6 b1 s! i- {9 W* I& n( I }7 y0 X9 [+ V3 [9 L1 i8 U* u
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) g& _1 U3 n) a- V$ y) k2 p/ F _ {; s9 z* g5 n1 g! M$ V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# c/ g" T; k: Z) j) `
if( !pItemElem )
, Y% R1 y3 o, W. {4 F: p) x3 s continue;) d9 g0 y" F) H+ F1 W7 \
if(pItemElem->GetExtra() > 0)1 V& K: J5 S1 f
continue;
, o7 P" W. h0 e. Z" V9 |" U if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , v2 F, P2 f% A4 R& Z8 N
continue;
7 G) Z1 i- ^) y6 B$ W1 d if( g_pPlayer->IsUsing( pItemElem ) )* L" O4 _' a4 `0 C; T/ I
continue;$ F2 l. E2 Q1 P. C5 P ?
if( pItemElem->IsUndestructable() == TRUE ); w4 e: ^; M Z( C0 ]* X
{ A7 w; J0 S5 ]# {7 w
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 m% k5 A5 J5 ?# ^+ c { continue;7 e0 K$ q+ }0 t h& P5 a/ N' y. r+ d
}
! x9 C/ K9 q5 J! ?5 L" w g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);. W2 }) q. R; t7 P5 X" x9 j
}8 x5 z8 e# V% s- P) W$ X3 t
break;4 x' [- u5 Y3 y% P$ [
}6 S5 q+ F l3 r
case 1:8 }- M; C. i5 a4 I x8 i9 S
{
4 `3 r% K& ^" |3 ~: [ //整理背包
; M$ [ W c/ K4 [0 r //////////////////////////////////////////////////////////////////////////* S' p0 I* B+ |) E# X0 L( j
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# k3 ^4 o' o8 _0 [! p! @ //////////////////////////////////////////////////////////////////////////
8 z8 u# b/ @- U* v, Y3 l //////////////////////////////////////////////////////////////////////////, b& K5 G/ s: H, p: T( x
CInventorySort* pInvSort = new CInventorySort;
4 k# ?# I% ]+ _; j vector <sItem> vItem;
5 @0 [$ V+ h4 X& v vItem.resize(MAX_INVENTORY);//初始化大小* m; D5 _) Z0 p, \
//////////////////////////////////////////////////////////////////////////) j, C& @9 e, ~9 t& D D8 q2 s ?: ?9 C
//填充数据
+ v3 h& a$ p& \& @! m for (int i=0;i<MAX_INVENTORY;i++)
# ?3 E) X) L J {% D7 T! z, D: t" {& g- ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. r" [ S6 _- C: p& N& b if (!pItemElem)3 i# Y, Z% j0 n) H4 d, ^
{
7 k# W% y. I6 ~) Z* T vItem.dwKind2 = 0xffffffff;' y2 p7 G+ m6 I; _- p$ ] N7 i# i
vItem.dwItemId = 0xffffffff;, n4 T+ l3 Y3 O$ B$ _! O. ~* d. F
vItem.nIndex = i;
0 P( x' b9 j# j6 W7 E9 Q }else {3 i9 w! A. C' ?8 x' B
ItemProp* pProp = pItemElem->GetProp();! L" j. @9 Y8 H2 \0 J2 `
vItem.dwKind2 = pProp->dwItemKind2;
/ O' t- b0 e1 {% Y7 y vItem.dwItemId = pItemElem->m_dwItemId;* X4 x/ r- E7 h6 S: b
vItem.nIndex = i;7 X( s9 n1 ^8 D7 v6 v+ L* H
}, K( P( k* p7 U- E, T
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# J4 f7 u) I# ]# f. z
}% X1 P9 V& G% N
//////////////////////////////////////////////////////////////////////////
+ v# m8 j4 C# h- c0 P- G" c* u# a sort(vItem.begin(),vItem.end());//排序
: Q+ M9 s2 M/ o T$ n3 p1 H //////////////////////////////////////////////////////////////////////////
2 \2 X: a; `: p" r$ \! Q //交换4 K2 e0 J+ Z6 X6 I$ b% ^
for (size_t i=0;i<vItem.size();i++)7 l5 P$ p9 l1 ^/ J- I+ {
{: g% a; D8 g3 N0 i8 J7 ?6 l/ ~$ C7 Q
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ N1 a, o5 o( S6 d- @& C2 R
pInvSort->Add(vItem.nIndex);/ z/ E( }3 p% O" P! s
}
; }# C+ K/ r! H9 Z& q, A BYTE nDestPos = 0;
$ u$ i; n1 f# y1 ]: R4 v* x# z for (int i=0;i<MAX_INVENTORY;i++)
( N) z$ z" V7 [' `% G4 |+ f {: W6 \7 w1 v! H- }2 g- [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* L5 ]0 ^( s% y3 V- \ if (pItemElem)* y2 b" U8 K5 W. L2 }0 x
{2 U! A) l2 V. k9 a9 J
if (IsUsingItem(pItemElem))
' n) x$ v' B3 U, F0 x$ H; z- l5 c {
% k" v4 V( C! g0 M' F3 s7 P* o% E, G //这个位置无法放3 J# P3 B4 ^& c9 Y% m7 i3 Y
nDestPos++;/ g# C' y; _9 ~7 }0 i5 b7 q
}$ P+ r; E# _* b& z# L
}
) Z/ k' x/ H% { BYTE nSrc = pInvSort->GetItemSrc(i);6 b" w1 q" I/ b* b
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 g5 b* U; [" I5 i if (pItemElem)5 e1 B C& I5 }9 t
{
. ]5 v( X. ~' E' ] if (IsUsingItem(pItemElem))+ X8 i! i. }; a+ ?& Q' I
{
" V) Z' X% e1 J( K- ~$ l //这个道具无法移动,跳过
/ F% e. k2 E. q% P, P continue;
; T7 s, _, A9 f1 d' e1 B$ J9 Q }$ ~3 l7 k1 ^, E. I* W& M2 I, c
}else{
9 Y# X: p; }6 A' \8 { //空位置 不用动
1 u# ~$ h+ Q# G9 Q: U9 G continue;
$ E7 Q) y2 }- [% a% {9 ~ }% Z' h# O0 D) @$ S/ D b
//////////////////////////////////////////////////////////////////////////
( M$ C1 c5 }8 {- h4 w6 N# c' n) ~) Z //开始移动
4 M8 _. b8 L# k if (nSrc == nDestPos)
. ]$ }& s. `3 R) I4 d6 X {0 `2 m, B# t6 x1 _- I' v* R2 @' R' |
//原地不动
+ S) o+ ?/ f+ }( I6 [$ X( G' y6 { nDestPos++;7 y9 R6 W2 K( L
continue;
* X# E& u; H( }! e+ q }
( [6 r( [6 ]( X4 k: g pInvSort->MoveItem(i,nDestPos);
7 U- ?% `4 t# V$ l7 D g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 K; l3 w2 |! @1 R9 O, c, d Sleep(5);9 z0 N% y% v+ B) T
//Error("移动 - %d->%d",nSrc,nDestPos);
' B: L1 A4 L1 v; ]4 r, E- ^7 z nDestPos++;
5 c( u2 l% `5 u! g1 Z( c+ N' L6 u4 H4 u }; \; V1 J. D( G: d. k& H
//取第一个元素的信息
* Z* J& z" `. T% A* @& C$ F( M7 N& N+ I9 c /*7 Z$ E k4 x" ^- u' n v8 k
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 a4 [- P j. W& Z5 @ {1 f1 d7 i, Y3 {* d% r) K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; v- l$ c' w+ o4 z! d6 p/ \ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
3 w( }' c/ _8 C0 r }) I8 M5 Q0 o: K+ O
*/
P% v, H" F* R6 @0 d! E //////////////////////////////////////////////////////////////////////////
; v- h& G' F7 o break;& \0 Y, Y) [% t. q
}5 f1 T+ P$ `& v3 L0 B
}
" t) r# S) m2 {3 {}" m) |" ]% E% N6 K$ o- N3 C
m_wndMenu.SetVisible(FALSE);
2 ]( w/ K# G+ n) q) j7 Z1 Q
" m: L; l2 R% v2 A, l--------------------------------------------------------------------------------------------------------, x, @% y t- T% `& B2 e6 G
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 q6 U$ d4 ~/ i+ R0 v, c
{
" z4 [& U% {' `3 M: z6 y5 u CBaseMouseCursor();2 O8 ~/ i% W; Q: J6 _5 p) A$ O
}
2 j7 q* c' R) l8 ~6 [/ | L在其下添加:5 Q6 `8 y; ?" f
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 b4 Y: M" w6 S9 H5 j& s+ F4 e{7 M( c! f9 x5 H- V ~
m_wndMenu.DeleteAllMenu();
8 g* Z" y- |( w- @+ b2 J& s3 rm_wndMenu.CreateMenu(this);
$ Z9 c: |, ?1 H M) q4 am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 L6 c6 L) i+ P3 G7 L* B
. C7 f/ h+ Y. g/ Z% S* W) C; I' q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! o* ^- O6 Y' w{% i9 l2 ` h N6 T
//P以上级别才可以删除所有道具+ [4 f6 @" e: {2 V" z8 _
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' p1 ]6 [2 g1 B6 o; e. k1 D1 O
}
# _0 r& F& p0 ~/ v' p, [! {0 lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 v% J8 k. ~- {% U7 t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 ~3 V. b: ^7 ~m_wndMenu.SetFocus();7 W0 x9 U, t, L' ^4 B
} g6 @& k, D8 z/ n. y
------------------------------------------------------------------------------------------------------------& F( @ S# D' o1 k1 v* Z1 Q' ]* t0 `
*************************
5 i; B* Q u$ N. O6 ?1 ~1 NWndField.h文件7 O8 q: n m9 s( z/ C& c, [6 L
*************************
' Y9 j* U# y6 p' _0 Y2 Y搜索:BOOL m_bReport;2 l( h, b" R. y- L9 x8 K" N: I1 I& t
其后添加:
& O1 a4 a) O% hCWndMenu m_wndMenu;
6 C3 B8 t Z5 J; Z" `5 q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- [( E1 Y _4 c' e
其后添加:- {5 F6 Q, Q( l3 K$ j! v5 J
virtual void OnRButtonUp(UINT nFlags, CPoint point);
! }& Q3 c9 I1 X0 o/ E4 S2 k7 }, B A I
) {# Z# C( E* K- M! R7 {0 r% H |
|