飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1078

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1078
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 z" g6 t- K" t2 l! t( L, ^搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; e% w( k5 N" u+ A9 l) L" Z
% L  i0 m: s1 Gstruct sItem
1 p3 g  G; T8 i5 ^{
) d* o, X! R* y- GDWORD dwId;
: |; |/ h) U# h" ^' ~DWORD dwKind2;& Q- U& @( s& H/ L
DWORD dwItemId;. V0 e( s1 P/ t
BYTE nIndex;
/ n- a  F$ V  W, L' R; W3 bsItem(){, n0 a" [+ z, e# y
  dwId = dwKind2 = dwItemId = nIndex = 0;
, _- O+ q, }" N0 L3 M% {# E4 f0 Y}
, |8 v( A) |  ^) [, n  D) B2 Hbool operator < (const sItem p2)% V  u5 i2 y/ c, ~
{2 A" f5 {& X( u, T& c: j
  if (dwKind2 == p2.dwKind2)
/ F7 _6 n5 }/ c. K9 b" k% c+ r  {3 q+ T' r! |8 E- C) A, r
   return dwItemId < p2.dwItemId;. J% O2 c, K! h4 h3 U6 I, S
  }else{* B2 B+ T+ j8 Z
   return dwKind2 < p2.dwKind2;
1 }/ l+ A( r% {  }
# b1 t" _0 l$ ]! F8 E# T}
: w3 h6 _6 T! Z% A9 ^' A2 S};
1 b$ j  F: h' o9 e1 r6 Nclass CInventorySort$ O$ a- {/ {9 f; ?1 b% o2 C- C
{
2 `5 {4 c  q" }& Rpublic:
% y3 ~9 \; K, @3 c! J- JCInventorySort()" n, b+ x. R! e) t2 F% V
{# U0 z5 `+ U3 v# x9 g# {. ~
  m_dwPos = 0;) L# f# F% V- v* D+ W" p' Q* Z
}
; [' v2 X% X) J7 Q~CInventorySort(){}
! L, V' h; e7 O, Aprivate:
$ c7 y) B# q2 M' RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# S8 K+ A8 K0 l' i# x
DWORD m_dwPos;$ u4 z! l* h0 a. r- C
public:/ Q7 P* n: C. S. N
void Add(BYTE nIndex)' C. F# f9 v! P; _: [! G9 T9 \
{
- j' i' @/ [' Z% a4 c  if (m_dwPos >= MAX_INVENTORY)6 C2 I3 ^2 c" b) `2 ?
  {) D- N( w* i9 x/ \+ @3 j( u
   return;5 ?' D* S' f% U. F' g1 \0 {( V
  }  @9 s1 k! N+ V& o
  m_Item[m_dwPos].nIndex = nIndex;
, Q- N& Z! O9 x6 n7 [4 h$ P  m_Item[m_dwPos].dwId = m_dwPos;5 U) h' s4 M  p, b
  m_dwPos++;6 Z7 }9 L2 t# ?7 H  d
}; p: L, J" b$ m; C' F  N9 S9 a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! r0 U6 o" }4 A; l{4 A) d- y' f0 F/ W# W. d
  for (int i=0;i<MAX_INVENTORY;i++)
( g9 o, T* v$ w) J  {
0 V3 ?, K/ y5 v   if (m_Item.dwId == dwId)/ a: u) b$ y- ?& W
   {; y5 ^# s: x5 d8 m; {+ m' S
    return m_Item.nIndex;0 m; F$ w! E6 A- o  ?, M
   }' g2 M) r7 L9 [
  }) o: N; U& ], a
  return 255;
9 S5 Z" Y1 N4 h# u2 C4 j  m  [}/ u  c% P" Z2 h- l" l4 w8 R& T, ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ {8 Q2 S5 N* R, W% x6 C
{
% y0 [* a  G$ w# q  BYTE nTmp = 0;
( [) H1 {' I* h  bool bDest = false,bSrc = false;9 e( G) @# U+ }$ J: ^9 e$ N
  for (int i=0;i<MAX_INVENTORY;i++)0 M. I+ J; o/ @$ F( T6 h& Q
  {
9 e) @9 e- b( ?8 y   if (dwSrcId == m_Item.dwId)
8 }5 e: ^/ e/ ]5 j9 b0 J6 N+ y   {5 H: x' E; H; V) H7 |
    //id相等 则 改变对应的dest和src7 G' A0 W, Y/ [+ `6 m
    nTmp = m_Item.nIndex;# c, D0 \8 P2 f* O! y/ V
    m_Item.nIndex = dest;8 [. r) b" `% {1 `
   }
( j5 `3 ~0 i8 V! `  }: V* D. H5 }- N4 S8 O+ b1 s1 i/ b
  //临时数据保存完毕,交换开始
: N: U4 m* l" G  for (int i=0;i<MAX_INVENTORY;i++)3 @$ M7 K# E/ T/ z" k5 _7 A* P- ~
  {
! D$ r: V2 M2 g2 Y: p3 g. `   if (dest == m_Item.nIndex)
& `6 t# ]$ V$ b) ^" W. ?   {
0 H; ?* A  o0 f/ r4 M    //id相等 则 改变对应的dest和src- f; g* n4 A- g  J  W
    m_Item.nIndex = nTmp;
# Y; ]; a4 q" x' q+ n6 u$ {   }" ~( n) n8 X5 ]$ U; t9 u2 k0 J' ?
  }/ f0 C' p; L, U# s" p4 {& E
}
. }: G$ s- M, `! b% Y  k1 C};
$ e9 y) e# a  G. m- Y-------------------------------------------------------------------------6 h! i& }, z: J" V0 Y8 `4 L9 e# K9 C- H/ x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 e) s1 |; p7 y; M7 ^
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
  l/ O1 i$ g) V2 {紧靠其上添加:
5 v: t0 B% B2 \7 zif( pWndBase == &m_wndMenu )  A+ ]6 ?  k8 M/ _
{
/ t7 s& s$ q$ c7 W; X  b  switch( nID )
1 Z/ }" m; y+ o& `! |  {0 B8 q9 i$ C: g$ X7 i' T
  case 2:$ k$ a& y* w7 O5 B/ }4 r! t
   {! d+ Y6 B5 x( D0 x& m  g7 C2 {
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 I5 `7 Y% |; s9 y. V# |; y) T
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# J4 O5 G7 `4 u0 y0 q    {$ Q9 ^, b' X, l) C6 f4 g
     break;
' ~9 `7 ~+ y, q% }! W  O    }
/ s! J  W/ H5 _# m6 E- w' ^1 ?    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 q& N3 N/ n( G% j2 s7 A/ ^- {' w
    {( }. G6 w( ?* w1 @! c* p
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 ~% @2 r; r+ U0 d$ n  \. M. d: \
     if( !pItemElem )1 i8 j+ @1 v) v/ ^( z3 L
      continue;
6 c) h$ J! ?/ F- o8 f     if(pItemElem->GetExtra() > 0)
& v0 n. W" z) N& ?! `# [4 z; c      continue;
6 m  r: [# b  a4 u& }' ^     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 \- X3 t- o1 D9 v1 L
      continue;
( c2 f! B7 g4 a0 O     if( g_pPlayer->IsUsing( pItemElem ) )
' C5 Z0 l" l/ D. ^$ }$ o2 s; Y" ~  z      continue;2 U3 C) V  I; w2 Z3 ]" M
     if( pItemElem->IsUndestructable() == TRUE )6 ]' j! X& `$ m) g; Y% W
     {
2 e: f% q6 A- m  ~      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 g* w6 c3 A+ D! ?/ J9 s5 @( }      continue;
6 @  n; Z4 K- m5 m% x     }
- @7 K  s8 @% ~/ e( T     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( N# b2 e! B8 X5 ^3 k3 ]    }$ n5 U$ \, j- w3 A( J
    break;
' e) z  F& ~: C1 m   }
3 O: q' x$ m5 m3 f) Q% S' P  case 1:
# ]6 }9 {( i6 M0 Y7 M+ x   {
6 R" y" J3 l' e* r4 M    //整理背包7 ^1 W+ Y2 }; ]3 l
    //////////////////////////////////////////////////////////////////////////
& Q, F, ^  ]4 C8 U  p    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ B1 i3 M4 w' P* N3 d
    //////////////////////////////////////////////////////////////////////////. ^5 p6 B- S" ]: O" L
    //////////////////////////////////////////////////////////////////////////8 q  s9 c5 Y  s0 K* j
    CInventorySort* pInvSort = new CInventorySort;
3 x0 l& _* S0 l" E+ w9 q: {    vector <sItem> vItem;9 u+ q: _* U+ ~( ~: `9 `7 \; z, |% I
    vItem.resize(MAX_INVENTORY);//初始化大小
1 j8 y% a" u9 o# O% N+ U     //////////////////////////////////////////////////////////////////////////" B5 N6 a, C+ ]6 H  `; C' Y
     //填充数据
2 @7 {- `5 W/ ^2 ^     for (int i=0;i<MAX_INVENTORY;i++)
8 u$ b! `6 ?6 \4 v6 i2 ^     {) m% _# O2 T+ J& [/ l
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ K$ P4 [) q& ]% w. k( E      if (!pItemElem)' W" w, _" s0 a2 x+ e. b" z. a
      {9 E' `2 V$ n4 S" V2 D0 }' N1 V* E
       vItem.dwKind2 = 0xffffffff;
2 A$ ~0 \/ G! P: R# G       vItem.dwItemId = 0xffffffff;
$ M* ?( o* B, R       vItem.nIndex = i;
6 o) k/ s/ ]0 E      }else {0 T. h7 N2 ^# ^8 |, W, W5 G
       ItemProp* pProp = pItemElem->GetProp();2 O3 J- E) u* }; X6 Q: G! O- V& R
       vItem.dwKind2 = pProp->dwItemKind2;* n& q3 q5 W8 a5 O9 ^/ P: y. I, K$ k
       vItem.dwItemId = pItemElem->m_dwItemId;
2 ^0 c4 b6 n: |6 o  w       vItem.nIndex = i;' _& ^" l( j) r- [4 x! ^
      }
( `5 G' }( m  I9 t) |( [      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 j. b) }" T/ a! r' h3 o% M     }9 h4 T9 R6 ]& k; l* e3 r
     //////////////////////////////////////////////////////////////////////////
7 [  M8 [5 P" c; U* J: s     sort(vItem.begin(),vItem.end());//排序1 U1 l+ V: a4 A5 O3 K2 `
     //////////////////////////////////////////////////////////////////////////
9 o! t7 O7 }. g     //交换- i+ C6 r* x) c$ [( r$ u
     for (size_t i=0;i<vItem.size();i++): ]: a; G1 f- @5 D+ c) ^7 K4 U
     {
. }& @/ z! @  ~% z% f7 p6 u      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 Q$ R. O% i; ~3 D# k; C      pInvSort->Add(vItem.nIndex);5 \; B; n" I7 v, s
     }+ r) T! Q9 O+ [
     BYTE nDestPos = 0;$ u1 C! R7 o' o% [( Y' T
     for (int i=0;i<MAX_INVENTORY;i++)
9 c3 U& Y& F, a, E4 W; _     {
/ W" x+ [9 k; J# z      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 ]- w) l! N2 |" ]" o, C: d
      if (pItemElem)
% a: R/ d$ V( R- j7 e      {
5 B$ v  K# e% y* j2 c* V- f       if (IsUsingItem(pItemElem))
  ]4 f9 l1 P: J' M. X       {
' ]" S) |. B' y) q! |7 w        //这个位置无法放
2 V8 K' W7 Z- `! q        nDestPos++;3 g8 w8 D0 Y9 I4 S7 p1 F6 I! z
       }9 w6 y1 S: R  ?0 Q" }
      }- {8 h2 s4 S0 ]* ]$ W
      BYTE nSrc = pInvSort->GetItemSrc(i);
- j8 ]) r1 j+ L      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: R1 R$ |' n* ~" W" T( `7 P
      if (pItemElem)
: R/ Q: j0 D. L( G% q7 d      {
9 _2 \  z2 t" o# K* p       if (IsUsingItem(pItemElem))3 x+ s' o2 \& y0 P7 Q
       {& x1 L% n5 M. O* t( A
        //这个道具无法移动,跳过
+ f  Y/ }; g# x" j8 ]  A: g" m5 z        continue;# a! c# ~1 ]$ J$ {' r5 r
       }7 y2 G4 f( o4 J- ?! p* m/ U; u/ E
      }else{" ?3 \  Q: F0 n* \
       //空位置 不用动6 n  x1 m' _1 A& d6 m
       continue;
0 I1 D  @) t2 t7 q      }
+ m! p' C3 y4 e5 {: y2 X      //////////////////////////////////////////////////////////////////////////: \7 _0 ?: u" W+ G, q. H4 \
      //开始移动
4 [! o, }; x( I7 T8 z( a- Y      if (nSrc == nDestPos)
+ `7 y, i7 S; n1 e8 m! x- C      {
; S. V' C7 X8 ?: w+ P       //原地不动& B9 i) Z. F+ k/ V0 C& ?  h5 A
       nDestPos++;, M' X/ l4 W; b0 G! d& S
       continue;3 G; ?  H" Y. `; L
      }
' H; b/ g" }# J9 ]! p/ V! T+ V' j      pInvSort->MoveItem(i,nDestPos);
$ ?, _* I9 q) ?. k      g_DPlay.SendMoveItem(0,nSrc,nDestPos);( O! p- d! y/ F4 c, B6 y% K' {4 `
      Sleep(5);
; Q  O  A: X3 q6 T( v/ m      //Error("移动 - %d->%d",nSrc,nDestPos);
; R  j8 _4 y8 J( C      nDestPos++;
  e0 F( S3 i& f4 w% S; ?" U     }
8 c3 c) L. R+ p( {+ e# z; @# @4 |     //取第一个元素的信息- s3 u: `& Z$ f3 b0 G
     /*1 i/ t/ M& I2 M4 ~, v
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ p! ]# H( E. j, B
     {
4 _- N' s$ P: K0 N; o      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# b$ ^) ]# m( K1 V
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 [- V! k7 O; R0 m; v1 K; L7 _     }3 {0 B% }  x, |, C
     */% T- m* g' Q2 u: p* ^
    //////////////////////////////////////////////////////////////////////////
- t9 K- `) k5 ]( x* B    break;5 U/ S0 y- M& W* q! z6 u
   }
9 V/ y2 `9 ?' F- {9 o& {+ r: j  } 1 Z. e0 ~! M6 O3 m! I
}
' _1 H/ L7 U- g/ D( u' c. cm_wndMenu.SetVisible(FALSE);( {2 w$ g9 r  D9 u$ X8 M& a: }
. p  w7 }# \! l  _5 o
--------------------------------------------------------------------------------------------------------
; m! z4 v' `% i) ]  r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% Q- x6 {  C1 Y4 x! J5 ~' ^' U! z{5 s% u) L+ o: |; k
BaseMouseCursor();4 O. a, P! M9 ?8 A$ v
}: M1 l! X% j  j7 E7 `, ~
在其下添加:5 J; g  ~1 H3 [  O0 u6 R1 r* w
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); C7 q2 \( d) u* m# s+ n7 T
{
1 J( {$ k8 P' `+ W6 Hm_wndMenu.DeleteAllMenu();
9 W8 T4 [7 Q- h6 g- h4 ~' ?m_wndMenu.CreateMenu(this);& l# ]4 k$ q- e& Y% b
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( v4 T- ~! C& g; F8 S  ~; _: W$ T" t4 Y$ K  m
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& ]# ?) H) k+ U  _
{
  K6 S7 r& T$ b' e4 ~  //P以上级别才可以删除所有道具) Y$ C" ^$ ~8 j3 S
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
  l% S( o( {: H8 P- z}7 E# N4 H0 y- K5 y9 H. Y4 Z+ X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# l7 Y9 G% [: Z( E8 H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ y1 \5 i- Y' e! h. K) w3 ]! jm_wndMenu.SetFocus();- M+ B6 g4 H' i" W$ Z5 v
}) I, d: q5 V1 c5 ~! `0 g
------------------------------------------------------------------------------------------------------------; b, [* J- T, d# D; \
*************************( M9 n* b% ?! o, c
WndField.h文件
2 I) g% @" O) x3 \1 X*************************
4 R+ K9 p$ e! U' W3 B0 {搜索:BOOL m_bReport;
4 o9 {/ l5 K# U其后添加:# f& Z0 {! w/ u! @. Z- _, c2 v
CWndMenu m_wndMenu;0 O6 d+ Q' `' U$ F7 N
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ l* q$ _+ J. g' |/ o其后添加:+ G. G3 k& d( p) |/ o* G; ]: y
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ r( Y% o6 K* G+ D3 k! `

( }. I4 K, f9 v$ i$ ^& g5 ^8 {; Z* a+ L( p: H7 ~

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-30 03:55 , Processed in 0.069203 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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