飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1078

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1078
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 }# Z. g4 D  R) @: K+ M  M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- }* h2 _4 C' M* s
4 L! P/ ]/ F# h& I- b; i  Fstruct sItem
1 ]4 [+ [7 x# I{6 H) ?3 Y2 j. f' Z  g# Y
DWORD dwId;% }( J& A; h' m* ^  o& s6 @( Z
DWORD dwKind2;  T& q; z1 p& r( @8 \1 v
DWORD dwItemId;* t) |; Q# p# h+ O
BYTE nIndex;
% i7 `- ]. d5 m( ssItem(){
  c" S& `* }3 Z. E  dwId = dwKind2 = dwItemId = nIndex = 0;
- f$ t' {5 ~$ d& V}
2 T4 t' F, ~0 G  k! R) _bool operator < (const sItem p2)
+ j% U+ m) G0 B* h{$ ?) ]; l8 E# t7 U
  if (dwKind2 == p2.dwKind2)
/ t  t+ J7 Z4 b  t3 l  {
: g: Q( e( y4 C! G7 L9 f   return dwItemId < p2.dwItemId;
" h( `6 N/ a$ W7 n: [  }else{4 F: l- D3 G) x$ l
   return dwKind2 < p2.dwKind2;
) ]+ u* {5 Z; w  }' K; @9 G. o# G. t
}
5 p" G/ Z3 I. T. H};
3 `4 n+ h, {- T9 B; _  q* W2 dclass CInventorySort" Y; P6 Y- S* E6 ~6 J" B$ f3 Q. ~
{
8 n/ |( d0 |' @public:. [1 T# q$ {2 \: ~& P
CInventorySort()1 d9 p0 u% b" E, J! ?. L
{
6 b4 I/ I; m: d6 x: c  m_dwPos = 0;
  S, h, I2 H  {3 G  D. {& v- y}
2 k) j5 s+ L# `& i/ x~CInventorySort(){}
- W; P7 l3 s8 F$ D# R/ Z% wprivate:
9 @6 c9 k& {. p# q: q7 t) r: lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 g6 a4 K, @- k2 A: M5 n
DWORD m_dwPos;
9 p* Q" p3 X7 G, Npublic:( j. H4 X" L" D. a* ^
void Add(BYTE nIndex)7 w9 ?1 N3 `! C  [' s' |* }
{
. `- n% I# D1 M6 u3 j  if (m_dwPos >= MAX_INVENTORY)
# u% l$ F, R, P  l1 {  {
# `  A7 X1 ]1 R$ t) p9 _   return;- c( M! }5 D! G9 e  }0 B2 u9 e+ b
  }8 z2 A! i9 H% c. P& W: I
  m_Item[m_dwPos].nIndex = nIndex;
2 Z( p1 I& X# O9 x, y  m_Item[m_dwPos].dwId = m_dwPos;
1 N' C$ P! |2 v: i  m_dwPos++;
: z$ h' k( {- V1 i7 F2 S" c}$ u. d# b$ O7 _4 p& k- a4 z! w# D
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 v& `; m" `) m; t) }3 P1 b{9 ?4 y: n8 q! z
  for (int i=0;i<MAX_INVENTORY;i++): t" }" u# {+ I! J8 E. ?
  {( n( Y' M4 x! c4 d5 g' ~
   if (m_Item.dwId == dwId)
7 ]* D7 C( g4 z- ]8 `9 h   {# ~; J* k6 S5 V9 W1 Q6 t
    return m_Item.nIndex;
( d2 f9 p; r' m. j5 d4 ?! f   }
( G1 a! e; M# J2 o  }
3 \# G* \3 Y2 F, e' ?0 M  return 255;
2 }7 M- N9 o4 y, I* X5 ]}
  [3 T; t4 |3 ?7 s- K% K# |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 p- Z8 {# W& v0 n8 e5 L) e8 ]. l{' I" `! c6 O9 e4 @9 j1 S: \
  BYTE nTmp = 0;
8 B3 w+ O* c3 d" b9 h  bool bDest = false,bSrc = false;6 K  ^- J! J  Z# w0 B4 n: P
  for (int i=0;i<MAX_INVENTORY;i++)
0 Y% w: c+ E* @1 T. ?  {
0 v- o* o( q9 d$ {; X3 ^. N' M   if (dwSrcId == m_Item.dwId)
6 u+ n. P1 h- C   {
3 @, M8 c& U; T* [    //id相等 则 改变对应的dest和src
8 \/ @5 @4 S5 {    nTmp = m_Item.nIndex;
! |- t# `* k7 T' `, g    m_Item.nIndex = dest;+ h5 G+ j) l" y& l0 A  o
   }4 m5 \3 R" t: g" i
  }- g* D. S- ]/ b0 T, u9 H
  //临时数据保存完毕,交换开始0 y  y# R0 Y# M& L$ r1 E
  for (int i=0;i<MAX_INVENTORY;i++)0 `2 ~$ _+ J+ s# l& l! [! A3 X0 G
  {
1 I$ x$ v1 ?* T5 y9 K# @   if (dest == m_Item.nIndex)
2 s3 S# ?! t3 S9 s+ R% E   {! j% e9 j! i( [+ T* @
    //id相等 则 改变对应的dest和src
; v2 [# o( Y9 P1 k" k: D    m_Item.nIndex = nTmp;
' T* T, Y5 h1 ?" p; p( Q1 K7 G. p   }7 z/ m. ^$ k6 d& ?+ s$ o
  }
0 k! t2 N7 D9 o) a$ `- Q}
5 }0 p% y# v6 m. u% M- A7 n};$ R# k1 A0 R0 S: W7 R- X7 N
-------------------------------------------------------------------------9 Y) k+ [* X' Z/ P8 g
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! p# f3 ^2 }8 ]" I+ c搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 @+ K$ `  q/ A' i+ d+ ~0 @, w紧靠其上添加:
5 ]6 [4 a# P% x+ ~if( pWndBase == &m_wndMenu )/ T- E! Y: W6 z
{- l4 Y# h6 j/ G5 [* w' d/ W
  switch( nID )" r/ H1 }' T) R
  {5 M8 q) I6 C; P5 p! M( o) d
  case 2:: k+ x- f9 t/ ?$ s( P
   {6 ?! c2 ]. n4 f$ P, W1 i$ U
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 }7 X. t7 d9 P! b" n3 E    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. {. Q" ]/ I, s5 j! Z, i7 q2 O    {
# k& ?) q: A- _) h$ a* r, c     break;
+ j3 g! w: F+ r" K3 `* I" N    }
& z5 H6 O$ S& _6 ~9 q    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
% f; g# P9 E1 }& M" e    {
; d! c* p+ \( F1 v4 x* {" g0 Z     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);  k9 b# J! M- o
     if( !pItemElem )
3 |) s. b- W) N) f! B' \      continue;
0 X% M8 W' P8 o+ s; U# X3 h     if(pItemElem->GetExtra() > 0)% n$ m+ o3 i$ {% V. s6 ~! L9 i
      continue;
5 L1 M" ?' O) _# B4 r3 I4 W# z+ V     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ o9 t0 W; d5 ]; E
      continue;' I3 k# K9 N2 y) Q% ^% i
     if( g_pPlayer->IsUsing( pItemElem ) ). R0 }3 j9 p* b7 g/ p# U  l
      continue;
- L% `% _- n. r8 Y) v     if( pItemElem->IsUndestructable() == TRUE )
' C' l5 W5 j8 n2 O% v( ]     {  C3 p3 ^+ @1 e3 h4 x; u
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* g) r8 j0 ^. Z      continue;, a- ~. n% |, @0 ^
     }+ |+ S: ^" u* H
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 F! [( Y# v# ]; L$ {- m$ [3 V. q
    }
3 p3 e- r( ^" _( c7 ~  S8 r    break;
  U% `# s/ F$ N9 ~   }2 _4 o& B; {- f+ t; i( d# f7 T
  case 1:
2 g0 y- `* j* y. N' _2 S# `: J8 q' ^   {* d1 w- m' i1 |6 D: n8 Z
    //整理背包
+ S# o$ [  g5 ^) @4 z$ h4 ?" v) p    //////////////////////////////////////////////////////////////////////////
( G( K6 e& E/ F% }1 p. z% ?5 q* R: W    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% R2 l  e6 H# M$ i    //////////////////////////////////////////////////////////////////////////# p6 m7 ~) }/ Q: V/ \8 m
    //////////////////////////////////////////////////////////////////////////' Z+ Q" u1 ^9 n! b  y
    CInventorySort* pInvSort = new CInventorySort;
% ~1 o6 w- s: D- ?6 ^( R" s) x4 l& @    vector <sItem> vItem;
- L5 t& i; V3 {* h    vItem.resize(MAX_INVENTORY);//初始化大小
5 F$ U8 v. V2 [$ D& I- h& \     //////////////////////////////////////////////////////////////////////////8 e  H* r. Z) f
     //填充数据
4 F2 R/ B: n) Y7 C2 O/ ^  _     for (int i=0;i<MAX_INVENTORY;i++)1 _3 H4 u9 V) A5 m, [4 d
     {
* ?" z, T8 |$ N6 k% T2 @      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 b. l( U( t- j& c& o
      if (!pItemElem)! u# X5 }0 a% U" y( N
      {
# L6 x4 G/ W, r7 w8 e0 [+ {       vItem.dwKind2 = 0xffffffff;  Z8 R3 c# U; [& _3 E0 F
       vItem.dwItemId = 0xffffffff;3 s% l4 t( P% Q1 w2 `
       vItem.nIndex = i;
' }) l3 c) l/ R$ j  `4 C      }else {
" o0 d" n* Y0 ^; G! O       ItemProp* pProp = pItemElem->GetProp();
2 A, e% {( p8 a# u1 D8 q       vItem.dwKind2 = pProp->dwItemKind2;* n. S8 \7 n$ y) K' ~- Y4 {
       vItem.dwItemId = pItemElem->m_dwItemId;) W; v8 F- F) q
       vItem.nIndex = i;
5 s' v# O( v  n# n% V; T# S      }
$ T7 t( c' E9 L6 t; ?  A$ v      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' h" U7 C" I6 B5 D, W
     }
- |) t/ i2 N! _9 {$ V) F. P     //////////////////////////////////////////////////////////////////////////
  ~. ~$ q1 G9 U  x# S/ D1 ~     sort(vItem.begin(),vItem.end());//排序
3 l1 G- M. u" {/ K2 @     /////////////////////////////////////////////////////////////////////////// P! H, \5 e# P- G
     //交换0 _! S9 a& y( E
     for (size_t i=0;i<vItem.size();i++)
6 J8 n: K/ C( M     {9 W3 w% {6 f; B& w/ k
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" O" Z2 T. H, U4 k
      pInvSort->Add(vItem.nIndex);1 w( s* o' |3 ]* I8 ^, |
     }- F8 r$ f/ {: `7 p4 c' s
     BYTE nDestPos = 0;
$ z- @3 x( a) \* _) w     for (int i=0;i<MAX_INVENTORY;i++)- ~/ y& C5 {' N( _
     {$ @2 [9 h: O" T* b1 ~! M; v+ [2 m
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 l: ~, N' F) K7 U* y2 ^( R
      if (pItemElem)* \+ D- O& O. }* N4 ~: w' T7 X* _1 C
      {
+ ^) O) k* N8 L- C9 ~       if (IsUsingItem(pItemElem))
1 l' o& [) z6 f, ^+ W  s: A       {
  h0 o# h% ^2 F, u  ?, `        //这个位置无法放
8 W+ d2 H6 h/ Y# N        nDestPos++;
& y  {; i6 r8 Q: @/ e+ k% N$ r       }* Y& \9 w) L0 X" [  ^
      }
# ]$ y+ R. i- G5 G0 _$ q0 T% F      BYTE nSrc = pInvSort->GetItemSrc(i);& d; ]4 q! |9 F# m$ d0 d7 P
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ x, i& ?. U3 C6 ^2 k6 j
      if (pItemElem)4 _* z6 J4 v# y8 q
      {8 u! u1 o) `* b7 e  N) q4 z
       if (IsUsingItem(pItemElem))  P+ E9 ]/ M& @6 C" f) J% a
       {+ t1 b+ f8 @8 S( y3 D% ~5 Y+ i2 d
        //这个道具无法移动,跳过
. A7 g1 [7 n. B: [; M. R5 h        continue;* c7 i) j  q! u& p7 N
       }& x+ u/ H! z2 t& o1 o" J! T
      }else{
$ x+ I+ e& D* \       //空位置 不用动8 m" f1 m8 k1 {7 U+ d1 K1 B
       continue;
& i7 Z  U- f  u+ Z8 |      }
3 X6 ~/ M; ^3 Q8 m  e0 Y      //////////////////////////////////////////////////////////////////////////& P+ O8 n9 d- C% H9 Q
      //开始移动8 l7 f5 _) i3 x- w9 o
      if (nSrc == nDestPos)0 Q' A9 \+ H, |0 V
      {
5 m. g; ]6 u" V7 O       //原地不动
% }: [: K/ i0 u4 g, _       nDestPos++;* O' e% j0 W8 s2 x+ `
       continue;
# L6 i3 Z1 }9 l* Z. S      }
- f1 J+ r9 P" N1 j+ h      pInvSort->MoveItem(i,nDestPos);! D+ [3 `8 _" _
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& _4 P6 [5 \3 x: G      Sleep(5);
% t$ z9 K+ u* g" e/ V      //Error("移动 - %d->%d",nSrc,nDestPos);3 `" O; E  M/ n% G" u& x) S7 {& Y1 U
      nDestPos++;
0 T. }! u, P- D* f7 Y     }
' l  p' V1 g: `& g4 L; B, c$ H0 P) R7 J     //取第一个元素的信息/ S0 ]5 d4 ?2 Y2 L2 n& f! T
     /*
3 S! {' o9 i$ u" C& M     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& U1 d2 ~# Z. W' W. }     {% h2 p( {$ w& m# `) H2 f1 I4 W
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 R: t' L: D2 w* f  f& ]      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) |" G( [1 F3 x, V$ o     }
0 j# c0 P) O& L4 I' g! K. z5 [     */
, y$ `7 D, \0 A4 \* B  w7 N    //////////////////////////////////////////////////////////////////////////$ H9 {7 O' w, o& ?( F
    break;
. L) ]: P8 q* l$ p3 _! _& E   }
/ I& h2 b& \8 J* N/ O: @  } * ^8 A+ Q* x) t/ x& y
}- A) ^0 ?! h9 |, }$ Y2 s
m_wndMenu.SetVisible(FALSE);
, q1 j4 B4 p  K$ L& F- i' P; @4 L) J  H; a( A. E& A% b5 U  t
--------------------------------------------------------------------------------------------------------' x# \3 g0 n" W/ A5 x) o2 d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 L1 C. S1 h) k: B# ]
{
% }  Q6 G* h) w2 v" gBaseMouseCursor();
+ E7 @8 U0 f/ r  R/ e}
7 D% F1 f% a8 v0 h% I+ b在其下添加:. L9 r$ q8 _7 Y7 v' d: n/ Q8 O# l! y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ a. t% h" p  Y  b1 ^% @# _
{
; @. w% h# s: Pm_wndMenu.DeleteAllMenu();
" R  T! L# t& B- C. b3 I  \; [m_wndMenu.CreateMenu(this);: Z; M, @! V. K: R9 L9 `
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ o" b4 K$ N) W' N2 |* q+ S
% k) t- Y+ L( T# m. V8 I/ Fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 u: d0 h& O: [8 y. M{+ t5 G5 ~: q& D& {) M# P
  //P以上级别才可以删除所有道具
% ]$ O# q* @5 N  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" l5 L4 o. R& U
}
8 A0 f% T! V, ?m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. I9 N8 b7 D) q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 Q  `0 l2 z: B6 L/ G  Y( d
m_wndMenu.SetFocus();! t+ z- @, N2 T  p: ]
}* D/ B( Q2 n+ _- z
------------------------------------------------------------------------------------------------------------% \+ @; P/ _6 ?6 ], n" @5 G
*************************
! J1 |' J2 I4 j+ pWndField.h文件
+ v# M+ _7 e* E* P8 `: d! j*************************3 ~) S1 W9 T8 m0 S' g8 k: {
搜索:BOOL m_bReport;
# Y1 B. t3 f* N7 a其后添加:. n- ~  n8 I" ]. M( K6 e5 W
CWndMenu m_wndMenu;
+ m$ k/ M; ?0 ?- ^' z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' v# e" e  I0 ]! m- \6 c其后添加:% K* O- ^; s9 t5 y# g# n$ w% \/ g! ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, {- r: ^5 S/ R5 q# X2 C
' i' N/ X5 \: q4 W* G- u
2 l2 L5 e% ^+ h, ?# c" O

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-25 10:47 , Processed in 0.069060 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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