|
|
源文件中_Interface文件夹下WndField.cpp文件6 T/ o4 W" o4 R# \7 J0 o
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) x8 E' i: l# k, l
; w; l9 V% X8 }" T9 Mstruct sItem- m: a* i) A$ i0 m8 B. e
{5 z' g B5 \: T/ _6 t3 Q, h3 R* d
DWORD dwId;
, n$ r4 c8 [# c6 ~5 Z/ H+ oDWORD dwKind2;
5 s" E% a, u! D/ z; }) ^DWORD dwItemId;
; W" o9 x3 d% J# F! mBYTE nIndex;9 b3 d0 s4 w& ~8 d# D5 \
sItem(){3 M( Q& i- c/ v. T6 ?
dwId = dwKind2 = dwItemId = nIndex = 0;5 r. b `2 E, C+ T
}5 \& Q% B8 z& E, D& G& w# d
bool operator < (const sItem p2)! n4 R6 P8 @ l$ @! @( T0 W
{
& Y! c; @) F0 L* i0 X) I if (dwKind2 == p2.dwKind2)
& ?" ]1 F4 M9 ` {! W- T" E" k8 F$ {' X' B
return dwItemId < p2.dwItemId; X6 n, I6 j( o+ y; r, ~
}else{1 m1 Z+ a+ x6 V4 X
return dwKind2 < p2.dwKind2;# q/ |" ~4 h& \) L4 u
}8 _: |$ S: f/ H" R, z( `
}
/ p3 O" l( j9 T0 Y9 E8 \- b& Y3 _};! r# N/ ]2 q9 e" y/ \
class CInventorySort
+ f" |. J0 p/ f$ n{
- k2 j5 ~" Q9 j" I! {/ S+ n6 T9 gpublic:' y( f% u) Z P- `1 q) Y2 C3 q2 M
CInventorySort()* m+ P0 |0 i) M5 k! }) m) u9 I% l5 f
{
- j0 R7 P$ E, [- n. q m_dwPos = 0;
& J9 R/ g, ]/ V5 ]1 d0 R}
$ H0 n- D1 k) q; ?( C* x~CInventorySort(){}; s. \3 m- r3 R. p: q& A
private:
, A# G3 u) e7 l$ w6 X SsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. c7 A- _9 f& W& K9 ]% C
DWORD m_dwPos; v0 S4 Y6 U2 Z4 m
public:
; [- r7 t' S; L6 z; y, u6 y) J7 Kvoid Add(BYTE nIndex)
* ]! w, Y/ G# m0 P9 j+ J{
$ l7 K0 z( ^5 c2 [7 P if (m_dwPos >= MAX_INVENTORY)
4 o# y7 T8 i5 L' y {% ?% p, I. W$ o! t) |5 B$ x. a7 ?" z# R
return;# S& g: T4 `- q; W7 Z) m( o; k$ }
}
* Z- b' W4 U# t4 E m_Item[m_dwPos].nIndex = nIndex;- t( v% _: y P; s5 O4 l$ r4 _
m_Item[m_dwPos].dwId = m_dwPos;
4 {2 c2 w. H8 s: l$ l U- c m_dwPos++;6 ]. [. f! {; L5 ~# \& D7 O
}
/ E3 ?. M, e3 U1 xBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& e$ M( q# P, c* H8 B" ?$ A{' C3 P/ u* E6 q6 D2 w2 U4 t4 Q7 q
for (int i=0;i<MAX_INVENTORY;i++)& n1 M# h) w$ R0 f
{
' @% u& U9 q7 b% Q: \6 b if (m_Item.dwId == dwId)9 [- d5 J8 _6 X2 d& K* z' V# P/ `! L
{
; I+ U/ q* [6 C/ i& w8 |8 Z- j% t1 } return m_Item.nIndex;4 }7 u9 I- {; _! g J2 \% X+ W2 u
}
+ X, F5 {- D) } D/ j x }
3 D- e0 Q( Q- n. P" x( O3 | return 255;3 q8 I( V( T1 {5 l# @
}
; ~5 [! y. Z! N- _4 Uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 f" g5 o/ a1 M. P# U+ N
{* j* w9 J8 G: ?/ d2 D% O/ H
BYTE nTmp = 0;8 ^6 l4 I% `& P$ U: n z% d
bool bDest = false,bSrc = false;$ ^4 m: i9 n" d% f3 o+ o" X
for (int i=0;i<MAX_INVENTORY;i++)* q& G+ i+ y/ H3 A( l
{
% k7 `- X* R$ q" t' k2 _8 d if (dwSrcId == m_Item.dwId)- z* f; {, e3 R, ~! L3 q0 B
{
3 y5 E% i( X. K5 ]$ h4 p& p //id相等 则 改变对应的dest和src b: x6 t' i8 d$ B" g
nTmp = m_Item.nIndex;0 L$ c% t6 D, g. n
m_Item.nIndex = dest;
' d: s, k; |. n2 Q3 {! g- e }) m7 D8 u/ q2 W$ n$ @
}
8 f/ ~. V0 [$ g ^9 s5 D //临时数据保存完毕,交换开始% D- R5 B \/ f$ n* y/ U5 \1 I
for (int i=0;i<MAX_INVENTORY;i++)
% U! e, U6 Z1 |" v5 T {- D: r1 V- T7 _2 [7 _; D! `: c- b
if (dest == m_Item.nIndex)
2 g0 ^! G9 a q) i- T {" q4 |4 _+ c) i" |5 r& E
//id相等 则 改变对应的dest和src
4 K2 X8 b* X) b# F m_Item.nIndex = nTmp;; G4 b; \+ w: K, X, i
}0 X" O5 E6 B. d$ i# h5 E* v7 t
} f% ?6 T, C# J1 W0 ?0 j9 T
}4 U n8 `* `1 ~% f( @ N9 v
};% x* v" e7 u! B
-------------------------------------------------------------------------
) X& t; r- @9 U7 V% A H3 K9 [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
T3 M# N4 r; {6 k搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 l9 Z: p1 G: W6 s' c" T7 Z! P+ b紧靠其上添加:; n" F* e8 X0 m5 W4 `+ o
if( pWndBase == &m_wndMenu )
0 J# ]' @& S" J" k2 z3 d6 }* K9 l{# z7 T6 O- p+ ?
switch( nID )! q+ j: Z& f' `! r" @. A3 o' W
{4 _6 P. w2 I7 G0 N2 I6 N5 V0 H
case 2:
4 p$ ^, x" Y% |$ S. q* l/ _1 T {, b5 C5 }0 h. S0 y/ _1 i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL); s' f' F# }* I: r
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 `. i1 `1 m. ^, h, S/ ]( \# S {/ |8 Q2 t2 }6 s1 `# o' [
break;% }2 r# Z0 Y" G. y4 p9 a+ T
}
; _! V, B! g7 p! d, {3 W& e5 l for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( c% x. s1 Q+ c) t8 ?5 I) Z5 F {
; M* `" O# h+ V7 \" s3 ?! b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ D& h7 ~* b. n8 J9 w. Q4 |) r' U if( !pItemElem )4 Z5 W8 F- r, ?- [ W# Q7 y2 {3 Y
continue;! \: K, A% a. i! F" k. h U P1 ~# q
if(pItemElem->GetExtra() > 0)
O* }8 m, i% y# e2 \; t continue;
6 |% `, @' l/ W if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( B& m6 P7 n3 T j6 c, f
continue;
j$ ^. O# V+ S. |0 k if( g_pPlayer->IsUsing( pItemElem ) )
; S3 }3 a6 u3 @) U7 r% I- r continue;& x( T: e; |1 j6 ?+ n; K; ~7 u' C
if( pItemElem->IsUndestructable() == TRUE )
! X- _4 q. G' ~7 ]/ e {5 Z* x9 k" O0 Q& U1 g; u$ ?9 ^; \
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* U0 f1 R& x3 A: ?8 l continue;7 k) O1 l# V: R/ s
}
' n% F5 g2 n$ z# M- P g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
{" d/ e- S) K J& _ }
$ Q* W1 I3 g: K* d: m3 w( h6 o5 f break;
M& _6 n b3 a, `7 F5 m. D }
) U9 h- T+ Q: r$ L# l9 B case 1:
% X$ X8 H9 E2 k- V {
- X$ ?$ q1 I* w2 n! _' L //整理背包
0 h4 y! t! j$ G; i# J) c% Y //////////////////////////////////////////////////////////////////////////
2 A0 w& ~$ a2 ^5 p //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- ], Q5 e9 p3 v
//////////////////////////////////////////////////////////////////////////
: C1 y0 p: {! q h. q' ~8 m5 w /////////////////////////////////////////////////////////////////////////// \0 [4 }8 G* _$ B6 V4 c4 R* ?
CInventorySort* pInvSort = new CInventorySort;
4 L6 c0 D5 Q% R$ L+ V8 ?& x+ l vector <sItem> vItem;
3 W- K8 ?2 t& S j; l vItem.resize(MAX_INVENTORY);//初始化大小, G- W; i/ ?4 |' p
//////////////////////////////////////////////////////////////////////////+ A) f. f, Y2 Z' c
//填充数据- j6 m8 @- ~- \( O
for (int i=0;i<MAX_INVENTORY;i++)) @' T# n9 E; t3 T7 R
{, Y7 I4 l o8 q" W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 U' X; h: M- C/ o/ y
if (!pItemElem)8 p2 W! B3 y+ \" R% j7 S
{
8 ]' V# l3 l- I vItem.dwKind2 = 0xffffffff;
+ C! {) u |: B6 }" D) o: B vItem.dwItemId = 0xffffffff;
/ i9 ` K" o. y2 \& _, w vItem.nIndex = i;8 C' h6 `' [1 \$ W0 E0 N j
}else {
" Q' t- b0 U( Z) U' v o ItemProp* pProp = pItemElem->GetProp();
; U, ]5 m: N, u, |$ n' F# z/ Q! L vItem.dwKind2 = pProp->dwItemKind2;
, O- z* w9 M- B1 p3 T9 y vItem.dwItemId = pItemElem->m_dwItemId;
" A$ {% E4 Q5 R1 _ vItem.nIndex = i;
% b7 C5 i, d# @5 R5 _! {: ]5 C- y8 V }. ~2 e; E. m* u; }
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 W" h& U0 `( s
}
7 E9 h0 `0 \5 d; ? T' E) J //////////////////////////////////////////////////////////////////////////4 s. h) d' @. ~( ~
sort(vItem.begin(),vItem.end());//排序1 E3 |- j o$ \4 z, J
//////////////////////////////////////////////////////////////////////////
* l- u% r$ b0 e# i1 O* Q8 E //交换
8 x/ {4 e4 P H% ]* y1 p& I8 N+ P for (size_t i=0;i<vItem.size();i++)! F" A6 c, J) k9 {5 ]
{) U' l1 u) m N: F' Y" x
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, t, S l5 m) G+ a$ D
pInvSort->Add(vItem.nIndex);& q/ S: X4 m: _3 Q4 d7 q5 v: G7 g- x
}7 q2 N2 O. g7 u" y6 c/ Y3 d
BYTE nDestPos = 0;& G' j4 b0 ?) w
for (int i=0;i<MAX_INVENTORY;i++)& n6 z. e3 _! S U3 X& e
{
8 n1 c7 L$ Z6 t' M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ g. _% m' z6 t* t( Z if (pItemElem)& @' Z- X- G; l) _$ |# s
{
: t/ ^6 n& s- [1 ~0 A if (IsUsingItem(pItemElem))) U8 Y$ j, }; O, f
{
: ~. Z' } i5 y# S) k Q5 g* B //这个位置无法放3 k* V3 c: s+ S# ]
nDestPos++;4 n7 C' `# q5 ^
}
# ?: Z8 q0 Q, T1 [; @" o }4 p: [5 ^$ ?3 I/ G+ W; o' K+ [0 e
BYTE nSrc = pInvSort->GetItemSrc(i);
1 u" r% G7 A- \! e H5 O O pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 ~1 Z$ w4 t h5 V! ^* m9 e: L3 R) u7 g if (pItemElem)+ V4 j i2 ], G
{2 v5 [' D" D, y1 ?! O+ q
if (IsUsingItem(pItemElem))- A# z* j- I& g k6 n3 n
{/ i R/ L4 |2 c9 \ a
//这个道具无法移动,跳过) C1 t: t: c& w( i4 d
continue;
^1 B# y: J) J4 p0 R+ d }( X \. J x( \$ l# A1 v% b, e' o5 ~
}else{
0 |, ?& Z9 {8 r* h) R; ?/ r //空位置 不用动
3 p3 W5 O, o% V9 p$ t* A5 |0 C4 S9 T continue;: E5 U& J8 q% n7 X- P
}% ~- @$ X# M5 W+ F) y$ C; o4 @
//////////////////////////////////////////////////////////////////////////
% \8 t* B8 s K+ U3 ~' q, G. E //开始移动
' B. r, j, t& I4 ]8 } if (nSrc == nDestPos) i( n: d/ ?% B2 J' T
{
; `0 I4 ~% E8 ] q. R //原地不动
( o% j7 Z4 L5 z" K6 i nDestPos++;' v g! @. ?' [4 t; u
continue;4 b" {2 F, p* e4 p K- E5 X; M
}
3 Y8 P7 v( c/ B+ ~ pInvSort->MoveItem(i,nDestPos);5 `8 P! e6 D& O7 ?2 G# i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 H4 j J% v D# i) z2 n Sleep(5);
% e5 c$ N+ J/ {8 [# f t# e //Error("移动 - %d->%d",nSrc,nDestPos);0 M# o' f9 C* T2 d6 t1 d! ?: v
nDestPos++;+ b+ u# d4 A' @3 M6 l' p2 P
}& n# A/ W1 d/ b. ~
//取第一个元素的信息# d; R$ O' t' A/ `, `: {
/*0 Y. e# g& a" s* z8 `1 n! R
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! Q5 s X Z( W7 P4 T! a3 Z {7 T% t0 q5 k; t6 G
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; `6 y. l, r* S& p g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- I( [9 m9 {9 U
}! q* \3 R3 l- M- |8 R- v" j9 u
*/
x3 Q% T: ?2 z% N //////////////////////////////////////////////////////////////////////////
2 J$ o( J1 M$ q' y7 N5 [! D% }4 L break;
$ K( q1 e6 J9 [9 C. R( U) U a }
! N3 Y$ k8 R+ _7 q } $ h) l/ K& b1 A: l' P
} `; |: E& a9 \: k- C6 n+ |
m_wndMenu.SetVisible(FALSE);
Q- e/ E3 t, ^$ ^
s7 T/ }0 J) H4 j) N--------------------------------------------------------------------------------------------------------0 t" p5 U4 o7 ?0 z7 f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). B* q, r4 i9 l7 x) L
{- B9 u8 ^ D" o3 y- N# M4 v
BaseMouseCursor();
$ H. `- m. u/ C" a7 z. F}
/ C, U6 U) j4 {, J+ ~; E3 S& ^在其下添加:
2 M8 ^# _$ N) n, r- pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 Z! K( m5 x% W; d6 ?0 _! h{
0 ?; f; S& B4 X0 y. Om_wndMenu.DeleteAllMenu();
3 q- m1 V Q* km_wndMenu.CreateMenu(this);7 B& y* C: |5 `. Z, k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! h" v8 T" o5 p$ w; r
- C) X0 A4 d2 q8 q/ Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! N2 Y& v2 d Z' o( G; V' u{
( b" E$ Y' j z% I2 K5 z0 W) Y //P以上级别才可以删除所有道具: @% f1 U/ L3 ?
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ H; t' N2 T, ?7 K3 A}
' S: F/ s3 w/ C' U: p; ?8 _9 `% |m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ q; b7 S9 K6 R6 M4 K( B9 f
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- x5 H% i2 z1 p+ f' am_wndMenu.SetFocus();$ V9 B/ d4 a, k2 H8 z, |' S$ g
}3 S( r4 h3 Q( W _8 E
------------------------------------------------------------------------------------------------------------, {0 j3 W8 M9 Q* c$ x6 Y
*************************
2 X7 W9 B3 h# `0 P5 M& p E1 X, n0 {9 QWndField.h文件2 c/ D) R: O. O
*************************
6 j+ n8 |3 z, }9 d2 D# R' L6 z$ E搜索:BOOL m_bReport;% z8 O/ t: X3 R( I t3 \1 {* A
其后添加:
; D- T' g" B1 }) a, [) S/ jCWndMenu m_wndMenu;
$ O' t1 z2 o9 N7 ~8 P! m% p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) C2 v; k$ ~( J) Z. I
其后添加:; _1 i% \7 ~% J/ [) Y8 s# d
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& O6 F! S, X7 b$ H" y2 Y
; x9 G4 _+ c- z6 d, D1 r. i# v
3 L2 w ^% q$ T) t$ a |
|