飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件8 d& t- r4 g# y! ?
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, m8 Q( i, V7 E0 x' w
% s' t7 M9 q: |' zstruct sItem' T: {! C1 X: s: m; K
{/ i9 B0 C7 J5 i3 C! }
DWORD dwId;
1 f4 n! t. y$ I' b! P$ fDWORD dwKind2;1 K' T) m7 M7 a
DWORD dwItemId;% R% M) a$ m+ m5 }: y
BYTE nIndex;! R# L2 z( h4 o0 ~7 o
sItem(){
. R2 w/ ~# q* F' Y( Z  dwId = dwKind2 = dwItemId = nIndex = 0;
# L  a1 Q9 ]/ i& A) n( z7 ]}. }# w! h6 `, z1 b, {# @
bool operator < (const sItem p2)
. W0 R* I0 r8 c4 V' E{# {- a$ O/ X6 N: s' L
  if (dwKind2 == p2.dwKind2)
4 t4 R2 b% A$ N# n+ l  {' m+ U* R$ f, [2 Y
   return dwItemId < p2.dwItemId;' s, r* R, h, n& T
  }else{
: I. I" R3 |: W; E3 J   return dwKind2 < p2.dwKind2;
4 `$ d4 V2 z( @5 {4 ~  B! z  }! B; e2 g4 W) J4 x* l1 H8 I2 \
}
  e# F( k2 d2 P; `};* n/ \. |' s1 ]. K0 r4 I4 e6 O
class CInventorySort# L- u/ q- b' W( `5 Q7 I3 a/ c- `$ H
{- J8 u- E3 J: m4 O$ u
public:. F( e* f) ?" ?& {0 r+ q; y
CInventorySort()  d  O. T7 }" t2 s' b0 r
{0 [% n, l% `4 u% t. e1 Z
  m_dwPos = 0;( {+ |$ ~0 E) G. {) k
}
# d# f6 e, A. n( X; p6 I1 q~CInventorySort(){}
7 N7 f2 y. G( `* X+ l1 t  ]4 xprivate:
$ N9 a& G1 F2 F/ u4 X7 BsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* [5 z! O* \) u6 L+ ~: D
DWORD m_dwPos;
( b) q4 W+ ]7 g& Wpublic:* ?' u/ Q, w2 j0 D/ _
void Add(BYTE nIndex)& u/ l: N8 j( k2 q' G0 U! a
{5 q( J0 c$ F% R% g
  if (m_dwPos >= MAX_INVENTORY). T) a, f; N! T5 h
  {1 A9 R5 N: [$ _# F7 d9 r9 m
   return;
: G/ P- c5 I; r, e3 M! h/ L  }
# O& L5 ]: w; b- X4 Y6 \0 R  m_Item[m_dwPos].nIndex = nIndex;
$ H8 W1 P' I5 W! f( l( Z+ r0 \  m_Item[m_dwPos].dwId = m_dwPos;
5 f) a: G3 A- z( ]) O  m_dwPos++;  v+ \: q4 v+ W
}7 a; T) V; i# P- @# O
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& _. p1 y0 F6 z' H{. R/ A( W: F- S: Z: _" Y/ I8 b
  for (int i=0;i<MAX_INVENTORY;i++)/ s7 ?# k9 Q& O4 ]' B/ ^
  {
9 Y- B3 g  \. @& a* K) @   if (m_Item.dwId == dwId)
  j# ]# a; Q7 m- L$ P, a- u! i, {2 P   {
. O& r3 `+ l( I* Y! }4 ^    return m_Item.nIndex;2 _3 F1 M5 j# k& G: z+ E
   }
/ w% u2 E; s: {) i: n$ M3 N  }
' }" z* B  C  Z- R; _( n2 b& \  return 255;
# [* t* d% G. b: w! ~# \}
- R$ H7 U: O  |8 x5 b1 Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ h' r7 [0 m3 Z2 N# H- s
{/ v& b! J5 }! F1 J
  BYTE nTmp = 0;7 x. s" K( A2 d. g
  bool bDest = false,bSrc = false;
8 F& ]* F, J  l! a  for (int i=0;i<MAX_INVENTORY;i++)
0 N# Y. R  w5 _+ L% c% j# g7 ]* a  {
5 G; |* b+ i' a- f1 G8 X. A1 j   if (dwSrcId == m_Item.dwId)8 L" z0 K" p. K8 G( ]5 V
   {
5 M- {: f6 O9 m& @    //id相等 则 改变对应的dest和src; ]; j. L; ~7 |6 i
    nTmp = m_Item.nIndex;3 U8 U" g. a0 _6 m1 g5 F/ j2 a
    m_Item.nIndex = dest;
' M5 D; h5 i) b" j9 Q6 m   }& h' ^) N0 w% {* r0 b2 x6 K/ Q9 v
  }1 w& b' M1 [/ H+ ^& v5 z( t
  //临时数据保存完毕,交换开始2 K# W, U2 W) C) F# a( ?7 w2 V, |
  for (int i=0;i<MAX_INVENTORY;i++)1 E9 S1 D. Y8 H! }+ \
  {" |" k3 A! ~0 t/ c+ [4 D% ^2 j
   if (dest == m_Item.nIndex)7 J9 Z6 }* }8 H. V6 I
   {
* n$ I. ]" _& R* t. F6 {4 H8 ]    //id相等 则 改变对应的dest和src: \" Q8 Z6 B  }7 v
    m_Item.nIndex = nTmp;4 Q% t0 _- @- S9 a
   }
5 n% j$ g: H7 ~% U  }
; _' J: M: ]9 P6 y: _$ r6 Q7 H) l# m5 }}1 z9 b% t7 D. G$ B
};
8 X' b4 A& E3 n# L6 {/ \1 L-------------------------------------------------------------------------9 J. H2 ]. ^' w  w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 m! H8 J( a! Z/ O3 G1 D% H
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' D& L2 S# X2 ]% I3 ?# @2 B3 @( m
紧靠其上添加:
( M7 _- ^# n7 {  E7 _if( pWndBase == &m_wndMenu )% o0 V9 n0 q. p- ]4 T% n/ Y
{, I9 E3 A0 P8 p9 M  {$ Z. y, g/ I
  switch( nID )' P6 g0 i) C! Z4 I& J: l9 p
  {
4 X" m! O; L. C4 G' X$ F7 p  d  case 2:
- {, x, {' n  Y   {- V$ P7 O3 h) l0 ?
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# m/ i2 l  t$ J
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ q( P! H! l! {, E6 o* t  ]& y    {$ y4 P6 c; g) T3 k. u, _
     break;
6 ]& ?1 Z; J. Z4 D, Z; w    }% S# D% \% p% C2 V: c
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" V& G* E( v. Y2 Z' j/ q0 A    {1 C2 ?! {3 T/ B* K1 h- y
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- O/ z( T% _; B" K  a! ^3 y
     if( !pItemElem )- O5 g+ E" b1 w; I7 Z$ H
      continue;
6 q8 l# }; W0 t3 Y     if(pItemElem->GetExtra() > 0)( e; g, Y3 {8 U
      continue;
! ^( [9 f! a% R4 ^! x( D9 D* x. @     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 [* ?- B' R$ w6 q2 {# l3 ?
      continue;. O  z2 u* w$ [7 l7 F% c
     if( g_pPlayer->IsUsing( pItemElem ) )
  j8 ]; g+ i* u/ |% i( b      continue;
# Z( n5 |# o7 l4 a     if( pItemElem->IsUndestructable() == TRUE )* m) s/ e; Q  W
     {
% n6 n/ C' |: n) n      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, n3 c! X# _/ E) B$ C      continue;- J2 M/ }; \. m# W4 G
     }3 G# ~$ t% l2 K# Z% b
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( G5 p9 t/ Y8 A: W7 f$ {
    }
. V" A" z5 y+ m7 F    break;4 n; [1 K" b0 U& a3 e: f
   }
% e$ s$ U. T2 b' j  case 1:
7 Z7 L7 [: n1 b   {
  Y& r/ u5 P2 B" {* U1 I    //整理背包
) T1 L# P( d5 b; {    //////////////////////////////////////////////////////////////////////////
. t3 q3 s0 `( K8 h4 l    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ W+ G$ J0 U( ~. ~
    //////////////////////////////////////////////////////////////////////////
1 w' P, w: {8 |1 E! X    /////////////////////////////////////////////////////////////////////////// {/ F" l- N: R0 C% x$ U
    CInventorySort* pInvSort = new CInventorySort;
' e" W2 {+ N/ s: t    vector <sItem> vItem;
, `+ N2 j! P* {. W+ l/ e6 G    vItem.resize(MAX_INVENTORY);//初始化大小
! X8 N& m* U; B8 o0 g1 u     //////////////////////////////////////////////////////////////////////////
8 T0 p0 ^+ s0 P" x     //填充数据
) _% q( Z, H, F1 y. o/ P1 y     for (int i=0;i<MAX_INVENTORY;i++)9 Y" T7 s( F+ H7 A
     {
  Y4 E4 P& C7 \: r* j      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, F) J8 h7 V/ l' M
      if (!pItemElem)
- v9 X8 a' d* H% [& q% p- N" P      {: ?! f% `  p7 L$ H
       vItem.dwKind2 = 0xffffffff;/ c3 R" t0 ]0 |: Q
       vItem.dwItemId = 0xffffffff;, B0 @8 M7 ^3 F4 X) U/ q: V
       vItem.nIndex = i;* z! F2 w# D3 ^# G  b4 C* ?
      }else {
0 z7 }$ L5 R. m+ @       ItemProp* pProp = pItemElem->GetProp();# ]8 z: o0 H- n% T; n1 F0 I
       vItem.dwKind2 = pProp->dwItemKind2;  B# O0 o0 @& m9 j2 L$ \- P7 h
       vItem.dwItemId = pItemElem->m_dwItemId;
! N; q% q8 F3 v. ^7 O: @1 E       vItem.nIndex = i;+ L5 x: W) h) v4 |. ^
      }4 N, y' R% J0 y
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 H0 k$ L1 A9 \* s' a( O
     }$ T2 l3 O: ?# X) _1 |0 J  v
     //////////////////////////////////////////////////////////////////////////# \* z: ~8 P1 ^+ _2 [
     sort(vItem.begin(),vItem.end());//排序- V8 l  }' w2 U7 m$ d
     //////////////////////////////////////////////////////////////////////////) j/ c9 _+ ]3 V0 K; C
     //交换! `% f5 K" k# P! Q& h2 ~* B7 u
     for (size_t i=0;i<vItem.size();i++)
' g! K. h$ Q; f" E$ K     {. I: T+ s. C6 P' H
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( P0 G* K. |! L& W! m0 K
      pInvSort->Add(vItem.nIndex);% n6 f: ~9 t; S" v" K- Y# o3 T2 m# j& d
     }0 b# N* q0 Y9 D( ?
     BYTE nDestPos = 0;
: L+ U1 n2 N# [5 z- l     for (int i=0;i<MAX_INVENTORY;i++)) o5 h. i+ i6 N6 l5 K
     {
0 v% s* W3 U! `      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 l3 @& n; K6 S  y# }& M% b' V5 ]3 {      if (pItemElem)
  v6 H8 N" s" r5 ?      {# c! Y! N& _1 A/ j6 E
       if (IsUsingItem(pItemElem))5 i* u- w0 l+ R3 k
       {
( G, p2 e3 {$ t& W        //这个位置无法放
8 C& z- c) k/ Q* C        nDestPos++;
$ w, Q: L6 E6 G9 u       }) x/ k, _6 b: p% ^, G3 {
      }+ C8 f! \" }) i2 H  m! v( a' D7 H
      BYTE nSrc = pInvSort->GetItemSrc(i);
- E4 c+ ^2 s" a+ T      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, A) o$ ]1 g6 \      if (pItemElem)3 H9 Z% d5 _% Y3 ?8 R# ~( @
      {1 J9 S+ E  Z2 s
       if (IsUsingItem(pItemElem))- ]/ J7 u2 F7 s% _: w
       {
9 T0 P& p5 G( X% `/ y6 z        //这个道具无法移动,跳过/ t/ a; V1 G) g7 ?* _2 A3 `3 M. j
        continue;1 x* M$ T% R$ u! o- s
       }% {4 |) E7 f' |
      }else{! R4 K6 u- |8 {5 a; M) \) s8 h8 ~
       //空位置 不用动, q' ?2 ]* Y5 A
       continue;" E3 W2 @1 t* F% |1 V3 n9 D
      }
9 r! A' |$ m* _5 v" [2 l2 u      //////////////////////////////////////////////////////////////////////////, w! S1 j3 w  Y6 @2 _
      //开始移动$ g/ h# i" T1 h# T' ^3 s
      if (nSrc == nDestPos)" u0 T! Y+ d' n9 O  @* G
      {
: q* Y6 w4 D/ }9 [       //原地不动
$ f7 v) r- P2 R% F( n& [       nDestPos++;
1 _, J9 o4 |8 c       continue;. k' w2 _4 ?2 U/ W9 z* y3 G- x
      }- _& l+ h1 e0 K4 F3 ^. H/ r
      pInvSort->MoveItem(i,nDestPos);
* ^; W8 n' T9 V: V8 ]      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 l% d* ^4 _2 i' J  y& F) |      Sleep(5);, K* h2 k/ f" h' v+ ]" ]
      //Error("移动 - %d->%d",nSrc,nDestPos);
1 D8 x3 j- X# \9 J# ?      nDestPos++;
7 j7 o/ l& `' \     }$ k$ p: N) i  }, O
     //取第一个元素的信息
% C& ?; s1 }6 U- p     /*  w: S- c6 p3 p9 N! r; G
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( F* t+ M6 S4 @" L4 d: E
     {3 x& d/ e0 |2 \& Z& v  l+ h
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 d  D$ S3 O) ]# L& o
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ x- G# z6 k3 {
     }
( R6 g1 I" |  M. Z& ~     */
2 R' b: s. [. W$ e. ]/ ^6 L0 V5 s4 z    //////////////////////////////////////////////////////////////////////////
- Y. H6 j/ `3 N: D( [) `$ U4 Z    break;+ N6 @4 V+ M( F! X
   }
! u% G2 d- g5 J8 L$ u! _  } ( A. v- o& s: J$ |7 `" c2 i; a$ n3 N
}/ t/ n9 f9 U% U; _. v  g
m_wndMenu.SetVisible(FALSE);7 A4 W; Q; a( I
0 y, B- J, r# U" d% m! d5 U
--------------------------------------------------------------------------------------------------------
4 E" I9 U4 ~! \( C9 x9 C搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! D$ t- {+ E0 i. {- ?{
# c+ T. n- y- f8 ?" J; N7 b8 H5 pBaseMouseCursor();9 {9 `  _/ t) X+ m" P- k
}7 l# x, \( r( I3 ?
在其下添加:. k% n+ n: x- L- s  F5 X5 g  T( M
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
1 C% k% ^" ^2 Z& f0 w. m  Q7 G0 C{
( s2 v# V/ c4 W+ b1 M% r  W0 C( @0 Cm_wndMenu.DeleteAllMenu();
) ^7 M' q4 w+ \m_wndMenu.CreateMenu(this);
2 u" [# L. e$ Q$ a/ H' X- q5 \. h7 ^m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
4 G$ O# ~' J7 ^8 L) l
" K$ h* ?/ S) V3 E: M5 [& {( Z; k# sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( L# ~4 S6 J+ w5 N9 ]{
) D- n2 `' W, S% n  //P以上级别才可以删除所有道具3 f+ H' \1 J5 l% g% C3 \6 @! C
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 J$ d6 H, ~  ~: A
}0 p6 \# w% m; `4 U4 ]7 B# B* a* O
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ {+ D/ E* t# A0 Km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* O5 }$ z4 [9 j3 d! }7 m" U9 Vm_wndMenu.SetFocus();
7 S# q/ ~/ C8 i7 w: }" M+ Q}2 o9 J% t6 b* A# K
------------------------------------------------------------------------------------------------------------1 V1 |- ^9 P/ ]/ I5 q
*************************( X& j3 K7 q  D; n. g
WndField.h文件
6 q# E9 o! L$ S4 J9 P6 ~*************************
- |0 u+ t6 r( D9 i; y搜索:BOOL m_bReport;
. s# \) k0 d* W' n$ m其后添加:
. W5 b+ e$ S( L+ V3 T1 \. vCWndMenu m_wndMenu;0 w6 b4 }  Q3 Q' `; B$ }
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. l" A, n9 S- T# P& c
其后添加:
8 c( t1 q& s7 j# K) h8 X5 z. E! ]  Tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
( L/ S3 Q; W3 S  u" z; M0 G' M0 m+ L, [
4 U, r. s2 _6 p/ M

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-22 17:55 , Processed in 0.067709 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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