飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件1 `& F: s5 a/ q% ^2 ?: d3 a/ ~9 w& H
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( M1 a: Q( A" d) s9 x

! ?6 p0 o: [. Z0 X+ qstruct sItem
4 L4 Z# |+ B/ a# `+ q- [9 ]{0 t) Q- @, q' X& R, Y9 h1 s
DWORD dwId;
% g, }* s" I0 r7 r1 bDWORD dwKind2;4 ?/ X- @- ~4 g2 z
DWORD dwItemId;. r  _4 }, b' j7 w* M
BYTE nIndex;
4 z8 ?/ [) n* A$ `( }9 `sItem(){4 a- ^0 y, j) H+ e' \6 d
  dwId = dwKind2 = dwItemId = nIndex = 0;
7 Y; Q' o+ V. O4 `! }/ U}4 V% g) w8 c/ e# Y+ o
bool operator < (const sItem p2). I3 j+ r  q8 M5 p4 S7 \* d/ M
{
+ E8 Z' d& t, g) t  if (dwKind2 == p2.dwKind2)+ x3 g/ A6 ~6 W3 K3 T$ o
  {
! g- p8 c2 M1 m6 f   return dwItemId < p2.dwItemId;( D; A0 U* O3 w6 P
  }else{
6 q2 K  B+ t2 ]7 `& p   return dwKind2 < p2.dwKind2;7 q# u% @5 U2 J' F* d+ r/ w
  }
7 O* e2 \  U: J. W& U& q! [}
( W5 C  a( K1 z: l( x};. }" u7 ]0 ?7 E! N' W
class CInventorySort
8 y2 s0 p2 p& I* k9 M( }{7 u# ~! F2 I+ V
public:
5 b) T- ?3 j( w4 E1 u- m$ dCInventorySort()
5 c- e& a5 g7 ]# j- ^7 P* K{
  F+ U$ L# f8 G7 @: E  m_dwPos = 0;
6 F. ]& _1 o& h8 ?: A8 C$ l7 ~}
, A; ^& k( p; u* U~CInventorySort(){}6 M9 `$ W3 D  k) S  I+ Z( s
private:
5 s3 W" e, z: UsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ K/ z& G- n4 R- y
DWORD m_dwPos;
" I/ s: Z* r) c5 t) ?. Tpublic:
  b- p6 b: D% Z4 N, ivoid Add(BYTE nIndex)! I5 }0 {4 x! u! ~+ b4 A
{+ X) a3 [: S% b& F
  if (m_dwPos >= MAX_INVENTORY)) g0 J9 T* i2 a) @2 j
  {! E9 P( U$ F; Q7 l: J
   return;
: Y5 L) |8 j0 ?' W/ |9 a( w. D/ N6 F  }
/ o# g; R) `) V0 c5 F  F  m_Item[m_dwPos].nIndex = nIndex;
3 m# r6 |4 |/ w. t( Z/ t8 w. Z  m_Item[m_dwPos].dwId = m_dwPos;
! P9 {7 L, b+ \2 _: k! w' z. e  m_dwPos++;
4 _, z8 s+ i8 F2 `& A; `0 g}
  b5 N4 T* G  A" i! V! mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列  {' ~0 G- a1 X
{) ]0 v' `- A3 c) [9 @& v& n
  for (int i=0;i<MAX_INVENTORY;i++)% g) G9 d+ `1 h" n  ^# m  k7 c
  {8 R" A& e$ K" k
   if (m_Item.dwId == dwId), @* M5 x6 X. e5 v; H9 ~+ f
   {
1 }( i( j. Z! G. E9 o" P2 y) X9 b1 q$ U    return m_Item.nIndex;
, I; T) m$ Z5 K   }/ b! q7 p+ j8 }& A; F" Q7 k8 s
  }
- i: R: J& n. I  return 255;. Q5 \" L- @8 _( A8 s
}
& Q, H8 x. d0 D* f( V& Q: j6 Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 d8 k5 M0 Q; B' b
{
, a! M, h2 E9 h8 `. I1 i4 e  BYTE nTmp = 0;2 ~3 [8 F4 O" S* L
  bool bDest = false,bSrc = false;
! d8 V6 \6 E6 Z2 C  for (int i=0;i<MAX_INVENTORY;i++)- \( X, Z; G" j7 o7 B2 Q( l5 [
  {3 E. S3 e3 ?7 i$ y, E' d  c
   if (dwSrcId == m_Item.dwId)
" e  w8 K$ X0 u4 L/ g9 f9 a. B3 Y   {' [  _- s8 o$ A
    //id相等 则 改变对应的dest和src9 ]: m" O1 K  x7 x0 N- h) N
    nTmp = m_Item.nIndex;2 Q9 _5 B1 |( q* \* l. ^
    m_Item.nIndex = dest;! d9 l9 r% w% r1 ^9 s3 ?
   }) [% L' i3 ?+ |; g
  }
" d3 H( m' y, R  //临时数据保存完毕,交换开始2 a* j. O+ g! y6 x: [& y9 }
  for (int i=0;i<MAX_INVENTORY;i++)
& W! r- H4 O5 a! g/ Q3 l& c  {: X3 E$ C1 V1 W3 J% {, V% X
   if (dest == m_Item.nIndex)' q3 [9 O: r7 {! F% f& q+ O* d9 A
   {
1 G: T' g; `  Z& `+ ^  ?    //id相等 则 改变对应的dest和src: L$ c4 p. w9 k  W% h% ~, ?
    m_Item.nIndex = nTmp;' M* e  @+ f1 r0 c7 Z
   }
7 x8 E7 v* o; Y, m, u  }
. p0 S+ C/ K1 r5 Q& T}& E* R* `( ^/ k
};
0 }8 |& h# d9 y# M-------------------------------------------------------------------------
) x6 @8 H$ y; x9 J6 X依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 o* Q5 o6 y8 z$ l8 o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 [- h& g7 V# r+ `: p/ B$ M
紧靠其上添加:
, [7 }" G# \6 g8 M0 h& k+ vif( pWndBase == &m_wndMenu )- `4 n; _; q! ~1 }
{4 H0 U2 \; ~  D8 `. N
  switch( nID )
4 N: D, M, h9 d2 N7 I2 H& R  {
9 h% O9 o' ]% O1 [  case 2:" n3 d" @; \2 r4 u- H
   {
, u4 a2 K% @8 k    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) `, A% Q3 H# N; n. C1 [; @! c+ M
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! O/ \7 G9 n8 L7 H3 L, x
    {5 S/ b9 }: ~( U4 U8 h
     break;
% ]& q6 E1 J' N( s, ]    }7 Y3 g( `9 e( p3 M/ @
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) O# ]. @$ V& t* X& s: H! l    {7 w3 q; r4 h& g8 r/ y0 C
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ W5 z& B6 H6 `  l1 ~# l     if( !pItemElem )6 h2 C9 ~2 T$ ]; l/ L3 x
      continue;7 T' T! r  V; r2 B, M6 N9 _
     if(pItemElem->GetExtra() > 0)4 N% {: C. }% p8 O; m7 B' Y1 f
      continue;, e2 C# q$ X6 J* W
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 N1 O( x: V6 b
      continue;7 z9 m0 j  P# p  K! k- g2 I4 g3 U$ X
     if( g_pPlayer->IsUsing( pItemElem ) )6 a/ u: v, @  n) @, u
      continue;
2 E; c! Y. |) x: a  ^. O     if( pItemElem->IsUndestructable() == TRUE )
; p7 D2 F4 X. h( J, I9 `+ l     {% n8 R* e* V$ u' a
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" l+ t4 f( L) I+ E4 z
      continue;
* q$ }5 F* Q5 \' t     }2 y0 |" P9 `2 N  E, F/ S0 U
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 @) `/ d, g. I! l" h, T9 u
    }  z2 ]6 D) Q' G7 a, K
    break;( o2 s- J4 s* j% J( x% q
   }$ Z3 N( ]% x3 t$ k
  case 1:& B9 r) W& k3 b; a
   {
4 [1 G, M- m( |- `6 G# ]7 X2 }2 \    //整理背包
6 z/ ?$ B8 |- ^# P) p- E    //////////////////////////////////////////////////////////////////////////2 Q( C0 J: W/ \, O  P- _
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: _; E* B# S7 E7 |: |
    //////////////////////////////////////////////////////////////////////////! w* _# Q. y$ k3 D2 V* O
    //////////////////////////////////////////////////////////////////////////
# X! D3 O4 y. G  B) W( N    CInventorySort* pInvSort = new CInventorySort;( X4 j8 b* R& t! b
    vector <sItem> vItem;
! B3 c5 s: `  D# a5 d& {$ P    vItem.resize(MAX_INVENTORY);//初始化大小
0 \( H( z# Z$ n) q. x     //////////////////////////////////////////////////////////////////////////
$ w0 X9 d) U# N9 S( E) o2 }3 h     //填充数据$ z+ Z0 d( I* j
     for (int i=0;i<MAX_INVENTORY;i++)
9 D5 z( G3 c6 T, ~2 q1 g$ Q* R     {" X6 A6 J% n- h7 a, Q% X: J
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 |$ s! w5 W& n9 `* g
      if (!pItemElem)
. I/ v% w' H7 H) H1 p      {
" v# s8 @4 v  m  G/ J7 J& `       vItem.dwKind2 = 0xffffffff;3 P+ }1 P: C' j' T  p. L( y7 V: K" }
       vItem.dwItemId = 0xffffffff;
) @5 w0 i4 V$ ]       vItem.nIndex = i;$ g8 R8 o" S0 X+ C! Y
      }else {. z0 w1 k. x4 c% e+ ?
       ItemProp* pProp = pItemElem->GetProp();  }1 O* ^* J' d# T& @" ~
       vItem.dwKind2 = pProp->dwItemKind2;
7 e4 x* {2 Z1 g. f% d       vItem.dwItemId = pItemElem->m_dwItemId;
7 {) D3 P! j1 |7 {' E3 Z+ }( \; Q       vItem.nIndex = i;& Y/ N0 `: K5 G- G
      }4 ?8 |" O$ G& f) V) N: d7 r
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' Z' X9 F! Y) r& d- l     }
9 q3 x. E; C3 z     //////////////////////////////////////////////////////////////////////////
$ G9 S! m# }0 J% f2 d% X     sort(vItem.begin(),vItem.end());//排序
% q& N% l) }2 U2 u     //////////////////////////////////////////////////////////////////////////2 ]. V3 t* P4 ?8 H$ W! n
     //交换% d0 I, k" s* L& d5 v4 w7 Y3 K3 }
     for (size_t i=0;i<vItem.size();i++)
! h% w# s# |% }$ d$ y     {
0 R& Y: I3 O# i      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 g) C+ b  P3 E5 a; Y) B  w: B
      pInvSort->Add(vItem.nIndex);+ _+ R8 Z! i3 m4 g" k
     }% [3 T' H, Y& q& v. q0 Z' v
     BYTE nDestPos = 0;
0 C4 v- e% H4 Z7 P     for (int i=0;i<MAX_INVENTORY;i++): y% G* s& t. [1 {3 B. @1 F( I; D
     {
+ |! ]" o4 o0 I# S& \$ j' d      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 x3 M" @% f2 Q5 X- M      if (pItemElem)
# I/ p. ^& x8 |4 I3 n$ B      {
2 P( {9 O" w8 t2 {1 R% \8 j- s       if (IsUsingItem(pItemElem))5 G- ~) ^( q) a# X' ?. a7 J
       {" _4 ?6 P: g7 Z
        //这个位置无法放
% ^5 Z) t6 _! L) K* K0 N        nDestPos++;
& h. n* E3 {$ T+ \6 d       }( L$ R" g0 y8 J3 Q- f* Q
      }( ]( v2 }1 [" T# `* Y
      BYTE nSrc = pInvSort->GetItemSrc(i);
. \7 \0 ^% W1 A      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ W, l: W' E  C1 p2 l* H5 ^8 T
      if (pItemElem)
: B& d, H: M) V5 _0 t      {
) D: u6 s8 O) n5 E9 b       if (IsUsingItem(pItemElem))
8 Y6 }7 }. C' Q       {2 b: c: i( {/ x9 J
        //这个道具无法移动,跳过
8 ~/ D& r8 n/ q2 x3 i        continue;+ ^3 I" s. U7 a2 L
       }" t1 a! X) u- ]& B: O5 u
      }else{( ~1 \+ T# l' ~% n9 C, b$ J
       //空位置 不用动7 t+ T5 _% [2 K, @2 f' T' w) `
       continue;+ f! |  H; T& J0 d, z; A
      }
7 X* w: s* R( h& g7 h8 }      //////////////////////////////////////////////////////////////////////////
9 ~& G1 j# L9 _( a! P$ g7 ?& @      //开始移动. L8 ~+ R7 q6 T$ v4 _0 i
      if (nSrc == nDestPos): J8 [. F* C. O' ?: D
      {
4 i' ]3 X: C- j5 h       //原地不动$ a% i4 c% `9 O8 i: [
       nDestPos++;
4 ]# h5 ~& _7 h5 d+ j       continue;& H$ f4 a. U! E* d" [$ G: ~3 P) @" n* z1 l- w
      }
- P! W5 {, ~/ K1 D& W) m' w6 W      pInvSort->MoveItem(i,nDestPos);4 A: L& F8 p0 |
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
6 C  ~% Y0 K, q  \      Sleep(5);
+ P, [- Y2 q# R1 u: H      //Error("移动 - %d->%d",nSrc,nDestPos);
1 I' r4 W5 G8 c! c, z2 m2 P  G      nDestPos++;
! q& g+ t" D( v( H) H- g5 b9 J     }: U1 O+ D  U. l5 r; h
     //取第一个元素的信息
: v' M( T6 F" Z- c0 _     /*
: J" G4 Y, O4 s' H     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& e6 I2 i6 E* _0 Z( j1 V
     {: ^, ~# {9 ^6 P. r
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- M( m1 H: |3 B6 s2 s( C
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# Z/ S# d6 m# H% |0 o' v3 n9 O' E
     }
# `, H& I$ e0 P5 ~     */
2 C1 i- c+ t  `9 o8 Y% u    //////////////////////////////////////////////////////////////////////////
) H2 r" ]: `& h5 E    break;
0 }7 ^# v, ]8 Z: I9 M+ R( G   }
7 p' \9 A; z# P" E" I2 e  }
" P. h2 `  [, t/ _0 d, n}
" e( n3 w! x8 ]m_wndMenu.SetVisible(FALSE);" q3 t, g* Y# [: p. k) R; f7 n$ x

1 |, |4 |- H- G5 ?5 h--------------------------------------------------------------------------------------------------------
" t$ l. V. c! X/ r9 L+ u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! H2 S8 H2 c* a; D8 t{
8 D2 H' i8 J1 q$ e4 p% {0 @BaseMouseCursor();
9 B! p: _9 a: S1 p2 q* A7 i}6 Y* p/ d, d; x( P: I! V  [5 J
在其下添加:
% K5 s5 V% ~  i4 mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) Q3 y  x' ^' I* z- c
{! H9 c, L, t1 k4 C) x8 J. _
m_wndMenu.DeleteAllMenu();5 N  e) w% s+ \& U
m_wndMenu.CreateMenu(this);2 V7 |  Q( Z1 m4 _
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ A7 @6 z; A/ z& o3 F. l/ r% k' l$ ~+ i5 p* g1 F8 Q, a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* F  P2 T) x5 @3 {1 T
{& I0 K7 r4 e. O6 `! k
  //P以上级别才可以删除所有道具* ]8 L3 p4 b8 H$ {, j# V# y
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ K0 x3 @; s; L- C}: _/ L4 S0 x3 n  f5 \, K8 B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" o# `5 p9 a6 W/ ]- y! E# v: m
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: R* F6 ]+ r1 _' C% k: I
m_wndMenu.SetFocus();
( U% `) {$ H" ?}
7 Q$ c% B  }! f6 B% T1 w6 H------------------------------------------------------------------------------------------------------------
. P0 _5 Z' k& X/ [% Z*************************
8 @  V% O& D6 Q3 |* v: K9 `' YWndField.h文件
# I- c8 L3 {" u0 j' a0 r) |2 e*************************$ V& Z' r* I) m
搜索:BOOL m_bReport;6 i0 O  Z, T2 e1 B4 T* d9 f% L, P/ G
其后添加:; z  o3 _" ]$ n% n
CWndMenu m_wndMenu;
8 {: ~- v! `, e1 M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ t. l) U1 b9 w/ Z
其后添加:- b5 o: X2 K1 m) T" w
virtual void OnRButtonUp(UINT nFlags, CPoint point);# g0 `9 v) X7 P$ T) B/ }) y  X
4 O6 Y- Y2 @) ?

5 D2 z% C. W* T( Z

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-17 04:23 , Processed in 0.067745 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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