飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
" b1 w5 r7 a5 g" ?! P搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% I+ i% ^8 X$ Q; H6 H+ b

: v8 ?$ a% k& y, X5 ?struct sItem
# n$ S+ X* a2 I( _7 Z9 u4 m{" }/ w+ k/ |: F! u: x2 S
DWORD dwId;
+ Z# [8 d5 H8 v: j% y1 M5 u" rDWORD dwKind2;5 Z! Z( e9 h7 w$ J0 z
DWORD dwItemId;: D; u: h5 C2 p
BYTE nIndex;) {- N- t* H) [. M- \
sItem(){
7 {5 M& p0 f6 k# ]7 q  dwId = dwKind2 = dwItemId = nIndex = 0;
9 |. u- o1 B, U4 n! d. V}
, y) u  H" i, K. M8 D* i/ \bool operator < (const sItem p2)$ b' H$ i+ u! y( u7 u) {- \  M1 Z: b+ z
{
( {9 y$ }1 E1 n  if (dwKind2 == p2.dwKind2)
: x* c0 k: s# Y$ R/ K  {
6 ^$ `2 H7 E( z) i2 H   return dwItemId < p2.dwItemId;2 `7 u, M; p6 f& ^" I9 {
  }else{- q, Y0 T$ F* B/ u7 N
   return dwKind2 < p2.dwKind2;
8 L5 B+ M+ }: a  }* z* s- }: R  t
}- [! d% T; @# v3 M8 ?
};
& R/ T' I5 X( a: K" H  y( o6 Iclass CInventorySort
# o) s+ ]6 E$ G% V; Z+ s/ [  I1 x! v{
. u& m! b/ ~# upublic:0 n+ w7 C0 H2 j0 `, {+ c& ~7 ]/ `- ^
CInventorySort()
) u3 h  \3 _3 g0 H$ n5 }9 Y% U{
. e6 m) e: w$ B$ v* T( x  u  m_dwPos = 0;
# V1 _7 y3 b+ u}
8 M5 t' f; @- N~CInventorySort(){}* c+ r7 Z, N4 j( V; W: r
private:, `: [: c6 {4 o1 r/ t2 x
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 Q2 P# I; `/ g. a  Z7 l& O
DWORD m_dwPos;: z! g6 p" _6 e' h
public:8 n$ }1 L! v" R6 _+ E( v1 \( I4 ^. D* N
void Add(BYTE nIndex)6 M2 ?! V/ [. f0 w
{5 O- {# T2 w: E& n6 Y
  if (m_dwPos >= MAX_INVENTORY)7 c8 U" T5 E/ K  E% L
  {
) [( ^& B4 ]9 M* C# t% p$ y1 B5 v) q   return;
" `: h1 A' Z3 z5 B- ?  }$ \# F  ?# r& r+ A; z( \6 V/ h! l5 e
  m_Item[m_dwPos].nIndex = nIndex;+ o- ~7 j6 u- v" v
  m_Item[m_dwPos].dwId = m_dwPos;
* i1 E3 X) t. |, m: S  m_dwPos++;
. c8 F, D* F. d* W5 c7 G1 Z2 G" ~}2 k5 _( c. F/ D# r' ]
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ l0 k% R# r) ~5 q. _* U; s{
  r1 L* {( C, @. v$ h+ R0 t  for (int i=0;i<MAX_INVENTORY;i++)
2 f8 s7 N2 ^; B1 X% I+ X: N4 b  {- O" E8 \5 ~7 _& F/ p0 y
   if (m_Item.dwId == dwId)
+ ~! w8 c% c8 N+ g   {: v# D: J$ g6 @
    return m_Item.nIndex;1 X/ |! s/ G  b! u' \; @% u6 B
   }4 M: B7 l  h; n, }, h8 \! Q
  }
1 r1 B2 b; s7 Q9 k& Z( L  return 255;, h4 j( o9 \; v" c+ f# K
}
+ _. d4 E1 m) R5 ?) ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) q' D7 |7 A8 z0 C! c  ?{
8 H6 k, [: B9 @/ d! w# [) m' }  BYTE nTmp = 0;2 O* |* M/ `5 U$ L6 u$ s) y) B
  bool bDest = false,bSrc = false;
; |+ c& W% N1 Q) ]  for (int i=0;i<MAX_INVENTORY;i++)* h$ r8 l+ Y+ E, i: X! B; o
  {4 d# ~3 k7 J( O+ |2 M$ M9 {
   if (dwSrcId == m_Item.dwId)
+ |8 [4 E0 U+ y3 v   {
& w7 E& {# v; T0 ^. T    //id相等 则 改变对应的dest和src6 ?4 d5 r# d" V; ]( y
    nTmp = m_Item.nIndex;" U7 s7 L# x6 H2 r
    m_Item.nIndex = dest;
) b$ U6 S9 {& k' x, ~   }
# Q; H, L9 h. d: X' ?4 M  }
6 w: g( Y  I! x) H" {  //临时数据保存完毕,交换开始* Z2 y- s' E- t2 t+ ]8 s5 M4 l
  for (int i=0;i<MAX_INVENTORY;i++)
- x. I5 w- |0 ~  {& a8 O) x- S% H# M
   if (dest == m_Item.nIndex)
7 S) ]: X; o1 A: U( q5 ]% t   {) o1 e4 v, a9 A  C
    //id相等 则 改变对应的dest和src
$ Y8 V* J/ z1 u    m_Item.nIndex = nTmp;
3 q9 ]5 g! W3 b- ^   }
0 b% b# v3 H1 E) o; _/ Q) Z/ T; }  }4 t: y# y( f: i- S5 d/ b+ Z3 v
}; A2 A4 V2 _! U5 |3 {
};0 Q' j7 |4 Z" J; V2 Q! y
-------------------------------------------------------------------------
: {4 ?% W0 V+ Z6 E& x依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 C+ S; ], z7 m# s4 E/ l# D( @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ o6 n9 m5 `4 @/ ?" T紧靠其上添加:
* ^4 N; b/ g6 c$ ~if( pWndBase == &m_wndMenu )
) U0 ~$ H: `: |2 o/ _{
2 u6 _1 q, F! ~  C# N; a, p  switch( nID )  v, M8 r) _; ]+ k
  {
% B* H5 R) J5 ^$ `; K  case 2:! |) \/ d: Z$ t
   {
  I; Y; v' P# J    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( \2 R4 k6 t- x" O7 b- \6 d
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 P: M9 B4 w3 V5 ?5 k% l( i4 P    {
  e5 C4 |2 C9 o* E; S  H8 L3 r* w* h5 X+ b     break;
9 z/ M! I. l  O( Q0 S    }
) S6 F1 }: s5 T5 f9 n: R; [7 U% ?    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' Q9 u3 @+ A; d$ e% L3 L* X
    {& D, z" W4 D1 L4 @: b* {# `* Z7 t
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ k1 m- e% e7 w- e2 V" P
     if( !pItemElem )
0 B9 R5 [$ ]& ]4 s3 @      continue;
# k- E# r8 D) f! A8 @     if(pItemElem->GetExtra() > 0): R& [/ `2 p) ]) ]
      continue;
" S, l- f! o# Z, r) W. R2 I     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * T, w7 \$ X' u, A; N
      continue;: a) n5 y" M9 a2 t8 m
     if( g_pPlayer->IsUsing( pItemElem ) )
* f5 T/ d% I. J4 Y+ l" N& E( i      continue;$ P( p: p& v* ~8 z8 \
     if( pItemElem->IsUndestructable() == TRUE )
* K; h  e6 x! v% u' {     {
" L; v( ?4 j6 \      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 c6 p  x& o3 }% V3 L      continue;) Y! t0 k  G  m$ f6 B9 K9 K  {, T
     }
% l& F7 L+ Y/ X5 B2 B& i     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 k0 I, R8 P- A: R$ h    }) }5 P6 w$ ?0 }0 `# F# c4 ^
    break;& X7 Z0 L2 c+ n
   }9 O2 \" H. b/ l; d
  case 1:4 H8 _, T* _) X. t: B# d( ]
   {4 C0 v/ b" P% J# F( n0 C( S1 I
    //整理背包
/ ^" p! m" g' R3 h) h5 m8 @3 g    //////////////////////////////////////////////////////////////////////////
% d6 T# Y9 `# y) s" ]# X    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ V$ e$ ^( q, p1 M) U
    //////////////////////////////////////////////////////////////////////////
, P+ q2 H3 y( `4 E    //////////////////////////////////////////////////////////////////////////, Z. k3 b% ^/ m
    CInventorySort* pInvSort = new CInventorySort;
( ~0 s1 P  `( g    vector <sItem> vItem;
: Y7 y7 \* K* |1 O7 D    vItem.resize(MAX_INVENTORY);//初始化大小
" S; @1 m6 ?* C     //////////////////////////////////////////////////////////////////////////
5 T$ a" C7 J$ e: c     //填充数据
% o% h+ p" \* c& W, |! W+ x     for (int i=0;i<MAX_INVENTORY;i++). M8 D4 N9 o6 V- V  Z; |, d, j+ @
     {
8 o. @$ R5 ?# M2 ]& N! j      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; G9 a" W' G- s, L
      if (!pItemElem)
. ~/ n* V" Q( E6 I7 r      {
0 F' {- m) e+ R4 ?( l$ f' ^' N       vItem.dwKind2 = 0xffffffff;
7 H$ Y! H% c5 b% Y, L& _       vItem.dwItemId = 0xffffffff;
  X: b/ O* ~: g       vItem.nIndex = i;
, k  \, r+ I3 Y( R1 z      }else {
8 w& F" f0 W+ N9 s5 s( `       ItemProp* pProp = pItemElem->GetProp();
, x1 ?, A9 d0 S6 a. o& [6 Y$ r0 s- c       vItem.dwKind2 = pProp->dwItemKind2;- b' S1 l- q. o
       vItem.dwItemId = pItemElem->m_dwItemId;# m. z) o% _5 |, O$ B& y) b: A: Y9 v
       vItem.nIndex = i;
9 Z4 Z. R+ y4 _: M1 V1 |      }3 ~  f! e) _" P2 ~
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 Z% n5 f& Z; d( k; b! a: h     }
4 r5 E' N; k# P     //////////////////////////////////////////////////////////////////////////" K$ V4 W3 X. ~& p
     sort(vItem.begin(),vItem.end());//排序
, u$ K/ X6 h0 o, m6 L     //////////////////////////////////////////////////////////////////////////0 W2 v/ k. e) e; g
     //交换0 B9 w" A$ f7 q
     for (size_t i=0;i<vItem.size();i++)
# m, x% D" r& Q' @/ o/ N     {5 n- }: j7 M- @3 I& n: k
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 q/ I1 K* m! \; @6 L3 r      pInvSort->Add(vItem.nIndex);6 z, n/ ?) B8 |- n+ i9 @
     }
# I* k0 r! Y  z: L     BYTE nDestPos = 0;$ L$ f9 G% F* v  m( V
     for (int i=0;i<MAX_INVENTORY;i++)
: Z' f) c6 ?7 `7 R     {
4 y2 O+ b+ M4 {$ o8 b      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; ~& U: F/ b/ {2 z      if (pItemElem)- d+ L5 Q5 e3 S, W& w4 T/ O
      {
' @8 x6 R  Z' A5 d+ s! \       if (IsUsingItem(pItemElem))8 i7 [4 a& N4 H" }5 c# C6 w
       {3 C$ q  ^0 `+ @# Z9 f, s2 [" E: s
        //这个位置无法放  ?+ B+ ~  G8 l9 S% L" v. j
        nDestPos++;
2 w2 Z$ m* {# P/ E* }8 d       }+ o4 T3 {7 A! Y+ y* l! K3 o1 {
      }
! C. u, e' T9 q& d' K      BYTE nSrc = pInvSort->GetItemSrc(i);
1 S% }9 @) Z" D7 V. W* I      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ ^( m0 n  x) k) n* n      if (pItemElem)
( o  @* c! p/ I* K; Y      {
: l3 g; Z7 M' A& n       if (IsUsingItem(pItemElem))
6 y! y/ i7 o! b1 `) M       {' A0 o3 Z: z: m! m; M0 G" L
        //这个道具无法移动,跳过' ^, p! z  P$ V- r
        continue;7 z# p. n+ E) @# W8 Y1 U
       }0 {2 j9 X" t( H  d% K' k1 [! _( s
      }else{
! ]( w' p3 P; J: [5 Z- S4 i1 t4 s       //空位置 不用动
6 x9 i5 P& |, x& ^1 ~       continue;2 P! y& z. l0 O. J% K
      }
2 ?2 j: m( ]* ~% b      //////////////////////////////////////////////////////////////////////////
& F& t" L2 B. C0 H/ ]. x      //开始移动
! v9 U2 w3 h7 a6 [' {% j      if (nSrc == nDestPos)
% `4 e; E2 j% S- _  j6 j      {
8 q7 N/ L6 s" D$ m       //原地不动8 V. I/ k% |" Q
       nDestPos++;
! }5 v* B! R" ^  y$ B. }2 t0 y0 ^       continue;9 j3 g" t: _3 L) l+ [
      }
; r) N' G1 |0 i' \; D- V% v% S, w      pInvSort->MoveItem(i,nDestPos);
3 V6 A4 a6 v7 S      g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ G1 O1 S/ H1 I) G% @4 f
      Sleep(5);
1 c( Q- t: K$ @* e$ k      //Error("移动 - %d->%d",nSrc,nDestPos);
9 @' r! c+ Y; D( e+ t- J# j9 u' Y      nDestPos++;& Q% u2 U& A/ X. x7 p, K# ?* e
     }7 M4 ~0 f7 k9 W7 `+ O1 G  G. R8 P
     //取第一个元素的信息. d0 s# p7 e, {2 {0 s  Y
     /*
8 w: L* K( j, h# {2 P  Z. A, b* L     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)8 c  v0 `* u* Q# k* C: ^1 o' S
     {) Z4 ~& N1 V# w' D/ L
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 a5 r. I" r1 K) \0 S: ?
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 W8 |/ R- W! \" f
     }
# h1 p1 H* @; `4 O! Z! ]% R     */
5 y& g# b  _. K" o    /////////////////////////////////////////////////////////////////////////// y( I, e2 ~) S& k& \" t
    break;. B9 i9 T2 o" c$ i
   }7 G/ T, V/ A4 @5 K3 ^: j
  }
, X+ C: f/ H: d- g% ^}5 i6 j  m, e9 F/ J* L5 z# c
m_wndMenu.SetVisible(FALSE);
5 ?& d6 v' f5 j2 [5 \
4 r6 ~+ v: o$ D0 K: J7 ?& m--------------------------------------------------------------------------------------------------------
& N9 m7 I# C9 m" d- P搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" u, @2 c$ A# r6 t+ Y  d( [1 R{5 m8 v# Q  t8 {! P& ?6 {, l$ B" D
BaseMouseCursor();
' s4 z7 \/ R0 [* g" R0 h/ B}
( C8 V, @  z  T+ s8 z在其下添加:
2 I) P' W- w* S. Pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). P# Q, \, {1 F6 _7 v
{
7 Y1 y/ ?' D( w* t6 H$ S1 wm_wndMenu.DeleteAllMenu();- t) f& n! m/ v* K# q" u/ T
m_wndMenu.CreateMenu(this);, r1 p) u: a+ {2 {
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 T; c  x) e, W; z6 q. V8 m" @% D% o$ u9 }8 Q; R' B8 r: ]1 d
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 ]. ^! a3 v' U3 s$ c: a{2 E. Y8 ]" y: @6 _' i3 M
  //P以上级别才可以删除所有道具/ [: I& _/ K( K2 k
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; v) t" K% N/ Z8 Y5 W3 A2 D}
5 [. w' W& m3 W( Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' \9 d* ^5 L- m+ {% p; E. v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; g" r9 P2 n. L* j7 e
m_wndMenu.SetFocus();
, I0 x% z$ W. E; q* O: D# h}
! i/ u/ V! Z0 v! h------------------------------------------------------------------------------------------------------------, L0 }4 g/ v& E( U" A) G5 O
*************************5 i* C' Q5 X5 U
WndField.h文件; m$ F' i" H6 C1 M  t
*************************
$ V. O, `$ m3 P搜索:BOOL m_bReport;6 s3 _! U/ o8 B, H
其后添加:
3 J. g# N, N/ F, ~# y* M8 `CWndMenu m_wndMenu;4 \& G1 ~  J3 [; S8 K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# b9 Z8 L" F7 X+ v其后添加:
( H3 b4 i# ?; x/ K: g& Jvirtual void OnRButtonUp(UINT nFlags, CPoint point);
- m7 a+ Y* V7 O! D9 b) o' Z" c# w9 b" c
+ B9 z% O" O. k5 U

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-19 02:40 , Processed in 0.068086 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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