飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
0 `0 M! S& h$ I* N搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 K2 O  V4 p! i3 E; h0 V$ d- A& j( R6 v3 v$ j' X
struct sItem& f! W  p# A2 g/ D4 S( g
{; Q$ S9 j& m7 c" [6 \* T
DWORD dwId;
5 s4 f, h: a& I! x& [. Y/ d% tDWORD dwKind2;
3 x3 l. Z" H3 i( _+ q  n4 r* dDWORD dwItemId;
4 \" o( L6 ^: cBYTE nIndex;- B4 \: D* u: `0 a+ |+ s
sItem(){
4 I2 [) I3 C0 x; _; g  dwId = dwKind2 = dwItemId = nIndex = 0;' K* C) {9 v- B# u
}
6 W% `% g& S/ X& dbool operator < (const sItem p2)3 J) c1 o+ p2 b  `4 z* b
{
3 I9 \( p. ]5 ]5 P* ?0 a7 N  if (dwKind2 == p2.dwKind2)8 J- }/ d5 [% q* S5 g6 a5 c- W  X
  {5 _2 |7 {) A( U3 v  I
   return dwItemId < p2.dwItemId;3 ]  A0 `. R" [/ o! y# c! E' m6 g
  }else{
: A7 C2 C. F* C! R2 f5 \   return dwKind2 < p2.dwKind2;
3 x: |8 t" I/ W3 F  }# Y; R8 z4 y  h1 ?8 ~
}
4 \* z7 n$ \* H+ `- |, I6 C};
4 F6 t0 z; {5 s% o1 `class CInventorySort
& q/ L# p" {6 O6 m5 [6 F{
4 J4 G0 w# e8 W1 K- L9 m+ @, |public:, |7 Z3 b; f, K4 H
CInventorySort()0 I$ i- X( M' ~/ Q* y' I4 I
{4 A) f5 F) s% {( @$ n5 a2 e
  m_dwPos = 0;
7 E2 P: R: I1 Q- t! S' y}! R! {+ n& e1 S! P
~CInventorySort(){}
* T2 z; l  [- H' L$ |6 dprivate:
: A$ R$ g) v* J0 zsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 e' G' C' G; F$ Y9 Z9 E% H  ^
DWORD m_dwPos;* h' e8 y; J. T& V  U
public:. b5 {$ m; r( O+ {" I9 q- {1 F
void Add(BYTE nIndex)* l* D/ t* Z& I( k8 |2 K$ j- }3 |
{4 K* ?, v' T) W" H1 e
  if (m_dwPos >= MAX_INVENTORY)
, l/ U5 j8 f: a7 {0 \7 A  {
: E+ p: ^2 D. M* W. M3 l: ?   return;
2 v, Y# C+ ^6 B4 K8 i; y/ j6 V  }& C; M1 u( ~6 ~- y2 K
  m_Item[m_dwPos].nIndex = nIndex;
! l  T% b4 S  ]% @( |4 B% P9 Z  m_Item[m_dwPos].dwId = m_dwPos;
  t9 F+ d' Y% b+ h" }% h  m_dwPos++;' K! q. C. R7 v/ M$ i' q
}3 d  c1 E: ?1 _8 ?$ Q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 ~* [" Z4 O. C3 b{  B4 R, O2 ?) @* Y. x2 D7 j
  for (int i=0;i<MAX_INVENTORY;i++)8 R& N. j2 q8 ?& U  M- B: G( h: c
  {
. h1 p6 a# q  T   if (m_Item.dwId == dwId)9 i  S8 r% H$ m3 @, b
   {5 p% z# G1 O. U7 o& o% T1 C
    return m_Item.nIndex;; |1 M/ Q9 j3 r6 r" w; I
   }
, V: T. p' R# r( f4 e2 W  }1 U% l8 Y2 Z( x# |0 p0 [2 W/ M
  return 255;9 I4 Y* ]- G$ I% B" X" ]8 S8 r
}
- Y- F% {* _2 r+ {  Avoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
3 n, J6 x8 o8 I0 C{7 k/ k" s# V! R9 ~$ R
  BYTE nTmp = 0;
4 j- M, p2 I! o, W  bool bDest = false,bSrc = false;
1 N6 b, T( a; u! @6 ~5 O; x  for (int i=0;i<MAX_INVENTORY;i++)0 r. q: K9 w$ e
  {0 R+ ~$ f& w- V1 N6 h' Q* J
   if (dwSrcId == m_Item.dwId)
! R& [2 w5 {: g' Z! n3 C+ Z   {
. V2 Q- N# J) b9 \5 ^# n    //id相等 则 改变对应的dest和src
+ N( L7 q0 n! w$ T    nTmp = m_Item.nIndex;
5 I$ g3 [. @4 z    m_Item.nIndex = dest;& p5 v1 J4 D( j1 A4 }
   }
5 Z4 u% e7 o! {" X) ^' @" b2 G+ V* Z" Y  }
( [& g- `& L; `* ~; P  //临时数据保存完毕,交换开始' U% a/ d" \$ F  f: z" n/ a
  for (int i=0;i<MAX_INVENTORY;i++)
# q' O% ~+ d# s5 w7 j* A. h6 }  {
: w3 w2 F2 l. H5 \( i7 _   if (dest == m_Item.nIndex)
3 P3 m( g" r6 W5 u   {
& [! g+ h" e, [0 n( \8 V8 \    //id相等 则 改变对应的dest和src8 G. t8 a1 a: e
    m_Item.nIndex = nTmp;
) j! t/ {& b$ c- }) l0 o( ?, D   }% Q) I6 B" G9 H8 @
  }# d7 ^6 `% A' Q! |+ R
}
6 O6 e, X( h/ i2 X" [) ^% Q};
% _" \; |6 {) e) B: K% D-------------------------------------------------------------------------: b3 _# \1 s) l  @
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). X& W! J- I8 k4 I! i
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! z" c! d" w4 B, t; r* F* W
紧靠其上添加:
# A9 ?) D; H8 }$ D# K2 U- |. bif( pWndBase == &m_wndMenu )8 p' ]8 b$ u8 y: w7 W
{
2 @. ]/ C0 Q' E- W- |  switch( nID )# s) `8 p* Z! L' m
  {
6 ]4 k% R7 k0 B' Z" P4 w& c  case 2:
5 n0 e- i5 h! t% k5 w' }   {
) O6 W5 A  G* R0 b- B+ `    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& k  \; }4 b* Y( n6 y
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- ^; T# ~6 \, k) Y2 u' `) b5 M
    {
8 ]' K5 [) N* O0 i5 p# Q     break;" u) P" M+ P" k: {' l4 i5 ^, _
    }# x7 }, ]" w5 I
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 M& ~& \$ w. D7 L    {
# O% G0 n0 i8 y0 N     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& O% F# `4 d& Q) |- O  f     if( !pItemElem )
: ]* @( S/ @5 ]4 Y      continue;2 S& r. F! b. Q9 i+ @( q4 \
     if(pItemElem->GetExtra() > 0)6 @( d3 T6 }' H" b; ]
      continue;
* K4 Z$ h# J, w4 [     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, X6 z; `4 U4 _7 w3 b- l      continue;
/ M4 g4 z/ @* S- x1 M     if( g_pPlayer->IsUsing( pItemElem ) )
7 R6 E8 ]* F6 @0 C8 ?- {) G( a$ g      continue;
; l* C! G/ J8 @     if( pItemElem->IsUndestructable() == TRUE )
* H* c; M: S! K     {# S- X  J, S' H! j/ [
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* e; U" ~* u, r& f% B3 C      continue;
1 q2 r8 g4 s7 z     }; t) g' R4 r& ~9 I+ U
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ c2 x! P; J: l- W: N8 y  o+ q    }
4 T# A: r. r* b  N! A4 m) Y8 l    break;; v! R3 y' b; k, r! V' H
   }
7 _9 h$ i; T! a/ |  i0 d0 T4 Y  case 1:9 T# O) K. p. t5 U# U. @- X" E0 L
   {; R2 u6 I- i/ w+ _  v
    //整理背包
3 A- }( Z: b5 C6 B    //////////////////////////////////////////////////////////////////////////
/ V. v7 V4 p0 K+ \& s$ Q! ?  h    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 z5 k! H* j0 Z. m& e& o3 _  p    //////////////////////////////////////////////////////////////////////////; i& ~+ N# w- `% |5 l. v  ^' K
    //////////////////////////////////////////////////////////////////////////
( E( d% ]; K- X) D5 @; e0 V    CInventorySort* pInvSort = new CInventorySort;3 [$ V) J" E0 g5 w+ ~/ Y3 a
    vector <sItem> vItem;
; L. b" F& I2 }2 S! @& D# ^/ J/ V    vItem.resize(MAX_INVENTORY);//初始化大小0 n, w" f7 k. ~  C3 \/ t! Y
     //////////////////////////////////////////////////////////////////////////& x6 L- Y/ S6 ]+ G
     //填充数据; X, }1 h" P# P1 d; h
     for (int i=0;i<MAX_INVENTORY;i++)% Z3 y) L1 j% ?/ Q* J7 K
     {- M& n6 K, P( u9 w
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% G7 [4 M8 s8 \  h      if (!pItemElem)
3 E+ x) M- `% w5 `4 j" ?      {9 u/ J& q( V9 B$ O
       vItem.dwKind2 = 0xffffffff;% x- U) i' M0 c! k- c( }
       vItem.dwItemId = 0xffffffff;! |/ |' u6 q9 S7 i: v1 k7 p
       vItem.nIndex = i;% J; P$ z) ]0 A6 T0 ]2 U2 Z
      }else {
/ l8 ?6 j& T. X( o" `       ItemProp* pProp = pItemElem->GetProp();0 ~1 z# t5 [( Q/ q5 \
       vItem.dwKind2 = pProp->dwItemKind2;
7 z, U6 A4 N: H# B+ a9 {  C1 T       vItem.dwItemId = pItemElem->m_dwItemId;# k' p0 M" m* Q5 I
       vItem.nIndex = i;. _5 f3 `0 K! t  i+ W7 D3 |3 C% U
      }
% G. L" |1 Y  x+ w# N! u      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 O/ r6 @. Z3 j% I# o
     }
2 i7 T: j/ @+ W, m& L. }; J: l     //////////////////////////////////////////////////////////////////////////; d( l  v3 }9 S- [' V) P/ {
     sort(vItem.begin(),vItem.end());//排序
% [3 b: A1 @; b7 `" t     //////////////////////////////////////////////////////////////////////////7 A# D/ l* \% `" M0 x7 A+ o  J8 V1 N2 h$ z
     //交换
7 L) d+ r# b/ x5 w4 q3 v" f7 P8 w( p     for (size_t i=0;i<vItem.size();i++)
' g% W0 |- o7 Q7 s3 h7 v     {
! a, r  w$ `: [, L      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. w- F" C2 N( M( X4 D& s
      pInvSort->Add(vItem.nIndex);
  D1 u/ X; z) n. t! Q* r+ A     }$ Q4 A: g! R! ?* q
     BYTE nDestPos = 0;
1 }: U; @9 c, i/ X5 P/ }     for (int i=0;i<MAX_INVENTORY;i++)
! `6 u8 y7 s9 H( m4 q+ I     {
: K$ R8 W) {4 F2 {1 q" o      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& X% F3 i; d7 G1 X7 q      if (pItemElem)
! [' a# Z- k/ `' ]4 j      {8 s3 ^/ c& b& l! Y( u1 X
       if (IsUsingItem(pItemElem))
- n2 i" h% G- k       {
0 J; A. |1 V1 r6 G7 r0 I        //这个位置无法放
1 [, Z* X" d! `5 n8 o; e9 _        nDestPos++;- x! S. y) H: g4 Q
       }
* E! \3 `+ e* D/ p; c( c      }) O) F+ t. l$ W
      BYTE nSrc = pInvSort->GetItemSrc(i);
* J9 w* U9 ^1 G0 G( L; G# f      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# [! b' O5 |1 T0 Z/ e
      if (pItemElem)
$ T3 Y' P& @4 {8 R      {& P% a2 _4 J( y8 k# F
       if (IsUsingItem(pItemElem))
; s" R( i" {1 o7 }7 X* q+ t       {
' B* M, {4 U8 @2 i# j! a        //这个道具无法移动,跳过
& \/ j0 A5 c$ a/ q; _  i        continue;
' W2 p6 w6 V  H, p/ q. w( c& Y       }
) q; b3 E$ c9 Z+ c: F; K" H      }else{, q) O+ ?) Y: ]' T% L
       //空位置 不用动
1 t4 q' K4 i6 S3 E       continue;
$ l3 g7 G: T2 E1 m      }
/ t' c' S" U0 y) R! X3 X      //////////////////////////////////////////////////////////////////////////$ \7 ^/ ]7 w' g- E; @0 ]
      //开始移动/ I3 X9 V# u  }  d8 Y8 `
      if (nSrc == nDestPos)
5 Q6 x9 c3 `1 @3 L) b8 m      {/ f# r. _' A" _9 X
       //原地不动# S4 o9 B4 c; ^" u: a# {
       nDestPos++;
0 Y9 N6 l: P$ D! x6 b       continue;; M- @: a( {  m* H8 {
      }* M2 s4 I4 B( i; G8 ]' |
      pInvSort->MoveItem(i,nDestPos);  I  s, Y; r' k5 K
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 h. \) H  Q: h) \9 @( k& x
      Sleep(5);
5 G4 q3 h+ g8 d; g0 y4 ~* J      //Error("移动 - %d->%d",nSrc,nDestPos);
; m# [  i7 i; @& X      nDestPos++;
  \9 ~5 c* R6 e2 U0 e6 E- F$ @3 i     }
2 D) n4 s! ^4 X2 e& v     //取第一个元素的信息
% y! Q5 Z' }0 U6 O6 p" P) c) x! h  `     /*' g* J: k' s& n: }% e
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 q, e5 j: p. S2 k3 s7 |8 f6 _
     {- I: E4 X8 B6 `* n- }5 ^/ u0 e
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! \6 N0 {! A+ T8 L8 h  ^7 g  ?: h      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
# j- H) i5 x5 s     }
% \7 e6 Q3 x( k     */" X( o  i/ i5 c: m; h! V
    //////////////////////////////////////////////////////////////////////////
0 D+ U. _( W- m( I6 Q    break;
" z7 y6 c: P' ?# t   }
% b' O3 b. T- _; d* J+ r& f# u  } 6 t# j/ U0 E# w# ?9 |) M
}
; k) e, M! O8 X: U% p' v- Tm_wndMenu.SetVisible(FALSE);4 J* C8 c: C. R9 @! \' f

  a: S1 g/ ?2 z( m--------------------------------------------------------------------------------------------------------
1 g) B, l: |5 A# M; W/ j: O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# {- @3 y  G7 n
{
% B0 _, `3 K5 M. \* U2 ]& Y* IBaseMouseCursor();
$ Z/ m' `3 J; m8 c1 r}
- i" B  x# e* d3 N8 L在其下添加:( L  ^' E3 N  d( \5 M9 G$ _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 ]6 B6 O, J7 Z
{9 w/ g8 j9 f9 L& |
m_wndMenu.DeleteAllMenu();! m  W$ O( D/ J
m_wndMenu.CreateMenu(this);
; b5 d; F* u' l' R5 _4 Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 l  C. K: j% K$ G" _$ c

7 {9 v7 T9 t  u# k4 q9 L' Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! a* S% a6 ]3 J
{
. w+ g1 s  h- v% T' O0 h" B& x  //P以上级别才可以删除所有道具
1 s2 H8 Z) c2 v! J9 s% Y: r. P  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 `# S2 F# o! z; I  g6 J: ^: J2 Y8 X
}0 U# K  s' ^! q5 ^% @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 i' w# j% Z0 D& |+ K6 _# S3 Q9 U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 B$ l% p4 N* B* Ym_wndMenu.SetFocus();
3 A  f9 e* T% z}
. d) a5 w; x3 Z1 p: G( n------------------------------------------------------------------------------------------------------------
0 k8 m: U" S5 f*************************8 Z! u/ c# ^! y, _2 u5 m, L
WndField.h文件
6 b6 k) r* ~4 k- `/ K*************************6 B9 x6 I& p7 k! y3 q
搜索:BOOL m_bReport;
. a7 n$ h" ~4 g1 Q6 ^其后添加:
0 M9 L# h9 v- H/ nCWndMenu m_wndMenu;, ~$ E" Z9 Z) x2 X+ K$ s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 y9 _- Q7 d. X4 X  K5 R" P
其后添加:
  A- ^" ?6 T1 }9 r. o) o2 f8 {; |virtual void OnRButtonUp(UINT nFlags, CPoint point);. l' [* o# Y! y/ p1 E3 F: n) j: ?9 Z
  n$ w9 R) Z6 u0 ~7 w: L0 S1 H& S

4 N% j4 S9 ^7 }* Y$ o

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 22:48 , Processed in 0.066047 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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