|
|
源文件中_Interface文件夹下WndField.cpp文件- }. \% J% O2 ?4 T, h. N5 F, a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ M5 R( X9 o; y
8 P) [8 b1 c( z8 T# ^
struct sItem5 H) p! R1 T$ J- @5 _
{
F; t* N2 m& p4 w* J0 MDWORD dwId;
. @" x0 c; Y0 Q- H1 o$ @DWORD dwKind2;3 [+ H$ Z0 N4 a! x* U9 b* I4 x- b
DWORD dwItemId;# U+ N4 R. P+ R5 B/ }& k! O
BYTE nIndex;3 x+ ]; ?3 h% [5 B6 @* h# `4 M9 C8 ^
sItem(){0 k+ L6 }7 O7 `$ L$ v* U2 v
dwId = dwKind2 = dwItemId = nIndex = 0;+ G+ {( V% b/ d0 h
}
. [. u( m, @) L. Qbool operator < (const sItem p2)
+ f& i- i. d" z+ \% h3 L{ J3 X- w9 E' s, O
if (dwKind2 == p2.dwKind2)
) J9 u1 H$ H j9 }. V# L' Q6 d8 \# l {
5 x4 @, E4 s3 `9 r return dwItemId < p2.dwItemId;% Q( A+ b' c) r3 I6 Y' C4 N5 q. h
}else{
5 Z0 f- b3 k$ d8 X( V% ^7 [ return dwKind2 < p2.dwKind2;
' h- y+ B: m- T( _& I0 A }9 k0 T3 B- a2 Q3 k
}
0 ?9 {& a, x/ L* m$ a, O( U};. i% }8 M2 [$ ^# r' `( l# i2 c: `
class CInventorySort
4 p9 }3 ^+ V6 A# A+ ]4 {{
0 L2 r/ z! H5 F6 }/ t0 W4 Zpublic:, ~ |' L7 S! x5 `
CInventorySort()8 L/ `7 _0 d' H; m" b+ s+ I
{
, q: b9 b) H0 m' Z# N( q( O m_dwPos = 0;; x: V$ P9 @+ d# H
}
, ~1 y$ |* H, |( d~CInventorySort(){}- }4 N' a R$ H& J$ t. @ B
private:7 t' z" c: i: |# G, [+ a+ o
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. K* ?4 r; g* d [* R6 j
DWORD m_dwPos;
/ D! }' G+ H9 `2 Spublic:
; j8 S5 N" u% B9 svoid Add(BYTE nIndex)
r3 e- L& v ]; t/ Q" x{
$ G, t3 B/ [9 n' d' c1 B+ _: ~) o if (m_dwPos >= MAX_INVENTORY)! q/ Q$ C q+ C3 ]: [
{
" Z: k0 o! m, u return;
2 c. j: P% x1 l }
4 @2 [4 A. C I' M/ s: W$ Y m_Item[m_dwPos].nIndex = nIndex;
3 Q# B* Z" z& W& v5 K m_Item[m_dwPos].dwId = m_dwPos;
; F8 l8 g n) \9 X8 O m_dwPos++;
" H2 M& v, d" c: H1 y9 v}
0 H" i! B0 h5 @BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! {4 m7 v4 l1 Y j0 |{7 [/ b9 X1 q9 x( }' R
for (int i=0;i<MAX_INVENTORY;i++)1 K; E: o' u5 w8 k
{
( O: F( H) X% d+ m if (m_Item.dwId == dwId)
3 }$ E$ W# U. u# d* Y {
: S8 g/ H- j7 p1 ]* m return m_Item.nIndex;7 j- ^/ W3 Z4 ~3 t! }- e+ H0 j6 _' M
}9 }% S8 I; r" l# y0 \
}
- G. E: x, k' m. U' r* [5 v return 255;0 A- Q3 d; d6 _8 @$ }
}
@9 m0 v7 p( E- @& u. D0 y& ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 K) g9 z2 f3 u6 K
{
9 Q! z! s4 i5 a' t4 k8 h BYTE nTmp = 0;
* K' d, `' I9 _& T bool bDest = false,bSrc = false;
1 z, \) r, `; U$ _( F- _ for (int i=0;i<MAX_INVENTORY;i++)8 g3 g! _( @. i5 f2 I5 Z* {# u
{- y: @* I* l) u M. R7 H/ ?% M
if (dwSrcId == m_Item.dwId)% y% k) | ]% r
{1 Q" z0 p. ~4 z1 F+ ^! `
//id相等 则 改变对应的dest和src J5 r6 W/ N# T9 K. @1 t
nTmp = m_Item.nIndex;
' H+ H# G( C. y9 D* O- m4 [* X m_Item.nIndex = dest;
( h6 J' O; W) U }
" d& Z0 n$ A2 P0 N( b# @1 D/ F4 D9 W }) P% ]# b4 V6 ^; Y; i
//临时数据保存完毕,交换开始6 m$ S7 Y: h4 v" s6 f% n
for (int i=0;i<MAX_INVENTORY;i++)4 n" B' F0 Q& Q, l+ v7 l A
{
7 W( @( ^8 z$ w: o if (dest == m_Item.nIndex)+ E- O* {2 H6 b% h8 p0 q/ \
{
9 R" U! S K% ^" Y8 q# Q //id相等 则 改变对应的dest和src. y* b8 L ^, b. w
m_Item.nIndex = nTmp;
+ y- w/ _$ n3 q- {% K6 {" q }
' ^4 I' J) L% E( _# f! Z }9 j W% x m% O0 E. f) d! h
}
' ^8 w* l" k4 U9 m1 c- A& @2 p};; N) m. p' A% Y( H2 g; ?1 g; c
-------------------------------------------------------------------------3 R8 s- f0 I; A$ h' |! T9 \, D7 k
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) z! j( f/ z& E6 f" O2 x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: u; x* f; v9 B紧靠其上添加:1 v3 p, N. ^! N, j/ i( S0 m& F
if( pWndBase == &m_wndMenu )
! Q( r6 X, S2 Z% {8 F{' W7 m1 ]5 N& P2 d' H
switch( nID )
# W. K. y( j; b# m5 _8 t {
: L, \$ c8 D7 z case 2:
( c& Z0 c5 O+ t' L [ {+ z3 o; {$ b) x6 Y! ?" p4 a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% ]/ O3 ?6 l0 M5 ~' `8 x0 h8 V5 V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; h" h. ]+ G) S+ U" \ i4 h { {* w5 K. n* P8 ]
break;
' Z1 a! i, h; Z3 |# n" q }. k, D& W$ o1 Y* y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ ~2 ~( l2 g3 U1 S% u8 A. N; l
{
- P7 f) ^$ l0 |% g- l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 m$ C9 h+ q2 A! U8 |
if( !pItemElem )6 B0 T* \5 s) I7 R4 r* P# }( C
continue;
3 k5 k) M' ]; {, g if(pItemElem->GetExtra() > 0)
3 ^6 ~ {6 P$ s( o continue;
% h9 p o0 C4 l0 t+ T+ Q1 A# i if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. B& i0 q/ F' p5 J$ l" }2 \ continue;2 z. K U# j& a$ F6 ~% W6 D
if( g_pPlayer->IsUsing( pItemElem ) )
% i( ]) A: T; c: E$ j continue;
# @ A6 M3 z; o, A& K: p6 v% _ if( pItemElem->IsUndestructable() == TRUE )
3 }( I1 ?0 K+ Q {2 ?8 ^! l' e {/ ^9 A' Z2 R8 U- L) L
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. Q7 p- y' E& q% o/ q% K. I! L continue; Y+ \, e% M+ X$ i: ?* x; ?, l8 K1 l
}
9 _% {8 S( U, ^5 G g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( k2 f* U/ O: k6 s }1 H: D' j5 u1 [& b
break;
Q( W f% t6 Q' m }
% K# m) \4 ?- Z& z5 n case 1:
9 l1 Q9 H. U3 X G+ C {
, z% I* Y5 d1 U7 y$ N' c //整理背包" H2 a5 e: P( K
//////////////////////////////////////////////////////////////////////////
5 s: }2 w; [: ^% I* G //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* @$ b; G' c" K) |& u+ x //////////////////////////////////////////////////////////////////////////9 T! r+ q% c" i7 T- a6 q
//////////////////////////////////////////////////////////////////////////
V" B* x% q1 I! e CInventorySort* pInvSort = new CInventorySort;
4 H, ~/ ^' [" I( w vector <sItem> vItem;( S; R8 T, ^0 a9 n) Z. i
vItem.resize(MAX_INVENTORY);//初始化大小+ X x+ {/ c; r' A" `
//////////////////////////////////////////////////////////////////////////
: A! w4 n9 Q1 p; ? //填充数据
& y! e; M, B! M3 o+ v for (int i=0;i<MAX_INVENTORY;i++)
$ Z n: R, O% | {# G/ P2 e; C% j6 G" D$ V2 C! I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) y" |) L1 K$ M if (!pItemElem)
' q6 i) S" M1 ? {7 ~6 S, r! K8 ]3 s' \
vItem.dwKind2 = 0xffffffff;7 j. b) b N' m9 Q7 ~
vItem.dwItemId = 0xffffffff;
% P1 A/ k# t' E0 n9 m" y vItem.nIndex = i;
$ x& D" q$ S0 n3 h, {& n; C }else {
6 M, }; r& l6 t' U, `8 { ItemProp* pProp = pItemElem->GetProp();
9 O o( j* S2 x3 i; @7 x, ` vItem.dwKind2 = pProp->dwItemKind2;6 N! ^) T9 j. `+ C" w1 d
vItem.dwItemId = pItemElem->m_dwItemId;
v& x& I; h( u# E vItem.nIndex = i;! e# \( X" x. T/ @- a) O ]
}
- ?: M- @! M0 v' c //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ b8 L" _7 `& i: }9 V B) L+ P }
2 m( K {1 n% Z* E- |! H //////////////////////////////////////////////////////////////////////////! e( ?' s: P$ F3 l/ e
sort(vItem.begin(),vItem.end());//排序
# V) R$ w7 q2 Z3 u( X //////////////////////////////////////////////////////////////////////////
: i% q5 O5 w9 r6 E$ b //交换( ]8 y! t: q9 k
for (size_t i=0;i<vItem.size();i++)
% k/ ~9 q, Y* |# E9 v# ?6 b {
) b5 x4 X. J$ ~! N0 a! } //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; l% I% j- [# L4 T8 ?+ d" |5 r pInvSort->Add(vItem.nIndex);
+ m4 \" f! D$ g& N5 y }, g7 N- d' z3 A4 o7 [* [
BYTE nDestPos = 0;/ Q; f5 H) U& Q
for (int i=0;i<MAX_INVENTORY;i++)
9 c' W) e, U6 L5 n {9 }" t& l% d! }+ _0 ]# s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 B8 G+ m, W# U' Z
if (pItemElem) P- v) F( g7 q* P- `
{
/ l+ ]8 G2 i% ^7 u2 a if (IsUsingItem(pItemElem))
" r$ N1 N! O0 J2 F+ L6 t, S3 ^- F# f {
, v5 m9 [+ c) ^9 ~" X3 Y //这个位置无法放
1 }; `* T* T) b2 O nDestPos++;& S- X2 c! V: ^0 x. n+ p, G
}; P6 F& O8 v% y$ ^ `
}. v* {0 {1 x+ R c# g5 s: k% P# C
BYTE nSrc = pInvSort->GetItemSrc(i);/ B4 L' @ J, }( C% x" x! d
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 b* D0 g( c4 P# a2 l/ y if (pItemElem). Z3 J, m+ `/ X# K
{
) i/ ?* C6 }8 N! O, w/ o4 w if (IsUsingItem(pItemElem))
, _# I1 u" h) o9 e% ] {
! E- ^3 V/ n! R+ Q1 v2 k7 L7 d //这个道具无法移动,跳过. d1 l7 [* E( }7 s9 D$ E
continue;6 X( j) J t0 X
}2 F) C# M1 R$ r
}else{
! K1 X8 L5 D0 v3 R7 Y. X; }: E# } //空位置 不用动+ R) t/ r2 U! O. ]" {4 J
continue;5 d: s4 w5 V1 v! }) N6 ?
}
3 g- ]7 x# U& ? //////////////////////////////////////////////////////////////////////////
8 S, W& H* h6 [" L$ {. z% n //开始移动
1 i) X+ L* c2 L if (nSrc == nDestPos)
/ [; ~' d" u- h. r' |. c% g {
# r* r% N; A, W5 r" c% x //原地不动
! }2 M) D! h* } nDestPos++;
+ @( A: H1 `! R9 f; d$ V continue;
# N. P9 y0 |) ^3 ^! S# D1 f }
. P# f) Y4 B8 Y! @4 P pInvSort->MoveItem(i,nDestPos);
q* v' J3 t: ], _! C/ |7 f5 o; q, ^ g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 j' @' [: n9 u- m- O
Sleep(5);& A6 l5 T) \* Z$ o$ a: \6 u, E
//Error("移动 - %d->%d",nSrc,nDestPos);3 a/ {5 C' T% c% [5 {1 r+ {
nDestPos++;! c9 h! A) R& b3 T G& j
}
- i$ P6 g- l, c. E" A& C8 U% p8 { //取第一个元素的信息
6 ]! G( I' m) [2 e1 J, W9 R- T /** J- F, G1 K9 l: U4 g" _; W
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" |3 |# z3 H( l
{
3 E0 J- w+ h& o5 f/ W1 s Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ m, _( v) D4 m4 m% H1 Q @) T g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) h( P0 k6 b: I
}
+ E; D- C' F V */+ c5 m- L5 M8 x9 B+ `
//////////////////////////////////////////////////////////////////////////
4 E+ C1 Z. z+ ]0 w break;6 K& e* w9 A+ v; x
}
) o( T) p: Z" C1 `' f; ?0 z8 ? } 4 @5 [" c9 T- [6 Q: R& |7 o
}
% }$ U# U) _1 S: S& P$ Wm_wndMenu.SetVisible(FALSE);7 N0 b K4 P* w) F0 }
, ]$ V: K" B3 }: O% O
--------------------------------------------------------------------------------------------------------
1 X/ B$ y- C# f+ A3 D: J' n0 N搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 Q) h8 o* a+ G, S3 j% l9 c6 F{
" E# Z, p5 B$ [; p! DBaseMouseCursor();
, v0 {; b. ]% T+ [}$ X' |: y, `( _! A/ c
在其下添加:9 Z" D: [; ~1 A" `+ q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ m- I$ [! U- G- f. H7 N7 _{$ I; X. a f' d# @1 n$ ^, D
m_wndMenu.DeleteAllMenu();9 e! i0 u2 u$ v% Q
m_wndMenu.CreateMenu(this);2 S3 D! H8 S5 t3 `" ]4 }1 q3 c: ?
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& k9 e# n3 m) R7 r; S9 ~, n
6 y# e! h, B$ x& l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( ^9 k7 n' _. ~7 [7 T{
6 [ s- K7 l! {7 t0 c$ v //P以上级别才可以删除所有道具
' T. w4 ^/ k6 M; d9 D, D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 J' c- m8 Y, A# R}
4 _/ _" E1 q' P5 a. I5 Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 g0 S! q1 d7 \2 ~m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; Z% O- Y! {" t, Y' Tm_wndMenu.SetFocus();
: [3 V, P: B* z7 \$ S, U2 {8 d; Z}
6 d4 f6 p ^+ W) N' v) b------------------------------------------------------------------------------------------------------------1 W% U* p, c8 C* `
*************************
1 H* p7 }* F& H4 n4 O8 U3 VWndField.h文件
; B( J3 @( P, @/ S# s*************************2 y, L5 ~- b V+ a4 s( f
搜索:BOOL m_bReport;* q6 [) T1 D# X8 `& T7 Q$ I
其后添加:
5 x) `' z6 D" s8 Z9 i. y5 h' |CWndMenu m_wndMenu;9 c' [, s; t( i4 m7 D2 q3 q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 G, q& P% v" o其后添加:
u; \( |0 u, p, ?/ O& x8 s- D2 M8 lvirtual void OnRButtonUp(UINT nFlags, CPoint point);
! c5 t6 |) \( U7 C5 M( @3 Q* v3 Y o! Z5 e% z7 |: }* H8 C2 V
s! X1 U/ \% @2 P
|
|