|
|
源文件中_Interface文件夹下WndField.cpp文件2 B5 [6 H p2 b4 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 M1 N* S+ }8 J" d
$ }) o7 q+ j+ D% V n2 Pstruct sItem
' v J5 Y8 M8 ]0 h5 }6 q{9 C; ?# ^5 ]- U* v5 j: h: h% E) r
DWORD dwId;- [' r" D) s3 {/ H* Y7 B
DWORD dwKind2;$ J t3 {, {0 V" X
DWORD dwItemId;! r' D' z8 K4 o& p: ]3 r* g7 E( C6 B
BYTE nIndex;/ G8 \3 u/ }4 I, g# s1 O* R
sItem(){
$ |2 Q# R# r; ?4 y9 s8 D dwId = dwKind2 = dwItemId = nIndex = 0;
" R) r: \( ]6 h; r! I7 T6 u" L}
4 p! j" r; P7 r: z7 `bool operator < (const sItem p2)
' p3 Q. k1 S/ U{
# {# X0 G$ ~, Y' j# r, g L if (dwKind2 == p2.dwKind2)
* o$ a5 _4 Q" C$ S/ [' L4 P { v. \% W& m; Y4 Y1 j' d* E
return dwItemId < p2.dwItemId;7 W m% P5 ]' m4 ~+ ?
}else{
6 u3 x8 ^8 i4 V return dwKind2 < p2.dwKind2;) U& Q1 x6 B t$ }6 E1 R2 A
}
8 z5 ^: i. b2 I* y) w. o" Q9 i}
2 n& e2 T8 i( G$ V# b# D# Q};
9 U$ F) d6 o% O# E2 Y3 @7 dclass CInventorySort- ?3 b8 @* S$ x+ `1 _; p
{4 E( o: T! n. f# e
public:( x$ n7 y% j, ?
CInventorySort()
' [. S5 v. z: P/ e& c5 _5 L{
; \/ K/ z6 s! }" @9 U% ~$ Y) X* K m_dwPos = 0;
1 y4 Z. ?; Y/ K}+ J' v9 O, E/ M8 d+ l1 b- f, _9 P+ v
~CInventorySort(){}
}% \# R. r% z& ~6 ^& ^private:
" L; X5 z0 Z6 S% u* F$ SsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 L, v" i+ _8 D" v& S0 `7 { \. Y
DWORD m_dwPos;% A* n* i: d8 O" g, v+ Q$ t
public:3 y6 K+ Q/ ^4 {* o: m
void Add(BYTE nIndex)
# E, K1 X* K; h{3 r' q3 Q% Y8 ^+ c$ _: i2 o7 e
if (m_dwPos >= MAX_INVENTORY)
5 F! E% y# l: V {
3 Y# i- @/ T5 Q' y* ~ return;
' g7 t/ F2 c4 K: O! M2 ~1 X3 V }
4 W5 Z% e( n Y+ O) F m_Item[m_dwPos].nIndex = nIndex;& i6 B3 u) Q$ h0 ?& P
m_Item[m_dwPos].dwId = m_dwPos;
6 S& K! m, ?( H6 c2 o/ f: y m_dwPos++;
1 A4 ~8 f9 W9 v/ f! ]" P' k& ~}1 Z9 \$ S) m" ]# Q3 V. _
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 f: m0 U% _6 \{
/ R/ f3 h: F1 K5 j) \7 x for (int i=0;i<MAX_INVENTORY;i++)
' R& p$ i* C; @9 z# k/ T1 ` {
1 I$ G" J0 |- [* s if (m_Item.dwId == dwId)+ x7 X1 @6 p- X6 @
{ ^1 A1 b0 {8 m+ Q+ A: P3 r2 o
return m_Item.nIndex;
) E, U- K4 D& {6 q) N* j, P( j }1 h# {; ]7 a' e7 a7 E
}
( S% n: s2 k B6 {( N return 255;
# K4 f* w2 m+ A' s; N4 Z& ^6 d; P9 V}
" B7 f) b7 Q. I4 H# T; S Jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. G9 P+ C4 I- W4 D7 Y
{
4 I. F+ j" @. }, ~ BYTE nTmp = 0;
( K% U" n% }! t5 t s* a bool bDest = false,bSrc = false;! {, F5 N+ P$ z3 C `' O
for (int i=0;i<MAX_INVENTORY;i++)2 H" j: n! A* Z5 {& T
{' D! [: e- B8 Y
if (dwSrcId == m_Item.dwId)( I( E3 B# A( R7 D9 W7 f2 u
{0 Z. {* f5 M, L9 h# p9 w6 W$ D
//id相等 则 改变对应的dest和src6 l# \; R# ?% S$ j
nTmp = m_Item.nIndex;
, _* e$ o9 C/ L4 ] m_Item.nIndex = dest;5 g! Z* x! e/ V+ @
}
- w- z9 N; {6 v" y0 H0 Z }1 y. G! Y7 @' [; v, u8 M1 g( W7 a1 O
//临时数据保存完毕,交换开始
0 s6 I+ ]$ I! T$ y | for (int i=0;i<MAX_INVENTORY;i++); [: T5 Z( B; ~3 y6 o
{4 S0 W5 p5 F) |
if (dest == m_Item.nIndex)6 d+ ?& @6 m- O- j9 K, N* h' ~
{
. N* e9 F8 X9 T$ v //id相等 则 改变对应的dest和src
& r$ u( G$ a9 y7 k$ P: m% M2 A m_Item.nIndex = nTmp;# |- O4 V2 b$ S* `5 n3 L- `4 n+ p2 ^
}
- S7 K+ ?1 q! ` }% C: ?7 X. h8 Q9 C
}9 w, U, @/ ]% w9 P, c, t# ~9 ]
};6 V+ b3 k) L7 \+ f
-------------------------------------------------------------------------. G3 F f) d/ s5 B' h0 E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% _3 t5 x7 q8 @& `$ i v9 w: ~
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( N" g' m2 ?# `) y/ d! _" j7 \紧靠其上添加:
2 c1 |' A7 _1 m& a; yif( pWndBase == &m_wndMenu )
1 ~! |& a4 t% m o x# F{
, ~- i) M5 L% P2 e. x switch( nID )
9 ]! x) I$ _: N2 _7 k5 j! t$ H {: r4 F e7 B) E% z' w2 k4 z
case 2:! B" k& X8 K& F$ e
{
! X9 B* X" b# J1 u7 h( ^ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 C; b7 ^. _) z2 t- Q6 D2 a1 Z
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" ]& {$ i# N/ j+ u# \ {
; k' [7 z: C0 ]2 x$ s break;& `5 ~- ?0 B5 M- O$ Z
}7 s: [5 z# a& S3 |5 S! N
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 i/ I7 h8 [( e. H7 F7 T {" @# f, n9 B3 w+ a% p; ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 M* ]- D3 W3 z J+ ]' _8 o7 ~ if( !pItemElem )& `7 u7 k9 C# `% c6 V' [
continue;+ g: e& ?/ |6 S4 x
if(pItemElem->GetExtra() > 0)
2 `3 G7 J, n! O, Q* y continue;' l0 o0 |2 m+ \) g1 Q8 a5 p, D
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) D+ i, b* V. @9 m, F$ U6 a continue;
7 c# [1 W+ _; n" g5 Y. ^; B8 p if( g_pPlayer->IsUsing( pItemElem ) )% D% K; R+ J( v8 S% g, s3 c
continue;
3 F4 C- X' o8 E: {9 K0 v! Y if( pItemElem->IsUndestructable() == TRUE )
6 m5 L! `9 Q3 t* i/ A* V {
/ Y7 l1 l0 ]* E' Q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 i* v5 Y+ Z0 a0 w: g O+ m$ _& ^ continue;
7 E) ~8 P+ v' d! U) T }
/ s/ t% d6 w6 c% \$ m+ a, D9 C g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 S1 m3 ^- n# [. q( q, `7 v/ f }
/ c5 R2 s+ i- z, v1 N break;: S5 T+ L2 D9 X+ V; P0 U
}9 S: W- m) i1 q2 I8 ^
case 1:7 [1 U" }! S5 ?% [; M" m) d! N
{
. Y3 _1 y! E; t/ K //整理背包
5 K2 u- ~+ T5 @/ `5 g" v8 `/ j /////////////////////////////////////////////////////////////////////////// h- D4 h0 q, R% S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 a( K9 H4 S' Y, L9 y! S. J1 h //////////////////////////////////////////////////////////////////////////% D# ^6 u& l$ ^+ e/ ^5 [
//////////////////////////////////////////////////////////////////////////
4 a+ y' j) [5 N$ z, x' [ CInventorySort* pInvSort = new CInventorySort;
' ^0 Z, @/ |6 {9 g! v2 K vector <sItem> vItem;$ p: t1 _+ ^; Y: Y8 M( E" ]
vItem.resize(MAX_INVENTORY);//初始化大小
$ q* e. p! s5 z //////////////////////////////////////////////////////////////////////////: R: D5 c' D0 r# C' g" R1 c
//填充数据8 Z: b) i1 P0 M: g; Q" B$ _5 s
for (int i=0;i<MAX_INVENTORY;i++)
; ]: [8 R& ~' `! P9 \ {5 x5 ~# A0 P7 p: e/ X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 u* {/ s, k, u% j9 Y if (!pItemElem)$ v9 g- @; ~! O
{1 r' \+ A' I4 Q
vItem.dwKind2 = 0xffffffff;
4 @5 ^+ b; j8 e% u vItem.dwItemId = 0xffffffff; r% X5 z+ l3 A8 i, g. T2 [3 B
vItem.nIndex = i;
/ R8 h, s, [) M" b: m }else {
5 X% i; x: b4 O$ i+ z) k1 x; M! f( c ItemProp* pProp = pItemElem->GetProp();9 r' ^5 t* F4 ?
vItem.dwKind2 = pProp->dwItemKind2;
3 m' w9 X( S u( j. p9 ?( `* P' }- v" a vItem.dwItemId = pItemElem->m_dwItemId;9 I/ r+ H! ]' T# C
vItem.nIndex = i;
% u f7 h3 Q* A8 [5 P! f }8 N& J" k9 D% b' N- L5 B8 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 D: Z' w( j4 u }$ h! l0 p& [5 U$ f# n8 a2 O8 I# p
//////////////////////////////////////////////////////////////////////////" p: _9 |) g1 X( L! K: K& J! ^
sort(vItem.begin(),vItem.end());//排序
! h7 D0 t4 g y# l a2 d //////////////////////////////////////////////////////////////////////////
1 K( n+ F0 k/ d5 e: t6 m2 {1 W" Q //交换( [# u4 |" j3 L* y# Q" E( l U) t5 H
for (size_t i=0;i<vItem.size();i++)
( Z! ?) W- @/ H5 k' ? {
1 t b* d9 Z* Y. i //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! O" t/ e9 ~' q/ G# | pInvSort->Add(vItem.nIndex);! a1 q+ }8 w9 a; O
}
R6 f& o' F6 J( b: B# O BYTE nDestPos = 0;
4 G' K- n+ m. I8 ~ for (int i=0;i<MAX_INVENTORY;i++)
# j. O" n; k& R( q) } {
: {8 J1 d: w; I: R CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 d$ L( r) }+ F' Q# h& c+ L) R& W if (pItemElem)3 v; K3 r1 Z) D
{( k& n- u" l0 O: i6 a
if (IsUsingItem(pItemElem))
9 z- @- w# D# V* v0 z {7 [9 |- x0 N( w4 j) A
//这个位置无法放
$ h1 i1 Q0 ?4 F3 X7 `- ] nDestPos++;
& G( u! K5 i: R) z9 T+ v }. D. X0 @( a- R9 N3 ?2 u% m
}, `$ N% h8 [4 N# H
BYTE nSrc = pInvSort->GetItemSrc(i);, x" X- G+ E! p7 [- y+ W8 t/ l
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& w i9 I' z7 s! u" w+ q if (pItemElem)% y; J3 c! {+ i# b
{
, { `) \+ P- m3 u$ w if (IsUsingItem(pItemElem))$ Z9 g; S9 V1 Q$ C) B; G
{
4 y+ J: j9 L7 T //这个道具无法移动,跳过
, a! l' B( @8 |! E: M+ @9 f continue;
! k" d+ h" B3 y; q }: \8 a0 E5 y$ H2 {
}else{
0 k) _( O2 R& w& A7 | //空位置 不用动
: c& v( ?0 P, f3 P% ^ continue;& m0 H- W; n1 s, z" u* n
}
# @0 h( ]0 ^, e# X1 X% q //////////////////////////////////////////////////////////////////////////' X7 j l, b* W r( ^
//开始移动
3 a7 T) W. f' Y; n _ if (nSrc == nDestPos). m! s7 G# i5 @ Z# O$ Q
{% O, K+ C% w9 _1 n( r& ?
//原地不动9 L, D# k/ e+ s* r- D$ S9 {
nDestPos++;" E1 \: ^& c1 j) b
continue;
: A0 e4 Q7 c6 ?2 h6 u }! I K+ @# X. W* h& H3 ~
pInvSort->MoveItem(i,nDestPos);
6 V& r/ e! Z+ Y g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ l- S. z4 m% b g+ G% `9 F1 }# |
Sleep(5);6 f+ C( I* x) \. i2 n$ p; x1 R
//Error("移动 - %d->%d",nSrc,nDestPos);0 `8 |! m# J2 z" k8 a5 \4 L
nDestPos++;" F3 u, U' _9 K' B% L+ E. i
}
8 `- z+ |. ~& H' O' u* l5 L3 t //取第一个元素的信息
+ D& L. Z* m: V2 ]/ v5 S /*' L3 h$ O% ~2 I' D& l7 i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" b6 d: V* A* A! K2 g. a& p
{
0 e" G7 a* s( N Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 L# |/ O( R9 q I
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. D+ I" t% l T! H7 W$ J8 H
}
2 x3 n3 }/ {6 v9 J1 D. T" K */
8 `! P7 q. d: E% G& M //////////////////////////////////////////////////////////////////////////
5 [2 @- ]3 h, ?# ? break;
9 m% ]# l- Y# R }
5 m/ {( f9 |5 O3 c& L$ R }
$ M2 E: i2 S3 h/ u}
+ y$ ^# p4 b- D3 p' Z; um_wndMenu.SetVisible(FALSE);
4 ^% R* J/ `' t5 U6 X5 ^0 ]$ {: K
4 Q! z& |: v$ h+ M0 F--------------------------------------------------------------------------------------------------------
$ ~6 f8 E0 u! D* g$ M5 b搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% }* y% L- a* B n2 t" J n( s{1 Q/ Q6 y$ r, [
BaseMouseCursor();
I, K, R/ ?8 d+ ]/ L1 a2 L}
! @6 X, C4 p/ H8 C% u在其下添加:. ~1 S6 k" G9 Q5 k( y, c. A) I2 E, J, h" I* G
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 r6 ]7 |. g" |* a
{+ |( A) z/ L+ t, q' T0 i: H6 P
m_wndMenu.DeleteAllMenu();1 W8 P- ]% J7 |: f; h! |/ [& g
m_wndMenu.CreateMenu(this);
8 z2 F( h; _7 Hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& h* @, l" h9 N4 p5 ~$ ]1 e
, F" h* M# }! P j, A- N
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 [4 j/ W) K2 }. |
{
7 v, v% o% A$ }1 `9 o/ ^' { //P以上级别才可以删除所有道具
" T% u* |7 o& {+ L# o( _3 }% m m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; F4 n, h: ?+ }4 i}
7 }- x% P+ C* \, H& _# o& a% ?# um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 M4 g- i4 F+ Sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
F; u6 }' D3 {; c* Am_wndMenu.SetFocus();
# ~4 A* g+ e4 |, U2 \/ G1 n}
! I+ J* P: Y$ u8 Y+ g------------------------------------------------------------------------------------------------------------
! v4 O0 D t y3 N1 g0 U*************************
2 C k( w% S: V; oWndField.h文件" C! A8 U/ J4 P# E; n# O8 s
*************************
- m+ G6 A' x5 @* y1 [搜索:BOOL m_bReport;; f, p; m4 X7 Z! g" f$ W
其后添加:
- Z8 x" |2 K- h @# i XCWndMenu m_wndMenu;
$ V. F& D& j) N* w( h搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 {8 h5 p0 D7 k/ T( K! @; b! y
其后添加:
7 T' K* O) F& tvirtual void OnRButtonUp(UINT nFlags, CPoint point);( [( Q! p/ ^3 q# S8 m+ b
Y# e7 }2 _+ g; e! l
8 X5 m" ~' X' r. \4 `
|
|