飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件8 h( R$ p9 J4 ~2 d" n
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
  Q- V2 Z: T+ E6 J0 M% M8 z, D$ X. G' `
struct sItem
4 C* W( J& ~# E- k8 I7 Q* i' Y% _6 x{8 R3 p: ^! Y' M
DWORD dwId;% {# J! c: J3 O7 i( q2 z
DWORD dwKind2;1 `5 R6 G) K+ H( A- e
DWORD dwItemId;
0 H' f6 I* i: k6 i4 tBYTE nIndex;
  c6 L7 Q7 n: D8 S& v; O1 W7 qsItem(){- ]9 ~8 Q, ~4 N* I. e1 b8 ?8 P
  dwId = dwKind2 = dwItemId = nIndex = 0;- Z& W& T' y$ X  C, e
}
9 |% ^$ Y/ o$ @& o  t) @- U+ w9 qbool operator < (const sItem p2)$ l, e2 s4 K" I$ t+ Y! T) Z
{1 o. J9 U* V' T# i! m1 [) ?
  if (dwKind2 == p2.dwKind2)  s! u" ]) y" Q8 ~# o- _
  {, T# g5 t# y/ N/ R4 o
   return dwItemId < p2.dwItemId;' F: x% B. e( g
  }else{; `, w1 {- v1 d- }5 L: E7 p
   return dwKind2 < p2.dwKind2;
  d# _9 G9 L+ u  }
; H: E; F2 C$ l9 e}* I* y2 {; D6 b( t
};
4 b; B3 T! z# z2 qclass CInventorySort' ?3 V; Y& _; D  T% y% @
{
  W/ E& z- {4 A" Tpublic:
9 e. A) c5 E+ o: bCInventorySort()
2 x; s- [. o$ Y( E{: l0 n6 C) |  Q0 l7 \0 O5 X0 w
  m_dwPos = 0;
# q0 {2 k; j8 f7 |}
% s2 {2 U  K7 c# r! E) v~CInventorySort(){}* U7 P/ W, B$ y. o8 J: @2 f4 g, V- W
private:
/ v0 A) P9 g, P+ M$ bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 \  v- M4 R6 {# K2 P3 d" z; ADWORD m_dwPos;7 V9 {2 Z2 N: P0 Q# i% o
public:
- w& T( }% l/ Svoid Add(BYTE nIndex)
0 Y3 g) s) G+ n6 S3 a{9 ]: p  z; C$ I' O8 p
  if (m_dwPos >= MAX_INVENTORY)
, ?, I% ]; T9 l' ]8 H6 N3 j) l1 d  {0 c6 C) U8 B7 T! D7 R4 A5 m. r/ E
   return;
$ V6 Z7 z" Z& j1 \. x: [  }0 P/ b# a7 U# e
  m_Item[m_dwPos].nIndex = nIndex;& `& r& b5 W4 L2 I
  m_Item[m_dwPos].dwId = m_dwPos;
$ O/ S0 p) n; u+ }9 Y  m_dwPos++;5 T# s2 W: E: p0 A0 L6 ^# _
}6 H$ W( `# [- n1 r& L3 [. R0 B9 Y
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 G4 k8 W0 f) l{  y0 I+ p6 O+ ?2 x, `5 ]
  for (int i=0;i<MAX_INVENTORY;i++)
7 _4 O& B! k3 {0 B  {5 N2 H3 f7 L3 \! k
   if (m_Item.dwId == dwId)9 p+ [* S" q2 P' h% m8 N1 j+ v
   {, A$ V+ ?  j5 d: ~* T# Q
    return m_Item.nIndex;
4 f9 k" \- w2 o. u7 ^/ d   }! X* N4 ?1 @" _( ^1 j
  }( l# T! j7 n' u6 ~# @: A, O  D( E  K
  return 255;9 J4 L  U* G2 S: t
}
; R0 L# U, G6 e6 lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 v' t7 t9 q* o1 _/ D8 q7 V$ O
{0 l1 p1 |' K) i% s
  BYTE nTmp = 0;
4 l( U; b) o4 y  bool bDest = false,bSrc = false;, u* \5 M  u6 I* q+ u8 W" z
  for (int i=0;i<MAX_INVENTORY;i++)
/ m& G( u! `* N, d" Z) i6 Y  {
0 B: P4 N6 h/ W% `" z( P1 @  T" L9 F   if (dwSrcId == m_Item.dwId)5 T$ [# S3 Z" l3 N) ~4 |: Z4 l, a- _
   {9 D! t  y: h& d+ m  c; `+ V
    //id相等 则 改变对应的dest和src
: Y- {+ L+ _( H' U    nTmp = m_Item.nIndex;
1 O$ z* n, \# F! c1 ~( L    m_Item.nIndex = dest;* ?9 H; W- v% w5 q# d- [
   }! u+ R" Y: D" `& A2 j4 L  z
  }3 o% N2 R3 {9 }% {5 U7 q
  //临时数据保存完毕,交换开始
; F' I' H0 D1 W% o8 b+ r! C  for (int i=0;i<MAX_INVENTORY;i++)
; d0 z4 w! ~( e2 X3 o) O) ^  {
) q) @$ s" ?: X  c, O1 j2 x   if (dest == m_Item.nIndex)1 \# F/ K4 {. a( B9 g0 G
   {
1 N0 y" c1 Y  g% {- f    //id相等 则 改变对应的dest和src* P0 O* W" R; A
    m_Item.nIndex = nTmp;
: n6 N5 ~8 Q0 k$ ?   }) P) y0 e( D, Z( G
  }8 r/ C2 N$ j+ U2 ?2 t
}9 A7 i& H* T) o! _! Z# |1 D. ?4 l
};
' w! _% C6 A' i-------------------------------------------------------------------------: x5 W: a( w2 T
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ ~" @8 \5 L1 F) {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* h# k4 b" [  G- O! o* C0 [  ]
紧靠其上添加:
; U9 d2 ^7 a4 d& ^2 a$ K- Fif( pWndBase == &m_wndMenu )! u) k% G# ~, \7 C7 y
{3 `( s& I( a7 p( t2 f" O; m8 [6 o
  switch( nID )+ B( b5 A! M2 R( S
  {
3 L4 e2 ]" C' V- m7 b  case 2:5 x, W! @1 M3 p
   {* V9 @) S5 t6 K( Z2 ]  x
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* @# R) L+ w+ O: h8 ~
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% h' p  w) D. C" C    {2 H0 w) {  k6 [' J8 l
     break;+ Q( f% j6 U$ N7 [
    }
$ ?7 t! V. ?* f5 u2 X4 U    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); U. c4 p( Z/ h3 c$ B1 U7 H' Y% N
    {
9 k; Y4 z" D; |1 U# M/ O- R     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 u" t" h/ D+ H
     if( !pItemElem )
5 v3 ?, b) I7 u  s$ g      continue;
. c6 q$ Q5 X$ {! t: n9 |( u     if(pItemElem->GetExtra() > 0)
6 `& m: U; w; c1 u) z0 I+ t      continue;
/ d' q- v/ _5 F  T5 _# i; v     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 e& l$ _- N7 j9 `  s! w0 v
      continue;% K! k7 k( {3 F) G: l, i+ k; g
     if( g_pPlayer->IsUsing( pItemElem ) )
% N# l& i7 J5 K% u, d  P- u      continue;
( ~" `9 |. h) e     if( pItemElem->IsUndestructable() == TRUE )
0 ]' f0 e2 [) g4 A: |     {
5 G5 f7 n. c& }% H; a      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 r: i; X& [# H+ y0 ^6 M9 [
      continue;
/ C: k( x" O+ Z+ B     }
7 q8 y% p+ K; ~6 ^! t4 U6 H     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- i% E' u7 ^* U) Z# p& h' _
    }: r- E* T) L/ }! i  P' L
    break;
; a. V& Z$ k& o8 Q   }
% E: D% L6 z3 G5 Y: \: ~& b  case 1:+ @  c# D% i& T5 f% T9 C# q3 v; _5 S
   {
$ i* b* h5 A* l* t2 ^    //整理背包, n& {6 h" z3 C: e( v  r( _0 t' V/ C
    //////////////////////////////////////////////////////////////////////////9 _$ ?" i$ l9 v* @5 B
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ ~! N; x8 F. w" ?: ?
    //////////////////////////////////////////////////////////////////////////
4 q' f& _. L9 g7 z6 ]" C    //////////////////////////////////////////////////////////////////////////) N2 R0 x9 D; T2 G; p+ A+ x. d
    CInventorySort* pInvSort = new CInventorySort;
" a# |" {. B3 M9 H& n$ P    vector <sItem> vItem;
( c9 A9 O' o9 t' C    vItem.resize(MAX_INVENTORY);//初始化大小! a9 M% J- B: P0 Z0 g4 p$ r
     //////////////////////////////////////////////////////////////////////////* b/ M; G* y( T8 ~$ A9 C  o, [6 m2 N) \
     //填充数据
; R# ~5 z, E2 V3 b     for (int i=0;i<MAX_INVENTORY;i++)1 l7 s% O" c3 g4 b8 U- I9 ?
     {
) C% {4 r) r2 Q- \" H3 j: t/ `      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& J; @# V1 i, @! D2 C      if (!pItemElem)
# S3 v) _1 h/ c( @      {4 W- e. {% E/ b. `# V& @$ \
       vItem.dwKind2 = 0xffffffff;0 B1 G: ^! S! x1 V& ]2 T' }
       vItem.dwItemId = 0xffffffff;; s, M  H$ {# V% R9 K& M4 z
       vItem.nIndex = i;
6 {" d0 E7 |. u4 E2 e      }else {, |- b  ^, k3 o, r6 a6 h
       ItemProp* pProp = pItemElem->GetProp();
4 B* y" n6 X  w; O" n8 C( o, z       vItem.dwKind2 = pProp->dwItemKind2;( L3 I- ], o5 {; J' c1 _( ]) y$ i: n
       vItem.dwItemId = pItemElem->m_dwItemId;
8 ]2 }& B$ F. C/ W       vItem.nIndex = i;
9 A/ Z0 p8 b/ {7 d  Y      }+ F4 L' d  ]& C( @
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- i  a$ k; ]. o+ E& k
     }4 J7 B* }4 s4 s3 ^. f! Y( S
     //////////////////////////////////////////////////////////////////////////4 I6 W8 q6 m# T1 I, U% c
     sort(vItem.begin(),vItem.end());//排序; V: _: y; f% s1 u9 f
     //////////////////////////////////////////////////////////////////////////1 d& D" S8 Y4 C0 G7 l9 B5 {
     //交换
8 J0 R& s! N/ p; d) D     for (size_t i=0;i<vItem.size();i++)) @, b- y7 G4 M7 ?5 o  d7 R
     {
8 S. e! G( f8 _1 O1 f6 m2 D* s      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 ~; @+ x, P7 u% Z$ ^/ L  A      pInvSort->Add(vItem.nIndex);
, W6 ]& O- _- ]# h/ N     }
8 j* j6 k; s0 l; u; g+ _7 ]     BYTE nDestPos = 0;
" r& C4 M) t' t  H/ }     for (int i=0;i<MAX_INVENTORY;i++)
3 ~) f+ @1 o  c, r/ O# M- F% R& _8 g     {. ^( q/ o8 j! M. U  \4 U2 L! M
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( t! v! [3 \, ~      if (pItemElem), a1 @2 W* |) j" h
      {
) S# N" r* ?& h0 p' L: C7 s* k       if (IsUsingItem(pItemElem))  ?6 v2 p, W7 J
       {
& p+ ]/ A9 S- M3 R) F1 P        //这个位置无法放
. H3 O1 C% Y2 E5 R        nDestPos++;
/ n) }( R6 C$ `+ Y7 e       }
) m/ ?( F* v, Q3 L      }
$ a' i3 j2 S5 Z5 }% w# O& |. }      BYTE nSrc = pInvSort->GetItemSrc(i);
; [, s0 F8 w9 z- u2 B8 z" s0 `      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ j: V% i& \4 s: N' S( o
      if (pItemElem)
! D) g4 {7 H0 B: [) |! P4 _      {
6 C; }2 q9 `! y/ f( r  b) F3 Y       if (IsUsingItem(pItemElem))
. A( u# u( r6 x6 p5 `       {- e4 c' k% u7 G- u; i% j
        //这个道具无法移动,跳过3 {% {; a) t% l  @8 k/ x
        continue;
5 F' |$ u; f! R" Q2 S. x3 t       }/ e9 B5 O1 L2 y* M' b4 @
      }else{; {; H( r0 q# _
       //空位置 不用动3 M5 B! Q! V9 L+ S4 z9 q
       continue;
  y8 J+ r, ]% c, I* W      }6 U, ~, \9 H9 [: ~8 d% E
      //////////////////////////////////////////////////////////////////////////
; Y/ O& [# k# A9 V. m      //开始移动
# x9 e% c) K5 Z. N& I& p      if (nSrc == nDestPos)
! d$ N  H( C: G# }      {2 d  S7 X) y5 E6 @* ^& K4 j
       //原地不动
$ ?4 R; T/ }3 K; j# L       nDestPos++;2 Q$ e* X. n6 }2 ~8 }# y- m+ [% [
       continue;. _5 B$ [/ d1 ?' J: E4 Y
      }
8 G/ {8 k! g( X& N: V( O      pInvSort->MoveItem(i,nDestPos);- m2 P8 w, ^& w' _6 o; w- i
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 x* f% T& h+ F/ T6 D+ [! F, R3 @      Sleep(5);
2 N9 o" U/ n* P( J' ]" `      //Error("移动 - %d->%d",nSrc,nDestPos);
* |- c0 \8 @/ J+ \/ L5 \      nDestPos++;! F! G4 I$ a' y2 H
     }
0 G2 r) v3 y0 C# U     //取第一个元素的信息3 L& c$ o2 k; E$ n( z1 C1 l
     /*, N, Q6 i% G1 O4 j
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ G; C9 u- ~8 X6 D" I$ \     {
; v5 t: s5 ]: M1 l      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 l$ F3 D2 T' |' ]" @) m: S" G
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ F0 b7 f* G' f: p, b* W     }; i8 O+ ^* [3 v4 k( F9 {' c
     */
8 r- F+ y8 t  W: O, V    //////////////////////////////////////////////////////////////////////////  @3 p) p; u) {5 M7 P8 O
    break;) R2 h/ ]" x) A' }' j6 P! {
   }: y$ _' Q7 T; U9 y1 J: h
  } - g. N& l& R0 h# F* L4 i0 S! d
}& V& [2 y; _' a1 i( E% p& j1 H1 O# R
m_wndMenu.SetVisible(FALSE);  Z% m  _& v' K2 Z1 w$ o" F" t

; g6 K/ p; m6 z  W! x8 c--------------------------------------------------------------------------------------------------------
" B8 d% E+ r9 ~. n搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). m' o9 R: y7 D2 T& K. d+ O
{, S" q. I, i8 u* Y1 B; r
BaseMouseCursor();
! g+ C! x& c# J}
7 N2 F6 J/ `2 C+ |在其下添加:; C- z6 m* T% w3 `8 Y) h1 ~6 z6 f3 t
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* e) D) a, V4 q) k4 @2 V{
7 A/ z" x, Y) [: Nm_wndMenu.DeleteAllMenu();7 M9 w6 S- r5 N4 n0 I4 O
m_wndMenu.CreateMenu(this);
  ?' S$ q3 @7 |4 @2 L, hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 x* V! ?6 s1 O
# c+ k' X; k% \" R: Z( ?( R; Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* V& Z, v- N; l
{
, y; k+ f+ h1 H9 Y2 Y  //P以上级别才可以删除所有道具7 f- a# @! ~+ V' I& O2 M9 p! G4 r" O
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) m' l7 ?/ b! T0 t' b/ r}
' ?3 p/ y6 Q& ?0 o1 P9 c+ em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' ~2 ?, W7 G/ l' x) N% N( ~" ]m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 R: i) u; U8 f/ w3 Y
m_wndMenu.SetFocus();1 u0 K; h1 ~0 O  B
}
" T% s; w1 \( M6 {6 p) T9 {------------------------------------------------------------------------------------------------------------
0 q2 B" j. ^( ?8 @! ]*************************$ w( C) Z, m2 N
WndField.h文件
& u& |  P2 T( M9 x/ M. X& ]- e*************************
1 W0 J. i: q/ s  @搜索:BOOL m_bReport;
! ?- y5 h8 K9 y0 r其后添加:* U7 f1 q3 c% I( T- G/ `. ~
CWndMenu m_wndMenu;
, x8 C: W9 p4 s8 p! I搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) E  R+ _) M4 l1 d其后添加:
1 P% o& s. I* Z3 X0 p% @: pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
$ _, J$ _& |! ~+ ^9 h" G, j9 h! j7 c9 ~. Z/ F# Q
& q! m3 H2 z0 x

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 20:45 , Processed in 0.087656 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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