|
|
源文件中_Interface文件夹下WndField.cpp文件& q* n5 C$ D- N( Q( ~5 p
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ R1 q" S5 H8 ?9 Y5 T# X, a( U# v0 Q( m5 _. U
struct sItem6 K9 N* |% s% ` e
{
h' w5 p8 i, K! T, ]5 p7 l; [! [2 VDWORD dwId;
, U$ }' E& B* X. b( ?0 o7 gDWORD dwKind2;/ [) [1 L& A, z4 i
DWORD dwItemId;; f( E; h7 W" L/ m
BYTE nIndex;* Q" F" _) R3 P& u" R* e: q
sItem(){
3 R1 }) v. G# A, [6 M dwId = dwKind2 = dwItemId = nIndex = 0;. [! T, u& r* O8 ?6 W6 E
}
" M9 _* E2 N. i9 @$ W' D( Fbool operator < (const sItem p2)% z0 d' H: @1 f; ]9 C- y: T# } ?
{( c) M5 v4 I; l7 H v2 Q# u
if (dwKind2 == p2.dwKind2)) H6 w- V/ o& f) a6 q) Q
{) C9 d3 l* w2 E! W |9 `
return dwItemId < p2.dwItemId;
: j8 _. R3 @/ D& v6 M3 t }else{, r; C0 u! l- G0 X9 {. I# b
return dwKind2 < p2.dwKind2;
! D' ^9 G I* F }
( C4 @6 U: o" r; C+ q}
: Y: u! f1 c7 F9 d( T) [* f" t};0 S _! V$ u' o( J" d- \9 X
class CInventorySort" t X. w, B* X7 G( \* s/ w* R
{; W @) l9 W1 d1 ]" E
public:0 [8 W* a0 I! L& ?& p
CInventorySort()
7 \+ f7 X' z0 ^( ~- m; K{
) I. s) Q! H5 \: U9 s m_dwPos = 0;2 z y) s+ h4 I: X/ m$ a
}
/ H& x/ A* C" Y7 I6 }: r) y+ ]~CInventorySort(){}
3 w5 F& ~. l! lprivate:3 Z5 G) V! E6 i |- s
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 j" n5 Q' P) p
DWORD m_dwPos;
3 p. L. |( u8 c2 B- P# u1 q F5 @public:
- W) r( u# ]5 s; v* f/ |" Zvoid Add(BYTE nIndex)
9 k# ]& B2 n; `" _: a$ m{ J I) u# O3 t
if (m_dwPos >= MAX_INVENTORY)2 k0 N9 P2 `: ?% W4 E' q. N
{
" `( k$ L- r& g! i/ _ return; R2 a- |) _4 ^: d, _9 {: b/ m
}
c( g. K$ t* ^1 f( g# Y m_Item[m_dwPos].nIndex = nIndex;
1 J6 S5 M8 v: x' g. K m_Item[m_dwPos].dwId = m_dwPos;: A; d* J7 [' g4 U8 P' C& `
m_dwPos++;
+ X& q* u' h/ B$ j+ Q7 Q}
* J/ V6 V& ]3 {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 J% d }; n9 J% |% u3 L8 o
{
, E: N) P( O0 C* V6 k2 t for (int i=0;i<MAX_INVENTORY;i++)
1 n; @. h9 i( x; K P! e, n. e {
; p3 l7 P" B4 @ |; N if (m_Item.dwId == dwId)- C/ y/ x3 Z" S% N
{0 L8 E: M& m4 ^8 M* a
return m_Item.nIndex;
! n( a& X1 f" i! q3 H }& w0 Z; s8 G0 }' Z
}+ q ?; d5 ^7 C( q% a
return 255;9 Q' l: Q, \. ^6 m) d% L" _
}
) d& x0 u+ K( d$ Y# e# Y$ U) H' C' Evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* f D ^, g4 G" v& s* R{
, |; {! ]& F) v( E BYTE nTmp = 0;/ L. L- A0 g* W2 A4 n% O6 z' ]* a
bool bDest = false,bSrc = false;
) a) g3 `) O* ~4 K6 ` F" z for (int i=0;i<MAX_INVENTORY;i++)
! `0 u! W. m& q3 b) w, b! X0 L0 g7 x {
4 }: R% }& q1 F if (dwSrcId == m_Item.dwId)
- G6 h' O9 a% ~: {; _ {* ^: K) g2 Y- |
//id相等 则 改变对应的dest和src
0 _6 ]3 J# y+ O' e nTmp = m_Item.nIndex;
9 P3 S/ d" [) A! W/ Q5 P# b/ ?) M m_Item.nIndex = dest;
8 x, v$ G/ V/ K8 }$ n8 ] }2 P* O5 P' q" V4 U+ Z$ c
}
1 w( ]( X, V! W: D //临时数据保存完毕,交换开始
$ i- ~* g7 X3 Z8 b) A2 q4 G for (int i=0;i<MAX_INVENTORY;i++)9 Q) o% h4 m" v# f! M5 B) ]
{
" P( ~ E5 [& z2 z3 [6 I if (dest == m_Item.nIndex)
) N" n1 D# _& t( ] {
L, ]6 H- |* h. n //id相等 则 改变对应的dest和src
" H0 Y0 Y$ d& h/ r6 M: Y4 I m_Item.nIndex = nTmp;
0 ~5 q: V V0 t R }4 V) Q& }% g g- N4 E! t5 A+ E- c
}/ a7 M5 Y) D& x) {
}
1 p6 A* B) z' p3 F5 }};
5 u$ l+ k" G( R+ u# A-------------------------------------------------------------------------8 {/ v! K: U+ O( G7 }" j3 i! w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' e/ {9 h! D1 G8 `/ }7 i9 l
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ G4 R0 O- ~* W% A
紧靠其上添加:
; a6 ^5 l' n" K- e ]if( pWndBase == &m_wndMenu )* {# r* a. a3 g: h) Y9 g
{
0 p9 d4 x5 x6 s7 u) c$ [; r1 K9 X switch( nID )
2 j5 g4 d" l; |. a {
; G# G, P& k. D- D' q case 2:: L/ @0 K# Q3 ?3 K2 b& b7 z3 |
{
& e% X1 @# Z2 g9 j, _) q: T1 P //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
( c; r0 q+ s) P1 M1 H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( Q4 ]$ T$ [9 D& H/ q1 ~ {
; h7 R3 x) f ?+ ]- o( F, }$ t break;
# K0 V* J1 J" l }
( T W. f/ t$ r for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). h4 o' p2 h H* f1 D& R2 @
{1 O( ~0 k: K" }* t' x. K K7 @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 g! N4 Z! ~* ]9 P7 q, m& `7 i
if( !pItemElem )6 {7 Q; X& O% A7 s" s# S1 g. Q$ D! P
continue;# p9 n! C+ z5 m. L/ u7 z3 t
if(pItemElem->GetExtra() > 0)% Y( d7 P( N7 }, n4 a1 n
continue; z F' d: U* X: v7 b
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! m- X4 }9 _5 E5 C) I: R continue;
" ?/ {6 L) O& q$ S4 X+ I7 V if( g_pPlayer->IsUsing( pItemElem ) ). V! o, O* \& p0 N4 P% s
continue;
) `+ _+ @( B* @3 g- O& v/ y if( pItemElem->IsUndestructable() == TRUE )9 f9 {9 b6 `7 Q' W. ^2 o
{
% H+ x) e0 v: T; f g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* J: x( u' j( z0 `8 ?, p2 A continue;. x5 \% ]) L0 j1 m2 b% H( R" b5 J
}
( W7 n0 o; J2 l% V1 A' f0 u g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; {$ B, H& d) i( i/ u
}3 V. X( R- }& r
break;& T( k- ?* a+ e$ }! y- I' M
}
; h9 l t- G0 r) d3 W case 1:
4 Y! Y7 E+ p7 P5 \ {
- i6 }) k# T7 X% e, E+ ` r A //整理背包0 C, z2 G0 H) P3 Y
//////////////////////////////////////////////////////////////////////////- B3 }; o; O1 Z- }
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: N$ w- C( G* G' I. i
//////////////////////////////////////////////////////////////////////////
^* N j9 ?6 p; M //////////////////////////////////////////////////////////////////////////* y7 j$ G( d: j% Q+ I
CInventorySort* pInvSort = new CInventorySort;6 {" k# p% l7 z+ s+ V" U5 D# C
vector <sItem> vItem;0 v* D! N4 d# v3 E7 e; K% s1 i
vItem.resize(MAX_INVENTORY);//初始化大小: ^6 H: [" @ h/ L9 U2 {1 z
//////////////////////////////////////////////////////////////////////////2 n' E9 |3 t* l/ K: D) h$ S; ~" k
//填充数据7 u) g# p. g2 E" o& D
for (int i=0;i<MAX_INVENTORY;i++)$ K/ \! d: y( w, J/ g# k
{$ C7 S: |, @0 J- }* N8 U- S2 D! k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% [7 o' V" L+ { if (!pItemElem)
4 {9 }7 b! {: d {
( l$ h( q- T; P! s- V% b1 [0 w vItem.dwKind2 = 0xffffffff;
1 ^& f* V6 U2 u! v' K3 r vItem.dwItemId = 0xffffffff;
* e5 Y! Z6 e3 z: f vItem.nIndex = i;
3 X7 T. K5 p/ |/ B' T4 \7 ~0 b }else {3 B" M" B' @; V# P
ItemProp* pProp = pItemElem->GetProp();
R$ x9 g0 W `8 M4 W3 ?* R vItem.dwKind2 = pProp->dwItemKind2;
/ V" z W) ?% `1 z* X+ E' O T vItem.dwItemId = pItemElem->m_dwItemId;" w; i/ L7 K; e8 Q# L, G
vItem.nIndex = i;
7 t& V6 F) S+ E d- P }% G5 @' U7 j7 a, v1 J3 X
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- j, ~* i! f% G }/ F! e! V; Y* O1 i. v
//////////////////////////////////////////////////////////////////////////& {0 x4 Q1 r* t0 a, G
sort(vItem.begin(),vItem.end());//排序
5 Y1 J- ^# [/ f: ` //////////////////////////////////////////////////////////////////////////
5 h+ |' d7 [* @# D, k //交换
! E9 E# J8 e0 b# w for (size_t i=0;i<vItem.size();i++)
4 }" O+ z$ _7 q { S g. R+ d2 K% E: E
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 N# ~8 u5 c4 k& O' |; G9 v; B
pInvSort->Add(vItem.nIndex);
! C4 }7 d% h, y7 x }
7 [' i; [: J" X BYTE nDestPos = 0;
8 q y. n. @0 z/ b' a3 I: e for (int i=0;i<MAX_INVENTORY;i++)4 E. K( ]6 K( u; h# ~8 z. l$ w% y+ s
{
4 ^; j9 H# E6 \" {! v CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* o4 C! ^& O- K1 R& l
if (pItemElem)6 S* Z0 E. ?% o( m% \- `+ |
{
L# R }4 v2 k if (IsUsingItem(pItemElem))
1 |1 p+ F# v: [; q# V9 ~ {
]( ?1 b5 m' ` //这个位置无法放
6 ?8 i) \- U( f0 k1 \% I$ B/ Q' z nDestPos++;. M' J4 n" R* e" c
}$ Z! K. k9 [, @- X- A( q c1 ~
}4 g* z; n! d3 L) B
BYTE nSrc = pInvSort->GetItemSrc(i);4 v5 h& v! o# P" x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) t2 U4 d Y/ E! g% }
if (pItemElem)
- a: y5 Z3 \' W4 a$ c5 z0 G$ J {
% c$ N+ |9 J/ O. p1 C( g if (IsUsingItem(pItemElem))
. L5 Q* H5 g6 U' P1 s {
7 M# U0 \1 n, O5 z/ _5 n ~ //这个道具无法移动,跳过
5 U: R9 c0 h% T) s( v2 f/ N2 h continue;5 c9 W0 @* r; n& s0 ^6 Z9 }
}
7 r$ @! S- t4 @( { }else{
M! G O% N f: f& ~ //空位置 不用动+ h, a4 ~: i1 N7 A! f M" {, `
continue; |6 E6 k- u u* k& Y
}; y$ C7 E- S( C" V) V
//////////////////////////////////////////////////////////////////////////1 B. Y" X7 f& d
//开始移动3 ~: m3 a4 h! c* f+ ]8 w O( R+ Y% F
if (nSrc == nDestPos): K# F+ G' B) w" Z
{
4 a. |/ W. T) L //原地不动3 \$ q: l0 ?- z+ o, O
nDestPos++;% a. `" u$ D* {9 P; q
continue;
& `. S- t2 a. v1 R3 B2 @2 t }3 r" ?( O3 }3 p4 _7 I9 p
pInvSort->MoveItem(i,nDestPos);
& B6 s0 v' v( z$ y! m g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- `# t- L; p8 `( \5 M Sleep(5);; Z8 Y+ m; @& E- Q; J7 d: V% T
//Error("移动 - %d->%d",nSrc,nDestPos);7 Z; y3 T5 d1 O) u# {
nDestPos++;# e' V M* r% c% l
}
6 b5 R' c' d7 U6 o1 r7 t //取第一个元素的信息
( L$ M( f6 d7 v- w1 q4 z /*
/ h: Y7 ] U7 w. l! l if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) o3 N! g# S s; H% j" o% e
{+ w8 A. Y& \) L: l1 t) G p2 L
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 s' \( k2 M7 \' i5 s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 {" B2 w$ A- W3 ], Z* E
}
, `3 B6 D4 N7 a) E; v$ \% j */
1 q4 D7 w% s. }% Z ] v- I //////////////////////////////////////////////////////////////////////////& z4 w V( \1 {9 Y
break;
% e0 `0 W+ X, D @. C# ? }. C5 w: s0 X, U( f" i
} 0 O1 [5 K5 h: N! f/ A! H3 _; o
}. J. D' D5 ?1 o( H
m_wndMenu.SetVisible(FALSE);5 x$ z3 T9 a7 z+ n9 `" ^
$ i1 P7 n: E8 @5 q5 J; p; s
--------------------------------------------------------------------------------------------------------. K$ J P0 J& Z7 y$ L/ U2 h
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 Z5 i z: M, Y8 s$ F8 k& S; C" C; b& T
{
7 l* z; B% _ s) b/ J8 @0 HBaseMouseCursor();
) T! f" y1 n" u/ u}
( B+ Y3 z* k5 O8 I& ?在其下添加:& o a' o3 w- e5 q, v# h
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" _/ x; F/ b& s. S8 Q! x1 S7 O
{
; y7 D" j0 ?% P' O( T* Am_wndMenu.DeleteAllMenu();
9 U" {9 S* F# l; r5 |m_wndMenu.CreateMenu(this);
O- W H H7 h* x5 Fm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 O+ b! v' z6 d
- f& ]. u) M& v- ]" w; Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): `+ O- w4 _0 t$ l) J' F
{
5 \; R1 t+ x2 H6 u$ s //P以上级别才可以删除所有道具
# a8 S' {# g; ^& e; l m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; q# Y! X' x3 Y7 J# a" h
}0 c8 Y" ?5 o' G4 i& t" t7 _7 X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) A$ w c1 G4 L& q" [4 fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) P; m/ ]7 A, l6 Vm_wndMenu.SetFocus();
7 v7 |/ q; Q! \) @( u/ A3 }}
8 i4 M6 y2 P0 v. Q7 z5 }------------------------------------------------------------------------------------------------------------
" I B% e0 k. M9 t. w/ a0 f*************************( f' z* s" B8 T# p V0 r; b/ a# `
WndField.h文件' O L' {4 Z% d& Y: v5 {2 H1 o7 R
*************************1 G6 H8 o( S4 r s
搜索:BOOL m_bReport;
$ b% q6 z& L1 l' c其后添加:
' y, H" ]; ?5 g$ ?. [( K! o: GCWndMenu m_wndMenu;
+ U3 Q$ C+ t2 w* V) ], \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ P9 e% ]2 R1 w8 T
其后添加:8 v, Z5 t: B) l) A# ?
virtual void OnRButtonUp(UINT nFlags, CPoint point);' q {# |! d% U, H( n& G" w* G
' Q7 O; h8 a) u( |- g+ s
7 l& @/ ^; S; U# J, R; W' a |
|