|
|
源文件中_Interface文件夹下WndField.cpp文件& {2 Q! b, ~# ?( z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ d% }5 h4 N2 p7 g9 k$ m
3 X9 C* Y* Y/ w& Astruct sItem$ `% `* J0 b+ m$ @
{4 Q: D% x$ o' R1 ?" r
DWORD dwId;7 Z; y' ]$ o, D4 J6 {
DWORD dwKind2;
* k( W6 I; Q7 V4 J" [DWORD dwItemId;
; G, S* }+ \. T% I3 Y1 @# cBYTE nIndex;6 j1 R, R- u% j
sItem(){
4 j2 q. p- p9 m! J dwId = dwKind2 = dwItemId = nIndex = 0;
3 M F4 G9 @2 r( A}1 b2 S) \* O' w% l6 }: _
bool operator < (const sItem p2)
8 J R' N1 G. Y( v- A{$ L* Z5 @( \$ d4 }3 w2 W8 D
if (dwKind2 == p2.dwKind2)
0 f5 X" V) N. _* l3 C0 u {
. K5 M. ]/ H T: B( X return dwItemId < p2.dwItemId;
( M# {% z6 w+ C' X1 ]9 o" b4 H8 A }else{
: V" |/ E2 i$ ? T& e# S) W return dwKind2 < p2.dwKind2;& z0 Y0 M3 \/ \0 l* d2 _
}- F9 X. U: V n% }3 R. s) F, Z
}$ n! r8 s) C2 i6 T" J: ~
};
; K4 l* r( o% l' J0 [6 I' K) _8 kclass CInventorySort$ Y3 \& b% ^2 z, i4 n# L
{' n' G# ?8 Z+ p! {. K
public:) ?: B3 ^4 X. i& ?. e ?! g
CInventorySort()6 X4 E' M$ Z- A1 a- k7 I5 y/ R
{
! D& Q: D/ [8 _- Q* j1 Y! |; n m_dwPos = 0;4 {. }! i! t% @% M+ a$ g) h" S
}
7 b2 h p1 H, V7 L5 b5 v1 ^0 R6 i~CInventorySort(){}
0 j6 P: ^4 @8 K4 n% x: `& eprivate:2 m) B( F/ o$ Z- R7 M `' G3 O6 P
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 L7 Q; `* F5 u; C6 B9 W
DWORD m_dwPos;
+ ?* B# F; H1 T: Epublic:/ y* @ j5 t+ {. j m, |0 C
void Add(BYTE nIndex)
3 y" v% }9 N; k* ~{1 h2 W; O3 [* Z9 [) m9 F7 ~
if (m_dwPos >= MAX_INVENTORY)
* F$ G& }7 x1 [- K* G; K {3 l7 [: d! |& t0 Q ]! y! U$ p
return;
/ Y9 ^ L8 e# a+ B9 x }% ?$ r8 p) F8 A6 ]0 k+ b0 k
m_Item[m_dwPos].nIndex = nIndex;
4 I) ]1 W" g: m; g$ |8 P( ] m_Item[m_dwPos].dwId = m_dwPos;
1 U- }9 H8 d3 @- B m_dwPos++;( z# o( F& G$ W
}* j/ g7 S! }0 P7 d! A" ~: x5 U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- G0 f7 ]+ W. x) Q
{# V! _1 P# P) z3 T2 }
for (int i=0;i<MAX_INVENTORY;i++)
6 T7 ~7 _, I, N' P7 a' H+ `) Z {
F3 N7 x& z; B if (m_Item.dwId == dwId)
9 Y3 h6 u2 G/ H* C8 f7 p {
8 F- B( k! Z" W; W return m_Item.nIndex; L7 o) y0 z! z; ?: U* u ?
}9 r, U3 L6 I* E9 L% D; A
}( i/ O- h* e4 ?$ t) y6 m' [7 x6 [
return 255;
, q7 Z! ]5 x! x; Z/ b}. {# _; |1 I+ I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ C' X+ G& ~, ~/ R0 h{; \4 w; n- p7 j& D9 K3 C0 |4 l7 [* ]
BYTE nTmp = 0;( X) }* @9 z- r8 L; ~2 ^6 U& p) K
bool bDest = false,bSrc = false;
! k. f: O2 a1 i for (int i=0;i<MAX_INVENTORY;i++)! o1 a; N: q! g$ T7 Y: c, _4 N' G
{
( N, V: M: D- `6 S7 E1 P- [" m if (dwSrcId == m_Item.dwId)' [3 N g3 }( j3 H' E7 T
{( l- W8 [0 E8 s7 K$ L$ T. w; h
//id相等 则 改变对应的dest和src( o0 D3 q5 ^, O2 h, }7 _7 t& y
nTmp = m_Item.nIndex;
" B3 v, C5 g" E- H0 l m_Item.nIndex = dest;
2 ? G2 _& N" E" ^' p4 p4 j }' X, A, J p$ M2 U
} [. a* q/ i/ f, s, \7 |
//临时数据保存完毕,交换开始
' h" L$ H4 k6 g% W for (int i=0;i<MAX_INVENTORY;i++)/ L: E. F6 g+ P
{
8 h8 `& C- {0 Z& ` if (dest == m_Item.nIndex)
7 N" Z# j* ^! H e6 y$ @. S {
+ Y/ u9 s8 W# O5 W% r; c8 }: K1 R: [ //id相等 则 改变对应的dest和src/ S4 ?* H/ g: L9 ~9 F
m_Item.nIndex = nTmp;$ \- @+ M" Z9 \$ O5 Q
}
3 W% V9 T% T' s6 a1 `6 s8 F9 n! S# |8 [ }
3 l# e- M/ E$ E" h+ f4 t! ?" ^1 J}
. c/ v' A1 [/ a" j};
4 I- \4 Y6 g; q; n# H" N; X/ n-------------------------------------------------------------------------
+ V1 f6 A3 q7 \* a- c5 _+ w g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* @1 ]' n1 ?! o+ R3 u' F
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* {" _' s5 `! T2 R2 F5 u1 B
紧靠其上添加:
6 d" L0 q7 p- ? ~0 A. ^if( pWndBase == &m_wndMenu )2 ^# }* z# ]5 ~2 M R
{
; b& y/ x. G$ O switch( nID )7 P0 k& T h2 u9 F6 l5 k6 q. U
{
& n" ]& K9 ^; I/ `0 ^: p case 2:3 i6 n" E, r$ s" q+ K
{
, ~/ k7 {4 D$ V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 d5 u+ R( r+ @# Q* U; Y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% i8 ~4 H( a4 `" ]+ Q {! W6 i0 c4 I; F
break;
* J' p& O- g" S" s5 ] }
+ _# d4 C m# U7 A1 C. [- e5 R' r for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 G0 t! r# w( `6 w
{
# A( ^9 A' Q' H% t. o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 V! L0 s& m3 q, S0 w
if( !pItemElem )
8 y- g, T; e. w continue;& P. m$ L& S) K. P% z
if(pItemElem->GetExtra() > 0)0 f+ L6 {" e$ l( w7 ^' ]9 ~
continue;
' N. E4 q. h6 H! Z7 v# e if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - D8 x* W0 C3 _" T
continue;; ?8 H G; g( O1 W6 p/ m
if( g_pPlayer->IsUsing( pItemElem ) ). E- G5 F, b( g/ F$ S" ^* F
continue;
; p/ B! @; p& c; b- i1 m if( pItemElem->IsUndestructable() == TRUE )0 T% R) T( d% ~6 E5 T7 O
{0 G6 O/ @. u$ {7 @+ p
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 ?; C3 g2 o- ?6 H8 n) J: v$ b5 ~ continue;
/ h' @+ J$ v ` }+ Z. v8 r; Y1 R
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! Z* y5 m4 e* M* ~4 Q
}
$ H" Q, f+ c y y5 K! E break;
3 H: D5 d5 q7 J/ D1 a [7 L- [ }9 G4 U' B6 k( e1 s; I4 x9 U0 @ f. Q
case 1:: f# q# E6 A+ s1 _' z
{
0 e! f, R- u& _7 b: F- d //整理背包
' ?! a, ]9 K8 n- c1 N- R i //////////////////////////////////////////////////////////////////////////
# V3 J! M$ R# W: u //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 ]- j' B ~6 w/ @5 x. P
//////////////////////////////////////////////////////////////////////////
- u$ p6 A; \. i- Z //////////////////////////////////////////////////////////////////////////* \( F5 b6 i: m6 h) D
CInventorySort* pInvSort = new CInventorySort;1 B+ r. J2 p( X* [# Z- T
vector <sItem> vItem;
. l- ~# A2 `3 u! a vItem.resize(MAX_INVENTORY);//初始化大小6 A' O5 V& L( b' v9 J3 r! W9 A
//////////////////////////////////////////////////////////////////////////
; W* [1 T) j$ q! A+ K: L( t //填充数据- z& u" m/ t# n, ^
for (int i=0;i<MAX_INVENTORY;i++)% ^: J0 S" f j9 A9 _6 H+ i+ J
{; `7 |4 W, b7 Z+ P4 N/ t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 V7 a7 o" f5 C6 k8 [
if (!pItemElem)) T: `) B3 X+ m) B( r- t
{7 n" Z5 V& D% y4 n: |
vItem.dwKind2 = 0xffffffff;
% U6 ^- a( `9 y3 x4 R. l" Y/ O vItem.dwItemId = 0xffffffff;
/ D0 F% f( a1 a, c: ^ vItem.nIndex = i;$ P! O4 Q8 l' W4 F! F" {* ~/ q
}else {, X' D* D2 R3 P1 {" k: {
ItemProp* pProp = pItemElem->GetProp();, Z+ f0 U' b" j) O# k
vItem.dwKind2 = pProp->dwItemKind2;
2 V* F' A0 p7 C. a% K- k vItem.dwItemId = pItemElem->m_dwItemId;& S4 U) U7 t, w6 a7 |
vItem.nIndex = i;
5 R, t8 d% B+ O# J' ^: \: L! | }6 G& ]! F& \% i$ M* p$ k& C& a4 Z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ x! g2 u D% c1 k) F, W Y
}
1 L% u* ?2 R9 o% V, S //////////////////////////////////////////////////////////////////////////
9 J) ^8 E& m2 K/ P; |% E sort(vItem.begin(),vItem.end());//排序3 j0 K( s: t2 y) ^+ d
//////////////////////////////////////////////////////////////////////////# P2 G# A5 D& f0 J& g) q3 k" @
//交换2 B1 q/ L# F4 {
for (size_t i=0;i<vItem.size();i++)7 s+ y. @( ]( D! s6 x7 [0 e; \
{2 X& s$ J4 Y" h
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- t e P1 v) G$ {) B pInvSort->Add(vItem.nIndex);
) F7 Q. Z- O9 J* ^ }
* W& l _7 { A% m! W BYTE nDestPos = 0;3 ~' v" O% g- ]: K' J [) A
for (int i=0;i<MAX_INVENTORY;i++)
9 f/ |+ L5 o8 d9 v {) k/ A! q g9 k P3 `7 |6 ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ r1 E4 Z: d2 R7 r: S4 ^3 r* [ if (pItemElem)3 f0 X1 `7 `2 G$ Y* g' |
{# W. Z# m3 U7 o' [* Y" c6 M! T/ F
if (IsUsingItem(pItemElem))
& a! R9 S, _+ i {9 A1 S8 y8 P! W$ y& J2 r+ T
//这个位置无法放) |4 i+ X3 Y4 J4 J3 b2 X: O4 D
nDestPos++;
6 Z( U) `" r9 l# N }. L: y7 z7 f+ k1 A+ U4 [
}
3 d' j9 I* u2 ]3 J0 s BYTE nSrc = pInvSort->GetItemSrc(i);
4 d; G+ `4 d; E S3 ]* g; M pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- X! `' i; @ P4 G/ k
if (pItemElem)
9 a4 R1 D! t5 T {
, ?% _$ G# C4 }" f8 L if (IsUsingItem(pItemElem))) B( r \) U# j7 j/ b) t
{& z- v" ]+ l4 G) A: D% x! C
//这个道具无法移动,跳过& H7 V* |( J6 ]" Z
continue;- [+ N# {( ~* c
}3 B, L! Y- M) p2 Y
}else{
: n" {7 B& e" R/ E$ c //空位置 不用动2 U+ ^, N; A: E! _; c" H
continue;4 ~0 ~$ W) O, \7 q5 l* w. n4 _' k
}
4 ^+ t# z E. w6 f //////////////////////////////////////////////////////////////////////////
: P$ M5 ]7 H+ B" {$ O8 \ //开始移动
- l+ V4 M! L. K) V" N+ A3 {, K if (nSrc == nDestPos)$ X8 @' F* m4 i9 @) d
{
. W8 Z# k2 L% d: v. V //原地不动9 b3 T. D& J0 o; W1 s i
nDestPos++;. [ x2 ?5 K: Y7 u2 H
continue;
( V3 R8 e6 m& y( W" o }/ @1 m0 M2 z' l' y; ]1 X0 L/ Q! Z
pInvSort->MoveItem(i,nDestPos);* k& |8 O5 q& u6 T
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 D' ^' Z1 I) c Sleep(5);
" I4 t. ^9 ?# v) {/ U //Error("移动 - %d->%d",nSrc,nDestPos);
n1 u( M# }! p nDestPos++;+ G* W9 _' d2 c. [
}$ N4 Y. g) r9 |: a( [; i
//取第一个元素的信息1 N% N9 R: E) {* k2 c$ W
/*
2 q+ s& D) {/ D, Z if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 _+ w- {6 ^% X! E) f {
# a6 z1 C1 Z0 \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 Z G: Y. o$ P8 h( `- j6 c. c
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 F- s% i& J. @5 I. ` }, `& f; y7 \# Y0 R. n
*/
' S3 @7 _6 a- K% `9 P' x //////////////////////////////////////////////////////////////////////////
8 e- N6 \3 [# D% n, | break;" B% y* h( k- L6 l M; D; g
}
8 Z4 I- z: y( @1 ^' H, | } # u9 `4 e: J$ Z8 M1 C O8 F$ M _
}
4 N2 s. P" j7 O2 jm_wndMenu.SetVisible(FALSE);
2 ` P: o: Q3 O' g) ~% K6 G/ W3 I6 W
--------------------------------------------------------------------------------------------------------0 y$ Y+ ]# P5 h& f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: @) {. |' [; \{5 ]- Z+ y( r4 K% T; {7 |' Q( O" M
BaseMouseCursor();
4 s/ k5 [8 U5 i$ L}
: `0 T8 S G3 P5 a$ z/ v6 A1 w在其下添加:& E. b/ G1 r5 V
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 m/ I2 s# j: f{
# ?8 w5 j) B, N3 Q' [m_wndMenu.DeleteAllMenu();7 K/ l4 N; E3 W( D9 B: G$ V
m_wndMenu.CreateMenu(this);
" j: E! W9 J/ f$ n7 ?! N, X+ Vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% l# [" ^7 O4 u* S" A2 O
! M1 P; z7 Z* x( R5 G( H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* V' m+ k2 s' X; c$ |3 d
{
3 c" I: t0 D! b0 u- _ //P以上级别才可以删除所有道具( P- h, S- r$ T! X
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" s& ^- H/ x& N5 F! O3 b. o}
) ~0 p; v* r0 Z& Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 G$ u. r) M" k+ r! B' Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! c1 n) e5 t$ l
m_wndMenu.SetFocus();$ |- A! p8 F5 z- ]
}: q* ?3 F/ r/ t; e9 e# Y# w
------------------------------------------------------------------------------------------------------------( d/ v- f+ F' Y# v) a) m
*************************
% y. w+ c; R# gWndField.h文件* y7 L& V: b0 Q
*************************. Q" w# f7 n) C/ i1 Y" G/ t5 g
搜索:BOOL m_bReport; M: ]* L. X. ~% y/ J# {) c
其后添加:
; u6 q3 H9 H' SCWndMenu m_wndMenu;
* u! }7 e: V; ^$ a* z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 b. m4 c% A% F3 l其后添加:
( J" h2 X k& L. K, mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 O( J+ I* v _: t2 D$ `. ^& E6 p9 K
: Y! o/ v' G3 y) V3 M6 P: N! G
|
|