飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 W' F; A) `  a' C8 w5 ?3 C搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( |4 g+ C# a0 L" \, x8 n3 t

6 X. `  |+ T$ v$ ]( B6 Kstruct sItem! E7 b3 ^2 ?% N! i2 b6 P
{+ i, o, x- W* H6 i9 C1 f
DWORD dwId;
* o, T. K) S. n# h; z4 lDWORD dwKind2;0 i; u4 T, y' H2 m; q' s3 r
DWORD dwItemId;" G& o" a0 a+ H  ~- Z$ g
BYTE nIndex;
! A# {: Y9 K1 I+ L. ?. ssItem(){
) z1 o( b  E' z/ P  dwId = dwKind2 = dwItemId = nIndex = 0;
( y( N2 ~3 T2 _  C% I}
' s! @9 D' u* n* K9 Z9 Bbool operator < (const sItem p2)
) U5 r3 x1 _$ }: s, b" D+ E# m; C{
" ^) O+ x# o" `& K- }6 G. ^- `  if (dwKind2 == p2.dwKind2)
7 n+ Y, G* D6 O/ E$ F) m0 W1 K  {
% L2 P3 h6 S1 b6 c$ k   return dwItemId < p2.dwItemId;
& E) C( Y! w; \; @( }6 ~% u  }else{
+ E9 [  x/ N/ ]3 G. r+ P9 s   return dwKind2 < p2.dwKind2;- ?* g( a5 O5 y" A- ?
  }- w; j" b& d  r$ d$ G
}
+ T5 X. j8 S9 Y};
% `* }9 D: u0 \class CInventorySort5 b7 b) s; L- M0 N
{
2 R2 ]( T& S6 C$ ~% Y: V4 Ppublic:/ m7 m7 o; R5 W5 g0 r  R/ k, z. m( Q
CInventorySort(); k0 T- ~* ^$ ~5 D0 c; \
{8 Q0 q5 U0 m9 Q1 w8 G% O8 p
  m_dwPos = 0;& a# n2 U$ t* a% ~4 y
}! s2 E% p0 p3 z
~CInventorySort(){}
4 N% m! p, d' d3 d7 }2 c; y; Zprivate:$ x! b, f7 p# F& J8 c3 s% n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" m6 V- L. \2 ~9 G' @9 i: ^) R8 B
DWORD m_dwPos;6 n' S/ r9 H) D; W5 S
public:' @( s+ k9 [5 U8 v7 z" e# \
void Add(BYTE nIndex)
- d" C" r% X! L{$ n3 Y1 F2 U5 E) j- R5 P# o% x
  if (m_dwPos >= MAX_INVENTORY)( @6 h" Q, [' p' B5 I/ T
  {
0 ?& w: f0 F0 S   return;
; K7 d& a! y# t. L! |, n5 ]- a  }( V( C1 v1 Y. n# E0 ~1 g
  m_Item[m_dwPos].nIndex = nIndex;$ a9 @8 h9 n: w5 u2 A2 k% Y( e+ I
  m_Item[m_dwPos].dwId = m_dwPos;
# u8 L/ r0 N3 n* v0 b+ Q( }2 J1 Z  m_dwPos++;8 m4 I6 a# t& K8 i
}4 H2 |$ v( O* e4 d! x7 D7 R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! c% o; y  _8 O0 ]- l0 L5 P
{# Q. E% j6 ]/ F7 N1 l
  for (int i=0;i<MAX_INVENTORY;i++)0 {6 Q$ ?2 c5 c( S  J
  {" }" o' |5 p4 i  G2 l
   if (m_Item.dwId == dwId)# O% Q( `. S1 Y( `7 D% i2 ^8 M4 z0 i
   {1 ^% }" W: }/ v. k2 E
    return m_Item.nIndex;4 A! r; a! Z! o: s" X" q7 O
   }
# W+ j+ u3 }' o8 g9 }. U5 ~' {  }, j( o2 w& N1 `/ v- y
  return 255;& a- S( a' w  a3 f0 H' i8 z
}1 T- }8 {' l( L; b4 [
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& Y5 F* N" Z3 l
{
* g! ]  ~4 y) ^9 f: g5 _/ S9 y# K  BYTE nTmp = 0;
7 a* n8 K% G' G: w1 H3 O9 _  bool bDest = false,bSrc = false;: }2 m4 ?0 ?/ s
  for (int i=0;i<MAX_INVENTORY;i++)* R7 O& V4 f7 f+ V
  {
1 U8 P) l. ]: m  h% p% C5 M   if (dwSrcId == m_Item.dwId)
5 j9 R8 M+ s6 K   {4 P. f# I) j: o* |6 T
    //id相等 则 改变对应的dest和src; A, Q5 ^8 `9 x+ C
    nTmp = m_Item.nIndex;: i% `+ T: d( W8 i: h5 w7 }
    m_Item.nIndex = dest;0 j( }$ q' T: H) y5 ^% o
   }
0 w% E& E* K7 {  }) Q8 Y8 r3 s6 w% K. t8 c! @' B
  //临时数据保存完毕,交换开始
4 {" L% d# r$ o  a  K  for (int i=0;i<MAX_INVENTORY;i++)% h9 l! ]* p% q5 J$ g
  {
; O( u3 v  T, }9 u- H   if (dest == m_Item.nIndex)
# t1 d7 }# V5 W4 l" y9 Z   {3 D# P9 x# N% i1 p) z" d6 Y
    //id相等 则 改变对应的dest和src; \% Z4 o. ^& H. k5 N  t: q
    m_Item.nIndex = nTmp;
* q# k2 i9 R4 K( w   }
8 {: x. o! Y, q2 k  r- X+ X* _$ D7 ~  }
+ l* y* e0 G8 r: c}: r$ b2 H- A  s$ Y8 j7 L, U
};
. _$ }  `8 s1 m, g-------------------------------------------------------------------------
! c: A/ o' [; x5 R依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 L5 U4 C( G8 @+ V5 P" G6 `9 W
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; f* Q7 S, n) ]' |, z* n; F5 a
紧靠其上添加:$ E6 |" S% q' H) o, @
if( pWndBase == &m_wndMenu )6 j# e( [3 E. n8 Y: Z- [# d) V
{! G' K2 h  ?* c* B9 k! O: x5 ]
  switch( nID )
5 }* F- {' O& E" Y  {
! s" u6 {# r: @$ B5 v! ~. H  case 2:
8 ?& l# R( h/ i" x6 C8 v   {
' N* g" H6 o, O, [) e  Q  \    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- j7 s7 k+ J& v8 G" h* `( R5 Q    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% d7 b, \4 N: c! k
    {
7 j& E9 D4 c8 M9 i* |     break;
3 v! x7 c% J4 i  h, k    }. g3 Q4 J7 T5 w/ Y: ^
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( r0 Z7 a$ T+ t, W6 L
    {
9 @, T* y" {, |3 N# p6 S( U# E     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 ^, M6 O5 l; T  g- Z
     if( !pItemElem )
' ]! f3 a2 Z# b! c      continue;
7 [# p6 G' r$ }7 h     if(pItemElem->GetExtra() > 0)4 V/ X3 x* Q5 `# i3 D9 S- w5 t) n
      continue;5 F8 G, S0 ~3 L
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( W1 _1 N( @& H. R8 `7 ^3 |1 M
      continue;4 m# f! U, g: t) @' w9 K
     if( g_pPlayer->IsUsing( pItemElem ) )* j4 ~/ D6 L' o# m/ Q- R2 i
      continue;! y* k1 _" z# Y/ g- b7 j
     if( pItemElem->IsUndestructable() == TRUE )4 M) T+ N- y% ]3 u4 k& O: ~
     {, @7 I9 V( I" \+ t8 J
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 n# C8 {6 b6 j( P" v
      continue;
: l0 f9 q$ J+ A; z; d, n6 c0 c2 E     }
% C% @. q* \. {3 E: H. T$ `9 k     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 U& P/ E5 A+ w. M  W& t7 l. G- V, [    }/ @9 E  m4 H  P" r; l# ~4 g* s' E
    break;
+ X0 Z( z& B2 [3 S  g# w4 b   }9 O, \+ n; Y$ k
  case 1:
+ w7 P& V0 p7 n6 ~7 n   {
) |- s  N( B5 {' c+ ]* u$ r  w, J    //整理背包5 y4 b! r' [/ G6 @- E5 l+ b3 v; I
    //////////////////////////////////////////////////////////////////////////
) P' n5 {9 j' A  N- Z    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# B8 n4 S6 w% f    //////////////////////////////////////////////////////////////////////////
) H" u( l3 m% O: u    //////////////////////////////////////////////////////////////////////////
, |2 z1 R' q# Z1 A) l' q  n# B    CInventorySort* pInvSort = new CInventorySort;' ~9 R3 @4 @8 r7 \7 R. m- g* v/ l
    vector <sItem> vItem;8 j5 `* l# k3 u5 z; t" L
    vItem.resize(MAX_INVENTORY);//初始化大小
9 P  ]# w* _+ ~     //////////////////////////////////////////////////////////////////////////
" q! d5 `! G0 x8 v( W( F5 e  p     //填充数据
2 ?( ^$ y% p+ }0 v     for (int i=0;i<MAX_INVENTORY;i++)
6 G/ s4 y' a3 A% A     {* K. y0 f5 q" t7 m
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! l4 K/ G! L& j0 y      if (!pItemElem)
% P; s3 U2 v5 U: P      {
; m/ @, m. P3 K& z       vItem.dwKind2 = 0xffffffff;3 V1 J3 |; n  {/ a  A6 G# v- q
       vItem.dwItemId = 0xffffffff;2 {9 X+ v9 K( n$ A+ |7 I
       vItem.nIndex = i;7 r8 d. f7 e4 `" h6 r
      }else {( Y; o1 q8 O* K) T$ e& v
       ItemProp* pProp = pItemElem->GetProp();5 K( J7 h$ M: A/ v  E" i
       vItem.dwKind2 = pProp->dwItemKind2;
2 f: _3 r! _6 n       vItem.dwItemId = pItemElem->m_dwItemId;
: f' g" u$ f: g1 U( g8 i       vItem.nIndex = i;4 |9 I" b( ~7 O* z. o; ^
      }
( S  D4 H9 m/ |      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. _) Q- I4 R- e# T8 I, l1 h
     }1 `2 V' p. i3 T
     //////////////////////////////////////////////////////////////////////////
2 u$ U8 e% E6 l5 C' V     sort(vItem.begin(),vItem.end());//排序3 l% b- j" U* d/ l; n
     //////////////////////////////////////////////////////////////////////////. B' b  h6 p0 i$ ?  v  e
     //交换
! x& Q0 ^( w0 w' g% N2 d2 W% f     for (size_t i=0;i<vItem.size();i++)
% F7 R* v. y6 p( ^: c6 c+ l     {
% c2 h; E7 I; t9 J      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 Q' N/ C. V+ m' N      pInvSort->Add(vItem.nIndex);
6 F4 E3 [8 h9 `1 d: S4 ?( F; K$ w  C     }2 w% L6 B: `- T9 ^
     BYTE nDestPos = 0;
6 J1 @" @1 _2 ~+ p( I     for (int i=0;i<MAX_INVENTORY;i++)3 q' P5 ]8 V+ h4 m
     {  |' J/ }0 G6 A5 Z# C
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: l% }% F( W/ ~0 R
      if (pItemElem); M+ Z: A9 d- I
      {
. ]; e5 t8 ?) q       if (IsUsingItem(pItemElem))3 _: _8 z5 J0 \0 |' @8 F
       {
- p; i, }$ L/ T& y, Y/ Q+ Y! e        //这个位置无法放  }6 U7 ^) O/ ~$ B7 U+ K4 [3 ^
        nDestPos++;/ K0 d. J( |5 `* ^4 c/ q% P
       }
3 q( O' x! L. H: c5 d4 P8 g      }9 ?8 ^! `& B. L* L8 m% ?" Y
      BYTE nSrc = pInvSort->GetItemSrc(i);* i4 o5 t+ K6 n6 n5 ?5 d
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ r# V; X4 ]) l8 t
      if (pItemElem)
" k! z% P: w. @6 @      {) g/ R# l# q, r( ]- [7 E
       if (IsUsingItem(pItemElem))
! i- k! O! t! r3 q9 a! P- U. d7 s3 W+ Z       {8 T: ]" f" l1 N3 O* ~) e- `
        //这个道具无法移动,跳过! y6 B" y$ v0 v% f! d# K
        continue;: v2 P+ K% \9 Y" n
       }( L/ n3 y4 U( I
      }else{6 b& T8 h8 r: E# G; f8 }& g( q
       //空位置 不用动
5 L" E! Z" J- ?% h9 ~       continue;
- f2 g. q- a9 D0 }      }9 N( u$ ]8 B+ I
      //////////////////////////////////////////////////////////////////////////
7 U# |( s5 B- i- J/ n, j      //开始移动. t: K/ Z8 M" V/ _1 {& s
      if (nSrc == nDestPos)% x* j$ `$ {) L: Q3 s
      {8 X6 m1 y2 G( N+ }- d
       //原地不动) H. c9 L: q# F$ T. l0 y
       nDestPos++;% Q9 {/ w( V" v
       continue;+ c- `0 R8 c8 u; T, X$ N
      }6 ~7 P! I* E% O8 c0 ]+ C" ~
      pInvSort->MoveItem(i,nDestPos);+ ?1 {  h% |6 g3 m5 n4 n2 |6 D
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ V" s0 q4 ^# m$ z, a' ?2 a      Sleep(5);
. ?* H7 \: M/ U5 Q( E7 A/ f      //Error("移动 - %d->%d",nSrc,nDestPos);1 p# ?* f; x+ t# ^0 T
      nDestPos++;+ i' r! m0 g2 s
     }0 s. `3 }3 K8 t2 l+ @5 |8 U
     //取第一个元素的信息
" X$ \6 i; j7 U" _2 U2 c+ T     /*9 I7 k* E7 m2 N3 l
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 f/ B) q  i9 T% a/ A: Z     {
  @' S: R, }5 Y7 h      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. f7 f: _7 p9 Y8 e      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: s. E' p% X/ ~     }
+ i* A4 `4 S* }     */1 T8 Q% x' e: W8 N2 @- l
    //////////////////////////////////////////////////////////////////////////
; {% K1 Q! ?7 i$ r+ {& S    break;
  C! f1 {3 j8 }% A# ?5 F) D, L  {8 G   }
5 g- @; h- j; f  }   U* y' l  ?) p* G: L$ b& o/ \
}
' i8 i. B+ b! w4 j) om_wndMenu.SetVisible(FALSE);: q3 n" z6 S2 D8 O% \9 A
) O% Q: c& K3 d6 E5 v) D
--------------------------------------------------------------------------------------------------------$ _# Z. B6 ~4 {0 _5 P
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 a6 p( T! X9 h& H; W" F: ^( `{* o/ _7 o, g& G
BaseMouseCursor();7 m, Y: e7 G" R0 ~+ U% R
}
4 m2 E6 g; M' x6 e+ D在其下添加:
/ |( s7 e( g8 D9 y) l: |void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' D: W; I4 u  v6 ~# D
{
1 `% C8 Z  P3 [" G2 [8 m& Vm_wndMenu.DeleteAllMenu();* j' P  m7 N. r; e# h2 O/ ]
m_wndMenu.CreateMenu(this);
) ?: Z$ j& }" T0 Um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; W1 `& X7 {/ w$ F" p( k+ J/ u1 L

0 A2 t, z) n, n+ k: N3 c# ]if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# F& I8 \2 q3 p' {
{+ X) Q+ D6 Y* s! a. k' x
  //P以上级别才可以删除所有道具8 F5 A* J) b& O* O  F8 t
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% E" h$ {% J6 {7 ?1 Y! H}% o5 o- T) F3 ?) [: }& p
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 H# T- j( H+ E- R- e, c7 qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 \1 V+ W9 P" W
m_wndMenu.SetFocus();
# A- h. I3 K2 p}
. Z2 x! r4 A# N3 r; N8 u------------------------------------------------------------------------------------------------------------
. Y" J% t( P" I# ~) c# @& m, y( _% ?*************************
8 |  I' Z0 p" t' s( j- B) N' H. P6 y$ hWndField.h文件, P5 r& N9 \" `) ]& W
*************************
# [1 t& z/ r, `+ h; W: \/ o$ m; }搜索:BOOL m_bReport;
5 }: c' h3 Y. g; a  J  B其后添加:
1 c0 ~' O5 {, i; UCWndMenu m_wndMenu;8 ^2 K. n% b6 {
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# W$ W( R5 C8 I6 k! m/ G3 z9 d4 ?  y
其后添加:
9 p  f. i# P8 b0 J- Y9 C) ^1 \  @virtual void OnRButtonUp(UINT nFlags, CPoint point);# Z# T6 A* H5 l( i2 f* }8 v
& y* z* f# w1 k7 Z8 P7 S4 B
( L$ P- a' y) C

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 03:45 , Processed in 0.070289 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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