飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1088

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1088
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
7 f  ^4 B5 D: D+ c  L/ Q% S; y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 ]5 _% v( y& E7 m* b

6 |) g% [5 n- d( \struct sItem
, N9 f! d2 W, d- b! w3 l+ L6 X* g{3 Z: _' s' y' w* |1 d) L2 w4 J- H
DWORD dwId;4 o9 }( ^# R9 ~2 s4 S
DWORD dwKind2;8 z- N2 Q  j8 g! A( Y$ @7 W
DWORD dwItemId;& s& f' T% a, n3 u
BYTE nIndex;
6 l0 v, v/ _7 zsItem(){' T0 s1 i/ v( @  D. n  E
  dwId = dwKind2 = dwItemId = nIndex = 0;; s# Z7 A; ~: _% s' b) {
}* n- {0 Q2 T) J! q
bool operator < (const sItem p2)
4 b8 ]2 u! B& k2 e( D3 h; S{" s- l9 k: S+ e" `: Y. e
  if (dwKind2 == p2.dwKind2): L8 C+ F9 `3 u1 Q
  {
9 g$ Y# N, H" b* z   return dwItemId < p2.dwItemId;
8 k& Y1 x6 H6 [6 ~5 X  }else{, D3 ~- v+ Y8 d$ }- K5 s, \
   return dwKind2 < p2.dwKind2;
  s/ Z6 O' V% m7 r; }1 D! O  }
3 M6 Z" \. }. q! P0 O}
' _; _" c% y9 r1 X! t% H7 S4 _( A};
* J& b, l( J& H8 b: r. t4 |class CInventorySort3 [4 O' }" b4 L
{
5 _" t" f( a0 }) c& Q+ Ipublic:/ E8 S! X( h9 C1 \& p& S) V
CInventorySort()
8 p8 t; ~+ K* e+ h# c. S{
+ c. m* k0 N" n: q# i  m_dwPos = 0;# N; W, ^( V  }
}8 @! \( a) s* H  Y& p/ _: d' ?+ ~- X
~CInventorySort(){}
4 Z  A7 g- |! J) f% Zprivate:
3 U; Y8 B! v+ r9 B. a" MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 \4 d1 ?. n3 g0 m
DWORD m_dwPos;
/ ?+ q  r& T; T; @2 D' dpublic:8 _% x9 b+ E' u- S
void Add(BYTE nIndex)4 n  K* C1 y, ^7 W( \
{
7 W' N: L  @0 y  ]0 S  if (m_dwPos >= MAX_INVENTORY)+ Q7 j0 H( ^5 e  w  w1 r( c
  {
6 \; A  }: e! b( ]- D0 G$ d1 u/ s   return;
4 U8 t; W1 ]9 e) Y3 k  }
$ [, b4 z6 E" K1 S/ G' ^  m_Item[m_dwPos].nIndex = nIndex;
( d3 u  p+ w0 f. i+ B  m_Item[m_dwPos].dwId = m_dwPos;/ x7 u/ p- T& o5 z# q. G
  m_dwPos++;6 b, r% E# ~/ t7 x; X
}/ R8 j0 A3 u4 z: T
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ G3 x& o" j! a# {; M+ n1 F{
" M+ @" M7 E. w' R; o  for (int i=0;i<MAX_INVENTORY;i++)' y) V  E$ V( a3 Q( b% _3 r% G
  {
5 c/ t; n. k0 u* h9 \% p6 ~   if (m_Item.dwId == dwId)
+ ?; G1 J" r3 Z" D7 [+ p   {( `- a) \( r8 }3 T. c1 k
    return m_Item.nIndex;4 c. e$ r# W) U! a7 c$ P% }% U
   }2 U/ t9 S! H* m7 q/ p
  }2 t+ W5 z" d4 ?- k- b+ K! x
  return 255;
9 l' X9 Q# J& i: R+ I+ k/ t}
. E, \) W' M2 S' Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
  |4 l, v! d( @7 F6 v{
; {& C8 i: Z& j' u; j  BYTE nTmp = 0;
2 w; X3 N# c& G6 H" P# a  |' l  bool bDest = false,bSrc = false;" U; C  R' d, C  d1 t$ X4 p
  for (int i=0;i<MAX_INVENTORY;i++)& n9 |: u5 u& F9 }, h9 |$ ]( W
  {; n$ W# [7 k/ [: v) Z" d
   if (dwSrcId == m_Item.dwId)2 b5 }" l+ h# y* y* W- |5 u" L" P
   {3 i- u- C1 ]: H# s! I0 C& p
    //id相等 则 改变对应的dest和src
1 K1 ~( \( t9 D- _( F# y    nTmp = m_Item.nIndex;' I+ q0 {7 o9 J5 W1 F# r
    m_Item.nIndex = dest;
+ k" [% d' h% d. [% N! Y6 ~8 Z   }+ m7 Q( Q" Y8 m+ V; @. ~2 {& c
  }' G& n' v2 j. U, d) ?9 ], v
  //临时数据保存完毕,交换开始9 \- i7 v, `* W! X7 h6 u
  for (int i=0;i<MAX_INVENTORY;i++)
2 w, r1 I- a( x% n  {
) l$ A* m* \& K1 z0 y   if (dest == m_Item.nIndex)5 E5 V- S; r% A' m+ \
   {9 C7 f' T3 A% S# N) p' b2 d
    //id相等 则 改变对应的dest和src
+ X/ D# k5 t! u0 X7 u1 b* N    m_Item.nIndex = nTmp;) B# z# Y% ~) ]/ @6 j$ W0 T
   }
+ Y* b8 @6 V7 h2 W6 o" T  }
( C4 W" _8 p6 O/ T}
: ~$ U9 A4 o2 O# }$ ^};5 I, O1 `4 N- S+ `3 j- Q
-------------------------------------------------------------------------2 Q2 |" I0 z9 q& V' C. b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ B8 J# U4 L5 {+ Y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ p4 G5 ]4 c7 m  |
紧靠其上添加:
( `+ ~% [6 V" r; G. U6 Pif( pWndBase == &m_wndMenu )
0 T+ ?7 d" l% ^" x" f2 u+ q{/ Q7 Q6 y: L3 h
  switch( nID )
  G! p- z& M, O% e  {
; |' i) |. q* h+ l$ u5 P. y% P  case 2:# N0 b* P- n; k" R0 O/ @, Q
   {
8 u" D3 G% c5 C    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: C- _% @4 z  s+ a- Z& t- a& [
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 @5 {3 K, L$ M7 C5 M& V
    {; l4 x  g5 S% b5 Y  a. T( }
     break;
/ S1 Z& C/ V' J0 O8 d  x9 [    }
9 P4 K9 v4 y; w( H    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 S% g8 p2 o9 g1 t, B
    {
$ ?; }% a7 }) K% Q     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 g. V9 W6 D$ r# ~
     if( !pItemElem )
2 V* U  ?9 m" s" Q2 e      continue;8 O2 @  Y1 `! c
     if(pItemElem->GetExtra() > 0)# P" J+ e0 Y7 P& y! P
      continue;
! P, ~1 w+ u  }     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 `9 w) e. A1 p2 h
      continue;9 s# T+ V! b0 V6 @+ V7 m3 e
     if( g_pPlayer->IsUsing( pItemElem ) )
* f) f. p; ?" |' k* o      continue;
0 Q& v( J8 |2 ]9 G. ]2 k     if( pItemElem->IsUndestructable() == TRUE )& S7 d9 s: \. p; f/ l, T% K. U/ W
     {
8 `& a1 Y' O* x/ T      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( `: ]1 D4 T) p: G: o, o
      continue;
* H4 G  r( C- G, E1 A/ n     }
( G  |6 W9 c/ U8 `$ D( C     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ g. W. x# F9 m2 o" g7 k- g
    }/ |- T% \- ~: e/ T
    break;
# H8 @# S8 T. Z) C8 B   }
+ R! e1 o2 P& [, S- o0 X  case 1:
+ p1 z- z5 y4 {1 y4 t   {
* @9 ?- t/ _+ p    //整理背包3 s' ?8 _; ~4 u! e( D$ O. f9 h# G
    //////////////////////////////////////////////////////////////////////////
/ i$ X( }$ b: l) ?) E, o    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ i+ C3 k: Q4 f7 |8 P    //////////////////////////////////////////////////////////////////////////* e$ Q6 S; @# V0 k, V( o, [! F3 d
    //////////////////////////////////////////////////////////////////////////
1 N) |, ?6 c' j, Y6 O    CInventorySort* pInvSort = new CInventorySort;
4 x3 C( J# m% M7 q0 B    vector <sItem> vItem;
( Z7 F5 g4 X0 r8 y' P* t    vItem.resize(MAX_INVENTORY);//初始化大小
4 i% }2 n; e* _' p" r     //////////////////////////////////////////////////////////////////////////
! e1 S: D' m8 {. s/ p" ?     //填充数据
# X$ ^% s& m& N8 D3 t1 V; k$ E4 s  |     for (int i=0;i<MAX_INVENTORY;i++)
% G3 _8 l3 d0 p/ S     {
1 D( ^) e# c4 r& f2 b8 ^. t      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 h7 |+ C  q- u6 H: l$ J" t! k5 J* X
      if (!pItemElem)  Q- [4 b1 X1 [7 \- F4 P+ v
      {
0 Z, _) R" `' M" z) u       vItem.dwKind2 = 0xffffffff;0 @4 t& j0 r8 H* I4 ~
       vItem.dwItemId = 0xffffffff;1 g1 s  ]- x: _2 B8 P. A! k
       vItem.nIndex = i;# G$ |# ~$ H; G
      }else {
) d3 Z/ x* `1 V7 Y5 D       ItemProp* pProp = pItemElem->GetProp();
5 M: X! @7 P, ^       vItem.dwKind2 = pProp->dwItemKind2;& P+ J% T* ~2 z6 O
       vItem.dwItemId = pItemElem->m_dwItemId;/ f: H- q/ b0 B" B. \1 p- x
       vItem.nIndex = i;8 |* m! d( M4 e: d
      }
. p' W7 F, T" q8 l      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" l3 c+ e+ l! F" L  u3 K
     }3 [5 v4 v* _8 ]3 P
     //////////////////////////////////////////////////////////////////////////
( [7 ~  i* t8 r+ u     sort(vItem.begin(),vItem.end());//排序* w! L# A( M- I( H0 ^9 \6 n1 Y
     //////////////////////////////////////////////////////////////////////////
& u. J  z( U# f: t  a     //交换
0 I9 Y" C7 `8 _7 K     for (size_t i=0;i<vItem.size();i++)
2 X7 K7 q5 A  r. o3 o) G5 \     {$ r- k( a8 P6 i
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! P( }" `0 I0 K
      pInvSort->Add(vItem.nIndex);
8 v. }1 O5 v" B! h3 d     }* u9 }$ @: g* u
     BYTE nDestPos = 0;: Z4 w0 d7 M# o* J4 \& F
     for (int i=0;i<MAX_INVENTORY;i++)" Q. h; Y& ]' s4 V; t  _3 }: Z
     {( o  f6 H( L7 ~8 K, L% s
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' a4 P2 e* q& p5 _
      if (pItemElem)! H0 ], d" y" m
      {& l& M8 R3 J, |  u) ]9 W
       if (IsUsingItem(pItemElem))
/ D4 A, p# Z( V- @       {6 p+ f/ Z# A+ [
        //这个位置无法放
1 d+ O, F% S. @1 `        nDestPos++;0 V/ h* R# O7 [) M
       }9 H+ s8 Q2 c% {$ z) [
      }
( U6 t: L$ |0 v+ Z3 y      BYTE nSrc = pInvSort->GetItemSrc(i);
. f# t( S+ Z& a5 L      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 s& `( F/ T2 ]7 c& i4 a( r
      if (pItemElem)! U% T; V0 [! `% h: o0 {9 d( S
      {1 V- s/ q, v7 x
       if (IsUsingItem(pItemElem))
/ O( q6 C' p% N9 O2 I  b* S       {6 J& @& N' W) J$ n8 P4 a5 }
        //这个道具无法移动,跳过
6 o9 z6 @& q! S) B4 N4 H        continue;+ y( u5 V1 h  `9 U
       }
3 _" E- T/ Q% e" [  Y+ W      }else{) |1 S  K# X. ~3 [9 N5 {6 p
       //空位置 不用动
$ C- Z& z; h9 X, r       continue;$ V, j5 g" o( c0 D& g  M
      }
8 ]* J$ |; g$ R- N# c# y      //////////////////////////////////////////////////////////////////////////4 Y5 o6 _) j# T, G, @) @( K/ e
      //开始移动( A# Z* C+ K# G+ l9 v: O
      if (nSrc == nDestPos)
4 n" }, q/ _4 @3 ~* [1 _      {$ t1 A1 H' n2 D/ ]. o% U: K
       //原地不动
, K+ ^+ e) g: }. e+ Q       nDestPos++;8 ^1 ^. t' Z% c
       continue;! |' d8 @5 o+ ~' X- w; x
      }
) R6 e# ?9 _, e' ^& D$ J      pInvSort->MoveItem(i,nDestPos);
3 Y& ]' U/ o6 f$ I8 g      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" r1 s. O# @0 g/ o4 G+ J      Sleep(5);% ~* v" `1 f7 K% Q1 N7 z8 ]
      //Error("移动 - %d->%d",nSrc,nDestPos);
# o$ o$ ]/ Q0 w      nDestPos++;
& ~# @6 t( r4 x- l/ ~" z' v     }
6 V% V9 L' `4 r; o( C6 J! e     //取第一个元素的信息
3 U, u- x0 r0 M4 W  H     /*
& P7 c! W% {8 b2 `     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ q; {& e0 t& q; i! ?3 E4 ~8 f. j8 {8 ~     {
6 D+ e: s' Z$ c) t5 |      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) i( z4 t1 K6 J
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& P( S% O# I9 F7 _: C! F     }$ C) {+ ]& ]7 b7 \
     */
/ z& W+ H4 |% Z    //////////////////////////////////////////////////////////////////////////
* m3 `* z" L4 r! a% M: @. @) K    break;8 l* b2 i) c# ]# f( h$ H
   }
! e# ?9 C9 J' X4 R5 B, @' J/ x  }
" t5 f4 ^) m; R}
' }, s. Y, a, u, ~5 \m_wndMenu.SetVisible(FALSE);
) e1 l1 d" t+ G* K3 I" j
* z/ n. ]5 W+ q* o0 B--------------------------------------------------------------------------------------------------------- x- Z# w$ n, U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 L) K+ E8 ?  g5 @1 N- h( }/ K{: E1 s# l9 u# z/ h1 A) [: D) J
BaseMouseCursor();  M/ J% I. P3 o: G0 n
}* g8 w3 ~$ n, |" p- Z3 `
在其下添加:1 D  _0 A# {; A& t: Z4 ]9 s3 ?8 D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), [. m4 z$ ?. ~
{6 ?* n/ ]% m) F* s- s
m_wndMenu.DeleteAllMenu();3 D& C2 ]) ^9 b+ P, z
m_wndMenu.CreateMenu(this);
6 S$ Z0 a( _+ @3 Z) M  Tm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 u8 r* d: g$ S" F

. C- r) m) |7 V2 h! |+ r3 eif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 Y( s4 F/ N9 M* A{
4 }- t! D& N2 D( H# P2 n$ M' I% G  //P以上级别才可以删除所有道具
9 a. K2 T7 k- D7 M  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: D- H6 x/ w, t0 `}1 P8 O) N* ~! S! C4 {1 l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
' N" |# H1 V- W6 r6 Y; S* Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
  O2 G2 C) c/ ^' u7 om_wndMenu.SetFocus();
) a( `5 j* y0 j) n}1 I; Y- y4 x# g3 [& e" m+ r
------------------------------------------------------------------------------------------------------------
9 s: D2 s) C  l* U0 H  B*************************
' c6 S; O$ ~( _" E! `WndField.h文件
2 ?6 _0 g$ l0 k, T9 `0 O*************************6 x. u3 k6 E1 E& R5 N5 B: U& f
搜索:BOOL m_bReport;' F% M/ {- w% G! d( c" w4 F" a4 I
其后添加:
3 P- Y6 b$ K* g4 J: [CWndMenu m_wndMenu;
( `5 w8 b& y% C$ o. J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) B4 F# L: k2 [! x# U% A其后添加:
! ~8 v0 T/ H3 b6 g% X) ^6 e/ evirtual void OnRButtonUp(UINT nFlags, CPoint point);1 v/ S; @# b+ g1 O' n* h
# R5 H( z4 L! w' c$ h+ n/ O

' J+ z3 {6 f( F: v* O4 B0 t9 K

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-25 10:19 , Processed in 0.061981 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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