|
源文件中_Interface文件夹下WndField.cpp文件' D8 [7 T" m; v% e
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): ^# s% \5 I! q! m4 J# K5 [
/ M$ Z5 J% [, P' Q- n" L
struct sItem
! i8 v$ A* t. g8 {{
3 t0 {: E* r. U3 rDWORD dwId;1 D, p# c: }" H
DWORD dwKind2;* _' D0 f8 F$ ?. W; `
DWORD dwItemId;4 H/ X; s1 R9 z+ {( Z6 H
BYTE nIndex;
3 O: G! |5 I+ k, F5 C( x: h+ u2 u5 |sItem(){
1 I3 G+ l5 ~. n' W/ ^ dwId = dwKind2 = dwItemId = nIndex = 0;
% t+ V& P7 n% l5 o6 i}8 O% d; v! q" C% q1 y) h* X
bool operator < (const sItem p2)* V7 |) t# o' p. X, J l8 h+ s
{) D1 }7 y' M/ ?" _3 ~* _
if (dwKind2 == p2.dwKind2)
t/ \# @ X; R. S {
$ `! \! j9 m7 J. |% _ return dwItemId < p2.dwItemId;
5 o5 t1 x* ?$ n+ o5 W }else{2 i6 S) }& _5 h) I" k$ m+ k, N
return dwKind2 < p2.dwKind2;, P% W' |7 A" A& V, c" _2 p
}) y. ?8 s* Z0 F
}
" w( V3 I& y2 n! B4 Q7 x};
: R7 N1 |8 t. m, U5 M. O6 D+ @class CInventorySort6 F P& r+ R; r
{) U6 N: v4 f( }, k" L# E
public:3 d! P H* Y. T+ b
CInventorySort()9 S4 m# y& ~* T* [
{: h" \3 k1 B8 j, J" `0 ? R
m_dwPos = 0;* V" F+ h2 l+ H! |8 W
}
1 o/ h# O$ q3 D4 F2 _~CInventorySort(){}
9 V% |- V' R" ~private:& y z- U: f& X) n9 T8 H4 u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) Z4 {$ s$ ^' P$ h. ?
DWORD m_dwPos;3 ]( W# W- e# e+ d" Q
public:
. C0 X& G( \% L. Fvoid Add(BYTE nIndex)
6 c, G/ L. F! G% S" E{* v/ G0 _9 Q/ o* n, w2 G1 S U
if (m_dwPos >= MAX_INVENTORY)
+ S# j1 w* {; p7 g3 j9 [" J {
; R- Y3 n4 |1 B9 v# h2 _+ ] return;
3 O, |$ g g. ^& F }' M$ j; c3 e+ h. K/ \
m_Item[m_dwPos].nIndex = nIndex;
5 ^; M* B3 T8 k7 K4 u m_Item[m_dwPos].dwId = m_dwPos;* o; \/ [- \8 G5 Q+ P! }
m_dwPos++;
; ]/ T Q/ [6 E3 x; l7 \3 X% ~}7 Z0 o9 h: v9 \" `# O& [1 u
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% `. c' j# n/ l% Y2 z* k7 |{
1 o' U3 O, t) ?, V# L for (int i=0;i<MAX_INVENTORY;i++)
0 U( j3 _0 `% W. \' m { r# `+ v7 ], B3 p! t
if (m_Item.dwId == dwId)
" ~# g4 C* w0 t2 [8 i6 X8 l {& e, E/ R: M7 _; ]
return m_Item.nIndex;9 s7 f0 v* z& O" q; ^7 W& U# a7 ^
}
4 ]: `8 q7 z9 X5 ^3 V5 p }
& y# @( e a+ }. d5 q return 255;9 K) v" ]* o) S! Z1 p
}- ] _3 B$ h4 s. f3 d
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
( {8 k( z/ i" a' r; ~" D0 c{
1 V& a4 [% n3 a' N BYTE nTmp = 0;3 B- I) k3 D/ z2 I" }/ n7 z! K
bool bDest = false,bSrc = false; \" g: J7 e! G# c
for (int i=0;i<MAX_INVENTORY;i++)
1 L4 P* z0 A1 t { y( F1 b# o, P# ]5 B" X2 }7 U7 Q
if (dwSrcId == m_Item.dwId)
- B$ w% j! I8 o {0 { O" Y, V9 { I( M
//id相等 则 改变对应的dest和src
8 ?* s: Y$ \( i2 T/ @4 c% E nTmp = m_Item.nIndex;
3 U. ?/ \& y0 _( V5 T$ Q; S! n m_Item.nIndex = dest;2 `/ e3 r( o( Z1 g3 L1 O6 `5 ~
}- K/ T6 W. F C* k. [9 x
}. {$ D2 \/ T0 R& x I% l7 U
//临时数据保存完毕,交换开始6 w4 Q1 j L& B4 d0 R% q& ^8 X
for (int i=0;i<MAX_INVENTORY;i++)
0 o1 X# Y3 E; U' ~4 K0 u; a {
+ u0 ?' \. F4 D9 x& V/ \# D) u if (dest == m_Item.nIndex)
7 } W2 K0 g8 G8 R7 o {% ]) G/ O& {8 q
//id相等 则 改变对应的dest和src/ e+ L& W# T! j' P: b
m_Item.nIndex = nTmp;
1 k3 q1 @. J8 U4 o& H! T }7 O8 }6 m+ v/ I7 k
}
0 }# s2 I* w7 O4 c" P6 t}
% q' |) T- s( b9 V};
/ c) v$ k7 h8 V9 F( l/ A3 ~8 ?-------------------------------------------------------------------------- `* Y1 g3 X! D9 v
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& y& Z1 P& c4 D6 W+ F
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 {' K) X6 B9 I3 M. X
紧靠其上添加:2 r& x( g4 h& m7 t8 a$ c# a
if( pWndBase == &m_wndMenu )8 t, W. t. z8 c+ I. h% v
{
* {& a% z3 a* ^1 V6 K switch( nID )6 J. y8 ^6 t3 F% x" r: {# c( l
{4 P& ^! C9 S% J$ X; P) j7 \& c
case 2:
& f+ g' Q( a) e" r8 h$ } {
# y# Z- T; o9 e1 C/ @( R //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 N$ Z$ `% _: J) l
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). x ~! l4 m* \. `# I: _
{
( i4 \, c- L) H break;
3 p! ^6 a; f4 e7 m }
& Z# j& m, @! C for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& ^3 ~" ^) W- G1 g5 g8 C
{: P8 j; t: {" I4 T, B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 \! X& b$ C' S3 b# c if( !pItemElem )
1 o, y# e3 N1 @5 W# h2 G2 l% q/ z continue;$ n1 g9 e# [# {) e
if(pItemElem->GetExtra() > 0)4 D' n% I- e% K$ ^/ m5 V
continue;; {3 d5 y) {% E5 v7 {: L+ r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ I% L, e. U/ y# P& w, g } continue;; Z- o5 a9 }' a4 \6 w
if( g_pPlayer->IsUsing( pItemElem ) )
- B: O L7 D+ a$ s continue;
3 V# p6 _" H' Y1 q1 }- E A* D if( pItemElem->IsUndestructable() == TRUE )$ b0 n, T: q! d& Q( Z: {
{, }. N% S7 f! s
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 `) n B1 u/ u! Q continue;
3 K9 R3 P3 V2 _# G: A/ _ }
; m. I! k( w$ X" |% a4 I' w g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ L" S/ |' X! F2 d8 P b
}. e4 e$ O, T1 q
break;
6 g3 i3 K6 G% \9 i }
" Z5 s0 p6 X' z case 1:# B" ?8 v3 @& F/ F7 r
{. y% `1 Q! {: r* ?- t2 P
//整理背包0 k: n! e3 J. l
//////////////////////////////////////////////////////////////////////////6 m" }8 A2 j$ w2 G1 x* c
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- S, r; d+ U8 N2 p7 T7 U: X //////////////////////////////////////////////////////////////////////////* z5 l7 c. h, Q: |
//////////////////////////////////////////////////////////////////////////1 k$ F: `! Z1 ]# t5 ]; f9 k
CInventorySort* pInvSort = new CInventorySort;
/ M- c) ~- p6 j) { vector <sItem> vItem;% j* s: `: B* F2 J
vItem.resize(MAX_INVENTORY);//初始化大小
: T0 S; `- n4 x1 u8 E' N4 L //////////////////////////////////////////////////////////////////////////' O6 f& v2 ^3 n$ i+ p
//填充数据) f" c% w2 B) x
for (int i=0;i<MAX_INVENTORY;i++)2 v8 a% E6 y- o- k
{
/ `+ S5 _& b/ u4 K5 h* I( H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 C: w9 h0 z3 c if (!pItemElem)
7 n5 n1 X8 U( e8 i7 d1 \( @ {
- z- c: B/ F: {& C: e vItem.dwKind2 = 0xffffffff;
) K! H B' z$ t! ~9 |. p9 ^' ^4 |$ ? vItem.dwItemId = 0xffffffff;. i8 r: U6 i2 a0 C
vItem.nIndex = i;% U' H' W8 B4 q6 x
}else {* _. j7 l: ?! |7 A$ D: g, [
ItemProp* pProp = pItemElem->GetProp();
# ?- E$ w; R+ U6 U/ e2 `# y% D vItem.dwKind2 = pProp->dwItemKind2;
. ] N1 T4 w, q+ [& C- p* |4 i* d6 g- G vItem.dwItemId = pItemElem->m_dwItemId;
5 j$ Q& N, N6 `& \7 B vItem.nIndex = i;
6 x0 X" w3 v3 I% ]6 l }
4 h& ^7 k$ D9 s //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# S+ c9 ~/ ]3 j. k }) N6 I% z6 s1 d9 j0 v4 `* _
//////////////////////////////////////////////////////////////////////////
8 A' z, j$ F" p; p! ? sort(vItem.begin(),vItem.end());//排序
' s5 ^; E: S4 F: c //////////////////////////////////////////////////////////////////////////
& B2 \# M' @& T8 a //交换) @+ [) l% k: k9 H- Y3 U+ }
for (size_t i=0;i<vItem.size();i++)( o/ I0 q: p( `0 s- n4 |
{
) ^+ y! L* ^$ ] d //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 M% W$ ^7 n8 A( F h* W8 j( f
pInvSort->Add(vItem.nIndex);" }. N6 I9 W1 B) e1 p7 e
}
) l) Q" N' s% F9 v BYTE nDestPos = 0;/ x7 S+ K% |% v# ?
for (int i=0;i<MAX_INVENTORY;i++)" [" y! R; _2 q! o3 L0 s" Z( x
{
2 H2 _, m1 |' ~) `9 Q8 M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 P" c0 a* f' {: x! M, y3 T9 h
if (pItemElem)2 a! _! d3 G( r# t# w9 S1 _
{
! G# ~4 z- {5 @9 I. o if (IsUsingItem(pItemElem)), N4 B# A s- a4 u5 `
{ I& J9 e2 Y4 O z- Y
//这个位置无法放
( N9 N2 a" t- U( z/ e nDestPos++;7 x1 e& L% C. q5 u
}7 Y# _% @7 j8 N2 \$ e
}) f( R) x& h2 E1 L: `! F, u
BYTE nSrc = pInvSort->GetItemSrc(i);' o1 j! n6 j4 {6 z$ t* Y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' y; r7 C- c# K" S, q1 R+ {* g8 | W
if (pItemElem)
4 R3 \: o* y4 A9 O$ H7 E T1 r {
0 x& B- |$ j. j8 s- N" M6 m if (IsUsingItem(pItemElem))& A3 e% D: l+ X% m# v
{
6 I) | N$ [6 p. ?+ q X; T //这个道具无法移动,跳过
: e' @& r6 m: h7 C f7 Z continue;& t8 d" \/ K& h. K0 S
} F' a! i; W" [ r
}else{
5 F0 r& e+ B5 b8 z //空位置 不用动
+ e" m" V. G( @ n) `9 [ continue;
/ r% f) `, ]. V& d+ Y; e& d }: H' R+ }/ k" T: H# ?
//////////////////////////////////////////////////////////////////////////
/ V: Z8 j5 }# y8 P0 x1 x: r! {) [ //开始移动
$ B. Y6 T( p- u" o2 M2 M if (nSrc == nDestPos)$ F5 |% f1 j0 {+ E! u9 q
{ ]0 W1 o, {& S
//原地不动
% H5 `0 M9 F1 i' k nDestPos++;* Y# p& q3 l: k# O: V) |
continue;
" X3 h" T. I* q! j; }; k; {8 d& i }1 o: E9 i& Y& ~5 i8 H% P; P
pInvSort->MoveItem(i,nDestPos);$ S0 h/ y" V) u! N0 s) f; C
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 F1 \3 \, [* o3 X8 l* h+ Y Sleep(5);2 p) A8 V1 S- y& r5 S$ ^5 X% c! c
//Error("移动 - %d->%d",nSrc,nDestPos);( q5 [0 V) |0 F8 l0 l* a
nDestPos++;
! H; t* w4 Y6 }4 |# M; O* g8 ^ }
' @5 V7 ~+ q/ I7 e' Y; p; N //取第一个元素的信息
/ s* K7 E0 K0 [ Y* L2 }6 ? /*
- ]$ z& o9 F7 W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, V, D# T: N. j8 ] v5 E {! H: G, ]6 p+ W6 X! i+ r9 l9 j& o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 H: ~' Q6 k6 C9 X; b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, [; [# z0 b- W, m' _, E, v }
- |$ @/ m: T" E' L- I3 ]( G1 G */! D1 x0 X/ i4 b' j* `, }
//////////////////////////////////////////////////////////////////////////
6 G3 w0 R; L1 G! {% X9 q! \6 T break;
* u9 C5 r% d: j/ `, c }. d% m2 i# L& c" j
} , j8 }# m& s& F% U
}
$ C% P! _/ Q) Z9 S" M( Cm_wndMenu.SetVisible(FALSE);
8 n8 L; ?# P- S u, S' D9 N
, B6 G* Z. D! }--------------------------------------------------------------------------------------------------------; U* h, X% o8 z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): u0 V; O$ S3 N
{
' d' B3 k9 w! @( K# j2 CBaseMouseCursor();
( ~. p, `) G* L: X}: k# A3 u, O- B: o
在其下添加:9 D! [3 m- E! d z2 X
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* H; P4 p7 g8 r; K6 M0 P/ M{$ w1 l, J1 n7 @: J* D; G0 j9 `
m_wndMenu.DeleteAllMenu();
! m! Q" K8 `1 z5 Y& A) I3 |m_wndMenu.CreateMenu(this);
; V4 l j+ s8 ~2 b5 l0 wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 w9 `6 ^% h( o" t5 l
0 i1 d1 V: P/ f* ?7 g/ cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( Y; v) F# o# ]+ [
{
3 C& ~: ]" {# `) z( _$ V //P以上级别才可以删除所有道具
* _$ }1 g0 P/ O. e8 w2 F! ~ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; g4 M) R: h' @ ]/ @
}$ B1 a- J8 e; i5 v( |" d6 m0 m& a
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ |) J4 [% I6 m) P" {/ Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! `/ j$ K% |) N+ E: Wm_wndMenu.SetFocus();; A( C6 D. N7 w1 m
}9 a5 S9 e( C5 h) Z8 q8 n
------------------------------------------------------------------------------------------------------------; s3 Y) R; C! \0 N3 t& |" e& d
*************************
( s0 \. i6 I# M$ b a9 @( _WndField.h文件
6 m* H' r3 s% B0 v% P2 _+ c }/ k% ?*************************( ?) f. k) n& Q: O1 \: p P
搜索:BOOL m_bReport;8 N8 v4 B! O7 H$ C4 [( I3 e
其后添加:5 z1 w- `; q3 {
CWndMenu m_wndMenu;5 `* v2 B5 O1 [4 c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% @; |+ u0 c) q3 m8 d4 a1 g其后添加:" Q% Q% D9 ^1 V
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ b' c# _9 j1 G; F$ I' e f# b0 z
0 I: |% n" H' W+ \; O% k) A$ `# ]/ q$ i! p; W! i! z
|
|