飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1088

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1088
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
7 {4 V: j0 _: o1 R4 t: S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& I) s9 q" s) Z3 c9 ?% I

: z- W7 ]# m& z. b& V: o: B2 mstruct sItem
+ G+ D: k8 v. i" u9 G{. m' ~/ Y. b" S! g: t' ^% F1 i
DWORD dwId;
/ N/ `  \3 {/ B1 I3 SDWORD dwKind2;# Q1 q- {+ G9 }
DWORD dwItemId;% D% m# p% `* w2 e) m' c: ~
BYTE nIndex;
( `- W6 n5 F  v3 }* @3 Z5 gsItem(){) S0 M- j$ f5 @0 _9 Y; O
  dwId = dwKind2 = dwItemId = nIndex = 0;
/ L- ^6 _# o; \4 ?8 A+ P}; h) b" b; X' h! k
bool operator < (const sItem p2)
/ R7 G% }6 t2 \) g* S/ X9 R{
) J& I  a4 n& r/ ^2 k  if (dwKind2 == p2.dwKind2)
, o. b% W  u0 Y! d3 W  {' m3 }/ y; e+ c+ G3 y# `- B
   return dwItemId < p2.dwItemId;1 K2 \/ U! y  \
  }else{
  M4 ^3 q3 a# U5 V3 [8 n* S   return dwKind2 < p2.dwKind2;" O! f; I$ K2 ?3 j1 y, q5 n
  }
; Q! H0 B( L0 U) g. |* h; b! ]}
7 c) a/ G4 m/ j5 I; c5 z" q};
- L$ @3 I; {- E1 l* [class CInventorySort- C/ Z! D0 |4 N+ p7 u+ y
{. M5 j; e+ w- E$ n, Y- R& A! z
public:/ n. A6 i5 k4 x, A2 X8 g
CInventorySort()
' @# z7 y2 T, }/ M. m$ c  r9 C{! H7 d. D6 J" x( u) Q, {5 ^8 a: r
  m_dwPos = 0;& c, J5 G" l* `0 ^1 ~8 w
}
! |1 L2 ^$ r+ P~CInventorySort(){}
* ?5 t3 k4 [7 g1 Z1 Lprivate:
4 g8 i# ?( I8 J6 esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" Q/ Q- G8 n: r) p1 {2 u% q. p3 fDWORD m_dwPos;/ K# v# N$ v6 X* m
public:
+ ?5 \1 A# E+ Y. Mvoid Add(BYTE nIndex)2 L1 d* H! ]- ~
{# _3 M- y8 d: h9 L6 W& }6 J' p
  if (m_dwPos >= MAX_INVENTORY)
: `1 L5 @/ N$ H) W. n+ r  {
) _% s" q4 Z$ M! V7 w   return;
* M, ?2 k5 \' f& b/ h% d  }
5 o; y$ L. ~2 G3 a3 l8 u2 w# h  m_Item[m_dwPos].nIndex = nIndex;
/ n  u9 G1 b8 D  m_Item[m_dwPos].dwId = m_dwPos;
7 b8 c9 k6 L3 J5 t( T  m_dwPos++;6 n8 Y3 l$ s% \) ?! J% i$ p
}
/ u0 g. c. O: B" |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 x3 Y# f6 x3 E2 t2 W0 c! q{# O3 V' _2 c$ j( F, O
  for (int i=0;i<MAX_INVENTORY;i++)5 c& c  S5 ?( g1 [; X' ?9 b
  {
* i8 T$ o5 P" D$ `- y# l+ r   if (m_Item.dwId == dwId)
1 Q$ [2 O2 L& y' e   {6 }% R8 a( V. A! Y8 |
    return m_Item.nIndex;
5 Y" j  O& U4 q5 Q0 Q' r   }
" w! i1 l5 ?. w" c; @% P" U  }
" C& a( v2 P7 \1 i! m+ P, \  return 255;( K2 {/ j  K  H, H
}  P. ~0 `3 h: c" a  t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 M, X: u+ b- ]8 s0 y
{
  o( w9 O/ F# X# A7 |/ |4 d' e  BYTE nTmp = 0;% e* _* \" ~. v6 n1 K0 \
  bool bDest = false,bSrc = false;7 \; q/ ~7 N: }* c$ u( D( L$ Z
  for (int i=0;i<MAX_INVENTORY;i++)
# `* L% Z, H( b0 f0 X, j  {
3 j5 g6 I4 S' H3 a: o* V   if (dwSrcId == m_Item.dwId)
8 `5 R/ T* u" @) q% {; a8 x# g   {5 F; o! R/ N$ H) q( Y# |
    //id相等 则 改变对应的dest和src0 h! t( n1 \9 K6 z6 h5 V' a) N, W( f! B
    nTmp = m_Item.nIndex;/ N) ]' K! Q/ @+ O4 b$ K5 V
    m_Item.nIndex = dest;
2 p0 X% K9 z7 e8 B   }  X) ]. X: h4 T+ |% X
  }6 s& Q  ^" ?& |3 a# _
  //临时数据保存完毕,交换开始  U  Z9 F$ _+ c/ m
  for (int i=0;i<MAX_INVENTORY;i++). r* Y$ Y: u* v: h' u) o  ~
  {
% M  @) c; W' i" {/ O   if (dest == m_Item.nIndex)6 r+ V: }' A* U% j; |9 Q
   {: U$ L5 J1 i9 Z, s( ?
    //id相等 则 改变对应的dest和src
. l1 e" x0 {: k/ ?$ L/ N% {    m_Item.nIndex = nTmp;
* H, U' V1 X5 `7 H& \   }
& T$ u- `; `0 n: Q4 O/ l  }* [% ]7 u: ?" j/ G# c/ Z
}) _) g0 f, P3 {) M" D; \: Q
};. r: _7 R$ ^* d- ^4 l
-------------------------------------------------------------------------
4 v$ q# Q% a/ i( H2 S" h依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% X3 h! c3 r- @9 {4 Z; @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 s; w5 k4 Q& J- j紧靠其上添加:
, O2 e, O, h9 @7 }3 Vif( pWndBase == &m_wndMenu )
1 M# Q9 c+ i9 H' {% Z3 k+ I{
; |- V1 X5 ]) i$ x( A  switch( nID )
5 E! M: T* i  W. \' D  {
# h: {* K4 f! K( `1 q1 {: s  case 2:
! v4 }: L- G; w! y   {
. I+ X4 X1 e2 e! [3 n    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ D0 T0 Y1 l1 b/ }( m$ A    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). l2 F7 O, b  f  @- W7 Y% W5 E7 G
    {+ N! J  ?9 R: c  E
     break;: F0 h6 G) u( o9 `6 K
    }
5 P9 `7 W: d5 B# E9 w/ {; c1 n    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 Y7 R5 Q. i6 M( d& M    {! e8 t/ g/ p% W0 j% Z4 s
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; N2 A+ }' p% ?. v5 c     if( !pItemElem )
$ y% x" l2 d$ d- b; \# F      continue;
) B9 S8 x8 o2 R& D! u3 a& P     if(pItemElem->GetExtra() > 0)
) g0 P$ U  R" E4 n, [2 J      continue;
5 i# r/ a7 F7 z+ l  {7 c     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
& C# @8 w4 p6 B! c8 b+ q      continue;# w& U$ \$ Y; c& Y# `3 R
     if( g_pPlayer->IsUsing( pItemElem ) )+ `1 q. Z+ ~) [  e
      continue;0 g% c! ]# M+ k* w
     if( pItemElem->IsUndestructable() == TRUE )
1 Y6 P0 P, W! R6 R9 `& X     {
! o  m: F# W3 A9 z# p" k- _      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; z0 b9 e3 I: m% w6 S; s& t
      continue;; f4 l! p& F; h1 _/ \3 R
     }
. W+ n' _$ A) K- I     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ I: n; M( s5 p' r* t
    }' k- H3 j) e9 K( O9 c$ t! q
    break;. `2 }" ~5 c  ^& e, y" Y/ Z2 u) O
   }
& G+ k. ?/ M$ j  case 1:5 d$ p0 J* P, u
   {
7 U6 {% }: F$ y1 ]$ d% X' H7 W    //整理背包" [- S) l4 r3 S7 k6 v- k
    //////////////////////////////////////////////////////////////////////////
, m8 j+ d4 b5 B7 b/ `, p8 m. s    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" H$ k5 l- N1 m; j
    //////////////////////////////////////////////////////////////////////////5 t" r5 s. z# z- l+ p* c8 _
    //////////////////////////////////////////////////////////////////////////
. U. D9 J2 m# a, X    CInventorySort* pInvSort = new CInventorySort;9 f  a+ _0 e. h) k
    vector <sItem> vItem;6 r" i. A- E& N+ B' W4 s! ]! E
    vItem.resize(MAX_INVENTORY);//初始化大小( b* Y: J* S8 T- P" Z
     //////////////////////////////////////////////////////////////////////////
3 _. Z( H* e: `7 ]9 K  n     //填充数据
, z4 L% v( K7 l3 `* T$ K6 p     for (int i=0;i<MAX_INVENTORY;i++)2 H9 A: X3 n) a, n' S
     {
' x9 n8 I+ j$ _+ m# e8 V. ?9 |      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ o# |/ w' m  l" e( b4 }
      if (!pItemElem)# }/ z$ h) K0 \8 I, y% v
      {
8 [  `7 J4 \( a2 }+ ^/ {0 b" V       vItem.dwKind2 = 0xffffffff;
8 ]+ r2 Y" v" i       vItem.dwItemId = 0xffffffff;
/ W+ |& z# Z; @       vItem.nIndex = i;
( J" o( n; C3 M" I0 ]" ~: b      }else {
+ A' v  k% b% l4 Z/ i       ItemProp* pProp = pItemElem->GetProp();
; \# ]* [; j5 x; K4 Q       vItem.dwKind2 = pProp->dwItemKind2;
" Q/ A  b+ ]) m/ x       vItem.dwItemId = pItemElem->m_dwItemId;* J$ N( u# R$ [7 C. I
       vItem.nIndex = i;
2 P* E1 q! M! ^, U- W! h. d2 a  X, ?  U      }1 x6 X0 P9 e) o6 c. @7 g# N# }; [
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
  O# k* L/ t/ n     }
, E( q5 d0 c5 D9 T     //////////////////////////////////////////////////////////////////////////
+ l* f/ y8 ?% D& B  u     sort(vItem.begin(),vItem.end());//排序2 Y2 n7 y3 ~! }* }0 V% r
     //////////////////////////////////////////////////////////////////////////% C7 x; v$ Y5 O0 A* t( b
     //交换- d  {4 h2 k+ ^/ O5 z
     for (size_t i=0;i<vItem.size();i++)) Q5 t# P/ Z% W7 i; l' ^
     {
7 @, i0 v: U" o! ?9 C      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& z2 K* B# y$ W
      pInvSort->Add(vItem.nIndex);
; f* E5 M) Z: j5 C     }
+ Q+ w9 t/ Y: y7 i! M/ O. M     BYTE nDestPos = 0;( H4 ?2 f0 Z! Z7 C
     for (int i=0;i<MAX_INVENTORY;i++)0 ^. ]" S8 U6 V" j3 ^8 |) ]
     {8 y& ^- k( K; [4 S6 g1 X0 H
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 P1 {4 X& x$ a9 T
      if (pItemElem)  B( Y' U  P) @
      {
3 _0 u' g9 @* _4 i7 ~, A       if (IsUsingItem(pItemElem))1 R; r; X" x; T. U, w; R+ q
       {0 v, B7 r; E; q% ]  I6 A
        //这个位置无法放
8 Y, e9 D* v. F6 _# r        nDestPos++;
; z1 n8 w! J3 j- q0 S# y7 N4 t+ r       }/ L" J" k! z2 A3 D8 G
      }
/ L5 {9 \7 f- |, ]& V$ |      BYTE nSrc = pInvSort->GetItemSrc(i);5 G% F6 N9 t+ l( T5 P- u! ^
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 {: E+ A. ^5 }" ]: J8 f
      if (pItemElem)! z% v# L1 h1 w5 U, Y
      {2 v( e8 }  x: Y# v. m. G+ f' j
       if (IsUsingItem(pItemElem))
- h6 G7 a/ V! D5 L+ o       {" m, q( ]/ s+ L$ v8 a" q4 B3 o% w
        //这个道具无法移动,跳过% L6 L1 S  _3 g) p1 s3 T0 O) k
        continue;
4 d- S+ K( C) f' j, F8 f       }
& R( B) ]2 i* @1 h% q- S      }else{) N# c' e+ P4 D( A& o8 {' b- T
       //空位置 不用动
3 D! R$ v( S' G* _. O       continue;
6 E' Q% Y' k- X# \5 l5 t" @      }4 J3 L9 V( F% I+ ]
      //////////////////////////////////////////////////////////////////////////- L- n( c! ~8 A
      //开始移动
! _* m% f+ L" z0 P1 V- S      if (nSrc == nDestPos)% [8 ^8 L* g) K3 m8 Y, ?' ]- W
      {8 b" z# {% S& {& O. L3 F( b: d
       //原地不动
- T% ~. r( n: ~) q  t* i       nDestPos++;
, z1 J4 Q* J. p& g: S       continue;
5 O( o) i$ v8 v$ j1 e      }. A% a- N, j1 Z9 s4 M5 x
      pInvSort->MoveItem(i,nDestPos);2 _) f# n' f  O& a/ S
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);% j- z! }! m; V) l% |  {/ C6 u
      Sleep(5);
. V' R- R; |: Y      //Error("移动 - %d->%d",nSrc,nDestPos);
" O' ]5 k! P, j) Y: j* S      nDestPos++;
. e+ m" W! p; O9 z     }
* s* g) E, T" S     //取第一个元素的信息1 i5 J) I5 t! Y
     /*0 r% X5 w, O3 z( i1 N
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 b1 k" g! j- ?  {" M, n1 h7 d6 v     {
4 R0 W5 g! Z. o7 [$ T      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ v/ {9 O! g$ u& d! j6 q; A  A
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& P7 N6 g+ Z7 u; q
     }
# G, W5 r+ g  n9 L5 p! S( ^     */
: U( p9 A8 u6 `* z3 }    //////////////////////////////////////////////////////////////////////////
5 u: L' m' z2 _  t    break;) K. b1 X$ o( J
   }* n8 H( }) G' U; i( F) ~4 \! I
  } , a- x: E, r" e* D+ `* V1 n) m! Y
}
9 Q. {. M0 K! em_wndMenu.SetVisible(FALSE);; U; N) r4 B" g

# V8 ^$ x' ]# x7 ~  W--------------------------------------------------------------------------------------------------------0 S; V* G2 s# c" f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 }9 A( t4 `1 h. a; {- H5 T1 f* r{3 \/ c8 u+ w' A; C+ b6 [! O/ O; H* q
BaseMouseCursor();
$ m8 ?4 X/ j1 [& a0 N1 V}2 l: @' C4 N+ w: N4 k1 Q2 q% T
在其下添加:
7 e0 n, [+ v7 r: ?void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 B; \! v: ~$ ~3 [+ T$ N5 [/ m, R
{
5 V# P, |) ]4 d# j0 im_wndMenu.DeleteAllMenu();
3 U: w: a, B/ ]  a& H# um_wndMenu.CreateMenu(this);, J. X" j6 Q- _) D
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 r) ~3 W. T. A- a% T
# o4 F# l9 G5 I$ C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# R. d! N* {7 Y: D' C) g
{
3 o8 ?2 e0 E& O1 W# T- C9 N1 H  //P以上级别才可以删除所有道具# I8 K# L; p0 r# b' I# K: Y* Q( \( O: q
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: |, R2 ]7 P- H; {5 a8 W7 \2 c: q}
* Z# k1 ]& P% x7 _# _, rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" d( Z; s# C/ b! @7 w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% n; X7 c2 W: u, U$ ~- rm_wndMenu.SetFocus();
9 Y, x; R+ l) {% k}
8 y0 z; x' V1 Y% q------------------------------------------------------------------------------------------------------------
- n3 c1 u& s% I- v3 R*************************: [) Q% J1 t( K; c
WndField.h文件
" m3 n, l2 W9 ?! g) r*************************
$ |, z: j/ M# y. m7 }) M搜索:BOOL m_bReport;* B2 @) G% T3 \& V9 u3 Q
其后添加:3 v; s/ Q% E; L" z" \
CWndMenu m_wndMenu;
$ Y; o. q7 s6 E( U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);) R- g5 g3 n, V& |' }
其后添加:
2 \) R9 x+ F6 n: p' L1 I$ p  fvirtual void OnRButtonUp(UINT nFlags, CPoint point);
9 L, D, v" i+ q+ h, _- @  e1 o% X( f8 x  l! ]5 A" J

' a4 Y2 f$ I( D& E

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-25 18:12 , Processed in 0.101365 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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