飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件* W" p4 Q0 P" \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 M; `+ t6 ~4 G/ `$ B
6 c- B. n8 w9 o' Q+ o0 i/ Kstruct sItem
1 `: J8 D) g( B{
+ h, @3 y/ C0 C+ Z0 t, e, XDWORD dwId;  f/ ]6 H4 V% M. |( X( W- r, p
DWORD dwKind2;0 a( p! n- `4 D: }7 V1 d
DWORD dwItemId;
; g' T8 I. v3 c8 L' x0 a& ^BYTE nIndex;) i5 [- G* Q: G6 Q. ]
sItem(){
: d; c- P6 z* d( m, P6 ]$ E: a  dwId = dwKind2 = dwItemId = nIndex = 0;
4 K8 K0 h% G+ \1 {  U' \, i5 ?  X}6 T+ _1 N& C4 C/ c7 Z6 u
bool operator < (const sItem p2)
. i1 W2 i8 J" {5 R5 }, E{
) H  J% `. J. B9 a  \  if (dwKind2 == p2.dwKind2)
% l1 _" |  x" E& f' I& l  {
  D" p7 w5 d8 _; R! V   return dwItemId < p2.dwItemId;& w2 U6 l. }/ L3 Q: u: i/ u
  }else{7 c* o+ m5 J, L% u! p
   return dwKind2 < p2.dwKind2;" a9 C/ \8 q4 p7 n/ a# k$ ~% I8 y
  }& T7 x# c- A' P: w
}0 U: ^$ z7 O+ O, D1 E
};
  m( @* H8 E1 S2 Q3 V( f$ G! Fclass CInventorySort
2 \, `" |6 A9 d{/ z8 l, x: S; V) q
public:
: A6 }. G/ v' }$ k3 h: @1 ]# UCInventorySort()
! n6 Q7 s2 R* r' l: U% ]{" D1 u  ?9 r  T$ Y
  m_dwPos = 0;
+ ~% L  k! Z* L) s}
& k/ S5 E7 J3 W, z0 z1 [' _~CInventorySort(){}
1 Y' v' U) S: l' [private:" x3 }+ f+ x" S9 B3 Y' a) Z+ G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 v; L$ |: u: ~  ?8 F; |& ?  ^DWORD m_dwPos;
3 S5 E8 \! f# a  Xpublic:! Q& p  @! u- O: }' H; w# H
void Add(BYTE nIndex)+ b0 Z4 C& P+ w; p- ?
{7 H2 ^7 ~# P1 K* [$ M2 c- ]
  if (m_dwPos >= MAX_INVENTORY)
0 T  s+ Y% N6 f% K  {/ N9 H: R% Y4 O2 [% m  ?
   return;
. `4 h$ H8 r, F' j$ E  }
3 }  |: \" ~/ \& i9 r9 m* v3 G  m_Item[m_dwPos].nIndex = nIndex;
& v- M/ D. u1 T. G$ w  m_Item[m_dwPos].dwId = m_dwPos;# _! U7 `4 [6 z$ q0 f8 y
  m_dwPos++;/ Z( N. B8 x: I5 Y# V
}4 b4 C, D4 k) j- _1 M- a: w, A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 L- p: l2 `2 k! h8 [0 ^6 J
{0 N1 \  p6 f$ U9 d1 W) g0 N
  for (int i=0;i<MAX_INVENTORY;i++)0 l& x1 z. B& i- J- u
  {$ O: C8 j9 Z6 R# r% @! V  }8 x0 U0 ?
   if (m_Item.dwId == dwId); x! s" M8 l+ b
   {
* R7 U" ^& D% o; s: E: [    return m_Item.nIndex;
  M! @8 z" e- p! T0 B/ ^   }/ ?# g" c$ z; j& Z, f7 ^7 n' z! J
  }- Y" l: v0 M* g6 ^6 P
  return 255;' F5 j- f, J- h$ G
}9 G( O/ l; u% _5 G1 j
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 H9 m6 s0 P/ T9 T
{* Y: _( R# G$ U  b
  BYTE nTmp = 0;  o3 u2 V5 ^/ }3 ?- f! r
  bool bDest = false,bSrc = false;! Q, a* u6 w$ U& {
  for (int i=0;i<MAX_INVENTORY;i++), B7 y* U8 G% _) [  f9 x
  {
+ l) j/ D  B# @" \1 I% H/ g# `   if (dwSrcId == m_Item.dwId)
/ a) E* W, p4 {" R) ]   {
6 E: Z, h1 J1 I2 i    //id相等 则 改变对应的dest和src* T3 e6 K& u& c" `4 I
    nTmp = m_Item.nIndex;
' R! G8 j4 h. y4 ?    m_Item.nIndex = dest;' l. W+ J( v  g* y, a
   }5 t2 l. c- Q0 z8 l
  }, D9 s/ ^2 w. U9 ]
  //临时数据保存完毕,交换开始
# Q$ I- }" @' p8 g* c. W  for (int i=0;i<MAX_INVENTORY;i++)- v/ s% |/ r! ^& E
  {5 x# J4 u) l5 W# s& O, S* X
   if (dest == m_Item.nIndex)
1 A1 f9 \2 \6 f" R8 n, R   {# J6 k7 G8 |" y/ g. S
    //id相等 则 改变对应的dest和src
4 r- x6 B, |( c$ s- e    m_Item.nIndex = nTmp;
, ?  z7 c+ e/ e6 t% U. q   }
" @& i7 R9 k- U7 z' _  }$ ~' b6 v/ j! o, j' i* K# Q
}
$ R0 {0 x5 j3 I, }" Y9 h/ v};) H, u- b+ J( \4 j( A) }3 }* \
-------------------------------------------------------------------------
* r6 P+ l  }) ?8 y, V依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! d% Q) f" O2 [# w, j8 v0 z5 M' H. W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 y( T2 R8 _- ~. L: }9 k紧靠其上添加:
9 l9 _/ V$ ~, A" Mif( pWndBase == &m_wndMenu )
* G* k& |5 b7 p* O6 a6 n{
+ {6 m! _4 b- \- j( V6 c* h; ]  switch( nID )& P2 Z: k# N6 E& m2 K" _6 ~% O
  {( x0 V! F+ S! F; A
  case 2:: q2 E. A6 H4 K/ A; t7 g) f- W' v
   {
4 o( U' j- |+ X+ l    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 a9 P% F0 l, G9 O
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# ]; X; s# [2 t5 I    {
, W0 \( N8 ?. [. F1 t1 @     break;
$ S/ O; h. a5 _    }9 h; u- H0 D* J9 P
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( P' C( `2 \' J8 C  K; ~
    {
5 g( \$ y/ p# r$ X. Y     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 f  K1 {7 M0 k4 s' c3 x7 {% K     if( !pItemElem )
, I; ~% n2 `: L& `      continue;: e  C2 a7 B2 L" `% T
     if(pItemElem->GetExtra() > 0)
' M5 q# ^' K" X/ l  K; ~8 S      continue;
; z4 S) m3 W; g0 A' g, V$ ~9 X     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( ~* V% Y1 g  N# x      continue;4 i' a* _- y% C" w! a5 a5 [0 [1 k
     if( g_pPlayer->IsUsing( pItemElem ) )
+ p  C1 \8 m5 k      continue;# N" F& d& u3 S( m5 K0 b  m
     if( pItemElem->IsUndestructable() == TRUE )
( p5 I8 J0 u9 a% L8 j     {
! W/ s  a: a) H: q! D      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 d+ }6 K" T8 K. k, A$ L
      continue;
3 }4 W- g6 T3 y6 f- Y* d     }1 k, ~' |5 N* j2 u1 V
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ k1 S. u7 y% f, ]3 @- |7 R  Z9 \: L) a
    }8 K6 ~, v+ K2 q+ S
    break;8 d$ y8 r' s* X( W% Z" V$ v
   }
3 M' ^' z9 d* C  case 1:* J4 L) b+ X" k$ {1 Y3 z# Z
   {
! p* M7 p7 N8 g    //整理背包+ z& h- Y& H( y" f0 l% V% L2 O: a
    //////////////////////////////////////////////////////////////////////////6 k7 @1 h' N" v' O* w0 r- J- s
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! v% ~- ?) x4 D# ]; N8 S  Q
    //////////////////////////////////////////////////////////////////////////
( O1 |' h# @- E    //////////////////////////////////////////////////////////////////////////
3 z2 k' ?) H# g; u    CInventorySort* pInvSort = new CInventorySort;4 T& g( T. h% Q( |: O
    vector <sItem> vItem;
! Q: a6 a! ]; Z" ]: y    vItem.resize(MAX_INVENTORY);//初始化大小
; m+ u- F' T! ^3 @; S: w4 p6 n1 W     //////////////////////////////////////////////////////////////////////////& V6 `7 P& s# q% k. s
     //填充数据7 R% l8 g& S) b7 u; ]; w% e& k
     for (int i=0;i<MAX_INVENTORY;i++)2 c4 g6 n5 }; e* S5 u9 F
     {  J  a9 c$ n- X# N. `- Z) i. i" s
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 I: Z) S) G2 C' B& z5 U# v
      if (!pItemElem)
! {( t5 t; s: [  ~( x9 R      {
' K. f8 B. S" A% l, R3 g       vItem.dwKind2 = 0xffffffff;% V1 H7 B2 x) c+ K
       vItem.dwItemId = 0xffffffff;3 P+ V3 w) v- b  t
       vItem.nIndex = i;, D- b: _# k% Y# b+ B
      }else {
2 G  b' A$ }* P+ [. u' c+ V       ItemProp* pProp = pItemElem->GetProp();
4 R3 P! g0 y3 X* l- Z/ `( Q       vItem.dwKind2 = pProp->dwItemKind2;
7 b( i- T8 n" T) D9 [2 w8 W" Z" B       vItem.dwItemId = pItemElem->m_dwItemId;" @7 d$ P/ }& D3 Y
       vItem.nIndex = i;) t) U# v9 t' Y. T, k& a* \
      }  G% i4 N; ]3 b9 h& r8 F5 \. c6 k" c
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ _6 O% {, @3 W2 N' p
     }
: T1 f6 j& K, j$ ^, T/ A     //////////////////////////////////////////////////////////////////////////1 t* s, X* L% i& @  Z" n
     sort(vItem.begin(),vItem.end());//排序
1 f1 p- P9 s7 i     //////////////////////////////////////////////////////////////////////////
. \+ k, g. E' t, G# N7 `+ X     //交换
2 x5 H# S/ f2 U6 m( K% W     for (size_t i=0;i<vItem.size();i++); i+ F7 B5 Z4 \$ C6 W' P& H
     {
" R* _, A; j8 @* g/ N      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 M4 f6 F6 w& {9 Y9 ?7 z, \: A      pInvSort->Add(vItem.nIndex);
4 P8 @' |% f+ ^     }
) i3 N3 e; @+ x+ t. C     BYTE nDestPos = 0;
0 X# D& v( ^# i3 B6 d/ {     for (int i=0;i<MAX_INVENTORY;i++)4 A& E$ M' D" M, f/ J
     {# Q( {) D# z! G) N) i8 W
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; C5 ?7 ^7 Q' [4 H$ U- b2 S# f      if (pItemElem); u; ?8 S3 W* E7 K" v
      {- f- l6 }- s1 Q1 I: W
       if (IsUsingItem(pItemElem))
$ e( g8 x8 N5 j( w7 j$ E2 F       {
3 w7 Q* ~; h5 `+ \" y; H% O        //这个位置无法放7 d* q. e" C' [# q5 l. N
        nDestPos++;
) h8 {2 _; G) ~0 o; u& H$ ]  F3 h" |       }
7 n4 V) o4 W; p; C      }
4 |# x+ i! p$ G; h7 F  R      BYTE nSrc = pInvSort->GetItemSrc(i);
' s/ _+ `) v" v5 t. j; R  |      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# D" [0 d& Y4 W
      if (pItemElem)) {- a3 {1 }! S+ d) D( S
      {0 N- Z' p$ m3 ^
       if (IsUsingItem(pItemElem))4 f; n2 }6 H9 u! Q
       {: E0 }# I# F% f  G" |$ g* {# x
        //这个道具无法移动,跳过
& l1 J9 n' S5 I: F8 Q* ~        continue;3 o$ p* h" |+ d+ \. {9 l
       }+ k4 _) g1 N& t$ x
      }else{
$ d8 |6 c: V  D0 U) G       //空位置 不用动
# k2 U( Y3 ]. C$ O: g/ M. o2 t       continue;& P6 B" \) ~: X; W
      }
6 H+ M- d# X; g/ k      //////////////////////////////////////////////////////////////////////////
5 I: e1 H! z4 ~, I      //开始移动
7 `# A; s) m. s      if (nSrc == nDestPos)
* v( X- o- w% N, X      {) \8 Q1 j' l' D5 R% ?
       //原地不动7 d! }$ O6 E- J' S, o: x" `
       nDestPos++;- P: g4 f8 ^% h5 g# H
       continue;
8 P! b! {* X3 `2 X  e* g      }$ ~9 T4 s5 }# _  t: h1 ]
      pInvSort->MoveItem(i,nDestPos);
5 m, c$ I3 L7 w; Z1 Z      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' [6 A1 J' ?- Z1 l+ g& u! c. t      Sleep(5);
" g5 K4 ?' d- X- J! x6 d% U, J  ?3 M      //Error("移动 - %d->%d",nSrc,nDestPos);4 X; w* X4 S6 X: m' Z7 T! j
      nDestPos++;% H0 c" b1 ]  p  g# m& k: B7 G7 z
     }0 q# ?9 o0 V+ O; t3 p6 Q; b
     //取第一个元素的信息0 I1 f5 b0 y* v6 U9 F3 F8 A
     /*5 T) [: V# ^. }
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). T9 g( ~& J( E; w1 g
     {
$ K- x' ^; [' x5 ~; {5 R$ b      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) d# ~% }  A" j. I! @' x( C
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* u* i2 [, Q& ]
     }
4 I3 J% ?2 [5 n% A     */+ B- Q  @4 s! R6 o. i
    //////////////////////////////////////////////////////////////////////////
: J7 M; k$ R" z# m* ]! P0 @    break;
4 D* ]4 q% U: S! K5 I" s% n; n   }( d( q* c  C; k
  }
  ^: }; s+ _& _, f" Z}: Z; s  e% {5 Q# u8 ~: G
m_wndMenu.SetVisible(FALSE);+ v( h0 k' J; E* t' O

2 M8 b5 t% X: H2 B--------------------------------------------------------------------------------------------------------
) [  r' l1 s$ a" u% U搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ t4 k! M, L* d{# d% H8 j! Y$ J' ], f! _! A
BaseMouseCursor();
1 {/ s+ [! J% G) C6 v}
6 M' l, C! R& ~- d8 {' u0 z& i在其下添加:6 _/ b' j* g8 p: T; h& {
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 K- U0 z* W, r& |- b
{; S; I, |% C" Y# f0 r' _. U
m_wndMenu.DeleteAllMenu();
7 G3 @! }+ B  M/ r6 U/ u& s& Bm_wndMenu.CreateMenu(this);: d+ d- L' v( T! J% ^
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& {6 A" f1 z- L" R. |- X" q4 c4 D- ]8 \. a. K8 L: R7 Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& o5 ~+ B; q8 u
{$ f/ ^, L& ]0 Q  ]0 V; X0 G1 s
  //P以上级别才可以删除所有道具$ }/ X$ {8 C2 a3 I; \
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");  n( J- h+ F% \9 x6 ]5 Z( p
}
0 v  v. I! Y6 V+ s: m! km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% `5 v0 c4 r4 fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );+ H8 a3 @9 }/ w# ]: y
m_wndMenu.SetFocus();
; K0 H( F% e# X' a8 @  ~0 K4 K" @}
: s1 {  D% ]3 F2 H: s) D------------------------------------------------------------------------------------------------------------; t1 W1 O' S4 Z. F
*************************
2 ], {2 g2 ]- P+ y. N  vWndField.h文件
6 U7 C/ z& t7 k8 I2 h/ d*************************3 z" a: x9 {( o. g9 q( g
搜索:BOOL m_bReport;
5 @$ B& k6 a/ _4 l8 g" O3 D其后添加:% B& A: e) {( ?: W+ l
CWndMenu m_wndMenu;& D  N% D- R5 |4 J8 Z: b5 W# U
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* R1 i4 S/ [* j4 y4 j" Q4 m# z. h, u" I其后添加:
1 \0 f2 y3 j( B+ Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);7 R/ b% t2 }9 v# d
: w% }& _6 U9 f9 X2 p2 c
7 Q; s6 M5 B7 V" v' E

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 17:49 , Processed in 0.061155 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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