|
|
源文件中_Interface文件夹下WndField.cpp文件6 |- ]3 V8 x7 N$ c e
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 Z3 S3 l+ Q/ D. A$ G
$ I2 J/ M& Y& ?. s/ n, Astruct sItem
) Q8 c; N, v" y% Q. P# }: D{
+ m |) o( T/ h/ f( u0 S2 K6 JDWORD dwId;
% S' P# [$ t \DWORD dwKind2;
+ c1 @2 ?3 U) ?5 i' W9 XDWORD dwItemId;5 b/ Z+ N5 Y4 f" o. D
BYTE nIndex;
^ t. [2 r$ t/ [0 msItem(){2 F |8 \0 Q( y) E! A+ Z8 U% g. `
dwId = dwKind2 = dwItemId = nIndex = 0;1 K0 u, a; m- R0 |8 y
}2 H7 K& V5 h1 Q
bool operator < (const sItem p2)# Y# M- w0 L7 F- D& M Z, A* T
{
! N* ?' t/ R: @ if (dwKind2 == p2.dwKind2)
$ k& S" H/ |* K {
1 J- { L( ?$ b* U G, s return dwItemId < p2.dwItemId;# J6 j- K2 S# M2 E
}else{) V/ `6 C, J3 V- a5 t, J' j1 E
return dwKind2 < p2.dwKind2;
" t3 u9 `9 T( E. A5 {9 c* B }$ v, G. B' Y9 w3 N& ^9 l
}
# t: Q/ w& {, o' N! m" @* |+ H};
I/ o% c! @, ~8 E ~4 I1 Dclass CInventorySort
. j5 [5 C+ m! U. _' B; L/ ^/ @# w{
* S& a4 {/ [: ], h! ^$ Spublic:: Y1 r6 a# S( C) O' h! A
CInventorySort()& I, o8 h/ f* Z3 @/ ]
{
+ l }# ?7 v4 w9 L" d8 l m_dwPos = 0;
" l1 E: a* N3 S- ?7 c# e}. o. [7 i& L6 D E3 ]+ a5 [
~CInventorySort(){}& ?3 e5 E& B8 Y2 L, B7 M
private:
. D* B4 Y/ Y l2 jsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, |5 [' b% Z3 i1 @& wDWORD m_dwPos;& p5 P3 \$ {* f$ I9 ~
public:2 @ L) F; x3 ?& v
void Add(BYTE nIndex)
6 c& {3 z9 c# c9 x# `& S* v{, w0 e% R0 T5 v1 b# e
if (m_dwPos >= MAX_INVENTORY)
; c8 f0 b6 K9 E4 D; s) s {1 W- @6 V2 r, i' F6 I
return;! V1 Z0 R3 r" s [3 D1 X" B/ e
}# A( |! J9 u' M Q/ r- M
m_Item[m_dwPos].nIndex = nIndex;
, V8 F- X6 X1 Z* r+ _3 ^: H$ Y m_Item[m_dwPos].dwId = m_dwPos;8 d3 ^0 V0 C4 w" o2 [3 T
m_dwPos++;
' V0 ]5 U; f. W}
0 G' \0 b9 g s: s) z% TBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; w7 ~. l( b; b- ]; X
{( O/ a' Q; s! g- X/ e
for (int i=0;i<MAX_INVENTORY;i++)
, G4 b; G- p$ I4 x4 c* { {
A3 O; b6 a* L4 a2 @: u if (m_Item.dwId == dwId)2 \2 L4 R( U( C
{
. o7 l6 Z- ?- U0 f' N& Z$ w return m_Item.nIndex;
3 Z+ O* J7 b7 _2 Q$ w$ k) L7 G0 d }
" Y8 C! y, x ^5 p }
+ p6 h, D/ v0 k/ q- ^ return 255;- J d+ H3 W7 h, F
}
- E" U; `4 `- A' ]: L; [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, w7 C, j2 D: m3 j$ p{
5 N. R8 y0 E5 v' c' E6 K9 W' W BYTE nTmp = 0;
0 w& o: [& C0 a. l4 p6 A bool bDest = false,bSrc = false;
. _6 | }! ]. g. J& P6 F for (int i=0;i<MAX_INVENTORY;i++)
- W. _. s6 {( K% I9 ?' K& l {% _. ?% I+ `- _5 M' G0 d
if (dwSrcId == m_Item.dwId)! }7 B2 v7 h! C: `% e
{0 N, G A" N- K+ E
//id相等 则 改变对应的dest和src
, Q$ H7 P/ E' W; \9 g nTmp = m_Item.nIndex;0 u: X* R0 Z9 f( u
m_Item.nIndex = dest;4 B5 H3 L, x- x9 g
}
$ @) D' z6 y* c" s/ u6 Y2 A- g! W6 ] }5 |: V+ d6 ]! W) V) d
//临时数据保存完毕,交换开始
4 ]6 U4 h1 Y6 q/ L3 {; X- R( ~ for (int i=0;i<MAX_INVENTORY;i++)+ G5 B% S" q2 g7 W# ~
{! F; R8 w; d( \. X6 Q8 u
if (dest == m_Item.nIndex)& o' e5 j" \% A$ J% B" l
{2 Z2 w! b. X. X+ b) v
//id相等 则 改变对应的dest和src1 |% [. O4 ?, f6 i* l* l
m_Item.nIndex = nTmp;/ m! y: j1 c- i. `
}5 g% R. E* w" d0 M, l
}; R' v; N7 P |' E8 R: r! G+ i- n0 D
}
" @" M& {# w7 q7 S9 ~5 a};) t6 A2 w" `5 X9 }" H
-------------------------------------------------------------------------
, Z) q9 j2 e5 Z" T依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
~) Y% s6 E) L y" h2 L4 X5 j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); Q# m: u3 d7 A
紧靠其上添加:
1 a$ X: _! k8 Z6 a. `if( pWndBase == &m_wndMenu ), j1 S, w0 I/ L0 H% p- i, R
{
: C. ~7 e3 j+ Y" ] switch( nID )
% a2 {1 e5 H& n( B" n5 ?5 a" u {3 e* e8 }4 v; `& S' S: Z
case 2:
3 e8 Z- p; ]) {8 y7 R. j& F {" d7 {0 o# H N7 v' f& U# ?6 I1 c
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- q. }, y* N8 y/ q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 z$ g3 w k D0 u0 A, ~ {% E# }+ ?1 {7 H) p
break;. V7 @; e4 F, N5 s# T
}
. O; {4 F6 j& L5 E$ L for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- y& K$ `/ C* j) B {" l/ R( U5 x" p* p' X: Z6 j' u( [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: R7 ^2 m: z+ P* x5 B if( !pItemElem )
0 {" ~& c/ ]1 z: _- P6 l continue;4 {% \2 V: a: L+ R C4 Q. {$ W
if(pItemElem->GetExtra() > 0)3 a" d& j' E; k% M. T4 K
continue;- F5 U g. O+ ^3 f0 v9 P
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; [! s; ^2 b; E continue;
+ l! Q m2 t. @* V( h p if( g_pPlayer->IsUsing( pItemElem ) )
b8 G% Z" l9 C# _! s continue;4 w' _& t* Z% s
if( pItemElem->IsUndestructable() == TRUE )
6 T7 c: s, z( d" o# l! F {0 \* y I/ ^/ V+ E0 y5 H
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( _6 m* ^) h2 t7 x) [+ m% Z9 x$ ~
continue;; Z$ T' Z# o/ @ w1 W( K5 C; D
}
; x7 Y9 |0 T6 A# M* @ s& s g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 Q1 c" O9 y5 y7 h2 I+ p* ~
}
8 H1 S5 i+ {3 l" R break;! m0 G. r; B0 s9 |3 d2 j
}1 T; a7 q. r0 C' A1 v& } N
case 1:. i4 x6 e9 M, t' `+ K+ l: I0 J2 ?
{
* Z& K; b6 i+ |# D' Z3 u //整理背包( Z0 C5 x8 W4 [: n7 K
//////////////////////////////////////////////////////////////////////////# J- o% P# c( {
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); d* N) H+ l N4 p2 E
//////////////////////////////////////////////////////////////////////////
/ k+ i: B! e: [' u- d$ D: S) D //////////////////////////////////////////////////////////////////////////4 ^0 G$ z! I4 F P) @- J; y
CInventorySort* pInvSort = new CInventorySort;
; W/ t! r4 b4 l" ]( s vector <sItem> vItem;5 \/ d9 d. }) b" L" F
vItem.resize(MAX_INVENTORY);//初始化大小5 \8 d% }! t( m$ L
//////////////////////////////////////////////////////////////////////////" z5 O$ s- [) D' s; B
//填充数据( a* R, @( `3 `9 L8 [
for (int i=0;i<MAX_INVENTORY;i++)
+ q* ~) f6 b( A; p! A {5 L6 E$ w& E0 [4 H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# s5 O' |5 |8 v9 E; v if (!pItemElem)5 h' u! c# h- i9 C
{
6 _: t* A+ i9 g' I vItem.dwKind2 = 0xffffffff;
5 y& [& b% ?/ D. ^ vItem.dwItemId = 0xffffffff; I2 J* A5 f+ ?$ s5 A8 U/ v
vItem.nIndex = i;+ I1 @8 D- @) h% ^6 s
}else {% g- U. |0 V8 k) o4 z2 N5 k% {
ItemProp* pProp = pItemElem->GetProp();! e, F1 m' G* w- g" ?$ b
vItem.dwKind2 = pProp->dwItemKind2;
6 s4 S; N7 \7 ^( w# G6 S* J vItem.dwItemId = pItemElem->m_dwItemId;. f) T) b4 |4 R! w* v/ o
vItem.nIndex = i;
" R, e/ z ]2 G y }
+ w( M; r8 l' O( F9 E //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- D5 \* e ]+ G# G }
, e6 l& y! V: k: D6 q6 b //////////////////////////////////////////////////////////////////////////
9 x- x) w0 B. V( y2 u* }' ?# g sort(vItem.begin(),vItem.end());//排序
8 ^' l! I8 v2 _1 n+ c //////////////////////////////////////////////////////////////////////////: ]% t( B9 O. U' @1 n4 p
//交换
. A) R: x9 ^4 ]( g5 N7 z for (size_t i=0;i<vItem.size();i++)
. R# [2 r: O" x, _, \9 H$ d {. {8 M1 D( ^9 b; |$ B$ B
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( p: m1 i+ b/ E3 K/ D: W7 f
pInvSort->Add(vItem.nIndex);8 ^, R% q) `8 h
}6 t( T5 m7 Z) A$ f& [) a
BYTE nDestPos = 0;
1 G6 Z1 j/ V0 Q5 O for (int i=0;i<MAX_INVENTORY;i++)
% L4 J0 y- Q' `) S( H1 l& n) @. Y {2 ]3 N$ x; @8 R% i+ D! W+ d: @ U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 Z! G5 o% \- c, c3 }+ W if (pItemElem) j' T7 U" m9 p5 o3 {' I
{! L3 O7 |* C* X: \
if (IsUsingItem(pItemElem))1 {4 _% R5 \4 o
{ ^# K; P7 Q& r& G3 H& n
//这个位置无法放
; \- J" d: F7 r: t6 [( K8 g& k. f6 w nDestPos++;
$ ]7 w8 H+ Z7 P2 M; E7 ` }: E2 U9 N4 Z# @* I) L0 d* z1 v9 p9 ~
}& `; \5 m" ]; M3 t
BYTE nSrc = pInvSort->GetItemSrc(i);; E2 H9 H* v5 l0 n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 {4 n; v$ y4 Q4 t/ l if (pItemElem)
" S& S$ m) n5 `2 p, s" o {. s5 x. P8 o& H" |$ z/ A- z
if (IsUsingItem(pItemElem))
0 U2 ]% r3 c3 }) p6 v- D, }2 \ {, I: A& s! Z! o3 `
//这个道具无法移动,跳过
. e/ E! m; O; C7 Y' ^2 m5 G6 N continue;
) d/ j) P9 l2 y. q- b9 H6 c }2 B2 {0 }9 a3 |& B
}else{5 k' M# c; i$ L6 Y6 X% H' z
//空位置 不用动
8 n! {) Y2 l. S! A continue;9 W* o9 R) x( a* K+ W+ P
}. s9 Q4 C) M* U8 Y% J4 ]! W# n- h% F
//////////////////////////////////////////////////////////////////////////( p; p8 T9 K1 P, O
//开始移动
$ T; }# L' y, A9 j" }( o if (nSrc == nDestPos)
& a9 y3 o1 G: N9 S {
5 m# ?9 |9 b6 C7 e* o: \7 [ //原地不动; P+ U( \! ]' X- D: q
nDestPos++;
. [8 c2 {* h. l/ p0 T4 n) v continue;
2 o, u8 N- H0 |6 ]9 ?$ I1 G }) r$ b4 D e: Q0 z
pInvSort->MoveItem(i,nDestPos);* f. L( A* C, x: p
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% z! X1 }' E) T$ e+ e6 {
Sleep(5);+ J$ R" [# n% b
//Error("移动 - %d->%d",nSrc,nDestPos);
' j- v, I5 T2 _( E1 H nDestPos++;
6 S: E! |" {$ k2 y$ U }
; h. ]( a) R( Z+ {( d //取第一个元素的信息
/ @0 R9 |0 i4 N& D( F /*
' u) }9 [ Z) E6 M7 x, I if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' t. M h; |0 ]" E o) [ {. _8 L& J; i" ?$ X5 z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& i4 B+ O f: \2 p: t
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
, l* u h! F/ K* A5 P }
% `6 t0 S) g2 I9 I. ^# X% m */
5 s$ U3 E5 m- |8 R, U& Q/ x //////////////////////////////////////////////////////////////////////////8 m6 N' Y1 f$ ~# |
break;4 v7 l6 \0 T8 y# |3 }0 ?
}
* h9 @* s. l% n+ O* s* R8 z } " c, v5 @* B( K. n& v
}9 l' a- N1 u, x# [
m_wndMenu.SetVisible(FALSE);
7 y* f* J0 h3 H: ^. ]) G M4 W& L4 `! [5 [$ x& M. J% V/ \9 Z5 f. D
--------------------------------------------------------------------------------------------------------. b8 S$ G% o- O
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& _: t: y7 D% |
{
5 o+ q8 E# D, J6 J( ]$ O: E5 TBaseMouseCursor();
3 O+ n+ A0 k# P# e}' L7 x, O7 r D1 Y
在其下添加:. Z1 w1 F$ A3 r+ ^; n
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ R' ~3 f) }3 Q* R: J X) Q{/ R; u2 C9 t u7 D
m_wndMenu.DeleteAllMenu();
]* y- H! A- j4 e, r) ~m_wndMenu.CreateMenu(this);
1 p+ E9 L; |* y# J5 k" t4 zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 {) d) N) x3 O$ Y& A. }5 e% j
8 m/ n( k+ s) P' X
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 e- ? w( y1 Q& @' P. g$ a& S" L- D
{
8 T% R6 Y) x; j* `$ I, w/ G //P以上级别才可以删除所有道具 I& T( L5 I3 F6 M$ O
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' L4 _+ E( r% O( `}& Z2 o5 ^! ~+ s: E; a* }! P
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
i5 J( @) e7 N" j5 Om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 f) h* N1 R% e% W( Um_wndMenu.SetFocus();( a5 M0 l9 A3 Z0 Y* T' n- O
}
- u" k5 K1 P, O( V; d( q( v------------------------------------------------------------------------------------------------------------& P8 z- q' V# n" ]
*************************# z4 T- J, {! I" h$ H
WndField.h文件$ ^' `9 b; P& J Y [
*************************! J) o, R6 L0 Y4 D& E
搜索:BOOL m_bReport;
c# b" c# q& n5 F9 }% g其后添加:% w6 _8 S. f2 i; q* J1 b9 w1 U
CWndMenu m_wndMenu;' W3 K! L6 N9 e/ l: [9 }# Q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 w% U. W+ N, m8 \4 q
其后添加:$ b+ g& }! J! Y4 B, c
virtual void OnRButtonUp(UINT nFlags, CPoint point);, W2 m6 u( m, l/ X3 d; Y. C
& \& H/ B9 I3 U
5 i8 I& \1 f7 U0 c/ u6 {, j C0 ^ |
|