飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
2 W% |9 v+ ~6 |; O9 t- Q, `( K( U搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ \. u& n- _0 O/ e

; S2 [+ }  V* e8 @& |9 e4 x" ^- m" Wstruct sItem
3 O" h# c  y: q) r) ]& W; Z{
/ T, P' g- F& S) Q1 u  |DWORD dwId;
1 Y% o$ f( W4 {' sDWORD dwKind2;
5 h+ C3 b# N5 I; U" Y; \% K0 X! cDWORD dwItemId;
* U. L5 z! C$ D2 q* UBYTE nIndex;0 ]# X8 K+ i# s
sItem(){" O" x9 ^+ [! m/ y
  dwId = dwKind2 = dwItemId = nIndex = 0;
' C6 V* {! V9 q" u) o4 X}
3 Z5 T2 U  f; O9 l* `& Dbool operator < (const sItem p2)
& h% j. T7 n/ n, u' Z9 E  C{
& Z4 [1 |# u( Q9 U' [+ b1 o  if (dwKind2 == p2.dwKind2)
+ H: L7 `) K) M  {) k2 N  x0 l& ?: q4 w
   return dwItemId < p2.dwItemId;0 b( S% T- t/ f& y
  }else{( _* Z2 b8 t9 l/ X' Y6 p+ p
   return dwKind2 < p2.dwKind2;1 b6 P$ \! M5 R, n4 F- Q
  }
, ~9 f% S4 E) y1 z5 [}
5 a3 Q. m/ ]' J5 a};
0 s6 O% h0 L* e+ l& Fclass CInventorySort
" P9 r2 b# j% r$ S{
- n# G6 G$ C% Y  o; U7 hpublic:. C6 l2 `; q" o0 G3 @. G; A
CInventorySort()
3 _, y1 Q, F9 ^8 Q6 g7 J6 S{
/ I- j( U/ g! A: c8 m  m_dwPos = 0;
. C, g% y/ ~2 ~+ e' T) X}
" p; l" b9 t( ]  v: s" }/ }2 Z~CInventorySort(){}+ w, f6 [* s# @+ |& d2 G1 h
private:
' ~5 h: l6 q8 o  `sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' w3 w3 l% u7 X' s
DWORD m_dwPos;
* |/ S3 a- y6 x. A. N- ]5 `. p$ ]1 ipublic:- a0 ]* J+ J$ d
void Add(BYTE nIndex)6 S+ h2 c4 s' J6 Q! M5 \+ i
{
. V; T" b$ E0 }& ^" w) n% _  if (m_dwPos >= MAX_INVENTORY)
( ~+ N. \/ m2 v1 Y  {
: g- `; Z$ d5 L) F4 J   return;8 V$ P0 ]1 ^3 L, |+ a( r
  }. ~! y5 C; m# m) |, B2 _
  m_Item[m_dwPos].nIndex = nIndex;
8 ^, C( d0 b, b! S2 V  m_Item[m_dwPos].dwId = m_dwPos;! Z8 o* t; m4 ?& {( P, ]; \
  m_dwPos++;* `9 W8 U5 b1 x/ {9 N
}
1 x0 x' W( }- {0 z5 D2 `; `BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 q1 V4 I8 L8 @{
" Q  p; C; ?. ]8 e  for (int i=0;i<MAX_INVENTORY;i++)
3 m1 |. w  Y& P  X7 K. h  {
* i9 ?1 S: y% C, [* J   if (m_Item.dwId == dwId)
1 [' H) B1 e) C" M7 j, t   {
8 C: F2 y$ n( p0 [; n) H5 ~    return m_Item.nIndex;, J) m7 k9 Q5 i. [! V' P! S
   }
) |) p, F; C4 O- j# R  }/ U, X5 ]- T7 P+ V) N
  return 255;
5 z9 |8 p$ n5 S  b0 v4 ^4 h6 }# X}
0 p/ B) Z: q( o4 A- a* qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; a, B; G! v9 @" N* F
{) `% `2 i. G" q
  BYTE nTmp = 0;6 U0 X/ l- |  K( V
  bool bDest = false,bSrc = false;+ B$ t! z; v, V# Y7 P
  for (int i=0;i<MAX_INVENTORY;i++)4 ]# m5 I, h( g; p8 y/ F0 q- t
  {+ D( w7 m$ ?1 k( ]' C
   if (dwSrcId == m_Item.dwId)
: h6 v; a9 Y8 d   {
/ B. d  Q$ u3 u. r% D. K/ `& J    //id相等 则 改变对应的dest和src
* @' C" ^9 \: p& O, ^& a, r7 A* X    nTmp = m_Item.nIndex;
( H0 ?- \1 y( X$ P7 O    m_Item.nIndex = dest;& B0 o2 a" @% \3 g) I' ]4 X
   }7 ^, |* E, K7 _0 }
  }
+ |' O) Q6 j7 ~7 @; B  //临时数据保存完毕,交换开始$ F) ^' m5 J: Z2 `$ X% b$ t: l$ }
  for (int i=0;i<MAX_INVENTORY;i++)
& l9 I9 L; a' L0 S* ^& H# T" C" A  {
; y4 J& |7 C5 V   if (dest == m_Item.nIndex)
6 @4 e/ |1 Q: i3 n( H   {2 G- t1 O/ \/ h) |
    //id相等 则 改变对应的dest和src
' w8 F! x# U% p( ?2 R( W    m_Item.nIndex = nTmp;
- O6 f; ~( ]4 o8 a7 G   }5 F: U+ b: I* f7 q2 z( V1 t
  }
* q) ~4 F, N% k7 e: D}
0 ?% M3 w  L$ U/ d};$ e  y* q* h/ @. n
-------------------------------------------------------------------------2 A- D8 S$ `. X* N4 I, r
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( E& \3 P- u7 C2 @
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, ^4 G! s( m% s( V. w# B
紧靠其上添加:
6 O0 ]6 ]$ i: K: B7 ?7 C$ W& J, m% dif( pWndBase == &m_wndMenu )( U! [9 c, n" _1 W0 t) ?
{
* E$ }: |0 m2 y1 D0 I/ I" ~  switch( nID ); ]4 ^% v8 B  k6 U
  {
; E$ o$ g2 g1 ?# e( m0 }  case 2:$ W/ {( x0 o- K2 A- b
   {& r- ~) l& R4 I& P* W
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 c" i7 ~8 y: G( ?- d5 \" N% I) Z1 u0 y    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 G, X1 G6 T5 U; d1 ~$ ]    {9 C. i  l# L/ H& F, Y5 @# E
     break;  N) x4 X& J4 k. X% l' A
    }
, n# C) `/ i) V6 C, E    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! P* B) s, Z7 m. U. G9 ]
    {
2 g" x5 A1 H) z7 f; @' W- g     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ \) a+ e$ B) F
     if( !pItemElem )
( q) w: F4 P2 E& p      continue;
6 N" r1 m2 T& ^5 I3 F% W9 E5 S     if(pItemElem->GetExtra() > 0)
. x1 }& g+ {3 K+ P' e; i      continue;
1 [- `' x$ j3 v* {( t8 j     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 X7 V/ c9 d2 D& X+ z7 u
      continue;7 S: ^7 T; w( H' N( T9 ?7 G; G9 R
     if( g_pPlayer->IsUsing( pItemElem ) )9 `/ H& R5 f" @0 ?' E; q
      continue;, @2 l- L# M9 S0 n4 }# Z+ t
     if( pItemElem->IsUndestructable() == TRUE )& P( k1 z/ _5 Y" z9 j# \9 L9 y
     {
% _' E2 A: G6 \2 e' F      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: f1 C$ N. p. h! q& S) B' f7 M      continue;0 |$ J1 Y# J0 e
     }
/ t+ D4 ?$ h. ]' k, X8 f     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' F+ W/ f; _  N4 O7 w7 W    }9 A0 P; p+ D5 Y/ W3 t
    break;
) C; O: w; X6 Z# Z- L+ q* ^/ E   }
5 D* w* B; n/ k' b' g  case 1:" y/ ?% n6 l) d, z# S
   {: c8 d( ?% L1 K4 d+ U/ a3 }# Q7 R. J
    //整理背包8 ]6 ^! T/ h6 N( z  a3 ?7 {& e% W
    //////////////////////////////////////////////////////////////////////////$ x5 o( {; d6 n! w' _+ T' Y6 X, ]
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. ?3 M7 }6 K" I. Q8 H
    //////////////////////////////////////////////////////////////////////////! P$ Z, H* b) Q
    //////////////////////////////////////////////////////////////////////////$ e) a8 g9 S: c, z0 X1 S( D- @
    CInventorySort* pInvSort = new CInventorySort;
% ?: ]6 B7 Z! }! U- K% \- \    vector <sItem> vItem;! p9 L$ O# C0 V
    vItem.resize(MAX_INVENTORY);//初始化大小
7 J# k/ {) A* W3 P     //////////////////////////////////////////////////////////////////////////7 W4 U/ M+ X$ o" k
     //填充数据9 l+ L4 y; m$ r& x5 {/ J
     for (int i=0;i<MAX_INVENTORY;i++)
# |3 J+ h' ~5 o. J4 I/ ]7 b     {3 t% z% O& e( r! i
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! F  {* i" i2 o0 M/ r7 c4 O      if (!pItemElem); H- z9 C# W3 d6 K
      {
& R, e8 c$ ]9 r! B       vItem.dwKind2 = 0xffffffff;9 F* Z* ^$ F2 j% B3 h, Q
       vItem.dwItemId = 0xffffffff;# p6 J3 N& [; Y
       vItem.nIndex = i;. R: Q* D3 B1 H2 F; ~3 h, u
      }else {% n5 i& Y6 ^3 d7 o
       ItemProp* pProp = pItemElem->GetProp();
8 j$ j. Q2 E) Y0 C       vItem.dwKind2 = pProp->dwItemKind2;
/ S6 `# v7 J  m0 b       vItem.dwItemId = pItemElem->m_dwItemId;. Q( ]7 M1 K/ d, }! N& ?* w6 N
       vItem.nIndex = i;
: k8 n9 l1 H4 m; I7 p      }9 ?5 y5 x- ~$ I
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ o" S# L0 H! O1 C+ S+ C
     }: P. p, B/ [3 l4 x
     //////////////////////////////////////////////////////////////////////////0 S5 w+ r- [# d( h5 u: A8 a
     sort(vItem.begin(),vItem.end());//排序7 M6 L8 k2 j4 [* i
     //////////////////////////////////////////////////////////////////////////
4 t& }& O: a9 d+ G* [- ]* B( T     //交换  }1 B) p. U* y  F# X9 V3 s' r
     for (size_t i=0;i<vItem.size();i++)
8 m9 n, h. U7 N$ P2 O) @/ e  ?     {
9 }# E& x. e) B0 o9 K7 b: D, O2 Z      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 T- q7 T% J# x( e, j      pInvSort->Add(vItem.nIndex);
! E8 N5 Q/ u. u% a2 q) y     }
- i6 |8 `3 l7 G7 U( m$ F7 J% y     BYTE nDestPos = 0;
2 P8 \8 y9 u2 s, t     for (int i=0;i<MAX_INVENTORY;i++)
, @* d1 q- o1 z     {% }  ?" A8 ?, a
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# |+ ~# f0 y- c9 S/ r  ^
      if (pItemElem)2 K6 w7 Q( V8 D: _2 r0 o
      {; {4 ?2 u, z: R0 T' t0 R
       if (IsUsingItem(pItemElem))9 D+ X+ {2 ?" W6 l5 H& d0 d: x
       {
; f. @: o3 C9 W$ k! {1 K        //这个位置无法放
: H2 H& W: q' F' X" }' Q0 W        nDestPos++;7 n' t. M5 V: {/ T& X4 l
       }
- z% e. F! ?9 b      }4 L: W" W) K' f+ c& A$ j& a
      BYTE nSrc = pInvSort->GetItemSrc(i);
/ `' p4 a+ ?/ V7 ~$ x7 D4 ~: I; x9 g      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ t/ f9 g8 ?6 P" ]* L/ r
      if (pItemElem)4 ]: E0 w+ K/ T
      {
) w# a' a) o' b2 |7 S- `8 Q, I       if (IsUsingItem(pItemElem))
1 ~4 A& }1 _' K5 ?& [       {
+ o+ `# t* \* k9 ^        //这个道具无法移动,跳过, o4 J7 B0 x+ J9 t( z. J8 \
        continue;
+ @. U: S# T! t; o       }8 }9 i+ A2 l1 C; s
      }else{
% c3 C4 @- S* Q+ k; e7 X# l8 \0 e       //空位置 不用动
# T. _. K- _1 k& M       continue;/ n* j  @, F" ]1 M, ]7 |
      }
, {4 Z) t8 w0 F. P; h* ^" d9 B      //////////////////////////////////////////////////////////////////////////
0 h" d4 q6 V0 M& s  [: M, ?      //开始移动
: G: K4 D; V; ~6 D0 M( Q      if (nSrc == nDestPos)- }& Q) K4 i6 x9 ?7 V2 C( q8 L4 ]
      {
& d$ R! b" U3 l- R       //原地不动
) p5 u+ n  l/ }- ~       nDestPos++;
/ ], }2 [9 F# y0 u/ J, H. ^       continue;1 H/ H! D9 j" f# w' h
      }9 \0 \/ I2 o" Q7 O. T- W3 w
      pInvSort->MoveItem(i,nDestPos);# O# y# y# ?9 q# W, |# m
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 z! t; `) z- p; ^3 k3 e      Sleep(5);% @, H- X- O* l9 o( i9 I
      //Error("移动 - %d->%d",nSrc,nDestPos);7 j6 j) J- j0 m2 v, C
      nDestPos++;& U5 K8 t, r# `) G$ P1 A3 s2 L
     }. ]% W1 b" Q9 a8 F! \& Q
     //取第一个元素的信息( b! W& j0 w$ e1 N- _2 @
     /*! L2 i" X) j& J! j( l1 |  v
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): n- q7 P$ a! y: P' {' H" u& H
     {
% W. X' Y( G5 G8 v      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' |; z+ W! r9 V' V# }1 A      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- ?8 P7 f8 o% x$ q: p2 t# ?
     }; p# ~7 f6 A4 k! c# [$ A
     */0 B1 I2 V0 Y2 @5 _' V1 [
    //////////////////////////////////////////////////////////////////////////8 t7 R& m& j7 H9 ^( S- a
    break;$ s0 s+ k& O. O( s
   }# Z1 ]6 ~( T' D& D+ B% j
  }
/ a( c# X( p! g9 d5 P}
+ ^- z) W2 P0 R. U/ a$ rm_wndMenu.SetVisible(FALSE);7 ]! A& Y" _+ z& p

. p7 c7 |' A6 d$ G7 e3 J7 N--------------------------------------------------------------------------------------------------------
' X- S4 i% C( \2 g: f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; {8 w+ ?/ A) p; R0 h; k  p{
, h4 C( o1 k" `BaseMouseCursor();( `6 d: i, u4 c6 g1 Z% V5 I
}4 o0 ]0 X/ L0 j( I5 _8 ~# U
在其下添加:
  s% K0 U# k- `' d, t' x. S  X7 |void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
  g' f: C. V: _6 R{
( n0 d+ J5 N) v  ]$ cm_wndMenu.DeleteAllMenu();! a6 }$ y! v  A9 k& K" K! R8 m
m_wndMenu.CreateMenu(this);' _: s) f" h/ C5 ?! X
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) z- I) H" O' B: f. a% @2 j
7 I& q( A! M, O$ I6 h
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ }7 ^0 w  A3 z& k{! P" }2 C0 z/ t' u# x
  //P以上级别才可以删除所有道具0 @) n5 u# @1 k1 g5 X' S; T9 G& q, P
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ q) C: R8 d, W8 m" |3 \2 ~
}
. N% w, w, A1 N) W( ]m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ N: I+ b7 a" T4 h! Em_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) [1 d$ z( m. b, l6 y7 d5 Wm_wndMenu.SetFocus();0 B4 `- w3 S  H' N  T
}
( t% \8 j9 C) b------------------------------------------------------------------------------------------------------------0 y# l: e! k8 b# c) h
*************************  W5 {3 N/ _+ E6 L* v! b# X
WndField.h文件7 q9 e4 K' A% [  g0 t
*************************) h" \' _. C' X! e2 z3 N, `
搜索:BOOL m_bReport;3 K! q9 y) |# a" o
其后添加:
# \+ k" m' K( A/ ~1 P" r: r3 MCWndMenu m_wndMenu;2 Q& s& {! n' E5 X4 [& F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* H+ q' r2 s% a, W
其后添加:
0 O- B* Y) O  Ovirtual void OnRButtonUp(UINT nFlags, CPoint point);
/ F+ v" s- b% |
# a  A0 x7 h: u% K7 C, _- P. i
6 F8 [! O7 |" j4 u) |

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 11:00 , Processed in 0.067128 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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