飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
2 t# c& ?' `0 z9 v4 \  S+ n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* }  d9 @* [, c% g/ U' R

$ c. O+ l! H/ s0 I: Zstruct sItem
* p$ @" j4 \8 k3 d* L3 @{
8 U7 ~* ^# r7 a. q' M7 iDWORD dwId;
% N, s. h: h2 M, i* V8 qDWORD dwKind2;
/ q0 O6 R2 u& U, |1 dDWORD dwItemId;
/ B3 o6 X, f! q; E7 p% lBYTE nIndex;0 F; k9 D  [" C
sItem(){& [9 K+ B0 F3 p; S, T% [2 E
  dwId = dwKind2 = dwItemId = nIndex = 0;
' Q0 q+ l) r5 y! t. \8 i% h}
. J% y2 }2 O! x! ?7 P" R6 kbool operator < (const sItem p2)% j/ y# A# B- p3 S" ], h- ^
{
& P0 y5 E( M( p  o1 R  if (dwKind2 == p2.dwKind2)% [7 i% Q- _% F
  {
( F) S! S7 @2 E$ P9 {  A6 W: `% O! a   return dwItemId < p2.dwItemId;5 F: A" F3 m2 J1 C1 E: z; @  l
  }else{7 w& _; z$ X  |+ _/ O% k  L) [( o
   return dwKind2 < p2.dwKind2;8 `& a- H7 j8 Q) ~2 M, F
  }
7 F' U) Y4 h  `& W% z}
$ G' @5 A/ |. I* R};0 t. V6 C  B9 [0 x. I/ [0 r
class CInventorySort+ T6 I. M6 o; |5 \
{
7 ?. W$ L; U9 k$ R7 Wpublic:
8 r5 P2 p/ K( @- S; PCInventorySort()* ]' M( w% j) y4 r
{# _% I0 e  J% d
  m_dwPos = 0;! F1 W3 h6 e: _/ H- t  @4 z2 a
}7 O" v* U) b# W2 Y& D
~CInventorySort(){}  Q* w6 R) y+ ?
private:
* o' s* T' P7 L/ ^0 @6 N+ p" W9 BsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& ~# w) t/ y! x' W9 s2 b7 T
DWORD m_dwPos;! j  }0 m+ X. n) y, w1 K3 K
public:
! {2 B( o5 f0 S0 X! a6 m6 |3 Cvoid Add(BYTE nIndex)
! |1 L! v: @5 w* J- p1 J- y: B; o! @{
3 Y; F4 I4 o$ I% D* H; R5 R. ]  if (m_dwPos >= MAX_INVENTORY)! S) ^  u7 y. o8 V7 q9 Z# F+ Q* f8 Q1 ~* T
  {) ^) M% R. T" ?: b. Z/ J
   return;
. Q/ J5 Z3 y( r4 G/ S  }3 A: f5 a: `; ]$ C, l1 V, a
  m_Item[m_dwPos].nIndex = nIndex;
5 i* o' N3 T3 l3 ?8 n  m_Item[m_dwPos].dwId = m_dwPos;  ~' k2 }) U& o! J: I2 m  K( r; O
  m_dwPos++;
4 d4 [1 y( b4 V* b( T}
. l( G$ o, F% m' ~! a+ E3 [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% L6 |( x# [, B) u: E$ v2 x9 d{( h( Z! c1 j& Y$ z/ U7 ~3 p1 z
  for (int i=0;i<MAX_INVENTORY;i++)
+ G8 T# z9 O' T# \6 Y  {
& x( ?5 I* e. {7 n* x7 V* S   if (m_Item.dwId == dwId)( V4 c5 s6 D# T1 i
   {# t% s8 p( H6 J" x
    return m_Item.nIndex;
: X9 D- p* o; c, u2 [& b1 \   }5 X- G" Y1 F% ~
  }" B6 ~# ~. |/ Y
  return 255;
+ K& h& s+ L% p: y" p# h- D}4 K4 i# B% a2 o% ~
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 h  D" w" |0 K0 t; r{
1 E# m8 v  r  `: o6 }: Q  BYTE nTmp = 0;
1 x# f7 b& p; A" V$ W  bool bDest = false,bSrc = false;6 N9 p# s1 H# B2 j$ r( V
  for (int i=0;i<MAX_INVENTORY;i++): b) B7 ?8 ?, {
  {
' I$ Z. a% W9 D. L   if (dwSrcId == m_Item.dwId)0 V  ^5 h8 ]8 f8 B) P& l3 B- m" P
   {
+ y4 t& m6 }5 S: J+ H( M; B    //id相等 则 改变对应的dest和src
; ?0 S% l& M6 x/ v& S    nTmp = m_Item.nIndex;
8 e: E4 U/ J) @/ N+ E, p5 l# c    m_Item.nIndex = dest;% D2 _9 z$ v" g# }" U. J7 [
   }" h( }$ K) T% H
  }
8 s+ ?! K. J* T9 w, Z  //临时数据保存完毕,交换开始8 l& D5 I% m6 e4 o# W
  for (int i=0;i<MAX_INVENTORY;i++)8 ?7 ]& S; ~; h4 y6 f1 O
  {
! a9 Q# l1 |) R$ L   if (dest == m_Item.nIndex)
& c( o( _6 F! K, D& Z- w   {
+ ]( R9 N8 t( {% ]& z; O7 _) x    //id相等 则 改变对应的dest和src8 e( @8 I9 \( n6 P
    m_Item.nIndex = nTmp;
- L  R8 a7 n' {  p+ x  a# [/ ^  j   }
0 X4 Y# L$ c# q  }
* y* A  |9 s2 W}4 K5 ]. ~& V6 I, u* N. @
};6 h# g# S  y! c1 [6 O
-------------------------------------------------------------------------$ @) A- c. N7 m! J+ v+ u
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" }) T+ H8 O  ~搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 e" m- ~* Y2 h% F紧靠其上添加:! I: G2 A3 i% y, ^6 e$ c. |! U
if( pWndBase == &m_wndMenu )
) S6 g# }& C: J4 {8 d5 o+ B{
9 U: X: D4 }8 y: s  switch( nID )
# G, c/ m) U+ B; i  {
% i6 ]1 T6 J. J5 o  case 2:
% T: N: j. \, D( ^" V: T3 M- X4 Q   {
' x! _/ k: Z: k% n! s$ Z: @' v    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. M& F9 [* S" U3 [; Z" t, J8 Q/ m1 t    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))  w7 ?* E6 M( {' c) e% Y
    {& q0 ~7 d' c( ]  u# G/ d: A$ ]* Y
     break;
) ~# p8 t/ d7 p# h    }4 A3 S1 |" B4 j( I0 ~
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& B( y% R5 l( Q6 S/ M  O! ]( z
    {( k9 X0 d$ h' K- s
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# ]' g2 q: @4 b2 I" @     if( !pItemElem )+ W$ [- b0 O( Y
      continue;
( W9 j; A. {2 P2 x     if(pItemElem->GetExtra() > 0); d3 C% z: `2 j# E5 h8 F9 W
      continue;7 I- `1 A8 ~" s! ]) e
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 L8 f" \/ F* F5 d. I1 T) j  [% }
      continue;2 y4 W" h# x1 u. o+ l% Y
     if( g_pPlayer->IsUsing( pItemElem ) )
  I2 x9 @" s& `  {/ F+ q1 b      continue;5 }: @8 k5 u/ `+ M5 s( Y; @0 E
     if( pItemElem->IsUndestructable() == TRUE ), q+ T8 d2 _" k$ `
     {
0 ?1 i& f/ s. C      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, _' {* B1 N" Z" \$ F# Y& D
      continue;: N6 X$ `- Y9 z4 C
     }
" Z: L$ z! F. r6 I3 G1 j4 c     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& S! p9 I" r! j" U! M$ d; z
    }  V& w- v3 U* ~( `# }0 K$ t" L
    break;
! e4 \9 f7 h& X   }( C) l) m/ l- {$ M
  case 1:! o5 o# q, H" b- B7 u- l
   {' Q. C) N4 J4 m* ~( k$ `% A
    //整理背包5 z/ I0 Z' O0 m! {9 E2 m& e
    //////////////////////////////////////////////////////////////////////////
1 e; v' @3 h# u/ F% C4 y    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ J1 }3 E% ]/ C1 |4 `    //////////////////////////////////////////////////////////////////////////
5 A8 j, C1 F5 _" i' s+ L    //////////////////////////////////////////////////////////////////////////7 y' k5 H% u4 w( t5 C9 W
    CInventorySort* pInvSort = new CInventorySort;* Q1 {" `0 ]1 |+ o7 l$ s
    vector <sItem> vItem;# J6 ]* ]4 v+ H' \$ e' n" W
    vItem.resize(MAX_INVENTORY);//初始化大小) n. z$ g9 I& [& y' |- C
     //////////////////////////////////////////////////////////////////////////
# M/ e% o: s2 T/ E# I4 X' [     //填充数据# N2 {2 _* S- t/ Q" r* T9 M
     for (int i=0;i<MAX_INVENTORY;i++)  Z1 g7 t9 P9 ^. U
     {
3 S) C) r( Q. ?7 N      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 J' ?- \0 }+ W% Q  I6 p      if (!pItemElem)
0 `$ {# }# k1 e7 g      {. R+ u# K2 v  z) y8 y
       vItem.dwKind2 = 0xffffffff;
8 l. t) S# z# q" u       vItem.dwItemId = 0xffffffff;
) o/ U( |9 f2 W% G9 ]- E       vItem.nIndex = i;
3 Y3 [) T6 A$ |4 G- \, S/ A      }else {  o! v+ h; t* ~% y# Z6 y0 O
       ItemProp* pProp = pItemElem->GetProp();1 {* K6 J: h8 ]8 A
       vItem.dwKind2 = pProp->dwItemKind2;
1 q  Y7 ^3 A( }9 M( J. c       vItem.dwItemId = pItemElem->m_dwItemId;0 c4 ^) ^1 n2 h8 |* r0 [, l% [
       vItem.nIndex = i;- r5 `2 r- {2 I  ^
      }
  M8 l* l  m2 N/ i! x" u  [      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 h! S. q0 _/ c$ r3 o     }* X! D% ?/ W* V$ u, ^
     //////////////////////////////////////////////////////////////////////////
, ?, `/ y5 l4 D% m  Q$ D  B; g     sort(vItem.begin(),vItem.end());//排序+ O6 H/ S, {5 P2 [5 H. z
     //////////////////////////////////////////////////////////////////////////: J4 b! k  t+ G9 B
     //交换
+ ?0 k( e, k1 U3 ?0 T, D6 o, t  U     for (size_t i=0;i<vItem.size();i++)% ?# E+ J; k9 n/ v( c
     {8 m* C# S  S8 ^9 q
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ J; X- V, d" A$ W  F      pInvSort->Add(vItem.nIndex);
3 R# @4 X7 x9 \     }
" \% B8 h: N! x/ A     BYTE nDestPos = 0;
$ t' M' B+ A" Y3 }; S2 Z% Z7 M7 t6 P     for (int i=0;i<MAX_INVENTORY;i++): C* b. m8 Y$ s6 i
     {
% O* {$ n' q% K      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; H" R) }% o& q) ^7 @. Q# R      if (pItemElem)/ G  T6 Q' P- n+ h* ^8 U
      {( f) _+ \+ ]  p) ?4 y; ~
       if (IsUsingItem(pItemElem))7 S6 Z( H) P7 Y: N9 s
       {' q. T9 g: ^5 e8 O, u+ }$ K, h
        //这个位置无法放6 o+ _/ ]5 i; z5 _. q. K2 c
        nDestPos++;! I- J# z6 E9 ^3 `+ C$ w
       }1 p# b$ A/ r' f2 K9 c) ^
      }0 E+ U* q( J; g  S% y
      BYTE nSrc = pInvSort->GetItemSrc(i);
  G8 }! \! Y3 i2 s( c5 j8 g4 q      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" z7 s7 V& `* h# X
      if (pItemElem)& C# ]) C0 G" A( Q
      {
5 i% }2 P7 {( F& `; u$ M: b       if (IsUsingItem(pItemElem)). m3 Z; S  R! N! }% J( s( A
       {
$ s) A7 H7 Z& q6 `' s1 s: Z8 D        //这个道具无法移动,跳过
! S3 V/ _" G+ I0 ~4 t8 A! T        continue;6 M4 f1 Y# y* B3 k- u
       }8 q( F5 e0 W8 n& g2 {
      }else{* E; `% N8 q. x' b
       //空位置 不用动
, O5 e! D2 H% ?( ^  {4 S9 g7 Y       continue;
& E8 }: n6 g1 z+ f+ G$ e; J& `# o      }/ j1 d2 W( D! V/ p4 [
      //////////////////////////////////////////////////////////////////////////6 B3 B5 {- {3 @5 i) w
      //开始移动
( f# ~3 o0 m) n: S4 y4 t! ~      if (nSrc == nDestPos)
4 I5 A! {- ~4 z& J/ C' Y- z      {: Q; u) q4 Z' r& x# T& X3 _# S
       //原地不动
2 \& ^9 s) Z+ l3 H- r3 N       nDestPos++;) G1 D3 c# [# m. V' L
       continue;
( c# y# Z7 |3 ~. C7 V! h/ q      }9 ~# O4 j9 ]2 W
      pInvSort->MoveItem(i,nDestPos);
) q0 G- Y0 F* B      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
4 O9 J6 O! H+ E( y$ d      Sleep(5);: q/ _: d4 N1 g4 l
      //Error("移动 - %d->%d",nSrc,nDestPos);% W: M( o- }" X/ Q( U
      nDestPos++;
. K" y: e6 Y" I/ q4 p1 ^     }+ J+ w7 [: R2 q9 K1 J5 A0 t6 K
     //取第一个元素的信息8 x/ N3 s$ |! \7 x2 G& W+ X
     /*
; Z8 I" [' i) M' U: V     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ C/ W0 S, t* N% r     {
# z* j0 y2 x' b  p, q  V7 s; g      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* j8 Q& B# Q$ F/ L
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 `7 p6 k; x9 v     }& s9 c/ G& q0 Z0 u- X+ R
     */1 q# O) Y% v3 V2 x/ y! g
    //////////////////////////////////////////////////////////////////////////
- y! k) k4 H+ D! _0 @3 {    break;3 o4 O# q1 N9 l7 ]
   }9 R! b, S2 I. J
  } 4 _( n! S' N; N0 ?: j3 x; K  w
}
$ {/ L% K) \& ?; b1 Bm_wndMenu.SetVisible(FALSE);
- t! J7 f4 @2 m4 i. G
) [  ]" w" Z' T  |4 L  C8 Q' U& Z- j' r--------------------------------------------------------------------------------------------------------
% }# C9 A) b# m, L搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ m# c# |% i0 D. v0 A2 e! o
{( Z' o# k/ N# s% M9 S! Y$ S+ W
BaseMouseCursor();
, e. T0 n" j0 K/ g* E/ w* V}! e( u$ }7 e8 c) s: u4 _
在其下添加:
( _6 s/ V9 p3 Mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( r9 ]# _5 C6 d' M* q4 J{5 G. u! s! r1 f: q+ |
m_wndMenu.DeleteAllMenu();
$ C1 Y$ F  C& |0 X; n3 @/ ]3 Tm_wndMenu.CreateMenu(this);5 d2 h! Y0 q- b4 s
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 H: c4 F' Z! n$ Y, k$ \

/ o# D: L4 h7 x. p" a) @5 {' Y$ Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ f" r5 S: ]- L
{7 L: q( p7 x: L
  //P以上级别才可以删除所有道具+ E/ [8 f/ o7 Q, K+ Y  L6 B
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
# ]( }9 ^) q5 t- e$ Z- z& b}! n) d, A( N! X* |
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- z1 \4 a+ p- P  u
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 s9 D5 ]6 S) s( j3 @7 s
m_wndMenu.SetFocus();3 _. I, e8 b# _" Z9 z6 i
}+ @  m  I0 q& o9 {8 @2 B( P
------------------------------------------------------------------------------------------------------------
; f" E) t. f& z( k$ A% R) U*************************
3 `+ f# U, A% @& \: [WndField.h文件4 d. E& g2 g$ F" B( g
*************************
9 G! Y2 s: B9 b- v# T9 }0 w- s- S# L搜索:BOOL m_bReport;
- C7 R7 w; w: I+ m$ c其后添加:
5 ]8 u6 m) n# @, g6 I6 ^CWndMenu m_wndMenu;* m( L% s' ?$ @: f
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ w  s7 z: C& L& H3 `. _) G其后添加:
! o& u- B+ D$ a8 g( d. N) Z8 ]virtual void OnRButtonUp(UINT nFlags, CPoint point);) D# H& }8 F+ K7 K% p/ J

2 i/ D0 I6 j8 f& P# h2 _
/ e& m, F6 X8 q4 g% ^/ Y

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 07:54 , Processed in 0.064622 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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