飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1090

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1090
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
3 w$ Q& p4 u; ^2 H! _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& b$ _' F" a$ R) [- X& c$ q) B6 r. a
struct sItem
4 t* Z7 {! p, F$ v$ c{$ o/ ^! i+ F& o  Y4 j4 \) a# H6 L& H
DWORD dwId;
' W# C* v8 c9 C$ S0 b; |DWORD dwKind2;
$ p# s3 ~/ E* dDWORD dwItemId;
: B+ c+ ~) O7 J) ?2 w$ yBYTE nIndex;
' @  }0 G. Q: T; psItem(){
8 P4 A  ]$ X! P9 I! X  dwId = dwKind2 = dwItemId = nIndex = 0;3 a- @" L& `& x# U/ E
}- C' U/ c0 }4 |
bool operator < (const sItem p2)
1 K( y* d1 t0 h# a{
* J) s# O/ j+ T0 I  if (dwKind2 == p2.dwKind2)# }# e9 V+ z8 g7 C
  {5 }+ K2 O* J: Q' t
   return dwItemId < p2.dwItemId;
4 S# R, I) _2 W. U( U9 [7 A  }else{
* z5 G5 d  X  m, K- z9 S3 ?   return dwKind2 < p2.dwKind2;
* e6 m, E' e. H! _  M7 i4 }9 w$ _* d  }
5 |* T, [& b) |. V1 P, o, U}
. l7 k/ I/ f4 u; Z};. }6 w9 _; P0 U8 F( a0 Q2 V
class CInventorySort
! J. p' O0 ]' O$ e/ c# |{
4 I- A! @6 i, c/ F9 J7 a: rpublic:) ]* K, T: @' m6 K5 N5 F
CInventorySort()
( C  S5 y2 l8 X/ M, Y& ~' y7 b{. e( z) A  S! H* z% y& c9 l
  m_dwPos = 0;
  r1 x- ^# z. [+ D8 J}5 o% y% b( ]0 V- d2 O
~CInventorySort(){}. U2 S1 v' p: ~- P
private:
5 w7 ~+ }8 _- s3 w: {  z3 l8 X6 h  vsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& J& x& y8 X0 @" r! k4 H/ c0 aDWORD m_dwPos;) B* Q4 h  o1 S
public:
# L! n; y; ~5 \9 a2 `- ?void Add(BYTE nIndex)/ G0 b% ]0 K3 P& v1 r
{
. d- U. b) k& i3 W7 p  if (m_dwPos >= MAX_INVENTORY)
0 W, M4 d. E/ |  H  {
: \' ?9 A; V( F; @9 r* s- x# c) A( R   return;
* H6 V( W) @4 u7 y. e8 }  }+ u1 _' D8 T8 J& l
  m_Item[m_dwPos].nIndex = nIndex;- g7 }, l1 ~. S& Z' ?
  m_Item[m_dwPos].dwId = m_dwPos;
" N5 k! h* ?/ _  m_dwPos++;
0 U4 a0 W6 r6 y}" m+ i% u' H5 F4 d( I0 ]
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 b" b! a- Y0 R/ [" o{( n, I% G: I2 H) ?6 M& Z- o
  for (int i=0;i<MAX_INVENTORY;i++)
2 k1 b& b. R4 R3 e7 L. o  {, B0 [6 _$ z8 g1 ]$ B# Z3 R4 j
   if (m_Item.dwId == dwId). m- A6 \! B0 v) H
   {
1 S/ Y; O+ f* Y+ O4 \  x9 v4 `+ W8 U    return m_Item.nIndex;+ N2 p1 F  [9 _! Q2 I) C( f3 t# @
   }
! {- v  V- R3 P# U7 @/ d5 B- }6 ]" i  }, H5 y- D* B0 ]
  return 255;
& i/ N$ O% `4 j" g}3 A+ t- \7 `' {& M- s/ _
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' S2 _5 d, E$ V! ?$ Z{' W' o) H9 {7 u  M% w: u4 e, l! w
  BYTE nTmp = 0;
$ C* y: |5 _5 m$ [1 v2 F- Z. P  bool bDest = false,bSrc = false;
# N) \: n! {6 A7 S' F  for (int i=0;i<MAX_INVENTORY;i++)
" O# v# y6 b: c7 t& \6 p( N  o  {
: i2 {$ @1 c8 p; s! Q) q( d   if (dwSrcId == m_Item.dwId)
2 q& l& H% g0 u4 K' q4 F6 q( t* D   {4 W7 U4 \4 R) m3 M* P. ~0 q3 S
    //id相等 则 改变对应的dest和src/ W5 d& L5 l! W& ]+ J
    nTmp = m_Item.nIndex;
# J1 D# J" `6 v; ]$ i    m_Item.nIndex = dest;
, g5 D9 p- f0 Q+ m   }2 y" b7 r0 S; E& Y" F9 N
  }
) g+ ?# U" Z3 e7 J5 K# u2 |  //临时数据保存完毕,交换开始
+ ]- G, J- k, X9 L+ }  for (int i=0;i<MAX_INVENTORY;i++)
1 t2 q+ o9 H* o, Z3 C" _, }  {
; m, y  ?# X3 N   if (dest == m_Item.nIndex); _" N. A3 R" m/ g2 r: o, O
   {
3 v# o4 _1 e$ M  ~    //id相等 则 改变对应的dest和src3 Y& k" K! d; q: O9 K4 a
    m_Item.nIndex = nTmp;
/ }5 N& `( ?. e4 _* G: h   }
4 C7 Z+ i5 ?3 P* Z, _5 ^  }+ V. _& A8 i  P* L) L( }, B  w
}
. o! r3 U- D$ A$ a};
5 x; H. I- ?, c% H4 B. ^  R-------------------------------------------------------------------------4 b% S# k  E7 n
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& ?9 I& A. k' ^* h) }% @. w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) t6 c- y  s0 T. ^0 |# G- |紧靠其上添加:
5 w- r* r: M- R' l( fif( pWndBase == &m_wndMenu )
9 K* u) M5 r; }) d* D1 @! n{
, [8 b# |0 l3 [  switch( nID )5 c8 g& ~  u8 R2 M# A
  {
+ k0 t  R/ ?& t- J' @' a# w  case 2:0 h* i" p7 a# Q+ b& S+ H& \
   {
) ^& x1 X. J6 r8 ]$ F8 r    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 s' d: u7 h# \& ^1 V    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% ~) f1 _+ E; D$ }3 v
    {
( p# R% e2 T# E3 x" B4 O     break;3 A5 d( V! O0 Z, q
    }
/ S! }5 [% S  k& p+ {3 |    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* b$ b, _5 d/ }    {( T! ?, t3 d) Q9 c7 I( o; K% C
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, E+ x# m/ ?; K* y* x6 X     if( !pItemElem ), b- R3 w; R  c1 e* ^5 k
      continue;
3 g9 f9 I" L( {) d) }) W     if(pItemElem->GetExtra() > 0)/ w7 g. h# m2 q" ]: a
      continue;5 A9 J$ g; i3 f6 g  I' t
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 S  Q. V3 A( }8 P
      continue;' H" V" B$ Z8 v0 y1 [: Q: S( q( \+ ^' f- a
     if( g_pPlayer->IsUsing( pItemElem ) )& g, d' K5 ^9 f: P" ~7 T9 R
      continue;
+ K  l4 F+ ~* V2 Z1 A     if( pItemElem->IsUndestructable() == TRUE )" ?' u) k8 o  Z, n! H& p7 A
     {
% ^% f; g3 ?* P9 N      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );  i7 h$ C" @1 m, p: c$ `
      continue;
3 k2 a. Q/ z+ ^7 ?: X! R     }: m& L+ g1 c/ V6 {4 F% O( z, h. i+ ?
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; C2 s- v/ I" p: k0 C    }0 G6 J% O0 d( p: r6 u$ i* ?1 Z
    break;
7 B' q" o5 t6 ]' U   }
- G, L0 F8 x5 d6 x4 c. v  case 1:# {% I! \6 B- Q  P$ t7 N  H2 F
   {* g/ ?) W8 s- Z8 \
    //整理背包* U' S8 K4 A+ m9 g
    //////////////////////////////////////////////////////////////////////////0 w# E* h6 O: |: z
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% F6 z0 Z4 B2 M1 `. c5 e3 v: b$ s
    //////////////////////////////////////////////////////////////////////////
+ h; O9 i- r3 b3 z    //////////////////////////////////////////////////////////////////////////6 u3 D! ^( K" W) d% A6 k% c3 s$ c
    CInventorySort* pInvSort = new CInventorySort;$ F  {, Q2 _  t
    vector <sItem> vItem;% i4 a+ R% P! t8 }' `
    vItem.resize(MAX_INVENTORY);//初始化大小
3 Z! @0 f2 V7 I. C0 d( F     //////////////////////////////////////////////////////////////////////////
0 K" Z$ H3 [& w0 t: L     //填充数据+ ]. K: {( p6 Q# h. d7 g7 g6 h
     for (int i=0;i<MAX_INVENTORY;i++)
1 A4 H3 T& f+ ?# N" q8 m  a/ e     {% E) i' \4 ?' G# K* P
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" I$ J! T8 c. a+ U; w
      if (!pItemElem)
2 K0 v( n" x- _. @      {& z( L- E7 g2 |' D$ y
       vItem.dwKind2 = 0xffffffff;
% t; O) r4 Y3 J4 F" M- C* j' p       vItem.dwItemId = 0xffffffff;
6 D3 H; [$ R* X+ i. M' V3 t; f       vItem.nIndex = i;
  Z8 Z. q" f! E4 w      }else {
5 a4 {+ ^# ~- M1 S1 j: B       ItemProp* pProp = pItemElem->GetProp();
- r% v$ ?, a: Z3 n( y9 e2 ?       vItem.dwKind2 = pProp->dwItemKind2;
& e. I3 J! n4 d1 e" D* U8 S       vItem.dwItemId = pItemElem->m_dwItemId;
" C! _: }1 R  }# Q  b; v1 j       vItem.nIndex = i;' G5 S$ R. B4 a  a9 A' j5 W
      }' Z; Q) }/ }# {& W1 P' m
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) ~5 o) ]! j5 [
     }
* @0 ?1 v/ E5 L     //////////////////////////////////////////////////////////////////////////* H9 I% J" i0 H" l1 S
     sort(vItem.begin(),vItem.end());//排序) o' e7 O9 l7 [) l/ G+ p# x
     //////////////////////////////////////////////////////////////////////////9 c5 {& O  _! a/ B! M
     //交换' i" f: G0 o; e) W5 {! K
     for (size_t i=0;i<vItem.size();i++)
8 d6 ~& m* b1 y# A+ L3 e     {6 O  ]+ o& _  B6 M& W
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 K3 P& O% E* l0 T0 X4 m+ I* d4 k
      pInvSort->Add(vItem.nIndex);
' c8 e1 j4 g" z5 o3 P     }
0 F: @7 `0 f2 G' o3 R3 r     BYTE nDestPos = 0;7 A  Y$ h4 Y- k& _; o9 Q4 u& A
     for (int i=0;i<MAX_INVENTORY;i++)
& v3 a& P) ?8 }8 P' Z     {
' o9 U2 j: F% G& Y$ m' c      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 E7 w! U  r9 ^$ g4 t* z+ j
      if (pItemElem)3 @# g  o! ?* }0 ?) k
      {
' O% U2 a1 V/ M8 W2 F. B       if (IsUsingItem(pItemElem))
5 c# B7 J4 h) a% z9 K- F       {' ]3 S4 ]5 j' x
        //这个位置无法放
. M7 I2 K$ ]% S3 G; |. W        nDestPos++;! U, ^* Q5 K  K$ O! ~
       }
, U, d2 ]+ L! R5 H      }3 b. X$ M4 p# n0 r+ z6 r& L
      BYTE nSrc = pInvSort->GetItemSrc(i);
% m: L8 w9 W8 I/ O! s      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& V1 R% u2 Z1 k; m8 E1 u2 w9 `
      if (pItemElem)8 L2 G5 C7 }; l" O( X* ^7 {$ k  ?
      {2 d% m0 n; P+ T
       if (IsUsingItem(pItemElem))# T( t" x" G0 W0 Q4 a: Z
       {
, J9 H. Z% g' W1 k6 J1 d        //这个道具无法移动,跳过
, d1 b0 p0 Z$ {7 j0 ?8 |' B9 Y  W: _        continue;: z) ^6 C; ~* E7 ?2 s
       }
  X/ \  B: V5 i0 L" }8 }+ W$ i3 q      }else{
% U# a7 B! B0 f% M# N& g- ]) R       //空位置 不用动& @; a! ]7 _& n! i) _
       continue;. d/ \' Z' W7 ~$ m+ W
      }9 Z3 X! V* h/ \! h) l  r
      //////////////////////////////////////////////////////////////////////////: b& R1 W- r" l* I9 V: b9 \
      //开始移动
- v/ {- R6 O1 x+ d5 E- q* o2 {      if (nSrc == nDestPos)
! b( O) l& U2 @$ |      {
9 b1 p  }7 M" b  i       //原地不动
# [: u# L8 v. q       nDestPos++;
# {7 E* x; m1 D       continue;3 p1 j( m& b/ ?& X
      }6 p" M: W/ m1 O4 ]$ G" [1 m
      pInvSort->MoveItem(i,nDestPos);
! ]: [- ^3 g1 }0 Z  Y! |. t8 h" T& X      g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 r! {+ d; b. r. u
      Sleep(5);
7 T' i4 q" u7 K8 u, S      //Error("移动 - %d->%d",nSrc,nDestPos);
5 p9 J+ R0 q2 P$ E      nDestPos++;' t5 k( z/ m; P5 Y0 a
     }! Q& F! k0 R# u( S% O/ Z( Z: F' y
     //取第一个元素的信息4 h( h* ^7 o/ x' h- |; H) @
     /*
+ H* M2 P1 n- z, ]0 ~     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). _6 A- n1 ~; Q4 }% p+ O& n! H$ ^/ u
     {
/ t: _% R# [. A4 M1 Y      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) f" d! |2 y0 J6 O
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% `0 p. Q0 D3 x& z7 i# u" h     }" e+ j- M( m# l! K, @
     */. y3 w$ W2 r' b( l' M& E
    //////////////////////////////////////////////////////////////////////////) o* _6 w# ]( w/ z' }
    break;
; G) r$ }: q: x1 N% |   }4 W1 ?5 X7 @# s7 o1 B% P
  } 9 J5 d! f5 J  n7 S. O- T: x' i/ R3 H
}( {1 T; g6 _' r1 f9 v% W  N* j
m_wndMenu.SetVisible(FALSE);
6 Z7 T1 d' k) x  E  X3 ]# e& n2 ~( s# h, x' C7 {) |
--------------------------------------------------------------------------------------------------------
: t  Z& @& B( o3 }4 P9 g  z) H搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; D: }% j) W" o1 e{
$ e  V8 K0 R1 j0 \3 a  k" o* tBaseMouseCursor();: {3 w3 X  o. i9 a9 G$ N
}
" Y! v% a" }" h在其下添加:
0 w2 K# M: U2 I2 A, s/ wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# ^* I( P" I# d' o+ j{
2 i8 }+ i# Z6 x$ G( o  r/ A% t% Fm_wndMenu.DeleteAllMenu();: E" U" l4 B7 B$ Z1 n# H9 b% K
m_wndMenu.CreateMenu(this);
, i: x( X% M8 H- Y/ ]4 q+ km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' }8 ^3 _# _! r4 P" i
" B2 T% Z! j1 _/ g+ Z0 N: c: r+ I* \
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" s; E/ O3 O7 U; p# y{
; F+ Q" p! h. k: m  //P以上级别才可以删除所有道具
4 B: G+ \7 X! U/ R) `- y  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");1 {& _( ^: Y5 T1 k! T3 y  B( `8 F
}8 R0 T/ H, o7 ]- F6 `
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- {; S4 Q# q7 a! T4 ?, a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; ]- f5 C: f3 f% a6 Y. O! g! J5 P3 A
m_wndMenu.SetFocus();
" c" g0 j( a' j1 e( }( K8 Z}) w* K& k: j6 z# s: _7 l2 P
------------------------------------------------------------------------------------------------------------
8 B) c* o" J1 l  h0 k( e*************************
$ C* Q$ R/ c. I& a; p* t$ R9 c" bWndField.h文件
: x, F8 L8 Y2 c*************************' W) r8 \5 q/ k5 r
搜索:BOOL m_bReport;, p6 A. c' Z0 f8 t- L  ?
其后添加:! V+ x9 O" r- ]' j9 S& t# x7 Q
CWndMenu m_wndMenu;
" X0 F. t+ T0 u' o+ a* S0 G搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& I1 b; p* Z4 T其后添加:
! {1 d' D- R/ z  K. R. yvirtual void OnRButtonUp(UINT nFlags, CPoint point);5 B$ z# z1 U. ?

/ M7 J& w+ Z) @6 `6 H& W* O' u! u$ A. k0 p

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-29 00:02 , Processed in 0.091851 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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