飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件( [5 p" u0 P3 S; t
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), I& Z  n2 r, }; I) B9 D

' g) q/ c5 r% }8 w  d9 s5 z/ n) m: I; Bstruct sItem2 x0 Y5 \7 E; R5 C6 a
{
/ W" [5 e# u- \4 z0 eDWORD dwId;( p+ P% [0 M; R# e/ d' A; |
DWORD dwKind2;
7 B( @4 L2 [2 f9 _DWORD dwItemId;7 h" x( q' n5 B. I. i) {
BYTE nIndex;; a! A- v* |) H3 x2 ^1 n
sItem(){  k8 h" y+ x1 Y* K% D
  dwId = dwKind2 = dwItemId = nIndex = 0;: x$ U7 l0 V, Y
}# @; t/ A" V- c2 k
bool operator < (const sItem p2)! x* V" u& m! n( Y7 g& c# P
{8 }" h& i3 m7 |& B7 R$ T- }& R& l" g
  if (dwKind2 == p2.dwKind2)
1 w8 H$ b3 q/ P  {
, c1 ]- V& G/ ~& y& F0 O/ P/ Y   return dwItemId < p2.dwItemId;
# y7 o+ E6 `, c9 o+ _* I3 {; T  }else{
5 M% G$ l1 F0 q1 R5 X   return dwKind2 < p2.dwKind2;' q' t6 }' m/ G9 ?" |
  }
, ~/ m3 z  B# l$ e) W}
, T  S( x5 }  k, R7 h};
8 V' e( W; j) C( y0 z9 A8 s8 sclass CInventorySort
- l9 {1 j. _+ f, Z1 U" E5 r4 p& d{8 X# X5 H7 e) _. h+ k, n
public:( }9 {2 l& F/ v* E' i% S
CInventorySort()9 C. B  [$ D; E0 u  e
{
9 N5 t  ~0 V& V6 S) g' i. D  m_dwPos = 0;, Z6 D* K$ M9 D* T
}
8 Y8 n5 P+ [* E* d. K! A' A7 l% `~CInventorySort(){}7 X4 Z; h, v2 x
private:( h# x2 x+ `- n. ^+ \5 [/ p
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
% ]; v. u$ }1 z2 |! O0 h2 O$ Z( q. tDWORD m_dwPos;) J# L: s) X( O8 x/ g
public:
( G/ ?; e5 D, {void Add(BYTE nIndex)5 G4 G3 z8 x7 j; s+ a: D
{9 q# Q+ V6 z8 t  J& S
  if (m_dwPos >= MAX_INVENTORY)
" |7 y5 ?) e8 }* f: L2 D7 D4 x, U  {
9 ~: i4 y& z, [! U5 o3 @  _% a; t2 ^   return;
! B2 l& Y' a6 _4 |4 o# |4 i1 F  }2 j$ W- L( d4 r8 |4 L& X, q" l" z
  m_Item[m_dwPos].nIndex = nIndex;
. o  e# \5 d; K( ^! O7 [  m_Item[m_dwPos].dwId = m_dwPos;
  F1 a+ [9 n/ }  m_dwPos++;
' u% C1 t* O) m, x5 i. d}, x  h1 F5 `. U& G
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
  q1 g+ u- T' l$ {2 Q8 U{$ u. _6 ~6 g) Z
  for (int i=0;i<MAX_INVENTORY;i++)% q8 g* ]5 @) p5 U4 B1 v. i
  {
* \+ \, _+ E- D& c9 g   if (m_Item.dwId == dwId)
% h- q, I# }6 H; V   {3 C* s' c$ \' I" N# n( e5 d' [4 @
    return m_Item.nIndex;5 s/ I* U2 c0 k6 W1 w
   }
9 F5 ?1 ^# i5 O5 z* A& f  }
7 c5 G# a. @# B  return 255;2 j/ T" D/ @2 ^
}1 _$ n- a+ C& Z$ h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 X# p& F7 X! o' |' W5 X1 z) u
{
0 ~9 R- c1 Q! }. _  BYTE nTmp = 0;
/ c$ [7 J( E( Q+ u  bool bDest = false,bSrc = false;
$ b0 T' p, |  u; j$ P# a  for (int i=0;i<MAX_INVENTORY;i++)& ~! m! i0 t' p; D- Q
  {
4 g7 n6 `. J3 s+ j! S: P) V- E   if (dwSrcId == m_Item.dwId)0 b, a, J0 S' I* O8 U
   {# k, {: \5 h" J7 e  j4 j5 i/ k
    //id相等 则 改变对应的dest和src- ]+ W# ~0 P1 x5 B
    nTmp = m_Item.nIndex;
- X/ x+ O2 E6 w# o7 B3 r    m_Item.nIndex = dest;4 T* v8 a7 T4 Y. J3 i
   }
. @7 J! e* o+ w  }& k* f0 u8 E* e+ t' @) t4 {
  //临时数据保存完毕,交换开始. C' P5 ]! o; B, k
  for (int i=0;i<MAX_INVENTORY;i++)
! C/ o5 j  k6 |0 G8 N, O7 `7 ]  {" `# H9 C7 m1 S& q
   if (dest == m_Item.nIndex)
7 s* d  }! s% K% b8 G: w! [   {
" U, Z+ m& w  z4 O9 c) {* r0 u  o    //id相等 则 改变对应的dest和src3 u, Y8 c% K' ?  B7 L# y  _
    m_Item.nIndex = nTmp;3 t! K# \1 Q( p0 ~: t' T. \7 W
   }
( `% ]/ Z4 D( x1 f+ c. o3 l' z  }0 E: |2 g- f/ |
}+ Y$ ?" O* Z/ Y
};6 C0 o: T, }2 C6 h- K8 r7 a4 r  F" a
-------------------------------------------------------------------------
. z( T  L) c; y8 j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): ]; `. R9 m. }: D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 E' P% f/ G" ~8 E" s+ _. g, K# d  n
紧靠其上添加:
# O/ E7 S1 }8 g/ eif( pWndBase == &m_wndMenu )* ]% S* k; P8 {; T. V, n0 W
{
  Q4 N* @% D0 O7 k9 I8 e  switch( nID ). j7 Y6 P" r7 T  ?  F
  {
0 m, ]4 ~4 P$ ]% \) }! E  case 2:5 L6 e0 z" t# s  e! @
   {: O" O! O- Z6 q6 ~' j* x
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: J9 I0 g% i. _0 g; V! x    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ B! R, \5 G3 C: ~    {+ e. k" {2 I/ [! m2 q
     break;
. |- z5 ?1 j7 N# j2 x    }& j$ Q& }! G+ q
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 Q, O  {% _# i; d7 u: Q    {
9 O( I1 Z8 L3 o) _# A9 m  }* [8 }( ]7 L     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 `8 w; o2 x7 u# }% `4 ?& Q     if( !pItemElem )
/ l6 A& I& c- x0 L, e) p+ L( \, |      continue;1 @9 ~7 O7 l) X0 p! W( a
     if(pItemElem->GetExtra() > 0). D0 x3 k3 Q& q( ^$ l
      continue;. j5 C4 }0 x1 O' l8 E/ |
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' K# y& O% F; Q
      continue;
/ V4 n4 f' B* q% ?# E5 w, C     if( g_pPlayer->IsUsing( pItemElem ) )( W% {' x! D. [- J+ N. k
      continue;  g* H. H( c2 W8 {; Z8 q% s4 F
     if( pItemElem->IsUndestructable() == TRUE )6 Q" J& ]0 A& L4 G3 h0 H. y
     {' Q0 |! a7 A3 h
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. G: K3 W& ]& t& q9 ^$ R      continue;: o, A) g4 A' y( T* H2 K3 v
     }
4 u( t; P# f9 i/ l6 z& H6 u, a5 e     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 n8 I# u1 C+ N6 R0 o
    }  M* o# u1 H' p& [$ a' C
    break;. [) v! n+ K& @" d$ K" _8 B
   }9 Y7 z# c9 [9 k& q, {$ n3 u
  case 1:; Q7 b" ~! w. u: m- y! i. X/ @
   {
+ ]4 n+ d4 v& g  f8 k9 L    //整理背包
& z9 {3 {' o! u% ]    //////////////////////////////////////////////////////////////////////////5 K# l$ }0 ~3 v+ R$ L8 j
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 i" w0 s+ Q( Q8 H. k& {, I7 ^0 x    //////////////////////////////////////////////////////////////////////////
( C5 D, i% ^" r; A    //////////////////////////////////////////////////////////////////////////. F3 S. I. r5 \7 f4 s/ ]
    CInventorySort* pInvSort = new CInventorySort;2 |; E) j+ G' h( E9 t" t
    vector <sItem> vItem;
& C/ d2 r* n* f# {    vItem.resize(MAX_INVENTORY);//初始化大小; o0 f/ @" h- P. k- @( B  V; @0 Q
     //////////////////////////////////////////////////////////////////////////
1 T( F2 `$ Q) ]' X8 \; F, t& q4 V     //填充数据
5 J. R+ |7 C8 O: f. u     for (int i=0;i<MAX_INVENTORY;i++)/ o" A8 M; r8 R% u. J
     {
% ?6 H  |9 b& \      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 i3 F! ^4 G; W- Z; Q* U
      if (!pItemElem)
$ `/ \" R5 f8 a0 [      {7 u6 F; @  x4 Y( P$ ^
       vItem.dwKind2 = 0xffffffff;
3 T3 A2 q0 a7 A" Y0 v$ g4 g       vItem.dwItemId = 0xffffffff;
2 f6 h: e% R* i       vItem.nIndex = i;3 V4 {( \) W. I, Z3 |
      }else {
/ U* l0 ]  H4 C       ItemProp* pProp = pItemElem->GetProp();
" _) N! V. |& d  K' J       vItem.dwKind2 = pProp->dwItemKind2;3 {5 F2 p$ R3 F4 N% R/ k0 `: E
       vItem.dwItemId = pItemElem->m_dwItemId;% G; L( u, A0 I, O3 C
       vItem.nIndex = i;
1 S# f' m1 ]4 v, N9 ?1 @      }
+ r' a( ~4 C  ]& N0 H3 I* E      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" i9 X% E: p5 ?' {  L     }
) Y. \6 f" W5 u0 l0 w  Q7 _3 n     //////////////////////////////////////////////////////////////////////////- h. u/ v% h9 i9 W. ]
     sort(vItem.begin(),vItem.end());//排序
1 J0 J  x5 A  F9 p0 Z     //////////////////////////////////////////////////////////////////////////  k1 U1 \4 B' d
     //交换
* ?+ L2 \' K+ Z: v     for (size_t i=0;i<vItem.size();i++)" v/ B9 V; ^7 A+ U. x
     {
' y9 q( X- Z) G+ s3 L  j      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- q0 q$ l, _% N. E      pInvSort->Add(vItem.nIndex);; P/ ?. ?* r+ ~# w; F9 B/ T, ^
     }/ {8 R  E. S- Y2 x6 D+ p
     BYTE nDestPos = 0;" L, b# q9 D) p# |3 R
     for (int i=0;i<MAX_INVENTORY;i++)0 J, @$ a3 T3 Z- B6 S! }, i
     {
* p/ Z+ }% `, ~7 U0 ?      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 v2 N/ J0 Q7 t5 b) X
      if (pItemElem)
8 I' l* S# s# ^( |      {
& T% D1 B0 U, ~. }0 d' J) _       if (IsUsingItem(pItemElem))
9 m# f; F/ i) J       {
; D* r4 |* m( x: L" p        //这个位置无法放8 H: x# N3 l1 \8 p& E
        nDestPos++;
: |7 G6 l" g, {* L0 c       }1 b( t! o" J$ A; [4 D
      }
2 f/ k5 i2 H3 L8 A% R3 \      BYTE nSrc = pInvSort->GetItemSrc(i);* C( {% G7 \: J6 u
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" D9 M  z) u- S3 ?. h      if (pItemElem)
) |8 ~3 x% I; W# ]1 I$ x      {
7 C* G3 V# x, T. y       if (IsUsingItem(pItemElem))
1 W3 k+ P7 g* ?  G% P' s; U       {
. M7 m& W% R% G        //这个道具无法移动,跳过# l: b- P# J  u/ O0 q8 [
        continue;
& f0 o$ Q2 \, s; g) J4 Q       }
1 _) T* T; e& A6 }      }else{
1 K6 S( c) h. @1 }* U7 d4 u. \       //空位置 不用动2 S, R7 }* K) P
       continue;
8 `2 g: l# d. [& c4 [$ ^! z      }
( o  T, h% C" [' l5 ], c      //////////////////////////////////////////////////////////////////////////: k5 s$ J! [, V
      //开始移动! w" T/ Y, d& ]3 M: ^+ ~/ B
      if (nSrc == nDestPos)# A) j: A4 a( n5 H$ C7 Y1 |0 W) V
      {
" o+ P' N) H( e4 k' s       //原地不动  O& h* b, q! p2 v/ h7 [& o
       nDestPos++;
: P' j* o5 a. x1 }5 O# S9 b       continue;
3 Q+ t& k4 e; O7 a3 k5 e1 q      }
& S* d* W' E# l9 h      pInvSort->MoveItem(i,nDestPos);
( |# J9 a" Q3 z) E      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- v4 P7 r* p$ G3 R. }, _8 U7 X      Sleep(5);1 v  L2 g/ G; a/ J6 h
      //Error("移动 - %d->%d",nSrc,nDestPos);, r: O* W2 U; y
      nDestPos++;
% l2 j' E- L2 D; N% _3 L     }- B* T$ w; q% T6 {9 h( h) c  K2 B
     //取第一个元素的信息
. i7 [- h5 t5 @     /*
2 g. R2 L" i! s  ?     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* ~- W; ], u. c: d% M     {% v. R4 e0 w. g
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" W0 i5 T% I6 b$ S& \/ u      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 x0 j7 M2 \$ v9 T0 p# b* l     }) O% l& y' s+ R: k1 ]
     */
+ S; p% X  K  B    //////////////////////////////////////////////////////////////////////////7 P* [  [" e& a1 Y: [: H% ?
    break;
' z, D7 R8 }4 J- h" f& {   }
. F( z; P% U& ~  } . m7 ]" x# d/ S# l8 n1 m! H! C
}) \4 \4 L- A$ F/ e
m_wndMenu.SetVisible(FALSE);; Y: ^* z2 [8 w

3 N, G4 S; m9 \, Z--------------------------------------------------------------------------------------------------------
2 [+ |, a* Z$ B9 c搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ k) E: V5 H% N: Z" v5 h; |
{# w9 G: m3 {. L0 H$ W
BaseMouseCursor();
! i( t* _# k& a# |7 b}3 i) d  b5 z( x) |+ B
在其下添加:. G: W, z0 }6 T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# S' Z& c" U+ V/ y: ?; [{
" U% S8 B5 M" K# N: W) w0 dm_wndMenu.DeleteAllMenu();( @- X' `; h9 H" o( l) {7 k" m7 g- P
m_wndMenu.CreateMenu(this);
3 W4 H" m# g, E7 c: K* [& Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 U) C3 S- o. A5 ^* A

1 S* t- N( U4 O2 yif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 S: {# k( o0 l& m" O2 b
{
, `* L7 s5 v: z. _; U6 d8 E  //P以上级别才可以删除所有道具
; \, Z7 D9 {. ?3 R# [% d. b  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");  Z. Y" N* g3 o6 b
}& h' [! ?) `% Z5 I: X3 z! j# }) s
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) Q% `0 @  ]- |( q: A, l, Z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% j1 Y; T# Q) Q! C4 O
m_wndMenu.SetFocus();) Q1 m/ I4 t) \
}
8 M  ]: s- D& ^------------------------------------------------------------------------------------------------------------
$ p( q) c2 Z  {5 @*************************: Z8 T5 V0 r7 m# T
WndField.h文件3 w/ I* O6 {" b' q
*************************$ B& z/ \+ [# C$ I4 R7 z
搜索:BOOL m_bReport;* m0 p7 v0 m2 W
其后添加:
: q4 E8 v. w( G: \CWndMenu m_wndMenu;
% }7 s, R/ g2 N: H0 z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# h7 [5 r* h5 P7 Z: ~# n/ ?
其后添加:
) m* f7 z4 e* x! Mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 E( g$ N, ^+ X$ W! w' h! B
" V( p! K' M' u$ o, H: O: [# n; r4 ^  u
& l! |1 y3 ]* H( b+ v$ P8 f

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-18 04:28 , Processed in 0.060955 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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