飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1064

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1064
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
% S  i3 B) T4 Q, \2 O% b$ W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: R0 \% R  u5 q; d0 \. N: v1 h' F2 D
struct sItem. {/ m- [8 B" W2 ]& ^1 U6 S
{0 v/ L3 u8 h4 G+ I) R9 {4 @
DWORD dwId;
/ H, N9 s, f" Q/ H- M/ v9 qDWORD dwKind2;1 g- H. [  }* _6 t% }: o# F
DWORD dwItemId;
/ Q# w% G. V+ J4 d; Q7 RBYTE nIndex;
4 o+ W3 E1 g/ x3 @( ]sItem(){. K# D9 y2 D# H/ N
  dwId = dwKind2 = dwItemId = nIndex = 0;( U, K/ `  ~3 W9 L( F+ z' ~) K
}
6 ^/ o( }8 Y* @4 N( R3 T4 zbool operator < (const sItem p2)
1 S- V  r- H$ W+ v{
' u# ?; P" d& h, |3 X8 X  if (dwKind2 == p2.dwKind2)- r4 a  J: a% T2 U% G
  {" Z/ j5 T0 J( w
   return dwItemId < p2.dwItemId;
7 [  P4 u5 a: G1 |" n, X  }else{
: c) \& q5 ?% ]& D9 Z! X   return dwKind2 < p2.dwKind2;
9 y/ s" |6 w. d& `  }- y  U4 [, A9 I5 g5 p9 m
}
, z2 i' |( ~' w; e' }8 O};
! H: n5 P% D0 K" C% c( Q) Mclass CInventorySort- Q2 `6 {! L3 G) h, d$ J! ~
{
' w# C" F/ X2 |2 h- M7 }public:1 t# M; [9 ~, y/ @! D+ I- X
CInventorySort()
3 _8 \; \7 w6 x1 t$ x4 {* N+ G{) c" \! N5 d- |! S  l3 c
  m_dwPos = 0;8 V! n! k) p0 U# U6 G. D3 B- C
}
! D4 j% U$ Y! j" V7 K~CInventorySort(){}8 M+ m1 I2 I. M
private:
" A/ w6 U# h1 I+ Q- f  }$ o' asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 b# W+ f( @3 g
DWORD m_dwPos;
& @' {; P+ j( F2 F: @3 n( ~  @public:
2 J: F* {% q: q+ [* R# mvoid Add(BYTE nIndex)7 i# o. r, N; ]- i! @
{
1 a4 z8 k! }7 A1 N' p  if (m_dwPos >= MAX_INVENTORY)
* U' l" Z/ W$ F+ ]( o" y  {( b8 `. J3 ^/ h4 }2 V& Z" \* l& b
   return;
& b0 g: c5 i, c' H- |, w+ b2 y  }
. p+ Z4 [0 I+ g: ]  d! E. F/ E  m_Item[m_dwPos].nIndex = nIndex;
; m1 c8 M: z4 K( M1 L# P; l  m_Item[m_dwPos].dwId = m_dwPos;
9 u0 ^3 Z3 v* W/ L  m_dwPos++;
. G4 f% _; A. K7 I2 v7 e5 T' z}' w5 Z9 U' ~! v6 v+ Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 ^3 ~* Z& X6 x+ i( T8 g' U) h7 i{  Q! L9 Z* s( \$ J- R
  for (int i=0;i<MAX_INVENTORY;i++)
* |) _1 p6 J% H. K- p" q8 Y: w$ Q  {
, |+ y8 J3 ~. x( f. {   if (m_Item.dwId == dwId)3 H1 s' C8 _' q" U4 `9 A
   {, Q, ^6 Z6 M; ^; T2 m
    return m_Item.nIndex;
8 a8 G0 I2 N2 z1 R   }: n+ n0 |8 y% E% F/ w2 F* i) w7 V
  }! V1 x, k6 w, n8 l# ?4 j! g
  return 255;
, }3 r, @, F6 y- o2 P}5 _% v3 c& q( V0 V( S4 R/ \* c. ^3 {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. F# X; k8 ^5 Q4 F{2 \( B) A) V5 j
  BYTE nTmp = 0;
! i' [" i* M% \# R' }: |  bool bDest = false,bSrc = false;
2 b# f9 C  e6 k  for (int i=0;i<MAX_INVENTORY;i++)
0 r) z" u! g- A' v% A1 s  {4 y4 ^; h* l" _2 _: G- ^0 R) L3 N
   if (dwSrcId == m_Item.dwId)* C  ?9 F9 w8 ^: R' Z
   {
0 A0 ?; _7 y% w  J    //id相等 则 改变对应的dest和src
/ w+ M1 ~9 `- @! t    nTmp = m_Item.nIndex;
  p! [8 M9 l9 y/ F0 R7 P; g# h    m_Item.nIndex = dest;3 X$ S* e5 z3 R3 P7 r3 H4 z
   }
6 p4 A4 i8 o( c  \/ f  }0 E( j5 j9 A1 _8 p2 J
  //临时数据保存完毕,交换开始
: Y5 p4 |: g: c3 Z- ?& b' g  for (int i=0;i<MAX_INVENTORY;i++)- ~( O+ ~4 j3 d% {  V, ]
  {
1 k  V4 F  M2 J   if (dest == m_Item.nIndex)9 {6 a  F) Z- E5 R; p2 _' m) v6 O
   {' j& q: O- s+ C2 {; s
    //id相等 则 改变对应的dest和src
1 U& w  V/ A3 E' g) S: y1 p    m_Item.nIndex = nTmp;( m' K. k! q8 g" y
   }3 f, j' z+ F7 g* ~+ V
  }
8 ^, Z2 Z2 a$ a5 x}
: L0 c/ a! \8 `& k7 a- ~; U' ^/ M};
9 o- h; \$ B( T) \( P6 d-------------------------------------------------------------------------% D3 [* C, |5 j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )  s/ }9 w" ^; D  H. b
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 d$ ?6 o7 z+ p
紧靠其上添加:
$ {; T5 y- v8 O. G. Y: y" e5 l' n) Xif( pWndBase == &m_wndMenu )( w/ g# v8 ~, o3 k9 U
{
4 F  j/ S% k% c  switch( nID )
4 X) b$ I2 C& d/ a  {
: n& M+ u$ H* x- d, ?2 J- @. }1 m  case 2:
8 Z) z  K  `& a8 y: Y! D   {
8 H3 X% p- l. Z, L    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 D% T  {/ d2 B- H7 a9 N7 v
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ M- i$ W* N7 {1 D7 q2 p9 ^: o    {
* R: p( s) Z7 Q2 N. J' ~     break;  f2 u  w+ n7 f! f
    }
2 Y0 _5 l) H8 e0 f; {, g/ a$ N, ?    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ H" M0 o0 K, ?
    {' T4 ?7 U; g4 L9 y! C# b, m; ^
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 T5 c7 O* g7 `1 X$ \8 J     if( !pItemElem )/ j+ C7 m; G0 r+ D4 D& s. @' Y
      continue;
6 l! B5 @( n1 ?+ z  L7 e( Y     if(pItemElem->GetExtra() > 0)# ^: Q# c4 C5 h" m8 [
      continue;( m* \3 q8 U2 `( N3 H
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 z. o) j) s& u# `      continue;% c, W7 h" O4 Y4 N0 F: u- y/ Q
     if( g_pPlayer->IsUsing( pItemElem ) )
3 x5 F6 G  i) N" Q$ V3 z  O      continue;
$ n+ w. z5 c& K2 E& P     if( pItemElem->IsUndestructable() == TRUE )
" J. o: s5 a+ U4 A5 b' T. ]; q) x     {0 L' t" @7 ~5 i; h9 x5 W
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: r' L9 A. r6 I2 f3 ]      continue;
9 K5 L  x; C  N0 p/ \5 j2 c( K  M     }
+ p; L1 {" g+ E$ i: H     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ V' x0 y& c: C5 y$ i# H# `
    }
! g1 w( w4 s% c9 T2 o    break;
2 F& E+ q) ~4 n5 H& ~% w0 Q5 q   }% h6 k5 @( _1 G7 Y6 `0 L5 c
  case 1:
* X! M9 M! X$ d- k2 S   {1 c  \: [; M" t7 j* D! g
    //整理背包
- w# _% F6 d0 }2 l0 S# w* P+ R    //////////////////////////////////////////////////////////////////////////
# z1 _& a6 k: ~    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 s% L! z0 t: `4 i& ^! W# p! ?. J    //////////////////////////////////////////////////////////////////////////
0 O3 U, ]7 n7 ^; U/ W6 Q    //////////////////////////////////////////////////////////////////////////$ z0 \/ U$ m- U& n% r
    CInventorySort* pInvSort = new CInventorySort;- _5 I. N  x% x$ J
    vector <sItem> vItem;5 F* l* g3 `& \5 N6 ?( n7 `2 E
    vItem.resize(MAX_INVENTORY);//初始化大小
  g/ \5 ~* T0 K     //////////////////////////////////////////////////////////////////////////4 H8 `& x/ i+ N. v+ u' d4 ?6 O
     //填充数据
! }& [7 I! ~# y  U  z. S     for (int i=0;i<MAX_INVENTORY;i++)
0 _6 F0 ]" R; Y, Y7 h& @* r# Z1 |     {
$ B' S! A3 Q" {      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, s5 ]) H. D' o! Y
      if (!pItemElem)
8 W4 }, Z) a  p6 [! V      {9 ~7 b! e2 P: l+ Z
       vItem.dwKind2 = 0xffffffff;
/ N0 w, [6 M& W4 s1 R4 t: R+ `9 B8 }  S       vItem.dwItemId = 0xffffffff;! s: k& a5 c  q& u
       vItem.nIndex = i;- o( \$ o  D' d' s: c! @8 y& ]
      }else {/ N. b) k; y. M' G6 }' P
       ItemProp* pProp = pItemElem->GetProp();) |$ \0 \8 e* M( v
       vItem.dwKind2 = pProp->dwItemKind2;# k& m1 d8 @# g; {% Y+ D
       vItem.dwItemId = pItemElem->m_dwItemId;
$ \' T+ i: w2 z8 w       vItem.nIndex = i;
8 l$ p0 s/ y3 G! m3 L: B2 E      }. P7 T( q2 |4 V, u. k$ K' L
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& f7 I5 a0 o: U' R
     }
+ [* m6 |" f4 Z% }5 V     //////////////////////////////////////////////////////////////////////////
9 }/ O- U* R' Z9 m  r  e0 s     sort(vItem.begin(),vItem.end());//排序
8 o' T" p) J; D/ q& L     //////////////////////////////////////////////////////////////////////////
7 E" J; O5 e* ^5 z3 A( e: f     //交换9 i9 ]( Q: V* w: G
     for (size_t i=0;i<vItem.size();i++). m1 a" A; b8 Q7 ]3 G) }
     {
. g+ Z( X! H3 J      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- k9 Z" u( P# ^6 A      pInvSort->Add(vItem.nIndex);+ b+ ?6 M/ [6 Y9 F
     }
6 e$ l& m6 o0 G, ~; K% e8 E     BYTE nDestPos = 0;
+ s: |4 H8 s( q6 F+ I     for (int i=0;i<MAX_INVENTORY;i++): q9 G$ B9 |: O* I; A
     {; G* G& {  Q2 S, f) a
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' \* D2 s3 y1 V# [& u
      if (pItemElem)
! Z8 F1 t: D" k. Y2 \7 k      {
8 w, g: ]7 M; J) D+ K       if (IsUsingItem(pItemElem))
. l) a' C6 Y  z# l% r) a       {- t4 t' @! I* h  _
        //这个位置无法放+ p; \* ?/ a6 p# a* I5 ~1 i& z
        nDestPos++;0 n: G' W' i* G4 N
       }
6 @6 v) k; V- K1 C' S- `9 H3 @      }& E8 v3 ?" k/ I! j9 F, v" ~+ Q$ C
      BYTE nSrc = pInvSort->GetItemSrc(i);
1 ]$ l9 G5 ?$ j6 N& _" ~( j' \( D      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' u( x+ _/ f5 [" @* S- U3 u6 P      if (pItemElem)+ G1 I2 ]' @: U
      {
( L+ [+ }9 G6 x0 B  n0 L       if (IsUsingItem(pItemElem))
" P7 }: x5 M, m3 s       {
' J+ a% y6 p7 {2 d% s6 M        //这个道具无法移动,跳过
9 X' C* i: H- i! g4 ?* D        continue;
) W' }8 X2 i2 K$ V. B% Y       }/ p* z& ~: r0 f% D; H
      }else{
2 L4 K$ V* c( A3 k$ v3 k' D* R       //空位置 不用动( e, |  Y( Y6 ?  C5 g- J- T5 q8 q. r
       continue;" z0 d# E. U) n% x" r, }( t
      }
. T! ^9 ]" Q1 G" z  O4 b4 j      //////////////////////////////////////////////////////////////////////////
9 \% [3 C2 F* a: z- y$ A! w' Y+ {      //开始移动/ F" a1 \7 b+ b& v* X
      if (nSrc == nDestPos)# [5 {6 M  r/ \- a
      {
( r$ Z; {) _& o- ]' W6 Z       //原地不动
+ Q/ |9 X$ {& w  T; i       nDestPos++;8 ]" J& ~! z# k" g! S
       continue;1 B/ P$ [  w+ ^# \- d# h. @
      }
8 T4 J' ~  }' \0 Y* X$ O4 H      pInvSort->MoveItem(i,nDestPos);
: T: O0 e: [6 c; n1 Z      g_DPlay.SendMoveItem(0,nSrc,nDestPos);8 b! X+ d1 f9 c3 {& c' ?% O- ]
      Sleep(5);2 N) a. y, L- Y; Q4 O" {
      //Error("移动 - %d->%d",nSrc,nDestPos);, T2 w; A+ l8 @$ ]
      nDestPos++;! ?" v1 b* U4 L- p6 a! A
     }
' r. Z0 E1 G0 f- p6 ^( f" H     //取第一个元素的信息2 d' N! v3 j; ]4 ^$ l/ @7 Y* M
     /*
+ u& U2 W( B+ ?     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 }+ f% T" M- k! l( D$ e     {6 V% X* I0 o- q( N/ s; `0 ?0 k
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" {! u* F% U6 I8 l$ ^" z( _      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ E) W8 |# q3 b/ L     }
8 q  q- e- H" q( N+ `" m     */$ O  Q3 [! U3 j
    //////////////////////////////////////////////////////////////////////////8 x8 C* f( j  c4 O' Z
    break;. ^! ]/ G. ?( e# h( @0 C
   }
6 ]: M; l- l" ?1 Z6 K4 w  }
2 M* k- c9 f  r* n}% W; a6 O+ o$ |2 V. a1 d. g
m_wndMenu.SetVisible(FALSE);. z% Y. Q! V& H

* _8 U; U- W7 R9 Z' ]2 ]; Y--------------------------------------------------------------------------------------------------------
( v; R; `" y7 C8 \4 ^. N1 E4 R( D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 S" W/ E& }' w
{; i  B! I2 }1 K: ?* u
BaseMouseCursor();9 N- Q+ W  O6 W
}$ b9 Q1 _% D" R( v7 y. c
在其下添加:* p" e. Q' H: j2 I
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ N! ]8 o& Y* x
{4 F' l' N8 y! N0 w  m9 P% l- D
m_wndMenu.DeleteAllMenu();
+ R" {) K  [5 l8 q: ]( vm_wndMenu.CreateMenu(this);
+ R% Y8 _  J( q. b' u6 t2 Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 O1 _: ?. P9 `
# l& f, B9 G/ x8 i1 Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( z' x# a) _9 j9 L1 `# ~{9 U% ~- M: Y" O% O3 L  V
  //P以上级别才可以删除所有道具
) O" l" A# J# y) Q$ T  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ t# B' M9 s& I# w2 t' L}" I7 v+ X9 H0 y; a
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- Q) m, u8 {2 W; [4 c% B5 X
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' U; _* a% P- A" b9 }m_wndMenu.SetFocus();. ^: b3 k1 p7 `" C+ e
}8 Q5 I) ~- ~) b% b
------------------------------------------------------------------------------------------------------------
( i* A6 q% x4 k: s************************** L  V. v& _! ^. ?, e/ ~
WndField.h文件
0 J( |& y: s8 _( {7 I! x: \*************************) g9 t7 f& U. q0 `. D
搜索:BOOL m_bReport;7 _1 `1 w4 Y: V: M1 L2 k0 @7 n
其后添加:9 o2 h3 R6 {3 o, _, x
CWndMenu m_wndMenu;
" b7 \+ l3 y: }& X0 e搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 T5 q% h) R+ p8 u- O& l其后添加:
/ D  _/ p1 [- R- `5 w$ B" n% ^virtual void OnRButtonUp(UINT nFlags, CPoint point);; K' o9 z* Q$ h$ `

0 P5 |7 Z* v/ Q, T6 C; q! d& I9 D* P- x4 C$ |" B; Q

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 20:53 , Processed in 0.062439 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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