飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
. |4 d, s& b! n$ U. Y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): _& X, _; y, L" v/ B9 O: \2 a

. r* i- T: ~+ g9 A6 S; b" `4 g0 K8 Estruct sItem
& e2 E! l4 L$ C5 N6 b: x) u{
2 P: V" }% l8 q) a& M1 V2 G6 q; S8 i# RDWORD dwId;$ [: {/ u5 `' [! u! N. s
DWORD dwKind2;+ ~* T' m6 T7 }  |3 e- u+ y6 }
DWORD dwItemId;
) M; f/ p4 Y; J, j' g5 p8 M+ c) H- fBYTE nIndex;
$ ?1 o8 p3 o- dsItem(){
$ ?$ X  M; Y) I" B4 P) S; x! ^6 ^  dwId = dwKind2 = dwItemId = nIndex = 0;0 J% e5 l1 O/ C$ F& |
}
: F8 y, ^) @  ~( ubool operator < (const sItem p2)' B8 @4 H; }8 y) x+ n( g+ l/ C
{" D; b4 Z! d! m' j
  if (dwKind2 == p2.dwKind2)2 c9 H5 I) R/ A6 X0 _
  {) L" L% u# b5 M5 e  o; B
   return dwItemId < p2.dwItemId;% t9 i6 Q+ P( L, w. O1 K  _
  }else{
! c0 d6 m* \/ }8 E   return dwKind2 < p2.dwKind2;2 |: p* h6 s8 a+ i4 V
  }1 O# G: c9 U: p! \; b  b
}
  T  J! L& t- r( O4 J};+ y) T: b+ e' H6 F3 E
class CInventorySort
  A5 }  T& Y) h2 O{
+ y( D9 b$ P" w" hpublic:
3 v8 O" Y4 v  J  x0 B0 K, rCInventorySort()
7 G0 Q! `* `; P' i& x( w{7 {; a3 y, z7 y0 x5 [+ Z
  m_dwPos = 0;
+ B/ `5 c. O  ?! B}  w  \- j' P6 |7 U7 f' t0 o
~CInventorySort(){}% a0 O) F! g3 l: E, e$ D1 v
private:
8 y) _' }3 F9 J8 csItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# S! `2 y( h( w/ L7 `9 M8 q; x
DWORD m_dwPos;# X7 y/ j, I/ A, A
public:+ j. |! ]5 Q9 e8 E8 {$ B  `
void Add(BYTE nIndex), B# G* O1 K! e  d' }* H3 o5 s
{
) L  f& N8 B, B' U, W  if (m_dwPos >= MAX_INVENTORY)& @2 R4 V" N  o+ ]
  {
' G+ ?( j& }+ K# x   return;$ L# e. ~2 T4 ^3 c/ r4 |; @" ~
  }1 {0 Z( F6 w' V. }9 C3 ]+ v# Q
  m_Item[m_dwPos].nIndex = nIndex;
6 r. Y7 \7 b! z' e1 v5 q3 P' u( d' V  m_Item[m_dwPos].dwId = m_dwPos;
/ |% r9 b) W" b" f* u5 b  m_dwPos++;
4 d6 n4 W2 x! d8 d: C4 B0 k}
" i2 l, E" Y9 S2 T1 B$ r2 mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 E6 t5 L0 K+ ^/ ~
{
3 R7 B. \, T1 |  for (int i=0;i<MAX_INVENTORY;i++)
  r, q8 G7 j' l  q( q' c  {" V# N; e0 `7 e+ @1 o
   if (m_Item.dwId == dwId)
2 R' k8 P! ^' ^: R   {
$ w. Q( l* \. h6 g% C& h  M    return m_Item.nIndex;
4 T# \4 e2 V$ D* C) N1 K. g1 V0 s   }& k! v4 c& O8 X: n& i
  }% W9 \- Y9 u8 o
  return 255;: Q6 {: A' k8 {& f7 H! ^7 v
}
. z2 F. K- Z! D! ^0 \void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 p) R7 n- S; o# l+ R9 f
{4 Q+ D# b- P+ d; L" H
  BYTE nTmp = 0;* y2 f7 `: |2 Q' T1 Z
  bool bDest = false,bSrc = false;
$ N# @. v* h0 S5 W* [1 G- r  for (int i=0;i<MAX_INVENTORY;i++)/ ]" P. {, W. e& @  J7 z( S# C
  {
) r9 ^8 ~$ n  E* p* @   if (dwSrcId == m_Item.dwId)8 p4 X0 o+ |  H
   {& R# J' K: [4 M0 {3 x3 g- b
    //id相等 则 改变对应的dest和src7 Z0 R2 f/ \, J7 c! B' |9 ]1 ^& G
    nTmp = m_Item.nIndex;
7 g3 h7 O/ l/ d. H' S8 Q    m_Item.nIndex = dest;* Q) d7 A/ E6 z' I; F8 r
   }
7 \3 l3 x% T. p' q  }, a* @2 X9 V/ V. o3 i$ B4 q
  //临时数据保存完毕,交换开始
; ]% m4 ]( |4 ?" _0 B  for (int i=0;i<MAX_INVENTORY;i++); T7 ^, m+ m5 Q
  {; b; @: Z. ?# D0 s) c% d" G9 m
   if (dest == m_Item.nIndex)
$ e' q2 H' D7 |   {
" M, P/ `! D$ O$ W9 X    //id相等 则 改变对应的dest和src
: }# p3 J* u% X0 s5 j$ G    m_Item.nIndex = nTmp;* ^+ Q  ]7 E* x* i# I
   }
! Q/ x* Z% V% z6 }% g* f& f  p1 N  }. [" g4 `; k. ~, q4 b
}
0 X0 k0 v( t: s  h4 D+ v/ U};  e( k, P; p+ S* v& m
-------------------------------------------------------------------------
( I) {2 k3 ~' E5 `' d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 c8 l# X% W4 I* g搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- p( b" V9 c3 O& l紧靠其上添加:
7 z# T  U" R! s9 Oif( pWndBase == &m_wndMenu )* T3 I( P' r; J8 m* s" ^, m3 f3 Y
{
. y  `$ s/ ?# r2 L  switch( nID ); y& t7 z7 L5 K; r/ d
  {
. `; ^: ^4 l) d# n1 Z  \0 Y, P  case 2:
" C8 o& X4 K0 p  c7 W( G0 v   {
& Q) h+ d+ h6 r* V    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ Y) `! ?' S: Y6 }# D# [( X) W/ @
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 m" ~- ]8 j% ], R3 C4 v
    {3 q, Q. S& m& q
     break;
2 M9 `# l. K% ]    }' R' z: x! H2 S% i. }
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 r: T4 T/ Z) _; s
    {. N! ]5 O9 K8 y5 d7 P# S& @5 u5 f1 ^
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' I5 s1 S7 @0 F
     if( !pItemElem )$ _, q% p5 S' v4 ~  h& m
      continue;3 M& w+ T, @3 p2 M* U" h
     if(pItemElem->GetExtra() > 0)* }" l1 R2 a0 d" c( i
      continue;
& l4 I2 [: S* D- N, V6 k# x: `% }" h     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 ?; b0 P, n$ `  B# i& |      continue;2 ^% A) c3 z! B# ]& Z' T
     if( g_pPlayer->IsUsing( pItemElem ) )! C. O3 c+ u# [( L
      continue;
, H) V# \: T' `  {. Y9 W! `' `     if( pItemElem->IsUndestructable() == TRUE )8 G1 G$ e' B! ?, b
     {
3 a" E# m0 [% b, H1 X# C" L5 m5 C      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! F6 H& r7 N5 P6 e7 Z  O: P. H, O: m
      continue;
" g7 l* M- e' \1 d0 @0 v% q     }
: n0 n4 c( y  B- _' C$ \& A  S5 p     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. s: b7 Q: d6 N! ^( i( O, D; x    }
6 d+ ^. _2 p( A0 h! |4 `' U6 b    break;
5 l5 F' f% C0 r# C7 ^" P2 ?% i# |   }$ ~0 i& f7 n' U+ D; A
  case 1:6 ^( U4 f0 u4 J  K+ S5 L+ O! l! _# s
   {
7 t  H% T% |" |% o    //整理背包
/ o1 X: k2 w: |/ l    //////////////////////////////////////////////////////////////////////////
( Q% R! w/ N. a' w, y    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. v2 C/ L! D4 B0 d5 G
    //////////////////////////////////////////////////////////////////////////
. w5 @; E2 ]: z+ J- l8 G) n& o- i    //////////////////////////////////////////////////////////////////////////
2 |4 Z4 z( g( D5 {    CInventorySort* pInvSort = new CInventorySort;7 C) P+ `8 `6 K) e. j
    vector <sItem> vItem;) o% b8 m0 ^, C7 U' z
    vItem.resize(MAX_INVENTORY);//初始化大小
# `* |4 {: z" }% Z# {0 C' w     //////////////////////////////////////////////////////////////////////////
- F; `! p7 l% ^+ E0 U0 x7 b' z$ Q     //填充数据7 \) b! k8 p+ ?6 ^  K' `
     for (int i=0;i<MAX_INVENTORY;i++)( W; U" W9 O/ J& S6 H
     {
) Y; Y1 t- S( Y      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 z; g3 ?' t2 C8 u/ M; _! E+ o) M
      if (!pItemElem)
* ^' K$ p. Z, L+ G( Q, T      {/ D* q8 m: G* ~' V
       vItem.dwKind2 = 0xffffffff;
$ @1 \, H: E# Q) d' H       vItem.dwItemId = 0xffffffff;6 l6 [3 o0 g2 j  J& G9 u4 k
       vItem.nIndex = i;% a6 h  P" e' G& g3 v2 |% D
      }else {, K" C9 e2 j% d* r* p8 i- |' r
       ItemProp* pProp = pItemElem->GetProp();3 z$ r- {8 B6 @! G
       vItem.dwKind2 = pProp->dwItemKind2;
6 A) q1 N; X4 Q9 v. @/ B       vItem.dwItemId = pItemElem->m_dwItemId;
* D7 I* T" R) i, A" Y4 x2 a       vItem.nIndex = i;
3 u. T& a+ c5 |  z9 y      }6 C0 Q- t: E7 p0 h0 k
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. C. V. l( q0 ^1 X$ A$ ?6 y) j: S
     }: @+ A3 B9 U4 Q' W; a
     //////////////////////////////////////////////////////////////////////////, k+ f# |1 @% |7 L& w
     sort(vItem.begin(),vItem.end());//排序6 t, u& z5 x. e0 s* E
     //////////////////////////////////////////////////////////////////////////9 k$ ~6 F& v! y7 w
     //交换
# Z/ d! Q( t7 l9 N9 K     for (size_t i=0;i<vItem.size();i++), t9 t- k: O8 h! V: w# s: C
     {- R2 Z& i5 G# a
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- u, J; d2 D0 f; q4 f; l. L
      pInvSort->Add(vItem.nIndex);
: L! _2 k7 K0 Y9 y4 x     }2 y" h% m( e9 [+ q0 ?: m4 _8 p. D6 r
     BYTE nDestPos = 0;
/ {1 R% f2 d" [  d4 X     for (int i=0;i<MAX_INVENTORY;i++), |' M7 q" c* q* X4 W
     {# [4 a3 x+ L6 Y1 h5 x' p# j% W$ a
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 B8 l4 h! G& D4 }: V/ [7 b      if (pItemElem)! b# v/ ^3 J! w1 @; B
      {
- J8 F+ A% s" \+ `: e: |/ O       if (IsUsingItem(pItemElem))( F1 z: i6 K1 B# }# Z0 X2 t. M; m
       {
8 _' \+ b( U7 d- _        //这个位置无法放
2 G' s  K8 K$ H# J        nDestPos++;
  v: o& ]8 ^& O0 q. O$ H       }* [( R/ ~0 m5 M) B: U
      }
. B+ |, E- Z% s6 f2 L% O      BYTE nSrc = pInvSort->GetItemSrc(i);- `- |/ A6 E" a
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 d  g5 k+ R2 W! q4 m4 l, Q      if (pItemElem)
2 {, n1 n& z  {3 t6 |      {
2 b( k1 {, l2 E2 z) A$ n       if (IsUsingItem(pItemElem))$ w6 B. h& @8 e( B- r2 a" z* t
       {. F6 U  d# j6 s; m
        //这个道具无法移动,跳过
% t6 h4 \) u$ q& C  X        continue;
! O- Z& R1 J$ d  g) E0 N       }' p; Y) b9 v* K6 t0 @: ]  `( W
      }else{) t& }* w+ ~+ E1 ~
       //空位置 不用动
6 ]$ E& K, I7 T% ~: h: D% C5 ~7 b       continue;& ?, P/ d5 I( ]* \0 A4 i
      }4 P  p% D1 ~! N; |) {- s
      //////////////////////////////////////////////////////////////////////////) g+ A; ~9 Q! A/ t3 g* K) g
      //开始移动
' \( B7 v/ {2 B, E      if (nSrc == nDestPos)
6 y7 ?  y! ^4 R1 F) Y  t) r: `# V      {
2 T; s  [, m1 P8 e! U       //原地不动! [% `/ N- h& m' t
       nDestPos++;& d" v% ^/ g% ?
       continue;" k4 M" O* z6 h. N8 ]- U8 L5 v' G
      }
+ Q: x$ R  S4 C/ v+ S- u7 A      pInvSort->MoveItem(i,nDestPos);
% j1 V- }5 j! r; q) |3 g5 e      g_DPlay.SendMoveItem(0,nSrc,nDestPos);  ]3 V; i1 O# J
      Sleep(5);5 C' E8 e0 d2 {% X5 m
      //Error("移动 - %d->%d",nSrc,nDestPos);/ J3 G5 A% n! Z! w+ x
      nDestPos++;
/ h0 X) m# v* v     }
( y) ?( N7 y! G- P     //取第一个元素的信息6 C2 R1 R' B6 _. v% K5 Y
     /*
- U& _3 Q! }% o- M2 a     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% y$ E" k1 L: B0 I- h8 P     {
  v5 n% f5 X! E6 }3 M      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% _' A( F0 y; j      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: A5 t+ Z6 H1 p/ n' Y) G. q     }8 y6 L2 j& z- F, F9 r' c: u; y* z% p
     */9 b+ A' D5 {% G# W! I, x' P
    //////////////////////////////////////////////////////////////////////////4 p- Q4 t1 S3 n: Z
    break;
2 e5 O( h2 Z8 v4 y* j, i   }9 p# P5 H7 l' i3 \0 [
  } . n3 ^6 {6 v) i- u! Q4 o- _4 z
}
* q6 C, [8 F; W( O4 Im_wndMenu.SetVisible(FALSE);
) I# s! _  S* ^) U! h: ^# }
& i8 g' C1 l" Q--------------------------------------------------------------------------------------------------------
! A0 a% m+ x, U- I搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 y7 X: |7 m3 ]{6 D7 ~2 u3 ?3 d$ Y+ C) Y
BaseMouseCursor();
$ B% y7 P" Z* Q9 B! _}
* I+ O5 a% P2 ~8 S) F; j" d在其下添加:% S7 ?8 L. y8 @4 o) Y" _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) J) V8 z+ v7 C5 h8 M& p7 F{3 s$ g: U% i$ L7 a
m_wndMenu.DeleteAllMenu();
7 `. k4 }0 Y' A. |/ S5 Y* H1 A* B$ G$ zm_wndMenu.CreateMenu(this);
- c# l: k% n& vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 I% |/ p  Y' p) j* s7 P. Z

: a  v+ p+ L9 O& ]if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ N' f! j1 c; ^2 I' J
{
, b, G' M& r$ U" |$ K  //P以上级别才可以删除所有道具
  s2 ]5 _  H5 Q/ D( V2 m  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 J% C; o0 l/ X. o
}& H& P8 A7 u+ k  ~- Y5 H
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* G) f" @# h$ N7 i0 C# a& gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& s& j# A4 z: X, M: D& @2 h5 }m_wndMenu.SetFocus();
' C: E: R# C3 H8 J/ S# O}$ @- k: ^3 ^2 X8 k
------------------------------------------------------------------------------------------------------------
$ v/ C2 L. }4 [7 C9 ^. s*************************
' m3 `$ ~4 k0 Z) Z/ U! v' VWndField.h文件
' V% ?  r; y$ H" T9 V: x0 g" H*************************% H9 T. i5 v) _7 M/ _. j
搜索:BOOL m_bReport;+ Z6 F5 }% H! I  t9 L! W$ _! [
其后添加:; h) S$ Z& j2 d% D! T1 b
CWndMenu m_wndMenu;1 c# L) C9 k. i
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% T9 o, U9 c& ^0 A1 ~; s其后添加:
) d" S. q3 J; e, [, @virtual void OnRButtonUp(UINT nFlags, CPoint point);8 c6 b' t$ F6 U1 m. f
* l6 e' c/ o! ^9 v1 b
7 T5 _+ S" ]$ h) v+ ^- z- B

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 22:01 , Processed in 0.061195 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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