飞飞世界论坛

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

一键整理背包

[复制链接]

200

主题

203

帖子

984

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
984
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件- S; |# Y3 D( f, g7 @% Z7 \# H
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )  @9 X$ x- ~% y
4 s2 r, n- J" d: \6 [
struct sItem: d* H( E4 O) c
{. E, j  E# m4 D! Q
DWORD dwId;8 o* v9 F5 h: c4 {4 M  x
DWORD dwKind2;
& s$ j# S7 H- q9 M# r+ |$ LDWORD dwItemId;9 O2 T/ o: o% T- \+ ?) {
BYTE nIndex;1 O9 Z7 Z& K, d+ x! Q* I
sItem(){
4 G" d: ^- T8 e" Y% ^+ G  dwId = dwKind2 = dwItemId = nIndex = 0;  n5 j+ w" J! H$ u/ q
}
3 g3 Y4 ?( p. ?bool operator < (const sItem p2), G) C) T5 F0 Z# ^3 I4 r' W
{5 e" R% _0 f3 R" w" _
  if (dwKind2 == p2.dwKind2)
% h) c5 A6 `, K  {4 I+ j( f1 h  c2 Q
   return dwItemId < p2.dwItemId;
! N) s6 d% n0 a! r  }else{; V- L0 m1 e  b
   return dwKind2 < p2.dwKind2;  F- r! q) n! e1 E3 b% T' i
  }5 _+ p+ f( y( N1 i+ ^: U' r! K6 G
}
  M- A: o: {( @0 ]};6 A  F: J0 l- G4 {: T4 v' B
class CInventorySort
# u- l$ d4 a  B$ D{
$ e; r3 s: a! q7 ]' c4 Apublic:
7 E7 M7 b3 K# Q& w7 rCInventorySort()
& Y9 o2 F# X/ l1 T3 U{
  T' i/ V. G# W  m_dwPos = 0;7 H% I) q; l6 j2 ?$ y& u
}( ]; w: r/ O( _  @; D5 r1 w8 O
~CInventorySort(){}
& A1 @4 r- y3 N5 ^private:
4 Z% Z# G% j& B" n. p+ ]- t# bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
# X3 J2 u7 |  G2 u) Y) I- [DWORD m_dwPos;1 B5 s; W; [. _7 G; ^( ~! Q
public:! O4 g( Q* y% B! s' n
void Add(BYTE nIndex)' l) U6 |- t9 k' H4 ?) i
{# Q, F4 _( ~) W+ f  |; o5 `
  if (m_dwPos >= MAX_INVENTORY)) A1 {, T& j8 S  d
  {
8 I7 B" `8 p  L  L' C# n4 \   return;
6 e  f2 \; H& O, N  }; P4 q& _& W" A) q0 x
  m_Item[m_dwPos].nIndex = nIndex;% t: d$ _" X" Z; ~. L: v7 Y7 s
  m_Item[m_dwPos].dwId = m_dwPos;
2 j7 R, l, C) Y* M6 ^9 H" b+ P  m_dwPos++;
9 ?) T' V0 a- p  S9 z1 e}( H/ r. P5 H/ @1 {  Q* Y- L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' E" w( e$ Z. X' ]3 P$ k2 X
{; M( Q, O7 W5 w9 |3 A5 y2 b' z
  for (int i=0;i<MAX_INVENTORY;i++)2 ^5 L  t2 W$ r* d. ]) K: }2 u6 O
  {) s  x3 Z+ Z" _
   if (m_Item.dwId == dwId)
. G0 J5 u6 s- j& U3 z   {6 {6 H/ S4 Q: T; C& \
    return m_Item.nIndex;
- i2 i& V4 H( @! {2 i7 v7 c4 X/ f  L   }
: R/ c4 X1 I6 ]9 G& m7 l6 ?# I" @  }
3 |( @) v3 {9 O7 V# j) p- H  return 255;7 R3 D$ i" c$ u
}
( g( c2 p+ k! p" h$ D8 b% W  J) Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 u" v! g* d- b
{
4 b0 s! y3 }! t. Z$ [) Y9 ^/ |  BYTE nTmp = 0;/ l. ?! v3 i' }, e, M
  bool bDest = false,bSrc = false;# b  `; k6 _! P2 V# [: z" j
  for (int i=0;i<MAX_INVENTORY;i++)
- f6 c9 B- T7 L1 l- S5 }% Y  {  b: O5 ?$ k) `, i; B
   if (dwSrcId == m_Item.dwId)
2 D9 G8 G0 F) t   {
4 ~: g, p1 \. n' o/ o! _( M# o    //id相等 则 改变对应的dest和src$ _0 C8 ]4 ]! ?- ]3 x3 Q9 `
    nTmp = m_Item.nIndex;
" u: `1 O8 d# k" u9 g- U    m_Item.nIndex = dest;
3 M1 _9 s; F. x) j7 [3 {( B; {6 t1 p   }$ H+ p* p1 M/ O3 j
  }5 }4 v5 ~3 [& V
  //临时数据保存完毕,交换开始, }' d2 f) U4 k: p3 M& a
  for (int i=0;i<MAX_INVENTORY;i++)
; g* H3 E6 N0 R5 p  {
. Q9 V/ ~7 ]) S% Q; N   if (dest == m_Item.nIndex)
6 P1 j/ }# S) c$ W   {
  n' J6 S" X) A; S1 j- p    //id相等 则 改变对应的dest和src: V/ t1 T0 N; R2 K: f' b8 x
    m_Item.nIndex = nTmp;
! [) W3 K# C5 Z" M* {5 a2 ~+ q, r   }
) Z# B8 E. n3 \; v  }
- ~& k2 h6 G1 C7 K6 K% W- l}: x! [* _, n8 s( g2 a% d
};
6 f$ X7 ~8 {. \8 P8 U, `  B-------------------------------------------------------------------------
0 _8 o1 b2 Q) z1 @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# W% U  }7 l! B5 [& B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);  H3 b3 Q9 P9 a9 U+ t& ]
紧靠其上添加:
% @# r$ k( Z  }if( pWndBase == &m_wndMenu )
6 `& D, e! M3 x1 M3 Q9 U# A{
# J1 y) W  j7 D  switch( nID )
0 u' @; Z1 l6 D% _  {
8 G  u' Y. g2 Z8 p  case 2:
, i! A6 j/ O7 h% X% e- o  s( J+ J: S0 k" t   {
; a# I) M  V7 u  \3 o2 K    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' ?1 W' l7 R3 f/ Z9 j( O, r# u    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 X3 k! G7 v. w: [1 H0 G0 h    {
. r/ X" z5 g8 O( b     break;
. C8 j$ T! [( t$ c4 B    }/ h; y; D6 J! q" n
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, s  V, R& T( K+ J    {% t/ ^7 F2 x8 T, }/ B
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ Z0 v" ^: r$ h9 i) ^% M8 Y0 B
     if( !pItemElem )
' y0 J& X: u# Q0 h      continue;
+ C" p9 y0 d+ I' T$ ]' }. w- n     if(pItemElem->GetExtra() > 0)' w6 }% @5 ?. \9 S1 p* q9 L1 T
      continue;& R" z$ R" l) y" k/ j
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 |& Y9 D# b9 t# s1 {! e      continue;' [# i% ?# k/ o$ h. m, m0 x; n' E
     if( g_pPlayer->IsUsing( pItemElem ) ), Q, Z, @1 i1 j) ^8 D
      continue;4 M) \8 w- f6 M/ m
     if( pItemElem->IsUndestructable() == TRUE )- o; M$ @& J3 P# N0 R
     {
8 ^0 A( {: r- Z& P; }  s4 f      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 a* X" U- I6 J. o! q" H      continue;! n( A  Q6 q- K4 g9 q) q0 R
     }* e% O6 X  F, O/ {
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- g) D' m  h: i, g2 ?
    }
) O$ v9 \" ^& B3 H    break;
2 D3 O$ T& H$ u( v" G% S   }4 I' O6 _+ w7 R3 F9 h8 C
  case 1:) L! H! K! N9 X# f
   {( W( r% K8 X2 s) D
    //整理背包
! y1 B% C, \' z  z- s  v/ f9 b0 |    //////////////////////////////////////////////////////////////////////////1 f9 i+ W8 ?8 f( o/ e
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) {# Z! b" q# c$ E    //////////////////////////////////////////////////////////////////////////& K& m. C3 U# f3 u' l5 |
    //////////////////////////////////////////////////////////////////////////( g3 O! k( S: b; p9 ?
    CInventorySort* pInvSort = new CInventorySort;
7 K4 B2 e, H' S& h1 v, e0 O    vector <sItem> vItem;
3 w% g: E+ T, }& r6 |# h    vItem.resize(MAX_INVENTORY);//初始化大小2 |3 I/ r) {/ l; Y  Q
     //////////////////////////////////////////////////////////////////////////
* @/ _+ \( ~; ]0 B0 d0 E) M8 w     //填充数据" D! Y3 ]1 Q6 J6 N
     for (int i=0;i<MAX_INVENTORY;i++)  W5 i7 W+ |$ f/ B7 y
     {
: H7 T" g4 S2 S+ y9 m      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
  F  E3 n+ c) V9 b- L& o- S5 t8 {) B; b1 a      if (!pItemElem)
7 Y! B0 S2 h  S      {
5 [( B0 g5 ^5 {4 L8 P3 p       vItem.dwKind2 = 0xffffffff;1 h1 h# x5 K& [
       vItem.dwItemId = 0xffffffff;0 F$ q' }& z% [- l* D
       vItem.nIndex = i;
6 P+ b  V4 n0 `. J" Q* N      }else {
- B2 m; B  \# n, O- J- [" s       ItemProp* pProp = pItemElem->GetProp();4 X7 G" [; N1 B- Y, U* N
       vItem.dwKind2 = pProp->dwItemKind2;
1 Y: V( R+ ~$ |: t3 E+ @       vItem.dwItemId = pItemElem->m_dwItemId;
2 E( p% L" l; h2 q8 ^3 T       vItem.nIndex = i;
0 S* o9 h4 C& u' X0 R& |      }
; O7 u& f' }7 Y7 t* w      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ y3 ]2 x2 e' n. i* L4 O2 Q1 h2 O. i     }9 u9 b' k6 T' J: X
     //////////////////////////////////////////////////////////////////////////; k0 X; o9 ]8 T+ N
     sort(vItem.begin(),vItem.end());//排序
9 f! R$ ^# j( D2 ?- O     //////////////////////////////////////////////////////////////////////////; B8 Y  q( V& j+ c  i1 M
     //交换
; a- c& Z) p4 t. a; a; P     for (size_t i=0;i<vItem.size();i++)
: B! D, m9 A4 p# |* H: B     {+ J) x% D) C3 C) B
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 \# O) A! m% m  X# t
      pInvSort->Add(vItem.nIndex);/ e2 Z3 h( U+ H8 m! d
     }+ @6 f/ |" u/ ?8 F% A
     BYTE nDestPos = 0;8 ~1 J1 w& ]4 K7 z. H  ~* K
     for (int i=0;i<MAX_INVENTORY;i++)
  R0 [/ Y' O  x% i     {# l$ E: T# U/ W/ Q4 X" K2 L5 `- d
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ ]# y+ N5 k5 {2 ?9 Z2 {) {* Q      if (pItemElem)# i8 C* z; l3 h+ n; C5 E1 d4 t
      {( Z  i" n) h7 i: R8 l
       if (IsUsingItem(pItemElem)), d; C5 X6 b3 [2 ]) v! z6 Y6 n4 ~
       {
: c, I, s7 }  J' N# T1 |- j        //这个位置无法放+ B) L% `4 @- c, U: H
        nDestPos++;( G5 g8 o& R( }
       }
( a4 h; `/ n# [3 X# f, z      }& |) h/ w! t2 m9 }# e4 C
      BYTE nSrc = pInvSort->GetItemSrc(i);/ Y& U' R! K' y8 X5 L' K
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 ^& n+ W7 q: f" V: t2 c
      if (pItemElem)
; {! e2 ~/ n6 M; J. h& r8 R4 L      {& e7 A3 o  f& Y% y% }& f0 c3 f
       if (IsUsingItem(pItemElem))5 N. y; I5 e) H* g7 A
       {; g3 n& @6 k4 i
        //这个道具无法移动,跳过% w. y" v+ x! V$ K+ l6 b
        continue;
: ~: c1 c# R% `/ z# M       }
) ]5 t0 y$ y2 e6 g/ ]      }else{
( p1 H' ^6 D8 z7 H" c       //空位置 不用动
6 p: b# F2 n3 a# l% h       continue;
' T# e, q5 T5 Z8 m! D2 Q      }+ o) b: z3 U( M- u! l2 |
      //////////////////////////////////////////////////////////////////////////
3 K1 |! A1 D. K5 l0 P( f% z      //开始移动
, B4 C+ }  b& u0 M9 {, M      if (nSrc == nDestPos)9 w! G! x" `1 ^6 O) I
      {
: z4 s9 i  g; z+ h3 {( J       //原地不动/ ~: k+ H& f! T! _
       nDestPos++;5 j0 F  J( B2 S) ~0 |  W1 N/ j
       continue;
* r. L/ q- C& ^/ Q6 v1 e& x  j4 ]6 u. N      }% K1 K. A8 W* f0 @; I
      pInvSort->MoveItem(i,nDestPos);7 J/ [  s  I9 v5 }
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 Z1 W: P" S, b' N* S( F
      Sleep(5);% G5 W$ L8 m- {( b8 y/ H
      //Error("移动 - %d->%d",nSrc,nDestPos);% S1 k# g4 d, r% q2 W& J$ s: y
      nDestPos++;
. M: R7 l$ c  K) @     }. s" n! t; ^0 ?8 d' O) ?
     //取第一个元素的信息. Y# V# P' w' s  I2 @# @4 A- T2 K1 z
     /*6 C! y2 A" r4 I% ?! n2 Q( \
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ E$ s3 L' R% Z% p4 o: M
     {
6 c( v6 R* k+ r1 q. A7 e2 R      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) g0 y6 I+ y: Q  p% B6 ^      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 x" |7 X2 J% N6 z) ]3 v
     }) B' N6 k- Q/ Z! o
     */4 C" b0 B! H$ i( F  h0 n1 O
    //////////////////////////////////////////////////////////////////////////& l( P# q& f$ ?' m1 ?% ]% M9 G
    break;) J' T9 G  t! }8 q9 }
   }) v5 ?; b( i: F) C/ t
  } 4 y5 ~3 a$ S7 s  X
}
3 u7 c& E  Y5 @+ e+ ]m_wndMenu.SetVisible(FALSE);
* z. D1 o0 v# ?; K2 K) f3 e
! @3 \" D5 Y3 C" E--------------------------------------------------------------------------------------------------------
- h3 ~) a) C% C: r+ L搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 z( |0 Z, u% U6 v1 g{7 V) b+ U& H8 I) j8 {4 V
BaseMouseCursor();* h) @9 H# Z# U6 ?2 n. m7 l
}/ Z4 t& \' g. n$ Y
在其下添加:
2 E6 K: X8 s8 z& s; ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% K/ _1 \: I# g{( b3 b5 L4 i1 A
m_wndMenu.DeleteAllMenu();0 A2 u% O: K$ c
m_wndMenu.CreateMenu(this);3 s: N3 V! j# Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
" E, A# m" L0 V' ]5 q6 B7 T: h$ h1 q' q& L: u( b
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 m+ M4 B: {+ O3 J" e; A{- H9 J' `4 B& G6 x; |, u* R: ^- ?4 O$ z
  //P以上级别才可以删除所有道具
) K$ A7 R4 f% v2 W  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& p4 C+ {5 i. o+ Q}
6 L; M# K! a: r0 j. w0 Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' c+ x4 O9 }% P2 i% i8 q/ ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ L9 s  T+ V$ L" N+ k: p
m_wndMenu.SetFocus();0 N5 {0 E; k/ X8 ^/ v1 j2 a
}5 u( X5 g; d7 ~
------------------------------------------------------------------------------------------------------------! Z* H* R$ V' F0 F+ y* f; @
*************************
' e( G1 s" ]7 @# xWndField.h文件
2 p9 t; C( ~+ b6 ~/ p: o1 G2 J*************************
/ f" J9 Q9 k' h( O4 X搜索:BOOL m_bReport;
7 W5 U9 T  o2 [5 I. u$ P其后添加:4 Z' S& M& Y- S" s
CWndMenu m_wndMenu;
$ A0 T* A2 h- ^0 C% }0 ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- V# T7 I1 N" z2 p
其后添加:4 k/ h/ r, O6 N" Y- h
virtual void OnRButtonUp(UINT nFlags, CPoint point);
: F5 j  H% P) ^6 `; h3 c/ d4 Q/ H5 _" x* x6 U6 i

* U/ ^. a& D" b: O

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 16:56 , Processed in 0.106743 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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