飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
1 \9 I' d3 U8 v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )  t0 O- y( g" x5 Y
. ~3 F. r0 b6 @4 u8 c
struct sItem$ B0 c: W+ H& O# l$ C  G  T
{
6 A! I) [: g) v( @% ]( CDWORD dwId;
8 L4 R  p/ M* K' M- p/ K" QDWORD dwKind2;
+ O/ |' H, `/ F5 T2 ZDWORD dwItemId;
& s! Q$ v! h7 B# i+ w" IBYTE nIndex;/ o# _/ m  t* ?( h
sItem(){
" v- Y& V6 r* X0 D' u  dwId = dwKind2 = dwItemId = nIndex = 0;; i% z' ?; R4 H' O+ z( F% ]* \  i
}% k8 j: s/ v$ L. j5 s6 ^
bool operator < (const sItem p2)
' S( X0 Q* |; x# g8 V, O+ J4 Z- y{
3 y- }$ g' T. K  if (dwKind2 == p2.dwKind2)
) e3 _, ]* h) Q9 q- K  {. y# ?( s5 J* ?0 r7 P4 ^+ e" g: u7 F
   return dwItemId < p2.dwItemId;9 F3 v! ?: c; r3 I: U3 |) D
  }else{  [# B  W$ t- `0 ~# }
   return dwKind2 < p2.dwKind2;; n) W2 w5 X% q7 g/ Y
  }
! _0 M4 b5 }( J5 b4 ?. ?}' T7 P; i# M! s9 M5 a
};) N( a- D1 w! U' ]1 M
class CInventorySort
( g5 J# w& X/ a' Z! `  K{
2 z  b+ S' {6 Vpublic:
% e) D- E' @9 O! NCInventorySort(); X1 Y9 Q4 r& E6 s% \: s
{6 _  }6 e8 I2 }. m5 M/ K
  m_dwPos = 0;, f- u; W5 d! T$ N! x
}+ U7 K- [1 s# E  D, q! K9 @
~CInventorySort(){}
, {9 Y. X) C+ H. N5 G* Yprivate:
9 i) I% X3 |# @# K% v  ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 f  s% g0 m: y$ |
DWORD m_dwPos;. g8 z9 f# A5 N2 n2 I, C$ U
public:' x) o, t4 M! g& C+ F3 U7 O6 Z: Q
void Add(BYTE nIndex)
, C: g: h( X% ?+ m2 g" M{& r3 d$ r. d) G; m5 m6 G2 V
  if (m_dwPos >= MAX_INVENTORY)
4 ~) P7 A8 y$ R) x0 A1 ~  {
: P6 Z; Y; J0 E- c   return;# }8 L, D( s& I0 F  t
  }' ?1 P7 D6 ?- w6 U
  m_Item[m_dwPos].nIndex = nIndex;, }2 T& g! X$ p2 b7 y- x
  m_Item[m_dwPos].dwId = m_dwPos;: v3 D2 A0 s0 e2 O/ U3 g! F) o
  m_dwPos++;
* A2 O% ]; R) N6 v}8 U8 k4 _0 J6 b8 K, \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& ~! |5 O2 c2 G% N: q* @
{- {# K; h9 K7 a5 y2 I
  for (int i=0;i<MAX_INVENTORY;i++)
" J8 l) f/ C- n2 ?. M; v4 a  {
# J2 p; p$ u, i+ {3 O0 O. S7 [   if (m_Item.dwId == dwId)
' s- s( _9 c6 t( t   {
4 h9 |# O. D7 j1 P$ E    return m_Item.nIndex;5 x8 m7 p/ `; @
   }7 N& @" ?  i  F
  }
' b1 b) @  R5 h. ], C  return 255;: ^% E! l6 a4 c/ {* D
}
! n% U  ~5 j5 _0 y- ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% D% |9 U; z( K8 K- A8 Z* {
{# t  H3 d& }; w# S: ]3 n; W" s
  BYTE nTmp = 0;, O6 h  X; x4 O5 [' K) y5 R& [
  bool bDest = false,bSrc = false;. j( `# w) X! k# i. [7 a
  for (int i=0;i<MAX_INVENTORY;i++)
7 c) M  g) w) {4 h% |9 Z  {
' _6 v  [% O% ^& o5 B  s2 E   if (dwSrcId == m_Item.dwId)
  \+ u: r5 ~& D   {
. _3 s# G2 |+ e: E+ U$ f. F    //id相等 则 改变对应的dest和src. H& y$ t0 Z! B, D4 i9 m( T; c
    nTmp = m_Item.nIndex;
8 h3 J) O# {; S9 n    m_Item.nIndex = dest;; [! z& m& n+ r3 p- L# @8 S5 @
   }
; j6 y6 d5 P& z  }
8 ]0 R( V+ N, H' t  //临时数据保存完毕,交换开始
$ g/ Z% W% p, q8 A* \  [8 Q- Y  for (int i=0;i<MAX_INVENTORY;i++)
- F  s4 N5 R2 m  {
& C; d+ ]' c, m" w6 D   if (dest == m_Item.nIndex)
( _9 e# S/ c: h4 P! i0 u) l/ ]/ c   {& B& f( B+ h+ w8 C8 w/ j. U& k: U
    //id相等 则 改变对应的dest和src+ A9 Q/ B; V, s* h0 ?: n+ z5 o
    m_Item.nIndex = nTmp;
3 a2 d8 r& q. N! Z* K" x6 G& u   }5 O/ n" R( y0 ^0 S! X
  }
  G6 t' E2 q8 i/ D8 a}
" G. D3 o$ L( B0 z};
; \# v& I+ ?4 Q, \/ R4 Z-------------------------------------------------------------------------
8 D) y9 X  q* {. D% g2 S' Q' H依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* |7 ?- N% Y4 f! W% {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, w9 B4 X$ B0 z4 B, P* C5 e' z7 I
紧靠其上添加:
! H- J& S) F3 O7 Kif( pWndBase == &m_wndMenu )7 T) R$ X! t0 L6 z$ Y! Y
{1 A$ ?- C$ J, _7 K0 K
  switch( nID )
# p7 ^6 K  T+ S& g# C0 T% G, H* T  {; x8 [- j4 e- z
  case 2:; g2 t) T7 T2 V5 |' {
   {
: Y: e  t0 u# B* m( m3 A8 ]( ~, W2 C    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% `+ R5 F) n4 `, C* O$ ^    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: A2 `  V, n' X4 u+ {    {
& E5 U& m0 ^( u& i! h8 N# a0 J1 Z     break;3 D: O$ C0 Z  q) e9 z: l* V# v
    }% H( ]& @) s1 L# H: R
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- Y# o, o) y9 f4 B" W7 r    {
. ?0 Q$ j* _. V# z     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: c6 h& q5 `6 g5 d  l! O     if( !pItemElem )0 e- n+ R2 }3 y
      continue;
6 D( m; ~( T# m2 }1 E/ j     if(pItemElem->GetExtra() > 0)" p  [+ ?9 a3 `8 V
      continue;
! Q3 j& B. N- l) s     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. d' S" b) ~, \( k5 U0 H% w4 s0 [, K% O2 |      continue;
2 s% C" G: n' S6 e' {     if( g_pPlayer->IsUsing( pItemElem ) )
% J+ W% M. u, E* M) |1 i      continue;
& {: G$ H- |+ H7 R& L. B( b) R$ {     if( pItemElem->IsUndestructable() == TRUE )
# e( |0 H/ b3 q4 |( @% `     {
& D+ C! r6 c% M: }8 W' X" b      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 I# w, t8 N" a# k% s, ?8 T      continue;
* B8 y/ P- b& h$ S: {! Z  u     }; w4 Y  _, b: O0 G0 M0 J8 B
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 s2 E2 i+ E, X$ D    }
8 d- ]% c  @2 \# @: u$ c    break;
  T' e6 a- p" _7 u   }1 V8 H2 I6 Y: m
  case 1:) P* Q7 Q- K" B! i6 i. c0 y1 Y
   {0 M* V5 g' t2 s1 \
    //整理背包
( k; G- I) s! A: T1 r8 d    //////////////////////////////////////////////////////////////////////////! M+ H1 `* H" Y9 h- c  H$ S% m
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 N8 H& }9 ~9 Q+ L( U
    //////////////////////////////////////////////////////////////////////////8 U# E, G3 D* s( g. `4 d& O( C
    //////////////////////////////////////////////////////////////////////////
1 F/ ~& [- _! }    CInventorySort* pInvSort = new CInventorySort;
$ a9 a% u/ y2 x) |    vector <sItem> vItem;
) M" ]1 S, |$ D; v0 V( k1 X    vItem.resize(MAX_INVENTORY);//初始化大小3 J- y' ]% P6 R* K
     //////////////////////////////////////////////////////////////////////////
% D* p9 j( J8 P9 h     //填充数据, b. M) j( \6 |+ C- n( j( N/ B4 L
     for (int i=0;i<MAX_INVENTORY;i++)
% O. R3 b: n" Q+ z3 c     {
6 N' r$ v! l" E* y5 L, T1 g. u/ W. c      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" A" l1 d$ j5 x1 W      if (!pItemElem)7 M! j) g) f: B, r9 ]4 U7 ?
      {
) @4 B1 |8 |& U       vItem.dwKind2 = 0xffffffff;5 I! V5 t  L# }$ Q) b+ e. ~& g) ~
       vItem.dwItemId = 0xffffffff;
% t0 J) q. r/ s5 S9 F. @! ?3 J& N       vItem.nIndex = i;, s" r  H" z7 F
      }else {/ h4 _* \5 _4 K" h
       ItemProp* pProp = pItemElem->GetProp();
% z' C7 T8 u; ^/ E$ H3 U4 b       vItem.dwKind2 = pProp->dwItemKind2;
6 f! {% V/ `! |+ N) U       vItem.dwItemId = pItemElem->m_dwItemId;
; [* ]; s8 L( \9 l* r' h       vItem.nIndex = i;8 m' u; A: p' b5 b0 f! B' z
      }! r. e/ i7 W$ s6 b
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 K- t( |& z5 E; F1 u
     }
1 p4 ^& G: N& ]2 B2 k* I0 \, \- ~     //////////////////////////////////////////////////////////////////////////
8 o# b% {- @& |% i% x/ v+ ~' ~     sort(vItem.begin(),vItem.end());//排序' y2 B1 p* f5 L  N4 K5 ~
     //////////////////////////////////////////////////////////////////////////
& Y. R" @& r6 [! }# e     //交换
5 M9 A- H* C( g( f3 @6 S, A6 R     for (size_t i=0;i<vItem.size();i++)
) O9 b- `) r& v- J7 A     {& z8 ^$ p. Y, e' }- a: s
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" s* E) }% b4 N8 p. p      pInvSort->Add(vItem.nIndex);
7 q/ t4 H! W2 F$ W* L% F. K     }
& R$ W) N, K: P! W0 A     BYTE nDestPos = 0;
/ _7 O8 N% t, p5 W% W$ D* n     for (int i=0;i<MAX_INVENTORY;i++)
5 u% s( P  K  O, ^6 @* {* a     {
9 y2 i- O  K& w" N4 Q      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: A$ d' e9 |& {# A6 z& F      if (pItemElem)
* t3 H! l; m8 |      {
7 \7 Z0 c7 C. [0 U7 E+ n       if (IsUsingItem(pItemElem))
& r0 K+ O5 ?6 C" I3 d       {) L  ]$ N: M( |8 ]
        //这个位置无法放0 B% X3 n; X% g  H$ }
        nDestPos++;1 S1 C4 [8 y/ b+ n1 f9 n
       }
' q5 Q* }7 f# x; Y1 l. g      }
& ?( O+ w. j. T      BYTE nSrc = pInvSort->GetItemSrc(i);
4 b$ {8 S( g" e  T9 V      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 f: \2 D" U6 w' B8 y' t      if (pItemElem)4 n/ u6 I2 T1 l6 M4 ~
      {
- N7 O9 F  M8 W" |       if (IsUsingItem(pItemElem))3 p: x2 n9 C6 l9 R# |/ b$ n
       {
5 E' U: X+ c/ A( y5 h        //这个道具无法移动,跳过
  H  w( F1 H" j4 m# U7 |; n" k        continue;
2 u5 \- A! t( G       }
- m* q& e2 Z0 O" D' C! F      }else{! @; W0 N7 h7 k
       //空位置 不用动
( }3 F# Z& P  A; e" H4 A       continue;
/ G2 R4 r' \# V( f      }
9 W% B1 K, P2 g/ q. i/ m      //////////////////////////////////////////////////////////////////////////% v% D/ I9 W) }5 W* ^8 g
      //开始移动
7 V5 w. u0 A) T* Y' @. ?3 \      if (nSrc == nDestPos)/ a2 T3 x* F# p& p4 V- r; ~- \% }
      {
. |0 f7 H$ H- H4 i; f7 O9 h3 O       //原地不动7 i! j1 Y) T% T! R1 V# l
       nDestPos++;
- K4 ]" R; S+ ?% I0 W       continue;
! L1 L# C: O8 t; L* ~6 j      }
" t% k1 U- [! V1 q4 X7 z4 u- @( F- U      pInvSort->MoveItem(i,nDestPos);5 p( ~" J3 n; K- \6 Q& ]6 k, k7 l) v
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 f, o; |; X/ @, T      Sleep(5);
6 h3 k3 Z: `/ h5 j, Z2 W      //Error("移动 - %d->%d",nSrc,nDestPos);# F( Y: D, P" ~
      nDestPos++;
6 Q* u$ }: Z3 e( G     }
4 A) I4 A* }- I1 k0 e     //取第一个元素的信息1 `2 s) Q$ F% A- B9 {: g
     /*
1 M& I, U% v) U' t" ^& w     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- ]/ ^8 z2 {6 ^9 m( V0 K( O. o     {' s0 @& n) C) Z
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 F! Y! ?! e7 f  |
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' k2 r# E' e+ o- ?1 u7 V
     }* Z, |9 G0 j* F6 |8 V
     */
; K+ m% \" C& q% G    //////////////////////////////////////////////////////////////////////////
4 B+ R7 C: s& ~1 w  s& e8 @! u, d    break;; z4 _1 U0 P: |# I
   }
7 Q5 m8 b: a! Y* A) k( c9 w% A  }
$ h$ v! ^" b8 |  |3 q2 [, R}
. z0 T" V& F/ u3 [' O5 t& q; i0 z6 jm_wndMenu.SetVisible(FALSE);
* j4 j& b; v' Z$ l" |; `
% P9 |9 G% ~! V--------------------------------------------------------------------------------------------------------
' N0 G1 l! ?# D1 ^! G1 O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! U1 E, {2 ^% t5 h, `7 r0 t
{" W' t9 F' X3 n6 e+ o
BaseMouseCursor();
" X/ N8 ?3 f% ]& j6 _, z3 ?}
. Y: y4 F5 n8 G+ n  \5 n, D8 V在其下添加:& `; N/ c+ e) r4 _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. g% l* m# g, x{# B( I' T# @5 i/ e* Z% n, j
m_wndMenu.DeleteAllMenu();
2 A5 N6 p) u% E& [! am_wndMenu.CreateMenu(this);% e0 O/ _# `! ~5 s+ s9 \
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 w: F2 M: {, U. o' j

7 m; ~' \* w' |0 W2 ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). g! b- ~6 H8 {( S. Z. w* _  A: \
{" y, Y* _9 D' Y
  //P以上级别才可以删除所有道具
: j+ ^7 I, g7 A  M  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ x1 N4 X4 ]' B0 X6 u, H' ^
}
( l# B4 \' f" a$ X" {* jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, c0 }! b6 @- B/ k- `4 t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- N3 k* x4 C  V8 v
m_wndMenu.SetFocus();4 ]! _) @$ f! G' _
}
8 G" I3 b* A, K4 ?% \+ @: o# E------------------------------------------------------------------------------------------------------------1 a% T( D3 L+ f  L& r! U
*************************
9 q" T1 ?# @$ H6 PWndField.h文件
7 v! ]6 A% A* w4 J4 h*************************
( c: e2 V6 c& [! `, L搜索:BOOL m_bReport;
0 c" K( F$ }/ j: \5 l) K7 R! k2 n  C其后添加:; P' F/ U; a% n, t( ?  c: H- h3 @
CWndMenu m_wndMenu;! u2 a# q6 i% f9 c  _4 X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- R  z; j8 L8 J" A
其后添加:
  @- i, u% S. r9 }virtual void OnRButtonUp(UINT nFlags, CPoint point);
/ H: B' y- d0 d) `$ I: I: j; v) C+ x# u- f

, g% y/ g2 N/ k+ x$ K, a

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-12 11:57 , Processed in 0.067822 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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