|
|
源文件中_Interface文件夹下WndField.cpp文件
, S: g& i& \6 M7 \- L" U9 L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 R& W* P; F' k+ U8 i6 J5 Y
6 a, Y6 P! V9 e' K$ J# l9 B9 wstruct sItem l7 ?5 O1 w" M% l: j: P- p
{ Z# A6 |- B" S, g& v
DWORD dwId;) e" r& ]# A3 I( ]% p
DWORD dwKind2;% m; n. f$ O4 A. i4 o3 t2 f0 Z( V
DWORD dwItemId;
7 W! w* ^$ W( P zBYTE nIndex;
) c0 ~( A* i; X$ L( G# `sItem(){# d0 J# ~ E# Y/ h, g# ^, y* V
dwId = dwKind2 = dwItemId = nIndex = 0;
: h( C/ ^: T. W6 k! L6 a}. K" j6 t" i5 p
bool operator < (const sItem p2)
0 y4 F& ~( S* s; A; W{
( b) K4 e1 }* C) j2 K2 S if (dwKind2 == p2.dwKind2)0 {- K# I" [7 K, Z# S
{
9 W* I2 l4 p7 {4 E _5 }, v return dwItemId < p2.dwItemId;
0 c3 K9 {& a6 w2 N }else{
6 n- \4 ~+ \. m; k9 u# c return dwKind2 < p2.dwKind2;9 H6 D6 B8 x+ l9 n7 ~5 N( R
} T1 V. j5 t5 ?" q- ~' f* {. F" N7 q
}% [; [7 d, N c' L) f
};: l' q( k [% c# d n N/ J: Y1 f
class CInventorySort
' i; n @' I; @- D2 A' k7 X" j% ]! j9 N{8 _2 e2 J9 u) Y8 w2 Y: |$ Y6 }% {
public:1 s; g& j) g' E& u4 Y# [; c; Y
CInventorySort()
3 ^1 b: ]9 h y{3 u% W6 _% b" u2 h
m_dwPos = 0;0 t8 U; C; r' g( U) d
}2 R+ y4 Q! d. {+ }) J: i
~CInventorySort(){}
& ~1 W8 S N# J3 p& i& u2 ? bprivate:6 q+ E: p# T* ~/ h0 a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; D7 u8 }* A6 v" D' G% iDWORD m_dwPos;
/ x( }- f; x3 ^public:0 I. C8 Q% P, k2 |* r* I$ p
void Add(BYTE nIndex)2 `9 Q$ M M+ y
{
; E6 W' F) ^' z if (m_dwPos >= MAX_INVENTORY)
1 f# Q3 {% m- J {
9 B, I# F. A; N0 b0 h return;/ T' Z; e3 b) M s
}# D) b: O4 R0 a& t5 |5 b1 D1 V
m_Item[m_dwPos].nIndex = nIndex;
@$ ?0 n' S* ^; L8 ^4 n! [ m_Item[m_dwPos].dwId = m_dwPos;
: ~9 x8 g6 x5 N' F m_dwPos++;; q8 t- g) u) V
}% u; f0 V" a f- j# E# u" J
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- N2 L* S0 {5 |& C* `{- N4 y( p) h$ ^+ D% p9 |7 ?2 S/ j( i0 `
for (int i=0;i<MAX_INVENTORY;i++)
, s8 R$ t! A: O1 q& u {
( n; t5 e! z! D. m( i3 X H if (m_Item.dwId == dwId)
T" _7 z/ B4 m: b& K+ q {
1 b9 M# E( G: K; E return m_Item.nIndex;
1 N; d5 I: f. o8 o }
3 i3 a) g' c& I5 W } ]; P: f3 \. Z) U- `4 q
return 255;
! ^; Q: N+ G9 P, G1 a. b1 M- r} c2 {. i5 k/ T* |% I3 g
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
6 D3 F+ e, E4 Q$ \{* h0 t9 E$ F. P' ?/ I# \
BYTE nTmp = 0;/ }8 W. {' N m5 o9 [
bool bDest = false,bSrc = false;
3 I& u8 h7 ^0 z, p! L for (int i=0;i<MAX_INVENTORY;i++)
6 \* S2 N, e# N9 F: [ {9 H; e, c! @) O4 {4 Z$ S: y
if (dwSrcId == m_Item.dwId)0 a4 N2 S* t0 Q
{
: m/ Z$ F) S! X: c, A //id相等 则 改变对应的dest和src
3 p; M: p0 c6 u, z# p0 t nTmp = m_Item.nIndex;9 }1 v! R" d/ z* ?3 l
m_Item.nIndex = dest;
( W! }6 O# {0 ` }
' t) I; z3 T* A) I+ ^ }
/ B* S5 j1 T0 t4 a2 e. [ //临时数据保存完毕,交换开始- a! D$ J: w! R0 q. d
for (int i=0;i<MAX_INVENTORY;i++)! o3 }) s+ F, F6 A
{
M1 L5 e" L, |% |( X. k if (dest == m_Item.nIndex)
! w% w; d/ m5 \ {
2 w1 T: o$ k: I% c; H% X+ U //id相等 则 改变对应的dest和src
) c3 r1 f2 ?) r; b% [' B z m_Item.nIndex = nTmp;! a& P' P/ k( a K8 T* r s
}, }% ~$ N- K7 W; z: ~
}" w6 ^% r" _$ i" {& y
}' S* _, d1 c' g8 N: l4 w
};: Y6 ~4 |% ^: l I6 u
-------------------------------------------------------------------------5 x% L3 I$ E* n; ~
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* i4 |, R! p7 j: J1 d# e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! S5 |& p3 F( n& b; l紧靠其上添加:
2 D+ S9 J3 K( V. t, {! fif( pWndBase == &m_wndMenu ) n. \% E4 ^& b/ V
{
1 I7 J! ^' `1 t$ {1 b" \ switch( nID )
: a1 b4 q; z( I/ c {5 L9 f8 e( w c( _% v
case 2:
6 o9 `5 M( O5 {! Y# S {/ H* u7 e- W* C
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 W |1 ^; r( m7 s if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) t0 {9 Z" A# k; n {4 j4 p) m& t0 ?! P9 ?3 f
break;: v- j8 F4 D9 M* k
}
0 ~) ~7 U! e: S for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 C" n1 ?/ ]6 a* |# `' C( m
{
. o) V" V7 `$ N" R! q8 p; S CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 ?$ p9 G" @# H4 g1 s1 w3 p2 t2 a
if( !pItemElem )
+ I1 L3 x% ]+ k- U4 ^ continue;
! W4 J E* K2 P6 @ if(pItemElem->GetExtra() > 0)1 Y' y4 P: J3 e! q3 t2 ~# L) I% F
continue;
# m* p' @# C+ X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" f4 R& f/ B l2 L! I5 B continue;
4 y# [& z5 w* |3 C0 Y if( g_pPlayer->IsUsing( pItemElem ) )
K% \) H6 _- J# L) z; V# P continue;
! }5 L& o ]6 h if( pItemElem->IsUndestructable() == TRUE )
5 O/ I5 ^9 H7 S8 B5 E, V {
& }$ R' ?8 P, I* e" u1 K$ O g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 B9 c4 g! j3 U! T) K$ @ {
continue;
" Z! h z* g$ `1 r: v" M* `" R$ r }
. W, L8 r! e3 e3 y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' g% Z/ \- b3 l5 H4 g, t8 ^$ z! f( `
}% t# d' {% A. K8 N* v
break;" D: N. E; K$ O1 L; \
}. k) }. q8 |! S- f1 J% L/ f
case 1:& D6 i2 v$ Z- _/ o- r1 a
{6 b& d! s# ^( e4 R
//整理背包/ m, V/ ^1 q) u' l: K! S+ z* S
//////////////////////////////////////////////////////////////////////////8 W9 K/ U/ j' A {( A! o, d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& o- M8 E! u/ v: [" m) x3 O
//////////////////////////////////////////////////////////////////////////% R- q) M+ Q% b0 D( ^
//////////////////////////////////////////////////////////////////////////
7 {4 r& ]- P, J2 S8 c, {/ q* { CInventorySort* pInvSort = new CInventorySort;1 r H; c2 B; [2 t2 Q& f
vector <sItem> vItem;
: W8 c) c$ k: y' A% y/ F5 A vItem.resize(MAX_INVENTORY);//初始化大小4 k3 L$ o: S4 t6 s! S% t9 `5 E5 H( z
//////////////////////////////////////////////////////////////////////////% e- }& i7 B0 ~8 h! |
//填充数据
. z5 C; W" ?9 E for (int i=0;i<MAX_INVENTORY;i++)
* b0 w. J1 ^, F {
- W, h/ W2 N8 H8 a& G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 B1 c, s3 b/ G. b/ D6 a n
if (!pItemElem)* G( D# T' v( V) ?6 u$ I1 m
{
( A5 ^/ Z1 a/ f x5 P& E vItem.dwKind2 = 0xffffffff;5 ]' n; d0 A# p5 S% t' w% K1 R
vItem.dwItemId = 0xffffffff;; U% j. l0 g) a" r5 ^
vItem.nIndex = i;* t, e" W# @% r4 y2 P
}else {' u* |* p( {$ Q( k9 |6 Y
ItemProp* pProp = pItemElem->GetProp();
& P% `8 m9 q" \9 d9 w' x vItem.dwKind2 = pProp->dwItemKind2;) I" g; ^3 C" N* D( _
vItem.dwItemId = pItemElem->m_dwItemId;9 v* Z! n/ Y8 v# A% D7 R
vItem.nIndex = i;4 N' J- u1 r O" }0 \9 u
}
1 V2 T# e6 ]1 D9 p% L //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* O. q! V' k6 L9 \0 j, m
}
9 V5 C$ V" z( J6 B" q4 W, [( t //////////////////////////////////////////////////////////////////////////9 K6 w5 F- y" f2 G, R
sort(vItem.begin(),vItem.end());//排序, P0 G0 ?+ m, |4 y! ~$ g# V8 D5 U# {
//////////////////////////////////////////////////////////////////////////
0 l3 q( U/ x F+ s7 n; e7 n //交换
$ F7 D7 a2 \0 r8 _; @; { for (size_t i=0;i<vItem.size();i++)) U+ D- V; R3 K
{
7 Z4 n \# a' a/ V* | p //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. q7 D# ]7 u+ y* \
pInvSort->Add(vItem.nIndex);) f9 t* p8 v4 c- v
}, Z$ }4 N* L$ o
BYTE nDestPos = 0;
; r4 u* `5 D7 Q& ^3 \! a for (int i=0;i<MAX_INVENTORY;i++)
) F+ `4 G) y2 ~$ h {* a' O8 ]/ O4 U7 X- x' x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
$ v0 Q+ g0 {2 T( h if (pItemElem), B4 Q4 Q/ T0 i6 x
{
0 \6 L4 u8 @' q if (IsUsingItem(pItemElem))
& K) i: r* b5 ` {
. }( K; S7 d1 z5 e: u8 _ //这个位置无法放
8 Q2 a7 F, G6 ~# j9 h+ ? nDestPos++;
4 R) }9 i, x" h& N, G }% f. Z- v* k" v% e4 {( D
}
/ J8 Y3 B7 i( W3 {+ f BYTE nSrc = pInvSort->GetItemSrc(i);
- D- J. t6 |8 A! i; N7 I pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# @% n: t t \ if (pItemElem). \, u% u4 Y H% H5 F4 q
{
7 {: o$ r1 _4 k0 J; d/ S' g1 V5 Z if (IsUsingItem(pItemElem))+ P: }# |' c' @; Y0 V: `
{
! S! U6 t0 J o. U& q //这个道具无法移动,跳过" C+ v1 X5 O. b, v9 `! V" w; b
continue;7 ?+ R" V* D* Z+ Z) ~: [
}7 i4 p! ~7 b0 i K7 p( y
}else{
1 l* g4 l- t3 j) B: L2 v //空位置 不用动
# C& A* r' g3 b7 a0 Q n6 F continue;
3 G; h% }) d q }
. F: k6 j, {; }" Q //////////////////////////////////////////////////////////////////////////
! k% c4 V$ k7 H) s3 | //开始移动7 D1 L Z' y4 D+ M
if (nSrc == nDestPos). U! L8 I# |4 n0 b7 P) R
{6 }, q; G! ?# J2 p! b- f, h- U7 w. l
//原地不动
' x9 K7 x7 ]+ A nDestPos++;
' @ i; b) K" H) i- s continue;. Y, b; l8 a. p
}4 _7 a* a- v3 y# Y
pInvSort->MoveItem(i,nDestPos);6 S! w' o. T6 j. v( O
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. a# ~$ F" l9 F, u4 w
Sleep(5);
$ k+ h' _0 F( ?2 R. c //Error("移动 - %d->%d",nSrc,nDestPos);
' M% r# n: ~/ r nDestPos++;) o- S9 k, H% I# P5 ?
}6 S: ^6 J5 u' [
//取第一个元素的信息
4 ~5 j. ?0 m. x, E$ Z /*
5 j2 ^* D$ U+ x( y7 O* {1 N if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 i1 K2 D1 @2 Y3 k8 v1 {
{8 v9 J" m3 T# }9 X
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: b; w' _# {9 M& l' y* g* _- l/ |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 V% I1 u( i( {+ U/ e) j }3 V$ P* l3 c" h. j+ V2 v* E2 E
*/
, Z- x& H5 q) L! `- ^1 h- ] //////////////////////////////////////////////////////////////////////////
6 }* l0 y$ {, E/ ` break;
; v& J% m" y' K# j( p }# P) C) t3 M( s/ L) n+ Y
} * I: o8 j) P# w
}6 m) p2 m7 x$ l. y1 x
m_wndMenu.SetVisible(FALSE);
3 D, ~; o, n7 |3 Q `' v
1 T& h' C& |; E: b/ A" e--------------------------------------------------------------------------------------------------------+ B2 F) \# T" q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 V" ^8 E0 p% a! R/ \# A L& L
{$ }: |3 I. ?' Z# @' G* z' x1 I
BaseMouseCursor();, s$ ~( D# j( H4 |! h
}
( l5 s. ?% E% B0 y在其下添加:
5 K8 m3 n' @3 _: Hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( c C# }. R* t4 q4 L$ _1 j0 n7 m{
2 A# V9 O' z9 S! e2 ^m_wndMenu.DeleteAllMenu();& N& E/ u* r0 K8 C$ r' k
m_wndMenu.CreateMenu(this);- {/ F- K! }- ~; N m
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 @+ \1 M* l5 [" N3 d1 M
/ E2 x9 B" n% w+ e
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 b$ C6 l1 L; x, Y
{
- l) I' a" e3 E* K' F; w$ T1 [9 _4 a //P以上级别才可以删除所有道具5 s7 ]: j' V% y$ B5 `1 v" Q, _
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 a2 ~/ Y+ F3 A
}
& i2 U5 \5 x, v/ k8 [0 mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; A: I$ I# h6 ~, k
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 C5 ] X! G$ vm_wndMenu.SetFocus();. G3 _+ Q* G/ e! t9 l
}$ _4 Z7 |8 P" s, [0 ^4 j
------------------------------------------------------------------------------------------------------------
: W) O z' P. z8 m************************** X% W9 i) e; O& T1 F& j7 @
WndField.h文件
( { X7 G0 |, o, F( ]2 A*************************. {0 g- c3 j( ~* G1 C! G) H- Y
搜索:BOOL m_bReport;4 ]7 P" z4 w$ c/ r0 a6 e
其后添加:( j* ]( C5 C: c
CWndMenu m_wndMenu;
0 ^1 {( X: c! b* Y! I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" c& s, @$ U+ {. p* S& i' f$ a3 v
其后添加:8 z) X6 m, U5 J e! R% \/ {* W
virtual void OnRButtonUp(UINT nFlags, CPoint point);
( c1 ^& K6 a W# e9 {; v4 ~* v# L7 R% Q
3 C; f: g3 K( C9 d- O: y$ E
|
|