飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件+ x: J! P: s' ]2 s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" w" E" g- B% ~; N3 J
) I# D" t" C# n' E( @struct sItem
+ X" s/ g# G  K2 `5 t{, \- W& m2 \; `7 l: Q- w( C: ?
DWORD dwId;- {1 T5 F8 g4 j4 Y3 _& j
DWORD dwKind2;
7 W% |9 u4 E* E" `DWORD dwItemId;
# p' I  d. D5 L" Q( r# GBYTE nIndex;
- x  I* m+ s! y" D6 GsItem(){
" k# O& p$ d& P4 d7 k, u  dwId = dwKind2 = dwItemId = nIndex = 0;
6 P+ ~7 w' e& B( Y* x) p+ j! E}) U2 g  f+ w" B. ^* C
bool operator < (const sItem p2); u( g; P+ B& C+ L
{
% F" r* ~% {( b/ g, a- \- z9 t  if (dwKind2 == p2.dwKind2)4 l# b/ l$ Q; E$ [" z4 Q
  {
+ ^4 H- l6 ]) P8 ^; S1 Q  \3 _" ]   return dwItemId < p2.dwItemId;
9 ?1 f  N$ z# B  n2 u6 M; Q  }else{
  T8 n+ i" U* r2 f$ C# A8 ~$ o0 y   return dwKind2 < p2.dwKind2;
( F( V1 l$ |6 Y8 @4 ~0 Z  }
* d* \8 d2 b" X" U# e}8 g1 [' |! Y9 N% ?! s  ?
};
; `+ L& r8 q$ `0 |) o+ L& @& Kclass CInventorySort
4 w" Q! r! o5 m1 W( Y" \1 P$ a{
* ]: C& A! R9 X* ?! Rpublic:
1 f7 T# E# w/ T% Z  w# |1 SCInventorySort(), q4 E" K& B( u. m+ c$ ?
{; E0 s  L! D  \; H
  m_dwPos = 0;
$ |" R0 j( v$ h8 U" U. l9 l}
7 Q+ X1 p- ?! m~CInventorySort(){}
# X9 j& M1 {3 q" n3 j: hprivate:
! Q  ]. J  {8 M3 v2 FsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( O8 P% H( V9 E
DWORD m_dwPos;
) O; c. W; C6 A$ r4 N3 V0 J5 Z# h. x8 t! Dpublic:3 G+ {! @  K' b9 q+ u
void Add(BYTE nIndex), i# J3 s2 c) m* b  y* G
{
% V8 S8 i$ `% \! {& b, j  if (m_dwPos >= MAX_INVENTORY)% w7 K! \/ ~2 F8 t* J" ?* C6 v
  {
/ g3 q) o0 {8 ?- ?( l& N   return;
" y. w4 r2 w* S. p  }, {: Z3 |# P6 H1 v# C% I6 x
  m_Item[m_dwPos].nIndex = nIndex;: A6 G7 d7 V$ X) w& s
  m_Item[m_dwPos].dwId = m_dwPos;
% W. p& l6 O8 d& t; x  m_dwPos++;
$ J2 z( W& `" ^1 e/ t% @" G+ g: Y}
2 U+ _4 }. O6 N1 s# lBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
& K. x* l8 ~  h; [1 |4 }' ^/ ~" H{
3 S/ s% Z- X4 |: ^  for (int i=0;i<MAX_INVENTORY;i++)$ `8 ?! g' _. Q7 Y$ _  C' n& N/ B
  {
+ a6 ~# H2 L, u, W( Q  p) Z   if (m_Item.dwId == dwId)
5 v; n1 k* B3 J0 h5 i  z   {- y# C+ c6 j6 @& P( m6 e; C# B
    return m_Item.nIndex;# y  [$ A# B% L, P
   }
! O/ |) N7 z$ y) F- f  L! R& Q2 }! Y  }4 W" p- q2 Q, C; q/ O2 b! ~
  return 255;5 Q) ]9 V" K0 l3 u, L
}0 L, @% `' U, e. b5 X2 i
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: P- O+ [% P4 k& O1 `& |& C6 Y
{, s$ v$ p+ v9 t7 p
  BYTE nTmp = 0;
4 e% x2 X$ a0 J& B- c) i  bool bDest = false,bSrc = false;  ]. [0 D: p2 [/ F
  for (int i=0;i<MAX_INVENTORY;i++)3 `: x" m$ y5 a; e" l0 ^
  {+ x' Y( g* k' C8 A6 H
   if (dwSrcId == m_Item.dwId): C7 H( B$ @& t! K+ E; b
   {2 k+ ]3 C& B, J* v1 ^) c
    //id相等 则 改变对应的dest和src7 F, ~' j7 f6 @- W9 p1 `
    nTmp = m_Item.nIndex;. c# q* C. p/ x; ?" u
    m_Item.nIndex = dest;/ h0 c* i2 s& T1 l; T! f
   }4 b7 z) z  w5 I( ]
  }3 k5 U+ K# r; [/ ^
  //临时数据保存完毕,交换开始
6 r, s( Y, E# O1 t  c  for (int i=0;i<MAX_INVENTORY;i++)
4 Q+ ?1 n* j1 k: l7 L! o  E  {  @" R% p' s% ^7 L
   if (dest == m_Item.nIndex)
2 r0 f6 ~" {: I8 G  ]+ D   {: V+ E8 m' i: T5 w* w9 Q
    //id相等 则 改变对应的dest和src
, \# \/ Q0 o1 W2 u" A    m_Item.nIndex = nTmp;
# J" \3 ^" t- B/ i0 K& z" [% U0 M   }
& i: _- D7 }3 b# {1 e2 D  }
9 b4 R7 P' y- q6 c}
; Y9 P& w0 o% t* A- P3 t};
+ m0 g  `$ Z! V' n/ r1 t! s-------------------------------------------------------------------------
8 s/ h. s9 I0 c2 {& Y6 K依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' n; k5 }' P0 M9 D0 U0 Y9 n% a搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 Y( L9 f5 O$ T0 r/ ~紧靠其上添加:
- ^7 Z4 y4 v' k: B4 v+ {' L* C# C1 Bif( pWndBase == &m_wndMenu ): i, M& E. [; G
{( Z1 @6 z7 T$ I4 @) V3 c) V
  switch( nID )
4 a; ~. H! Z" I: e& I5 n! @/ s8 L  {+ F4 {8 I6 ?0 U% Y, O
  case 2:
, ~5 p  h- z( M/ e" L& I5 m   {
; H1 _4 k1 G, `! H& n$ v% _8 \8 ~    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 a# l: t' V; W- B; Q, O
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 q, |+ l4 y2 x1 j$ L    {
$ \' G7 p* k) W( P( `9 t" \     break;
0 o# S+ \8 R- X4 m' z8 e8 v$ ?    }
: R" E3 J* j( _+ [    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 A8 u. k) F" N9 F  n
    {
0 T/ Y5 c, ^' T     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& i6 L8 w+ a3 E4 o7 z6 `- ?
     if( !pItemElem )% `0 \" z, r& ]# U6 _3 h
      continue;
8 a$ v# b/ @1 b0 n/ U" P0 @     if(pItemElem->GetExtra() > 0)6 z3 c5 e" T- Z: I! Y3 T7 p
      continue;- U; w* @# r% h+ @
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & W: }7 m' U$ A5 B$ H) a3 T
      continue;
3 r5 s8 t4 Q3 J8 r9 p/ M8 c+ e, C     if( g_pPlayer->IsUsing( pItemElem ) )$ U$ p2 J' ?; Y
      continue;8 D( h7 [4 ?1 Z
     if( pItemElem->IsUndestructable() == TRUE )! a. U, X! ]0 T7 J3 I! ]
     {
4 {  N) `9 j6 B, |      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 s+ \. ^3 e- G5 a7 \# x8 @; P      continue;9 s+ B& z0 ^; c- y5 J7 N% \, P) _
     }
8 z) ~2 _/ x( f8 @  G     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, s2 V; ^6 Z5 ~( o; q# H( I$ @. u
    }
/ R4 j* z0 }% {7 Y$ a* s" D! |# ^. o    break;  y+ j6 C) s; m: u, q; q# c
   }
- Z) w3 O, ?! u5 C  case 1:
# U+ @; F2 d, V# N, a$ j+ c   {
/ I" F8 H* e* y8 T1 l* V    //整理背包+ s' v0 m3 y6 M. z( z
    //////////////////////////////////////////////////////////////////////////8 S$ I, s' b8 e! S4 R2 q
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 `. y; K! d. Q! d' ?7 k6 D7 N, P    //////////////////////////////////////////////////////////////////////////
% f9 E! V' q) C5 _* x1 H3 L    //////////////////////////////////////////////////////////////////////////( X% r( K* t# m- R
    CInventorySort* pInvSort = new CInventorySort;* N$ f3 V- ^# S) P. L
    vector <sItem> vItem;, P$ y0 O& V. o
    vItem.resize(MAX_INVENTORY);//初始化大小" l: K9 Y3 k2 b( o$ M$ z( d$ G8 f& }3 j
     //////////////////////////////////////////////////////////////////////////
4 a5 ^: X. _5 d8 w1 l* r     //填充数据
/ i9 t8 p) S5 d+ z3 B) b! _     for (int i=0;i<MAX_INVENTORY;i++)
2 P* M( ^  R& w) X. s     {
1 w" J: k+ P* ~8 n      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 B% x' |  M9 g) G& C) E
      if (!pItemElem)
, H9 Z; F6 d3 H3 o8 E6 H      {7 C+ {+ F0 i" Y# z  a; Y) M, O
       vItem.dwKind2 = 0xffffffff;, P: H. |1 H; p5 X8 i) H% x
       vItem.dwItemId = 0xffffffff;/ L6 O7 s$ Q4 O# F- Q9 t
       vItem.nIndex = i;
, j) b! }( u" e8 ~& T) v      }else {
7 C* _( F& i# G- w7 J* |$ N0 h       ItemProp* pProp = pItemElem->GetProp();- @# ^/ T. l$ v' u- B
       vItem.dwKind2 = pProp->dwItemKind2;
) s, G! n& A3 \0 y9 [       vItem.dwItemId = pItemElem->m_dwItemId;! n' p: K& n& N: O. a
       vItem.nIndex = i;  _' f& u7 s( ], @2 v
      }
3 i. K! X- B% F( m9 E1 D      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 l( C9 `% I/ v
     }
2 r( ?- Q6 E: z. K! ~     //////////////////////////////////////////////////////////////////////////+ a- O' r6 p+ _# x0 M# W
     sort(vItem.begin(),vItem.end());//排序: d. R; ?2 n0 B
     //////////////////////////////////////////////////////////////////////////0 r2 U% ?8 ~" G; f) J: J
     //交换
" i) b) m$ Z& y0 t9 a' a8 p- R% Y" @     for (size_t i=0;i<vItem.size();i++). D* x6 b* [3 V; d0 _' T- e
     {
2 N3 D# ?! Q( Z0 o' m+ {      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 q: l! A! N) q. @1 C" Q      pInvSort->Add(vItem.nIndex);
; r( q4 g" I5 `3 {  j     }
- [7 v( [+ j) G1 v     BYTE nDestPos = 0;! F/ Q' U9 k% \7 w6 M
     for (int i=0;i<MAX_INVENTORY;i++)
: |( d, q% v0 s& y     {
: X5 D; O, o" ?% r7 Q      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 p4 ]( B' ^* h' {* z* I2 a      if (pItemElem)4 F! P$ e8 k5 f$ b5 g. s% y
      {
% X& u  Q) z' E7 a( d( U       if (IsUsingItem(pItemElem))
) f5 C. a, o5 z0 \! n1 W       {, ~3 H, k! ]  D$ t1 h* S  z
        //这个位置无法放# P: p0 f* E8 R, Z6 I! P
        nDestPos++;9 c. T7 _, Y' Q0 G0 q% ~
       }
5 u9 f/ N! X6 b# T$ q8 C7 t/ j      }
5 P% f4 ]% e; D  M      BYTE nSrc = pInvSort->GetItemSrc(i);
) |  w: `" P% o# [      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) L% U: ]! d5 e, ]" k  S      if (pItemElem)
  v% r% D" G2 }5 h6 i: Y      {
" O* `; d) m3 A       if (IsUsingItem(pItemElem))8 \6 k4 M- J7 S$ `8 o" K. B: t) D" L
       {
! A3 [( C6 x# r& m4 h        //这个道具无法移动,跳过3 \; `, B$ p" Q2 `" u4 J
        continue;
0 B4 U2 A0 _9 r+ y' l       }/ V% K! v) p. S6 H
      }else{
: |! h) L4 S( x4 {       //空位置 不用动
7 n5 e2 \9 ~1 ]1 Y, W$ `( m2 l0 G       continue;* ]1 k7 u9 _% b* x% [  X
      }
) `( u9 y+ ]# G# J% }      //////////////////////////////////////////////////////////////////////////
! i; A/ K$ u# b      //开始移动
5 E$ x9 O/ R; c( y; [( }; A/ Z      if (nSrc == nDestPos)
# q# N& U5 \- l1 g/ p  X4 L) P5 e      {% y  N/ U6 U; e6 h
       //原地不动
4 t9 l8 |: f. N) K4 J       nDestPos++;$ ?; c: h9 F& X9 z1 g
       continue;. [- `, ^; i, a8 {+ c: ?! x
      }' v% O  y/ f( m
      pInvSort->MoveItem(i,nDestPos);
* _4 r  P4 D& `0 E9 f0 o      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: X  c( c" @4 {! N      Sleep(5);
' C6 H1 L6 V( \- V" R) }; y0 `      //Error("移动 - %d->%d",nSrc,nDestPos);
* I8 F/ V% |: A( O& X$ S# n& j' [      nDestPos++;
( u' _2 V* @# `7 g# J3 j4 l9 E     }
" _8 s# N* w. y* `8 f2 E8 N     //取第一个元素的信息# i. Z- {* z( Z1 n% _
     /*) b* u+ W' x; |- g
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)  F6 P: F, [9 b* Z0 T
     {
& d- u: v! N+ y& c# O1 v" Y      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ N9 s: E- x  e* G6 o      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& x! d" r/ ~) g# H2 K' C- G+ J     }
( V8 i; N* T. p% k     */# k0 g- _8 }/ g% a5 Q/ K
    //////////////////////////////////////////////////////////////////////////
4 Q5 K' E& l9 ?! }    break;
& ^" g' r8 v. y   }
; T- E$ ^4 K; A  f  } 5 y0 I4 W- R2 M( E- h1 o  w8 O
}
& z6 m% ?5 K4 sm_wndMenu.SetVisible(FALSE);6 J& c2 J3 A; a% K2 i. @
8 w! y" J/ z% x' L1 N+ l
--------------------------------------------------------------------------------------------------------
/ O& Y5 u, Y! Y3 Z" D5 c  b! u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 `! E# _, v- t1 B% y2 R
{! x$ d2 K, k2 O9 @2 W% w  @
BaseMouseCursor();
, B7 J" ]" Z8 ?- L4 V2 q" n}
$ s, w' A/ `0 R% R在其下添加:
7 a" n: b9 M. X$ [void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 o$ M+ E1 f1 ^- Z4 V: s- d
{8 z! }0 K7 P# I2 ^7 ]2 S- u) l
m_wndMenu.DeleteAllMenu();
6 p0 d# V+ j" t. U" W, ]m_wndMenu.CreateMenu(this);: r) q/ f% Q6 N
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. J& ?2 ^  c! y3 @; m% ]! n& o0 w1 s/ W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 a) Q* d5 ^+ {! d  E9 Y
{" Q( j% S' a6 w* B/ s1 e1 j1 U: s+ j5 J
  //P以上级别才可以删除所有道具- W) J- k; J: }
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 w# `) h3 y' F
}
9 p" \: _# Q( l9 Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );" G% X/ D' z3 Q- N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 o- y4 a* \4 y0 H' Rm_wndMenu.SetFocus();, z6 x& i$ b+ Q- q! Q) v
}& _1 P/ n( D3 S5 ]9 @5 c
------------------------------------------------------------------------------------------------------------  I. |7 [+ s+ R
************************** s0 C1 R$ p, S4 o- ]  C/ L8 `
WndField.h文件
# ~- O, Q" z& c( y% ?6 i*************************
5 ?( v  @4 N  ?" E/ L8 p搜索:BOOL m_bReport;
8 |( B9 G, v- Q1 ?+ g: e其后添加:
1 q, ^4 `, V( e/ Q7 {CWndMenu m_wndMenu;/ e' r, K$ S% g2 D+ k- V: e
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 s8 @2 X' [2 l0 _* |
其后添加:
( y, i9 x5 m$ ~* w3 n) Ivirtual void OnRButtonUp(UINT nFlags, CPoint point);; ?4 j& t' ?$ b  I

& u& ?1 o0 L1 k+ M, B9 Z! p7 j: P* e5 L

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-31 18:37 , Processed in 0.066158 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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