|
|
源文件中_Interface文件夹下WndField.cpp文件
' c) z5 B+ X* N搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
@" {7 j, X( F( r) S8 h" \* e) B# X A# f% g G- c, C
struct sItem
B9 K3 @/ e! Y8 L{
- w) z& H: b( G2 oDWORD dwId;
! `( ^. [- u/ @" Q R, b5 wDWORD dwKind2;$ ?, L- v+ P0 B% G! \
DWORD dwItemId;
# ^. z8 G9 j) D9 _- d' wBYTE nIndex;- q% K: T% E% [ N- L) e h. T
sItem(){
; J- Y( _3 g7 n) y dwId = dwKind2 = dwItemId = nIndex = 0;
' s/ z% y* K4 e6 G}
5 q* v$ p: m1 d. l( \bool operator < (const sItem p2)
8 n, T/ x9 i. k: \* ?% w7 g{; f! e/ i+ U! j
if (dwKind2 == p2.dwKind2)5 }# `# W% D' X6 X K& Y
{4 _' _4 i2 m+ j, S- E/ [! z* g. I! P s; H
return dwItemId < p2.dwItemId;
6 u4 j9 t$ j1 o% q# q" G8 a }else{) M) U$ P. Y& c5 {
return dwKind2 < p2.dwKind2;) k( t7 N) Y0 ~. ]
}
5 Y& U. f8 \) E6 n}1 I* r) Y5 Z" o7 r; [8 p
};6 u8 Y- Y7 t/ h. r0 }! n' J
class CInventorySort1 |& G. a6 S& Q5 k- c$ c
{
8 o! }: ?5 d7 y% L& `( o2 x" |public:
+ {' T; w7 d Z7 xCInventorySort()
9 F( P9 ]9 O! K{/ @/ P! r( A8 k4 `
m_dwPos = 0;
. ^5 t3 ^8 Z- E1 P0 ~1 a* E4 q}+ s8 m7 q* o* Y2 ~
~CInventorySort(){}
# i6 v6 v5 U! s: s4 vprivate:
* {( u! b- U' H& TsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* o+ A( `: E! q$ G! P3 N( bDWORD m_dwPos;- C/ V. n0 u/ x( d
public:
9 g% y f$ m9 v: N) s# Gvoid Add(BYTE nIndex)
- G% R; H7 {% R1 a/ J; |! {" s{
8 c+ \' a% t3 w$ h if (m_dwPos >= MAX_INVENTORY)
- W+ @6 m; ]# g; i& D {
3 w$ j* a/ H3 j return; r( q& ?0 R: T7 O/ q7 C; N8 Y* W
}
% ?; Y9 a2 U' e, i- e" K3 w7 [7 O! r0 P m_Item[m_dwPos].nIndex = nIndex;' ~ M2 }- Q3 o# M
m_Item[m_dwPos].dwId = m_dwPos;- N. Z& n- o4 `% i" e/ z
m_dwPos++;
2 s4 p+ n' O4 h5 W}+ h' ?- t# L: [6 \) d0 X" M6 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. v; V/ F: g, i/ M
{
& u9 J8 O6 n! |1 n1 O for (int i=0;i<MAX_INVENTORY;i++)
( i. M7 C& ?* ^8 p+ i. p) B {; z( A- }# R9 W
if (m_Item.dwId == dwId), u I; J6 e, X2 \6 z3 Q' p! g
{$ [; ]! R( E, `. m+ o5 B I7 J/ r
return m_Item.nIndex;
" A; @, N2 O/ e: E: A4 X }
" F. T( U# P ~$ ~: k }
( T$ V2 h% p3 [( ` return 255;
9 w% ~5 O2 e r j Q1 E}# }$ k& r; i( N6 j2 |5 E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! \, y+ [$ B. N' N( ]/ |{
1 l0 G& Z& I+ X- u2 m3 g& y BYTE nTmp = 0;0 m8 T. |2 K8 ~: c$ l$ [) _5 A
bool bDest = false,bSrc = false;
( y1 t7 B5 w: S8 M- ~* L for (int i=0;i<MAX_INVENTORY;i++)
9 x$ |5 V8 F' ]% p) S {
# c4 r& ~$ Z* O1 C" | if (dwSrcId == m_Item.dwId)
4 H% d* M4 J5 g+ o {- N+ G+ ?* [0 i
//id相等 则 改变对应的dest和src
# v- {6 Q6 H7 V( V/ q: w nTmp = m_Item.nIndex;
" }& g+ w2 e4 T( t m_Item.nIndex = dest;
2 v: n! K" a/ }4 t0 V4 X' Y }" l0 D3 a% V: e( q
}( o' R0 N6 ]% A7 {) ?
//临时数据保存完毕,交换开始
% a$ p5 @- j' [& M. k2 z" h for (int i=0;i<MAX_INVENTORY;i++)
% a4 S- R% `4 ~) W) ^" S {
2 [: J9 l" R- ]# V: c2 Q6 J if (dest == m_Item.nIndex)' Y( z& I6 `4 c! s$ t, _7 c
{5 s! L+ D) E |9 U, y
//id相等 则 改变对应的dest和src
; f, j; y! |) @5 {' `/ w6 o m_Item.nIndex = nTmp;
1 u r) B# |9 K+ @$ {8 o/ \ }2 }$ q3 Q$ L' L) B, h/ i1 C: |' R
}
( d7 V& Z7 f6 j7 I7 m; W}( ?( q8 l# c% S W4 y# w
};. S( h: H+ o& p
-------------------------------------------------------------------------* f- \4 ^$ U/ u8 _
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; O! |5 P0 a: _: d' G( { p搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- k6 P# U" l7 {6 A2 |$ w* A
紧靠其上添加:
3 D) m* d3 p/ v& Jif( pWndBase == &m_wndMenu )% ]6 Y/ j3 z6 l- f5 l
{
1 f3 _: n$ P" R switch( nID ): q1 S) t2 S9 z! K% S/ O
{
# r+ N8 V/ N, K( W case 2:
) T& i3 o& ?( b U3 H& o+ R {
# |! A! A' o5 W //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" D7 ?! X3 W R6 u: X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 I, G7 W) x- l
{% N' T! Y7 ^5 l2 |$ k- T/ G8 V
break;
# Q; a6 f. y5 w3 e% Q' C }
. I+ E" P5 i. D6 [, g for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 P0 k3 A' b# j7 {5 N6 j$ O# |7 ~
{
1 s# v& `+ k7 _3 c! X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; m4 g& j7 n+ [* V4 p5 P; F) m if( !pItemElem )
4 \3 w; O& N z" L continue;
, l1 f$ b! F$ W+ a if(pItemElem->GetExtra() > 0)1 }. P+ W( V: ^( m# X
continue;: b. e0 u( `/ e3 X2 N' N( a! w
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 w# [' I; `6 w( x! i/ k continue; D: M' j* f, h. C6 E/ r q' c
if( g_pPlayer->IsUsing( pItemElem ) )
; e2 G5 a; f3 B A, @ continue;
1 z; f0 T0 `2 Z9 `: u+ a* W if( pItemElem->IsUndestructable() == TRUE )0 k0 h" k3 ]+ v
{
6 K1 }! d* u/ n# V2 t6 h g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( a2 I4 |$ v+ ?4 w; [- z4 z continue;. L) \, s; q* o+ w! H
}
: A0 x* ~ b" n, x g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ {3 v- r! ^9 ]" _4 e) I b- z }5 r) o) C7 r( N
break;
8 l% I& P7 n' m# G }
+ @0 e- k% K, L; w6 \9 k7 ~3 }2 P case 1:9 K3 z, a( `! ^" Q5 s+ Z+ r. p1 O
{0 x( U" r- z I8 A1 Y
//整理背包
+ m4 Y8 {+ A! ? [3 l" ~2 [ //////////////////////////////////////////////////////////////////////////% y# w4 G/ @; L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 b4 Y2 Q/ N( y' c: t
//////////////////////////////////////////////////////////////////////////
" {1 n. | n6 K2 b //////////////////////////////////////////////////////////////////////////0 m- n# R8 E% r. R0 z
CInventorySort* pInvSort = new CInventorySort;
( U& G w/ p$ P) ?9 H vector <sItem> vItem;
[$ o! q. z% P0 B0 [$ t0 Y vItem.resize(MAX_INVENTORY);//初始化大小; I6 x/ z4 b0 a
//////////////////////////////////////////////////////////////////////////3 G7 Y' K8 K. j' ~2 L
//填充数据
0 w V5 Z, ^7 s/ M: G# x for (int i=0;i<MAX_INVENTORY;i++)
, D, I4 L. ~3 z$ T {& O/ ?5 {$ ]1 Y# V0 B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ h$ r! n9 x; v K, G2 o
if (!pItemElem)2 I. v. c# z* Q4 q, t6 h
{3 @1 k# c0 |: A7 S; x
vItem.dwKind2 = 0xffffffff;
0 Y+ Z0 g/ [, `! {! g$ A( C vItem.dwItemId = 0xffffffff;& n' K8 _6 W }; j' X+ K
vItem.nIndex = i;
: E; z. O! A8 g2 m }else {
# S% P9 c; l5 k ItemProp* pProp = pItemElem->GetProp();
" _0 l/ j6 ^8 ^$ X vItem.dwKind2 = pProp->dwItemKind2;
5 z, x% x9 H, d% T7 g, y3 I vItem.dwItemId = pItemElem->m_dwItemId;
7 ?" J! q! g3 F2 [+ y vItem.nIndex = i;
, H! B& ?/ D. J0 N+ I& {. m }% I; h& T0 N5 h4 g$ t1 `4 {% W
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! L' R" r! _* d, {6 h
}
3 ]' ?5 {* Y; A% T //////////////////////////////////////////////////////////////////////////7 G& _0 k/ r; t8 v* y8 X
sort(vItem.begin(),vItem.end());//排序+ { v9 g$ `5 }5 f
//////////////////////////////////////////////////////////////////////////
! h. u8 N" b- D //交换
: s2 k: d& o7 ~% u$ U# ]3 h for (size_t i=0;i<vItem.size();i++)
9 D, L- ?/ c9 f& b; w( S2 G" | {" r4 ]# a) y) N, M% E/ S0 ]9 `* J, e
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% ?& r' ^ ^6 ?3 H4 D pInvSort->Add(vItem.nIndex);
; N2 U* H1 c5 K2 Q }. ^1 J! l& v3 P2 m) v1 [
BYTE nDestPos = 0;: a8 l8 o6 W( ~" }& j" c1 z
for (int i=0;i<MAX_INVENTORY;i++); E( ]8 X2 }+ _8 k" P8 Y0 [& [
{ L( n7 P5 F0 i( q" [8 s. I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 }( z8 v L! m/ ]( s
if (pItemElem)
! v% M$ C4 C3 t4 b, @ {
/ `9 L z0 K; y; e- A if (IsUsingItem(pItemElem))# W! ]- i( {9 S0 t0 \; E
{
# I- z$ E/ j9 I4 w/ U8 W/ f //这个位置无法放5 f! `# B7 ?2 n4 B e! m) C5 D7 b
nDestPos++;
9 @8 ` C2 Z2 l+ u' @$ z! b: z }
8 R3 J7 Y* K. v! [' q. s: e }% h& q/ N" Z: E$ r; m9 Z
BYTE nSrc = pInvSort->GetItemSrc(i);
; b( A5 Q1 q- t; r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! q& ]* a0 P( Q/ f if (pItemElem)
& S3 c& r; B; ]2 z! Z' r/ P6 h {
9 i J0 n3 _# D if (IsUsingItem(pItemElem))
# a9 @7 q k! ~8 d$ Z {( X1 g. V7 K- @* [/ ]( x. Z2 C8 ]
//这个道具无法移动,跳过
0 f2 ?1 V8 n7 Q# G7 {. }# | continue;. S# D' P- h: I2 |
}
& X5 N6 ^ d7 V0 c c7 h3 Y }else{1 {( L6 _/ D5 g
//空位置 不用动9 Z, b5 d2 D0 Z
continue;
. y' D- a0 Z: m1 J1 X- S7 ~5 x }8 ^" Y% m' ]' [: T
//////////////////////////////////////////////////////////////////////////
/ H+ Z! a* D+ o% U" ~ } //开始移动" v. r0 Y# P6 S Q' w. q
if (nSrc == nDestPos)8 ^* j# H c! v
{
! g& W6 @; ` _ //原地不动
" y; u {5 C9 K$ B+ @% ? nDestPos++;6 _) Z1 h( S$ A
continue;) z% O* r' R6 a4 w( E9 g6 h9 D
}* H# n5 n x3 O" P ~( r/ Z0 i: T6 z
pInvSort->MoveItem(i,nDestPos);9 P4 l. A* Q' T
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
{ D8 Q3 D3 ^+ i7 ]! _0 m Sleep(5);* U- Y3 N' z3 q( [' v8 x8 z( z
//Error("移动 - %d->%d",nSrc,nDestPos);
4 z! x5 Z5 a( q0 f2 A8 }1 x nDestPos++;
( z) L2 l& A* J, Z" `2 t7 @% v, r }
; z: U" Q$ r5 s$ X6 y) P //取第一个元素的信息
Y( H6 `; u$ k/ G" ^ /*
$ x# e; t( c- }2 Q/ _4 _, p if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: N7 j9 L* t h5 t+ h0 v {
: B+ s9 _1 J1 q K/ b, \! P: Q( T) T Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 M4 h5 b& p. d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! [4 ~0 T5 |( D
}
! m) ?! z& S( o2 V% j. V) F& g: x */
( M. s& d# T: v //////////////////////////////////////////////////////////////////////////3 a% d1 p& Q+ k! D
break;
& Z3 O8 j8 a; i }
& n- [! C* C' O* l } # M" D! W2 r W9 ^
}
, d) E+ a) |8 C, V" s1 \m_wndMenu.SetVisible(FALSE);. }0 @* F! W2 i2 e/ v( z" p
! d2 h0 s+ @1 r) m/ J* y
--------------------------------------------------------------------------------------------------------- Q3 h1 e+ H( v) X: I/ ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 B; A" A* k+ ?! S{
6 A4 ~# H% j7 f6 [, u% T, ~BaseMouseCursor();$ t% U$ k! H+ ^* E* W! H
}
) g' g7 z4 \/ H6 q" @在其下添加:
" _; x$ [ r5 H: P7 y" B7 dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 Q4 ?1 t; x( W6 S4 _" m{
/ T0 O) w& E6 ~6 x. ~8 C1 M. M c- Z$ Mm_wndMenu.DeleteAllMenu();
. W3 D! N) q5 [4 Y G( e% e% hm_wndMenu.CreateMenu(this);$ {" f+ Z/ `* u4 z5 h8 B" r7 A l
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 ^3 z# N, M5 {* o, G
" L8 h- O6 \ X3 Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 X9 k: Y! f h; n5 c{
4 W m5 ~2 `* U4 @% |6 o //P以上级别才可以删除所有道具
; B5 O" k7 t' v# }* w' k" w m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 y* k; x* T5 s4 \( I8 T}
: s t! T0 l$ M! f' r: ^( J% jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# P9 W( f9 J6 D3 v" Y: y3 P& Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: c: I( Z5 F) c+ t
m_wndMenu.SetFocus();
7 @ ]: p1 J+ a; Z$ v}
/ y0 ?) D* Y4 Y @" w+ e8 x" P------------------------------------------------------------------------------------------------------------
, R( A; g9 b. Q* C*************************, l ~9 Y% H* K# R+ Z
WndField.h文件/ t) w x4 _6 T r+ D% s5 a2 W) @4 \
*************************' \% s2 {6 ~; g2 {( v& ?* M9 r
搜索:BOOL m_bReport;
3 H! k) V" \, P3 x! R3 m, j' T$ ?其后添加:$ e' h/ v1 y- Z4 _$ u3 ~
CWndMenu m_wndMenu;0 T/ z4 h# g3 t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 S9 N% Z* ~: [7 \其后添加:' m) [4 i: O) l' ^5 g, H6 e
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, H0 [) W5 i, b0 A
1 m' F6 ^4 h# z3 `( Q1 F; ^3 H# A. x
|
|