|
|
源文件中_Interface文件夹下WndField.cpp文件$ G1 n. x( W9 H: d! E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ O6 f! J4 B6 D9 ?6 N5 T
$ V6 Z( e8 {# I+ wstruct sItem
! I, h" l, D( z{
7 e2 a* e$ S! S/ m( G# [DWORD dwId;
/ B5 c+ k: d! g' N* WDWORD dwKind2;9 `0 A9 O j- ?# b
DWORD dwItemId;1 A6 l1 N4 e+ _9 Y1 H
BYTE nIndex;
9 i# U% Z. N& J, a# ?7 qsItem(){: i1 V2 B% z! i* [
dwId = dwKind2 = dwItemId = nIndex = 0;; L2 t3 k2 N% h! l+ L: q/ s
}
v7 F0 i5 V+ V: i7 w. Ebool operator < (const sItem p2)9 N0 o9 B& k7 d6 b: g' C3 V" \
{* F3 I0 W6 R6 I6 Q
if (dwKind2 == p2.dwKind2)
' {, O5 V; R" g' T6 p {. q6 v. E, i1 P/ T+ H
return dwItemId < p2.dwItemId;1 R' L) N8 c2 d! W# n& D
}else{$ f; `+ m7 f3 R/ m& [0 N
return dwKind2 < p2.dwKind2;
. C( K5 }9 |8 A0 k' K }7 n) V! W% e+ _5 t
}2 O" V2 Z: [6 G- n
};! d, |, p# p5 m+ }+ ^
class CInventorySort0 v0 }4 T+ w6 J% y. B8 Y
{$ ?1 d) ~! o$ Z+ l: g
public:
) i" A2 I: p7 o5 C3 C- E( L# wCInventorySort()
/ c5 r% d. d% R{
+ ^$ C; z0 T I' F9 o P7 W m_dwPos = 0;. ?& o. N: @; y
}2 s0 ^- f$ ~! J1 C
~CInventorySort(){}
; f" n* {8 s7 p# h# d" }private:- m3 v0 c- u) ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 J( n+ }" Z6 ?3 F# [! Y, tDWORD m_dwPos;
Q! O7 G" }, g3 {public:7 _, }! a- i$ _7 ?* G
void Add(BYTE nIndex). ]3 _& G$ R, k, D5 {4 o, w
{
4 Z! T7 }: X" P3 F: L+ a9 E if (m_dwPos >= MAX_INVENTORY): F6 p% o+ u& L, e7 X
{4 K. t6 y9 h, h0 w' ?1 ^
return;4 Q- I4 V8 D; ?
}8 ]8 l! ]' i. F$ m% B! v6 b' `: D
m_Item[m_dwPos].nIndex = nIndex;5 D5 m$ |# w* ~& x" a6 ~# ?1 j3 ?
m_Item[m_dwPos].dwId = m_dwPos;4 g0 [6 @' x2 d2 H, \, {( r
m_dwPos++;
& e8 _; [4 T1 k1 A}
/ C) w! i- L) D4 {( z k3 ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! T7 [7 ~2 z( _! } G+ c: \{
1 N$ h# z9 P# G1 `% e for (int i=0;i<MAX_INVENTORY;i++)$ R2 T5 K% S: M4 A/ \
{ Q& U0 j8 o0 y( t9 a9 l; K
if (m_Item.dwId == dwId)
3 ~3 J' W+ w+ [8 P' Y, Z {$ p J0 N4 y4 A' m4 [
return m_Item.nIndex;
3 j% B- L; h/ m, c }
* c4 p8 A w, r2 J- s5 B; X' J+ P }
& I6 C) F% Z# r, \/ F0 e# R/ V; F return 255;
. ~1 m" n4 X' T" N}
4 u- i6 ^# s, u2 ]4 Z( A3 N5 z# f6 Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置 w6 U* W" b+ b' L$ f% P
{7 z4 ]9 g( f6 _6 M
BYTE nTmp = 0;
) ^: `9 m& E: p5 ]9 }. y( J bool bDest = false,bSrc = false;
' `. R4 ]5 O8 ]8 n for (int i=0;i<MAX_INVENTORY;i++)
# o8 Y/ Z. H. w; m {
/ ~( \/ }+ \1 f n if (dwSrcId == m_Item.dwId)
6 K* }1 B+ v8 {) b7 c% Q! }) Y: B {
) l/ W. ~! n" j! G( Q: K //id相等 则 改变对应的dest和src s0 n8 N/ N* n+ A) a
nTmp = m_Item.nIndex;
p. H) ^# a# ^" M! N m_Item.nIndex = dest;4 r5 @# L: M) z7 D+ X
}
- L3 _# f. H# X9 Q/ Q1 ` }
7 \8 ? |; K( {% D' h //临时数据保存完毕,交换开始+ M; H$ p$ W, s, U; W- m5 ]
for (int i=0;i<MAX_INVENTORY;i++)" h( E+ d+ }% x* l1 B1 C. f
{
2 Y" W6 S1 ? w8 L if (dest == m_Item.nIndex)( p0 u7 q- ]7 R F- `; I' U
{
$ }6 B0 _* d7 Y! P6 l2 G; ~ Q //id相等 则 改变对应的dest和src" Y1 f# {2 U J3 _0 C. ]
m_Item.nIndex = nTmp;6 U% _& y1 f; H) ~4 y: J
}# N0 ?: q+ ^) b. ~/ {: z
}
' k5 F3 P4 Y; }}
9 `! g( z$ S. V, R. ^0 l};8 U4 {; a* J7 K
-------------------------------------------------------------------------
: k U8 J% p( ^* R依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 k% _/ d, C# x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, c# e$ N: h! l( z% [) P) u紧靠其上添加:, N( d- Z- F! }) R, B; F, ~6 i5 P: D
if( pWndBase == &m_wndMenu )- T' t! [! U2 S f3 m$ h" U
{
0 {6 @. h; C' G/ s, M, e switch( nID )
0 y+ l3 }$ h; o! m {1 r/ {- ]2 C: M: c2 N# S/ A) j
case 2:
# a; N' h9 d4 \1 o6 A {1 e3 V p$ T, N: s
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 Y" B8 q) ~1 |6 w5 o2 B+ J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 I: s7 l% ~5 k$ ~+ _& E+ ]
{
, v' ]3 Q3 z1 y) e6 i break;
9 y% j9 T! H; v, W4 p }( ^* d9 {- ?2 X$ P' M# h e4 z3 s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 e6 _4 d( Q" |: g- T8 Y1 }! Z
{
2 A" E" _) L0 Z; E( k, S4 _% D H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) F& r8 I6 L8 N
if( !pItemElem )
; t7 `2 W/ h& i continue; Y3 |/ J8 \1 b2 _' m5 M
if(pItemElem->GetExtra() > 0)
/ @9 t5 V2 P5 D* Y& P9 U continue;
/ r/ o* t( e+ ~. u2 Z6 L1 r/ a if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 u, D& x* G( @- a- F- G continue;
, D4 c; g% l3 ?4 k( Y if( g_pPlayer->IsUsing( pItemElem ) ) K5 J1 e; r9 X1 F* w
continue;
6 C+ o5 Z* ^8 n; L% Z4 o) T% S if( pItemElem->IsUndestructable() == TRUE )1 e0 U; T: A! K1 `2 d; L& s* |( ~* ]
{0 v: B' Y: S% y2 i
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# W! z+ W# T& t( n p' ]9 D* u
continue;2 `/ U1 E4 j/ r8 p( F
}3 f# d2 G& G1 J4 A# n7 n9 a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ j* I- K2 Y; T- n }( h+ f @* v$ d9 R$ D. w& y* F
break;
8 q/ \) A; ?+ X% r6 s$ W }
- D2 n( ]& @2 ~ case 1:
" p3 _/ g% W% Y! L/ w7 L {8 j9 Y9 O9 P- A0 J+ t
//整理背包
+ g% s+ ]$ ]9 Z4 v# r8 @, P //////////////////////////////////////////////////////////////////////////" V9 A; |% d4 {; u+ }
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ N3 }3 B! r+ P% b: { //////////////////////////////////////////////////////////////////////////
! _/ p# w$ o K/ I3 n //////////////////////////////////////////////////////////////////////////- D7 X7 f! f4 @7 @; T+ B: x* c7 s
CInventorySort* pInvSort = new CInventorySort;/ M% M! P) w" r4 c) I4 U9 e
vector <sItem> vItem;1 j: D; L+ [" n+ r2 z4 B
vItem.resize(MAX_INVENTORY);//初始化大小# o2 v! U* v O2 Z4 O
//////////////////////////////////////////////////////////////////////////' C1 j) T. ? g, a: t$ k
//填充数据: n3 M$ ]' C- y
for (int i=0;i<MAX_INVENTORY;i++)2 c! N1 l$ y- A5 d) ]
{) Q) Q2 H) C8 D: q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 p7 _0 w; _2 n( b8 G- [1 N
if (!pItemElem)
* ~7 q! Z8 j6 W" t$ v# m+ i# d {
) n; e4 `2 h$ v& U0 c; z vItem.dwKind2 = 0xffffffff;
E2 g! ^# K: E' y. C j vItem.dwItemId = 0xffffffff;- N! z8 a6 n, S2 U
vItem.nIndex = i;: Q3 J( q% z3 l, V8 a/ M& k: |& d/ b
}else {
( |1 ~- x/ q! I ItemProp* pProp = pItemElem->GetProp(); ^3 @0 P( s9 r: f
vItem.dwKind2 = pProp->dwItemKind2;
9 H$ R$ ]& G f4 H6 P: P; h& ? a vItem.dwItemId = pItemElem->m_dwItemId;
) F2 }0 T7 L; N0 \0 S* s vItem.nIndex = i;- l! F. g" X2 Y' Z" T& {3 C
}
, e. w, ^( B" C& A- c# i' i% l //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. l% q! ^1 ?9 ?7 L2 v8 p
}' C" r' r' `6 }
//////////////////////////////////////////////////////////////////////////0 B( |& j+ ^% s3 b5 h
sort(vItem.begin(),vItem.end());//排序% P$ X+ y% y" m' u" F
//////////////////////////////////////////////////////////////////////////; G5 e- J, C- D$ `+ y
//交换
; k8 E) u/ p/ C. o for (size_t i=0;i<vItem.size();i++)
) w7 Y/ I5 A, }# P; s/ _, b1 k {# j8 |) [2 W0 \/ Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. A, A# [7 D9 G. V1 B
pInvSort->Add(vItem.nIndex);# u$ X8 ~2 ]5 m _. y
}- q. x3 y! e3 g& p9 X) N) S
BYTE nDestPos = 0;7 L, D$ o# u& p
for (int i=0;i<MAX_INVENTORY;i++)/ ?. t0 _2 b, R! B8 |6 n
{3 Y- W8 o4 O M9 H1 \ T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& z0 Z" D- C: o0 J if (pItemElem)
6 V- |* I/ Q( _( w {8 W3 m0 a; G- P; U* h3 n2 q/ Q
if (IsUsingItem(pItemElem))! E8 h* m' c- e
{4 ?; E; i% j- D* c- ^
//这个位置无法放8 s" ] C9 d8 w' Y* S" H
nDestPos++;. x: h* E% x, x0 n+ G& [. T
}3 x( v9 f. a4 R7 I2 _3 Y# y
}
% \6 b0 V$ b1 [8 i; x: a" T. C BYTE nSrc = pInvSort->GetItemSrc(i);
& o- i& H2 o6 p$ W- j4 W8 X. B pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% U/ V9 e3 f5 X# \! M) P2 d, w
if (pItemElem)6 N+ @# @& a: ] [
{
% X) G: o9 T M- D6 P9 o. z if (IsUsingItem(pItemElem)); s# V) r2 c: i" z
{7 a8 H4 g# f8 g9 E$ n
//这个道具无法移动,跳过
- L4 ~7 J5 t: u z- [4 H% N continue;0 P V h2 n# d, Q1 p `; V
}/ b0 \0 Q% l) ]& G; E% ^& E
}else{. `7 b; d/ V0 ~7 W. }( N" d
//空位置 不用动, k' _. K, h8 U
continue;
; r/ k& }/ k$ z7 a3 S5 R }
% W" p# S- C! X' L3 _3 y5 a //////////////////////////////////////////////////////////////////////////
6 J4 ^; e" Y, q/ ~7 M# y //开始移动
- I1 M" L& n1 z+ O; ^ if (nSrc == nDestPos)
; d7 W6 o- V3 j9 g( V$ G/ s: o {" Z! s }3 U' f- H/ o1 Z
//原地不动
1 ?9 _+ V- D/ X% D7 P( m nDestPos++;$ ^# M4 I I. B, z5 y3 n, ]" X& R
continue;3 W# e8 h# G, m$ M! g; {
}8 V2 x7 {$ K! {- r
pInvSort->MoveItem(i,nDestPos);
y" k! R1 Y) L- f; O- l" f; T g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, R) d: u7 e H/ `) b8 q Sleep(5);
) l# x" e5 q1 G! A4 O* A3 \ //Error("移动 - %d->%d",nSrc,nDestPos);
9 m P! P' A& A; ?# f/ w, S nDestPos++;
# O4 X, G# ]3 u$ }9 a8 i6 ~ }
1 c7 d9 w/ |" R4 N6 f# u' p //取第一个元素的信息
, u9 ^0 s3 I/ E [1 C /*2 j. s' v* V+ J2 F
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ o5 U% U9 G5 e- O {
$ F( o0 P' y2 D Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 H. I( }3 J7 F3 @$ G
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' ?. V! Q- x/ }( d) n V }
; S5 y& L# ~$ f* T( `4 O2 _/ X */
# u" M& Z0 @2 t8 [/ u+ D+ g& t* x/ g //////////////////////////////////////////////////////////////////////////6 C" E0 ?- [! W2 B8 c& t
break;
. r* k' N _' n' L5 L }
% g9 A( r( L- x* F+ ]: X }
8 R2 n" V |0 A}* Y1 H$ N6 H/ D3 N1 b/ l
m_wndMenu.SetVisible(FALSE);
& [6 A% F8 v- b4 i2 ~- i9 `' U5 H3 f1 _5 j L! n- \
--------------------------------------------------------------------------------------------------------
4 ?- e5 R2 _4 m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) w- n- J* v p2 t7 ~
{
# i/ D, N1 V! MBaseMouseCursor();
$ G: F( Z4 S) `3 G( m& ^}
& u! w( J0 M/ Y3 B% R/ b O1 W在其下添加:1 ^/ z% p& [. K# q1 v! [( Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: `. P6 E( w5 P4 J# r{0 `/ k1 E+ N6 g% H5 g
m_wndMenu.DeleteAllMenu();
, \2 o5 R% v9 s! k# C0 Am_wndMenu.CreateMenu(this);
7 p( \2 G, B; S$ D8 T9 {8 Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- j" z: \5 l J/ Y8 e ?
/ B8 ?& q& x, S/ c+ g3 tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. @) G9 C( o+ F6 K4 x9 n; i- B{- E4 |% _7 X- k& S( j, \
//P以上级别才可以删除所有道具' Z- A0 s7 E2 N) u+ ~8 b$ f
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ N3 t& O& N( ~- N
}1 t8 N3 K8 t* _/ _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 k! F4 D( n2 E F" [5 J2 g8 Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( Z; s9 N5 F. o9 g4 d, X* t+ Dm_wndMenu.SetFocus();
& a4 C* z# T2 o) a$ q6 L}8 F' @4 i+ c. B3 t8 Q8 D3 g
------------------------------------------------------------------------------------------------------------
2 \$ P' j+ p) F( ^*************************
$ M( f& y1 \5 f& l' G( `WndField.h文件
j: g+ D: ^8 d3 v, X0 |! s*************************0 C! H+ _% x2 A* G8 |$ c$ a
搜索:BOOL m_bReport;$ f9 t; J) Z3 u# Q' K
其后添加:% p+ I$ Z6 `9 I/ E$ O
CWndMenu m_wndMenu;
8 t2 R. N2 y* u% m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ j1 s# h& s( {) b. ^3 \
其后添加:
- F8 {6 {6 F- d6 A' y W9 }virtual void OnRButtonUp(UINT nFlags, CPoint point);
( ~. T% q# C1 b2 k% T5 S7 ~8 m- z; M5 j9 X4 ?
/ z* |+ r* R. d) X8 n" e |
|