飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
& w3 }" E9 n6 d4 p  d7 z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! v2 e# m2 }+ k. w8 K

! c, E. s) y) u+ U5 i* tstruct sItem
9 x6 m3 Z9 w; x{
4 ?: W" r1 ]5 G" z- ]! I& M/ @5 ADWORD dwId;. U3 X( ?. }( C2 I' A$ t8 j
DWORD dwKind2;
' c. i/ q: g$ m5 ~DWORD dwItemId;
, E5 C  E( m' R# r( Y% `1 f4 kBYTE nIndex;
4 G/ Y( Y4 B5 K3 [' [" AsItem(){
# j- l% ~9 h5 d8 Q& ^- g+ }  Q7 f  dwId = dwKind2 = dwItemId = nIndex = 0;
1 q4 \/ q4 y4 x- W4 d3 A4 }$ w* M}
9 X/ o1 Y! T) ]" B5 R' q) vbool operator < (const sItem p2)# B% Z; u7 r4 C! G2 {; U
{0 E- J7 Y6 W2 z  |) b
  if (dwKind2 == p2.dwKind2)
; M2 O; m1 d6 x7 D$ _  {
. H; R6 y/ }3 g* D   return dwItemId < p2.dwItemId;
5 D, b4 B0 S  g1 U; z  }else{8 [5 [4 W: W, g% E9 X1 e3 v- P" X
   return dwKind2 < p2.dwKind2;, D* L. g4 B  E2 P
  }: W' g8 H2 ]- D0 y: ?
}
% h) M* t5 H4 x/ h; K};3 f6 |8 X: [! z6 C* O) ^# z
class CInventorySort' ?+ U1 b  ^4 J' o
{
' N5 {0 s, E# \public:1 Y0 u  h+ \; i# g9 S
CInventorySort()
* l2 q- @3 M1 N% N5 ]5 }; H. y* o5 n5 y{4 I+ W, _( L; P+ U5 c* X
  m_dwPos = 0;
9 w- g$ P) q. F5 V}
# N/ H. ~2 L9 q4 H" U. _~CInventorySort(){}6 \" j, |6 C9 N2 X6 R+ J! k- u1 L" M
private:
2 Y8 }2 T9 w# PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: D  ]$ g/ n: _3 V6 H4 \6 @! bDWORD m_dwPos;8 C' u0 ?+ A# R5 U$ r
public:
8 s: g% {! M! o( _9 U; n% {. I8 y8 g& Xvoid Add(BYTE nIndex)" V% r# j  N4 o4 ~
{
# c& E7 `( h' r/ v. c. n  if (m_dwPos >= MAX_INVENTORY)
9 w: g* \+ R' V, k2 Q4 u7 g  {: K- C$ b/ o4 }0 ?
   return;
/ T2 a% c8 p7 y4 u" }: l  k  }
% h$ Q# \* E( k: `: Q6 b  m_Item[m_dwPos].nIndex = nIndex;% U2 h: ^- S6 ?& z
  m_Item[m_dwPos].dwId = m_dwPos;
# N% \7 B& s4 Q' w: s  m_dwPos++;
- q+ \8 h' S* z}8 E4 T. s! P- P" q9 ~/ v9 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! |0 L( C% J& r' e' t- ]2 \{
. K, @% N, ^0 d2 V/ c1 {; v& P. v  for (int i=0;i<MAX_INVENTORY;i++)
- Z9 k& w' G# z+ {7 Z  {
! B7 ]. _3 E: K  h4 K6 b   if (m_Item.dwId == dwId)
/ b  c4 \% g2 U) [, i& b# _   {5 o* p& a# p9 h+ U% t. l9 P
    return m_Item.nIndex;
7 O: Q# }3 _* [- `   }
2 L$ X; m/ t: n! {% K& s  }( B. A% C1 b; L
  return 255;
  a- a. e( B5 c/ l  R, F}7 j* J4 u9 Z8 z$ k' i' D$ ?
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; d% U3 F- V% D{+ L& P/ {. i! y2 v7 E$ s
  BYTE nTmp = 0;
6 [; M7 ?4 R3 q2 g: x  bool bDest = false,bSrc = false;
* t$ V$ v' ]; S- S8 e  for (int i=0;i<MAX_INVENTORY;i++)
9 J  K5 I% V9 P& p8 |  {% c2 z5 F4 n1 f) {1 p
   if (dwSrcId == m_Item.dwId)
8 K- X) l# h* R1 u9 C   {' h* {" A4 @$ v3 n. u
    //id相等 则 改变对应的dest和src
, t, ]6 M# l. G    nTmp = m_Item.nIndex;
) c7 E$ x5 Z1 S1 }5 u4 A    m_Item.nIndex = dest;. K/ u, N# B7 w+ X
   }* D1 ]5 i" A+ b/ ]3 S) W2 F, G
  }
# H" N5 {# V8 A8 D- c& {  //临时数据保存完毕,交换开始
: S1 Q  ^- l, c) w0 E- l  for (int i=0;i<MAX_INVENTORY;i++)
1 U- R% X" Q4 Y  {
8 r5 ?6 V; \* A9 `, w   if (dest == m_Item.nIndex)
" X* _/ ^( r0 O* g/ y   {+ p' R2 G. d; z% ^* m8 l
    //id相等 则 改变对应的dest和src
, F. |' Q0 f/ t    m_Item.nIndex = nTmp;
, B  m/ T; O  E' A$ M   }
3 s+ ~+ ~8 T, G1 T) ~+ ^  }' M- A+ E0 H7 F1 s
}- J: E/ B; S% v/ J1 h7 o
};
* g( _, \! f5 x; ~7 Z" L' g0 t-------------------------------------------------------------------------
: s4 K( p9 I. D2 k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 s0 Y! h* ]: \6 y6 c' _
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( f& N4 W. M+ K5 J
紧靠其上添加:
; p9 |* p* P) b! m; ?) x8 tif( pWndBase == &m_wndMenu )
4 S5 r" b4 v$ n% w3 O' G{& F3 x% u( K) \3 C9 W) _/ ~
  switch( nID )- V, b9 N& \+ V6 c, ]8 R0 [! t
  {
8 K- h; m4 @5 \6 g6 Y  case 2:
7 y' U2 T  x$ b) c. U" r- N* T0 y   {; L+ J/ Q! L( y1 f
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" f; H3 G( f8 }6 d. y: d
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& x1 P' d- Q3 y2 G1 s2 r1 w    {
, A; f# E& @' _' A9 t. k4 W: _8 j     break;
; y9 V0 y* \/ W6 Z) M9 @4 G    }$ m* b- l7 f% o! ]' \
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). {5 J$ [. u4 N3 Y5 k% e; U# J4 \
    {* X! B8 X# V& e0 \* n. m
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 Z- B  S; t6 P+ _3 l     if( !pItemElem )
1 F( n1 D; D( f( l4 Q      continue;4 a; b( ^+ J5 G
     if(pItemElem->GetExtra() > 0)5 C7 Z" L! W+ X! T
      continue;
1 `2 D4 ^9 V7 H0 o; ^# H     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 ~5 C* w  ^4 F5 s# ?+ ]$ h
      continue;
( c) T1 [; h/ Q$ `2 e. _     if( g_pPlayer->IsUsing( pItemElem ) )
% }7 J% K: p# y6 l; }  z, w$ I) ]' C      continue;
" d9 T2 O, T9 o  ^8 \     if( pItemElem->IsUndestructable() == TRUE )0 S- k' k4 E! X! M3 T
     {
) R' x9 f/ F: W5 {5 M# e0 ^( w      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( G+ U: ?6 {4 c  u1 ^2 P* E
      continue;9 i9 \) B3 g3 e
     }1 R2 N* J( ^, _, T6 g$ a$ H8 w
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# a( B2 F$ u& s: f! z; e* \. W- g
    }9 h8 x5 U1 T0 }/ I% B! c- K, G
    break;3 T5 p, ]: g7 }1 a4 k
   }6 s# H) w8 F) w* y
  case 1:: A$ ?3 J2 p1 U2 ^2 I
   {/ [8 y4 O0 Q# w1 s0 [. A7 X* u6 \
    //整理背包
/ e8 E' S7 m9 A    //////////////////////////////////////////////////////////////////////////
9 h0 G9 e  _3 O% ]4 F    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 T4 T! Y; @4 V) o; |
    //////////////////////////////////////////////////////////////////////////3 p/ J! l" x! k* f/ R6 B
    //////////////////////////////////////////////////////////////////////////9 r7 |1 a* L# p( K+ j& N+ y
    CInventorySort* pInvSort = new CInventorySort;
/ l+ i6 `; x9 Z    vector <sItem> vItem;* r. H9 Z- G! f3 t3 }
    vItem.resize(MAX_INVENTORY);//初始化大小
7 d$ |: q* g' H: W     //////////////////////////////////////////////////////////////////////////; U5 p0 F5 b4 c, F
     //填充数据8 i6 B% ^2 I# o6 t
     for (int i=0;i<MAX_INVENTORY;i++)
+ V. i4 u1 K  P+ t# h/ ]     {
6 A% V9 X$ F5 ]) t) Z# P      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# k9 N2 J- K1 U( n8 L) j" N; `      if (!pItemElem)7 Y) ?! z" s, ^$ U1 Z" z2 b' {
      {
% K, B( @& P5 g       vItem.dwKind2 = 0xffffffff;
' i, {) G/ j3 k5 g# F% Q7 a       vItem.dwItemId = 0xffffffff;
( m+ n# \$ I2 E5 o+ ~3 f       vItem.nIndex = i;
; a( V9 a, Y  M) ]# O# l. e# F      }else {
* H& {7 ?2 d1 I( i       ItemProp* pProp = pItemElem->GetProp();  s' k$ R( y4 T3 O  D9 w1 I6 s6 C
       vItem.dwKind2 = pProp->dwItemKind2;
6 ?# \1 P4 @' V! h       vItem.dwItemId = pItemElem->m_dwItemId;
) c) ?, P' a) I" V4 n; O2 F       vItem.nIndex = i;1 R; }  |5 {" m0 D7 e7 N
      }  x: C6 i. l1 i* _
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- C6 Q4 M& `) X% w$ T$ p0 Z
     }6 X0 V) m0 a# V/ G
     //////////////////////////////////////////////////////////////////////////
2 f  S- u) q( k9 @0 z# O2 X     sort(vItem.begin(),vItem.end());//排序
0 Y0 M$ M9 H4 u) ^2 l: Z     //////////////////////////////////////////////////////////////////////////
5 D) h: S! B& R4 i     //交换
& y4 J0 [2 e4 |     for (size_t i=0;i<vItem.size();i++)' P1 f. U& Q# P5 h7 q+ Z+ S$ d
     {* V- v! j% L! n& ?) g% X7 K1 P
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ x/ \6 L0 s/ q0 E; L& r( r      pInvSort->Add(vItem.nIndex);$ o; ?* L* e% |0 W0 V" M/ U* f. v
     }+ |4 c& a" O4 }% l. L/ N
     BYTE nDestPos = 0;5 P( O2 ?: f3 i+ {( Q
     for (int i=0;i<MAX_INVENTORY;i++): v! F3 l% _2 @. w7 x
     {% I/ g) M, b, F4 k) X
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. {# Y7 V1 t$ ^3 |5 r1 n6 w( b7 Y      if (pItemElem)
6 ^2 ~  F& e3 ]( I4 v      {9 `( A6 ?1 v9 q6 J6 `$ c9 C
       if (IsUsingItem(pItemElem))
3 V) ?/ P* q+ E" g9 |       {
) B. c' F+ a$ b; y% \$ ^+ u        //这个位置无法放2 R: g, E8 O8 I7 x  X* E% L+ O
        nDestPos++;
' x, r' Z5 L; }; g; M  C       }4 n6 `( z; ?. X7 ~' |, A. `, P0 k/ Q
      }+ }, ~, ^$ M8 Q1 b
      BYTE nSrc = pInvSort->GetItemSrc(i);" Q- g9 B0 q, s) h" B  w% R0 P
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" T, S. L) X& Z5 N, u  X
      if (pItemElem)
% L2 @8 X, m$ ^! ]      {6 u% X6 E( Z. g( m( h
       if (IsUsingItem(pItemElem))! z  Y9 |" n5 p( U# k
       {
8 X* }( J. y; [8 C  p4 m        //这个道具无法移动,跳过: z$ Z6 [- Q$ J* h, c
        continue;9 {5 _% V1 P3 d9 b! |
       }3 k. @* Q' s7 e" Z4 I1 H4 J
      }else{
) N+ ]7 @: |! K# J4 _       //空位置 不用动
9 m/ e9 J  D: M. ^; E. D$ Z       continue;
* K1 ~  o& Y  l4 ~( i) q2 e      }
* R0 A# P# @1 b$ w# C5 t8 K      //////////////////////////////////////////////////////////////////////////
5 u3 I9 G/ H" Q4 t% d2 q. y) x. A      //开始移动
5 e4 h% M' X: O1 Q4 `) `4 P& [      if (nSrc == nDestPos)
, y0 l1 d0 }" @  ~  _, F      {
2 q( S* G' m. V( @       //原地不动
8 ~9 D. F1 o" C' R1 k4 S1 a. e$ j       nDestPos++;2 X2 c/ ]3 T: n) w' K8 x
       continue;" n4 e7 u$ }6 T7 l, R7 K# W# U
      }# G* y: V7 a9 r/ g1 ?  d9 `4 L4 q" J
      pInvSort->MoveItem(i,nDestPos);# F/ A4 M* p5 a9 x% g2 e
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 q4 i" \8 V% J) q% q, n! h
      Sleep(5);
6 k. b1 ~& ^, a( O. K$ b( }% i      //Error("移动 - %d->%d",nSrc,nDestPos);% s, D2 R" g1 R: E8 ^1 k8 z! S* ^5 n0 e
      nDestPos++;
1 y8 R. A) h6 Q; ~     }% I! `, x6 t$ |! T4 u
     //取第一个元素的信息
7 P" ]  l2 {6 f) z2 n" U8 h/ I     /*
$ P  Q" v6 N! T- _  h5 |6 \     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 W0 ?6 B! Z% \! |/ ?  ^, F
     {
: V$ {7 b) U( @& }  t8 ]# ]      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 k6 t. [% a; ~" a& n0 ~# l6 r  r) V( S
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 W/ D$ p. b5 |4 V7 v) K5 e
     }" B- S5 d3 W) g; u
     */) T2 i! @/ q! L( k  T+ n7 b! V! a
    //////////////////////////////////////////////////////////////////////////
1 l: \, _$ S! m5 }" ]    break;
' Y' R2 G9 ?" h1 C0 v! j2 U2 p   }8 D+ L& Y: E+ P) f  c! o& Q
  } 6 N6 m# c$ p- T* o
}
3 o4 s$ R- e4 ?/ o! D( Am_wndMenu.SetVisible(FALSE);
( q9 e2 }2 p1 D8 A8 J% z9 B/ U7 A3 [
--------------------------------------------------------------------------------------------------------
. ]# X* s* C; ?搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% `. t+ k7 x; p2 ]  G
{
9 n6 G1 c  L3 S3 M! QBaseMouseCursor();7 p! \. {" N8 j4 g. {9 F. o
}
/ t, c0 a- @) t! o在其下添加:
0 Q6 ~3 T) q" c3 dvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' W1 |- R/ j/ |2 h/ r- ^& [{* O7 q5 t% Q! x% _
m_wndMenu.DeleteAllMenu();
2 P* ^$ D9 d6 sm_wndMenu.CreateMenu(this);
- G2 m' Y5 `' Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- }. ^  U8 Z. l- c! }$ r! S
% S3 C4 v7 f  n& U4 kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 i8 E1 C; f$ c{
- ^* J( n" k5 o$ G6 M2 j9 J  //P以上级别才可以删除所有道具" P4 }: a. L' r6 U# |, _: x
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) J& }. k$ k# U4 k- G
}9 Y( j/ Z. A0 }6 U1 v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
& k" {7 j1 u  A$ |/ }( c& b* Rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 U- }7 J* |' @5 I# B# f. X2 E
m_wndMenu.SetFocus();
  K4 e; q* b) c! p}
, @' }: e* V$ ^  Q. V3 U& ?: l------------------------------------------------------------------------------------------------------------, R5 g4 v* \9 \
*************************7 q0 M2 w3 K, a) l' l- i- r7 _
WndField.h文件8 l- O+ z1 k* ~& A* y
*************************% o- A7 h' t2 q9 _4 h
搜索:BOOL m_bReport;' B6 M$ s/ b0 I! W' I5 W" Q: z, ]
其后添加:: t0 c- c+ D3 a4 s- ~
CWndMenu m_wndMenu;0 ?- E& T+ p+ z7 ^7 x: e5 k. n
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 ~; x/ Q+ G- Q. l
其后添加:! G' X0 k- E9 _& @9 e3 e4 Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);- P& u  ~& x) v! _) u$ T# F$ B; U' U

: O& V9 N3 t  F/ `! V
4 b7 W8 y" D8 B

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 09:06 , Processed in 0.063923 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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