飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
9 M6 Y7 H3 Z4 r- m# n8 ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- t! A$ X- a3 ^- Q  Q7 K6 e" l

0 U2 a1 l! t2 S8 ]$ pstruct sItem' S9 F- \. s# d) v7 A7 s% H
{& w1 K; C6 V) U; k( ~# L2 Y
DWORD dwId;
8 Y( A* R0 H( T# e5 o/ K$ _1 W1 u* ?DWORD dwKind2;+ k- V7 y! O8 {1 M: G( U& q
DWORD dwItemId;
* g& W* O& z  q; }5 VBYTE nIndex;: m! Q$ H1 i3 e4 Z
sItem(){) R6 g5 o- _9 N7 H5 N6 [+ J# j
  dwId = dwKind2 = dwItemId = nIndex = 0;* j6 n% u2 e! e, k" b  c
}
4 c7 U& a( P3 q8 H2 M/ obool operator < (const sItem p2)
* R4 a$ t+ a: X! s{' p( R5 w3 f5 x) @5 B' @$ T  A/ P
  if (dwKind2 == p2.dwKind2)  f8 F. a; D: E% J) H
  {# A9 n) B0 I: b1 r5 {
   return dwItemId < p2.dwItemId;
! w5 y2 w. ~% f5 s  }else{9 P% K- @0 V1 j. B
   return dwKind2 < p2.dwKind2;
! B$ S8 [8 Z8 w# y+ g. @1 x% _6 ^  }3 a, v# r$ r8 q) F/ o" J  t
}
& r1 r- ?2 X5 x+ l};
$ k, _& O  J6 T# l; C( \class CInventorySort
; u6 z6 U+ q  g8 A  Z' h{
5 A$ b8 \; Z4 l; w" Y8 k- z& opublic:
7 {' j: A4 V& p% Z6 t0 D# d4 qCInventorySort()
. t, |. N! `: r- a{6 z2 q+ l/ n0 E3 b7 _
  m_dwPos = 0;
# c! q9 U7 _. m' p' F}  j: p* W0 t) P, u
~CInventorySort(){}
! y! Q7 P& H) g2 `8 x) k! J0 ^: ?private:
! ~- H% g2 A3 DsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: s0 ^. I! @: c& |# s: w& IDWORD m_dwPos;
3 i* i1 J3 u/ J) f( P1 npublic:
0 ?1 y' x# ?  d# u' qvoid Add(BYTE nIndex)3 j" l: ?/ y4 d# N. T2 h
{1 c' L" w7 q  i# w& d
  if (m_dwPos >= MAX_INVENTORY)
. [- ^2 \" I1 h0 e  `  {
+ A0 f, ^8 g' o# c% f   return;: y2 Q9 R- T  d* o/ _
  }. k+ Z1 X. p( ]# d/ a* x
  m_Item[m_dwPos].nIndex = nIndex;; h. y7 ~4 ~6 p* w
  m_Item[m_dwPos].dwId = m_dwPos;. H  p2 o, c7 R# y
  m_dwPos++;4 E1 j0 r2 Y) ^. N; Z
}0 I2 y; N0 ?9 R, n" ^$ s7 R: g$ I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( o5 Q- W8 U% S6 P
{7 e7 P; `" I; ~" _
  for (int i=0;i<MAX_INVENTORY;i++)) i1 d% w: H6 N$ C
  {* v9 ?  J/ S! l  O
   if (m_Item.dwId == dwId)7 C8 K- _; Q, R% q0 C
   {7 S% r% o: y. l% i5 r+ d  T
    return m_Item.nIndex;6 E* Y6 L' w1 S0 z+ |, O
   }( N, y1 h9 y/ @& w) {1 V* N' r: P
  }$ U4 L/ W, ]' X/ F
  return 255;
- ~( k* `$ J# a/ }}
( r2 G: v' M  S8 Dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 q  A" Q4 B* f0 W! R{
& v* ^% s: a7 i  BYTE nTmp = 0;
5 ?4 \2 v9 S/ g# h: C  bool bDest = false,bSrc = false;; I8 r( U/ v# ]' h
  for (int i=0;i<MAX_INVENTORY;i++), i# v: N/ {: o
  {
; p; `6 R* N8 n   if (dwSrcId == m_Item.dwId)
! }9 m  @+ A0 G9 C2 m   {
) S# c( b: e0 i* {+ u, H: [    //id相等 则 改变对应的dest和src9 f% O# C; R) X. J* U( q
    nTmp = m_Item.nIndex;6 @/ C: n! `7 z8 ?& M7 g/ U& A
    m_Item.nIndex = dest;0 B3 k- h( z7 s7 W8 X" H
   }/ W( d% R6 Z( ?: A, R2 f
  }
; L( o. F2 v3 H1 _* w8 |  //临时数据保存完毕,交换开始8 p1 E2 }" R! x, t  D& f9 k, I
  for (int i=0;i<MAX_INVENTORY;i++)  k$ I0 F* i! R
  {
7 k( f. U4 I7 g  j8 K5 T. s) @   if (dest == m_Item.nIndex)
, U4 m& u* m5 q  u3 N" w2 h   {
$ i& a, v* w$ N' Q    //id相等 则 改变对应的dest和src
' f  l2 {( f  x5 _    m_Item.nIndex = nTmp;: j" s6 l( ]( f( T5 b
   }
( l" B$ f; W" k1 y" r  }
) ~( c: @& M5 V8 l}
* z4 R3 Q  k4 V' m2 y};
9 ?3 _2 @/ o8 G3 G6 w-------------------------------------------------------------------------* f2 J; ]. d6 J9 \% M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' A) E  m; l+ U4 P: _: w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);. w# d! K! X' {9 M) j
紧靠其上添加:
( i+ D5 g; ^1 Z. Q' D5 `! p  W9 K3 `if( pWndBase == &m_wndMenu )9 A: }5 G% k6 H% D4 i
{; v: S" N: Q2 s6 R$ ^# }. {
  switch( nID )1 `. {. Z1 O5 V& e2 E- `* c. I
  {" i2 K+ y2 V# i
  case 2:
6 p+ x+ Q% u& s   {' p1 N) c# B- a  d
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! P) w; h' [- Y, e7 G    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ X5 p2 H/ Y( `' [    {9 ~3 x- J  q7 C% M% {+ f" e; `
     break;
" l9 f" M. H9 C, k! J2 `: i' D/ y    }9 Y- j9 F( m! f8 K
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& ~2 ?( w) ?/ y) O
    {* w0 [3 w* c; I& V, k! b: t. U
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 N" F) p/ ?) S% y+ v% U  T; a, w
     if( !pItemElem )
$ D) }& f6 x2 Y; p3 E# G      continue;
4 G3 s) X1 u0 {: M2 n     if(pItemElem->GetExtra() > 0)9 A6 p3 D& ?+ L  J8 x
      continue;( x2 I+ y* i( \* R' M' {
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) [" R7 z6 i* m; D' }      continue;) R) t# r& X% l/ [6 P2 o$ D& s& s
     if( g_pPlayer->IsUsing( pItemElem ) )
+ \* ?* m( v* F, ~+ Z$ x5 Q      continue;
! Z: p8 x$ g. p: u! C. X- I     if( pItemElem->IsUndestructable() == TRUE )
" m1 j' B; j1 K2 C# n- u! k     {
  g3 e( ]4 X7 ?; |5 j      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' r5 y5 O8 A% S
      continue;$ Z2 r8 \/ C, U1 U- T1 d+ j* z
     }
3 Y" ^' Y$ n9 P: `8 X     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 d& m8 O& V7 \0 g
    }$ D" K3 u6 _: y. A. b4 O* h* s1 v
    break;- E% I0 d& I; \0 ~& P" `% A
   }: q( w2 Y+ Y( d) X6 H$ K. N3 F7 E* b
  case 1:
$ G* k+ K! j( B5 y9 L2 M   {
  n* s& t% U1 o6 I: b7 O    //整理背包
) w, V% ]% u( h1 Z. a% c    //////////////////////////////////////////////////////////////////////////' F* e0 E" d' K8 {; f
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% v9 x  a  A! i* p
    //////////////////////////////////////////////////////////////////////////" n% {: V; A" f1 f- _
    //////////////////////////////////////////////////////////////////////////
* \! q# J) v+ b$ ^# ]9 Y    CInventorySort* pInvSort = new CInventorySort;6 B8 _7 C9 A5 O' [; C
    vector <sItem> vItem;3 G6 P' P: S5 @/ d* H
    vItem.resize(MAX_INVENTORY);//初始化大小
7 @# W0 E$ z- t" [     //////////////////////////////////////////////////////////////////////////
( h! g2 C% |( \8 q& ~. t6 \( p, x! B     //填充数据
- G) Q9 K0 P: y0 M7 ^4 P& E+ v     for (int i=0;i<MAX_INVENTORY;i++)! w: W# d  @& H# f
     {
1 K3 j8 b0 ?. H' ]; x3 E7 i      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: U1 z/ r- d1 `+ F$ R6 d
      if (!pItemElem)
7 D. Y/ ^6 O" P& i( f      {
5 z5 x9 J8 F% ^6 k& d       vItem.dwKind2 = 0xffffffff;6 Z: f- v/ H% ^" c7 t/ N! v* p$ D
       vItem.dwItemId = 0xffffffff;+ G7 P5 a* u5 l$ O. v' \0 K$ N
       vItem.nIndex = i;3 a$ x  X7 \$ C! j$ g
      }else {0 c1 i. A- i% d3 G. @
       ItemProp* pProp = pItemElem->GetProp();6 j0 |$ U8 V/ c! I
       vItem.dwKind2 = pProp->dwItemKind2;
, O1 a0 ]" Q( C% R8 C$ l8 w  p       vItem.dwItemId = pItemElem->m_dwItemId;6 [" ?. {7 u6 l* Z. R! l. C/ h
       vItem.nIndex = i;
5 ^4 Y$ ]( ^1 D. ?      }
# c& N, \; m0 F5 A      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# Y9 R( \' A8 H" d* a, K3 V4 [
     }8 C# ?# z2 w+ V, C) l) S
     //////////////////////////////////////////////////////////////////////////5 ~  Q7 O' O$ ]: |
     sort(vItem.begin(),vItem.end());//排序! C( r2 k# j0 x$ ~9 J( D; l$ E
     //////////////////////////////////////////////////////////////////////////: a9 q9 a# U0 l- O
     //交换
+ f, N$ m" q" ^     for (size_t i=0;i<vItem.size();i++)
6 R* p7 c, J: S3 o     {
8 d% T" a1 s! l- g      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* ?" _' e& F$ }% |5 z- z
      pInvSort->Add(vItem.nIndex);1 `* [. s6 I- k1 R6 d
     }
+ q5 U( [, A/ E) c' B" ]9 C* G8 c* J     BYTE nDestPos = 0;
" E0 U1 D' c3 i( ^     for (int i=0;i<MAX_INVENTORY;i++)4 A  e+ j  Z' K0 H9 Q' |
     {
! y( L9 f/ }* Y5 a( q- v      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& c3 L$ ?$ @& Y0 B2 E' O6 k8 y  X      if (pItemElem)( M$ ^5 ]8 V- z, l! ^) E$ K/ X
      {
/ t% c2 t/ c' J( Q       if (IsUsingItem(pItemElem))4 Z5 T' A* n- b* a
       {! m, l- k5 ]3 z
        //这个位置无法放
1 H$ A6 i2 N. P' [% O        nDestPos++;
0 w4 p. A+ N- Z9 d8 Q1 T1 t       }  @0 n+ ?% {" D& }6 |- g$ e
      }! j( z! `1 g' q8 a; P5 a
      BYTE nSrc = pInvSort->GetItemSrc(i);- |8 }6 I6 E" E
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ L! [7 j2 }" E
      if (pItemElem)
. |+ V0 c. w- r+ c% q0 b6 i* h, M      {9 X! q, B) f$ B4 x: E. k- S
       if (IsUsingItem(pItemElem))
! f4 J6 L5 z& O/ Q: B0 M, P5 r       {
5 P8 P7 @, A- z8 }# ^" F/ P; I        //这个道具无法移动,跳过
- y  R; b- r( \        continue;( m1 {% B! n7 e: b1 s
       }
$ L' d4 X, D1 U      }else{! U. Q  ]: b0 C8 O: ]
       //空位置 不用动. T0 [/ ?9 e1 m) y2 S+ V
       continue;
7 S* {: V% E4 H4 A8 g      }0 A7 n" Z5 N* f8 U& Y* t& p
      //////////////////////////////////////////////////////////////////////////
, }; Q' G  a2 `" W+ d. _      //开始移动& T( I0 Y1 g+ c
      if (nSrc == nDestPos)) r; F4 @' D/ t$ B* c3 |
      {
$ G0 A6 R. P4 c6 C* n       //原地不动
7 H* `5 ^  J6 b3 e7 I$ i       nDestPos++;& J- S0 q$ H$ C/ `5 a* e
       continue;6 P# b1 E$ i* g: l: F' u% g
      }% F! Y) M! R6 \: I5 [. `
      pInvSort->MoveItem(i,nDestPos);8 A( k8 h( A/ L+ A: f- o- j
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' y- ~' O  ^4 e& P. x      Sleep(5);
; J0 B6 i& h6 d: u+ [4 s& G      //Error("移动 - %d->%d",nSrc,nDestPos);
( J/ _- o- X2 J      nDestPos++;* K9 b; C- R0 n7 ?, ^7 j3 c7 e
     }7 q6 k( y7 L' D5 X
     //取第一个元素的信息6 [, f% Z, o4 Y6 y$ Z" K
     /*8 H1 t9 |# B- H$ j. P# R+ e4 {
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% y5 B0 z6 g. @' l6 J# F  {
     {7 P$ Z2 [$ \; N# a. Z
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 Q* K/ {8 ?0 ?/ p7 n      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 l9 y  C, S1 t) [+ T. u: ~
     }
$ ^( J0 }( _5 m2 Z8 Y     */. ^9 V  H9 K3 l3 |  \
    //////////////////////////////////////////////////////////////////////////& V3 k5 n8 C9 F1 o6 I
    break;
5 g2 P: C1 R4 X   }
/ D8 n4 j- y+ z- A  o  } / u& V: c6 M6 }7 i. j7 a5 m1 O. Q
}
8 o( Y, r" F0 S' n0 X2 _. S! k+ om_wndMenu.SetVisible(FALSE);+ n+ b  i1 A7 ?6 u' E0 I% }5 L( D

; v6 T9 r) Y6 Y( G! a--------------------------------------------------------------------------------------------------------% g7 _: b& S* ?. n; z* j% d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 e9 i! O9 D: a/ D$ q( e4 \{- s0 I& ]$ k& i3 _- J7 D
BaseMouseCursor();# K9 u; L0 a: d
}: j  F. b  K3 y; i8 i% y. f
在其下添加:
  q  J7 C9 X0 r/ Vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 y) W) _- a; X, ?$ m2 H7 O" g{$ h: {: x) ]. c; [! f- Y
m_wndMenu.DeleteAllMenu();; O0 h! q& u& `: ?
m_wndMenu.CreateMenu(this);! U5 }& u' b- N5 r  `; `* j/ O
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ |  L$ [0 S! V1 s2 e$ i4 U
& N  v' G7 {- @( {if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( i( ~  B* ^  L" v
{: I( R" U; {. e# J2 Z! }4 h) w: p
  //P以上级别才可以删除所有道具6 T/ A1 D: l: `
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- h1 p) ]7 W1 S}
: e  H* ?- G/ B( z* `0 e0 ~" @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% a0 L) X) l$ N. s1 w5 M- vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 \( J) m& b! E9 N/ d) @
m_wndMenu.SetFocus();* a" r7 G8 D# m# m( ]
}
' _& C! W, p4 w7 d1 X------------------------------------------------------------------------------------------------------------
% w3 O5 D5 O2 ]*************************; z; D# m8 ?, R& I
WndField.h文件
) a) t# @0 O- z! |0 F! P0 i*************************
7 ^3 }0 I# m; }' A/ x; R* v( o! ]搜索:BOOL m_bReport;
" B; ~3 y. N+ K; C3 q% s. `. \其后添加:
) b" |, N% c4 uCWndMenu m_wndMenu;
( t4 i3 H2 `  N' C: v1 }搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ X( i9 s) j' ^+ Z$ R8 O其后添加:
+ E5 x% C) Z0 Dvirtual void OnRButtonUp(UINT nFlags, CPoint point);/ l! N6 p% r, ~4 Z
  X8 Y1 o  ?& q4 i: ^

: a( q2 |' L! d( U7 V% L7 ~% \

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-21 22:43 , Processed in 0.063609 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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