飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件) ]0 u& M6 T2 D1 w( a9 b
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# E/ ^$ M( {6 L

- L1 e6 f# ]3 z2 P# }. Ustruct sItem  p& |0 V; D0 ?- ^, c# J- ^! V
{5 Q- ~; U4 B, S, T9 Z9 W- a5 ~0 F
DWORD dwId;
( g0 I% A9 X5 V7 _6 BDWORD dwKind2;( u$ m- q1 T' C% D7 F9 M6 G+ |
DWORD dwItemId;- B" M1 \& P) P, y6 h( w
BYTE nIndex;
7 X1 u* e* Y  {6 m9 L: Q" X! hsItem(){
3 h4 D  Y2 O  ~2 D  ^/ e. \/ K  dwId = dwKind2 = dwItemId = nIndex = 0;
6 w( [7 K7 x% t2 e$ q% H9 N, [}  R% a4 S3 n9 U
bool operator < (const sItem p2)
+ z" X2 u2 T% K1 y{% M, o4 Q( i0 J1 n) ~) {0 Y# C
  if (dwKind2 == p2.dwKind2)$ v) o% b) G: Y1 A
  {
& l/ C3 B! O$ `# ?/ F+ I   return dwItemId < p2.dwItemId;
; P/ r5 v* C9 W7 p  }else{9 r7 c4 V8 L9 [( R* @, L
   return dwKind2 < p2.dwKind2;
8 `/ [1 p% D- D* \% i  }0 O) ]# T, t. T
}$ g+ F: K4 k+ y5 _8 G# W& M+ x
};
' N6 \- X4 R' \8 Pclass CInventorySort
9 G+ z8 E7 D: J" x' A{
& I4 n# P3 G: j! ]public:
. W! c. [& ]' L+ l# i$ \- lCInventorySort()2 c( M+ M' F) A- y2 N5 \
{
2 R" e. B2 n7 G8 \2 g2 z  m_dwPos = 0;+ |- x* p5 [0 ^% a- ?
}7 g( G9 _% Y6 `  H6 P! W
~CInventorySort(){}
( L! p6 C4 `( _' E5 J+ l7 Qprivate:$ w3 J( K' G5 q& i% Z  L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ p9 R& t' U" p! L2 [0 j
DWORD m_dwPos;
% G: R% Q. ]5 u; upublic:
5 w2 |  Y  R7 {, _void Add(BYTE nIndex)* O0 u1 \& H6 \; S: a
{
# X! v) O8 ]& A4 i+ L% Y$ p5 w/ ?  if (m_dwPos >= MAX_INVENTORY)
4 F) b0 q2 u% @5 h( @. z  {. F( y% U8 @6 \& w
   return;. d1 n- q( N, W
  }  Z) Y1 Q* ]. a$ m
  m_Item[m_dwPos].nIndex = nIndex;# d" \1 A9 p9 @$ B2 [
  m_Item[m_dwPos].dwId = m_dwPos;
9 K  ?" ~, D  {9 S, o  m_dwPos++;$ q' F& G, H2 h/ p. W
}$ O* L/ \& l/ Y: w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ a0 _2 \2 p( ?5 ~3 p! m{5 g- h9 d( R# g7 s$ y( u
  for (int i=0;i<MAX_INVENTORY;i++)
4 d' n/ B! Z: j+ c/ `  {
5 Q- S, e) m: a+ A# x8 C. `4 s9 x# ~   if (m_Item.dwId == dwId)1 l' B2 h  e- X2 a4 K5 v4 ^
   {1 D* c4 S. e3 W" a
    return m_Item.nIndex;! W2 c8 e  ~/ _4 z+ c
   }( }1 r  w  d% S/ d5 W/ M+ `
  }. A$ H- C1 k% S
  return 255;
% W8 C5 E/ E  d2 F0 u}
3 r3 \: z+ x: Q5 d* Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置. R% r# t4 T4 D1 N& j) w: C: e3 [
{2 `, `/ F' i" p5 k
  BYTE nTmp = 0;
/ ]4 @# p" E9 D0 w' O& T  bool bDest = false,bSrc = false;
. ^5 _9 }0 K1 a9 F8 e  for (int i=0;i<MAX_INVENTORY;i++)) F. u: C5 N! h( l5 X
  {9 z- [* ^  Q2 _9 h6 @+ O+ l
   if (dwSrcId == m_Item.dwId)0 o1 t* z: h2 l! l- ]5 Y, q& }
   {3 W* Y# n- Y& _
    //id相等 则 改变对应的dest和src
2 T& |( l' _& T2 n+ i% q    nTmp = m_Item.nIndex;
. b! S8 {3 K8 t3 Z9 x9 W    m_Item.nIndex = dest;. ]: B: h" c3 ]* W" M+ u
   }
7 M/ v0 {) C1 w" j* e  }) z" ~, t0 ]  d! f
  //临时数据保存完毕,交换开始
7 A& b- V3 T  |* R  for (int i=0;i<MAX_INVENTORY;i++)3 X# p2 g+ u5 C8 c/ m5 _7 _3 z" F
  {
, j: d7 `9 W+ M5 L1 i) B   if (dest == m_Item.nIndex)
- J& g! f# d; l4 Z2 C   {
) Y% X# q' [, O! }    //id相等 则 改变对应的dest和src
- ^/ ?4 M% ?5 |( O9 G2 r8 x1 `    m_Item.nIndex = nTmp;
: M0 C) v. ?" m! W; S   }7 [9 R+ O" G0 x7 s
  }
% ]$ Q# ^4 m9 [1 R5 F: _4 W}
; {3 o& `# T; E3 y3 O% t0 M0 i7 q};
* K4 M  c% a* x* K  |/ C2 q) Q-------------------------------------------------------------------------
9 w, U) f/ b" r& |依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
1 Y5 Z% t" V3 b* c! W, c+ d+ ?2 D2 n搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 x# p. s% b& K/ }5 Q# w7 N, @4 d
紧靠其上添加:0 ]* w# k% [8 ?8 L
if( pWndBase == &m_wndMenu ); m, A$ W3 _0 H# V2 _( x; w
{# D8 o! N- o! N* H1 f% N
  switch( nID )
0 q# G( A' U& S/ X  {
2 R) l1 c  _1 g8 J  case 2:' g+ y! Q! W8 O0 E! F# H2 w  ?
   {$ |; P/ M( ~' h1 q
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 S0 a! J2 X7 |+ J6 d0 o) @
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& h' q1 A. r% `4 F5 d5 \6 U    {
. m" E' W# q( L% M     break;
7 l; a& {0 Y  M0 J( l* E# @    }( F: D* h  `( d2 b
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( z7 `! |  Z) H3 u6 ?* w
    {1 _. r9 F! `' M2 L' H9 ]
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 Q$ b/ t. {7 b) b     if( !pItemElem )" J+ F3 e& p/ {  n  h( @
      continue;
* o: ~; @) i3 ?0 X, [     if(pItemElem->GetExtra() > 0)
: E0 v5 x: h& L( b      continue;) n' c$ k2 S. G4 o  C9 ]% [
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! {4 W' \4 @3 v' |# S+ K3 y9 w  K      continue;
+ n. [4 g1 f5 E$ R- c# h# e  v     if( g_pPlayer->IsUsing( pItemElem ) )
; J' }1 L; p, H1 Z      continue;
* K1 h4 U, S. n  W9 w5 d     if( pItemElem->IsUndestructable() == TRUE )7 h2 i" \. Y% C* [/ ?
     {  s: A3 ]% v0 V$ @7 \
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" h: A- E( L+ l      continue;( F* t3 F% T: d6 {; m2 ~5 X6 ^
     }5 F6 D, \  S# T' }" ^' I
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- x) F+ e$ K' Y: z2 L9 v    }
% v8 [/ c  U! \  f7 P    break;
8 G: [3 N; V: \9 o- C   }
' O8 Z! k! w# y1 m  case 1:' u9 C$ Z# o% q: V/ D- i
   {# Q# J1 S, @+ I. e
    //整理背包
, v. K6 i4 ^) I1 [    //////////////////////////////////////////////////////////////////////////: @5 ~  [. D, z( A
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) F: H2 f% Z0 E' [
    //////////////////////////////////////////////////////////////////////////
0 a2 B. e/ @- P0 a0 t" e    //////////////////////////////////////////////////////////////////////////' f% k" @4 F& Y$ Q( T( \6 K- N
    CInventorySort* pInvSort = new CInventorySort;
7 q9 o+ |+ f( l! A    vector <sItem> vItem;
  L% J: N/ o" r    vItem.resize(MAX_INVENTORY);//初始化大小
0 M, V! j8 {2 G: D+ e& R! j$ j     //////////////////////////////////////////////////////////////////////////0 d' w' I6 B0 s+ }- {- |0 w
     //填充数据
- j8 E% G5 l) x- G: Z     for (int i=0;i<MAX_INVENTORY;i++)
; ^% x' f* g0 x  b- f/ N& m     {, K0 y  V+ T# g) R2 i! w# K
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) [; P! z6 ]# e
      if (!pItemElem)7 M$ ?& ]2 p3 m5 O: s
      {
1 Y* a2 U* e* y* h: W- V0 j       vItem.dwKind2 = 0xffffffff;
* D( F* J7 {/ w; F       vItem.dwItemId = 0xffffffff;6 L. y& B, j$ t& ]6 ?
       vItem.nIndex = i;
; x( W: t$ Z6 J; w$ J' b      }else {
9 I2 d- n' k# q. U$ L5 R       ItemProp* pProp = pItemElem->GetProp();, t) @3 o" W7 E
       vItem.dwKind2 = pProp->dwItemKind2;
: K- F% m9 R5 r2 e3 W       vItem.dwItemId = pItemElem->m_dwItemId;
1 U* x6 M; u( n# v+ Q) r       vItem.nIndex = i;. M$ p( _7 c/ y5 E8 h/ M" M
      }" J' \1 `, N5 R9 J
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) d! M6 d2 Y1 L. N6 L9 t
     }3 n+ |( j! u; z' |$ H! w
     //////////////////////////////////////////////////////////////////////////
3 y, k! y- n, {     sort(vItem.begin(),vItem.end());//排序" K3 p; M) L, N- Z7 ~& m4 ?: p
     //////////////////////////////////////////////////////////////////////////
/ U1 C7 y* R# V5 W* c  h! E  o     //交换! L! w0 ]" g3 P7 O; {" b
     for (size_t i=0;i<vItem.size();i++). u2 T( v9 l4 ~% D% w
     {3 X5 `" S" S/ a# Q/ C3 ?! @, D3 C
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' A! m% V( `) a( @6 b! C      pInvSort->Add(vItem.nIndex);
2 @9 |' k' F' K5 p* a4 I     }8 r) p4 l2 a# j9 \# C
     BYTE nDestPos = 0;
* N% U6 u% O/ G& N     for (int i=0;i<MAX_INVENTORY;i++)
2 v5 o" U$ z& o8 h9 B, H) u     {0 J! M* I: q! y* T7 R! i
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! e6 p' X# Q8 b# _5 J& O6 B
      if (pItemElem)
. w" k0 ^+ p! k) {      {
* A, G! j5 r! X$ l* [1 |$ Z       if (IsUsingItem(pItemElem))4 q" N& o0 Z! W: X  t
       {1 T' M  \  H: y, ~
        //这个位置无法放, r- h2 R7 Q# V
        nDestPos++;* `& R9 B" Z! j. [( k5 D
       }
9 f1 a' C( n1 W, \: J/ k' j      }
! B* {' w$ z' M- [! z$ m# [      BYTE nSrc = pInvSort->GetItemSrc(i);
; s3 O  j' K) P/ Z* a3 i      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% q, y  `% C1 I( g4 v      if (pItemElem)
2 A$ h$ n) z) x8 n2 ?3 K      {
1 ?" q* e2 c3 H9 E, ~: B& z! m       if (IsUsingItem(pItemElem))6 u5 Y# b9 [4 V: B7 a
       {
: }6 k& y& B4 Y& r0 ]' I        //这个道具无法移动,跳过* s% y8 i7 ^! k) b- P
        continue;
) p3 l2 w& |& J: L7 _: [       }: A  d- h  V4 V
      }else{
+ z; n) i: E; w       //空位置 不用动
: W6 L" T5 n) M' {$ b% i" W, U- T       continue;
7 O  s* ]9 s2 n% c! J      }
2 H/ ?  R& \: c. R( S5 r9 [      //////////////////////////////////////////////////////////////////////////  ^, s/ H, @" i
      //开始移动
" u2 h3 o& F3 @$ a' K. L      if (nSrc == nDestPos)5 t- r' q/ ~$ |( d- ^$ V- z! J3 `; i
      {& \6 f; n. o$ p5 K& [- ^
       //原地不动6 `/ w9 O7 O# E8 \
       nDestPos++;. X+ T6 F8 h) W( _
       continue;& Z& y/ x( e( M* y( t+ g
      }
6 G6 e- Z/ r8 p0 H      pInvSort->MoveItem(i,nDestPos);
& L3 N' O9 @3 e; P      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( _  v. K; y9 t; K- _; r      Sleep(5);
: d9 E$ j7 C- k; W8 {( }2 W; k      //Error("移动 - %d->%d",nSrc,nDestPos);" L6 w4 v- X8 e: B2 n- S- [  P* P7 P$ t
      nDestPos++;# w$ }2 i2 c$ _/ m& p' t7 _4 W
     }  H& u5 Z5 s7 a5 M% \' y+ _
     //取第一个元素的信息
5 Q' u# A( a' L     /*
; C8 Y) p/ e9 w% U; i; T     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
  x6 X5 R) C% D( i, I# H     {% k6 ~" ?2 T! \0 Y0 r' k( r2 V. N
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 W' `( U4 r- J9 _- t) P+ h
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
  q& V1 b/ i2 o. I8 K     }
0 n: H* s9 r- ?) v     */# X) B7 h2 ]+ l& z5 E9 e
    //////////////////////////////////////////////////////////////////////////
4 ~% D( W6 A. ~6 @! o    break;
7 V+ l3 O. d& |* _$ ?9 o0 ?   }& u# Y) Y  w" h0 ?. {" ]
  }
% d- ]* E& ~) U}% o0 @. g/ `3 `% j6 i
m_wndMenu.SetVisible(FALSE);
) ]( p: r9 l& w0 J8 {! P
7 T1 W3 H0 Z5 m: u7 v& f- E$ M9 o; H/ j--------------------------------------------------------------------------------------------------------
  k$ r9 |( F6 Y搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 p7 ]; L) O# l6 e8 v6 j5 L2 U
{
4 ~; s8 k2 Q' R6 j5 c5 X1 k5 ^BaseMouseCursor();5 b" i' c% }! k$ K3 ]
}, R1 h) c, h0 m, u3 Z
在其下添加:
3 j% ^9 j0 y* g3 Yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* J3 s* F6 _$ ^9 z
{0 N, y% Y9 R- P" i" ^* c
m_wndMenu.DeleteAllMenu();  g" A! g+ A& q
m_wndMenu.CreateMenu(this);
! s* p+ _3 `( y% em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: K& r1 Q) C3 A0 u, Q+ p5 c, @

8 ~- q2 \- }2 D- X6 Jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), H( s7 V4 y5 U* P# ^5 q
{1 r& J% e1 A3 n/ Y7 f. z
  //P以上级别才可以删除所有道具
1 o2 p) e. K: Q2 X/ _. `0 l# c  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' \1 J" r3 R9 ~* ~
}
2 c) `( X1 g$ C$ l- @/ O# @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( o: g- |/ \& j& j
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 x  h) G0 L6 j. e% jm_wndMenu.SetFocus();
- H& `6 W7 s5 p; }, [}* ^  }* g  U: s3 h/ R1 T: N
------------------------------------------------------------------------------------------------------------& D+ t4 m1 s( s/ ]) d& C% q2 z
*************************, ]6 Q( _2 q) ?: U8 \( Q7 F
WndField.h文件8 G3 b8 {2 S. [2 I, A( s
*************************
1 j& q# `( I- J搜索:BOOL m_bReport;( o* S. G& r; g7 \( @
其后添加:; C, v+ `6 ?/ O3 z. T
CWndMenu m_wndMenu;# i& O/ q7 [: K0 G
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! q* W! R/ h- Y& W: i; _其后添加:) A4 c4 r: o' y; J
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 M) _  T+ B( d  y7 o$ |, t2 G8 Q: W2 B# R& G

5 l8 n+ q$ s1 G" U1 H" i

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 23:02 , Processed in 0.065709 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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