|
|
源文件中_Interface文件夹下WndField.cpp文件
1 a5 n% z+ V: @) P, w N搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) X' T8 R, B/ ~& g0 P2 a6 o5 @
# H/ W7 |$ M5 @' h/ K1 Dstruct sItem
; ?$ C, H* O l: t I{9 j) F+ j- ]3 t, O4 c! W/ [
DWORD dwId;
7 x H8 q5 B1 Q$ o& J% MDWORD dwKind2;
6 J# z9 Y: ^, C0 G8 D( ~# R- o! vDWORD dwItemId;! r8 [/ Y( v/ b+ O8 n6 C
BYTE nIndex;, C t& b ^2 L( L1 V/ w0 Z
sItem(){
- o/ Q9 Z( c( _; k+ j dwId = dwKind2 = dwItemId = nIndex = 0;8 f$ r; Q" D, ?" v' F- {( X3 W
}
* P( Y7 n. q; s7 r! d$ a- N6 nbool operator < (const sItem p2)
4 p; u4 C- q& I; s! R e) a{
- C7 b" e/ d" s3 f7 _ if (dwKind2 == p2.dwKind2)6 w+ E# E: F' z1 A
{
/ X! V* I5 @6 k2 [. N# d return dwItemId < p2.dwItemId;2 Z7 q1 y7 H1 ~- F* h. c
}else{5 L8 g5 f0 K2 g: I
return dwKind2 < p2.dwKind2;2 g N% @, V/ j# a
}
& J" `4 ^2 k/ o. M L}0 S2 Y" E7 x& l; r, J
};' \: l9 `: Q) \( O# ?
class CInventorySort
0 i, T, m+ |3 P: J: U5 o3 T{1 W3 ^2 O" F# k+ N" _
public:
" ^7 Z" F% P! GCInventorySort()
3 ]5 I* Q5 V/ O8 t8 b{: g2 Y0 E Z- C& |" w3 G
m_dwPos = 0;
" g. G3 V& o6 d( f* W}
% t; {) Q b8 y9 K, r~CInventorySort(){}0 I. y/ C; S& A; V
private:5 G" _- k S, H) D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 P$ X; V) }, |6 J' g4 pDWORD m_dwPos;
1 v+ y1 I" d" q6 b) ~8 opublic:, a7 E8 [( W J# x& R7 C7 H
void Add(BYTE nIndex)) N7 h4 F; Y7 a% Y$ [" e) Q8 ]
{
5 ]8 x$ A) L. g if (m_dwPos >= MAX_INVENTORY)$ s8 l' p$ B [* G q! r
{/ o0 M n* o% [- }
return;, H& S; d& F# b. i
}# T/ c+ {; V* G2 G- F
m_Item[m_dwPos].nIndex = nIndex;
+ {3 ~( a N" u, A* x m_Item[m_dwPos].dwId = m_dwPos;
4 F* E6 |% p- i% N m_dwPos++;
( w0 I Z' `8 c: d. t. l* b}1 O# t# W; F$ E ^8 L% J9 T
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: [* I1 r% D# ]
{
7 p! M# B# P+ J& }& p& M! x2 _" B for (int i=0;i<MAX_INVENTORY;i++)
) k, K* z' l+ d% ` {
) i1 F; E7 E8 ~4 p* f if (m_Item.dwId == dwId)( Q# U- e7 Z; h, R
{! t2 k5 H C( C8 ]# l, m
return m_Item.nIndex;3 v& h6 F' w& E: p3 h# Y. n7 W8 a
}8 x; @7 \7 h3 o, W
}1 u; ], W. A8 z2 m6 W: G% R1 \
return 255;
7 A: H% m( f9 S/ c4 V% V$ W}! o4 D5 y& m& E S! Y# H! r$ s- X
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; p0 t6 s* e' G8 m3 y9 \. a* m
{
# @8 F' S$ \# o" k% I* p BYTE nTmp = 0;+ `/ J8 C5 C3 D
bool bDest = false,bSrc = false;9 D' F+ F) b% h' Y9 V; t
for (int i=0;i<MAX_INVENTORY;i++). _3 u( w, k E f
{
9 u5 Q9 V$ \! m% l; Q) J" Q if (dwSrcId == m_Item.dwId)
: Y1 q# T6 y) B+ ^# [# s {6 m* O+ f: m$ N+ i- ^+ A" g+ v
//id相等 则 改变对应的dest和src
! D8 z u- a! Q/ J% u+ I: t nTmp = m_Item.nIndex;
% e4 l8 a- ^# j0 y; [# r+ L3 I# J m_Item.nIndex = dest;
- y- N$ X# g/ t7 J) R! e( w }' |7 R9 B# h, x
}4 s1 d1 j% a& O$ K0 r' P3 ?. F
//临时数据保存完毕,交换开始" q5 n* V4 E2 K$ Y2 d
for (int i=0;i<MAX_INVENTORY;i++)! V% b5 M! j& F' u+ C
{# n- V; J4 o& h m! m
if (dest == m_Item.nIndex). R+ n7 C+ [. k" u
{2 H6 j3 H/ b+ Z! e( {8 \, F
//id相等 则 改变对应的dest和src" N" j1 S$ W5 K. e
m_Item.nIndex = nTmp;
5 l& J: v* Z# X J }
9 w0 n; d7 i; {& ?* m/ h# Q }5 g$ ~1 L& q+ W9 c4 `
}
' s' j1 Q1 |* I9 k6 S};2 I7 P& b- [& s! Y; e3 D: U5 }
-------------------------------------------------------------------------+ I; N$ }7 d) T0 A/ f
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& H, c( |( l' |: H* z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 q: v1 r4 o7 w# n% F3 ^0 k5 I紧靠其上添加:8 J! b8 T0 M1 L8 C) Z
if( pWndBase == &m_wndMenu )
: P3 t# U5 T$ t, Y* K5 W{/ k+ z$ c4 w+ h0 ]
switch( nID )
+ I0 M2 h7 q! K7 i( J2 ^- | {8 C, x/ j: u' P V: I- P
case 2:
. l; @2 e$ U- u; X9 q# l. a! [ {! V, g8 N% L$ H0 [
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 A1 u$ @7 O. u8 y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" v7 c# M- k2 h! H! u
{& z3 |+ j( d. d4 Y) Q8 V
break;
/ F: F A6 k8 L- @8 p }5 h \0 w4 Y- c, a4 u! `
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: H. f! f& d: b {
% r8 z8 d9 k: y+ e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- p$ r4 s3 z1 t1 `+ {
if( !pItemElem )
! |2 L- T' g) m- [% y3 z% A continue;+ N) s& s- i9 f/ ~( i8 I
if(pItemElem->GetExtra() > 0)
& A X$ v7 F1 E" x" y2 e+ r continue;$ g! F; p- T Z: X7 r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' G4 z, X2 k# U' l continue;
0 `+ c2 N! J1 M% E" D" z' L if( g_pPlayer->IsUsing( pItemElem ) )
( q3 J5 a& b2 g) _9 [ continue;% h' K# U7 v8 e N
if( pItemElem->IsUndestructable() == TRUE )' m) D) K1 Y# Z y. i
{' @/ j9 s9 L* t, z6 ~8 j
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 G& k3 M/ s4 }
continue;
& J+ w9 ^3 s1 Z3 V1 @( o }
( i) Q- N- e7 y' t g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); a5 e3 E. S C7 y
}
8 s9 C5 O5 S$ F ^3 r9 N9 [ break;' r. U) r+ Y5 r# e4 ^
}
- Q( A8 P5 L, I case 1:9 T" r) A5 C% w/ L
{- E8 c" {/ s9 v) e6 H r
//整理背包 a7 U- E7 i% E q
//////////////////////////////////////////////////////////////////////////
+ M6 J$ ^, s- q" R) @' R //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );1 i; _ x, D2 u" i% i. ?6 C9 s5 ~2 v2 d
//////////////////////////////////////////////////////////////////////////
; v+ d3 ^+ f2 _4 I; P) G5 v. Q' x' R /////////////////////////////////////////////////////////////////////////// H3 a/ f' y9 i- Y
CInventorySort* pInvSort = new CInventorySort;: _$ L9 W! |( y# S- k- _3 a
vector <sItem> vItem;3 i; b# l- c# c8 V4 R8 ?1 j
vItem.resize(MAX_INVENTORY);//初始化大小
X2 _ f2 P6 x# s7 D' { //////////////////////////////////////////////////////////////////////////
/ o+ Z @3 |) S \ //填充数据' n2 Z9 g# E' b! \& F# F5 m
for (int i=0;i<MAX_INVENTORY;i++). o2 _/ U0 v+ h; }" r" V6 A. m
{$ P% U1 L# @+ R* A3 E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! f+ u- S" Z6 b t& h7 ^( I7 V. u
if (!pItemElem)
+ h7 M1 X( _, G# F# q& N/ { {
5 r! r" c4 J6 @. D2 D9 }3 _' J. n vItem.dwKind2 = 0xffffffff;
" c1 C" }# V5 x H. {% N1 T V5 E$ O vItem.dwItemId = 0xffffffff;
, n2 L& j6 B A$ p/ ~/ G, g# { vItem.nIndex = i;
) Q& T3 A" q8 T7 _ }else {
+ A9 m8 w5 [" K9 ` ItemProp* pProp = pItemElem->GetProp();
) V$ R& O1 x) J vItem.dwKind2 = pProp->dwItemKind2;; P- t, S- b& f' V$ k- l
vItem.dwItemId = pItemElem->m_dwItemId;
% h, Q' x4 K% J! n3 ~ vItem.nIndex = i;
. v6 \) N5 k U }
; u9 l- x. Q( F3 x) j) W. Q4 E //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( K2 J6 S1 F; s/ F- x, h3 K
}$ X+ ]/ c9 a) L1 x5 \3 g
//////////////////////////////////////////////////////////////////////////
+ a0 [' l8 D2 ]% ~* `: I) [ sort(vItem.begin(),vItem.end());//排序+ r4 B7 c' F D/ R y
//////////////////////////////////////////////////////////////////////////$ M. B; T) O2 T# X F& l- d
//交换
5 p+ A* }8 L+ Y8 B0 J for (size_t i=0;i<vItem.size();i++)
! q: S$ ^, F9 o5 k" y; b$ L9 u {
' \, a3 L; G) k% V3 E //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' r6 p$ [0 o ^* }. i
pInvSort->Add(vItem.nIndex);
a, [1 s+ o- x2 n. N* x" l' z }* W9 `: D( T# L
BYTE nDestPos = 0;
; k- o, O; [, r" }& ^8 `. y for (int i=0;i<MAX_INVENTORY;i++)
8 Z% C- _- T4 w$ o5 P {
, Z0 d! h# i# z7 ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, G! T! q+ Q& n
if (pItemElem)
) b! v6 a/ E4 o2 ^ {0 {7 w; s+ [4 e: B+ a
if (IsUsingItem(pItemElem))
$ r) x+ @4 i2 \* f, F! { {. i& k! ? ]; N9 Q7 a5 l
//这个位置无法放/ f# |) S% l' y9 U. I- {, m9 K' s
nDestPos++;
& V- X. j7 ~9 J$ g8 E* l- H }
+ R' F' e$ h; v* q2 s4 ?* Q }
3 \' N. t" P. g+ b- C s BYTE nSrc = pInvSort->GetItemSrc(i);* e' D6 r# f' |4 K* W0 Z* A% @
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ ^+ E" h. @" E4 L3 D* y4 d; X* a6 C
if (pItemElem)
9 R, R* @( {3 F5 A- H {3 W) t5 T" O$ a- X% c! _
if (IsUsingItem(pItemElem))
' L+ Q9 C3 t- z# A9 M# G {# w: A; ^4 W" W! t+ y7 z
//这个道具无法移动,跳过
9 @$ P. [: w/ i7 p# u8 ?. A continue;3 l+ r, u8 N- Y+ q! t
}& I# r! D$ z, m: U
}else{
4 w' v, G9 v, J7 {* u8 s //空位置 不用动
5 D2 F0 Z# |; X0 z continue;
0 j/ T9 {" E& @- `# P5 _" K# f }
5 H0 n' }8 A$ t' l% W$ D* f //////////////////////////////////////////////////////////////////////////
0 c5 e! {5 ?( H1 Y7 B# R: a/ A0 I //开始移动. e* G; U4 n9 \( T8 _
if (nSrc == nDestPos)3 z; V; v) s" x/ |4 e1 ]
{
V* c6 f& U5 S8 ~* Q, }; w //原地不动
3 [: L9 \9 L k7 X. C1 [- j nDestPos++;! k* F' M7 b! ?1 q) z: d# X4 n
continue;' c. S- y3 J% g* O- s- R" o
}. s6 j, Y t- V! l# J
pInvSort->MoveItem(i,nDestPos);: ?9 ~) P# i; b, K0 y( R+ a( g
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; ^3 z9 _2 K. i! n# q9 R$ Z# r m Sleep(5);
3 \* p( g3 D* \' q0 N //Error("移动 - %d->%d",nSrc,nDestPos);( f9 n- B2 `9 ~3 i9 z7 W( {
nDestPos++;
5 f0 t7 L+ E$ f }
@+ L; l/ d4 ~. x7 d7 a+ K //取第一个元素的信息7 l3 G* [! f$ t9 ]; ^# a
/*
1 Q4 ~2 b1 K N% Y4 C if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 {3 |/ y4 b2 [& n
{
% s: c. R, a. u* [9 B& i3 E: J Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& Y- G, ]2 x* b4 z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 s; l6 C4 l) q. t9 f2 x1 ^
}7 h; E$ Z+ N9 Z# e; ?4 ?9 ]
*/) h1 C* z0 ^- |. |" v
//////////////////////////////////////////////////////////////////////////
2 V u/ {, w9 r- C7 w! [. } break;* K5 J7 }4 J7 h0 D8 B
}
S/ |9 F/ \. ~7 h7 F }
8 j J& {: s( h# R! b}2 D1 S, i* O: w7 b* l8 v5 T
m_wndMenu.SetVisible(FALSE);5 x5 y% f1 A6 o# @
) U& j- L* D2 R* q# c--------------------------------------------------------------------------------------------------------& t/ V! X2 K/ U1 d' a) p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% j8 a( R$ u h( ?{3 T2 u8 X$ w; ?5 V
BaseMouseCursor();
\0 n* P6 c' c" A+ p. e8 M: `}/ z; a" f' ~: J/ `% F
在其下添加:: ~8 z( M" f, E$ Y2 h7 N2 p0 z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% ^, D% @/ g5 W* \! a- L{6 W: w% P6 I2 l( F2 D7 f1 t
m_wndMenu.DeleteAllMenu();3 Z9 ]1 i5 W/ A- o' N1 R; |
m_wndMenu.CreateMenu(this);$ W6 n6 ?3 o0 r
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! M$ ?5 x4 R1 _% Q
4 F; V4 q. _- U4 \- y2 y0 Wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" n; N- @* |$ k0 s) J- l/ ~{, W, ^* l2 p/ q. W' C' L& K/ L- B+ g
//P以上级别才可以删除所有道具
- c) {! y" q8 N$ @0 V. `3 y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 g8 B$ s [5 ]9 V! g! N
}" e& e, J5 B* l/ U6 T+ F3 Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. T4 ?" q; X4 g, h* Q+ y J* T# I1 Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; H$ k3 I0 p- m
m_wndMenu.SetFocus();
6 P# m1 }8 k6 A0 h' [9 r. E4 {}
8 ~: Y Z/ }$ L1 _1 Q* D------------------------------------------------------------------------------------------------------------3 C) a7 ?* E5 f( f9 K b& P' l6 _
*************************
3 G7 k# M7 |7 w4 n7 A; |WndField.h文件, _* v' n5 f; [9 T
*************************
% Y! U5 H& r( U, |6 @0 J% G1 |搜索:BOOL m_bReport;
/ a' L, d( [( K' _: u其后添加:; P- t3 H% j' t
CWndMenu m_wndMenu;# H. L u$ A+ S
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" h% [* l% x% n/ ~% g9 K# Z6 L
其后添加:/ x5 C- @2 T4 a9 t
virtual void OnRButtonUp(UINT nFlags, CPoint point);& V' y! R2 @. Q7 @$ R
0 X9 d+ G- b+ C9 q! ^5 t- ^& ^# z$ y! b& n+ a0 ^
|
|