|
|
源文件中_Interface文件夹下WndField.cpp文件
0 c( g U8 b: S# N @% x搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, ]9 Y6 s8 l1 y/ {2 E2 V" Z
6 W) C2 c E7 M9 cstruct sItem* [6 o8 b* P: J" @5 e M" x/ e
{' i! x* t* g6 e# C
DWORD dwId;
^* v$ p3 E$ UDWORD dwKind2;. D: @0 ^. i6 ~; t
DWORD dwItemId;, y9 J( N( q5 K( T6 i( j& |3 S# `# j
BYTE nIndex;
q2 s7 w5 p) k- h8 h6 w7 isItem(){
* S) H/ d6 D; q U Z: h dwId = dwKind2 = dwItemId = nIndex = 0;
' `7 ~' k1 H. R$ J9 K8 k! y}2 r6 _( i& _; Q+ g' G: Q9 i
bool operator < (const sItem p2)
( c6 [4 j, p; J3 n+ ~{
$ G) h _3 I2 y! t7 y* ?& L if (dwKind2 == p2.dwKind2)$ m% Y4 V7 C4 ?) ~7 m+ ~4 t% f
{
# L9 Z, B" G; _4 [# H8 f! i; ?/ c return dwItemId < p2.dwItemId;: _3 A; Y! J/ d9 l/ B) h0 k* e4 p
}else{
( Z: y9 `8 F0 |8 n0 {' V2 Z' R return dwKind2 < p2.dwKind2;3 F) P4 L$ P3 p& Y ~
}* @4 l+ Z: `0 f2 x. K. _0 K9 p( y8 m
}
/ c5 E1 c; M$ p* l0 V( Z0 `- h};
1 `* f1 t( f2 h6 }class CInventorySort
6 v- j# h& u3 j6 \% g, J. H3 v4 F{& p3 v3 A( P6 P X' X$ k" b
public:2 f& C, h+ S% T" I" R7 m' R
CInventorySort()' M0 J/ R% U: Q) D9 e% H* O
{
: E. P- p3 R9 @) L m_dwPos = 0;3 ]$ w9 K' @' k- |
}
! V1 c2 w5 O, C" n, a" `( s~CInventorySort(){}5 S$ L4 q# X) j" v, k+ U/ @) |/ R
private:
' c- J8 U A8 I7 C4 MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 P1 S5 ?0 O! H9 R: q/ X' t. vDWORD m_dwPos;0 Q' W- e2 Y8 O1 K, F. v7 q1 S" [
public:$ t% { F+ _% z; y
void Add(BYTE nIndex)8 D; P+ X% L" b- h
{
' ~, Q7 z( w, ]3 K- k G if (m_dwPos >= MAX_INVENTORY)" @3 w! \; R& _3 v
{& h9 b. X2 Y$ r1 [8 }0 O( W0 S- h5 z
return;3 Y2 O/ n/ v8 U- _7 ~& b' \9 q5 F
}
+ T1 U0 J: x% S1 X) |' D3 ? m_Item[m_dwPos].nIndex = nIndex;
! c' l' e5 ~: ?8 C! ^ m_Item[m_dwPos].dwId = m_dwPos;
+ o# c# D, _9 f m_dwPos++;
- g: E3 h% o* t2 W% x}( d3 G& m7 e! f9 i- b" i3 I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 J1 F$ _1 D0 f
{
' L; i0 _5 u+ ]& z6 C- ?5 _ x for (int i=0;i<MAX_INVENTORY;i++)
3 D' j e2 k$ u7 S2 @1 F {8 x- `( R* }4 [# ^1 C
if (m_Item.dwId == dwId)$ b4 H5 z, U2 H- K" R/ a! I
{+ C; o4 C5 P$ V* F% K
return m_Item.nIndex;
1 m7 l" A* L! P) n# H0 ?+ d- s) j }
& @) \. J5 Y0 C2 X* } }/ W! B. ^ O' g' g" X' {
return 255;: V3 A9 p; E ?+ W! Z# t
}& E# v. W. O1 G6 J# a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* U5 M, G+ N: F8 R{2 b* X- `! x& `# W- Q3 l
BYTE nTmp = 0;
4 r% r/ x+ P: u. S, Y1 i bool bDest = false,bSrc = false;. o6 G4 x# |1 G& j% \
for (int i=0;i<MAX_INVENTORY;i++)1 x9 y a* }; \8 C6 ?% J6 L
{
7 [! X& c* w9 Z6 M& H if (dwSrcId == m_Item.dwId)3 } [* C5 b( a) F
{+ Q9 t1 ~& G* P' S. }6 C* e
//id相等 则 改变对应的dest和src
" B" H) P# T, }7 Q2 e4 V f( V nTmp = m_Item.nIndex;
! c. o" }! `( A: w m_Item.nIndex = dest; Z3 S, @5 o! V: o% S" R* q% z
}: j2 n2 W5 h# o
}
- ?% o/ j t4 a H2 z //临时数据保存完毕,交换开始$ o/ a8 ~ y! R, W5 u( S
for (int i=0;i<MAX_INVENTORY;i++), P$ I9 r7 Q* `, w3 C6 R
{9 r0 I$ n+ e# H! N5 C
if (dest == m_Item.nIndex)
# X# _% q# Q- h. a4 u# T {
* b- ~4 [ @4 s //id相等 则 改变对应的dest和src& Y$ P* c5 v0 C$ C0 R6 i9 y
m_Item.nIndex = nTmp;4 R4 b# s: A. A- }+ N/ s, ~
}
5 Y0 Z* ]% _% g( f }
: H$ a2 M* E7 J: Q. a9 ~* l}
% E8 D% ^/ b8 y9 j7 `' D};
4 h5 t7 c7 f; O# a7 ?/ N" ~-------------------------------------------------------------------------4 _% L0 L6 b2 U- N: j: |
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& a3 N5 ?5 B' { {: R; @( e: P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 j0 V4 {4 P# V0 y& a) W紧靠其上添加:
7 u+ C, D' ~9 B0 u- e" ^* f7 @0 Bif( pWndBase == &m_wndMenu )
' M: u; R V" R" x' U0 x R{
9 c% \8 Z( w5 B8 \8 Y7 I switch( nID )8 B1 P( q% N- c+ Y
{$ y4 _( b1 n; e' V/ o$ r. i
case 2:
2 K8 H5 h& B5 m+ A# J9 P {
) a* ]6 i2 z5 H2 C //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! a9 a- K' b1 ?8 s! ?4 j P if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" E8 U, n, I8 V8 i9 A3 M; D2 K4 G0 v
{* N. N, z3 A' ?
break;
0 \. r# P* [7 i5 y8 ~ }
3 k! w: }2 d9 f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 S7 f/ @- p) D0 G- J/ z {
$ u$ T0 s& W" m" T% A& H# x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" v' F/ M- n* l( w if( !pItemElem )
3 M& I6 q# f: b$ V/ v6 a continue;% i( [: M& I2 J: O
if(pItemElem->GetExtra() > 0)% v6 m1 Q% I: S% D. ?3 S, z5 R6 j$ ?
continue;7 R, k* _7 x, P3 v: A# U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . `9 l4 O2 m- Y0 N A& G! [
continue;1 D: k4 R$ H8 A' v
if( g_pPlayer->IsUsing( pItemElem ) )
4 O' c6 j5 u! D! X/ V/ a continue;
$ n. w+ F, X1 G8 u* E! b if( pItemElem->IsUndestructable() == TRUE )$ H0 S7 J2 I, G# e8 [
{
* ?* ^1 f( x: g! w7 i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' o/ J ^3 Y9 G9 P p$ a continue;9 @# Y \# X! L2 b- j5 V3 E3 l
}3 B# J: f# v: @6 n; s: V; l, v7 S$ T
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 P' q4 N% P3 [
}
5 k5 N {- e! U5 F, W. o, ^4 k break;3 Y$ M# }' r6 O6 b" ^
}
+ B/ n+ t! t7 W, C case 1:6 e5 e" _( D- O. s- w( j: B( Z* i
{
( f& m) P6 A# x+ [ //整理背包& q) \ y, R$ r0 c
//////////////////////////////////////////////////////////////////////////
& H. j- J# A# H9 `, X; c" p4 g //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 Z7 n1 Z) J6 c$ w5 V8 S0 T
//////////////////////////////////////////////////////////////////////////
/ o" S* c4 B+ _: c$ k( G //////////////////////////////////////////////////////////////////////////
" w7 g* H! F! s: A9 H CInventorySort* pInvSort = new CInventorySort;2 y! X( Q; ]. i ^
vector <sItem> vItem;
; \7 x D ]% y+ p9 F vItem.resize(MAX_INVENTORY);//初始化大小$ o6 R, X l; m
//////////////////////////////////////////////////////////////////////////5 q m1 `: R, L# \9 _% g
//填充数据
Y+ [. `1 ?4 l2 v" K' F for (int i=0;i<MAX_INVENTORY;i++)2 O9 M+ E0 l% E0 ?5 B
{
+ l' s" ?1 o( F6 I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ P, p6 S! q& E8 A0 x8 |
if (!pItemElem)
0 A0 E( h- L, M' ]# ]: y' l$ Q {- C, A0 F( _1 R) q
vItem.dwKind2 = 0xffffffff;% o. q" p+ N( U3 |! |; [
vItem.dwItemId = 0xffffffff;
) g$ _/ w) V7 g- t5 V* U vItem.nIndex = i;/ F% N) D5 g) r& R" Y
}else {
4 |9 W) K) H. U: t, h ItemProp* pProp = pItemElem->GetProp();
H" H% S4 A; ^4 C( d vItem.dwKind2 = pProp->dwItemKind2;2 i0 f: i7 w# W3 o2 S3 I W
vItem.dwItemId = pItemElem->m_dwItemId;; G& O: [% e3 a2 `2 o+ B) p
vItem.nIndex = i;
- g' H8 K8 A' j6 h% u1 F: W }9 E% I" Q; ~! }
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* H" [ K* [$ @9 v/ I( x
}( H; o% N# l+ \$ b ]9 ]
////////////////////////////////////////////////////////////////////////// I) l z( N# p; @; ~. @
sort(vItem.begin(),vItem.end());//排序# Z5 j8 S- g6 B9 R
//////////////////////////////////////////////////////////////////////////
3 w/ w, b# f; t+ G3 f //交换+ s5 Y5 }% L) Y" x
for (size_t i=0;i<vItem.size();i++)
, l' i: i3 |) t0 v6 p! U4 F {' w7 w3 z% L; x5 w& i. u- t
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ h" F# ~9 P+ P4 F* J4 ?
pInvSort->Add(vItem.nIndex);
1 q) \5 [3 _3 k7 S( {4 x }0 t# i, ?% {' V( h O2 \
BYTE nDestPos = 0;" F# e3 Z' ?* b5 l& y% b X3 f
for (int i=0;i<MAX_INVENTORY;i++)
- ` h- d: M" b* i. q {0 W- m! Y# X* i( G) m+ q: S
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. l8 g4 h ^6 _* I9 g: z n
if (pItemElem)
( f# k2 K0 t8 y' l7 [ {
& p& Q" x* X& ?* y if (IsUsingItem(pItemElem))4 i5 o9 X2 `' t- s( Y3 ?/ c9 `
{3 Y$ q5 F: q+ L8 r Y, n2 C. n
//这个位置无法放) v* P0 u7 d! f+ M& j
nDestPos++;3 Z3 g! b- M. J) e6 {2 y1 p" p7 _
}
% p5 @) ^- m8 l }
! V) x6 q( Y3 F) Y" t3 C! D BYTE nSrc = pInvSort->GetItemSrc(i);- R5 @/ L. e$ h8 S" p
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( w+ X7 t, r/ N: ]1 v1 {' _% A* U if (pItemElem)
8 R* Q( @' r. X/ i: V' o$ \9 o4 C1 e {
( S: I3 A4 U: |7 d# ^ if (IsUsingItem(pItemElem)) Q5 y& ~7 R) p! h0 F* e6 u
{, h8 A/ h. U) L+ Z8 z8 F" N
//这个道具无法移动,跳过
/ u9 \7 \5 u! {; a continue;
+ R; E# c0 a0 P0 k% a) r7 g }7 X# z& P% V, N% f4 g
}else{
+ W& S9 H) [: v0 L //空位置 不用动
$ J2 v' H7 D$ q) S- M! O continue;
- c2 ]* N, e! M' B }
; X( y3 v3 h- {& Q //////////////////////////////////////////////////////////////////////////
: @0 J) s i$ ^8 e //开始移动
n% }; I3 d# d& H* m, { if (nSrc == nDestPos). H9 c! O# X. h5 N
{( H) `, [; U: s; V, x. Y
//原地不动
! j; ^) T" ^* p' n+ p* u# R+ w nDestPos++;
! \" v7 |4 q: I/ O! u' K" P" O% Q5 ]% R continue;
# E1 H& N' \7 c% P/ k! C2 g# \4 O }" D7 P; d$ e. L
pInvSort->MoveItem(i,nDestPos);
0 R, E. M. { [9 F L2 A& W8 P' ` g_DPlay.SendMoveItem(0,nSrc,nDestPos);! D) k- u9 [/ M: v/ E
Sleep(5);
- ]/ C( R% P0 ?# ] //Error("移动 - %d->%d",nSrc,nDestPos);9 _5 m4 Q* `" \& Y6 @! }* J2 }% r
nDestPos++;
* q9 o+ J3 W8 U& K: m0 V } ?# M* \9 n/ K& j5 G6 t7 z" e1 R
//取第一个元素的信息
2 I6 p% D5 p- {# L /*
G' X1 N, y; i+ U, q4 | if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% i- U6 g u( e' Y8 R4 g! Y
{: ]( b0 H0 N1 v& S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 P/ H' K# u) d0 O( \# E
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- b* U8 L4 X: @- A# \" x1 j& N3 ^
}
. B1 [8 L! ?* e6 o$ {& f */
5 J" G+ Z$ J: S. B# R5 d3 P3 K //////////////////////////////////////////////////////////////////////////
: c7 v2 T, r* K6 {0 q8 W break;4 c3 Q/ \( d; Q! F) n& o" j2 ]
}/ i3 e- s& T" {) y* i) `
}
: R7 ], |4 y1 G}' g- U0 V" ^, m7 {0 ^% P9 o
m_wndMenu.SetVisible(FALSE);
. L2 k/ S6 o& x+ h( ?( _( j/ J; A6 J4 x5 y# e" \( X
--------------------------------------------------------------------------------------------------------6 q0 i) L9 u- k2 w+ |% W9 ?8 |
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! |( f8 q. M/ O* K& @
{
$ l6 Q/ J/ w3 G p; {/ aBaseMouseCursor();, I. m4 ]/ Z' V4 v& P
}2 W& l7 X4 b j8 N8 o4 e
在其下添加:
/ B2 o. ?, h6 l* i; _2 E e: z2 Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 G1 S) J. U# s6 }
{
' |5 x0 W$ P( Sm_wndMenu.DeleteAllMenu();* p: B/ j: R) Y* d* F) v/ s7 i
m_wndMenu.CreateMenu(this);3 k) \! j. x5 K. t, S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 w: a, n# Q1 Q/ N; E; { G2 q% p
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& k& {- j8 \! N3 v- t4 \{
; F9 u* w/ \$ D3 a* s //P以上级别才可以删除所有道具8 U# q- [0 X) S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% m- ?! Q$ m. F- [}( |; `; v4 V2 J. Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. { V' u( L. u6 b* t( g+ E; Bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) A6 @% n! s4 f: c5 bm_wndMenu.SetFocus();# D! ]2 ~* z$ `0 ~% k
}
) l# k: `; z; P, ?7 t- C9 F; }. ~( C5 T------------------------------------------------------------------------------------------------------------
# j; P7 {$ n; a: ^" L6 \2 Z- j*************************7 k: d B' A/ O3 x$ k: F# F( Y. G
WndField.h文件3 u0 ^" u. \4 d6 N4 x8 ]
*************************0 g" I/ X) s5 L, F- g- U. Q. I
搜索:BOOL m_bReport;5 y" _+ w6 @; Z
其后添加:9 J4 \9 i& Y6 G0 @2 S
CWndMenu m_wndMenu;
, O- w1 s* `3 O# w2 C) V& [1 M. m" P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. f- D; o. W. n; k2 q! H, d
其后添加:
. u1 U1 u7 j9 J( q" Q, Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
c! ?& |8 l; ]6 @1 f, Q0 d
& P9 E6 S; u4 q
: R* u( X$ c# i' K2 Y |
|