飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件* `& B1 g* x: m) T: G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ Y4 S) J5 ]3 E$ }8 K3 g- a2 i
, Y7 `/ Y4 b& J4 K! M
struct sItem* H, J; a  C6 ^: u
{
/ @1 c1 g" |9 y2 e. u& R) h, p7 _DWORD dwId;
' `2 X4 j3 x$ C; p8 b/ ]' n9 PDWORD dwKind2;+ j. r2 z0 b3 H- B) J* c" X/ _
DWORD dwItemId;" U' N. B, U$ f% A
BYTE nIndex;
. f( ?! T/ m6 w, a0 Q$ bsItem(){
+ h8 n/ E% R( g# E  dwId = dwKind2 = dwItemId = nIndex = 0;/ z  M3 J( ~: d8 w
}
  B; e; N9 u8 z& sbool operator < (const sItem p2)
: ~- h$ e7 r* z. o; m{
2 T! i  P1 ]( s( g$ A2 s- D  if (dwKind2 == p2.dwKind2)
9 B) ^. Y. d7 E- n9 i- B+ `/ u" ~  {& t4 j$ q1 N$ s7 Q2 S
   return dwItemId < p2.dwItemId;* d( p/ o9 r7 B& F/ o
  }else{: F. u. H4 F& ^, f  E+ A* X
   return dwKind2 < p2.dwKind2;. ]0 W2 Y# W" h& M" c" i6 r- B
  }
" m, y* ^' o3 S$ u}
4 @5 a" d  L% L, a  g};
( x/ T8 \2 L4 a, v+ e3 cclass CInventorySort) C/ a" x; `( g& }2 d
{
1 e* d8 `3 z) }7 z; fpublic:  c  e+ l3 z4 Z, x5 I
CInventorySort()# _6 {% n2 i. s' m$ L  e
{: N* `/ Y/ }* @6 R: f
  m_dwPos = 0;7 }) i# |3 G* l  @9 D) x" O
}" H4 |; ^8 B& G2 J2 N$ ~7 U6 B% Y
~CInventorySort(){}" ~+ T1 a5 h" {
private:2 H5 U& y& M' x# N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
  K/ |* ~9 x1 g1 \4 W( X/ F2 e; HDWORD m_dwPos;
0 O) g& W: r) `! Mpublic:
* [: I0 c3 X; X3 l/ {+ V: \5 \void Add(BYTE nIndex)
! q5 k$ S5 H+ \* S3 X{6 T! i3 @+ m$ D4 o& c6 G
  if (m_dwPos >= MAX_INVENTORY)
! G8 L3 \- O' d, [' n$ ]4 K  {
5 H7 K3 _) f5 B' K( K1 X   return;
- L$ h2 W1 x  w3 H  }
2 h0 o* F* n8 p  m_Item[m_dwPos].nIndex = nIndex;! g5 C9 |% U) y  t$ V' H0 ?
  m_Item[m_dwPos].dwId = m_dwPos;$ s3 a; z0 }6 v. l' Z" B  V5 Q$ {
  m_dwPos++;
7 e3 K' b# e; t+ D, ^}
' D: |; Y2 _; S3 ?( m3 ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 C) e/ ?8 {; b1 v) H( E$ k5 J
{% X% Y/ t0 r1 `, P1 T# U& r
  for (int i=0;i<MAX_INVENTORY;i++)
1 b( T2 B+ i0 _& _4 c8 n8 h. K  {6 C2 K' V. b9 V) C: o
   if (m_Item.dwId == dwId)8 h6 E. `/ z% J% z* t" w0 P1 ?
   {
3 ]! Q( s1 t4 ~) ]    return m_Item.nIndex;
  i5 v% g6 _0 }9 m* R9 D   }
" [6 L9 a% z6 M: A4 `  }" l3 J! ^) R9 U- S9 p
  return 255;
7 z* K6 j& O6 N1 ?; l}6 Z: }3 @7 z( h- I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 a" T# R* Y& E
{
, d* Q; k2 n$ U0 z) D( f* Z. S+ }  BYTE nTmp = 0;
% b/ g) a0 M! H, `5 @+ m2 D  bool bDest = false,bSrc = false;% g& N+ U5 Y$ A$ i3 k
  for (int i=0;i<MAX_INVENTORY;i++)) m. `6 t' y+ F. B* a9 M
  {2 i" u- J% T7 b$ h2 Q0 y9 b
   if (dwSrcId == m_Item.dwId)
# v' I( n; ?. h. W5 W: ^; E, g' K$ S   {
3 o. Z  F4 _( i9 a4 G: k    //id相等 则 改变对应的dest和src
6 ~$ c$ I+ q& ~7 R9 D    nTmp = m_Item.nIndex;
9 d2 P6 G- H5 `" q0 g    m_Item.nIndex = dest;
1 a0 H8 S% y# T# n0 c( F   }; {! i* j- F( K7 R& c
  }
! }% `, f9 L: ]/ R0 k' i6 Y  //临时数据保存完毕,交换开始
$ G9 J: N6 U) @& `5 w  for (int i=0;i<MAX_INVENTORY;i++)$ m' t, D  L% S, k, \# T# |
  {
* K& w( P  w7 T0 m" a2 p6 a- _   if (dest == m_Item.nIndex)
* K. O( q7 Q9 U   {
- G2 a, r5 W2 W) P    //id相等 则 改变对应的dest和src! F6 y- i5 k4 B; G" Q
    m_Item.nIndex = nTmp;  X/ r8 t2 H+ _+ K: C: n
   }
* Y. R6 m3 _* W1 d  }: U" K. t! c3 h0 J
}
) L0 ]- v3 d  [* O# x* R9 W, r: D};" Y, k( i5 S: N5 Q9 D
-------------------------------------------------------------------------
* }: [$ }/ h7 \9 g5 b; S, j: Q: O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' J9 M. j- G0 m9 ?
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 Z9 k! {' e0 @; q; [* f& n紧靠其上添加:
6 F! |+ l8 A  }' U3 S; [6 h8 Tif( pWndBase == &m_wndMenu )1 g( K3 w7 B* p, e6 K) b
{9 J% i- l) e: S2 R+ y  R
  switch( nID )
+ ]% l; |; E, @  {
; p  a. ?, C2 J& V% ~8 S. d2 b  case 2:& Q  Y+ G& G* ~, ^+ S
   {
" p( Y9 S! _. P; l6 H    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* u  J* K$ h4 M. q    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! s1 C+ i6 E7 y  @! @
    {' Q' w/ x7 R2 |
     break;5 `. M; F, ?# y* a$ t* ~: ^1 o
    }/ s. s7 P3 \2 b  Q+ }( {- J
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 O7 t% k& [8 h+ |2 s/ L. n4 U+ ^* p, H
    {
& `: _( X+ Y; L, S/ i9 Z6 j( `     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 d$ W" B. ~8 V6 _
     if( !pItemElem )
- O5 s4 N0 y* h      continue;2 p% b# q; k' j
     if(pItemElem->GetExtra() > 0)
) B$ o0 m5 E$ Y      continue;) N# F9 a7 H% \$ q, r
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 {* y0 H/ u) M8 N2 w      continue;
$ G( C8 q7 N9 M& W: N1 s. Q     if( g_pPlayer->IsUsing( pItemElem ) )
) c4 G: k, H+ r: j: I2 x2 G      continue;6 y, v. e+ K- S, k& i; }  L! Q; ?# {
     if( pItemElem->IsUndestructable() == TRUE )$ O0 N7 A- ]+ Q3 b; W/ _
     {1 B% X1 E$ N1 E2 u9 `$ o2 k
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ i( ^% i7 _) F$ ]6 v, B      continue;& o  J0 c* L2 U; G* n6 x
     }+ R3 `; S) t# @: {: z+ ?
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" O% C% x1 N9 [; {& x    }- {- G) P1 L- `6 c# C+ s. A- |% U
    break;  k0 S0 \9 J' v) a
   }
& q2 }& s( L- y/ }9 H4 G$ L  case 1:/ S. u( t9 }% _, u# i7 G
   {
9 P3 R! D- l7 l. ^) O/ d' a    //整理背包
) p7 j2 G1 d, j4 u# b    //////////////////////////////////////////////////////////////////////////
# x3 x& j. P/ j! Z9 E( Z    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 z1 f4 b: v- p( k  n: \
    //////////////////////////////////////////////////////////////////////////
: c2 s$ [7 _: N! S+ C5 q$ c    //////////////////////////////////////////////////////////////////////////
" o) I" k9 A( _    CInventorySort* pInvSort = new CInventorySort;0 D: r- R, u! Q; n6 F7 E
    vector <sItem> vItem;
* c/ R6 L9 M  K, _    vItem.resize(MAX_INVENTORY);//初始化大小* ?8 t/ S/ ?! e/ w! u$ C
     //////////////////////////////////////////////////////////////////////////4 L/ H0 |- L: _
     //填充数据8 @! c% T/ d9 i6 _8 a9 ?" G: }& q
     for (int i=0;i<MAX_INVENTORY;i++)
: B( K; ?  R" ?% l5 h6 ?- M/ V* K     {  a! c7 {% Q; G8 }3 E. I
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! c8 B" B( T# e) x5 i: c5 S      if (!pItemElem)
+ U& [1 _1 z3 j+ i* D; B# {- n      {  c- I/ D( e. W& }
       vItem.dwKind2 = 0xffffffff;7 D7 G8 P9 h; Q& d* N) |
       vItem.dwItemId = 0xffffffff;! u+ n' U8 I/ @: Y
       vItem.nIndex = i;
3 x3 B8 _& a# a& Q      }else {. Y: k$ f5 l1 Q- Z$ ?5 a1 J
       ItemProp* pProp = pItemElem->GetProp();
1 v# q: y0 l, A# h  J9 B       vItem.dwKind2 = pProp->dwItemKind2;. Q: y3 q, B; V8 Q% j/ G
       vItem.dwItemId = pItemElem->m_dwItemId;
/ {  Z% r0 i, C' g3 ~       vItem.nIndex = i;( s8 c3 M' P' v+ {. p1 O9 O
      }
1 m7 H( m; G7 u0 V      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) I2 K7 w' ?: s     }
+ }; R% X) z: C8 ^     //////////////////////////////////////////////////////////////////////////
3 s" k) C4 K8 `, A* u. K     sort(vItem.begin(),vItem.end());//排序
! F8 A# Y$ ?& _+ ?1 c5 {( \% ^9 E     //////////////////////////////////////////////////////////////////////////. E. Q1 C9 \- f; m5 Q! s
     //交换
4 g( x( Q4 S, y* Z& Y! g/ h4 t     for (size_t i=0;i<vItem.size();i++)* E: ?0 b/ ~  e& f1 D
     {
/ S  p/ o! B" e8 o0 k! x      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* y* c  d0 ^4 ~+ M
      pInvSort->Add(vItem.nIndex);* I' t5 t( U: y7 Q
     }4 h5 F* w" B  V, c9 F0 {
     BYTE nDestPos = 0;& D# l2 i0 ]! l1 e
     for (int i=0;i<MAX_INVENTORY;i++)! T  g* y+ k: [
     {
8 [" N; l8 S/ A* X4 r+ A      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 @/ F/ Y2 V+ y3 A: x+ ~  a      if (pItemElem)
0 Q$ r  ^6 w  o% C/ H) a5 F      {
3 t- o! o5 I* |+ R1 o9 ]3 d       if (IsUsingItem(pItemElem))
: F- V; R8 v2 Q0 S+ i/ d# \       {
# `6 {$ m. {9 n" ^3 K* q0 w3 F        //这个位置无法放
: R8 E6 H" w: [; O6 S- O        nDestPos++;
* o9 j: Q# o* Z  L  l4 z) d       }7 ]* [4 Q) C8 ], L4 Z1 Y7 b
      }
# n& `4 N7 E) T7 h6 x      BYTE nSrc = pInvSort->GetItemSrc(i);
4 c; m* u+ s& \: ~* F      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: l8 r  P4 C' i  u      if (pItemElem): x0 @- Z9 K: n' q& F; T5 ^
      {
" {9 r7 N0 v- u' g- r$ N       if (IsUsingItem(pItemElem))
; s# Z+ r0 H. S: [$ n1 w( W       {
0 W8 w6 M; B' }7 q0 Y3 I, Q/ t        //这个道具无法移动,跳过7 g) W( t2 }) y0 y
        continue;* |: ?! e: ?: {+ J: K: K: U
       }
, a2 e% R% x0 e' G7 i      }else{; R& u$ K9 J* {! Z$ f% }, f4 ]& |
       //空位置 不用动
$ t2 p! W$ c/ g+ ^3 N       continue;0 d7 z% b  g( F. L$ s8 l6 Q+ b
      }
& {7 ^. [  f, e& q: S/ p+ [6 J      //////////////////////////////////////////////////////////////////////////
5 f' K+ T# p& w9 P& i      //开始移动+ J7 A1 O/ L5 E; e( Y2 V+ y
      if (nSrc == nDestPos)
& T% W9 b! D4 u& {% i) l6 b- J      {
; y& g, r, ]$ ~       //原地不动5 M# f5 }0 ?+ O( t4 x5 {
       nDestPos++;
; @! ~2 e. L: [3 E6 E# u! ^       continue;* F0 n8 O' B1 z3 H* H( d) R9 Y& ?" \
      }( C: m2 h) C8 r$ L0 l, U' |
      pInvSort->MoveItem(i,nDestPos);1 \( A: T) H& J6 n; E
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! L; O. h0 N) g* ?. q      Sleep(5);
2 Q$ Q( e2 Y+ h5 n. S. a5 m      //Error("移动 - %d->%d",nSrc,nDestPos);2 v# p& F" C- `- A- F
      nDestPos++;
7 |% c2 G  c. L$ {# s. C5 R; g0 K     }
+ p9 [+ r: P- ~" \( ]     //取第一个元素的信息
2 g  a3 y. X8 X) C6 k4 ?     /*
& G% p5 h7 _% z7 D% O     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 ~) V$ X' A' [2 n1 z' X4 p
     {
) D! H( S: A4 |+ a      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% {* S- ]7 L* T& @      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ R" Y- |0 ~* E( s
     }
. p9 k4 i  |) a+ l" E8 d& s( y; {     */" N# ]4 h9 `5 q3 X. }! n/ o
    //////////////////////////////////////////////////////////////////////////0 G4 Q/ L" E: b7 c: \8 m
    break;- y2 V0 X, \0 U
   }& c0 \+ _4 Q* H& `* N& {
  } 4 A  H2 ~0 y  B: j1 {+ M
}
$ c" M& O( `6 j" A3 H; ^& r2 }m_wndMenu.SetVisible(FALSE);. d% o) e* k" w& C

; s& n$ w/ V5 _4 D. L& o--------------------------------------------------------------------------------------------------------
+ f: F- _2 C* F9 c2 b, u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ F5 O8 d% }- N$ z7 V/ S7 b{
; L, {( {- L. YBaseMouseCursor();
2 P# d1 x' W' D: @. `}
2 c2 W9 t  v" [% v在其下添加:
* s. O* Z" I4 |, O0 j( q" _/ mvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 L( ?) o0 p  ^6 r6 a# L
{
3 J4 h# Y( B* J0 l$ g0 D9 Am_wndMenu.DeleteAllMenu();
+ X/ M7 J2 w' f4 w$ v( O9 \8 [m_wndMenu.CreateMenu(this);) h0 g* m8 ^1 [% R: j9 J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" Q% c5 c5 m6 I) j
/ B  ~% X7 G' b$ ^  l* `$ n/ U; b
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 S, b5 E- m1 u3 q6 E5 K+ T{# \7 ?: \7 H' n2 {! [' r/ M) V
  //P以上级别才可以删除所有道具9 r: |$ n: X) _( c" u6 Z
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 o; i& R1 `: m- t
}
) a: P# V4 W- Q8 {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
1 v- t; h9 i8 \9 ]; ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: E& l) q* K6 t) a- C3 {
m_wndMenu.SetFocus();) Y6 e& [$ B3 S( Y4 }
}7 c& B) I+ Z( t/ m
------------------------------------------------------------------------------------------------------------
/ f5 t: x1 a3 t  ?9 X*************************! ]6 n5 {& D3 q4 A9 @( O
WndField.h文件
/ A! O# R! f( u/ o: h9 ^4 `*************************
; L; i2 f1 A5 |7 Q搜索:BOOL m_bReport;
3 W  N/ h* ^2 K2 n3 L其后添加:  l' _/ G4 ?! n# X1 M0 v2 B% v* d
CWndMenu m_wndMenu;5 i/ u  e4 q& {  |
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, ~( w! o3 M5 H% I) j$ h
其后添加:
% d/ }+ l6 [8 A% ], T" e. i1 s+ H4 ivirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 l. ~1 I$ ?% R3 Q$ d
! A( S: Y3 g3 l2 R( d0 J$ B0 y3 j/ A- I9 e  I0 q! K

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-25 07:12 , Processed in 0.066247 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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