|
|
源文件中_Interface文件夹下WndField.cpp文件! H. U& i" _, |1 Q; E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 r6 x# X! j9 W/ u% v6 _3 d
1 G$ t' B+ j* r* a
struct sItem# ~( l7 \4 W4 g/ h$ ~" \; M, h% s
{
% Y, J+ N, t3 o# U% H1 Z" }DWORD dwId;9 @1 T: r, A8 ^) \
DWORD dwKind2;
+ T3 [- d# |( ?9 P( jDWORD dwItemId;7 N& E, E4 `* C2 ]7 K, A
BYTE nIndex;
# g: J" {! q6 r2 _8 @sItem(){
, t4 C4 T0 G. G; b/ H* c: u& E, f dwId = dwKind2 = dwItemId = nIndex = 0;( ~9 F/ j0 z) e% B! e9 g! Y1 m
}$ `7 y: T6 @6 P3 e' E
bool operator < (const sItem p2)9 v& u' O- N5 b9 \+ k
{. Q! ?& B/ q' Z0 G9 a7 n) f
if (dwKind2 == p2.dwKind2)5 `9 U' H4 w4 f1 b- W5 O* l
{" e( J" O( A7 [/ ]: ?. t
return dwItemId < p2.dwItemId;
8 h$ K/ Y/ o" _5 \6 p/ ^ }else{! j" g, t' d6 U' ]. x1 x4 q
return dwKind2 < p2.dwKind2;) s1 a1 I0 s7 h
}. \3 H5 i/ S6 P
}; Y' G! U& H& c/ ?- L2 L; v; E
};
2 a. W ~9 l2 u# f; L! @; Eclass CInventorySort, K& `' k5 I: A4 E
{# s* g! z; `- ~+ _3 S. \
public:* U$ Y/ s5 n( j: a, q" m4 s
CInventorySort()
( n; P" P# F: P! j; F- p{, o$ D* V0 `9 P3 C# q; A
m_dwPos = 0;
, T% \! w& H% P+ e, b+ z}" Q" X& ], F: E' w. u/ Q4 B
~CInventorySort(){}
8 A: U( L: T( z+ ?$ b# Sprivate:
3 N/ ^$ F2 O# b1 DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: b0 Y& u6 G2 MDWORD m_dwPos;
$ K0 Q; P. ?0 f3 v+ G) J; Tpublic:7 W1 H4 r2 p7 A: B0 P; p
void Add(BYTE nIndex)' R6 _1 [8 h6 d) \6 w% }" @- B
{2 M9 `2 a& i8 K& n3 y' n
if (m_dwPos >= MAX_INVENTORY)
4 h# z* { |( E( z+ S) ^2 h- @# i {! |) @+ b, J0 i2 L$ Z# m
return;
) b! C6 r0 K& u* d2 Y0 ? }4 W: v& ~& H: u: h8 h
m_Item[m_dwPos].nIndex = nIndex;. o. `3 r5 k9 ]& T4 Z; x
m_Item[m_dwPos].dwId = m_dwPos;
# I* x7 |. k4 E m_dwPos++;
+ d0 J, e% y" G}, U, v; ~% j, e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; n6 A: |7 C+ O7 a# v6 s
{' B* ^1 ~2 {4 X. w# l
for (int i=0;i<MAX_INVENTORY;i++)
% i5 [/ N) I l+ z/ c1 y {
: o" A" ~; F/ I3 U& v- L if (m_Item.dwId == dwId)& I; s! Q8 Y! N N
{+ x6 z }5 T3 f9 z2 e4 D4 h2 l
return m_Item.nIndex;
+ j% c3 K4 L6 ]. U }
& n4 w& Y! T. s* M1 ~ }: @2 m5 V/ m$ N* [5 C( w' \
return 255;
- h) |7 R* T0 ]+ L& d: d: A( f9 G( p}
4 [# w3 Y9 ~3 \' xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 @6 t2 P4 s8 ~, V3 B$ G
{
6 K: {3 X- t5 }- _/ \" {1 M BYTE nTmp = 0;
* c9 G, P: q8 O+ Z ^" r bool bDest = false,bSrc = false;+ P* d+ i; x! g" p' `% k
for (int i=0;i<MAX_INVENTORY;i++)
4 ]5 n1 b W+ p0 t4 ] {+ z- l* m1 X# l9 V
if (dwSrcId == m_Item.dwId)
: ?* j: E* `5 Q8 `& {% \ e" y) U9 d1 ] {
& q1 ~/ m: ~. ^% Z; W0 T* N1 M //id相等 则 改变对应的dest和src
) ~! `; _/ ~' T# y8 ]0 q. U nTmp = m_Item.nIndex;: q) ~& T7 u) X! b
m_Item.nIndex = dest;
6 T! U' m( E- [; h }
% K% P6 x6 U% R$ I; S! B }
/ G Y$ O {. m8 U- N$ f //临时数据保存完毕,交换开始
& R' I7 b) w8 j for (int i=0;i<MAX_INVENTORY;i++)
: g# m' G' @6 \5 e% |1 v6 ]' @ {; a9 M( |7 }2 M+ F, E
if (dest == m_Item.nIndex)
9 b+ b, c2 V* \) l8 L6 B {
' `' N7 E" J$ T1 g* k3 b //id相等 则 改变对应的dest和src6 r, W7 `+ y: F, f
m_Item.nIndex = nTmp;! S! I4 W' W I6 x
}
- L3 M: C- @7 ~- }/ z, ^! T5 q }
J; J% _; O: r1 P}
, N& m. L% g" _3 o" F8 Z% x};2 |( {) e+ }5 d! k7 k5 f& j, O+ k
-------------------------------------------------------------------------- S% V& G5 I; `7 ^6 [
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 X/ O% H# V: V: D# f4 q& F9 l搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* A9 k/ f( {! L% Z- K! T$ g紧靠其上添加:$ F' A* Y, ]# c( h* H3 ~" \, p
if( pWndBase == &m_wndMenu )( O% h# Q* f7 O# g& J
{' F7 q! z' Z: Y2 m3 U
switch( nID )
5 L3 K( R; [$ D7 d& p {
! b& w- n. _- a( c case 2:
( J5 J5 J1 T3 g1 U8 l {4 l5 [+ h1 z3 F/ ^$ E2 L+ K% V
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 X, D0 q2 Z. j) \ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# r0 H+ J4 n: ?2 I5 X' k {
S4 P: q- P! V: s" G break;
h$ k }, d; F% U5 D8 A4 Z }' i8 }" @6 T: m' ?& q5 e2 j. c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ P9 }) D v. h' @ {- o& G1 c& y6 u% }6 W6 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! d) \8 \/ T/ @ if( !pItemElem )8 \& q4 p- f4 Y) s& p6 g( p
continue;
$ G; c% N+ d: \ M$ S0 k if(pItemElem->GetExtra() > 0)
2 B- e2 N! y% N- @5 j' ^ continue;
, w3 K6 `/ l3 [+ e) o) a1 A if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & e7 q' H% W5 ~/ d2 o) n
continue;
( z5 y @1 k X# Q7 m if( g_pPlayer->IsUsing( pItemElem ) )
+ _7 v1 L) S( g& ]. u continue;4 K5 i6 b4 A) W1 @
if( pItemElem->IsUndestructable() == TRUE )! H8 T" q# u& m- ]4 U
{, l4 U- H F* d/ ]: _$ [% Z/ H0 U* i
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ m. O: h4 o* B& z% A
continue;1 S( i$ D. j j ]' U- x [
}' `* n/ w q% x( g& e
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" K2 W/ E& A' U/ I: n1 [& N }
( g1 G ^2 P0 e2 K break;
5 z9 a+ u$ P& V* M- L }
2 a3 d; S3 _4 K7 j/ i# C- C* h case 1:
# k0 U; t8 U3 D6 U* D2 Z8 r {& E! W( I# \4 J! |( p, h" g( ^
//整理背包0 }( x+ I# x& m- c! [
//////////////////////////////////////////////////////////////////////////# r+ k9 k5 ^* d0 G
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 h. h) ]$ N4 y H/ `; G //////////////////////////////////////////////////////////////////////////
# r& @7 ]9 ~0 V' n @7 d7 _ //////////////////////////////////////////////////////////////////////////
+ x. ~' g' B/ d8 h) W CInventorySort* pInvSort = new CInventorySort;
9 ~6 N/ `- H$ a( @( B9 u vector <sItem> vItem;
6 ]9 z( p: B. z$ {4 V% C vItem.resize(MAX_INVENTORY);//初始化大小
$ ~% i* l+ L; z. a6 |, X5 ? V //////////////////////////////////////////////////////////////////////////
# ~: H% Z; Q1 n //填充数据
i i9 ]! R) p$ t. h7 I& s7 A5 R for (int i=0;i<MAX_INVENTORY;i++)* N$ h/ M& M- H, M) ]1 N
{0 m- K4 K% t: Z* I2 v* F: B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# c P- z9 \3 T+ t( F: o: l5 O if (!pItemElem)* L( R! ]1 F+ S E
{# P, A8 F8 G/ ?9 D" }" b; \5 t
vItem.dwKind2 = 0xffffffff;
: r( R- b7 `9 G+ j" Z. { vItem.dwItemId = 0xffffffff;( c O/ z3 d3 Z9 D! t* Z& j5 n
vItem.nIndex = i;! N: T" v3 l5 `6 [$ r
}else {/ U+ P9 P+ d" J7 K7 W' @
ItemProp* pProp = pItemElem->GetProp();4 T q6 y% v, ~
vItem.dwKind2 = pProp->dwItemKind2;
' |! i V& }8 p$ T vItem.dwItemId = pItemElem->m_dwItemId;5 H0 u: q) d# L4 b& f6 E5 p
vItem.nIndex = i;
H9 n/ S) G3 b& n `/ C) A }
0 x* O3 U2 D5 U% w; o7 Y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ Z0 S: b5 y" j$ x" Y" ?
}- g/ v u% o$ @7 l E3 u/ E
//////////////////////////////////////////////////////////////////////////9 p, `3 A7 W' d+ D4 `
sort(vItem.begin(),vItem.end());//排序8 @0 {* T* n, F. Y
//////////////////////////////////////////////////////////////////////////8 |1 P9 \6 H/ e" A7 t1 l+ L* t8 W
//交换
. W9 ]+ C: Q. D for (size_t i=0;i<vItem.size();i++)( y2 U/ z/ A1 E
{
+ T& k, _+ R1 H d6 } //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( ]9 W7 `, {0 a. G- R
pInvSort->Add(vItem.nIndex);0 K2 a2 I6 `. H9 O
}
I; g2 H# p$ F) o0 B& y" J BYTE nDestPos = 0;, a, e3 H$ R# t8 k) ]& @# ^1 M$ [
for (int i=0;i<MAX_INVENTORY;i++)
" D: i9 b, J+ m" E# d# _( ] {, j! ?1 M, s. [- U& C: r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 G; u: W9 `& ]7 h" {
if (pItemElem)
7 v s9 ~$ Y( l# J# w {
: o' }# `+ ` L. y8 Z; ^+ V E if (IsUsingItem(pItemElem))8 E) y& x6 b8 [( \* R
{$ O3 Y. i( X4 t k4 M6 w5 I
//这个位置无法放
. l' a8 W: f+ d( V+ M! I nDestPos++;
/ t* T& p) t4 H+ w }: t( V5 R7 y3 J+ h; b2 j" Z2 o
}
$ }, T9 A+ v6 h& A1 a$ I- V2 o BYTE nSrc = pInvSort->GetItemSrc(i);2 p" w2 z8 f# p
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 l( V! r; x |- X if (pItemElem)
x: l! s4 X0 r1 d9 n {
( p1 m) ~/ a( ` ]. J if (IsUsingItem(pItemElem))- ]9 M9 G2 u" |/ ~5 L" E, K
{8 x+ X6 j# X. O; N
//这个道具无法移动,跳过
1 {' N. d: y3 \7 o |6 ]% _ continue;; a# x0 q; B! `( d
}
- `; t! r0 n, e }else{
1 Q% H1 p3 k- |, p2 w0 m //空位置 不用动
& z" s0 P, ?2 ~7 v# H+ z- Q" a continue;% U) R1 F. z1 p' T. W: R9 z' v
}8 n* D' }. N2 ^' X7 R
//////////////////////////////////////////////////////////////////////////5 |3 O' n. D) b% [0 |
//开始移动9 y) p: l1 P$ p! I# f+ L9 Y7 o
if (nSrc == nDestPos): c, m H8 M' B. Y3 V* _2 g1 ~
{
8 m* z- S/ B+ O. G //原地不动
3 Y5 O. S; x4 x* D& e* X6 S9 W nDestPos++;
B0 X2 X- C1 | continue;
" N2 `) U/ O1 `8 d4 j' ` }
/ O' I4 D) s% O( k/ C5 b2 j pInvSort->MoveItem(i,nDestPos);
5 F! g6 z% K( A& V( E6 b- } g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 v5 j/ b9 L* {- T& j Sleep(5);
, v; ?- Z7 K' ]( v: ^' ? //Error("移动 - %d->%d",nSrc,nDestPos);" U7 R) \# y# B( u! r4 e; I& U
nDestPos++;6 _& k6 ^3 `: @$ l. u
}' g& K2 N# J, |! Z2 z
//取第一个元素的信息
% y2 N$ a8 A2 c6 p) c7 {: R /*
9 {7 L8 ?' r4 D) s1 }, H& z8 z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 ?! ~7 N- K. r- d& W6 D# W5 t* {, O
{5 w: F9 N% U1 T) A
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 V7 v& p2 Z, \, N+ q; U" t- F
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
G5 {0 v$ m5 N }
9 W0 v( I* N2 P */
6 K* [* h- v3 v2 d //////////////////////////////////////////////////////////////////////////
, p8 g4 f& n9 Q7 i/ J break;
: m! o3 l) t; ~: n& }# g }
4 k3 r& m4 F* k! \8 n: y$ g } ! C k# D$ W$ |4 r, e) _5 Q; z
}
( w8 r2 B6 B3 h* S. ]: ?0 Km_wndMenu.SetVisible(FALSE);
3 D' F! y2 ?9 W+ T) b' H2 o3 Y W7 K; e: L2 Q
--------------------------------------------------------------------------------------------------------
, ]7 i7 j9 x0 ~+ E6 m8 x5 [' [搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 T; ?) r+ D- R, Y' i{
6 j7 \5 m( x9 m7 CBaseMouseCursor();
* p) m L0 ^& W) \' `}1 Y/ ]4 h- U F3 c( Q
在其下添加:
# a1 h9 @) ^3 Y3 s/ V$ N1 avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ B8 y \5 q6 h+ Y
{7 c; S- c; C8 _4 _
m_wndMenu.DeleteAllMenu();# _8 [. Z6 d' X$ {' x" @
m_wndMenu.CreateMenu(this);
' z2 P+ ?. R3 B2 x' ~8 am_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 d7 }. ~4 j |% v2 _# |8 H* ~8 H7 J! z6 I
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( M. T7 _1 T# ?. A$ y% c/ Q3 S5 G7 }
{
9 P! }4 ^/ E) O q //P以上级别才可以删除所有道具
' B3 @2 m. U% l' K u7 ? m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 d. |* _! b5 ?4 H
}. q3 A- ~, v w* V( ?: R- |
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 J* j; G5 O l0 m5 W2 c
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 t5 q7 G& k. I
m_wndMenu.SetFocus(); \) J# e( C! Y: B K$ U, r+ h
}
o5 ], T0 W" m) R; V' r------------------------------------------------------------------------------------------------------------3 \$ m6 k: v, B n$ E7 K7 E! v
*************************
; E4 @; v5 w7 [6 E8 x0 L' U7 IWndField.h文件
% X0 y1 R5 g4 C0 b# T*************************
3 K7 N( [9 h W: A7 w7 a+ D* Y搜索:BOOL m_bReport;
( d. _# D, Z0 d. r/ f9 o. P9 }其后添加:
4 W8 S$ k0 O8 iCWndMenu m_wndMenu;
9 |% N: x6 c7 r( X搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 g8 M1 K' P, e1 e' Q2 _: _: U
其后添加:! i6 m/ i) a5 ?+ W
virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 A8 F' W( [- F& j* X+ l) `
. r, L$ ?7 q; x& v. ^9 ^
O/ [# r4 m: n- }" q6 y9 ~: o$ V |
|