飞飞世界论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 17206|回复: 0
打印 上一主题 下一主题

一键整理背包

[复制链接]

197

主题

203

帖子

1068

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1068
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
& h6 U: E) r8 w+ o# W& d/ W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. g4 O/ Z' p$ g. B/ s) M+ r1 Y, `2 q, h; v. b( x8 Z
struct sItem* c5 u& F4 u1 {- J/ t/ [2 u
{
. ?; i1 j% D  q3 JDWORD dwId;' q" y8 X% s( M" L
DWORD dwKind2;$ M  J' z) j$ u6 u8 I
DWORD dwItemId;
4 C% x" W1 K6 u) m& p9 T  V0 ^7 S! x# XBYTE nIndex;
0 {; D7 Z4 T' DsItem(){! c/ M- C4 T5 E5 n( @4 s6 n4 p
  dwId = dwKind2 = dwItemId = nIndex = 0;
7 n$ t: U) m* Y  t}! U  o( M6 J) I$ C- ~* X5 ^
bool operator < (const sItem p2)* \. Z) r( j# t" P! C
{
/ V1 T6 Y+ ?( u: O( k4 e; H  if (dwKind2 == p2.dwKind2)
1 \7 c# u( @$ S9 i8 l( \  {1 d+ S2 F* M6 V7 ]1 E7 ?
   return dwItemId < p2.dwItemId;
4 N1 A- Q$ p$ T7 E+ P% l9 D; U  }else{
% p6 n$ E+ K$ p1 u   return dwKind2 < p2.dwKind2;' n# v( ?: y% p; a
  }
9 c: y! \) W  G0 [5 `: E}
  z! m# p1 r; q" n3 \% m+ F};
$ N5 n4 W- [, iclass CInventorySort" B, _, ]: ]9 H5 [; q; T, }
{* y$ ~9 Z5 {$ |1 q, t
public:, X- v8 w) O0 A( s
CInventorySort()& Z. m. `: C" H: i
{
* z# c6 T! }( Z0 z. p; t3 r) ]1 K  m_dwPos = 0;
7 n3 [+ n# P6 O* d- ^  e4 E}/ ^, i% e1 [( [* e% y# O; d4 o
~CInventorySort(){}1 x# g$ @- N" E0 k
private:) d* l6 ^& p: z) G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 |7 V  y7 {7 ?$ E: ?% ^$ I1 Y
DWORD m_dwPos;
9 n% y& W0 S' I  i% \) d' jpublic:
) y4 D1 ]! m; p3 T" Kvoid Add(BYTE nIndex)
7 |. {# x/ {8 M" b{
8 y) m0 D- z: @' N- U! g  Z  if (m_dwPos >= MAX_INVENTORY)
6 e. F- H5 d  V3 A9 e$ v; c  {* `; S+ U6 _" u$ H
   return;
# v' g! t* k8 b8 Y8 D# G/ a  }1 S: L" E8 ?: z$ v) U* x
  m_Item[m_dwPos].nIndex = nIndex;
0 T* T# R9 E; p3 A1 r; }  m_Item[m_dwPos].dwId = m_dwPos;
  c1 K. X& q. g4 N- S5 O8 v" F& Z# y  m_dwPos++;
' o& h  d! C1 A* }: w- Q2 K$ p}6 @# H) V& A7 k! c
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, o1 I# Y1 ]2 C/ x! g
{
4 w$ r1 R6 c: a' h$ ^1 K' K  for (int i=0;i<MAX_INVENTORY;i++)( e9 C- T7 }2 x
  {1 L4 u3 j; i' X# Q' v& I5 m" r
   if (m_Item.dwId == dwId)
4 ~% @; y; t6 N3 j! ?  M   {
  T9 X* ?8 i" E& S2 ]8 y, h    return m_Item.nIndex;% I/ ?& M4 h, j9 E6 K# O
   }
# S# L( K7 v) N$ D$ f8 T  }
) Z% Q2 U& @3 K/ O$ b. U  return 255;! L- ~# b- P5 _4 V6 {0 {
}
2 w$ e0 R& Q5 ?- p3 ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* L6 T( h0 x6 _4 V0 q$ y{; \! b7 C+ V, A+ ~9 G: M' m
  BYTE nTmp = 0;7 ?. Z$ P7 C$ C) i% ^, E
  bool bDest = false,bSrc = false;
5 G1 X9 S- p6 }2 Y3 W  for (int i=0;i<MAX_INVENTORY;i++)" p+ p) b. F, X: F& R! }& p+ t6 y% I$ H
  {
% Z) i& ]' P: {2 {% B6 F5 X   if (dwSrcId == m_Item.dwId). V) U1 y2 |. g# X/ _3 S- k# E
   {: b9 F. G8 h% f0 Z; d
    //id相等 则 改变对应的dest和src$ G; G& e# R1 r' o6 z% E1 d- H. l
    nTmp = m_Item.nIndex;
3 k+ w' v6 _9 h6 @( u: Q" f1 }- p    m_Item.nIndex = dest;# c% q; ^5 T+ ^
   }
% H7 U; Y% F. C4 q  }2 ?+ j! Z4 z5 o1 j& t
  //临时数据保存完毕,交换开始
' T. v, @- O& z. J  for (int i=0;i<MAX_INVENTORY;i++)/ f- g* d( O+ q8 @  t. m
  {
/ e- @! U% k% N  m; c   if (dest == m_Item.nIndex)- ?3 n; F' p9 W6 u" t+ ]) G
   {
) j. m- y5 O. i! F6 Y' f4 _0 E! G; [    //id相等 则 改变对应的dest和src" C1 l0 e. F" W! O7 \
    m_Item.nIndex = nTmp;
' T( c* o5 }! {4 R/ y   }+ E' p) t2 B7 ]0 F
  }
( O# c9 X" i8 D2 G, O8 c" @& c6 o}! @' d& f4 R5 `2 h1 x# J
};
$ Y0 v( |0 Q! W7 [! m* e! S-------------------------------------------------------------------------
2 ]. U0 x' ^1 ^) i$ r依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% Z5 w; }( {$ c" T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' U' r' Z& y, h  w1 j/ G紧靠其上添加:& v+ \) h, k6 A$ A
if( pWndBase == &m_wndMenu )
- ?6 j. L2 t$ p: B{" [+ M0 P# a4 }6 o
  switch( nID )
4 t" ?; ^, E' P  P1 U7 O: f* b  {
& Z- x, v$ K7 _* N, d2 k  case 2:
' c1 n* M0 F7 m7 v( u0 `( c, t   {  L+ Y. _/ j6 p3 K" @
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 H0 k* B) e9 c2 x  n. f9 ], x5 X
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& e* [# t, R$ E" \) o. K
    {
8 e8 ]4 N4 q/ \     break;
3 k* G- }3 ?8 M, N7 m    }
9 p1 D" J; u6 p% h: D    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! `4 \( M: b# I& O; W    {
" k" c9 S* ?( W* o! z     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 G! d- `) Z8 P( t  |$ g9 Q4 v     if( !pItemElem )
- o- f& c! g( Z5 T  |      continue;1 w2 ^. I7 q! u0 U7 d) U0 A2 d
     if(pItemElem->GetExtra() > 0)
" X, `& X; k2 G. c" E- c6 `) `/ o7 V      continue;
( \5 K; l9 [$ O8 e9 l% n' [& Q     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
  `5 ~" ]; W8 C0 U$ I0 B2 u      continue;/ P9 P: ^# W4 o+ h) J
     if( g_pPlayer->IsUsing( pItemElem ) )
' [. V0 y3 G$ R9 n, o8 e      continue;
( y/ ~* H, U- q9 D6 |     if( pItemElem->IsUndestructable() == TRUE )  c4 H' H- r! g3 A8 y7 b5 r
     {
. p. H/ V8 q  m0 R  r      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 l' w( p$ n. L/ s1 c, o+ q      continue;" f" [4 ^. K- |% Y: ~- D  |2 t$ g
     }: L" q( h# I$ o8 i. e
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 s5 }! ]! C% H3 s, R  Q
    }- k+ ?4 V" L- o' ]
    break;
( ^/ T8 R% \% n0 N8 |6 J( J# a   }
! g+ b# Z, w& ~, L% ]0 _' P& h  case 1:
. d: p" m9 c9 r3 v, Q8 O$ P0 H   {
9 c2 G" p( O9 ?6 @    //整理背包% k4 w/ g( h9 V, Y1 K. ?) y( m
    //////////////////////////////////////////////////////////////////////////, }3 |0 S) i' j1 H2 y% n/ L  B" d
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( G7 \# K1 Z' o3 }% H4 T( a
    //////////////////////////////////////////////////////////////////////////6 P; P- r" |2 ~5 H: k% ]5 T4 l
    //////////////////////////////////////////////////////////////////////////
0 X: q( l& {2 h$ u3 n, q$ a, h    CInventorySort* pInvSort = new CInventorySort;1 m2 J) k7 i. Y
    vector <sItem> vItem;
) c5 f8 @( v5 I    vItem.resize(MAX_INVENTORY);//初始化大小' \8 Y" E' l7 O3 m
     //////////////////////////////////////////////////////////////////////////5 W8 z8 P$ p5 z, X0 z1 c9 I
     //填充数据+ @& k- }: w8 k  n- m4 p: G5 ~
     for (int i=0;i<MAX_INVENTORY;i++)/ g  B4 I/ X$ n6 Q4 o. Q8 y  f
     {1 b; g* b# G$ e4 W8 \* @
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" P4 b# [$ T+ W5 p" I' h0 R0 ~3 |
      if (!pItemElem)' J4 Q# [3 e% G# I5 k
      {) q( i( o- A+ U; ~3 P* r' `2 i
       vItem.dwKind2 = 0xffffffff;
4 A, Q3 r8 u/ A( B: l       vItem.dwItemId = 0xffffffff;3 s# |: }" a  M) `+ N/ _  i! A
       vItem.nIndex = i;5 z& K8 ?7 q% p) P; L9 Z, D7 a- X
      }else {
- i! H+ n( B; D5 D% T       ItemProp* pProp = pItemElem->GetProp();
, `1 U. K( q5 U% i; L& g7 I       vItem.dwKind2 = pProp->dwItemKind2;
& Q. c$ e7 C+ k! p6 Q       vItem.dwItemId = pItemElem->m_dwItemId;6 N# g, l/ x( h% l3 U' ?
       vItem.nIndex = i;& Z0 M7 H, S7 `4 N
      }) G5 }8 P" g, A4 i4 P, J
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' F5 y/ j4 u! A3 s- m( d     }- B$ e3 ]5 i) G! X0 O
     //////////////////////////////////////////////////////////////////////////
1 Q. ?, z; ?- h. @     sort(vItem.begin(),vItem.end());//排序& @8 p: r% q5 J0 c% C
     //////////////////////////////////////////////////////////////////////////% J' N, X7 ?- R5 T2 Z
     //交换+ m8 f6 n: _, @: g  M2 D/ C
     for (size_t i=0;i<vItem.size();i++)
1 b! P  L2 W5 J     {
1 z$ X8 ~" z, n) _! r& R# `" ]      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) X5 {0 r5 {) L
      pInvSort->Add(vItem.nIndex);
9 p) S$ `' ]+ m; P3 S3 z     }
! p; R. z9 B9 C. m! {* Y4 \' E     BYTE nDestPos = 0;( }; c8 {# G8 b
     for (int i=0;i<MAX_INVENTORY;i++)
; a- {4 c4 ~6 o! ?' c     {
( F. j  K; O2 R2 y9 L; L. t      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; j& V8 o4 A( X9 l% ~2 [9 o( ^- p( Z
      if (pItemElem)8 `! l' J0 I8 x6 ^/ j
      {
' R. ?/ C, b0 t* `& `& K       if (IsUsingItem(pItemElem))+ H7 Q1 Y- g: W3 O) y& B% `
       {: g0 e& c$ H% F& `. ?( }
        //这个位置无法放$ `* P  x6 W2 L' h; N
        nDestPos++;% F% o' B( `5 v) I8 k
       }
2 n' x( C. M1 O) M5 w3 X9 s/ X$ d      }
; D3 Q6 f7 ^4 w4 y2 o0 t, o* Q6 ^      BYTE nSrc = pInvSort->GetItemSrc(i);
& Z0 ]8 n4 r: V$ l      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 ~6 Z% o5 I2 V9 `
      if (pItemElem)
" j2 N9 {9 [  F8 ]! X$ ^9 J  s) c% O      {- C* d3 b, w( N- N+ E; l
       if (IsUsingItem(pItemElem))( f- X- c- S/ m' v& h
       {
" S; n' r( J3 L0 _+ E        //这个道具无法移动,跳过
5 _1 _3 j7 y, {4 C+ t) l        continue;
" b) N! `6 N( p  S' _       }7 o5 M9 L3 S' h' J" o* m
      }else{& c/ P7 V# o3 t: d; ?7 I2 h
       //空位置 不用动2 m, A- x& w4 F9 m3 S- u# o' E
       continue;
0 A6 \3 O' [- _8 a0 B1 P" _6 O      }, u, r' G  t  Y3 d/ V
      //////////////////////////////////////////////////////////////////////////1 q) y/ D1 @' O/ ^' y) X
      //开始移动& n0 o0 r  b. Q- P4 n0 ^* r
      if (nSrc == nDestPos)/ k5 ?) f2 |9 C
      {, I& f7 o' j  R, F) [2 k) M
       //原地不动
# Q% g7 j. y) U4 z, Q$ z       nDestPos++;8 R$ ~" R5 {! g' e7 v4 L# ^: y
       continue;
# ?2 s2 R& y; q" O- B) x( u6 Y; q/ Z      }# R0 |1 \) V; G4 u6 M% H
      pInvSort->MoveItem(i,nDestPos);( P& }  ^3 Q) f. v, [
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);! U, w* T  ?/ L/ A- b
      Sleep(5);
# w( e7 u# D9 Z1 t5 k/ t      //Error("移动 - %d->%d",nSrc,nDestPos);
2 N, h6 b( Z, ~; ~1 G" f) t      nDestPos++;
! ]5 Q0 x0 I8 q: ^2 F( s3 g     }
2 m( M! V1 a% `4 J     //取第一个元素的信息8 J6 C2 Y7 M: T; {. A, h6 U
     /*
. b2 C/ J* z4 i3 j     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- [& N. `  k: I/ Y+ P- L0 q7 b     {( ^6 J6 u6 `' J* k
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; v  j0 \5 w8 x" Z: Q1 N2 T9 e- y' |
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- r* ~3 L; n6 G1 f0 i; v" L/ ]" u. n( ^     }( v9 ~% e" u4 ~* x% n, i
     */6 M5 b% b$ S$ E1 D& o9 W
    //////////////////////////////////////////////////////////////////////////
" V% R. c8 n/ G+ v( w    break;( K0 x8 r/ j9 i  w! g* ?, [
   }
( b" K" z! m( q5 ?7 I6 N0 h4 s  } 8 ^: B6 x+ F0 n" d! w4 u
}  a) n7 Q1 U. b& B$ u
m_wndMenu.SetVisible(FALSE);
9 _1 c3 O7 W, x1 [) b$ J) k/ Q4 A: B! y
' H2 z( V, h4 x; w--------------------------------------------------------------------------------------------------------& E: r3 w' g( j. f3 t  y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- L$ g* u* b3 `7 _6 o" N/ H
{. y* B' u8 W- G6 ?
BaseMouseCursor();5 a9 _5 E+ e9 r; M, n. V
}
8 ^: C% L2 C) p8 d8 h- l在其下添加:
0 T" ]/ W; N! P  ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% c4 L, c2 V( R& M! ?
{% o8 |6 r( N; V2 a' Y* e; D" D( q# }
m_wndMenu.DeleteAllMenu();
3 G  x7 W6 v5 t( sm_wndMenu.CreateMenu(this);
6 b7 w5 @/ {4 \: _  R/ J) Z' w2 M4 Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! |* V- q0 b5 E7 ^6 @
2 _9 S- k7 ]" ~# U5 Cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' g, {# H( _- D) G/ n{% K1 H3 s0 |+ N6 [) j0 z) q, a
  //P以上级别才可以删除所有道具
$ w' ~% m! Q. G  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 K. q# n( e: |% ^}, C' c. F: M2 ?* M: v3 N4 z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 X( v, j& x2 r& ]6 A& Am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. c" v% R3 W2 Z
m_wndMenu.SetFocus();: m/ E6 f9 w) c& f/ b  m
}
( t( P; ]( D" _$ Q% W------------------------------------------------------------------------------------------------------------; O; G% h- a9 x$ y# R# U
*************************- n( j7 N  u9 y( ^$ T7 x# F9 E. w
WndField.h文件! f5 O# ]) l3 a" N+ O' X' C# d
*************************
/ S! v  \2 S7 F/ o& f搜索:BOOL m_bReport;6 h( r: ]' ^; ]. a
其后添加:
. m' R' p8 r- r( ~CWndMenu m_wndMenu;% N7 ~$ K" X: {; f$ E
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ z$ F: K' v# b5 {. s- [6 i, S; f
其后添加:, n1 Y- b2 h9 I9 N! ^
virtual void OnRButtonUp(UINT nFlags, CPoint point);; n" X) b# h5 H
* \1 p% J; U" N" N, B  V8 ^! Z
# }8 [' p! M6 R, C, I8 j7 G

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|飞飞世界技术论坛  

GMT+8, 2025-8-28 09:18 , Processed in 0.072993 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表