|
|
源文件中_Interface文件夹下WndField.cpp文件' w- X @ ?& _% B/ v
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% o( F! c. z2 G$ s- X) G/ w! f1 Q
# Z; N: j; a( m( _
struct sItem2 l& r9 _' L3 g, c
{
) q, A' }" i8 SDWORD dwId;: f+ a2 m0 G7 H: r8 \+ t
DWORD dwKind2;
\# I9 U+ @1 |/ M6 W8 }! nDWORD dwItemId;
( Z" X- x; }# ]( z9 \/ _BYTE nIndex;
* W# [( | Y, {2 H4 q/ VsItem(){
; h6 F; O. ^. w- x dwId = dwKind2 = dwItemId = nIndex = 0;' ?; ^- f/ e' z9 z& X
}( h4 I+ L2 e# M2 W3 t. _7 k
bool operator < (const sItem p2)' B4 d) _( \' i \' N9 c/ t
{
$ [& ^7 q& g1 _3 j- S9 j if (dwKind2 == p2.dwKind2)+ f! Z* J1 c7 @; K
{
1 P4 W$ P4 Z2 _( A! c return dwItemId < p2.dwItemId;
# K+ W5 }' |4 E3 l0 c }else{3 w c3 j" a; a5 P' J
return dwKind2 < p2.dwKind2;
6 s) k: [, [) u$ z2 y9 J+ ^ }
# m0 }, \9 ]/ F, K2 y3 h5 J}
- @% @2 \0 O# C, b2 S% N};2 H7 {4 W; B: {
class CInventorySort
: w1 D1 j/ I! R8 w{, [' i" k3 w) \% [
public:
; _, E. c L0 @CInventorySort()
; z, C: O3 X' g$ s1 z0 w4 `- f{
0 A! |2 {8 P0 I. h. s+ Z+ m, `- Z m_dwPos = 0;- D v# ~# D4 r7 ]. r- Z
}' r9 T; e+ Q; {, ~8 h7 p1 M0 y A e# l1 z
~CInventorySort(){}
& C, b" F- |# y8 F. jprivate:
3 I/ E; k3 M. i0 nsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( ]1 v! Q" X0 jDWORD m_dwPos;
& K9 w9 _0 P3 P5 o: N+ s" tpublic:
* q2 h6 Y: A' C. h6 bvoid Add(BYTE nIndex)
6 j# F2 ]2 q& e) Z$ |{
- f: T& G0 U+ T if (m_dwPos >= MAX_INVENTORY)! U ~% a) C/ e1 x
{
, e0 q. J, ]: Q$ `2 J return;- p7 V9 x% S5 N& m$ y
}) ^, B# x; A9 U- f
m_Item[m_dwPos].nIndex = nIndex;( S. w& |+ J0 z& B6 w
m_Item[m_dwPos].dwId = m_dwPos;
( S; N- o, r" s) } m_dwPos++;
! o! L+ N7 [8 \+ w4 T}8 v& @, r$ h0 G. m4 _0 {( L w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" M7 q% B+ I3 G; ^* ]9 H$ x, q6 ?
{
8 D1 O+ ?8 ^' m$ r. E5 K+ N for (int i=0;i<MAX_INVENTORY;i++)
5 ~0 w* c; o" C V, v1 j {
7 Q& V! P+ e0 e" j3 Z- n if (m_Item.dwId == dwId)
4 U3 Z3 h' Y! a- I1 ] {
! c7 @% T$ |! c3 d return m_Item.nIndex;
. g+ ?; j4 A9 ^ }/ v3 e$ S' v9 o* k% Q
}
: P P+ D& m6 A- P! a return 255;
* y% G0 l3 G$ G$ O1 O/ U, w5 [4 G}
4 t; @3 X6 g, H7 u T. h3 gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 D* ` R# C9 s& D* n$ m
{6 i8 v6 P! Q! q! ^3 @
BYTE nTmp = 0;
7 r0 u1 ?; p8 t! Q# ` bool bDest = false,bSrc = false;3 A4 l( R" W) e" [
for (int i=0;i<MAX_INVENTORY;i++)
7 a, t9 U" @0 w) c {" L6 H5 y1 E+ o" _% C H
if (dwSrcId == m_Item.dwId): Z" w* k) [* m. g: @
{
$ B# Q/ |( A9 V1 ^ //id相等 则 改变对应的dest和src
, m5 C# o! }& K6 u/ c# ?0 S nTmp = m_Item.nIndex;
. U# {( B6 Q3 `! P m_Item.nIndex = dest;
) z1 g- \0 w8 a }8 f$ V1 G4 v6 Z8 O1 i& w9 m
}/ G+ g- Q+ q' B3 @ Y* B" t* L
//临时数据保存完毕,交换开始
( I8 _% j2 _; L' M5 Z for (int i=0;i<MAX_INVENTORY;i++)2 {5 V3 J% z7 [6 H# ^3 [& o
{
4 y3 I. J' _1 m# R& |* d if (dest == m_Item.nIndex)1 A. J, b: o* W
{% Q# I: [2 Y# X$ [ K- Q
//id相等 则 改变对应的dest和src
% o* _0 k, I1 Q7 r, |. r. _ m_Item.nIndex = nTmp;
$ g% K8 S, h) R8 A" C4 Q }8 w! t, ]! M2 a6 l$ g
}
4 M2 |) i$ i. b$ ^}8 t9 }2 j# j3 j. P: f) `: N
};5 o( t# Q. a _7 K; h/ s$ j) Y
-------------------------------------------------------------------------" t( W8 \$ L) H! S6 [' C% ~! {; E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 z3 j/ i$ g+ j+ g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* {4 E, Y* N! Q% u紧靠其上添加:
$ ?2 l9 E5 O' tif( pWndBase == &m_wndMenu )
# t% O2 j* F! n+ K7 @3 K{
4 T$ i7 P6 V2 Q1 R switch( nID )
I- S3 b& G2 P6 q {. s2 l% m2 p5 }" E
case 2:
9 N6 L5 k. h$ E& Q% x' P) Y {
. w$ x; S# b3 C" Z9 p //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ H+ g& @3 e: U3 j
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ h3 R2 h& x0 z
{
3 Z1 w$ I3 V8 u7 A- r, V4 b break;# r4 d# O3 B1 R& _; M
}
' E) O8 A" o/ _8 I, U( { for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ m3 C" F' ^6 l* `0 ^ a {- L' R2 _$ n0 M/ n/ _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. s+ [1 w' e% _8 X& ?) J if( !pItemElem )7 y, J9 S/ l5 Z5 n: e# L+ e" e3 C
continue;: e. [# K8 I' W: r: I/ n- Z
if(pItemElem->GetExtra() > 0)0 W$ G3 n$ r, D$ H; v4 m
continue;* X" ~, K% G$ J$ L/ t
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 q: ^" ^( H5 L$ ~; f X
continue;3 d+ W* F. @: F$ f
if( g_pPlayer->IsUsing( pItemElem ) )5 D9 Q3 B# W. [' S% Z
continue;& x. }5 Z" Z* V( f
if( pItemElem->IsUndestructable() == TRUE )" U" V2 P' k n _3 P- ?* A
{2 @1 @+ z$ ~# [& C \& W h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* g8 d6 S) A2 b: R5 F continue;5 H. h) W) L! T3 \ }
}
% T, N7 z/ H( y# X" q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) l; _/ Y! N) W9 v }
- i- P! c2 F/ M/ V, q0 Z) V9 } break;
2 U& H$ ~8 M# M' h- _8 y0 { }
% F, _& i' i; J2 G case 1:1 g1 b7 {; j9 ]! \
{; X& K3 n' ]( U
//整理背包
, n& O/ [4 [3 i1 v7 c //////////////////////////////////////////////////////////////////////////* d W% `4 H1 s, `; N
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 m/ s( S) D8 O$ t) R2 q //////////////////////////////////////////////////////////////////////////. X$ G% @& I1 z' [ |" {& ^
//////////////////////////////////////////////////////////////////////////
! X/ Y+ E; b+ }/ |5 ^8 Z CInventorySort* pInvSort = new CInventorySort;% I6 C% U }' p/ p) ~
vector <sItem> vItem;8 t$ W# U/ y# b' {: ]
vItem.resize(MAX_INVENTORY);//初始化大小# d( `3 s, _- |3 i9 K2 F
//////////////////////////////////////////////////////////////////////////
: g4 J. ^/ R( h9 z# O7 |8 i //填充数据' S* D1 s$ [) x! P
for (int i=0;i<MAX_INVENTORY;i++)
% k7 D, D, R4 b5 t4 j, J {& \: O6 }8 y6 Y' _) Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; C8 v5 ?: t" h; i+ a if (!pItemElem)$ n9 i- i: L( \/ c- t& M( Q: I
{5 E7 W3 c- c3 h9 X* w" n
vItem.dwKind2 = 0xffffffff;" h1 }6 }: e x- H _4 M
vItem.dwItemId = 0xffffffff;
# b8 g. L. @ D$ H: |- ~ vItem.nIndex = i;* W" L* m8 a+ w
}else {
0 [) U& M" n4 l6 {* C4 j* Y' F" ` ItemProp* pProp = pItemElem->GetProp();
8 s# f! g& D( g2 h! \& k3 W' q1 R vItem.dwKind2 = pProp->dwItemKind2;- _ v+ \3 A$ e$ G, C4 M
vItem.dwItemId = pItemElem->m_dwItemId;8 _: J' h/ O- g& T: Z; B. c% w
vItem.nIndex = i;' s# r p; O! N$ a) n
}
2 ^6 \: `& _. K( D4 x, D3 D //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 A8 G3 h& [/ ]2 S& R: b: k }
$ k* ]6 L& H: [ //////////////////////////////////////////////////////////////////////////' A X6 n6 ^2 C8 f- A8 F" B5 w4 d
sort(vItem.begin(),vItem.end());//排序
5 v$ e# a( Y6 C# O% ^2 | //////////////////////////////////////////////////////////////////////////4 i: C8 u: N$ e6 i" X3 w4 G
//交换
1 K4 g B+ n- ], l: j/ h for (size_t i=0;i<vItem.size();i++)
" t: K+ q( [: A, y* @( Z, m' S {
3 M: m$ Z' P% ^8 W //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ {/ U0 ^, F/ v& k$ d
pInvSort->Add(vItem.nIndex);
3 O" a7 ~, L' | }
* \6 |3 W2 V! h, v3 E, h6 P3 Y BYTE nDestPos = 0;
! I' i" R3 L' m# D for (int i=0;i<MAX_INVENTORY;i++)
8 c8 b# A9 h1 Z& e0 X0 k) Q+ F { e* u% f( H1 D2 K6 g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ ^/ k$ E3 i9 j$ ]0 U
if (pItemElem)
* P; d8 @" B( O% W4 Q5 d {; W1 _3 @ N" h% [4 e8 k' E
if (IsUsingItem(pItemElem))
& O W! J! g1 e' U1 K* j {
u) ]2 Y% G# M, {2 F //这个位置无法放! y; T, t4 H9 _* k9 r3 m& u
nDestPos++;2 |: Y* C0 S/ N; y3 X |
}( i& a* X# z L- g0 b: f. r& A
}
; s. K5 } z1 R9 T BYTE nSrc = pInvSort->GetItemSrc(i);( u' A& m$ _' l" Y! z/ [% a
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* S5 o5 \- \# J if (pItemElem)6 z6 `& M0 S" G1 [) c
{% }' w0 G0 [/ s
if (IsUsingItem(pItemElem))
0 [0 Q$ i* C" N- m/ S m9 c- m {
% T0 c1 W4 p7 w( { //这个道具无法移动,跳过
]. V* a" T) W, `! @& j) @+ E continue;
$ E3 T! ?* F; I! I }" F, p7 x6 o8 u% d
}else{" P x1 N; t4 Q
//空位置 不用动) T3 S7 w9 ^+ V4 A4 n2 `
continue;1 y X( ^' I( Z e- W+ l
}
) @: g/ M6 K# K //////////////////////////////////////////////////////////////////////////
" r2 @( a: M1 c& l //开始移动4 {* p( V+ K8 z1 j& ?
if (nSrc == nDestPos)" `: d/ a$ X) X4 R8 ~3 a# ]
{9 y* ? j' T* N3 i$ L! M7 v+ h g
//原地不动" b# P! i7 _/ s: P: {4 k, @
nDestPos++;
- D& {4 p0 N8 Z( d continue;
2 J0 j7 Q0 k0 m5 u& G }
- X/ X% S6 C+ \3 s pInvSort->MoveItem(i,nDestPos);7 ]+ _5 C7 e i( R' ]2 [1 v
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. O( ?$ f; [# U
Sleep(5);
" Q0 {, u3 ? N# a3 l- B$ D //Error("移动 - %d->%d",nSrc,nDestPos);
# S: v1 _+ Q9 B3 W nDestPos++;% ]+ n; [0 w' |, ?
}
( M( |' |# t2 Z' M/ n //取第一个元素的信息
1 ~) E2 u" g8 v% r& o /*
; n. Q D9 {0 Z+ V: k# C" H( B! P if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
`. |0 C# K( L {
. [+ ]9 Z7 W* c- ^2 R1 l Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ r/ S6 C4 d" p1 r" {3 C: c: p g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' k8 A: j N8 B4 k
}
) V* D0 _ k( E3 m3 e5 j) N */9 g4 y, U0 }( B2 i
//////////////////////////////////////////////////////////////////////////5 g( e4 N* S# ^7 @7 |5 r! l
break;; e, e6 q) `: a8 H' I
}( f6 ]; P M" z' \7 E
} 4 T8 i- P3 {" J8 b
}
( P0 ~* S' L9 J: K4 a4 |m_wndMenu.SetVisible(FALSE);
: Q& p0 P- h6 I1 V' y% O9 j& P4 X1 _
--------------------------------------------------------------------------------------------------------2 |0 Q; D. h) X7 ]; ?+ [. l5 ^* M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- _; Y6 y. U* K r6 T7 f4 Y
{
9 n# n- T$ [, o, V, G5 z( EBaseMouseCursor();8 P; z/ W, m& O" z
}
- T, @! ?) S' A2 R E* v1 i在其下添加:
3 Q% \& J( c8 l$ Tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# g2 Q; W* O! j$ ~" U0 e* I9 F& `
{
; P# H% L' N7 e2 q2 v) Y4 T2 tm_wndMenu.DeleteAllMenu();
" _& i ^6 R2 Z1 {; Q9 C, O2 Q; |m_wndMenu.CreateMenu(this);- S0 p4 p( b" f/ v- Q4 L
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' O4 Y. [3 F8 n- A! {* S
}7 B* Q. w" a( I# W3 |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 O9 N, Q0 ?- h! G9 h) ], P7 L, T, s
{, y% |/ v- g: d7 z- v# Y8 M
//P以上级别才可以删除所有道具6 U1 |6 s/ g; o+ f& r, _
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ y# r' E% g$ y3 T: S$ ~) H2 R
}4 J6 F! E9 m$ p' @& }& F2 L6 F
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) v* W4 G- v1 b( P. h4 D* m
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 u2 E6 ^7 b, A! o
m_wndMenu.SetFocus();
& {2 F7 u9 g r& t- Z$ I) y}2 T8 q8 \8 B2 A
------------------------------------------------------------------------------------------------------------
& |7 y4 Y/ g, M# D*************************4 C* ^7 X3 q P! m7 x7 T
WndField.h文件
' |- X! V& ]5 c6 j0 g*************************2 B3 x9 z. f' c/ U4 M
搜索:BOOL m_bReport;- S. b! F/ `: A) r4 H" ]
其后添加:9 f" A, a2 x0 q1 b% \9 ]
CWndMenu m_wndMenu;: Y2 l+ ~& C$ c+ e: n7 }) T" k0 ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 g! v; j' M9 R5 l8 ~- }0 T8 Z
其后添加:
3 d9 x; t3 g6 Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);% n' I4 j. m' d$ D# c) s- \
, n& _6 q# r5 e; z9 }* m7 g- y( F. M# M! \* E2 w* _1 B5 V3 z
|
|