飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
1 ?4 g' s6 o& T6 r# S' F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ j7 W  @. `2 S/ W: P3 k6 k8 Q8 g6 d- Y
struct sItem3 o" n; p! B: U1 j, B( l
{
8 {% `% ]5 }& `, BDWORD dwId;( A5 ?5 E, u2 ^3 {: H
DWORD dwKind2;
5 D, U  B7 T) Z1 T1 {# ^  W( e+ d9 k; ZDWORD dwItemId;* x2 \6 Z9 v4 c% a, b
BYTE nIndex;
: S) {1 `( }8 o$ Q" xsItem(){2 M! z; h, |, U, \5 d5 ^
  dwId = dwKind2 = dwItemId = nIndex = 0;5 z! b( \$ Z* `' l. r0 L5 J; j! b
}7 c: r0 M0 f& ^' k/ d8 z6 k
bool operator < (const sItem p2)6 t1 T3 I  W! a+ J
{
# v& r  b  o$ I, _  if (dwKind2 == p2.dwKind2)
: S) }0 p: B) X0 ?9 V( @. J  s  {
  V. ~: [, [$ O% R. p8 m   return dwItemId < p2.dwItemId;
4 d- k0 J$ j8 \( \* i8 e: l) m  }else{
9 l. v( `8 T/ t3 w   return dwKind2 < p2.dwKind2;
* {/ N+ M4 R# F, ~3 w8 L. @  }
+ G* S- p7 y' d5 X) k6 S}
" Y* W. V6 K4 E; d$ R};- {  }4 U4 S) b4 K4 h
class CInventorySort
4 ~* N, k, ]9 |  ?- \% \{8 O' z0 }" a3 T  G5 s4 D6 u
public:" z" M* q6 U  q
CInventorySort()
& }' |% w9 @! r1 \' d: U& `/ ^{
# j  B- q( H- ^) C+ |4 J  m_dwPos = 0;
3 L  E% K: ?! ^; I}" M" ]% }. D: \2 N
~CInventorySort(){}' D, E- c# T$ l' E
private:
9 Y$ ?& y- @$ u- `* AsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& {' }4 J; j- BDWORD m_dwPos;5 T! |1 r$ r8 R" F, u& X( D; y1 U5 ]
public:
% T- L+ L# X# @) i: v! Z' Qvoid Add(BYTE nIndex)1 M/ K/ I$ F4 y
{: }# ~: H6 ^2 p
  if (m_dwPos >= MAX_INVENTORY)
- _* i8 z' K9 ]* O* Z* t. ^4 H  {0 i2 T  d2 {, [
   return;
2 i+ F' ]2 K5 }2 i. i1 Q  }, j2 E! t5 T/ ?1 b3 c
  m_Item[m_dwPos].nIndex = nIndex;
% c0 l7 s0 a+ C) ~$ u# ~  m_Item[m_dwPos].dwId = m_dwPos;8 e$ a/ S/ [; L3 S- Q% @8 L
  m_dwPos++;- @2 g  A' y4 W, D
}
) u, P8 z' l& e# ~; ^$ j5 E) [BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: x2 M/ j9 t1 d{
2 n4 `6 x, v* T  for (int i=0;i<MAX_INVENTORY;i++)& ?% w3 E5 C' l% J0 |6 L: P9 f( N. T
  {) L$ @* M8 ~# U. C' f0 w& e' Q) r
   if (m_Item.dwId == dwId)
# f, S( o* Z- K) A   {
) ~$ i# x  j) `    return m_Item.nIndex;
6 D2 R/ C1 p! V" t   }
1 u. c2 R% J7 x5 E  }0 q$ d6 y9 v4 P8 }/ w5 g0 z
  return 255;
7 J5 C4 e/ _) l: k+ }}% b1 b$ s2 m& H3 R
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- s/ G0 F/ R, I2 Z
{
9 H' ?) h+ n! I2 _* }8 D  BYTE nTmp = 0;# Y: N) e8 D1 [  ^/ W+ {
  bool bDest = false,bSrc = false;
# D# M" t! k: O' X! {  for (int i=0;i<MAX_INVENTORY;i++). G! m$ C- t0 t
  {
3 C4 _; i& k$ d& i   if (dwSrcId == m_Item.dwId)% J1 d- {2 Q5 U/ g
   {
! R2 K  h1 G2 q) s" ^    //id相等 则 改变对应的dest和src
5 N# m6 a7 m4 e" s3 b    nTmp = m_Item.nIndex;$ P3 x9 k1 H. D% V( f  M( o4 g* o
    m_Item.nIndex = dest;
& d. Q+ s* G6 E   }
3 D5 {6 S" C) ?* h& Y* T# p  }/ w: n# V4 b! Z+ `6 ^" L! |5 b5 c
  //临时数据保存完毕,交换开始
5 G# f3 ]0 D! ~% n/ P& r  x  for (int i=0;i<MAX_INVENTORY;i++)
$ i: @* C% k7 K  {
% K/ k$ E$ o) b- F( J; I   if (dest == m_Item.nIndex)& q$ R0 J! @1 e* {; r
   {
5 b  T1 X$ ~" |4 q' e$ F    //id相等 则 改变对应的dest和src4 \  f. p: S+ p2 B
    m_Item.nIndex = nTmp;
8 Y7 }! {5 c3 F/ W* u# e4 o   }
4 a7 x- M  U' e  }
8 d2 O& z" f. I0 s) H}1 ~* {4 s$ a, _2 z  ~* E. X. O( K
};8 j' j; ~0 H7 u/ u1 d6 H
-------------------------------------------------------------------------' I: Z2 \4 }: h5 x
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' B  {. t- Q$ C! W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: s7 N2 ^% e. t紧靠其上添加:
. R7 H! o6 M- ?( Q" uif( pWndBase == &m_wndMenu )- ^' ?& ]$ L# r1 p" T; W5 X
{
/ W& I1 o( A" Q0 J! c  switch( nID )
5 C: l: \6 W' @& y2 W8 X& J  {  s4 c5 n) S! [0 M1 v
  case 2:
- |/ d4 \( G5 q  U   {1 a3 q* V# C  j* ~
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
  S- o% M, O+ f3 k- N    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 ^" `" l5 R, f2 K    {
* z" L! z; S9 X. g5 Q0 M     break;
8 S9 w5 b3 v( {0 J% `    }
! i/ r1 o0 a2 t# Z, Z9 g2 N0 a# Q    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 x: C3 b0 h  Q6 [2 l* v$ @4 k9 v
    {( j8 [; o3 O4 q! p( `* {) F
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; r# {* f. P( a( ~7 ~! e. ?
     if( !pItemElem )
3 J3 _- f8 b1 T. g      continue;+ B- F# q- ~! U, a
     if(pItemElem->GetExtra() > 0)
* [0 v" j1 u4 K5 V      continue;) v0 f3 K- m" v% D
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% G) b, a5 q# {* V# I7 P      continue;
% d- m/ G! P9 u, Q     if( g_pPlayer->IsUsing( pItemElem ) )% O# M& a& b  u+ V1 w
      continue;
( |3 H6 ?: s3 H     if( pItemElem->IsUndestructable() == TRUE )5 }' M8 ~1 p& D' ]
     {
% e& K- @9 j' u      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 ]+ u6 g! r& b# U, k% D6 W: W      continue;
, w8 `; l6 E& N! H     }3 j7 q0 t& u5 H& ]/ z6 @" }
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ y0 n6 T5 h9 I* L& C4 `0 F# |
    }
, M( D2 x7 S/ _& }    break;
7 W9 O" Y% }4 Y* J) Z   }1 e- C( \: ?& Q; x1 T, g8 R
  case 1:
& l# h, b: I: a+ U# s   {
! x6 o2 Z  I4 f! b    //整理背包9 s9 {7 K- x) s# y5 |! i
    //////////////////////////////////////////////////////////////////////////+ T+ I" f  n; Y
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 V4 X3 R5 i; B% r- e
    //////////////////////////////////////////////////////////////////////////2 \2 F9 @, b+ E0 {: z# ~# |; z2 t
    //////////////////////////////////////////////////////////////////////////
+ p  z0 I/ Y$ I( i    CInventorySort* pInvSort = new CInventorySort;
& y6 m0 _; {; g+ v6 [    vector <sItem> vItem;
3 ?/ g3 q* s  W8 ]$ |1 H5 k, c    vItem.resize(MAX_INVENTORY);//初始化大小% e: @* N) E" _9 \. y- J8 J4 g: Z* f
     //////////////////////////////////////////////////////////////////////////
# M1 L; X& H6 E6 B! X/ A     //填充数据
) F' I& ]) S( k* |: H. c7 N; }     for (int i=0;i<MAX_INVENTORY;i++), g3 C: M3 h0 O; S
     {
5 s' k) i+ ~8 q% J      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. w9 W, G( O4 f) k, ^7 _- [# y7 T
      if (!pItemElem)
" X9 ^. B. c! T# M      {
$ p) @# P2 j; A& v       vItem.dwKind2 = 0xffffffff;# V* Z" Z" I& W0 L1 o
       vItem.dwItemId = 0xffffffff;
4 b* n$ v# T+ [! k       vItem.nIndex = i;. u# K' Z7 V! j+ ]3 {2 W
      }else {- k# O" x* Q- I
       ItemProp* pProp = pItemElem->GetProp();
. U' T! U6 q. o. Z; p5 G- K       vItem.dwKind2 = pProp->dwItemKind2;
2 Q# P$ m2 m) {* S& l! |       vItem.dwItemId = pItemElem->m_dwItemId;4 a/ m( p1 }7 g( r% i: i
       vItem.nIndex = i;
1 Z% M# G3 j6 [5 H      }
# `7 B" I. w( H* u      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 d2 f3 u6 J9 M( L
     }) b' p( x6 r" H' y1 W- X7 ^2 U
     //////////////////////////////////////////////////////////////////////////
4 S0 f. I0 J4 X8 `     sort(vItem.begin(),vItem.end());//排序" ~) S# r1 _4 c, S- F
     //////////////////////////////////////////////////////////////////////////
) O1 k2 s# N* r3 D$ H     //交换
3 e! b4 p5 L+ N$ i3 S! {     for (size_t i=0;i<vItem.size();i++)2 N* B" f( N. \: v* h" V
     {( c' F; {0 x( j$ h
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( ^* n8 q) Z3 r. B2 x
      pInvSort->Add(vItem.nIndex);
1 B8 K) u( u: [! [3 Z  [     }
! Z0 [9 ~) B9 t4 G9 e/ u' _     BYTE nDestPos = 0;3 }) k3 a, h% n& x2 K5 D6 F
     for (int i=0;i<MAX_INVENTORY;i++)
0 d6 I9 Q% b8 I2 ]7 g+ Y6 t     {
  n; l" l2 L, b* c% _      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 v3 M% J  I* t# c* |0 W: Q      if (pItemElem)3 Q* }& w( j+ R
      {: i: V! X3 D, s1 B' a8 f0 D& ~' K/ f
       if (IsUsingItem(pItemElem))" }; ?3 _' z# w6 w8 [5 |6 O
       {/ d% ?4 J3 J- D/ w/ G- J2 D
        //这个位置无法放9 E# S3 x6 W+ P& }, h
        nDestPos++;9 f  W2 n0 p( ~
       }8 U7 O3 {5 Q* f& ~
      }
6 t7 [  b: ]0 v% F6 U4 n      BYTE nSrc = pInvSort->GetItemSrc(i);
- E8 @2 K7 p4 T0 a      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 k* q6 H9 w( y1 q5 F2 P" D      if (pItemElem)* z5 }6 F* y  Q5 d6 [) G
      {
) n5 Z0 L( d- O3 w/ V       if (IsUsingItem(pItemElem))
% m# q9 c( c* d( O4 V( X       {8 G5 f6 I3 K! v% b/ w# i7 L2 A8 \
        //这个道具无法移动,跳过
( S) W# O  x% Y        continue;' Q+ M# `$ `$ Y; w) n. b% b
       }) c4 }* v1 o6 V: Y! r% |
      }else{
6 U) i$ C2 r" ^8 [( {6 D' L8 V       //空位置 不用动
# G% O  p9 {1 g1 X       continue;+ A1 x. A' M# ~
      }
5 Y. }  J# Q1 H0 a8 o+ D3 H      //////////////////////////////////////////////////////////////////////////
+ C( N; O* g( z" [1 @& X' a      //开始移动
2 I0 ~/ R4 i9 R& b  A      if (nSrc == nDestPos)
) t& B! |9 X; W) v* E! T1 L8 a      {, H8 Z" I1 G' B* S* {
       //原地不动
+ `( O9 Q0 u; d- v0 _0 u0 A       nDestPos++;
4 o( ~; z6 r. ?2 q0 {1 F) r' ^       continue;
1 u; n( b1 x( G+ N      }9 c+ q# }1 V3 ^7 Q
      pInvSort->MoveItem(i,nDestPos);
: i  m( j* A1 \9 X2 y      g_DPlay.SendMoveItem(0,nSrc,nDestPos);, F# l5 d; [! Z7 r, M# n" q% y
      Sleep(5);( b; z( d, |) v% g- N( n2 R
      //Error("移动 - %d->%d",nSrc,nDestPos);
% [7 O0 E! V; I# U# y6 X      nDestPos++;
) T7 r5 [# w0 N     }
) T  V( V. O* S4 v     //取第一个元素的信息
" P# }( l) C$ J9 K) e     /*
% T, q2 G  T- U" r* |* T0 N3 Q     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), {- M1 A8 e/ @
     {
: X# x* d8 S- k# J! ~      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. k) j  e) Q  f! X4 E( B( B% d; X
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! }2 }5 a% \' ~6 D1 P- @! e4 n
     }
/ z$ D6 c* n8 v5 ^' r2 x: ?/ b6 M: b     */7 j  y$ h! I8 h
    //////////////////////////////////////////////////////////////////////////
5 w( o$ T1 Q, {7 V  L    break;1 @' {6 Q! P5 J# B; r. l
   }/ I: P+ z! G* k7 g
  }
" N4 B9 l+ s1 w9 z% A9 M}
5 {& `6 r9 |7 X" ]0 Q% L, [m_wndMenu.SetVisible(FALSE);0 i. l" f) Q4 O% o6 D
) C% H( U& K2 d6 I9 `: v. z
--------------------------------------------------------------------------------------------------------
: Z" J% n( }, e( w- v5 r搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 x/ B$ |, _/ J/ l) d3 V/ P6 O{5 O* F; F8 ?0 w' ]6 P/ F5 S/ V. k
BaseMouseCursor();, k& w; [+ d3 v, Q& g# x2 S
}
  i2 m; l6 G) _, a# E2 k4 z+ v在其下添加:
' t) k' Q# w" j+ c2 ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 ]8 f% m% e5 C. f& B
{4 ^4 v% K* a2 E) e8 |
m_wndMenu.DeleteAllMenu();
4 m+ G  Q3 s2 ~- N6 a9 b3 ?m_wndMenu.CreateMenu(this);
3 e. U" p) }1 S$ V9 ^& W5 Xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
  r3 }% s! C+ l9 I( b* S; A5 Z! b+ h$ i& V1 a0 i" z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# ]. r3 k7 `- k" l$ c
{' x2 D$ D) l: a) `& k) r
  //P以上级别才可以删除所有道具
* _. e  m, ~" ?1 s" X  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 n+ ~+ R6 B& d# u# v$ T$ U9 @
}
. S' L+ {. b9 }. {/ P0 Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: M' ~3 |1 x* g  x; v! Rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" s& j6 P! T: E% h; x0 ]m_wndMenu.SetFocus();
) ~. {  O( y5 H0 T. f3 H}! t  d+ r& x( o. Q7 q* V" n
------------------------------------------------------------------------------------------------------------
; V( b( o7 G8 q3 e1 J*************************
  c9 e5 Z. e! w& j  ^$ L* B: ^WndField.h文件! ^+ J) A5 m9 ^+ W3 ?7 h8 |7 u
*************************% O  Q0 h; I# l) n5 T7 [, [
搜索:BOOL m_bReport;
# t" r1 k! |; D8 Y: e3 `. K其后添加:
8 N  p( {, M4 o. B  R2 m2 A; g1 \9 vCWndMenu m_wndMenu;: g# a" f8 j+ v$ \' N
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 M7 }; Z0 H, q% S% o% I
其后添加:! ?4 f( u8 l# I5 l+ @6 D
virtual void OnRButtonUp(UINT nFlags, CPoint point);" C5 K* w0 S* T4 s; y" B2 |

% ]& @  _3 b' d. l
+ o% x. e- I1 t

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-1 21:39 , Processed in 0.062006 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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