|
|
源文件中_Interface文件夹下WndField.cpp文件' r d: j: _' p/ s+ C& c* n6 F: m
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( }5 y& @6 m7 W. o! c% y8 ~
3 Z5 B. i( Z! G/ w+ L! d5 Kstruct sItem
4 k6 \; ?9 c9 @9 L9 |4 }{
3 B) _" D/ Y' s8 t! VDWORD dwId;
: X! e' t2 p6 ~) K' t+ K% VDWORD dwKind2;7 w: t p/ a+ d' O" }1 y l
DWORD dwItemId;
& o; I6 I7 W, I# [% ~0 kBYTE nIndex;. I' n6 z. I& g+ b5 B6 _2 l
sItem(){
; W! C0 k. D# Q+ f dwId = dwKind2 = dwItemId = nIndex = 0;. q2 q) B" S. t
}3 j4 Y7 q" s( {/ U+ S
bool operator < (const sItem p2)
3 b; X# F- }1 E; K' X/ f+ ?. z- U{5 s# i" t+ _5 ?# c
if (dwKind2 == p2.dwKind2)
x, w; d; H; w n+ U {( j& ]# X7 v! m# [5 Z) {
return dwItemId < p2.dwItemId;; \' L& m4 r/ j
}else{
$ P3 d5 V" m- B+ J7 i& O2 { return dwKind2 < p2.dwKind2;" `3 t4 J) W4 k- I
}) p1 p6 S" j6 F* D7 [
}; \# A9 O# i* V9 D
};1 B t" e4 A; r9 [! F( n; T( e
class CInventorySort
) N, E, r: V; G. l' b{4 c! l& T' I5 d- q: E
public:
3 P9 A# r0 y9 K6 ]7 d. q# L. WCInventorySort(); H" J8 r- z0 o& t0 x. O
{8 m% O. ] k+ {$ M G7 x& v& d" l4 ~
m_dwPos = 0;
. f. x' v2 q4 ^9 C- R2 m5 F}
, }+ n! ]. t0 u" [% l. v3 J~CInventorySort(){}5 A7 m( D* e/ X" [
private:" e0 J/ f8 v \; V! U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; x. V" Y x( F+ z% I; [8 J
DWORD m_dwPos;, V* y8 Z+ }1 |' w: D' A* T, Z
public:- u4 Q$ Z8 a. P; ?
void Add(BYTE nIndex)! M" b, G. \6 m
{
5 g" W2 B( V9 b5 \- o( P+ B( E F if (m_dwPos >= MAX_INVENTORY)
% Q" v0 ?4 I: v {& Z/ l; @( O% e2 v) n
return;+ J3 U' O1 h# y9 y% H! X, z
}
% o9 ~- Y* G! ` w) i m_Item[m_dwPos].nIndex = nIndex;
9 }! ?% B7 G- M6 V+ o m_Item[m_dwPos].dwId = m_dwPos;. ]; X% e1 e: p& v' f5 d
m_dwPos++;( ]+ m8 j2 W9 R: \
}
7 Q H. x2 \9 iBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 I5 l. y& ^0 Q* ]
{, x5 K n( q' }4 x( V5 M( q2 B
for (int i=0;i<MAX_INVENTORY;i++)
! N! g$ \$ a; w4 E# W" q; _ {4 Q$ G0 ^6 j- j, w
if (m_Item.dwId == dwId)
+ r1 ~4 S3 Y7 K) f' ]( n {
( e% q. T& v9 \4 R! L* l$ e3 @ return m_Item.nIndex;
3 Q) `# Y) f: o }
* L/ R5 w7 A. b" z, E }$ ?. k& ~3 H, a& h0 P* J
return 255;1 N4 r- D6 Z) ~" \
}
5 A* I, z2 c$ L' }# Q4 A+ Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ d2 x% N x- m& a
{
+ N1 }7 O$ V6 B" V3 T BYTE nTmp = 0;
4 z5 ^# ^( L! q' E* @ bool bDest = false,bSrc = false;
: a2 O: m5 q- S+ M5 B4 D) Y for (int i=0;i<MAX_INVENTORY;i++)1 @2 W1 B& @; J- o( E$ K+ N
{1 u; c. i* v" {6 T6 H# ~
if (dwSrcId == m_Item.dwId)6 H/ r4 k# F0 W5 Q# W
{ Q( S- w p8 E# `# K4 u
//id相等 则 改变对应的dest和src5 r) M- n6 d3 J; u2 \8 o
nTmp = m_Item.nIndex;
6 F" x/ x% L5 o* o6 | m_Item.nIndex = dest;
0 t0 x1 ?+ j0 _$ ]' { }7 ]! s4 a& v& h: o: Q
}) Y( ?2 S; _ |
//临时数据保存完毕,交换开始: R e. ^% R) M! Z! E' o G* W$ `
for (int i=0;i<MAX_INVENTORY;i++): C& K0 E4 p2 a8 T8 E$ _
{8 k9 b, |' K! Q5 g7 v! S
if (dest == m_Item.nIndex)0 W* H3 o$ [. Y0 ~9 H
{2 j4 Q/ {, Z; Y9 P
//id相等 则 改变对应的dest和src
3 ?; h$ J7 z8 @ m_Item.nIndex = nTmp;( |0 Z+ y- g8 k1 v3 O
}
4 n9 _; \! d2 b3 E U }
$ g+ d* f) u. w}
% u2 k! x, r4 z% J) n2 y};
, ~1 z& {8 c7 h% J! O( a$ [-------------------------------------------------------------------------
' Q& a! {- V. [( Z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- V0 S1 }& Z8 o' l/ a9 t搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; D- @; F0 B7 E# e+ {
紧靠其上添加:
3 k; h2 o4 H: `. J! eif( pWndBase == &m_wndMenu )# o# [9 K5 T* t) E7 X7 u5 u1 T+ g
{
4 |# v K1 q. b% p; Y8 w9 w6 z* Y switch( nID )
- s( e* W7 P% V& Y0 i {
3 }2 f2 v3 [9 T5 r H9 n case 2:
4 N4 L0 ^5 B# I, A# D {8 l6 l8 |+ K Y/ K
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 g5 I' L$ u% J. L% \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 _9 _% U7 G8 U; E0 e6 r
{( x) l' d: k/ W2 N M+ S3 I/ Q
break;9 c& u9 _) P2 Q' l& ~5 v. x5 @
} Z' Z% a$ C# K ]
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 ]/ P4 I5 L- s! w0 \
{
7 l; t4 r3 n7 [7 F v% ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- K" z8 d9 k) ` if( !pItemElem )% h8 A# S2 ~$ }$ h# q) f
continue;! w, G' K& z+ j! G
if(pItemElem->GetExtra() > 0)
! t \! `7 _# |7 r9 W# { continue;% s; U. J; k0 { i' R5 e. r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* V. j5 D$ Z8 O, D7 r- ]* g/ }( b continue;$ O. M& g2 k1 R$ l3 ?- f( C
if( g_pPlayer->IsUsing( pItemElem ) )& A3 s! I$ V$ ^: `$ b5 p0 J1 V# v
continue;6 W' t1 s6 J/ ^
if( pItemElem->IsUndestructable() == TRUE )
" q* l9 E- u/ G0 c- o. ?; E {0 k* i. v# v3 C9 S) z* `
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 u% U3 _# x# w: o' B
continue;8 O% B, c! P6 ]5 G& T0 n
}
, H9 W$ L# O7 [% P' N# Z# x g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 i' n' e; I% c( `2 M }
+ S& }1 {6 j$ N9 P+ ~ break;
+ O% S+ ]$ H& ` }
- c' h8 |: S9 Z: W. Z) Q case 1:
: z( G: n/ R# p {+ s7 x, q5 \- b k% l
//整理背包
* o; w- b/ p! p% p8 e& G //////////////////////////////////////////////////////////////////////////
: V [/ m8 y3 l* v //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( S2 j- ~& j7 _+ X //////////////////////////////////////////////////////////////////////////" K0 n. a. V3 P4 r4 W5 T! ]; r
//////////////////////////////////////////////////////////////////////////
' t0 O2 K* Y u4 M u! s CInventorySort* pInvSort = new CInventorySort; D @* E% t4 K) u* @: _/ R
vector <sItem> vItem;' S4 z$ s( A' ^
vItem.resize(MAX_INVENTORY);//初始化大小9 j9 h0 V( M2 O
//////////////////////////////////////////////////////////////////////////5 y1 j/ G3 H7 k: ~) f
//填充数据
4 o8 O z5 H8 Z- S, [# E0 l for (int i=0;i<MAX_INVENTORY;i++)
) l- l+ \7 m. d: v" a {3 M8 A2 N# a: j) u2 \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 E" I! L3 i$ a2 ~6 f, B3 | if (!pItemElem)
! o/ I% \* w/ y c4 d% a5 w+ T; T {
# }; N# G/ ~3 T; a vItem.dwKind2 = 0xffffffff;
- `/ z5 v9 ~9 E" G6 u1 x vItem.dwItemId = 0xffffffff;
X3 ]( E, x, W( ` vItem.nIndex = i; o: U& z9 l, I7 j3 ^
}else {
- V& O/ E- r% q( n ItemProp* pProp = pItemElem->GetProp();) \5 q, |: g u- I
vItem.dwKind2 = pProp->dwItemKind2;
% I* w* u- F9 Q0 v" j vItem.dwItemId = pItemElem->m_dwItemId;
/ }# \* s, @# ?- I7 p$ n5 v1 ~/ A1 g vItem.nIndex = i;
$ J& ^, g/ {# n$ a6 k$ E }
7 W& ~% Z9 b2 m3 l; g7 v //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. f. |) R# Q6 V- a4 I
}
' d0 f h j" V( s6 R //////////////////////////////////////////////////////////////////////////
* H; A# t* n; e5 E3 D d sort(vItem.begin(),vItem.end());//排序
V* O3 Z4 g* Y- e) z //////////////////////////////////////////////////////////////////////////' V! U. e! S _" }0 Z+ t
//交换
( z8 y- L' j" u5 ~) k0 l for (size_t i=0;i<vItem.size();i++)
6 R& ^5 f+ P) S9 `* b/ o) k {
/ S- O+ m) j( k/ K) Q; f //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" Y m( a) A9 h5 o! j1 Q pInvSort->Add(vItem.nIndex);. `- ?+ r0 E0 _3 ?1 H- t2 U$ h# `
}2 b1 E, T: G1 M( x
BYTE nDestPos = 0;* g5 Q" u" T0 Q& {
for (int i=0;i<MAX_INVENTORY;i++)* c) Z* y8 K$ I6 V4 ^: ?' P# ^* [
{
( S' r+ ?+ }% @8 }9 J6 o! ]1 W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 r( Q- T, E' O) b; P3 l
if (pItemElem)
3 X& a5 g, ~! f8 G- m9 m$ F1 z {% y$ r' m- f( I
if (IsUsingItem(pItemElem))& k0 p+ I* E; |* T( D
{
& P6 C- z* {* h' T //这个位置无法放
; H9 Q0 O! m0 A+ Y( M- } nDestPos++;
/ w) ?. \0 v h+ a- { }; P- t0 H8 ]' P$ w' p
}0 V, |5 b9 i" W- g8 X$ _
BYTE nSrc = pInvSort->GetItemSrc(i);* C4 {3 [* n( J7 L' x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ J- C7 Z/ [3 Y0 T' b+ } if (pItemElem)
- N$ o; g3 n, Y- r* E8 f# X {
0 S) {0 W7 | Z9 {5 I3 i if (IsUsingItem(pItemElem))/ L+ H, X7 w/ k ?/ H
{4 g" ^# O0 B2 l- H% z! x
//这个道具无法移动,跳过8 I1 |% ], s" B, Z6 `4 C8 ]( W
continue;
2 d# _+ ?; S4 f) Z3 [3 l: M0 W3 Z }4 ]7 N T3 r: i, r
}else{ q Y+ `) c Q# C
//空位置 不用动
C2 s! D) B: t2 ^) t7 ^9 W continue;
" K. ^: k. s& [) X7 H( v# t }
$ D* R$ `) X0 b1 ?( H //////////////////////////////////////////////////////////////////////////0 w% r! C2 K% E
//开始移动$ Y) o% y0 q) l( x) L) E$ q
if (nSrc == nDestPos)
( w8 x/ L0 J; Y7 ~: H7 N( u {3 ]- U6 d+ \, W& m& y6 N' ]( H
//原地不动+ Y& z5 F8 p8 Q& P- r$ v
nDestPos++; B- t* s( k$ C' N
continue;4 U0 j2 s2 b$ f! r3 _9 b# k$ f
}
3 w0 M8 t6 l6 z) w& n pInvSort->MoveItem(i,nDestPos);
; v8 z: Z' T' f3 D- P: J) [' e g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 W9 y0 r3 |; R, ? Sleep(5);. g: P4 s& I* p6 |$ n( ^
//Error("移动 - %d->%d",nSrc,nDestPos);
. `3 Z, `* u- q& m2 j' T H3 L* { nDestPos++;
, F$ R4 n; h0 h& o4 L }1 L" g1 `9 f( A. X& i
//取第一个元素的信息) v+ W8 v- `3 i: k
/*; r" o0 Q# K! m$ E( z; `4 ?2 {8 }
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 a' ^9 z; t1 _7 G; d# i) Z( l( N& m {
& p% o6 Q5 r& W$ q' C Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* g# N. M2 k q! w& j' b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 U! }. O1 k7 q5 [1 ?. U T }1 ~$ Y3 E3 s& u# I
*/' M* |5 ?( r4 \4 G+ i+ Y0 u1 |
//////////////////////////////////////////////////////////////////////////
' m9 t- x4 w {5 H g7 Z break;( {2 { G# e5 m. p$ v) t# k! G" C
}
2 L+ x0 E# R9 W9 w6 m" E } % G6 [3 n# v$ M1 m$ v
}
7 l2 b3 j. h( v' k3 @: Q' em_wndMenu.SetVisible(FALSE);
, k4 c+ f" d1 H' E: S# I0 N. L4 @
--------------------------------------------------------------------------------------------------------
% H% ?* T4 E: z+ m( N3 f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# W: w) S% g- @% |{: Y H5 E9 O9 c1 g
BaseMouseCursor();
' ]' h/ m* Z! b}8 c4 F$ ?1 F6 }4 e; m/ q7 P
在其下添加:
3 z1 N7 c4 x' H6 C' E. Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- A8 q; a. o- ?& v) b" c/ m
{
* }7 `" {5 r3 V) t# Q* l: Gm_wndMenu.DeleteAllMenu();! S. @0 p: |3 e
m_wndMenu.CreateMenu(this);
; z3 z) |$ i# b' Xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! D& E7 K- X7 x% _8 n# `# q5 W
. j3 n1 g9 e1 {, `# Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' W1 D/ Y1 @; K3 v, J7 k7 C( |{' k2 E8 u; w+ M1 k
//P以上级别才可以删除所有道具
3 @% I4 i* a0 b+ ~ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 C% ]- w# Q; D; {
}
% N4 K8 c& V# {" u$ S7 u& lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, n5 K' r" |$ m/ Y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 ]3 v. l6 q8 j1 A. G8 Xm_wndMenu.SetFocus();+ R3 J3 X, w: _5 c' S& s
}7 a x( o, `& k/ J7 ~7 q0 o% A
------------------------------------------------------------------------------------------------------------ h- \, Y( v6 c! H' }3 D- L
*************************
6 @1 X( y. S5 R e$ @0 E& v' CWndField.h文件
1 W5 R# i5 t! p, ^/ _( n*************************" Y& n, D* Y) I$ v; Q, T, y& i$ c
搜索:BOOL m_bReport;9 j; T8 u/ i, b9 s+ G+ I0 t4 e
其后添加:
( N. P3 M* O6 Q% _CWndMenu m_wndMenu;! ?) K: V& _" ^$ g6 u! t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 N" M/ c2 \9 F8 j" c/ ?其后添加:% N; B: s+ i3 D7 a# t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# J* \" j G, |
( V$ l4 S! P- H
" a5 s$ u! ?. D0 g7 B |
|