飞飞世界论坛

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

一键整理背包

[复制链接]

200

主题

203

帖子

984

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
984
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
' s- s8 D0 {3 b; ^# W$ ?+ u搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ F2 z1 T: \' l

( v7 @7 ~2 M$ C9 |+ Cstruct sItem0 _( `- L- V  G) j  D1 R
{0 B4 Q$ @8 K0 F8 ]# i: K7 F) X" \
DWORD dwId;
4 I5 x& ~, i4 J6 t0 T+ d1 ?DWORD dwKind2;) ~" n2 p) Y! x3 V9 E
DWORD dwItemId;
2 }( r1 }) ?0 a- `' i8 r+ NBYTE nIndex;
5 ?/ Q) {7 N- O4 MsItem(){  u6 H4 i" R! ~/ e( W# A
  dwId = dwKind2 = dwItemId = nIndex = 0;4 d5 n/ s: T% w8 |! @
}
0 n8 r( n( I6 i2 e! ]0 ^5 Z0 |bool operator < (const sItem p2)/ Z1 u& a9 ~* g& n& @% v9 j& \
{
+ `7 [/ k; A, _: E1 Y( z) k  if (dwKind2 == p2.dwKind2)
6 B& k6 G4 q$ M; F% n  {
3 X5 Q; r9 Y9 l" c   return dwItemId < p2.dwItemId;% _! E* Q/ w' F3 Y* ]- Z
  }else{& o6 A2 a- e/ X7 }# Y6 d- X
   return dwKind2 < p2.dwKind2;
1 b; o- \. n5 f  }* }( y/ \- {1 C$ t1 h( t' g* Z
}1 D) k. V3 J, y; v# ^( [8 _) \  \
};
2 ^- G# K+ n1 iclass CInventorySort
( Y, e" k8 f1 }' ]1 L  H' t- Q{
4 e( Z* a7 y9 r. S8 upublic:
' {. c1 |3 @7 n$ b# O+ ], NCInventorySort()
' `: Q) M; w, ^( Y3 Z# b! t{5 U5 `8 ?! c& ?+ D/ K% G# f) o. p
  m_dwPos = 0;/ E' n5 B& d" r
}" G0 O9 B% r  y2 T% f0 Y
~CInventorySort(){}7 M' H- T0 g! I  m
private:
! p+ f: y: n0 e5 W- {5 X3 g) y. gsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
  w+ w& W, @  TDWORD m_dwPos;
( O& G3 ~/ G& @; V+ g0 C9 t: m" N; Bpublic:; r" z  Q2 J+ V& s/ y
void Add(BYTE nIndex)0 N2 B7 z! u% [. v8 x1 P
{
3 _4 u, b2 o( T  if (m_dwPos >= MAX_INVENTORY)2 ~0 ?: J9 t% Z: c( Z8 I, f
  {) v  O4 P+ y( `( Z/ c* A
   return;5 a* _  _. s( c7 b
  }
* t+ F8 w3 Y# o( Y1 F! z1 S  m_Item[m_dwPos].nIndex = nIndex;
: t3 m, Q' W3 @- J0 i) \0 w  m_Item[m_dwPos].dwId = m_dwPos;7 R0 R5 ~6 V: [' L7 n$ v, |6 o
  m_dwPos++;8 _' k/ |& r1 ?% r4 a2 N
}5 s3 v/ G8 s5 A4 j* |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! B6 T8 ?5 B8 g{
% }0 t: i5 f+ L  for (int i=0;i<MAX_INVENTORY;i++)
" h" a9 o/ |! x0 A+ B, D+ u( T2 o  {! N8 X" U$ v* ]  \
   if (m_Item.dwId == dwId)
  F1 y! f0 i) v1 y; s, r   {( M% ]1 H, |2 I, [& ^
    return m_Item.nIndex;
3 S& N+ S: z. U1 r   }
& h& o. A$ d' s4 H2 f/ ~  }
$ Q# L: o( n" D0 [* M% {  return 255;% C" m0 G$ J" C5 f
}$ w! J4 o) [1 ]4 M' P9 V+ p
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' C" Z: a, c$ Z
{" h+ ]5 ?# m$ k
  BYTE nTmp = 0;- O8 K, ^% t6 ~  I& z" x
  bool bDest = false,bSrc = false;
0 ^3 l( p# x" T  for (int i=0;i<MAX_INVENTORY;i++)" g/ e  v+ G9 C
  {* O* a2 R. l3 u4 ?5 \
   if (dwSrcId == m_Item.dwId); c+ C" N( f6 ?' v+ F* s5 d3 i
   {
' m0 z  T& U% N* T' n" q    //id相等 则 改变对应的dest和src( H* @# O, p1 Q5 u
    nTmp = m_Item.nIndex;4 ]+ Q. k: E  T7 Y
    m_Item.nIndex = dest;; z; w2 l1 V( R# K$ |& Y
   }3 _: L% B8 J$ y: V+ N
  }. T8 ^5 F- C- y; n! `
  //临时数据保存完毕,交换开始
1 ]/ R1 x4 A: v  for (int i=0;i<MAX_INVENTORY;i++)
+ e0 x5 D' w0 J1 ?  ?  X2 E- b  {: j: j) B6 C+ p2 @4 g
   if (dest == m_Item.nIndex)
# a0 G2 F, H) i  R" T   {
+ O2 j  l1 u7 ^) t4 J% z. i, t! W    //id相等 则 改变对应的dest和src! Q1 L8 V* ]- D2 n3 `* |
    m_Item.nIndex = nTmp;2 O5 q/ C5 Q9 l0 ]! H
   }
( N: p( h" ?( ~4 B' A, f- R  }/ ~' d% |; v0 i# g$ r% Y6 L
}
/ J, H8 Z( j* z; |};+ E) Z/ |6 ]- R' F
-------------------------------------------------------------------------- l: f4 J2 z) l7 v+ l) ]/ b3 P
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 d- e" X. A- W+ u/ t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' y* c6 S. a1 ^
紧靠其上添加:
8 d& {5 Y0 J& q4 S+ H4 Gif( pWndBase == &m_wndMenu )
3 \! A- t# d( X{
# P7 d. H5 d9 j. S  switch( nID )/ t# D  Y4 f, _, i: S2 v8 j
  {
! M4 h4 E0 T& X, n$ R; ^" S  case 2:- K, q0 I" x% v. a
   {
1 t: z% `7 \2 l( x+ O    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ `: m- i: @6 G    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 e( v* }0 m  ]# p+ v5 F
    {0 }* m2 p/ F: {' o2 a# P* s. I
     break;; I8 D# @; p# R
    }
) c+ ~6 v* @/ V& t, |1 x    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& Z3 x5 d/ x7 i* ?! Y) p    {
" u, b$ l" ?6 Z     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& u% J) r1 p! [9 i     if( !pItemElem )' ?3 C7 b6 x6 |& Z4 P
      continue;! T) c/ A! `8 A2 s( r% ~" P# \. Q
     if(pItemElem->GetExtra() > 0)- a3 v4 h: w! Y% w
      continue;
( Z) |' d; i7 }6 Z0 o3 N1 P     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 ~5 g! n7 m  X2 \, X. T' H7 @      continue;
" w4 P0 ]5 Q9 `2 `# M7 t     if( g_pPlayer->IsUsing( pItemElem ) )! `/ D, |& T/ M# e
      continue;1 w2 ^8 u# B7 S/ @
     if( pItemElem->IsUndestructable() == TRUE )# s/ l3 w9 p2 A8 O+ d5 H
     {
9 V  _* M. b* d+ I) B: E; \      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 _+ Q  o* m9 S" E& C
      continue;
" D5 B! v* n: N" r+ Y9 N     }
0 J8 e1 @0 }' K3 o# h     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) Y+ `1 r  F( z    }
2 q7 r3 y9 G5 x% C. U    break;) o9 H# ?% u1 H# J& v
   }1 F: y0 e+ D4 W
  case 1:
4 z9 y: {+ i0 f) n3 p- O, N   {$ Q+ H9 b. a  J6 Y+ J$ X  n
    //整理背包
2 t8 O; J$ {. ~3 k    //////////////////////////////////////////////////////////////////////////3 k% Q0 x1 m$ e1 I' M& _' j
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% f8 y% g# T& Q0 ^    //////////////////////////////////////////////////////////////////////////
* w5 \; H6 G* d- |    //////////////////////////////////////////////////////////////////////////! `# i. \2 H2 @+ N- X2 C& s$ \
    CInventorySort* pInvSort = new CInventorySort;
% E/ c; Y& U6 S3 F" q  Q    vector <sItem> vItem;
( K7 P8 k  q( F    vItem.resize(MAX_INVENTORY);//初始化大小
$ T" N$ j8 W/ \/ S) _& [/ U     //////////////////////////////////////////////////////////////////////////
2 K/ ^& Y  q. R$ n/ |     //填充数据
/ a3 e! \7 [! b     for (int i=0;i<MAX_INVENTORY;i++)  D; |$ x' W4 _# ^
     {/ ^) z2 F* H0 D, |0 l
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 B  s) W, R" c. l
      if (!pItemElem): r3 t" R1 d; T; m3 b* R$ |
      {
5 H# b& H$ D( r; D8 R       vItem.dwKind2 = 0xffffffff;; {  u$ q, G- `$ W% D2 z8 E" ~
       vItem.dwItemId = 0xffffffff;5 ?9 L: a  g& b! z* n8 z3 H! Z6 C- V
       vItem.nIndex = i;
7 V; {. a& n$ n3 ]+ k      }else {$ [$ x; _/ q* v7 g, g, t( D
       ItemProp* pProp = pItemElem->GetProp();
( p, F2 P' a( g; m       vItem.dwKind2 = pProp->dwItemKind2;9 J- g7 ?7 V; N. x& B& d  c
       vItem.dwItemId = pItemElem->m_dwItemId;% k; s! {9 y) ]& H$ v
       vItem.nIndex = i;
2 J! }" g! }- ^+ F5 `      }8 F! ^  z$ d0 ^* F
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) c/ \3 z4 K7 C7 M3 I) K8 v4 A     }) t1 q3 v4 K8 U. K' N" D! z: y3 K
     //////////////////////////////////////////////////////////////////////////1 s# w) i: t1 h
     sort(vItem.begin(),vItem.end());//排序! b2 [. N- n# x* t1 o
     //////////////////////////////////////////////////////////////////////////
3 g$ H" C) J  n. s     //交换0 u% B8 ]' ~8 o; h
     for (size_t i=0;i<vItem.size();i++)6 j* [+ k$ b. g) R
     {
, b/ w2 `  p2 @$ V) |# h6 z      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" N! Y+ e! z5 E; Q      pInvSort->Add(vItem.nIndex);
  n$ F+ W' e) X" A     }! Z" z0 h* g) D4 M! `; P
     BYTE nDestPos = 0;
' n/ k6 @. h; ~& g     for (int i=0;i<MAX_INVENTORY;i++)
9 t" D7 b1 j" p     {  {3 ?& N& F/ H1 K! q
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& t: ]- b; N1 N
      if (pItemElem)9 M3 H- {. q8 M4 @. F
      {
. {8 B8 U& q  d# j7 u9 J       if (IsUsingItem(pItemElem))
/ C. O1 [6 d* f       {) j( J2 O" T5 ^* p  L
        //这个位置无法放
6 Y8 i# X# ~( m7 N5 |        nDestPos++;& Z0 p0 a9 r( T! w+ D' S
       }; |# d$ `* ~1 T& [9 M) {) r' L
      }# [& H' _2 Y0 `$ k4 e- j( a
      BYTE nSrc = pInvSort->GetItemSrc(i);
2 K+ T3 M( c  w- [      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ T( F% a  l- Q1 h/ a      if (pItemElem)
% u/ D% M. U; ]" }6 K( W) }      {5 P2 T5 a# N, T' E% Y" ]# H1 d7 D
       if (IsUsingItem(pItemElem))* P$ A1 I* g) s, r# a3 y! `% j$ T) A
       {) s% b& X, a$ `2 G- f7 R. N
        //这个道具无法移动,跳过
; R8 `/ Y9 u+ b4 X- s        continue;
0 l. k# `" I+ M; j' u       }
: B( R8 M( k$ w* m1 C. k      }else{0 B! d: P& L+ ]0 B
       //空位置 不用动
" m# {4 }* C% F' v       continue;1 n/ L5 U8 Q0 R7 |
      }6 E' [1 o2 R9 x* b. ~
      //////////////////////////////////////////////////////////////////////////
0 H2 F. e, |4 ~# [# Q0 T( M8 W      //开始移动
: r! Y$ |4 f! q: N5 Y* f      if (nSrc == nDestPos)
  c! [; m! o  k      {
7 Z5 R9 A! a$ u. p       //原地不动
6 B2 C9 w( ?7 a1 e# W9 |& o/ @: v       nDestPos++;
: i% a4 ]" @( L1 f) k       continue;
7 ^0 @# N3 ^: A% G5 o8 i9 E      }4 T$ L5 ~* r8 i
      pInvSort->MoveItem(i,nDestPos);
& u- G5 w( Y+ J  j$ p+ f% {      g_DPlay.SendMoveItem(0,nSrc,nDestPos);: e2 P; }" A& X2 e6 r
      Sleep(5);' [" p# T' U/ ?# m" a: G
      //Error("移动 - %d->%d",nSrc,nDestPos);0 [  W% _9 W0 m' k$ i
      nDestPos++;9 G2 K; O& b4 f9 G( l: o- c
     }
9 s2 y& b, u3 }. K* B7 N     //取第一个元素的信息  Q: ]6 [4 d* |. U5 b% k
     /*
& m3 _- w& L  y     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 G: ]4 z$ _1 j$ f5 Q     {1 c6 @: t$ o; k
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ ]$ v! q4 l2 C/ R" ^
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);; ?. K; m; ]+ }4 `
     }! J' r7 ?9 d3 \1 x- V4 c
     */
$ q) G+ J7 t& C6 W# j  l# Y' A    //////////////////////////////////////////////////////////////////////////
- [/ H2 @4 t) ?, {0 l+ Y    break;* E' ]4 Y9 ^& C* ~
   }: _) a0 W" u3 R" [5 z5 |# R
  } 2 Y. T1 {; j: Y0 D  _, F0 q
}
+ I/ B# J4 p6 \8 A1 O1 t& w* S' sm_wndMenu.SetVisible(FALSE);
) G9 Z9 D, U- i# d: _0 K; i0 K
' y; {2 C$ \; \% D7 p4 c--------------------------------------------------------------------------------------------------------
3 k! X. `, U; o$ X- }; W) w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 `- T5 t& F7 Q& b' N( U
{% c4 E" `" t& l3 @* y/ W/ f2 s
BaseMouseCursor();
% l+ c! V% p6 o4 {4 X# s7 c: c}
8 O9 l% g; z! i* @! J在其下添加:! s  o4 N( H/ ~7 P- O
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
- y. v9 n, t& ~/ G{3 a+ n+ E+ ~3 _2 N; a) V
m_wndMenu.DeleteAllMenu();1 O6 k1 `" ^# G- x9 m$ c
m_wndMenu.CreateMenu(this);2 K5 d3 @' r- N- ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 m6 _4 n5 p8 t, e

3 M$ q7 ?! ~& T. J4 }if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). ~* f. s& o7 O7 _9 M, l) g. j" V8 t1 ?
{" A; j! r9 Q  D$ j3 K
  //P以上级别才可以删除所有道具
( w) a( [( K# d7 I# L" N) i  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: B, c4 V% }) ]0 q- \}
1 v% {  U0 b0 T( u/ fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( r% ?6 Z5 ~% E6 ^# W* k; q8 t8 n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- W& M# W- t+ Q. {) c" m
m_wndMenu.SetFocus();
8 N# C) e/ `& M7 i$ ^}- ]2 V. |& t# b8 p% a, U
------------------------------------------------------------------------------------------------------------2 q/ }/ l! S8 _: t
*************************3 L+ D' ]0 l( l0 _9 b8 s9 B
WndField.h文件: [9 F3 t! g8 ^  s% R+ b1 o
*************************
; d) T0 g* `7 w5 I+ W: d搜索:BOOL m_bReport;
) K1 ^" G) C" Y2 t5 R+ y( J7 M! F其后添加:- N2 N- ~( s. u. c) [) ^6 g! W9 k. u+ Z
CWndMenu m_wndMenu;) K2 T: s8 h6 l+ ?3 d% B
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: z2 e( L3 j0 r7 B其后添加:
. z9 `" A- t- l' Q) d% M. bvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 R* X$ M0 ]( t+ f6 R0 I2 {3 w( e

2 n/ X5 D9 p, M0 b

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 01:22 , Processed in 0.070578 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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