飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
- e# c6 p3 l! k8 y/ Z- W( h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 w3 w5 E4 y" g0 p
- L# m6 L& r4 x8 o1 }4 S1 u2 M! k
struct sItem
6 T, w# P5 n- \% A" W9 o) ?{3 X: y' u& s* K, W' j2 x
DWORD dwId;  n+ p" v, y! [5 C
DWORD dwKind2;
  z: |0 W' J! j* z. K) h: w" nDWORD dwItemId;4 P, K1 g2 S6 i/ `& s
BYTE nIndex;. [! V+ l$ s2 D  f8 U" B
sItem(){
5 c; U; f) m$ ~4 Q$ A6 N  \/ x8 M  dwId = dwKind2 = dwItemId = nIndex = 0;
3 ]! I0 g) g. S) p}: E0 ?" n6 [; a( z$ x
bool operator < (const sItem p2)
* m0 }0 ^. L1 R$ c( l8 |{
+ l' T  B  E! |% o0 _" }  if (dwKind2 == p2.dwKind2)
  S3 S% F. ^$ q  {0 d. r$ ~8 u( U
   return dwItemId < p2.dwItemId;
8 j; ?' U) C" B# q+ n9 Z  }else{
) ]- i9 ^* H4 H   return dwKind2 < p2.dwKind2;: j' O! ~. a! m
  }* ~5 f6 W- ]. M* Y9 {3 o% D4 k# ?* }
}; m' L7 K6 H) s
};) m+ ~4 x% k4 H( h
class CInventorySort
: w7 J$ ?- F9 Y5 V. p$ p{
9 d8 o; g$ G1 e  Z' R# m: X3 s; Cpublic:6 r9 P, [  c* o9 t) w8 j: }
CInventorySort()- q+ p, N$ N" C3 L
{. f/ p6 |& I6 _3 ?3 g0 F  D; o& S! [+ I
  m_dwPos = 0;$ z  E' z$ Z' V, M
}
# @+ k/ q' u/ ?; ^# E- x~CInventorySort(){}7 x# @* k5 u1 Z4 S* b9 {) c9 i- Z
private:
6 X# q8 ?1 T% e3 E) _4 M6 EsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 k) U4 a5 x8 v) Z4 O1 pDWORD m_dwPos;+ J5 ?0 ?0 {! o
public:- b+ O6 H) k/ u$ H
void Add(BYTE nIndex)5 E1 Z7 b5 i8 a( J. T
{
2 P" ~5 J8 b  K; s4 X  if (m_dwPos >= MAX_INVENTORY)
1 H1 l6 q: {; `4 L( J8 Y  {0 j2 ^$ o# Y# r
   return;7 v4 Y1 @( F$ M/ |5 h4 k- y
  }- w0 ~: A; t, ~3 h
  m_Item[m_dwPos].nIndex = nIndex;/ W2 G0 ~; K! s5 t
  m_Item[m_dwPos].dwId = m_dwPos;4 S& ?0 ]5 v% Z" V: b% s/ X# R8 {! v
  m_dwPos++;7 x$ l9 D, b" l+ z
}
, X' L% v9 O' R: ^1 \- d) mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) u, n5 j/ l9 G1 Q{
$ z+ w# w3 I8 A% u5 H, _# E. t  for (int i=0;i<MAX_INVENTORY;i++)" S' J- M% D/ l& i4 W
  {
7 x+ L4 q" i3 K( M   if (m_Item.dwId == dwId)
3 j% O2 ?; @; V1 m5 a* d* Z6 O   {
2 [( H8 T0 b7 i- d% M    return m_Item.nIndex;- F: |' }8 R$ i+ t1 l
   }
' [8 m2 [" R  g! e1 L" F1 g7 D  }
' H/ h& E1 }+ J! ~  return 255;
8 _) N0 X+ x! k8 C}% ?, c1 @% {5 z% p' r7 Z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 \* y& T; e) `- N+ S
{
0 X5 a/ B$ ~& W  G3 Z, h2 `0 x  BYTE nTmp = 0;& e+ k1 J  \' V$ r& m9 @* H
  bool bDest = false,bSrc = false;
: W% F1 \; t' v- x8 @7 g+ c- ~  for (int i=0;i<MAX_INVENTORY;i++)
4 o; s. R" W9 G$ p  {/ W( t% X: C  w5 i
   if (dwSrcId == m_Item.dwId)
& c' ^) e* @$ w3 u* ^5 p   {
  w% f. Q: `( f4 h* v3 h    //id相等 则 改变对应的dest和src) _/ F" V; {7 e  U
    nTmp = m_Item.nIndex;& N* S( z. _" O6 w  Z! Q9 h- q
    m_Item.nIndex = dest;
+ ~$ K5 B9 X# c3 z. C6 ]   }, b* ?& ?  z; Q/ A
  }
0 i( u$ p4 ]$ A5 U9 w9 l) w5 u- }  //临时数据保存完毕,交换开始
+ ]  V, `( N$ c0 |+ a  for (int i=0;i<MAX_INVENTORY;i++)
2 B5 A$ K) d1 ~, E9 z5 r, O' q  {5 ~7 Z* R) F! _8 w- |1 o8 V
   if (dest == m_Item.nIndex)& l8 \( N$ D- B
   {
1 d9 \" B2 {% `- S+ E" _    //id相等 则 改变对应的dest和src0 m/ w+ u+ D6 s& B/ A$ p" N
    m_Item.nIndex = nTmp;6 ?" U' u9 U. O, R% m& f7 p% u8 i
   }
1 N$ ?* g, _$ {* w* I" w; |  }
+ M# S# \3 n6 N2 i}$ g* O# r: n, {" b2 W
};
8 O2 Z, o% R9 t% n6 }/ ?-------------------------------------------------------------------------
0 N( |  \, I" c  N7 H# E7 f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" m; |3 J3 i- [' O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) O' ?+ L) }; I; ?3 j2 v; z! B
紧靠其上添加:; }: K/ e9 R" l. {) B) ]
if( pWndBase == &m_wndMenu )
7 [8 ~$ M  E( N$ c+ R% j{
6 r+ R6 J" b3 E  switch( nID )+ @( Q) r0 K3 V6 ]( x; l4 m) P- v7 @
  {- G# x: o! e' H7 g( n0 b9 S4 q
  case 2:
, B* o. p! ~8 D: h5 T4 _+ n0 Y) p5 }. s6 C   {& R/ [+ H, K$ c3 [& ~1 e  J
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 l0 B# e. U* l5 y    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( s) `$ `8 x( i# _# T) x1 |) k
    {
& I, l( ~, m& x: D/ i) D, J2 j* {     break;
2 j# i) b7 |/ z& @    }2 g& ^+ ?; W) N. R
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ b; X% F. b+ A4 p    {% X, j* B$ V! c$ E
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' b% f) d5 d' @4 K
     if( !pItemElem )5 [8 E2 O+ C& u$ ]
      continue;
9 C3 b5 c" a4 X1 y! W, c     if(pItemElem->GetExtra() > 0)! s  ^7 l# h# d+ c
      continue;
0 y; e  o% n9 |$ s; B: P" |7 J% g     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- A( M, \: Q7 d' n+ `      continue;2 L5 Q$ q6 c  l, S  r
     if( g_pPlayer->IsUsing( pItemElem ) )7 {. K  B& `; h7 K3 x
      continue;
. s6 y+ B  K+ e0 Y     if( pItemElem->IsUndestructable() == TRUE )' F" w5 G: G2 l  ]9 ]$ S
     {2 j& |: h, B# v
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 b5 [" Y1 x7 w* e& x& L5 a8 U& e
      continue;
9 h+ J1 w; K6 b  _     }
5 b$ w- \  V5 Y4 p9 R" x     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, r( s5 F8 t9 @( N5 J
    }
3 y3 T" o" q3 |5 ~2 j    break;
6 m6 R' C1 \$ i; x   }
" L9 ], a; D: F, p  case 1:
3 ^' [; q% H% o; c9 M# G# T! |   {
5 W2 e/ [' I% Y; w9 h7 r4 e    //整理背包( D1 D0 Z1 J. O6 @# S% Z  D
    //////////////////////////////////////////////////////////////////////////% H3 G+ s& C4 ^  }3 w6 N
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* X$ v6 R2 N' d/ j/ m+ [    //////////////////////////////////////////////////////////////////////////% u' C0 w+ p/ B3 G
    //////////////////////////////////////////////////////////////////////////. @" u7 \4 u5 t( T! _! D
    CInventorySort* pInvSort = new CInventorySort;! u7 `. {; U3 h, g$ U
    vector <sItem> vItem;; J0 i0 b& P& B* F! s) `
    vItem.resize(MAX_INVENTORY);//初始化大小
4 v, s' ~* O. c/ \3 A     //////////////////////////////////////////////////////////////////////////
. H& y' ?9 R1 Y     //填充数据! m1 G6 n' C6 w( Z! V( B6 W
     for (int i=0;i<MAX_INVENTORY;i++)5 S8 ^5 R, M8 r7 b/ |; Y
     {# C9 F' Z" b2 ]% ?1 e
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 G" J, \* T6 w) p" l3 ~7 T
      if (!pItemElem)3 p' E& I( ?( h; B
      {0 \0 O/ _  g+ V2 o% ~8 h/ f7 ]
       vItem.dwKind2 = 0xffffffff;
) [5 p: ^0 y7 |       vItem.dwItemId = 0xffffffff;8 ^, W9 v" |: o' ?
       vItem.nIndex = i;
% k$ V# Z; {* L; K+ l9 A0 q8 f      }else {/ I; ~) F( j, {9 t
       ItemProp* pProp = pItemElem->GetProp();
6 i' _1 T/ }1 X7 i' l1 M       vItem.dwKind2 = pProp->dwItemKind2;9 z5 P& N9 b$ n1 u
       vItem.dwItemId = pItemElem->m_dwItemId;
1 b9 N" z" z: z       vItem.nIndex = i;
  ^, P# D3 U5 n1 s+ O' O, [      }$ J  f* N: l0 i- M0 k6 b
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# n4 {: S6 n: L7 f0 P     }; Q0 G- g  w8 s1 r2 G. p. a
     //////////////////////////////////////////////////////////////////////////
1 s; X* d0 i/ P, \     sort(vItem.begin(),vItem.end());//排序
6 M" V1 d2 _/ g     //////////////////////////////////////////////////////////////////////////
8 c2 [8 n2 I- U5 \     //交换
6 R$ [. t3 n7 N) `3 B; Z     for (size_t i=0;i<vItem.size();i++): A1 l) g7 t9 n' }( A4 _; u
     {: |8 k& }, m( `- ?1 z5 T
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 s0 p0 \' I9 e  N# H/ i
      pInvSort->Add(vItem.nIndex);* j' F7 T& J( ]
     }
5 w+ V4 f$ D9 z) P. j- m* P$ L% Z     BYTE nDestPos = 0;
) r% L, c) f+ A! s- G- _& `     for (int i=0;i<MAX_INVENTORY;i++)
. a- e9 }$ i% A/ ]     {2 z" @1 j* n: d& A1 \" ~
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 @) g0 Y6 v8 G0 @
      if (pItemElem)
, q, p7 [' B- w3 V! S      {8 K5 w6 c& C2 w! v
       if (IsUsingItem(pItemElem))
  B9 {& W' j& C! h  m, Y1 F. \9 u) o       {
7 Z/ [& m+ l7 ^2 z        //这个位置无法放' e! o- S7 M$ B4 g+ z
        nDestPos++;, I& L# e8 R& p9 m: c
       }
! T% x+ m1 |- u  x' {      }" Y5 e1 K- y$ D$ I% p0 B! x
      BYTE nSrc = pInvSort->GetItemSrc(i);: P5 k( U0 O: t; `
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 Y% y  C# S6 @0 p0 N; i; K
      if (pItemElem)
" L, E0 C; ~8 q0 W( X5 o7 z      {4 r: b& P: E1 j6 W) U
       if (IsUsingItem(pItemElem))0 @- f  x4 U% Q( j; j+ @- W
       {" G1 e2 ^  J2 o5 f
        //这个道具无法移动,跳过* n7 s/ @& R9 t( a. q: x- W. D
        continue;
: O1 r  n. @+ ?: H7 E2 Q       }
, v* d9 r! T* }0 h3 s! o      }else{
/ n6 p; a+ t& x1 X1 p* ]" q       //空位置 不用动
4 D9 E# l2 w; ]9 ~8 S       continue;
% Z# n) N0 u7 d, _7 I5 i/ @      }% S6 |6 b# X+ b1 ~" o
      //////////////////////////////////////////////////////////////////////////! Y/ G' ]" [  m& F0 p+ J  \4 @
      //开始移动/ n; `9 S( }+ ~) z; p+ H( T" A
      if (nSrc == nDestPos)9 g# j) L4 {$ Z4 {4 Y  n8 {" K: J
      {
5 J7 X* ~' T: x% Z$ T0 s3 q       //原地不动
' o; D. Y  F7 F  ?8 n( v       nDestPos++;
# o; M, |3 K' g# v  ^6 d       continue;8 w: k  B; P7 z! J5 j/ \
      }  D( @* u; M9 u+ u5 |+ f9 _) ]0 I
      pInvSort->MoveItem(i,nDestPos);# y; B" f" y% O" h' c0 W" ]
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 O; r1 @1 q; {% J- f
      Sleep(5);" Z3 V5 d, \( \* ^0 f% [5 }
      //Error("移动 - %d->%d",nSrc,nDestPos);
$ V2 a$ K( p, E$ @$ u      nDestPos++;; h% ^  a; B) ?' a% W% [8 X
     }$ _' m* _$ y/ o+ w2 p
     //取第一个元素的信息
2 q3 @/ G* x$ v4 ?% B     /*
6 u' S; E& z9 X+ D! X7 c     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, w; Y% x( w2 e  a! X- c& D4 @     {
3 w9 d: @4 ?8 |- c. P5 l* ~      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) \9 j4 o+ H5 e/ O0 X0 m/ E
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
  Q* G/ e6 h9 g     }
6 G  K' L& t" l/ }! i4 r     */
8 z- V, g1 \/ P8 n/ Q! B$ U4 C    //////////////////////////////////////////////////////////////////////////) v% Y+ X$ Y6 m
    break;
! e0 L0 c) L( {4 X3 A   }
  K, R: Q: J" `8 l- S& E" @! C& @$ c  } 3 [6 z3 v8 b) p1 ]4 N. h  m" ?
}! O; S4 t, G% R5 L7 c9 J2 U
m_wndMenu.SetVisible(FALSE);! D7 `$ M& H3 j( R

5 ~$ ~/ I# |+ t% R  B--------------------------------------------------------------------------------------------------------2 E+ P  t5 G" r/ E8 D% J
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! d) }) y6 @( o0 w1 h
{# u$ A) M. t, K) a4 x: S
BaseMouseCursor();
3 t! ^3 `6 i$ h% ?( c5 b}
& `3 t/ ?7 X/ [% N7 ]3 f% X在其下添加:0 ]- Y8 _: L! T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- i$ i/ {% ~! P
{# `, d. ]; y: C
m_wndMenu.DeleteAllMenu();/ ^8 H5 `" e0 T
m_wndMenu.CreateMenu(this);; ?! O7 Y% G' C* P
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% k* Z2 m% Z2 G; B" E) Q
0 G, {& z' |% H1 Q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# B: z* w$ t& r! z' V6 L5 _# d{5 b, T' A2 Z  z$ s
  //P以上级别才可以删除所有道具' `; g- ~" L5 x. m$ ^
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- |/ o- y3 _1 l, c1 X& `8 N
}
: A: x& g: t  D# b2 Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 H, N' g  M$ \) q1 X- x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ P3 @: ^. }- _/ O$ um_wndMenu.SetFocus();
- l0 V9 L0 A3 d/ c" |7 O3 p}( U! ~! q& F& `3 p
------------------------------------------------------------------------------------------------------------
: M) W+ K- S1 A9 p1 Y" @*************************
+ O3 g# N8 U! w' I5 D0 jWndField.h文件2 X3 K0 W) @$ q4 @
*************************7 o* k: @4 K+ V
搜索:BOOL m_bReport;5 V  W6 ^5 E1 W: t2 L% Y3 Q
其后添加:; F7 n3 N9 L& A# }! h" f: y
CWndMenu m_wndMenu;# N7 z) l, _4 D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ s7 `$ C& m; c: u4 X; l
其后添加:
) P6 D! I6 Y# W- Q& |! v8 a9 q: xvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 Q% f/ v/ R# Z, \. |
/ ^1 c+ d2 [5 K- F7 w7 Q9 ~
" u" e6 _" ~2 [# i' E

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 05:10 , Processed in 0.066496 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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