飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件* x, `% D, A6 m& e3 W9 g9 I
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 I4 A, I- ~7 ]: }: r& ^+ F9 F2 m7 ~# c# D% r/ ^% d( l& f
struct sItem7 M" r: z7 m1 b7 V' W2 w
{. d% M9 p3 {! |. p
DWORD dwId;
$ ^5 s& u6 h" E% k' }DWORD dwKind2;1 x8 y! U# j, L
DWORD dwItemId;! s9 J5 M: n; ?1 T( ?6 V
BYTE nIndex;
! b4 v, C2 g4 j7 E9 R6 A6 GsItem(){6 g( L7 D) s& S" b) b
  dwId = dwKind2 = dwItemId = nIndex = 0;
$ R* d" K: o& w# T}8 q1 X- o/ B; Y: c
bool operator < (const sItem p2)
9 P8 c( }1 [% m3 _{. m6 C! g3 t8 o1 @4 ?( s
  if (dwKind2 == p2.dwKind2)
9 [! M  j0 n  C  {
8 I. Z, q# i; A9 U) v: Y6 D   return dwItemId < p2.dwItemId;" j* b# G  ?( k3 G. W
  }else{
$ ]$ y: @# H' ]   return dwKind2 < p2.dwKind2;1 n  U3 Y$ d& n( l8 C  c
  }9 D, I: z+ g7 q' V
}  \6 ?; V. O2 r5 _+ R) h7 Y; O
};8 L1 I% U: g0 {( ]" y, _7 O
class CInventorySort
, Y' t) b" H+ x  C( Z$ h) y{
% x+ s7 z# Q" Cpublic:  H: [3 d2 L! h% d$ p& A
CInventorySort()
8 X7 }9 o; Q5 J" C; _) B{
0 D% e7 Y5 |" e" P" F& t  m_dwPos = 0;
/ K1 U' B' ~: Q; u: |0 R7 l}
6 S/ L/ U1 V! t5 i~CInventorySort(){}. v9 i8 a& e8 W- l! T3 @* d9 v
private:
' x0 D7 z! B3 ^' ?: Q  {/ Q+ h" OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. l( _+ N' B$ t9 P- Z
DWORD m_dwPos;
* B9 R; M/ P& d& A& Ipublic:
) [  c9 u- ~- C5 u( a) F) Mvoid Add(BYTE nIndex)8 V+ Z; G0 Y9 V  c; G! s1 I
{
# N9 R% i. K# y. j  if (m_dwPos >= MAX_INVENTORY)
0 W" e8 u- \8 Y9 D6 C6 f  {
8 t9 T1 M# g( T% Q5 y& z/ r   return;
" P( W: b& x. a7 p. g0 M  }* [( D. h* l0 m/ `( Y8 `. ?+ M& f
  m_Item[m_dwPos].nIndex = nIndex;
1 x; D% U6 k; c2 K2 O  m_Item[m_dwPos].dwId = m_dwPos;
3 n; @  Q- l7 S( q. H" D& Z9 r  m_dwPos++;! t8 U& ~! O/ g# Q6 A, e. Q% \
}
& U* z, F  d+ e& W( DBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ t4 K+ y8 y) p8 W8 _
{
) z. H& Q4 Y% `8 `  for (int i=0;i<MAX_INVENTORY;i++)8 W9 `. k: b: h5 ~  l4 b
  {
; Y$ B1 Z. u2 f4 Y0 N9 `. m   if (m_Item.dwId == dwId)
* H! k& \: S5 P   {
2 S# s" Q" W1 q. a2 _7 ?) c4 c    return m_Item.nIndex;
, Q. I8 i8 m0 t$ S& S   }8 G# z6 k& Y3 e7 g$ ^2 W6 H
  }& E; F1 w% s/ N1 y. l
  return 255;
2 B4 P* {% @; Y4 R}$ @/ G6 m+ |( u' C/ w# Q2 G+ f$ v
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: ^1 G. F- N% h8 }
{
) G7 P4 A- a% |  D  BYTE nTmp = 0;& @; Z; O$ p/ S/ t: N
  bool bDest = false,bSrc = false;
) S5 n; s1 M' r: @3 ~! z1 o! u' J9 r  for (int i=0;i<MAX_INVENTORY;i++)
+ O- o' [3 {. f$ Z# n  {1 y# @: W% M9 v/ O
   if (dwSrcId == m_Item.dwId)! n# A0 Z4 r- a
   {
! ?8 z- b0 n, \8 y+ R$ n    //id相等 则 改变对应的dest和src
+ R8 L2 }& q+ x1 |& C    nTmp = m_Item.nIndex;
' t1 v6 b: o/ D7 l    m_Item.nIndex = dest;, b$ I& ~& j* d" H8 E% T+ B! s
   }
4 G+ v) x/ d) }  }* [8 z. M: J+ i9 n# T' e
  //临时数据保存完毕,交换开始* z9 f  s) ~5 o% x- x% S' z5 e
  for (int i=0;i<MAX_INVENTORY;i++)2 w$ T1 W3 W% i' S& y
  {
9 ]7 g5 t- u/ H+ B8 }) ~8 L8 L9 t" q( e   if (dest == m_Item.nIndex)
1 V( v4 ]2 |; a4 z   {
" D$ t: ?; g# x2 b    //id相等 则 改变对应的dest和src
3 u* A" F' P4 G9 X" n1 ]    m_Item.nIndex = nTmp;
) Z' q8 e% Y1 G0 @4 A   }
/ X! o8 ^; ?1 I0 c& @/ M$ `, {9 E  }
: [( D; N) G$ S2 g( T* f}
; ~$ w: r3 \. A, k7 _! M+ v) \};& C2 Z, ~. W5 V
-------------------------------------------------------------------------
. {! u6 S4 p! R" n1 ]  [依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 X# w) [6 N3 \0 x' F3 ]
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ j, ?& ^4 @# O! W7 a; ~# G紧靠其上添加:0 T* f3 C5 W2 U
if( pWndBase == &m_wndMenu )! @1 ~# u: t% R- q6 C# [0 x5 z' s
{  E6 ]! I6 }2 k
  switch( nID ); O/ J/ ?$ I# W# k5 J3 k5 _* s. @
  {
7 z6 o/ c/ v! `9 g/ n  case 2:* I/ |$ J; I9 U  Q
   {6 z: X% h, i* }' S+ r
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 n5 [8 V  q; e. d    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))  X' N* V  Y2 k5 ^2 L
    {1 J7 Q; g2 ?9 ]6 G9 A, ~
     break;
! h/ P& {( t3 ~2 c" @" E# d    }
, D* z1 X# V$ o" b! z    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); N3 x; o  E$ b5 b0 E, Q- O: @
    {/ }- a0 h6 a1 P! x# {" @5 z1 u
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! A2 Q; f. Y+ c" h: R' V4 C0 `+ l     if( !pItemElem )# r" c# q- T! n3 N0 Y! N1 Y) G
      continue;* I2 N6 _; R# Y! U: K; O
     if(pItemElem->GetExtra() > 0)! Z! }1 j4 ^! N0 [" M
      continue;4 t6 r' I7 [: I# z" C) ]9 m
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " c* G& w# j3 G- v4 b
      continue;( h) {" X) U/ U; I8 J0 P9 C+ B
     if( g_pPlayer->IsUsing( pItemElem ) )
( q5 a) ^3 A" C: A% }      continue;2 b- k. r" ]+ q! S( w
     if( pItemElem->IsUndestructable() == TRUE )
" e: _, |# f2 K( k1 J     {& w. c% p( k) \$ |6 U
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& R" V" _" S! r" Z- O, x$ ^8 r
      continue;) ], |7 e* g- i9 W4 c
     }
" |) Z' c$ b) @% o( t* Y     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' ?& l" v6 [! A" K7 i    }$ K1 q5 }3 J; I8 D- E
    break;" I, j8 a% S* B5 x  B
   }
6 F5 w0 V$ d" k5 q2 Q  case 1:
; t- ]; b/ q$ }7 d( l( j; `   {
/ Y1 F( W- g" H& k: e% w9 ^    //整理背包
9 r: f5 x2 x( k    /////////////////////////////////////////////////////////////////////////// O7 U; D2 x( A! `
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );* n3 S5 r. Q+ T
    //////////////////////////////////////////////////////////////////////////
$ b0 m4 Q1 J* a" O; t" L    //////////////////////////////////////////////////////////////////////////
- b6 D9 v5 x. x7 i4 w+ M4 g    CInventorySort* pInvSort = new CInventorySort;# [  p6 t. [) `  q5 Y3 h
    vector <sItem> vItem;, P6 h) U+ C! v: F7 s- i
    vItem.resize(MAX_INVENTORY);//初始化大小7 T% Z( m* b; @, j
     //////////////////////////////////////////////////////////////////////////, ?2 |/ C& @( }: |3 R8 O
     //填充数据0 a( [( @! }9 w* ?% k
     for (int i=0;i<MAX_INVENTORY;i++)
# [1 d! H, p& p     {
3 N" T+ z) j( \- g2 n8 M' m. A      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 r9 ^# r: x# V# U- M% d      if (!pItemElem)2 D% x" A. C  d. U* N. v; U3 I: i  m
      {
2 ~  M! G: a5 ]; v: |/ X8 e       vItem.dwKind2 = 0xffffffff;
- H; {/ i7 {; C2 u2 j       vItem.dwItemId = 0xffffffff;
# J: l: {  ]4 k) J1 v8 y  l       vItem.nIndex = i;. P- s+ W: h, }( d2 K
      }else {. [( U" ?. r  I
       ItemProp* pProp = pItemElem->GetProp();
7 u2 O) g1 {( _       vItem.dwKind2 = pProp->dwItemKind2;
# m' }2 q# m5 [( M; o$ a5 p- Y       vItem.dwItemId = pItemElem->m_dwItemId;
2 S9 j- C8 e& v; \       vItem.nIndex = i;. @9 Z. I8 `5 x$ P
      }
; ^  V) f" H( t2 c0 U3 b      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 Q! Z0 h: t* z/ ^0 F( R$ x
     }3 P" b$ n6 j1 x
     //////////////////////////////////////////////////////////////////////////, M' L/ y! m( V3 Z  C& z$ J, b( _4 d
     sort(vItem.begin(),vItem.end());//排序" a$ z, G5 K3 G& {
     //////////////////////////////////////////////////////////////////////////
' }) R( G& u! T2 l; [5 n     //交换/ z* h: M) P7 E, p( w8 a4 w; p
     for (size_t i=0;i<vItem.size();i++)
* ~& T, f; |7 `, V0 h3 O5 d- N' x  p     {# l- ?" |5 o# o7 ]
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& @0 r4 S0 T9 [9 E" K
      pInvSort->Add(vItem.nIndex);" X  v* `8 x* v0 R& E/ B# V
     }; Z% v7 q& l( b% a( l( n
     BYTE nDestPos = 0;
, g$ x4 x8 G; S) v. |/ c! i     for (int i=0;i<MAX_INVENTORY;i++)
& C0 q7 Y" N- {5 ?6 }- Z5 z- a     {
9 w$ r$ e( b# R9 t9 H6 u      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ L0 l, |, D, R
      if (pItemElem)1 r) P7 i" S3 W# g! I' f
      {7 X! f5 s! f' o8 X
       if (IsUsingItem(pItemElem))
+ Y: g" j2 j7 a: D# Y0 o+ ?( m9 k       {3 \3 W  }$ `) a
        //这个位置无法放7 f% S0 e) O; ^  h/ c
        nDestPos++;
3 \) o# E1 I0 K3 X$ [1 r' [: o, H+ w$ L( S       }8 H' c( i. Y4 N2 t& c
      }
5 j0 T1 a3 |/ T# T      BYTE nSrc = pInvSort->GetItemSrc(i);
. K, r9 U( A" m! U6 C" g      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 |. K2 D$ o# y$ u# K6 o- G      if (pItemElem)! y& H5 I, a4 g# ]
      {
2 b$ ~; C/ N( b, l- j       if (IsUsingItem(pItemElem)); }7 k5 ^$ T- T: A- X
       {9 t" d7 q9 |4 ^- O8 F
        //这个道具无法移动,跳过
3 Z+ X* L. G; v+ V        continue;: U3 c4 c' G" _( v2 H
       }: W3 O( ^* O2 d  s/ n- r" V
      }else{2 t* S" A! B$ h0 j6 p
       //空位置 不用动# x1 G" y7 M6 B8 @" e: P' y
       continue;
# v  D3 a! D, W8 w, N      }
7 c+ Z# [5 l  K! N4 o      //////////////////////////////////////////////////////////////////////////
& q* x9 p9 z: x      //开始移动$ ~3 Z6 H$ n* H8 q5 E
      if (nSrc == nDestPos)& H: d& c1 D. S8 ~6 H
      {
& @" R5 A: Y' f6 P( _* |       //原地不动0 T* {8 G& m1 s! [
       nDestPos++;8 p" B2 ^- o+ ~: M: l
       continue;- r3 b; }7 C3 N
      }
% D; B% Y/ x: F- H      pInvSort->MoveItem(i,nDestPos);
9 z9 q& R; |- _3 k- k      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 E0 V8 b, O' ~$ q  G      Sleep(5);
0 z! I& }6 e/ A4 d      //Error("移动 - %d->%d",nSrc,nDestPos);
4 m) z" T: n: y* R; u      nDestPos++;
( i. [3 V6 `$ M: ?) x% Z     }
" Z+ |, N0 |! t) }     //取第一个元素的信息8 t; b, B8 {, x1 O: v4 |
     /*
9 d# c' f7 b6 y- ~* r     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' N' v0 F  I0 \) T+ A' t2 Y     {
4 z) H% O( H9 V) |1 |      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; M0 X6 P) Y, j! S" L
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 c% M. o  j1 l  n1 Y: z4 K
     }
4 R4 a5 O- K9 |1 `- w- I% l" S- \     */8 x( J, \  r5 J* d1 [3 Q
    //////////////////////////////////////////////////////////////////////////% ~' }" @0 @# Q3 d% X. k" q
    break;
5 L% ?$ G% k7 L0 H2 \# Z   }
8 L0 [0 d* t& [; _0 L2 ?/ ^( |$ Y# A$ P  } 7 t) [/ V/ B! i9 t5 b
}
* ^1 Q2 W. s7 J* k. n3 E6 K, e4 ^m_wndMenu.SetVisible(FALSE);9 y) p) A* v0 `# k
% I5 \  \) I5 P
--------------------------------------------------------------------------------------------------------
3 N( m$ b# C) p8 z! N" A搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* y& [9 v! V% M7 D
{: j2 u' W! u: R0 R: y
BaseMouseCursor();* S6 {/ B# ?- ?: f0 m9 n# g  o
}; F* }) w. G; C; x2 K
在其下添加:' l) E' q- w1 H5 D' A% i: G
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 B' l% g4 Z, R7 }3 `{* z2 V& V& M2 {! L% |: E; q
m_wndMenu.DeleteAllMenu();3 T2 r/ B! k0 b' `  D  H" g
m_wndMenu.CreateMenu(this);
, s; l- R0 g9 t; Om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' a' m; F  f5 k% d6 _$ T% S, \0 x, h
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 t. i. j$ d: T$ W{
4 G4 R, G/ O. o4 \  //P以上级别才可以删除所有道具9 q3 c! w' u; R) e; ~$ K7 Y0 C" f
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. `; @6 W6 m6 D2 k) S0 t9 w5 v
}* o+ N# l; B4 `5 @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# w0 Z. y1 E  _( z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& _: a- d( i  c4 z1 }; [' q( em_wndMenu.SetFocus();
5 E: l. U, C3 G  i" W}
, @+ A3 U3 M5 q1 i& ]) D------------------------------------------------------------------------------------------------------------
& i8 Z# Z. V; m1 K4 U*************************
  K  g% \  L! a0 h+ OWndField.h文件8 K0 f4 n9 u% X& S" o9 P9 G
*************************8 ^/ E7 m  d2 @# [9 i
搜索:BOOL m_bReport;$ z* O% r6 `# X9 v6 y. u
其后添加:5 M4 Z5 `2 |! y, b7 V
CWndMenu m_wndMenu;
0 Y) m- M/ m5 K8 M  E2 X搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) w! \* s  h) o6 X8 ?! b3 t9 @
其后添加:* H, M3 m4 }( N/ G0 J7 t
virtual void OnRButtonUp(UINT nFlags, CPoint point);% Y2 q$ h  F# Z  u
9 E' z1 h  u: }# ^: v
, [9 d! p" R+ s& w4 N" _2 u

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 12:13 , Processed in 0.064401 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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