飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1078

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1078
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
" G' @, i: ~. ^5 `8 s搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( v' O0 ^0 z9 Z5 E( R! F4 u, _, o2 Z2 D' Q% n" ^
struct sItem
- h8 W: A9 t: n" ~( q{
! b6 |. w4 r% j2 m) mDWORD dwId;9 e0 o' N" V( {/ L: ~* \
DWORD dwKind2;
3 F% z3 k! `+ q; Y( E: QDWORD dwItemId;. |2 t2 c) K- ^" S$ R9 W/ Q
BYTE nIndex;. U2 U: G$ A% L9 j8 f9 }- `
sItem(){
. {8 g$ }# L7 _6 W$ x2 g+ |. x  dwId = dwKind2 = dwItemId = nIndex = 0;2 J0 {9 {8 x. U6 n3 [# F* {  a
}: _; S4 r: ]0 d% I5 i
bool operator < (const sItem p2)
- O5 m  ]( V& {" c& K$ b{
* M* F3 L1 ^, [* y; f2 d" f  if (dwKind2 == p2.dwKind2)
/ h* S! M6 n  R; a7 ]6 V& m  {
0 j/ T; W2 n. ~% g' ?! t* V3 ^   return dwItemId < p2.dwItemId;6 A( }5 h! e5 G, e
  }else{/ q5 q% f  L& S1 ?/ s& J
   return dwKind2 < p2.dwKind2;1 q' `3 O6 j9 d/ a9 }0 ]5 Z: ]
  }5 v3 P" C) o9 _- V, C) f# C
}
+ e9 L+ x. k- X, Q};9 y* p- O& u) }" u1 ~, K
class CInventorySort
# V- F& V3 I- N4 _* G2 U& ]) k{7 T9 t  d" E/ H$ V0 s
public:5 A; K- U/ V) @
CInventorySort()
) J, \9 k9 _0 M& k1 b2 P. V{$ O: }& |# r6 e$ i0 R  r
  m_dwPos = 0;
) Y' f) P% |  d- b}5 O" K$ T3 Z: U' K6 |
~CInventorySort(){}
6 L5 W" c5 @3 C, u/ m& uprivate:
; I- B; ]8 u& f# J+ j" c5 asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
/ L0 J, n* o4 C; gDWORD m_dwPos;
( x+ `5 k9 {7 s! g3 g5 B& cpublic:
( Z+ V) |! b: r  q3 `2 ]void Add(BYTE nIndex)( \' N" E5 H, T/ T0 P8 F) q
{6 i: _. d7 n; g# v
  if (m_dwPos >= MAX_INVENTORY)
/ z5 ?7 E6 Q) X* t  D0 D  {
) ?8 S9 q6 ?: D, B! B. d   return;
+ Q; v8 h) c: Y; F  }
+ V" u2 f# I: `3 p& S  m_Item[m_dwPos].nIndex = nIndex;
) q4 e8 d5 U- E$ H8 F4 `  m_Item[m_dwPos].dwId = m_dwPos;: K; P/ K+ r6 o% G
  m_dwPos++;
7 h5 v' n8 [! Q+ i( N. T2 @3 g}2 Q% j9 W# @- C& X+ w- i: F8 u
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 j1 j' u0 @/ h' ]# b6 f
{8 t7 s" ~# t8 ~) @
  for (int i=0;i<MAX_INVENTORY;i++)
8 J1 n, H+ C/ Y  {9 c, }% K1 \5 |3 C! k7 z: Z
   if (m_Item.dwId == dwId)5 z/ @+ G1 |: r) H
   {) X: V; ?/ r9 _9 ^0 o
    return m_Item.nIndex;
/ ]9 S+ K9 O: L2 B0 Y: x   }% I) u- D5 u! @6 c* u
  }
, u/ ~) y$ e" x" r2 k9 o- l$ a  return 255;& [  W' w' B: Z# s! _
}2 [) K% A. C5 @1 J' P4 v1 U
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ I5 l1 k% e5 j{
+ W0 j9 W: X+ @  BYTE nTmp = 0;
! a, ~  V/ ?- s! g) U  bool bDest = false,bSrc = false;' {5 G$ H+ M$ v8 g; Y+ S; G
  for (int i=0;i<MAX_INVENTORY;i++)% o6 Z' o6 E# \1 x
  {: }' E  Q5 |5 n5 N5 {6 ^) F' E
   if (dwSrcId == m_Item.dwId)
/ q% d! o' x4 E3 [   {
/ j1 m4 P3 ?% B- K" q- _    //id相等 则 改变对应的dest和src
, A4 e$ D& b* [1 F; W    nTmp = m_Item.nIndex;" k5 T' ?6 G! r; [2 {" `
    m_Item.nIndex = dest;
6 Q) S9 f; N& i* F   }7 m% _3 K" G' p: }2 N9 i6 f
  }$ A, c% G5 U% y
  //临时数据保存完毕,交换开始
  J( o- n4 ?2 d  u+ U* ~8 o  for (int i=0;i<MAX_INVENTORY;i++)3 W( x) P, |* s; b
  {1 k1 ^' w" P' L* C" d3 D7 r( x: u
   if (dest == m_Item.nIndex)
9 _6 t8 T9 G7 ~% F7 `- }+ a6 z# _' }   {
1 {& [2 Q- K( x2 V, E/ D    //id相等 则 改变对应的dest和src; u  L# H4 @. U- v; n( D
    m_Item.nIndex = nTmp;& \+ S& i9 l9 [/ o8 N
   }" e3 {& D# O2 z0 j/ \
  }* l# c- X9 O9 @/ X
}
" q0 `- U2 q! y0 }; G0 n$ J( b};
. e* i* \: R7 M* m-------------------------------------------------------------------------
/ N* R8 y1 U1 \% a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 u# O% D/ H0 v9 E' r- u% `
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ u# @1 w( f* l, ~6 e5 x5 d紧靠其上添加:
- P, `7 c; A" n  y# j8 vif( pWndBase == &m_wndMenu )
- O, n1 ^# D/ y+ ~  W2 b1 V{% f+ b( F/ y8 i: N  b
  switch( nID )2 P# W, T$ p1 B/ m; b1 C
  {7 _: R+ {: n" Z$ w& i
  case 2:
5 I7 U4 s! p/ G   {
. G, l$ l. f7 a4 n4 j    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 D6 @& K8 W7 R4 Z5 D    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 U, n6 E* f, A    {
' I: h" a6 Q, ?% _* w) b  A% C     break;
0 J. Q, l& S3 b1 X8 ]    }$ |% j' P/ a8 c0 A( m) r
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 o; P# z. W) }- f, Q
    {; H+ V& H  q8 s2 H$ b
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: j1 t$ \* k/ K6 Q$ Z, D- w7 z1 Q
     if( !pItemElem )
% v9 C( @, X- u2 J' Z* b      continue;
8 N( ~' ^9 x& [     if(pItemElem->GetExtra() > 0)( O# |! C. d6 g; f, ^
      continue;4 \5 _$ j3 `0 g- n2 p
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 |8 `! e- b1 I: l  J$ A& B      continue;
/ E" Z0 [5 }" E  f4 D7 ~7 ?. r) O     if( g_pPlayer->IsUsing( pItemElem ) )
6 {- o7 Y2 E  D$ h% Z* l) I5 C      continue;5 U  F! X; f! e
     if( pItemElem->IsUndestructable() == TRUE )# X5 Z9 r, i  }' s1 G- u/ I
     {% m$ c; I! Y: n, k- Z( f- W8 C
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 E# U+ L$ W" l& d5 j  D      continue;7 c' ~6 K' A& r
     }. U- c0 c' d& `; F; d/ c
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 D% d3 [5 c& q; G4 g
    }
- F8 F2 E5 n' L9 M2 H6 G$ Q# ^    break;% F! K; A' ~$ J( ^- _
   }
0 y" y; {) i6 y, c  case 1:
9 T4 D: ^0 @* Y! Z   {, o6 M7 Z' `. p
    //整理背包
4 z# ~5 Y3 Y/ v4 t4 y7 m$ h    //////////////////////////////////////////////////////////////////////////
% V& r" n+ \7 z( O. K. C, j    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% p& m+ |0 R2 M7 c4 |+ Y* E
    //////////////////////////////////////////////////////////////////////////
: n9 i; U( z! Q    //////////////////////////////////////////////////////////////////////////
6 f4 }6 Z/ r7 p. F2 x7 I1 Z    CInventorySort* pInvSort = new CInventorySort;
" {" Q4 ~% l) k" K7 x& e: l* U    vector <sItem> vItem;
( o1 M+ e, }+ _" Y    vItem.resize(MAX_INVENTORY);//初始化大小
. y" o$ V) R6 r( P& W* q     //////////////////////////////////////////////////////////////////////////
$ j! q. Y( c; w" R3 I1 c+ N     //填充数据6 a& T% {8 ~) ~& a
     for (int i=0;i<MAX_INVENTORY;i++)* p' w- V' b& i  e- S; O
     {: s+ V/ N" b- b0 y; g
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) \* Z: D) R! G% S9 s) h) L7 B1 ~
      if (!pItemElem)' K" x+ j1 p$ O, s
      {
! J& B4 b% W, X  h4 h       vItem.dwKind2 = 0xffffffff;! j$ p3 e2 M; h. k
       vItem.dwItemId = 0xffffffff;
5 ?; k8 o; F: g" `       vItem.nIndex = i;
  p0 b. J3 \7 z3 J6 {      }else {
' S  J2 `3 U/ T. K1 F9 X  X       ItemProp* pProp = pItemElem->GetProp();
& n4 [) S: {& r5 E       vItem.dwKind2 = pProp->dwItemKind2;
+ }. \& t( p1 [: V       vItem.dwItemId = pItemElem->m_dwItemId;8 I9 g$ C( }4 n6 X& p7 n
       vItem.nIndex = i;3 O$ g  _9 d, p/ K# K: P8 q( e
      }
( [! ~# X! _# e! Z( Q      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* `0 l: L& P9 t
     }  x1 U; s) R9 M; d: P4 V' N2 X7 @2 M$ t
     //////////////////////////////////////////////////////////////////////////( w5 O2 I/ z" a: l" b) C4 Z+ P
     sort(vItem.begin(),vItem.end());//排序6 p4 ?1 V6 K0 o$ d9 m" d# E% t
     //////////////////////////////////////////////////////////////////////////) D9 q: c; w9 ]) |1 P
     //交换0 H3 z* e9 _0 p& P) j: {/ h
     for (size_t i=0;i<vItem.size();i++)' l: ~7 c+ i; n; w* k) O
     {* a; m. d# K( [3 K+ J& t  P  B
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 a2 R. Y- Z1 B2 Q# b2 L7 B
      pInvSort->Add(vItem.nIndex);
  C- \( c8 L+ o9 R; z! V7 m* v     }9 N* a6 @7 u5 w/ s2 j+ D9 T' p
     BYTE nDestPos = 0;  v) s% g% X. Z& [4 K/ f
     for (int i=0;i<MAX_INVENTORY;i++)  J- @5 y: V* E; t' h& a. ~
     {3 D/ o' r: C4 h0 c$ R4 N
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ n, B0 W$ ^- N& o/ Y7 b      if (pItemElem)
% e( m  S" g' T0 l% ?      {3 T1 }+ ?1 k* B( j6 j2 Z
       if (IsUsingItem(pItemElem)), p" I! ~/ a7 A$ y6 V
       {
! h6 y3 E( c+ x+ @! b+ B1 n        //这个位置无法放
0 [/ K7 c  u4 D$ u4 z3 F        nDestPos++;
  ]6 a: c; Q* F6 t  s  W       }
, q, ]9 c9 s& {; ?- `      }
+ ?4 \0 N- n+ A8 m& h      BYTE nSrc = pInvSort->GetItemSrc(i);7 a  v( A- u! ]8 h% r, s/ A& R
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% `9 ?0 N* b( Q- f      if (pItemElem)* f8 H+ Z+ ~8 {8 Y) L$ j
      {
) @- S% M& R! I5 d6 A1 @       if (IsUsingItem(pItemElem))7 \+ l" h& a) o8 g
       {
( r" E3 @7 l1 ~        //这个道具无法移动,跳过
$ L9 C- I  K+ h% R        continue;
! D8 f; L# `, P: K. v" u" n8 }       }
- h0 b, e# x0 G: ]3 ^3 e      }else{
+ j4 K- A0 \8 s. S/ T       //空位置 不用动0 w, T! h6 I# u# \! _6 [1 c
       continue;
/ r) t7 C6 }- c6 |) y9 R      }
# Z# x' ?# q1 S4 q/ y# }      //////////////////////////////////////////////////////////////////////////7 d% W5 Y3 z; w9 G5 A4 k% a
      //开始移动
6 @# Q* Z# l8 h. M. L      if (nSrc == nDestPos)
- P( L: z  A* I6 d      {) l) U+ F4 s, q8 M- Y( G5 ~
       //原地不动1 c! J9 q9 L% B/ H& V: I0 |: Z
       nDestPos++;
  i8 k  l& N; {7 Z- x; G" [' `$ W       continue;
% ]- Y* a1 ?$ q( r  s# Z( G      }% V% Q2 F" G( x5 y) J: T6 Z% I( @
      pInvSort->MoveItem(i,nDestPos);
; i3 Q2 D, a* b+ d      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, u' _+ j! Z. H2 Q7 E9 e+ n      Sleep(5);
, }: U7 E$ V. c* J3 A/ \* ^, \( v  Y      //Error("移动 - %d->%d",nSrc,nDestPos);1 w; j/ e3 h1 f6 O% n0 \# a
      nDestPos++;1 Q- L- c" \  [
     }2 ~. c) o+ f4 A8 y+ D  n( a
     //取第一个元素的信息
- l2 C% [' Q  u& \( \9 }  e3 F     /*/ ~9 {/ B1 A. o; W: }: p  l2 r. |
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& P! ]5 [7 p% T3 F' p- d5 J! `! c     {5 M% k4 r1 ?& h( m
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' W8 l3 T- K2 s
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 y7 J3 Q9 _  N+ F, }- ~
     }
' }& u* q4 j! b) x- ?     */
) M0 q4 I# J4 |7 a8 u5 x! R    //////////////////////////////////////////////////////////////////////////0 ]3 {  k# ^) l
    break;9 Y7 X  {* f8 J! c3 A* d& {
   }
' k& L6 O7 Y# v* g; d$ B1 S" |9 X% t  z  } ; u+ T* p! ~! d
}2 p* q. g) ?$ b* b
m_wndMenu.SetVisible(FALSE);
1 @' N4 f/ n, \' t0 M) |4 T7 }6 p% \2 r$ l, X/ q& M7 a
--------------------------------------------------------------------------------------------------------
( S  ^9 D# e; ]% l/ a搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 L5 |* ?6 Y4 K2 T' ]
{: f- U$ p9 j: r& X, ?
BaseMouseCursor();" m1 ^  v, x$ [' R  N% J
}
" k9 v" C% H1 y7 h在其下添加:# l: V& L  s) H( F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" x- T6 @' f. D6 i  P{
, j' f& B& B4 Q: ^7 K  N7 |m_wndMenu.DeleteAllMenu();6 h' V% M# R' o, q5 i1 a" q/ p
m_wndMenu.CreateMenu(this);
( W. v, r$ V3 T2 sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& J& M% Q8 l+ w4 a4 V, s/ [7 w0 V5 w2 a
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 {. O  o; F7 {) A  @- n- N! {
{+ j  w: u- w- h% p- o5 g
  //P以上级别才可以删除所有道具1 {7 C2 K/ ]$ [
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 ^( ^, W% [* i1 j
}. C& @: C7 j. \) [3 i5 P
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' K' G% w* T& S7 t9 i
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 k+ X# f! E' X1 @3 R# ym_wndMenu.SetFocus();
0 e5 W4 R# W$ Z& a2 R4 o! P}- w7 O; L0 b, @, x5 u' O
------------------------------------------------------------------------------------------------------------# ~. \: G! o: g9 s4 E% A
*************************3 x! Y' P+ @2 e: J# c) s9 I
WndField.h文件
) n* W5 W. j) u; y1 T/ M. \9 P*************************
) z4 c( z2 F; |搜索:BOOL m_bReport;
& A3 u* q2 v9 V% [) S$ o3 `其后添加:3 z. e# c; Z3 W* A0 b: U* F( K
CWndMenu m_wndMenu;* P: U8 k' n, y& r
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& }( b& |$ I; _" o2 x; {其后添加:
$ ?/ \. l6 B! ?( ovirtual void OnRButtonUp(UINT nFlags, CPoint point);, @4 c) l( n! M
4 R4 b, N3 `8 u# R0 E1 q* |8 l

" ~# M- Q( e; L7 Y

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-23 06:06 , Processed in 0.100812 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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