|
源文件中_Interface文件夹下WndField.cpp文件
. s' E; r. P1 Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: S0 h' d0 m* r$ o
. {, c) y2 Z" b6 g2 ystruct sItem8 v& y+ @3 ^# ?! q _, E9 k5 i4 _
{& ^9 G7 D9 ^ a
DWORD dwId;- m+ U# g3 m! t& F8 ?9 S
DWORD dwKind2;8 R7 k* V* J& }. ]) e$ F3 m
DWORD dwItemId;
* z. i% S+ q3 }0 Y9 SBYTE nIndex;; W$ ?- m- y% w- Z6 X$ w$ u
sItem(){3 }4 e# l2 C+ n2 |% A$ k. z
dwId = dwKind2 = dwItemId = nIndex = 0;
; W6 s4 C) v" z' K3 ]' ?: R}
: P8 D0 z; [" C3 a# vbool operator < (const sItem p2)
+ {& [# ~3 X }. ]% ~{% N/ `2 f: u+ C1 U! b; k' e
if (dwKind2 == p2.dwKind2)
6 O: c% X1 M H {) w7 ?+ W$ Q* r( e' h
return dwItemId < p2.dwItemId;) e; q; n- n1 n. z2 K* m
}else{
! {7 f% r" v- X% d. s7 `2 n9 F' K return dwKind2 < p2.dwKind2;
! N6 N9 v- a) w; {) J; w! {5 r( y! K }
/ r: F! x. _% ~4 C}# w+ h" Y8 ^/ L) U
};
7 f& i# D: w0 Oclass CInventorySort
! m* z3 r8 T7 W# n1 Z! u$ X% f{
) r- V& z+ G6 ~+ _public:
$ q5 I( A$ \+ b" d5 r" HCInventorySort()9 U. d4 D+ V0 v
{/ P3 z, a. c4 t& F
m_dwPos = 0;! M/ [+ I( K6 ^. R- ~" g5 e
}1 |: b; o3 ]- [; W
~CInventorySort(){}
/ b4 V# d y' X: Oprivate:
5 g! B8 z" O1 b- Q P$ y5 asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 {$ b: \) @- ?7 mDWORD m_dwPos;4 m5 O& J& d% I) I7 h
public:
# @! W' y% V/ ]& zvoid Add(BYTE nIndex)
$ c8 B" ~9 c W% r" s4 B{8 `$ L! x- @, X* q0 a& ~ f' a0 h
if (m_dwPos >= MAX_INVENTORY)
7 j% _" f( X* h' V; n9 r& \ {/ L: g' W& U6 ?, V* j
return;" A1 M$ M; i _" x4 ^6 U! k
}) \7 P' ?# p' t3 F) F. n- y2 ~
m_Item[m_dwPos].nIndex = nIndex;. \ D, k4 d4 X- p
m_Item[m_dwPos].dwId = m_dwPos;
7 A+ W4 o+ C# t4 l/ W; h: j m_dwPos++;
1 B) O5 O" T0 _/ ~ u! R}5 I/ t2 j4 a+ V# t
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 C! b% Z9 y; l2 w% Z, |$ {. @
{
1 i0 @, y# \+ h5 r for (int i=0;i<MAX_INVENTORY;i++)
; C8 g8 J' y1 j! u- J5 ` {
. J- I1 n7 C2 M9 f; o3 P- }1 W if (m_Item.dwId == dwId)* ^# \- J- C# q
{
, R- b9 D" i) H1 \3 d/ g/ _4 ~ W return m_Item.nIndex;
3 f! I0 ?9 u) C# O' K2 ~ J }
. \# m3 r/ d: o) r& t; J }" P/ y5 d: ^* j7 D
return 255;! v; G1 J) X% w0 {+ [+ [
}
/ @$ _7 S* R* Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, b( A5 p& d0 D# B! _8 [9 H% P{ B' k5 [% P! _$ y; A0 i
BYTE nTmp = 0;
/ t7 `% Y! t8 r; j- m, M bool bDest = false,bSrc = false;6 x/ [4 j7 y: @7 Y% {& U
for (int i=0;i<MAX_INVENTORY;i++)
9 B, i# b# { Q4 [, H8 W1 B {% ^7 ^8 w8 _) h$ R% [! H" e, k
if (dwSrcId == m_Item.dwId)7 J2 j1 _/ {2 r+ y3 a( L! j
{6 D& D4 t) m# i/ W" ~/ N; n' p
//id相等 则 改变对应的dest和src
6 J8 ?6 k9 i2 b u nTmp = m_Item.nIndex;
1 u+ f+ G4 I# _ }0 Q, F' Y; W' \ m_Item.nIndex = dest;
; u/ @* |: P" E8 I1 E3 X- `$ r1 H }
1 C7 M o5 X5 [7 Q } T9 k B& r: i: u* h g# O0 X
//临时数据保存完毕,交换开始$ [0 T8 c" [' F+ E( _; Y# L, f
for (int i=0;i<MAX_INVENTORY;i++)5 Y5 c& d& E( K& e) j
{
0 s/ d' n9 I( I# S3 p if (dest == m_Item.nIndex)
" v' I. N: p( u2 h# {7 X; V$ X1 V {5 Q2 k$ m/ D2 H: t
//id相等 则 改变对应的dest和src) D( y' @. i9 z
m_Item.nIndex = nTmp;
( S% m) v F% s }& s5 o" I7 ~& v* F4 \3 C2 h: U: n
}- j$ x, k8 _8 \1 x% w
}
" [/ Q; p' a0 O9 F};
) R, B; u( o) _" K) n+ @-------------------------------------------------------------------------7 i6 t2 M' r- c+ \4 G9 v/ U
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), ~5 _5 l, X5 v$ G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ o; W( C- l4 Z- C$ H) r4 V紧靠其上添加:' J, s. b V* d7 _
if( pWndBase == &m_wndMenu )
* I& d) V1 R8 }/ F! w. J' D4 F{6 ^ \ X! R. |- D
switch( nID ); s. G1 k4 {7 [5 w
{: m8 d. T: A" \) u
case 2:+ D- j1 O; A/ i' s! t9 ~: H
{6 l/ x3 L+ F6 ]: ?8 X* B i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ Q2 o5 Z' `( Y( y4 n if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) s/ S/ F% B5 ~( ?3 A; ? {" R9 e2 P: }- b
break;
1 z. j- D) q) {9 r: s5 V `* ` }
: i/ |5 z1 h2 G4 j% H/ S2 G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 N: V9 p4 o# z
{
9 P. E3 B) S6 |0 ^, B) V+ ^: \ M$ M4 ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ w0 c/ {% W" I/ D) u: b if( !pItemElem )1 ]" M) c& i' \& y4 e$ ^+ s) W; ~
continue;( g2 ]. _1 Y7 \1 _
if(pItemElem->GetExtra() > 0)
6 F$ \3 m" e' I. e continue;
" `7 [- f4 `7 k if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ m$ z+ s C8 I6 k) q5 r continue;3 ^6 i( ~# L5 {" a X0 }1 \% _! V
if( g_pPlayer->IsUsing( pItemElem ) )
3 A: W: R4 M# V. A& f( E, K( Q continue;
' C. |8 C) }8 {- m if( pItemElem->IsUndestructable() == TRUE )
6 b8 s. B7 A% O! m {7 I# _. A9 @- @- I- |8 i! M
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ w! D( @, \8 j* }
continue;
: {% x1 s9 ^6 O9 X# g( @) g }" g& ]! `. F# `4 W4 Y. y0 x) V3 i. E
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) h, Z( t& v* q6 [, Z0 ] }
# E6 \; {( c" S break;
8 B6 A& f1 Q; v }, L* W+ Q; [9 Q+ H6 E. _
case 1:
2 C o% q9 a7 V! S {
) t4 k" ^' {" W; a$ d/ [; b0 L //整理背包- Z/ o, V* {# `# N$ w
//////////////////////////////////////////////////////////////////////////- S% ]( ] R1 N0 C& C7 O* D$ F
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 c1 k' a; N+ @$ n& L' n/ h( w, `; b //////////////////////////////////////////////////////////////////////////1 H6 Y: v$ p0 w1 x
//////////////////////////////////////////////////////////////////////////5 ~/ m% L7 e" H; Z) u$ i" k
CInventorySort* pInvSort = new CInventorySort;, o/ u. ^: p! s- W5 [; _
vector <sItem> vItem;; V2 a! ^) ?' e; Q+ o1 z( v
vItem.resize(MAX_INVENTORY);//初始化大小
. L7 R2 R* v. [+ Q9 i7 u9 p$ | //////////////////////////////////////////////////////////////////////////( d: y) _, s6 h- s p% b1 t G9 e
//填充数据. `+ |, e" f7 _0 F; ^" a0 p0 h
for (int i=0;i<MAX_INVENTORY;i++)0 q3 y ?# \2 G; r
{5 s, _3 Q2 [" o" M, b1 X. C( [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. q9 m$ z; N- a- s! G+ K
if (!pItemElem), G8 n% y1 l$ b- P+ u0 H% e- l
{: Q( e t+ v$ _# p- P
vItem.dwKind2 = 0xffffffff;
. M1 V- C2 {% N! G( Z1 S& F vItem.dwItemId = 0xffffffff;
% e# U3 [# {/ K7 K$ S vItem.nIndex = i;
% X0 ^5 M4 J7 G! Z: w0 H B }else {! k3 V% [6 J: Y5 y3 q. d
ItemProp* pProp = pItemElem->GetProp(); t P7 x6 `% n! S5 d& K) e
vItem.dwKind2 = pProp->dwItemKind2;
! e% w. c) \$ S0 | vItem.dwItemId = pItemElem->m_dwItemId;
% h. Q0 c" {" w: m- c! t7 V5 | w vItem.nIndex = i;
! M$ G8 d h& q: P% s: y, k! w }
& p G; K( A% U( \" P //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# {- b9 E* o3 r0 ?* T/ G }
D' }: H& n3 Z: N. d" V. u2 L: K$ | //////////////////////////////////////////////////////////////////////////6 }- ]# g, U1 k: T+ j' g; U1 {* R
sort(vItem.begin(),vItem.end());//排序 e- O7 J0 ]9 p. L8 R
//////////////////////////////////////////////////////////////////////////
5 r6 b" N0 {3 P //交换
- b, g' @$ O9 t' l for (size_t i=0;i<vItem.size();i++)
; S8 t7 N m3 w9 m {! f; Q( `3 H* m" {; t. U
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 U! _ a5 m" t' a8 v
pInvSort->Add(vItem.nIndex);9 O* w# n: K& t0 g$ n& U- w6 k
}$ B+ K! Y* z; m3 n9 O8 j. V, {
BYTE nDestPos = 0;" x" s1 S' O' G: v# O4 [+ ]
for (int i=0;i<MAX_INVENTORY;i++)) F. E. D8 K: t4 ^% j
{
! X% {' J& w2 v5 p ]6 T, E$ y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 e1 v3 ]# A; H' @ p: [* {
if (pItemElem)
4 a6 W0 o2 b' z- g, Q {
: v( Q" d; Q. G& ^. a( c- c' ` if (IsUsingItem(pItemElem)); B* y) }& P$ `: f( K% c: C6 p
{
( M5 q; n# h3 g: M+ L) N //这个位置无法放
2 W5 q: y2 @' G nDestPos++;/ Q; F/ h! V% t6 ^
}3 g. D6 w5 E4 h& T# d
}
) x6 u; L9 ^3 D% k4 E1 v# r BYTE nSrc = pInvSort->GetItemSrc(i);
( D0 f/ e$ w# m8 a pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
8 {6 _0 o! `) E2 f; U0 } if (pItemElem)
6 y9 v9 \# H: T- R+ e {9 J8 p/ f. s1 j) C1 h) e3 @) ~9 ~
if (IsUsingItem(pItemElem))) [; T- C: c( ] S% |
{
% K8 t: x5 L, C% d+ z( Q //这个道具无法移动,跳过8 M+ k" Z) o; r; d" k/ ]0 Z
continue;
' e9 N- h+ \2 |; A- m3 O }
3 N% V& f0 D" ?! L+ ~9 N' q }else{8 F( a. f) y5 B2 N/ o( j/ M
//空位置 不用动) f' b" N, V- \7 Q* ^8 \! Z2 x
continue;. f$ S+ ?5 _8 e* o" {
}# c- X, E& O1 Q' d* L1 a
//////////////////////////////////////////////////////////////////////////: J! S" g( G H4 Y' t- i7 r: l- q8 q+ n
//开始移动" y% l& \0 P3 G+ t" H, g3 o
if (nSrc == nDestPos) L" e! _3 p5 e( \* [0 z
{
) z" j# W5 b9 x. l# `8 N //原地不动
6 n. {* a J. q' u- Y9 f. w9 d nDestPos++;
( u$ ?: q9 h' |! ]; m continue;
/ p; K0 r* u$ p8 @5 u$ Q: m& }. U }
1 y" L4 E3 z {( L! @- K pInvSort->MoveItem(i,nDestPos);
7 ~- Y- p K& P. J g_DPlay.SendMoveItem(0,nSrc,nDestPos);, S/ ?8 K, m% i- t3 g3 F; C, s
Sleep(5);8 A5 j. N9 k! Z2 ]
//Error("移动 - %d->%d",nSrc,nDestPos);2 g* d5 y1 _' n. P: ?
nDestPos++;3 ~: d% z, K; v/ Q% o/ a" d, F# ~
}. E# D# Q* i/ R g' ^" F0 S
//取第一个元素的信息6 Z% H5 V4 g( w
/*
5 w' T+ `' y2 F" b5 q if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( h. N+ j- u. K* |( G: g
{* m/ A7 s0 K. ?! r5 W' i
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ f, j- D& z2 P
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, r% x& J) d! |$ p6 A
}5 h- v+ F6 ], S) U2 i
*/' G8 ~8 n) M5 X1 r
//////////////////////////////////////////////////////////////////////////9 W4 [3 ~/ e% s* r- m& {
break;
4 c) K7 C; u) Z: H& |7 }0 y }* E. W# @7 A: W' r0 l
}
2 T* c: P* J; V9 g9 {}! W: d# z0 v( F* K% E, _
m_wndMenu.SetVisible(FALSE);
5 O+ @4 `' {7 A1 L/ L! a
3 ~! Q$ j4 a4 Y/ H--------------------------------------------------------------------------------------------------------
/ Y: A" d8 z& g' {& q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
+ g7 ^' j Z5 Z1 {6 {3 K. M{
4 P# U) h- i" t/ f/ {BaseMouseCursor();8 c2 [/ f+ }# s/ W1 J2 {5 b
}# m" P; _' L& H* C
在其下添加:: l& S! s4 A% p5 S) }. R/ Y6 Y5 W3 e
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) I" `, }% J, i1 O# T* D/ ^6 K: N7 ^{9 S2 w9 I* f4 c1 I4 r, E
m_wndMenu.DeleteAllMenu();# a1 z* d) w1 h, v% J& O
m_wndMenu.CreateMenu(this);
4 s. L: ]5 u) l& ^4 u0 J* Om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 {& c: Z$ ^8 U$ E' F+ `6 }* j" r6 @" h, \2 ]3 B5 C2 Z/ y$ W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) B$ b5 I$ q2 z, n2 t( d
{
" J* H: t8 c& I. U$ J) A8 V //P以上级别才可以删除所有道具 j. \; A+ T2 J& D0 `
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 V4 o6 h( X3 C6 ]}
6 O! T3 D$ j V9 P# D4 H" h' x7 tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 `. e! p y L* i% u2 x+ T% i! jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. @* y6 d- Z* N0 G- Z- C8 B# B
m_wndMenu.SetFocus();
, w, n- {) w" }! i; j) e}8 u3 _& ^' t" C0 m9 [
------------------------------------------------------------------------------------------------------------( ~ D1 G l2 y: i2 k% Q! t( X( n% [
*************************; R& r# h g( B
WndField.h文件) X' S% q; S4 H" y8 H
*************************
$ a; N: }* S# y0 k4 @搜索:BOOL m_bReport;1 u' e' t, D& E7 _; W7 j3 Y
其后添加:
9 b4 Z, K5 B/ `9 w8 Y! TCWndMenu m_wndMenu;
2 t2 Q i* C$ J' Q1 \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) J& j, }- @. U6 _9 U3 I2 N
其后添加:
6 Z. Z0 X/ G. l0 z& hvirtual void OnRButtonUp(UINT nFlags, CPoint point);7 a) {$ ]4 n3 p3 @3 I
; [+ i# {3 e& x' O7 _. K* Y7 G: H' y6 J( i# `2 b+ h1 u4 [; a
|
|