飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件( K+ |. Y4 T0 F- A( K2 N
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- O& A' z( ]5 Z( d2 y( K, e) _! s. x0 ?5 L9 N# {$ E
struct sItem
: d6 \, k$ Y6 G) L9 X$ g, O& R- s{+ \; T" ]# J4 K
DWORD dwId;
& o' W+ y. k( `% q9 ]5 hDWORD dwKind2;
. ^' Y( H" r% j4 {. CDWORD dwItemId;9 W1 Q  D8 G* H1 j. H; E
BYTE nIndex;) Z6 l" `0 Q6 ?, r" n
sItem(){
- V% z+ B! V  L! v! D  dwId = dwKind2 = dwItemId = nIndex = 0;' P7 l5 y' L2 [4 ^
}
7 e# H) |- i, ^9 I! sbool operator < (const sItem p2)
4 o' I( F0 ?! ]8 ~{
$ c" R+ ~  D& r7 _  if (dwKind2 == p2.dwKind2)
# q: H9 P$ s6 e: U2 a  {
6 s% `& a# U9 ^+ ?   return dwItemId < p2.dwItemId;; D# R5 t. Y! O0 ?5 ]5 X/ I
  }else{
& n* f9 z& J+ [0 k6 p- L   return dwKind2 < p2.dwKind2;
# |' o. d1 R4 V7 Q( k" h5 x! H0 x# M  }/ U/ f' @, ]) @8 c4 P
}, c; g, P! K5 s, b+ n2 Z& N2 E
};
9 \/ i- C, D8 D- @3 X+ kclass CInventorySort$ X: J& m" X; k5 b% e8 _0 K* y
{
6 L# M" d! D2 [* o& z6 upublic:6 C: n# ?5 X4 T
CInventorySort()
8 l7 ]0 T' O! b. p: h{2 ~# }6 u- U# i" f  U) a3 O
  m_dwPos = 0;6 Q1 f+ R  F0 J% v6 i9 g/ [; j
}$ I; b, l: U# b
~CInventorySort(){}4 U( `% p4 X7 L4 c  K5 Q! A( C
private:
1 o- Q# o) O5 [/ lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" Y5 O! C0 @4 v2 U5 l2 H4 {% ^DWORD m_dwPos;
' `& S  ]9 i% O# Epublic:8 P$ p, V, ?& @
void Add(BYTE nIndex): F/ E6 \9 j" t/ ~+ s! p' j( ~2 m4 I$ J
{
. t6 n8 d6 [$ U  if (m_dwPos >= MAX_INVENTORY)
: B$ u; ?. m& K  B# |/ M. m! }  {; S- l4 D# R1 j. {1 _
   return;* H) ~$ K# p! n' m5 |8 ^3 \
  }! U( }" r5 N% m# S* ?6 a, [0 n
  m_Item[m_dwPos].nIndex = nIndex;
. [$ l( Q/ d7 i4 V  m_Item[m_dwPos].dwId = m_dwPos;- M& E3 _, ~: x( b/ l
  m_dwPos++;1 k6 G. p) q2 e! W" A
}0 b3 ]+ V3 c: H! k
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ w) s8 G( _" {; e4 S6 M
{
5 M  h' `! ]( Y) B& F  for (int i=0;i<MAX_INVENTORY;i++); D8 o9 d; x2 d8 W
  {0 J# l3 `& z0 ?/ ?  h
   if (m_Item.dwId == dwId)5 e4 S  N& x2 T1 a& D0 ^" w
   {
/ ^% r& h6 Q; K' v$ q* b3 s    return m_Item.nIndex;
7 H* G' L' I0 {/ \" y% i   }. z9 `& ^" Q2 n, g  u* Q
  }
3 M/ d/ U3 l- ]! J# U/ b! F0 H" O8 L1 L  return 255;2 M9 t2 Z/ `; |: V0 p- w
}
2 i) z5 I8 P+ x1 `void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 S1 n. Y* n% U1 S2 O{
( R( R# E- |( E5 |9 F  BYTE nTmp = 0;
9 k4 m7 }* N* v- o4 \2 z4 n  bool bDest = false,bSrc = false;$ ^. |3 n) K5 z+ [7 h$ P1 ~6 s5 Y" L
  for (int i=0;i<MAX_INVENTORY;i++)
, D' M/ h- h  X( U, C# ^- V. r/ W  {
. }  I+ ^- \: k& Q: P8 ~5 R  O! W   if (dwSrcId == m_Item.dwId)% G1 j9 h  F4 a+ Z; B9 t* Q
   {2 W5 q) P" `4 |7 D5 d
    //id相等 则 改变对应的dest和src
( N' L! {/ K8 k4 y9 b! }    nTmp = m_Item.nIndex;
4 ?& q; t" C0 n    m_Item.nIndex = dest;  Q2 w- I0 ]5 x8 w/ E( z
   }. ]; x0 c, t5 Y4 {- l4 W) R
  }; L+ C  S0 M. R" O, g3 a, [
  //临时数据保存完毕,交换开始# x0 r. h( J. ?
  for (int i=0;i<MAX_INVENTORY;i++)
. h6 c, s. P: i" ]. f3 P  {) a" H1 L" ?6 Z: ?, T
   if (dest == m_Item.nIndex)( O# g' f8 o- J9 a: W- D: u. \& |3 O6 m  V
   {9 Y* L3 T5 k( a0 {2 B& ^
    //id相等 则 改变对应的dest和src" W% ]0 n9 `9 Z
    m_Item.nIndex = nTmp;
1 K; K4 ?9 ~  J5 w, D: ^" i* u   }
6 ~0 F4 h# G/ t9 a/ Y5 ^3 C+ v) }  }
  ?" ^7 ?9 Q' Q- c) @0 [( I}
+ x+ _- M2 x2 Q};5 b- g! S0 N6 n$ ~8 i) ?
-------------------------------------------------------------------------
6 |4 O" ^/ w$ f1 v% s. ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
  A5 {2 n6 e( O" U; a搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 Q  u. Y1 o3 r2 O1 |
紧靠其上添加:8 [/ n$ Y9 x9 G
if( pWndBase == &m_wndMenu )
, d( Y% c+ S( P8 q5 S  d{
! t- B7 ?" G8 y' w- I  b. e* u5 ]  switch( nID )
0 \  G5 Y; v8 Z+ V2 l  {
/ h* F% b9 H6 X  {; ]- z  case 2:
4 W9 X' d! H. H- }7 Y" o   {
0 U$ M- L* w/ {, P    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; p3 p. X" r% q5 s; S9 o; B* A
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 X' G3 q7 G( Y' S( ~+ z5 k    {( q- B! h# U+ h+ i& m: n
     break;! t0 p) K9 N, Z0 o+ L
    }7 _) ]" L+ L& K1 @: U- c7 r
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# b) \- @6 V6 Y# X
    {
1 S  z% u7 X+ ]6 Z1 K     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 F; D7 s/ y) T( B4 q' P, R
     if( !pItemElem )
; L( z9 o; \8 \9 z6 x+ e2 O5 v      continue;  D5 H/ t6 Y( E  I- z
     if(pItemElem->GetExtra() > 0)
( R9 z8 W0 K, r. |% ~0 ]! D+ V* Q      continue;' |! R% G! W+ `) X" y
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : w' o! @# _0 y9 b0 ]% ], b# a" c
      continue;) y$ ]$ X; P9 ^# }
     if( g_pPlayer->IsUsing( pItemElem ) )
1 u& D# k4 z; H) F7 v      continue;, P' H- [# z2 ]) s& y
     if( pItemElem->IsUndestructable() == TRUE )
4 N! b  x3 H# C     {
! O( L4 R" v/ g      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" x) ?! s) r( y8 t      continue;
- Z. Q* X+ }' p$ n1 Y7 G     }8 D) X3 F( p2 c( g% a2 I
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* W. v/ ~& @2 v  {% q+ F
    }
3 z2 H8 Y: a' V6 T9 {" [    break;
5 F+ ?* K9 D1 F2 b, ^   }9 b, _- f( t0 K
  case 1:
0 O' m2 c/ b% r3 L$ r) q. l   {
3 g1 b+ z! j  O, F  w! K+ Q    //整理背包8 t5 V0 R# z: h/ j1 y: R3 ~; `$ L4 B3 d
    //////////////////////////////////////////////////////////////////////////& w! n, H" n! w) v6 Z  J
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* X& O% I6 y6 t- F; b0 O    //////////////////////////////////////////////////////////////////////////7 R9 x! O$ S% A; j/ N
    //////////////////////////////////////////////////////////////////////////
/ v5 p' p0 u) Q1 u" ?( r/ s$ {1 E    CInventorySort* pInvSort = new CInventorySort;: v4 ]& s& F2 C3 ~% V. A
    vector <sItem> vItem;6 C( ]: ^* V3 M6 r" N! D4 e
    vItem.resize(MAX_INVENTORY);//初始化大小3 h, o' t( N8 _
     /////////////////////////////////////////////////////////////////////////// y) {; I( x' @7 w' U. j* p
     //填充数据
  G+ |8 @4 P, h/ N% `8 l% C     for (int i=0;i<MAX_INVENTORY;i++)
9 y0 ~3 [/ O7 P" L3 s     {* I! i4 O  Q" u# t) _* G3 Y( s
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; @0 s8 v! F* y+ X) @) |- v, Q      if (!pItemElem)" N$ x7 u6 T* E) _3 y, q
      {/ ?3 V! r% m$ n# L" x. T
       vItem.dwKind2 = 0xffffffff;: R4 M: Q; ?7 F
       vItem.dwItemId = 0xffffffff;
0 l1 t, ~7 }! M7 @1 x% U6 q$ s  T       vItem.nIndex = i;$ ~% o" y4 [1 B& t2 D$ i
      }else {: X1 M. o9 E3 C' i, m, Q
       ItemProp* pProp = pItemElem->GetProp();
' `7 {2 D/ K! B& j  ^, O$ P) v       vItem.dwKind2 = pProp->dwItemKind2;- v& J! Z  x: p% m( p7 C4 D
       vItem.dwItemId = pItemElem->m_dwItemId;
4 \1 a0 w7 M( E& B       vItem.nIndex = i;
: G7 \! s. P: \      }+ k5 S( o) b. x$ ~8 ]: H% \; ]
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. K7 D$ K& Z# r" s     }
8 M# W+ \( D# V7 y1 R/ h. d     //////////////////////////////////////////////////////////////////////////
2 j8 q/ _* ?/ ?' x7 K5 j# j1 t+ D     sort(vItem.begin(),vItem.end());//排序
0 \) f- Z+ s) V* k: Y     //////////////////////////////////////////////////////////////////////////6 R& o4 H% P7 y4 g
     //交换& a0 w, \9 d/ Y1 P
     for (size_t i=0;i<vItem.size();i++)
# U, g" E, B- p/ N" k: R     {
( \# K' W8 J7 r/ s6 Q7 a0 M      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; I- _- t! s3 x& n& \      pInvSort->Add(vItem.nIndex);
3 F. Q. m3 l. f( i6 m4 r     }! z3 k, k: X0 T0 @( l6 @
     BYTE nDestPos = 0;2 E' g$ L! e1 h9 }" o5 y
     for (int i=0;i<MAX_INVENTORY;i++)( T6 _8 L- _% V# \9 q# {( z
     {* o3 p9 q8 L) [5 F# H; u% m
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( o0 C% e5 s9 [8 d( X      if (pItemElem)
+ i- `- a  i0 k0 [; {0 s      {
  N: W- Y' z  _       if (IsUsingItem(pItemElem))
' K" e3 T# |8 @; }! o3 B       {+ \7 `8 M# E' [8 j2 |6 I) h
        //这个位置无法放; p# T. d0 d( j' a* t7 H) G
        nDestPos++;
( e3 W! ?! |6 J4 j3 ]       }
$ c7 @" d3 v# j$ {; ^2 s! `" w" V      }
1 b! c: a  T3 B! y; w6 y8 }; i, ~      BYTE nSrc = pInvSort->GetItemSrc(i);1 @! {+ D" r  _0 G
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ p7 A. C# d5 X, P* }  Z* v
      if (pItemElem)
8 T: W# }! a: o: }& ]      {: C" z; j8 A  @% L
       if (IsUsingItem(pItemElem))
8 e' q- m6 @8 {0 m1 E3 W% h/ q       {
. o9 B: x' c5 y0 P& k( C        //这个道具无法移动,跳过
6 W9 z+ x2 [$ M0 Q* t        continue;$ {, w+ Z# ^5 V* [$ _
       }9 Q9 y  d+ X& \1 e. V
      }else{! i: H" o5 U1 F" w
       //空位置 不用动
$ Q. Y0 F2 J$ ~. S7 }' G8 q       continue;
4 u. G* A/ f3 @8 i; \      }) G+ F/ D! C( [
      //////////////////////////////////////////////////////////////////////////
+ k. E% L: r% u0 p      //开始移动
- V* I$ o! P/ I" i1 h8 x! j. X      if (nSrc == nDestPos)' L2 I! b. T" `4 Y3 V% k! _+ V2 s
      {
: J/ I9 G  I) l       //原地不动
- n! n8 r8 T2 |4 A% L       nDestPos++;
0 b( w& D* n+ Y# t' P/ |! W       continue;
. q2 h/ j1 a, w/ W- F# F      }8 w$ Z* ]  [0 b% u% T
      pInvSort->MoveItem(i,nDestPos);. L! u* u3 K/ D/ w
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. w: c( i( A3 i* z7 j      Sleep(5);3 {) ?3 U5 F5 I0 h( @
      //Error("移动 - %d->%d",nSrc,nDestPos);
: S1 o, q, x5 O% M: a( o/ H      nDestPos++;  O' ]8 p9 s' R6 h: c4 _) X' ?% `
     }
) T3 d3 H% ^- T! x, s) h     //取第一个元素的信息
/ s- j5 m, [+ _- M     /*- X. m( x. w8 S& `5 @( q
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" v& k0 c6 h; ?# C5 q     {1 X6 y3 f+ m9 `: R4 j- l
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! @$ J& ~  o- _      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* Z- F! e. h) t9 M
     }
8 s3 _% @9 z% {) e. j2 C% G     */
/ ?! d) ]  o9 H" \- B9 k    //////////////////////////////////////////////////////////////////////////5 I* u1 q' Y! ~* Q1 c6 c+ P+ |( d
    break;
) u$ i2 @  r& @2 _" ^! U% N   }
$ d- L* ^' X/ g  }
6 _& x' n0 J; Y, A5 x}
, g- t. l5 Z) z. fm_wndMenu.SetVisible(FALSE);7 d1 \. W, M/ M* b" R

8 @+ U. T. I# W. j& i--------------------------------------------------------------------------------------------------------
5 k9 g# H  Z4 P. X* U! ?" s搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# E: V2 g: t$ H, A7 V' f- A3 a% T{8 ?8 F, z7 s6 Y0 G+ u: c& ^
BaseMouseCursor();
9 n) B3 U: c" p4 i# G}
2 w  j! H$ ^5 b2 E在其下添加:
& _; g0 }$ G  g4 u5 J0 ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); x- |9 L0 f2 o) i( X) c- M$ T/ w! _
{6 M# B8 d3 C  S. L# x
m_wndMenu.DeleteAllMenu();
5 i( {5 J3 j4 Mm_wndMenu.CreateMenu(this);" g; x- n3 ?, D6 A1 [  M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ T, ]. k8 ~5 y9 R9 K% `- v1 \' {# D
6 \4 e0 Z. I* z$ U% E- e- L- cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( u0 ~) v8 r0 q
{
' l# S4 \, i+ Z  //P以上级别才可以删除所有道具$ u' |7 ^  }' h7 T; y' U
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 ]+ q- C! ]* W  F0 U
}/ l* t* G1 X' D  ]/ U
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, v% F3 I; m4 t" r1 x* S. w# Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" f% N/ _. u$ S* U' l* @' F
m_wndMenu.SetFocus();
, ]2 C2 D# G+ x7 {- J; Z7 v}$ k+ \/ j' [' F7 ]
------------------------------------------------------------------------------------------------------------
2 V2 _- m6 h" n; ~$ q5 m- m*************************! @, Q9 m! h* U; C6 K' ~
WndField.h文件
4 q0 ~, |8 k! M. x& q*************************7 o5 M8 B' _8 ?
搜索:BOOL m_bReport;+ i0 T7 V4 ]) C
其后添加:
; o6 S, y+ _, r( H) w7 Y3 \. vCWndMenu m_wndMenu;
" P8 M9 ~0 ]1 Q" v. P  G* d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% o9 K% R+ o7 z
其后添加:0 `7 e; }( ^! {! N$ S) Y* h/ B
virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 a3 e% `% Y: p" h+ _4 f/ l6 ]% L6 J+ O/ p: t  m
, e  x; v, F3 ]2 L8 G

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-25 22:21 , Processed in 0.064937 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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