|
|
源文件中_Interface文件夹下WndField.cpp文件
" V. P/ O, a' j& L4 ~8 a2 [3 K搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! w& P. g1 }1 C. y& I$ E& a6 A+ j ]( x5 m: b! Q" b
struct sItem9 T# e3 E# y( p8 ]. D9 e9 \ h
{+ T- e- [/ S. t$ A$ @
DWORD dwId;3 c, R3 p' Q) T8 ]* v3 F$ P
DWORD dwKind2;
# E4 P& E8 |% ~$ @ ]3 f6 `DWORD dwItemId;
; g- ]9 g! ?/ K, S: _7 {BYTE nIndex;' F2 |3 [# x# i5 @$ S
sItem(){" J) l, _/ B1 P0 \5 d# a
dwId = dwKind2 = dwItemId = nIndex = 0; }/ B9 k/ b/ f* ^
}
: s4 H/ z$ u1 k. ]; g+ Zbool operator < (const sItem p2)9 B# b0 k5 M7 u9 J2 y
{" h. f0 z( B7 I1 H7 p/ M- ~0 H8 s
if (dwKind2 == p2.dwKind2)
- w; j+ W- R. Q( h6 E* o; n {
$ u/ ^, w3 ^/ _* b return dwItemId < p2.dwItemId;2 S' k4 L. S& a
}else{8 c6 a. C7 u5 F2 i7 d
return dwKind2 < p2.dwKind2;7 T3 z4 C. _/ M( a: V! p
}% v2 \& n. N* i$ Y% |* ^9 U/ f
}: `" `) M" G( A4 v" E
};6 c( s$ A7 {( ]1 H1 T
class CInventorySort3 [1 d) ?' X+ u$ a9 c/ b
{8 ]3 m0 F6 b1 A0 F% G9 O u
public:
* C2 p. [ z& D: J# }! JCInventorySort()
8 r A, t" ?' U s" R' K+ R{
7 B* B$ Y! h8 R m_dwPos = 0;8 {0 Z( _! A C1 ~4 z1 J
}
; l, f% Q+ H: p% E0 X# }: D! j" s~CInventorySort(){}
* i, ~ e. `6 f) Q# Mprivate:3 s% u' U* \) y2 O7 l
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 ?; L" ]8 p# iDWORD m_dwPos;$ I8 ]" n# |& N3 ]
public:
8 g+ t7 _" w; i [6 `7 X% dvoid Add(BYTE nIndex)
* ~ H3 a' ^$ d{
& L1 G) ]& @4 A* H+ y. { if (m_dwPos >= MAX_INVENTORY)
7 t! F) G( _; u8 }( m) {3 H+ O0 | {4 h# Z B; ]+ i& n
return;
6 _$ R1 U8 y9 O5 e, ?' w( i }* Z. E' x6 P( C- Z7 f! o# o3 `
m_Item[m_dwPos].nIndex = nIndex;
) r9 ^" b8 {+ V* w& P m_Item[m_dwPos].dwId = m_dwPos; W; t& D2 h. _8 e6 G
m_dwPos++;. L: f/ P$ t* p z" l' {: b8 J
}7 X5 k7 | `' u& B$ y6 q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. J6 {9 r0 A" L J/ l{+ b, n5 T8 V( c- o
for (int i=0;i<MAX_INVENTORY;i++)
" ?$ ]& w$ u D- j: Q3 t v {
3 B, ~9 {! P) J0 I if (m_Item.dwId == dwId)5 V |! o2 I9 ~/ A9 I1 r, a
{5 f0 y y* j* n, X
return m_Item.nIndex;
$ w0 i. n, Q$ w6 i' m }
# x+ D5 o: Q, N }! M) z0 ]5 k" B# S" C7 m! h
return 255;
; s$ `+ t( Z$ k# [9 J) ?4 r}: a0 t+ p# ]% r0 V+ z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ ^ H5 {) ~0 @
{
/ u9 {" H, v7 o, l% F, Z+ a BYTE nTmp = 0;
3 w9 H; A) O- e/ e s% {3 @ bool bDest = false,bSrc = false;/ u8 V9 F$ R7 O- ^
for (int i=0;i<MAX_INVENTORY;i++)* j$ s+ _; G m Q: G
{; D* _( t4 D, t+ ?: U2 I6 h
if (dwSrcId == m_Item.dwId)# d# L. {) \4 x# ~5 [% u
{9 S) f/ \0 \- I" {6 I* {
//id相等 则 改变对应的dest和src
Z e9 V: F. a; f, `& \1 ^7 i nTmp = m_Item.nIndex;- J$ b5 ~( L+ V# c2 h
m_Item.nIndex = dest;
% K ?+ S. r0 n; C4 S }3 Q/ l9 p/ M+ |1 J/ H6 Y
}
) g# n0 X j% h4 b- z //临时数据保存完毕,交换开始" l* n4 v `+ l8 Q- Y" p
for (int i=0;i<MAX_INVENTORY;i++)
x, K. W9 S5 X- J6 {* P$ K {
# R' v: c" ?& O: M& S9 t7 W if (dest == m_Item.nIndex)
- Y" @# m! W! m {# h/ A% k/ m$ Q& j$ ~' t- Y2 h
//id相等 则 改变对应的dest和src- j8 U8 {2 n4 X7 G5 C* }9 p- y
m_Item.nIndex = nTmp;
6 x6 V; t1 y( v3 Z }! G6 G& I. T1 T" T9 w
}
3 n( U7 f( p1 p$ j" F; u}! ~) D, V) M- |; P! Q' @
};/ S7 c! _) o( S4 o, W0 W9 n- Q
-------------------------------------------------------------------------) V; l, J- f5 f+ L5 k3 K9 D. h) [
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 z( y8 Z: a6 U/ T# J( A; V+ {3 R搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 H8 p; d) A: g# U
紧靠其上添加:0 _/ p* r7 n7 F3 D- @% }/ W
if( pWndBase == &m_wndMenu )# Z9 x: T4 l' \9 {
{
* y# K+ H! c9 \# a; T- G: p switch( nID )$ k2 O* z1 O* X; E) I# J5 L
{8 e2 G8 w T) G" S
case 2:$ Z0 f1 S7 S% y# R
{
9 g% h- I7 ?$ @ D3 S //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 d* N, {+ \7 D Z. E3 i o* ~. }+ F
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ n4 D& u0 X, X! o) ^ {3 q: ~" R5 c5 q3 z- x; U/ i3 V
break;
, h/ k8 ]* ?% K5 J5 P, Z5 k, B }
# _7 P. t _2 m$ G% C% o: @ n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! N; }2 z* E$ [9 C+ E% G5 h
{
A6 l4 V5 V, o1 w/ E! {- m" t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! u0 z7 R2 Q" V \5 _2 ^
if( !pItemElem ) J9 V: p$ o# |) P% T
continue;0 d7 [4 h! ~7 j( t) {. y7 {
if(pItemElem->GetExtra() > 0)
# x3 [8 f: B1 G6 K% o5 Z continue;
/ X( v1 A$ b4 [( z9 b7 I if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 `7 D' u. Y$ U% i* t. g% d continue;
7 a2 \+ t* {+ r- A3 l6 j4 N ~ if( g_pPlayer->IsUsing( pItemElem ) ), r% H) u: V- E5 q! `" n
continue;
6 M+ w$ f. B" |# V, x4 z if( pItemElem->IsUndestructable() == TRUE )
! e7 W/ A" ~( P e {
. C) ^% g( ^. \* ?5 F/ W g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* A) ~+ [( p% O: `6 O
continue;6 J: @- W( Q6 z
}/ ]5 r0 E. u( X2 j. w) {- F4 S
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ c. s3 h# o, B0 o; s& K9 W. G( @ }) x, u, G* a8 e2 b/ [
break;
8 O5 A9 T- d' i: O+ o; p! G } r2 f7 R3 |* ?" b
case 1:
/ X0 O* \! | c" n8 [# d {
+ [2 m6 Y4 k- S, E0 r7 N //整理背包! L/ V/ w8 ?2 Z- V6 I; t0 o" \
//////////////////////////////////////////////////////////////////////////# a' s1 ?; C( A% y' x: c& |
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* }1 b+ G5 s/ n( a4 g& ~% t
//////////////////////////////////////////////////////////////////////////
- P+ h! O$ x6 D* G: G2 f: U( l" U //////////////////////////////////////////////////////////////////////////; {- X2 n! d6 Z( L# A7 j* H
CInventorySort* pInvSort = new CInventorySort;
$ Y; O5 E4 c- Q# j: q vector <sItem> vItem; t& X) \ r5 c m! |% N
vItem.resize(MAX_INVENTORY);//初始化大小
* W" i: W- G, g5 _( P. [ s' z0 s //////////////////////////////////////////////////////////////////////////
! T. W" S" b5 Y ~. \ //填充数据
}% R6 ?/ D' v$ U for (int i=0;i<MAX_INVENTORY;i++)) [0 A: O8 t/ K% q
{- S6 F" l" n" E, a5 m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* {. _+ B; K/ R+ k% B# j5 M if (!pItemElem)
3 ~- e* z6 K2 U: ?8 r8 ~8 e" m$ s7 [0 U {
7 ]9 W" z/ t4 _7 G$ a" b' A) b5 S0 G vItem.dwKind2 = 0xffffffff;& }$ m9 m2 |. T8 L9 y
vItem.dwItemId = 0xffffffff;8 `- _- m$ O1 k
vItem.nIndex = i;( a+ D7 k( V6 N4 P8 R( y
}else {6 V1 Y8 n0 W+ p5 z; M% S# Q3 F
ItemProp* pProp = pItemElem->GetProp();
7 M" @ I: L; s8 s4 y& Y vItem.dwKind2 = pProp->dwItemKind2;
?: d) G" K2 [ vItem.dwItemId = pItemElem->m_dwItemId;
- b. j: p6 G ^% G) ? vItem.nIndex = i;: T' m- n" H3 k3 H
}. t1 t# p0 e: b9 `0 S6 D3 S1 H S
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 k1 `! Q/ s: D }( H& r1 R' T7 w7 }3 Q
//////////////////////////////////////////////////////////////////////////) a5 \' M: k) U) k8 m! ?
sort(vItem.begin(),vItem.end());//排序
3 d2 {) r2 M" S) c //////////////////////////////////////////////////////////////////////////
0 m- w6 a" z- ~. s3 k //交换3 k! k. k: v: T, L
for (size_t i=0;i<vItem.size();i++)
: z+ L2 m1 @+ [% } _# b, t6 E {$ I4 }$ M# V* a# Z& I3 _( U
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# j$ {' U" T% u& c) @2 w pInvSort->Add(vItem.nIndex);/ P& |2 O' ^' W
}9 }3 V; T3 y. |- v9 w, p
BYTE nDestPos = 0;
# z! t- C: ]$ Q1 m+ f# u. u for (int i=0;i<MAX_INVENTORY;i++) B+ E k1 ]' o7 S& o! j
{% q% y# l3 k: q; b% e9 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: ^) ?4 Q. x1 ~. ]9 x- W+ k+ f
if (pItemElem)! b4 `8 `( @0 @
{
& r% j1 \4 g$ J% `( R8 I: i if (IsUsingItem(pItemElem))
! @% K* r! V+ S, e2 l; X {
& ~0 s2 v7 U) J: Y; a9 B7 ` //这个位置无法放: N& \* o( M1 b5 p% E" A
nDestPos++;
1 Q8 t3 _; ^2 _# a2 ~! A6 t1 D/ F. I }
9 q4 B" F5 I: z! j }
5 G* n& \: W& C$ k5 b$ v8 a& S BYTE nSrc = pInvSort->GetItemSrc(i);
) X( u1 a+ k6 O5 D- v" _, r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 ?" D2 b& L% x/ v if (pItemElem)
" c4 s( ]' Q$ G; O% x0 z, L$ D {
5 c: e- d& @1 N& w' i& F8 X if (IsUsingItem(pItemElem)); s) a+ r8 x' ]/ i
{8 X! U: V R3 N7 J! T
//这个道具无法移动,跳过
& f: E8 g6 E- F0 f$ z continue;
7 v' l) Y# j4 P C' n* L }$ p, i# m" C6 U, a4 F: z
}else{
: t/ Z3 R2 U, P/ m2 B# ? //空位置 不用动- q; e; M- R( @- C5 U1 d8 c7 {
continue;
/ W: g) f# U' H5 w' p }+ R$ D3 @" Z7 |/ J1 f
//////////////////////////////////////////////////////////////////////////
1 ~6 D; e; f7 P- z# d; X //开始移动. j! e1 J( b8 Y- o
if (nSrc == nDestPos)
; w( k9 g9 ]. f3 V- |* L; h e B {
0 s( t) n- I, } _ //原地不动
7 e5 i; P0 L$ O- y+ b: Y: k f+ q& T nDestPos++;$ O6 e. f1 f4 y. t
continue;
$ o4 H& J+ u7 C& r4 ~$ G {; D }
8 n8 w0 ?4 ]. R: z* _ pInvSort->MoveItem(i,nDestPos);- |6 i9 v$ m# c+ g0 p8 s
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 y0 R# Y& |* q* L; L9 F Sleep(5);
6 a) J7 {6 f- B& c //Error("移动 - %d->%d",nSrc,nDestPos);
2 N0 n; ~" Z' w o# c* [% x- ` nDestPos++;
1 f: o$ ]. ]1 T L p }" y' d3 Y& ?" G
//取第一个元素的信息& I" d2 V/ K) c7 [: n
/*6 ? H2 u; V9 T+ X7 Q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- G- o7 A* k5 W$ O% _ {
: I7 ~) G' |6 u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- I& j8 i! ]+ _- r5 w g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! I, l) G- r2 w% [ { }
" w3 Z& M# m7 [+ L' b3 f5 {* F */$ Z6 T' D8 r8 s1 i
//////////////////////////////////////////////////////////////////////////$ j8 l# J9 X; w2 [9 a7 W$ Z9 A8 P5 V
break;
6 p' g6 |5 _4 g; P C }
, O: t8 U: D" X6 u0 ^% P }
, ?2 {1 W2 u/ T5 K; N( \! g}
( T5 N: R$ w9 sm_wndMenu.SetVisible(FALSE);
, N: g/ h d+ w. v7 G' U+ `: ~- }9 | G5 X% S
--------------------------------------------------------------------------------------------------------% c1 w! A" i- n+ _$ n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& Q) p) _9 T5 t! [9 ^5 `( A{' [/ M' x" Q" ^
BaseMouseCursor();
9 w6 _ P& Z# d" K}1 Q u! ^% g6 a; ~1 t' H
在其下添加:6 p3 v A: `0 }) a) ]
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). _; ^9 R3 j# q& |. B' D7 y2 E& U
{. W8 N# C1 Q2 \9 w5 V/ ]
m_wndMenu.DeleteAllMenu();2 E" D5 D/ a& v" }. \. b4 @9 E3 D
m_wndMenu.CreateMenu(this);
& J k4 e! S/ y; Mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 C' a) ?, F/ B- W
* T2 W1 K+ Y. C$ x" G3 U7 ^if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. ?. Y9 c3 @- v{
4 o3 h2 n' c- m //P以上级别才可以删除所有道具
, O" e5 c! A' e# X, }- q, c m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; i. ]( R# k8 y4 M8 M5 f) K7 E
}
) P- N1 }* M" K" _5 b1 H# wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& b v- a3 p- U# Y Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 u( o% f r x; O% P
m_wndMenu.SetFocus();4 {* W2 K4 m2 C+ T0 ^0 I6 T$ g# U+ L
}
5 o( T1 W6 {0 c- G, y------------------------------------------------------------------------------------------------------------& D4 @/ J. o3 @1 F# K9 ^
*************************2 m- H* L) A, e: Z7 b
WndField.h文件
- E3 p- b+ B9 C8 W. L: c*************************
3 N" a$ X9 ?- o9 |搜索:BOOL m_bReport;0 w6 N" [) a6 [( [* E
其后添加:8 h' Q0 g6 g: t( z! U! s& z8 O
CWndMenu m_wndMenu;# x' l: Z3 }# V. [* l- @# p
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ z+ u! k9 j; j8 i5 K其后添加:; i3 H' d/ \! V
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 s4 U- O! R" c2 V* m
G- J+ Z0 s( z2 k) Q
# v' ?5 [" ^6 R; A8 ?# ]& P |
|