飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
4 m; z- Z  o. T3 i7 |搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# `3 ?: i. {+ r+ q
% c: g3 k4 t& t/ n7 kstruct sItem
9 \- d' c, V  @2 y! l3 c{( S6 r( g; F6 P" L7 G
DWORD dwId;! ~, j% j+ @+ k4 o! z8 S/ q% k7 ?6 w
DWORD dwKind2;
$ S/ I: p6 P; Q+ H" p( ]DWORD dwItemId;/ t9 H( q6 x6 W9 Y
BYTE nIndex;
/ y" z+ {0 j5 lsItem(){
' f7 ^  o1 V: {! v+ J2 a  dwId = dwKind2 = dwItemId = nIndex = 0;9 o3 K# S" S& u
}
/ ~5 V- ^9 x0 P, Y( Y* Ebool operator < (const sItem p2)
: u# G# w6 n9 u7 U; j/ _{
8 Y) _% h- E' h. B, l& L8 m  if (dwKind2 == p2.dwKind2); {9 g* J3 ~8 `* J: J$ u
  {6 ^+ ^% U" X2 V% c- ~" d. m
   return dwItemId < p2.dwItemId;/ Y  n- w' ?2 i
  }else{
- R  P$ j7 r3 E7 y5 O   return dwKind2 < p2.dwKind2;
' a0 G- ^; {- Q3 V$ x# L  }
, a7 w( G  H( ]+ f2 N}$ D; s6 D0 A# B* O1 v# G: ^! a; U
};) j/ d0 N" {0 D- f- G" g
class CInventorySort
# t$ u5 F# J, ~{
) v6 m! k6 F, J$ c: p! l; }public:0 O! {) d& X8 u+ R0 J/ [/ M
CInventorySort()' Z5 R6 e! _& C; v" o2 b& C
{# n* k: J0 a5 u' Y, j
  m_dwPos = 0;
- p' r7 ?* K; N# ~; t}
3 Y0 v+ G* y% C~CInventorySort(){}- H2 h; ~; d# [( R) y0 v7 ]' g( \
private:6 X) }1 |) w- `# A8 a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 O" B7 w/ z1 _) C$ Z& k$ Z4 N  sDWORD m_dwPos;
" N, I( T/ t5 Q4 Y, C2 C8 gpublic:" ~5 O7 `* j4 T% O* `2 c3 k
void Add(BYTE nIndex)
$ ~& h8 T* }% @) @5 \% m$ K( E{- _$ q0 z& W" y0 T
  if (m_dwPos >= MAX_INVENTORY)* D: D4 l! w, k0 Q# j" g/ X- k" }, i& F
  {
; n$ z6 u( K9 T/ t4 j( u+ p, A% z   return;
. g( M1 h$ @" x; ?  }! u( {) O) J; d/ i3 r* y8 o( K
  m_Item[m_dwPos].nIndex = nIndex;2 _5 n  U( ^2 A( a
  m_Item[m_dwPos].dwId = m_dwPos;
  A( l3 Z' w& X4 D  m_dwPos++;, F+ s* R! \/ A; q: S' }0 ]
}9 e* I3 M, O& q5 O
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 C  P% Z/ l7 I; _  D' ^4 O
{9 j7 j* i, ~* P8 Y$ f
  for (int i=0;i<MAX_INVENTORY;i++)  ], |& r) [! a1 w# k! n) a$ E
  {! ]# d5 I) ?+ I, W. ]
   if (m_Item.dwId == dwId)4 l+ c9 q% r2 p# c5 x$ h1 r, ?
   {
% W" H4 P: G/ ]6 `% c* }    return m_Item.nIndex;
3 G8 G& c" R& A" }! L   }  o2 Y) k2 y8 J. A' o; g
  }
7 G. B1 N5 T1 {! @  return 255;/ ?6 W5 o1 g! [5 }7 g
}: i) W& C) H2 b1 a6 t
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! _6 [* ~- z& A3 g; g+ w{/ ?8 G! c/ @$ h; @
  BYTE nTmp = 0;% m9 b" O% f; a% e2 I, T
  bool bDest = false,bSrc = false;3 R3 r% i! t3 E3 |3 ]9 U
  for (int i=0;i<MAX_INVENTORY;i++)
: i( H" I% J+ |% p% S$ |  {
+ C9 v1 d: _6 X! b3 M* E, t   if (dwSrcId == m_Item.dwId)
4 [# e/ l: C& p, c   {* C5 F1 s- }8 u1 |1 ^. E2 D6 ^$ D' E
    //id相等 则 改变对应的dest和src/ c" p4 [" H- u+ v
    nTmp = m_Item.nIndex;
# p4 g7 s8 q/ z" E6 {4 p    m_Item.nIndex = dest;
4 s3 ]3 S5 {! O# i" x/ i. [, E# W   }
2 O6 O" {# ^! {2 ~  }! c) i1 e( K' E# _/ [. ]/ e
  //临时数据保存完毕,交换开始
, D& a# Q. i& m4 M9 T5 X' o  for (int i=0;i<MAX_INVENTORY;i++)
! P# M9 T, g. ]  {
+ w6 f* R: x, w! I5 w& n   if (dest == m_Item.nIndex)  p+ x9 K/ j: E2 Y. ~
   {! N. c, C: u6 i# o5 e+ r
    //id相等 则 改变对应的dest和src1 N  z/ w& m, r5 Y5 ]8 b0 \
    m_Item.nIndex = nTmp;
! ^4 X; f/ R) S) r/ ]1 X" O   }. k4 k+ l8 {/ d+ U! {7 T; X
  }
2 C$ }$ M! l+ ?) |$ T2 c}5 G2 @9 q% v5 B) k; K8 F
};" j7 D5 ?8 p7 Y& l$ t5 w/ l7 r
-------------------------------------------------------------------------6 z- q7 S, E6 Q4 c8 G  w% j
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% u0 o8 y8 P& t$ S' v/ E% A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* m# j* P3 V7 h& L5 H# r紧靠其上添加:$ \9 c: c8 \) a: q( y
if( pWndBase == &m_wndMenu )
" j3 d& V% R5 C{$ F2 m3 |! \( J
  switch( nID )
* U3 e4 [3 q% }/ n. c  {
& e. p  {9 X" k# W5 B  case 2:) _% O6 [; O1 N3 t. ?
   {
4 r  U7 }+ E/ v9 ^8 n; c    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 T/ _) C3 p: u0 ]    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% W& e" `: V& U/ X! N8 A4 A
    {
" e7 u! R- J# A     break;2 e3 K  \2 [4 q
    }
3 M" b: Z+ L$ D5 f, l    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 {/ i) M: N, ~& A8 s- K3 P    {
, p3 r; }  C( q" o9 I$ T; l& Q( O     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 k7 C' p0 |8 k2 W: Y5 O$ e' r
     if( !pItemElem )
/ k- R& \' m- q: b9 m& U; S      continue;& [) R8 O8 @5 p3 E" v2 z
     if(pItemElem->GetExtra() > 0)
2 m. Z/ b2 J9 q- D0 ~8 d$ m% a      continue;; }6 h. M$ g+ G. O1 u# n
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 h: ^& U: Q  e5 N+ u3 y; ^! n      continue;: B- d$ T- X$ s: M$ j* u" Q
     if( g_pPlayer->IsUsing( pItemElem ) )
4 ]; ^! V, e8 I5 u1 D      continue;
" c0 g. M! S0 i     if( pItemElem->IsUndestructable() == TRUE )2 @- s; R, B  m1 y3 z
     {8 B, K! w8 B6 m6 ]
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" q* Y# b' b: D9 b! S7 i) K( o      continue;( i4 M' Z7 V# b% i# N3 S
     }/ x7 Y% k; e+ K4 W
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( m" I( g8 Y, v8 j1 L5 i* X$ u    }' P$ m( |: _; f
    break;
  C. p  c, G3 [5 p   }. c- x  U! S- Y/ ~4 c# A/ {
  case 1:$ T5 n" F" q% p3 y' \
   {8 |% S+ d0 }# {* ]- W% U4 k
    //整理背包
2 @& R- H$ a. H% A3 o7 N- X( B* {    //////////////////////////////////////////////////////////////////////////
& B% l1 k/ b. l$ K0 E+ j$ k( X    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: D. a# n2 s5 J$ Q/ }' I0 R
    //////////////////////////////////////////////////////////////////////////
- w/ H6 Q" u4 j/ N) a# j    //////////////////////////////////////////////////////////////////////////2 c3 |& {! L" [
    CInventorySort* pInvSort = new CInventorySort;
  @# o+ V5 ?, J8 S! _    vector <sItem> vItem;* t$ j' ?( E& a% a" J; w
    vItem.resize(MAX_INVENTORY);//初始化大小+ h" w% C; P* i
     //////////////////////////////////////////////////////////////////////////
0 i  y) @( d# }9 C; F, ?; }8 y     //填充数据
7 E% S+ O2 Z$ }: \8 i6 e     for (int i=0;i<MAX_INVENTORY;i++)
) e% G% m7 I5 Z     {) e( d# Q- p: d9 i7 p
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
  n6 |, i7 C' e9 M! X! V" Q      if (!pItemElem)
+ X5 w% H0 z- O2 R2 D& Y      {- c0 F) p6 W3 U; a( J% H1 ?* f
       vItem.dwKind2 = 0xffffffff;) z, t2 ]) q) K& T1 l, f
       vItem.dwItemId = 0xffffffff;
! d1 g3 H& q$ u4 q; z6 ~6 @       vItem.nIndex = i;
2 u# V- V2 o' s2 n0 Q; ?      }else {1 `. }" U" L; C' e% M' B- _8 }# |
       ItemProp* pProp = pItemElem->GetProp();$ m( l# \/ x$ {# w* p% j
       vItem.dwKind2 = pProp->dwItemKind2;. t1 _6 h; g8 T- Y1 f) G
       vItem.dwItemId = pItemElem->m_dwItemId;7 I# F& i8 j- n# A7 n) k& j
       vItem.nIndex = i;# M/ _; ], e/ E+ v  h$ c
      }5 o9 P1 C! F4 V+ r8 m
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ o- M* s/ V3 K& X6 C     }
9 T! P0 o, J0 X$ c: V$ J8 c" i     //////////////////////////////////////////////////////////////////////////9 n& r' \  t: M" V. h! g* k' s
     sort(vItem.begin(),vItem.end());//排序8 D! g9 ~" i; b! A- x9 t9 i0 D! `
     //////////////////////////////////////////////////////////////////////////
/ _! C1 H- H8 L& H# n     //交换
' W+ ]3 c0 J, k7 J     for (size_t i=0;i<vItem.size();i++)) Z6 X; J, l( q9 q0 b
     {3 m1 ?" @: Q4 ], _; e
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- w  B5 {4 R. w; P      pInvSort->Add(vItem.nIndex);8 ~/ d" _4 b6 h5 F7 ]. w6 j
     }7 O8 i! N3 u1 W
     BYTE nDestPos = 0;2 e/ b) @5 M5 l
     for (int i=0;i<MAX_INVENTORY;i++)
: D2 h: c+ ~# [3 s1 D9 F     {( E% l5 ^4 u% E
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( j8 d2 ?" V( O5 W  J- u" E2 I9 Q      if (pItemElem)
# Y5 E6 |6 _# E& {& V      {  j! h( H0 [8 |# i$ J# H
       if (IsUsingItem(pItemElem))0 N, c. t1 R# ^+ R
       {
4 s+ Z. F* \: n# ^0 p* @$ P        //这个位置无法放
4 A. ~5 Y# p% X0 y8 H        nDestPos++;% _8 m* {0 g" z$ N7 b; n2 T
       }! r/ r) w, A! o* Q) J0 ]
      }
' V6 ~; X5 O6 E! t      BYTE nSrc = pInvSort->GetItemSrc(i);
- V% [5 @3 a- `      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' u( N3 `7 m3 u      if (pItemElem)
( l$ S* J* Q: K8 k" [      {
- W% X$ q4 c# q$ E# n# Q       if (IsUsingItem(pItemElem))
6 {. p  G! _5 U2 W       {, r+ V$ }5 Q/ p, v
        //这个道具无法移动,跳过
  C- m! I- z. M# a& n0 z        continue;
' p& s1 x; u/ w& h6 W7 T       }& i! ~& r" I/ f
      }else{
9 N# j. ?0 x0 e: ^4 B- T) A       //空位置 不用动% y. s) A9 b) l# u
       continue;' N0 Z2 J& C( G; Y; q+ f5 m
      }+ U1 W9 H" ?& y  H
      //////////////////////////////////////////////////////////////////////////3 k5 ]5 P% `7 e& q. h  v/ M
      //开始移动# U( k' Z6 G7 E' A& K
      if (nSrc == nDestPos)
9 h  M& |2 f' J6 N2 Q. E      {4 \# K6 U7 C7 V5 ^5 R, L
       //原地不动3 a5 L8 ]2 _2 o0 w) a' R( Q
       nDestPos++;, f: t0 u8 U& U) Z/ c
       continue;
) T' O9 B7 W  C/ B  B      }
. g$ d1 l" W8 x4 d* q      pInvSort->MoveItem(i,nDestPos);
8 X  j& F" ^- X# T' ^! c$ X2 t      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! P9 @9 B/ g. L0 q% o      Sleep(5);- x, x6 t( \6 D) P0 D' D0 l" @
      //Error("移动 - %d->%d",nSrc,nDestPos);! M% K, A8 P, ~% _( K  O0 T
      nDestPos++;
  j) W- b. S. g) [, U" w7 H     }
2 L! ?- f8 b  B$ Q, ?4 s     //取第一个元素的信息8 B: c, V/ s$ M4 o
     /*$ y# i* G9 [* C  s0 J
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 O/ p8 Z; D) ?  M     {9 F! z3 J# @1 Q7 l' X9 n
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# f; `6 R  O7 P) K: C
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 X5 ~4 Z  G' Z' E
     }3 U5 R# d: C6 q5 }; D" x
     */6 u# R3 S: X. i; U7 |+ d# Q
    /////////////////////////////////////////////////////////////////////////// |# }  Y6 M2 C- c
    break;# S) Y* n8 Q- C- \6 N/ n) E
   }- {3 W' B2 A) ?0 w, x/ G! z
  } 9 P/ F$ k4 |( u$ a
}
, e2 F$ m4 M3 }" G- V1 Hm_wndMenu.SetVisible(FALSE);/ ~7 m5 K8 P% A; z. N

1 _- J( i  \2 x8 t& ^$ [) K--------------------------------------------------------------------------------------------------------
3 v) m, @2 R/ M: k5 n2 g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) [4 J3 N: I$ U. s+ _- W9 t8 O5 g$ _, @
{4 M' x. j. n0 ~, ?( I0 C6 U
BaseMouseCursor();  C5 P( z- @( C) I6 K
}. I! S! M4 u4 R2 p5 O
在其下添加:* n7 r! w- s- A" T+ D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 ^) x, j& X+ W4 P, }: }2 u- R. b* _{' Z/ l* Y# J& C) S0 L6 R
m_wndMenu.DeleteAllMenu();5 N8 m& j3 \# B# ]" r. D. u
m_wndMenu.CreateMenu(this);
' e' G2 t" X' G3 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) t4 d- c( G4 P: ?( t3 S5 v" [

! c- u& |" d, \3 o; jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 B7 t! _9 o+ E! M; r) A# i1 [{3 A0 A" J5 I" \0 ]
  //P以上级别才可以删除所有道具
' H1 A# a; x! x) J$ [  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) _; N' g- W' A# T
}# g; n7 g) e" l& d$ @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# j" O0 R6 T2 y, X
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 k2 n, e- r( R( {. X
m_wndMenu.SetFocus();
9 z0 |0 A# q/ k% _% F& d; p4 V, |}5 S- O/ O3 Y  Z; P
------------------------------------------------------------------------------------------------------------
  ?9 U+ Z0 x) K9 B4 Y4 H*************************: ]1 p* O" L3 l7 K6 O
WndField.h文件9 `3 J5 v7 u# p4 `8 @) O
*************************
5 ~2 g) K+ O" x% i搜索:BOOL m_bReport;
' r, x* _5 [+ a其后添加:
6 s0 a  d/ K) qCWndMenu m_wndMenu;
" G3 |+ [; Q* a0 M* g搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( Q7 _2 `4 v; k' ^' g, s其后添加:5 e$ d, v; K2 r4 W8 Z
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 J4 O  \1 ^5 c2 G8 i' v5 t8 f' ?: P; b7 X9 e
, W: y9 m" x( e

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 23:28 , Processed in 0.066065 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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