飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1090

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1090
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件- U5 D- W/ ^: Q0 ^( T
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 c, Y% Z) c0 Y5 F
2 d. ?$ K4 B' Q& U" _2 v8 }& ystruct sItem
  M0 A  d  p' L{. u. [- w9 a, A# Q
DWORD dwId;" y, ?, a  M0 F! U$ L$ d
DWORD dwKind2;
3 U+ c1 O3 D7 ~3 |2 mDWORD dwItemId;
" t* x. B) r; o  Y$ F1 fBYTE nIndex;- `% J, h8 j2 S4 T
sItem(){2 V0 l6 r$ ]' q( u8 H
  dwId = dwKind2 = dwItemId = nIndex = 0;
9 C; i( P- N+ H! ~7 j}
( M' e  F$ M4 ibool operator < (const sItem p2)' }& @3 q$ m% H3 l  |
{; H: p& Q' g$ P; H# i7 ~
  if (dwKind2 == p2.dwKind2)# h  z' L5 A* P( m
  {! ?& S& p7 s& y1 n2 a
   return dwItemId < p2.dwItemId;  y* s( v9 Y0 U
  }else{
0 N- a2 U& t* `* D6 R   return dwKind2 < p2.dwKind2;
; O4 o+ g( Z; M% P8 e0 q  }6 }* f9 p7 B3 I/ s. P
}$ ^7 Q0 W- i% l. U+ c) _
};
+ m+ f) r8 H+ ?# fclass CInventorySort
2 G! `: V' I4 ~5 z$ O{
3 h" x6 l7 j% n; x; Gpublic:% I" u* I, u4 M( q& g" p
CInventorySort()
; j: W# V/ Z2 G% T& w{5 w2 I( |. Z& |! }0 X! ]
  m_dwPos = 0;4 W* n. ?+ m' E% K* S) U
}
: i4 D+ B; W0 Z& ?1 U- b* M~CInventorySort(){}
: y+ b9 ^. H3 P) u& Hprivate:
! ^, c# O( c+ B9 k% |7 t3 d% i$ tsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# o$ I6 z' m3 q/ t" F- f
DWORD m_dwPos;
. B$ w8 f" h8 @" ?public:
% _) F" V4 d6 Ovoid Add(BYTE nIndex)! |, a+ g% h& i/ T+ P
{7 s4 n) K! K: |( p* Q0 \+ g
  if (m_dwPos >= MAX_INVENTORY)
; e2 i4 q: K7 u5 K1 C0 D  {& D% N6 F0 Q$ S
   return;
( ^* \. i4 {/ U7 _' _  }
- t* k5 r/ Y6 x! m6 {  m_Item[m_dwPos].nIndex = nIndex;
" n% l* l, w! D) R! x: o3 T  m_Item[m_dwPos].dwId = m_dwPos;
/ ^. u6 O, v9 Y4 W  x  m_dwPos++;' u: U4 S/ k- g- R$ L% I0 }+ O, x
}
9 ~1 V$ v: q7 PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. {# J$ A! n, {5 C
{* R! v' @, `$ c
  for (int i=0;i<MAX_INVENTORY;i++)
8 F% N: _- J7 @+ x) z# a  {2 x* }+ X& F8 U9 ^; T
   if (m_Item.dwId == dwId)
. Q( Z: v5 H4 B7 y5 U' T   {- b/ }1 r* N- J/ _; R3 e
    return m_Item.nIndex;9 `, l+ w/ X. A$ j9 J
   }
6 u* j& C- e/ T; c+ g  }" _1 I2 y7 c; G! p
  return 255;
0 c8 d/ |. K% A* _' J$ Q# c0 \) Z}
8 B; u2 ?; O3 R' H0 @% X7 nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ p1 B- Z1 X; l; j{
6 m5 O0 X: m, _, a" l) `8 Y  BYTE nTmp = 0;
) r) Z" K# w  ^9 I& o1 J  bool bDest = false,bSrc = false;1 y  C+ L. ?& e. w8 _5 ^( Z
  for (int i=0;i<MAX_INVENTORY;i++)
5 J& D% N: A" X  u  {8 i, h( p% Y1 l/ n
   if (dwSrcId == m_Item.dwId)
4 G3 O9 {" p$ `- E   {
$ H  v) _8 o- A& J    //id相等 则 改变对应的dest和src
3 s  A; v4 z+ s& [    nTmp = m_Item.nIndex;
) n  g( O' `& @8 c' \    m_Item.nIndex = dest;, D1 F9 c8 N2 |% n7 {6 X+ m( Y4 V
   }3 D! A8 B5 ]3 p5 t/ p
  }
: i) G# j* M/ k& k1 K  //临时数据保存完毕,交换开始
7 |+ p" S! k$ O  v5 r/ y  for (int i=0;i<MAX_INVENTORY;i++)4 h" u  C  l  G2 G- F# O8 P
  {3 A3 l8 p; d/ t! u
   if (dest == m_Item.nIndex)1 A' ~& b6 v/ G- D& z) i# \
   {: J4 m- u$ i3 Y4 Z4 g
    //id相等 则 改变对应的dest和src
  `/ W, A$ i7 n    m_Item.nIndex = nTmp;
  P" b- O. {2 j   }
) l# w" X5 y: v' ^$ Q  }" c. B/ a9 f2 a6 I5 @' \
}5 F: ]. Q7 C; t
};( N2 U* J% l4 A; M! X3 W/ E. L
-------------------------------------------------------------------------
: K& i; l# f' L) j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 e5 D% \1 m& h. }! S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 {( \7 S  v- G0 l/ y9 y紧靠其上添加:; L" D0 \# X2 g, E& e/ E4 a
if( pWndBase == &m_wndMenu )2 k( Y% Q8 u8 r7 p  X9 X
{0 h/ v0 t  m1 X2 K& C
  switch( nID )
" n- O4 u& _% ]  C  {
: g. l/ _) s8 W' l6 h% ?1 X8 I  case 2:4 I5 k1 @! k4 |: K0 k9 B
   {
* N) ]# Z3 S5 o3 B9 g: d& r    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# p$ n4 `5 S" K1 k    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# y7 u' [9 @! V# ~4 J) u1 |    {. ^3 P* J5 ~; t; y  e& f4 [
     break;" S0 R5 ?; t+ c( x
    }' {6 x5 M: T. ~; J8 l
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 G6 I; @, m5 T) I0 L5 }+ O7 h" K    {
- j- M) U" S9 t     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! U0 c# |: T" @) ~
     if( !pItemElem )
2 j+ f( Q5 C( V8 I# L      continue;: X6 C3 r# Q  F
     if(pItemElem->GetExtra() > 0)9 B9 L5 i2 Q' a/ o$ p
      continue;
! _$ @. x' R. n- j. j     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , j/ N- Y2 \4 a
      continue;
+ C: J) H* x1 W" v7 o1 T- B     if( g_pPlayer->IsUsing( pItemElem ) )! W( ^8 r7 R  w
      continue;
/ A2 W$ U& U! `6 d- t     if( pItemElem->IsUndestructable() == TRUE )
! `: t$ ~! I1 g5 F6 O8 z5 S) c) R- u     {) U) c' l6 v+ n* c( C
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# n  ?$ b' P+ D8 F3 |1 m
      continue;
( x% e5 K1 m2 Z! s2 O5 d     }
# X* z0 I4 S" F7 ^  M" `+ I     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' ?+ x% C( X8 R  z! R    }) n- p5 @) L7 |5 p! t: N% ^
    break;; e" b' z( E$ g/ J
   }
6 j. v6 \: ]$ m* a) o, T. {  case 1:7 S' G" p% R1 ?& E
   {* \' [& X* F# K7 x
    //整理背包
) o) Z% ]1 x+ Y* |' Z/ Q; s    //////////////////////////////////////////////////////////////////////////
4 J0 m  z+ r' A/ A5 j% o( W    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. D, [3 G4 U) z$ i. h! C2 H    //////////////////////////////////////////////////////////////////////////9 g* i: O8 d# `1 ~
    //////////////////////////////////////////////////////////////////////////
6 h' U, q: A+ r    CInventorySort* pInvSort = new CInventorySort;9 y. H7 M7 W% c9 t1 f
    vector <sItem> vItem;  L* |5 h9 C8 A4 ~3 L6 X- l7 @8 z  r
    vItem.resize(MAX_INVENTORY);//初始化大小
9 y, ~2 V" s& L: K     //////////////////////////////////////////////////////////////////////////+ N  A6 h  e' V" Y, X
     //填充数据
+ e7 b6 R6 u& [) W# c; X9 W     for (int i=0;i<MAX_INVENTORY;i++)
$ |5 k% ?0 a9 C' q     {
0 Q/ E, J; Y, s  t0 Z. w2 G/ r, l      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# }4 D. z, T! a3 J      if (!pItemElem)
  c  ~5 v6 `  r' a      {
. p3 E1 M) V8 s, ~1 ^       vItem.dwKind2 = 0xffffffff;, @- x$ b# ^4 n/ z
       vItem.dwItemId = 0xffffffff;5 f# B4 T# \+ j% G, E" D
       vItem.nIndex = i;
- r, s' _7 B, j$ v% M      }else {
  O+ Z5 g0 u( V$ }9 t9 m       ItemProp* pProp = pItemElem->GetProp();* w  s- l! K' |/ ]5 J7 q
       vItem.dwKind2 = pProp->dwItemKind2;9 |# }2 G2 C3 T1 a& W, s
       vItem.dwItemId = pItemElem->m_dwItemId;. t- J$ W7 O5 M) I
       vItem.nIndex = i;. _4 [% Z, o- x5 H2 F
      }
6 ^* j+ r: {. X3 }      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. O& _0 B8 g* D. X2 D     }2 B& T. H+ t  l6 N% a* W/ P
     //////////////////////////////////////////////////////////////////////////
2 \. [6 i. W) ?     sort(vItem.begin(),vItem.end());//排序; z+ R. E2 G; H
     //////////////////////////////////////////////////////////////////////////5 F7 M/ N1 o: t0 i4 A4 G( y7 I- x
     //交换  k7 I) {* ?! {" a
     for (size_t i=0;i<vItem.size();i++)9 M& T$ A0 ]8 y
     {0 X; e1 V7 C- r" {7 Z! L! j8 f
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 y* s4 t4 L% t) H, G! H) e, U5 M! t
      pInvSort->Add(vItem.nIndex);9 J; I9 U* Q8 t) T/ h6 w! b/ L' D. c
     }
5 n' i( E! K$ T' h     BYTE nDestPos = 0;5 e9 M9 j8 B2 K! L4 k: J  i) R" N
     for (int i=0;i<MAX_INVENTORY;i++)1 o: t1 d1 o$ _% [) z* u0 \. u
     {2 i) E" c# S8 M/ J: h+ F: y5 y
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; i. E( t+ w. N4 n0 ^  b
      if (pItemElem)" J* X- h' f2 z# Y) z3 }# _
      {
* ]9 l3 U9 A$ |" y# {7 o% X7 O       if (IsUsingItem(pItemElem))" C1 |2 H0 d( o1 A3 [/ l* m0 _
       {5 o2 D# `1 y- ?) L
        //这个位置无法放. n7 q, G% `4 h/ _0 F  t& ?
        nDestPos++;
7 l6 J9 s) Y% G5 t& ]       }: n+ E3 [. B7 ]8 B* e& k0 x  q
      }  N& E# v; i. ?' @
      BYTE nSrc = pInvSort->GetItemSrc(i);
; A' c& x# T+ p1 x, Z* s* E& B      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) q, Q( Y: A1 d: B( Q
      if (pItemElem)
7 [) `- ?; i( `5 x2 X+ Y3 q* p      {
; M5 D4 m5 t+ f7 h+ r3 H* T+ f) Z* p) x  W       if (IsUsingItem(pItemElem))* ?, i4 B( P1 ^8 B9 M: j
       {3 n0 M. u' K  t' k4 W
        //这个道具无法移动,跳过! ]+ h+ Z" q$ E7 W! F% H
        continue;8 d5 v7 R& f; s' a8 Y
       }
" Q7 @1 k  y) Z2 U/ G      }else{
! p: Y* {2 j- N4 ?, r7 t2 z       //空位置 不用动
& Q2 f* \0 a6 \2 g       continue;
8 w' E& r' ?# }$ ?; F      }
/ f4 D0 E3 f0 ~5 U5 V0 _( m2 c      //////////////////////////////////////////////////////////////////////////( c2 N2 Q2 b  j9 W% ?4 X8 i
      //开始移动4 j: u/ c0 s$ P- s5 \
      if (nSrc == nDestPos)
0 `+ p& n0 h- R2 }5 D3 }- ^      {/ h2 D4 D8 x) {* f: @" M
       //原地不动
: G+ O/ ^8 R# ], E7 U+ ?2 [       nDestPos++;4 r9 j- Q0 [, z8 G# g5 z* @
       continue;
3 w' ~5 e6 x! O" Q$ z1 s! C      }& x+ l6 r" T9 ^
      pInvSort->MoveItem(i,nDestPos);2 l% p8 d9 v9 `9 U1 I
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 G; J$ K5 K( b+ P
      Sleep(5);( b; ?* i% l5 ^$ G+ ^# ~
      //Error("移动 - %d->%d",nSrc,nDestPos);
3 C6 a2 E# o( E/ u1 @      nDestPos++;
$ P, X& y7 J9 }7 m' O; b, v     }
1 y. n6 G1 _# P9 |, \7 x. d     //取第一个元素的信息
- v5 q; _( M' l' c) P1 h     /*
6 F; m) G( y* v  c: h4 `5 k$ S2 I# x, I     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
) f: Y7 b( }9 A% t* g4 p7 H8 h* O     {0 g4 R9 U) ^# Z( S3 p
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ S* g9 w) W! H- |! z      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% O% x9 t4 l# D8 }! m
     }1 S3 |) o3 c: o5 p- t- j( s
     */; S' k: x; A) _
    //////////////////////////////////////////////////////////////////////////
  q4 j* g7 Q# h6 ~# Q* f/ x0 h    break;
' V" U4 N+ ^/ H6 {   }. m! b  f; G/ \% o$ h
  } 4 w( E3 z/ [0 Z$ _  W4 K9 L9 e
}
6 ]2 i1 a# ?& Km_wndMenu.SetVisible(FALSE);7 X  ?; u8 v% s6 F. R  X
; L+ w  D6 z+ W% \9 T4 Q
--------------------------------------------------------------------------------------------------------
2 v$ [4 M7 t0 Y% R# h' {0 m3 `搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 _4 ~  P" g& L6 q( r& f- `8 j
{  w# p6 m" \& ]
BaseMouseCursor();
2 N: @5 o- r, p: I4 k}
7 r( D, U2 W8 p+ g8 N' Q* V在其下添加:
2 G: R$ Z- ~$ V. W: s4 }+ t  L' ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) e2 s$ _( E- A{
9 x5 B; ]" r* X/ Gm_wndMenu.DeleteAllMenu();6 W) r9 r' [9 O0 y, J# m) m$ S
m_wndMenu.CreateMenu(this);! l: z9 b+ s1 V! b6 G( A* M1 J. g. D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, `5 _# U) \/ O6 ?
) D! P- u9 i7 f# B1 {- u
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* {. p* y- j; d' a  |7 v{9 T/ A: b6 @- u& K) R# w8 t
  //P以上级别才可以删除所有道具
: u! ~4 c# q2 M" Q  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 D( z/ ~$ e* z* x9 I}8 R( }. W0 S9 E) s' r
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* v/ ^3 Z( L* M: a$ P7 P
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 k7 [" l; d9 _8 e) F+ g; D6 N5 b* A8 d4 h
m_wndMenu.SetFocus();
8 p( i5 F1 t) z# Y( T. @}
" W% n5 R8 `0 ]5 t7 r/ a8 f4 n, m------------------------------------------------------------------------------------------------------------) ^5 [, ~. y* R, r8 ^. Y
*************************. ?3 P7 C( G& W
WndField.h文件# N) B9 g# G+ [5 z- S
*************************" |/ x% F3 a0 G6 k: x
搜索:BOOL m_bReport;& M7 c3 `, P" x
其后添加:; B- L. }  j8 u; ?' D8 @+ U7 t& d6 e
CWndMenu m_wndMenu;% ]" L2 m& A& |  ?( V
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; {7 W! B1 ~" C* a2 n# O
其后添加:
# h2 `! f9 j  Rvirtual void OnRButtonUp(UINT nFlags, CPoint point);
* u- m) N1 S. ?* P( F
4 K4 n' x0 Y2 b* n7 B" f. O2 i" V( ?! h2 `9 E

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-26 06:15 , Processed in 0.064072 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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