|
|
源文件中_Interface文件夹下WndField.cpp文件
9 H4 v, G' B0 {, k1 @ N搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- G, E+ S7 @0 E# h8 \
0 p* m/ X& y5 y9 w c/ C4 Jstruct sItem
& {- z) q& B( K1 A{" K& z# q; A% H! W# q
DWORD dwId;9 P6 [# U6 E2 ?* s: i: |
DWORD dwKind2;" y0 c% W! e/ m, i9 M9 I
DWORD dwItemId;7 \! {8 l% f* U0 V
BYTE nIndex;
% [' }+ V0 m Q/ l R" SsItem(){
6 K/ o. r( ^' @ b" Q1 K h* R dwId = dwKind2 = dwItemId = nIndex = 0;
/ I: a3 v3 D6 m0 u& i1 ?% s1 M}9 M8 i& u4 ], T- o- U: d! Z- s
bool operator < (const sItem p2)
$ t% ^% a8 O- T% ?# U1 `( O{. V# K! V0 U! s4 @* Y4 y% L- G" b
if (dwKind2 == p2.dwKind2), L: {2 _) O3 g* r; u
{
8 f5 `; V& k* p+ ]. z( R% q return dwItemId < p2.dwItemId;
* f" M9 g# H9 ]2 B. g1 {, M }else{
' }% L0 S9 d" M2 f# W3 m return dwKind2 < p2.dwKind2;
) c/ Z; u6 |5 ?( e* s1 Z+ d+ q }& o$ M( J; i- t4 Z4 @. G
}- m/ [& w, f$ V$ A0 m/ D
};* t, F- b" ^- W ]/ A+ z
class CInventorySort9 R6 d, p# }) Z( k5 N
{0 B, Q. h: P9 V) J. p: L* h
public:
- z4 A; g" l9 H# p6 D! ICInventorySort()
" v. j* `% E( w{
' Y+ U9 r6 \3 G) ? ]1 A% ^& D m_dwPos = 0;) o V" w8 ~, Q0 _( s
}4 }0 A5 g/ Q& I9 G; O, @! f
~CInventorySort(){}! J7 x- S1 U1 V% L6 Y& o6 w
private:+ D" I H: b4 u* d4 \
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& o+ T7 f' l) l- K9 t
DWORD m_dwPos;+ ]/ D; E/ @1 Z
public:7 k" Z! w7 [6 m# o" a6 L$ K
void Add(BYTE nIndex), T. g5 e' H* j# o
{# Q& X- Z" P; f
if (m_dwPos >= MAX_INVENTORY)
! D( v, x3 p4 {& j, ~: b0 u- S4 H$ B {
) y2 l4 F- V/ k, K* D return;" e, R! w' N$ J/ {
}
) Z1 T9 J- T# v* h* a9 Z( W m_Item[m_dwPos].nIndex = nIndex;: \! ]9 s1 B+ S3 y
m_Item[m_dwPos].dwId = m_dwPos;: t9 a: ` M" d7 B, ^
m_dwPos++;$ g8 d' N/ X7 U" z, {$ N0 K- \
}8 \% b) k( {1 H5 ^+ x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. h2 O1 E! n9 e9 ^- Y8 l
{: h5 b5 ~( J- h# r4 Y8 Y$ \
for (int i=0;i<MAX_INVENTORY;i++): R7 k$ p$ v* @) c
{1 w8 e8 t) y$ T2 n
if (m_Item.dwId == dwId)
! R& B% x; J. |% a {# d, n8 I: t* L v
return m_Item.nIndex;
! H! [: U. C. ?. n" l }
7 j& j- N8 _* a: z1 A7 f u" z6 e }- W9 [! F% A" z4 }& g% t$ I
return 255;
& f1 s( L' M9 F0 q; O8 m}4 R9 \3 E' c0 C0 r. G* a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 J! K9 [) W3 O! c0 d9 r/ X% l* ~! N5 x{
5 U6 v# M) k: g9 V4 B: J( o- ~ BYTE nTmp = 0;6 D- t; N: t1 I; B; ?
bool bDest = false,bSrc = false;8 s1 D9 q$ _6 N) a2 m L
for (int i=0;i<MAX_INVENTORY;i++)
9 s' M0 D6 d1 q9 Y0 k, c {
% ~( b! ]& z9 W; K, Z if (dwSrcId == m_Item.dwId)1 I2 H& N* e* ^/ }) \
{
6 u8 A7 P1 r# |+ G. S# @7 ? //id相等 则 改变对应的dest和src+ N n; w$ k, T- r/ U
nTmp = m_Item.nIndex;
7 Q" N( P w& F, Q m_Item.nIndex = dest;/ O' |: x$ n4 r4 c
}- ]7 C8 P( D. k% b& L! b
}
/ z/ @2 M; r/ v$ E //临时数据保存完毕,交换开始3 I6 ~2 o5 @8 G5 o: ^4 ?3 W6 b
for (int i=0;i<MAX_INVENTORY;i++)9 V' w# D: U: k$ ]1 h' r
{5 Q; |- R& Z) w. [9 h' X" C! m, c: X: X
if (dest == m_Item.nIndex)
/ L* E( e9 q$ m* ]$ X {
4 k. M& m9 y+ g0 R6 g1 }6 y //id相等 则 改变对应的dest和src
: r: `8 G" D7 ^( }. {2 X m_Item.nIndex = nTmp; r! n$ L4 z# {
}" o# m# `7 j+ L; D: r0 p' S4 K
}2 L2 h$ H: m9 Q; B6 k7 Y, D+ M& L
}7 J8 h$ x* B S/ M) [* j* q) ^7 n
};, o6 O0 S) T9 {$ W. T- K
-------------------------------------------------------------------------
3 |# t, u H& K% q( S8 `依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' c* b9 ^7 _/ I
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 k, g3 ~5 ]1 _2 m7 v ^; @紧靠其上添加:
$ E j, |; z$ H2 q3 S% k+ oif( pWndBase == &m_wndMenu )
& y: [+ c! [" S1 K{/ T2 V' p1 ]: p, |" |9 n7 q5 Q0 i1 ]
switch( nID )
* O1 U& c1 m# l& G {6 h& Z7 X$ q0 f% m) O
case 2:
! _! m! @% z, G {
! y3 H4 O4 R5 T //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) `8 ^. E7 m; d7 A# o# b if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" T; b3 X8 y, @; I {: D6 v5 L& z& r3 j
break;- j: [% X6 q- x4 |
}5 b/ F0 f; f1 m) o0 T
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 g$ g. a' b B+ N/ D
{1 v+ Z8 V: v7 a J7 t$ f% Z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! p- L1 l1 ]( K, d5 s- u8 ?& T* @
if( !pItemElem )
6 U9 v: @; J3 ?4 G0 K9 O9 s+ ? continue;6 Z& s, |% ~, d6 A
if(pItemElem->GetExtra() > 0)
9 s q" t }- T+ J; x7 Z1 I% z continue;
: `7 N' V I: a4 l3 \% x6 p0 D$ B# s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 z& `( @/ d! i) J2 n4 t/ ]
continue;7 v' L! N% Z: p6 j
if( g_pPlayer->IsUsing( pItemElem ) )
! u* y6 T4 I9 G' b continue;3 s8 m$ e1 v) P5 F' ?" m
if( pItemElem->IsUndestructable() == TRUE )
5 ` l0 |; @- t/ P5 w3 ] {0 R: Z. D: y w8 O; y; I, X
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: n2 l5 z8 G6 L1 U continue;0 P8 Y# x; b! P
}; e9 P8 {3 |7 J* X
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* t$ |# e7 [* b& ?. t) Q4 P0 S# e/ C8 }$ M }) f0 ] a9 c1 y2 ~/ `+ o
break;
& |! G' D+ `: r: X }
2 ^- W, z8 @/ g1 v case 1:
, V3 E0 N+ @* \7 Y/ @. q& P {
& J3 n5 ^; ?: U8 b& D' v: C //整理背包
) b# i7 o7 K* u' H9 ? //////////////////////////////////////////////////////////////////////////
& ~; o& K( v; ^8 a! @# V9 N //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( d- a" V! p7 T! k) q8 T$ Z //////////////////////////////////////////////////////////////////////////
- L/ P/ v9 C3 ^) g //////////////////////////////////////////////////////////////////////////
, ]% n& Y- S# g# }0 u& X& O6 x- n ? CInventorySort* pInvSort = new CInventorySort;+ f/ w) e0 b" J6 F( t7 ^
vector <sItem> vItem;- g$ J6 Z* H( o! |, Y d' Y
vItem.resize(MAX_INVENTORY);//初始化大小) ?- N) c( ?1 K8 _" m" H4 H Q
//////////////////////////////////////////////////////////////////////////2 k3 A `, b f O( N
//填充数据' H; _! }8 W7 m# J& e+ \0 w
for (int i=0;i<MAX_INVENTORY;i++)
) }% C" B; ]) J/ _+ F0 O {' X% d8 o% n8 A5 G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) h" T. A) n* u6 C+ @
if (!pItemElem). T- Q9 \2 L2 |5 N7 h r6 Y
{
. x6 T4 f% `) j7 a- B1 B vItem.dwKind2 = 0xffffffff;
" o: s' U- T. K# B8 m9 @; K- K vItem.dwItemId = 0xffffffff;
]( h' e2 A" |5 p vItem.nIndex = i;
& g/ J% b$ ?: K( V }else {
+ p X& Y) Z. S) c7 u ItemProp* pProp = pItemElem->GetProp();: c6 R2 O; S9 C- n5 q
vItem.dwKind2 = pProp->dwItemKind2;, G) e3 C% e+ T6 p7 m1 R7 S* q
vItem.dwItemId = pItemElem->m_dwItemId;9 x& L) T8 H7 Q
vItem.nIndex = i;
) A7 v6 v) s% p& J }- ^7 e4 `- ?. `: Y' ^$ h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' ~1 Q1 l; _" g7 K }3 ~; m& n: I% E3 }" G; M( y
//////////////////////////////////////////////////////////////////////////
( G% u: k. A' e* W7 [ sort(vItem.begin(),vItem.end());//排序; M1 U0 V& U7 g4 l5 Z% f# [
//////////////////////////////////////////////////////////////////////////
/ b! F7 t% C6 h( @* f4 _( c //交换
! [" e# G' W3 c W- {" ? for (size_t i=0;i<vItem.size();i++)
8 {$ y; B8 ~& H6 s/ ?- \ {* m2 ^# x; x8 L: c& J
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ y$ {" s/ N5 x; Z
pInvSort->Add(vItem.nIndex);
4 x! B2 }) E- X1 T |. L0 n }
5 |2 ~) c5 Z" o; A) a BYTE nDestPos = 0;7 F3 B+ z0 h5 t9 J
for (int i=0;i<MAX_INVENTORY;i++)
0 {2 T; T3 D { C$ Q {, _4 p7 F1 P$ v, ? e1 B! y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
$ x1 ^8 I- _8 ~: ? if (pItemElem)/ N- {5 s6 y% w1 p' |
{- h f' X/ O5 d7 _, B, z0 O
if (IsUsingItem(pItemElem))
4 @1 Z# L. g/ L! e/ w* P F {
$ L" i; H( p" Q! H" M C //这个位置无法放- U' D: p( `$ j( H& y
nDestPos++;* [2 L3 m6 x$ ]& w' O. |; c
}3 M$ `' A/ w9 f6 ], s3 a m
}4 b2 N8 S C7 {$ W1 S
BYTE nSrc = pInvSort->GetItemSrc(i);, S% h5 t5 [/ x0 t7 e5 s. {" {, i
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 `( `5 n* L/ X. ]% m) F0 V if (pItemElem)$ q! \) y5 K5 y
{
* J5 d b9 I& B9 R( C if (IsUsingItem(pItemElem)): A7 N: g! V# e% ], Y# V) B' O
{4 N! I" C# U+ k J
//这个道具无法移动,跳过
+ e/ g3 M$ _0 F I) t) k1 K continue;' p/ \5 p$ _8 y& S' e* @
}* z$ S1 ]7 C' e1 u- }5 C9 n
}else{
# C& g6 o% V& N4 n/ y2 D: q0 p //空位置 不用动
N5 ^; G' f) @- D+ D1 E% R8 ` continue;0 p4 K* s2 G: e- L. E
}
1 q4 a, ^* ^) f f1 s, r ////////////////////////////////////////////////////////////////////////// j) C7 D) ~0 a8 w$ F. C) S3 h, q- r
//开始移动 u) X& E8 k! P6 Y
if (nSrc == nDestPos)' H3 B" ]! E6 S2 z1 B
{
: i- s. S& ?; x0 _ //原地不动
4 c% C6 a' L5 u2 i1 v nDestPos++;$ o( x3 d: Q7 ~! I
continue;
" a, X, i$ [1 i) K+ z }
. j2 j U% u" L3 T D pInvSort->MoveItem(i,nDestPos);
0 |- A8 i& e$ @' E9 S g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 c+ j4 ^- q- y3 Y
Sleep(5);2 b& ?1 l- X% k5 y4 O
//Error("移动 - %d->%d",nSrc,nDestPos);
$ C7 V0 l1 S' _ R7 r! U" D nDestPos++;
0 {- z- g0 {. {" H: q2 m3 h0 v3 Y }
2 x; t" g7 U: B/ F; V2 J/ l //取第一个元素的信息
E+ f0 N) s, ]% I /*
* Q+ K2 K k7 B% U if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 C- Y( ]* ^2 S1 n1 l7 A$ O5 ` {1 Q0 t* v; ^' K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 _ N% P3 m! [
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ D: k5 Y v9 S# n1 S1 ?# A
}7 F( t0 | i* e# E& M& ?
*/
- Z5 j, g3 a) y/ ~) Y% {8 G: u4 s //////////////////////////////////////////////////////////////////////////
& e; Q2 ?* ]7 ~% G9 a! {$ X break;
) E! U% x) j4 Y4 Z7 t5 T$ @ }
( k8 U" z) b4 W5 P/ V. D }
+ A, p3 B4 \7 {! n}( O3 U# b" l$ I) g1 b/ H/ l+ N
m_wndMenu.SetVisible(FALSE);5 i/ B P f7 f9 Z( |+ I
$ p3 Y* M9 d7 \$ w3 J& f
--------------------------------------------------------------------------------------------------------) P* S/ n5 L) U* a
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( |4 w6 S8 G( e- y0 w' v0 W{
# Z2 c) i, t. ]& x' xBaseMouseCursor();, ]& O6 l$ [3 \; ~' Y
}
! F% t5 i* b( J# w% T# F3 q( o0 _9 {在其下添加:1 r* v& e, d6 Y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" x% Q/ }, g' [( F2 U9 h
{& [9 Y8 V z' k* q+ {8 b3 W
m_wndMenu.DeleteAllMenu();
5 U5 N6 e" ?% ^ k2 M4 t$ Om_wndMenu.CreateMenu(this);
# i7 b' t6 ?' }2 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 k! a: o# L1 @, p
5 K+ W* h: ]9 q. j, `3 Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) {7 Q: g" @2 D1 T: H7 Q, e{
! t9 \6 g0 d( v //P以上级别才可以删除所有道具: D( |1 x; H2 O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. X- n6 _1 F* s0 N5 I( W
}' T( d$ A2 p2 H
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ V: f( X+ Y9 ?. q( D
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 d5 H; X. ?. `1 a
m_wndMenu.SetFocus();
9 H$ [- \" v K9 q" a- ]}
2 A, W1 x+ _1 B, h$ M1 o7 p------------------------------------------------------------------------------------------------------------! m5 E$ q) }6 w" k" T3 T5 o, C5 h' t
*************************
# i5 {# G& [0 W% {WndField.h文件/ G" U6 l5 z6 l! x* @
*************************
9 i6 K" j2 X# t. k0 t搜索:BOOL m_bReport;
5 _6 g/ z( }5 d2 p, A' D其后添加:
' r* {1 s! O: ]3 B% @+ N+ o) ZCWndMenu m_wndMenu;
6 q8 J- T% B$ V! H6 i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ E2 l0 e7 g9 ^0 K7 x
其后添加:- a) X2 T m @. d( j6 Y2 Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 ]2 ^8 \, f8 [8 S5 t) N4 l, z* G {
, D- L/ h) c* p+ ?/ d( C" T; ~3 U |
|