飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
7 r: P8 u, ]7 \: z5 C! s1 z9 k搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- A1 h6 A! y+ Z( N8 F

; N$ X) P/ T& Z6 _5 P3 Sstruct sItem9 c$ T7 g* w& T7 R
{! [( h7 n+ n; ~$ Y
DWORD dwId;% n& y7 }/ f* p* O5 u- S
DWORD dwKind2;
( {3 N4 [. o/ T% U( W2 `2 p& ~7 wDWORD dwItemId;: b( s/ Y. D( z2 \) j' @6 ?
BYTE nIndex;
" l! m# y7 Q. c0 P, q, V  CsItem(){
4 f4 M: U3 J1 Z6 S8 n- X  dwId = dwKind2 = dwItemId = nIndex = 0;) K! W2 a: z1 R9 G; i
}: a* P! _' x3 i7 D5 F( M8 e) S6 @% t
bool operator < (const sItem p2)1 m' p& p, h8 @* S- E% s4 b
{
' W) b( T$ l5 |$ Y; y2 t1 L  if (dwKind2 == p2.dwKind2)5 |) U* v& r' d9 [. b
  {
6 n4 t- y9 T& ?6 S$ c! ?   return dwItemId < p2.dwItemId;
& g+ v7 l9 ]. V  }else{
) ]2 j& w- M2 }, \   return dwKind2 < p2.dwKind2;
+ X7 q) w: h5 R  }
- A, _( I: u  O0 K' p}1 g; f& A! ^7 z0 d1 g
};  q# Y+ g7 ?0 t) m+ K* K
class CInventorySort
3 c, c& e. m' e$ ~: c{
1 Q+ Z% s3 V8 k% Hpublic:
( Z, [0 ^. R. N8 CCInventorySort()+ M$ ]& Q7 ^' n+ J# x3 q0 |, F# m+ A
{
) \+ {; h7 r2 ?9 E3 z  m_dwPos = 0;: a- `  P$ G( }) Y% G, X2 W+ e
}; c/ }' [' ~9 u- l* b
~CInventorySort(){}: C# N: N! v) Z1 q4 M
private:7 h3 G! D4 w' A( k; x7 T
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& g7 t  C) K( t- \& u
DWORD m_dwPos;2 e( V. S" d+ X$ F: U& E- M, E. |" v
public:& F9 ]- u% T8 X2 V5 r# K
void Add(BYTE nIndex)
2 z1 K1 V% M) f. d, Q! a{
2 L6 s, m8 V2 L# W! @) R  if (m_dwPos >= MAX_INVENTORY)
- k9 x2 V# ^, P9 V% S  {4 R  ?* Y/ V) H' L" Z% @
   return;
3 v' u8 @: }- |* {, u  }. J5 G( \4 b- t; B( E  _/ X1 s9 h
  m_Item[m_dwPos].nIndex = nIndex;# Q. J, L+ V+ W+ b& O+ a
  m_Item[m_dwPos].dwId = m_dwPos;1 H; a: T7 `3 j8 X0 n9 P1 @
  m_dwPos++;
2 i+ T2 p& f; l& V! |8 S5 x( D2 z}1 Z9 C, G6 @& |* u. @
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. S8 P7 X% W- ?3 B{0 ~. J# d0 j3 b4 W3 `# f
  for (int i=0;i<MAX_INVENTORY;i++)9 g1 x1 h/ L& i, ^6 e1 e+ A! w
  {, ?" u% L3 v5 C( `/ G2 o8 q
   if (m_Item.dwId == dwId)  o: b  C9 |! \. e. d+ V
   {8 @# |+ D  M; j3 R- J
    return m_Item.nIndex;( y; Q" X3 W. ~- \* |
   }
+ ]- M8 N" x+ I  }
+ o  n3 ^( `. D' V$ q8 M8 ]  return 255;+ q- w4 X9 A5 s4 u% c/ G
}2 j: m# b9 l1 [& `0 }3 |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ j9 r4 ^- ^4 g8 {3 C5 U3 m
{
* o* w* V4 n& a5 v  BYTE nTmp = 0;
/ ^6 |7 t' ?$ z" @: t, E  bool bDest = false,bSrc = false;& M- r# x- n. p# m' J
  for (int i=0;i<MAX_INVENTORY;i++)1 A: T; e) l/ Y- \! \: @
  {0 T; a( u* X5 ^
   if (dwSrcId == m_Item.dwId)
1 M; j& I+ t  G   {. I8 P( E# N& h& v! V
    //id相等 则 改变对应的dest和src. t/ O, u3 Z$ S
    nTmp = m_Item.nIndex;! _3 @4 V' {% }, c
    m_Item.nIndex = dest;' A8 V0 b. a: k* _1 o. [; d
   }/ P$ c* R5 ]5 x& }5 }4 R2 l# ]' m
  }/ ]/ k! a/ J1 u2 {
  //临时数据保存完毕,交换开始
3 ^! o  t! y$ E* v6 x  for (int i=0;i<MAX_INVENTORY;i++)
4 S$ ~# d. G/ u  {
; \5 B3 k- T( V9 f   if (dest == m_Item.nIndex)
* H, q/ L5 P7 ]   {7 O# J5 B4 a3 ^
    //id相等 则 改变对应的dest和src" @/ a6 b3 C: F, {3 F
    m_Item.nIndex = nTmp;
: e- c/ i2 e& j2 B( b* J   }( P  Y5 d3 i# K
  }
5 r4 y2 [3 m, J. j7 y- ^}7 n3 ~' n$ ]+ {7 h5 d. ^& M" k
};
3 {* w' T" J5 E; E+ M8 a1 F-------------------------------------------------------------------------5 w$ x3 o& h0 a9 Z; h8 z) J6 ^2 d
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 C: |. \0 O" ?* A# x8 n* r% r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! z# n* w. }" X
紧靠其上添加:
$ Q, C5 W+ K/ C8 V6 d0 D; jif( pWndBase == &m_wndMenu ); M  c) V5 g% q9 y' u1 G
{
$ j$ r, L8 H5 W4 y0 y8 L% J& F  switch( nID )! W" N. m6 K" h
  {
& {5 q& ]; e# r: P  case 2:
+ u3 C# ^, K+ z/ b0 P3 H+ ^3 ~   {' B/ _: }4 D( p; T- A: L
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
# {- k% L% [& p) e) J    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% ~* ]$ |' N3 x/ Z. R0 D, T9 G
    {
* T6 s1 S2 B; B7 ?% a: P6 I% l+ N     break;$ _( F8 ~, a2 _5 p9 k) p
    }
/ \" {: s% |3 W  u5 h+ y% m    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' ?7 t4 f! L6 {! [% d6 M6 d    {& z# S8 p, r5 M4 S: o4 H; }" L
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) m- N( P6 `8 e
     if( !pItemElem )
; n2 H) Q' s% c& M' K      continue;* N1 d" R) ^; r+ A- Q. I
     if(pItemElem->GetExtra() > 0)
2 A5 j7 B- V1 E% W      continue;
% N( v9 W, }( v. e( i* F7 }     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 _) Y0 z: {+ y      continue;
; q# w$ ^. Y  B: ]     if( g_pPlayer->IsUsing( pItemElem ) )2 [6 T0 Z! b0 Y$ y$ Z6 C
      continue;
: ]% E$ v" @) T5 b8 N) \3 n     if( pItemElem->IsUndestructable() == TRUE )$ Y  D: H* A4 ^3 E* G
     {
& S) O: }' q: r: }' i2 i0 s1 Y      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 o& x5 O# q# k6 H/ r# I5 j& p  V
      continue;
* \! A* N; y* a# C( ^     }8 K) v$ k2 l2 g, l
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ L. j6 R  z% A! a
    }
+ C# y' n' \) u    break;2 ^8 n& X9 |3 Z0 l+ P
   }3 p1 U' N* F- d" L2 `
  case 1:
+ j4 {7 Q/ g# z3 C' t- h7 V   {, K9 l1 d! }- e1 x+ P
    //整理背包
$ x% U6 r% a6 u5 I    //////////////////////////////////////////////////////////////////////////( A* O( O- i5 o: r
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& \0 U- Y+ O  T: a4 e* q  [" Y2 \7 W* y
    //////////////////////////////////////////////////////////////////////////7 `+ R; |& f: e) @/ B# r$ x
    //////////////////////////////////////////////////////////////////////////
5 ~# Z0 p; s+ U) N, V    CInventorySort* pInvSort = new CInventorySort;2 m$ x: r+ G9 o* G1 }) n1 M5 h
    vector <sItem> vItem;
7 _6 r1 j# n( o" k" T    vItem.resize(MAX_INVENTORY);//初始化大小
1 n; w8 G+ h) i; [7 n     //////////////////////////////////////////////////////////////////////////
; `, e$ u' b. v5 g$ p2 B     //填充数据
) N1 h6 D& O- N+ d     for (int i=0;i<MAX_INVENTORY;i++)
) x7 G" Y* `3 p  U) w& N( ]$ N     {
- u- J/ i, a& }  _      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 t% F% B% w& }8 A
      if (!pItemElem). ~" s0 D2 y) o2 I, d# u7 B
      {0 I7 R3 K. F; q
       vItem.dwKind2 = 0xffffffff;. O3 _* l/ t0 K2 a7 b
       vItem.dwItemId = 0xffffffff;4 O; L$ R3 f" X( t9 M
       vItem.nIndex = i;0 Z* g+ T8 i+ H) M9 k, X
      }else {2 \+ ~5 x, I! c9 L
       ItemProp* pProp = pItemElem->GetProp();; E" h# ^, i3 `
       vItem.dwKind2 = pProp->dwItemKind2;
, t- K4 [3 V4 F4 O9 G4 X       vItem.dwItemId = pItemElem->m_dwItemId;
. J1 c  d+ _% {2 K/ Q1 q! x       vItem.nIndex = i;
0 }; i- ^) s0 x' T) |( |6 w2 [      }
- l' t' w; m. c( M: @      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 `) N1 ^8 W% b
     }
5 p8 W& l4 p% @6 [% n' S     //////////////////////////////////////////////////////////////////////////5 P" z9 W2 {7 v3 `0 [; j' F9 ^' R
     sort(vItem.begin(),vItem.end());//排序
) O! Z$ d" A1 i# v& V6 E; O     //////////////////////////////////////////////////////////////////////////
' C& ^! L# E) q     //交换
) W. C1 d, [' w2 \     for (size_t i=0;i<vItem.size();i++)
+ o2 \; S) q7 t6 G6 P5 q     {
, a% [( E; p* P- x6 n      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 U3 s  _4 Z% f2 T/ ^2 b( @$ ^
      pInvSort->Add(vItem.nIndex);/ O; U- t# J# A2 x9 [; {
     }
  A$ @  O4 t) a8 W     BYTE nDestPos = 0;: p; W6 E5 _+ H; X" d- y) c' Y
     for (int i=0;i<MAX_INVENTORY;i++)6 T- u7 l; m+ R" i/ b
     {; n3 R2 T% G/ ]: S5 u' G
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% v% J: e7 |. w+ F
      if (pItemElem)1 l, L1 A" C) o% g0 f2 Q
      {; t, H/ t: b! o1 z+ o
       if (IsUsingItem(pItemElem))
  K5 m& {$ U# A+ J( p; x       {4 }$ H! [# ]" z0 f$ i
        //这个位置无法放9 l# _: w% x3 C" ~4 |' y
        nDestPos++;
% U5 j+ |( [: P3 f$ w       }
3 G3 u- f- G3 f6 C6 i      }5 S. m- x( X8 F( i- a3 ~1 X1 v
      BYTE nSrc = pInvSort->GetItemSrc(i);
2 v( h$ Q/ L2 X  h% R  ^1 b( _      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* ^& ?4 s$ R3 B& s  ]4 t% E5 n      if (pItemElem)
2 M) z! L% ]* p4 `      {
* i, r' c# F5 R2 q       if (IsUsingItem(pItemElem))
& d# b5 A+ Q+ f/ N+ D8 _  S       {
2 _. G8 N8 X! e( Q; x& {        //这个道具无法移动,跳过
" d, u- i# G; `3 B9 z/ K  M% v        continue;6 @% I- A) M/ j6 @) X) X  ^- s
       }" [) ?4 b6 b. @" L0 c( n8 D2 H
      }else{- }! y- i* X9 e. m. ~% r+ P( e, e
       //空位置 不用动
5 a/ s( r: G5 i       continue;; ~3 x" [8 B6 N- S* x' @8 s. p/ P
      }- F1 m. s. }+ M! V6 I
      //////////////////////////////////////////////////////////////////////////
0 `* f9 d4 Z' B: d      //开始移动
0 H. C$ j/ ~) c6 r) \, B3 y" H      if (nSrc == nDestPos)7 d% C/ l/ p: _6 T
      {, g1 g# Y1 S/ [4 w) D. j. S' y$ G
       //原地不动9 G: e" L" n$ [% T( A; Y
       nDestPos++;
. k1 w. ~3 C- o, |+ U- O  h" A3 N       continue;
; T1 c8 E- T0 U7 m      }2 Q8 U! G4 X4 R7 T, V4 O
      pInvSort->MoveItem(i,nDestPos);* J( n, q. [6 A( {. w
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 b+ C( k( S/ t! @
      Sleep(5);
8 h% G; M6 i& T2 u) q8 G      //Error("移动 - %d->%d",nSrc,nDestPos);( m: |$ x/ H9 `' ]7 J2 h
      nDestPos++;. p. _1 u$ T. k7 f$ b; ^8 b
     }! J4 Z8 ~. y- n4 w9 V
     //取第一个元素的信息
" Z# Q, ^! f1 }! j2 f% x     /** t0 c! m) t3 {4 n
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. Q. r* v) E+ t/ u     {! p' ?, T3 U) K; p5 T
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 Z4 {, s) [3 C: ~5 T      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: X8 l5 e" S( F
     }% x8 o. [- K6 ~1 _9 s* Y
     */5 ?% D4 }5 I! c2 _$ G3 p6 l( B
    //////////////////////////////////////////////////////////////////////////
( O7 g7 v- w, E' R* K    break;
  z  b) Y5 O( ?/ }1 f, n' V1 N   }
" F* ^9 G- a* ?  V  }
3 K3 Z/ d. |; n3 U* A}
3 Z, a: d) ~' zm_wndMenu.SetVisible(FALSE);
+ Y3 k" r+ B# d5 Q& x1 z3 E
' F  |& t, i( ~7 s--------------------------------------------------------------------------------------------------------
; {$ Q4 b8 k4 f* t& i! G( g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)' B0 r' x% R1 F
{
% z9 r  C2 A2 l; [7 ]$ YBaseMouseCursor();
2 n) T+ ?+ \' u}
0 u8 c3 l  _. P2 _. Z3 M在其下添加:
2 b* N  t) c8 r  r; vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 @! a+ k3 K* b& B5 S0 Z/ v7 r
{
( A9 _  j. A2 c+ O4 b* A. rm_wndMenu.DeleteAllMenu();
' D- f* y! f; im_wndMenu.CreateMenu(this);
1 a8 f! P. V; N7 ?  q( j0 Sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& {* ^' Z- J/ E/ v& n2 |, [# b  }

3 F7 Q9 a7 F* lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. ]& d+ Y6 P% ~0 m; s" `, E{
+ D  ?0 T) Y, A2 ?4 g  //P以上级别才可以删除所有道具
3 a5 g0 b! |" f/ Z6 _  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");  C- V) B0 j1 C# h6 ^' }
}
! S! m! U: N; ?' v- P# J" pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; D$ h& L) J+ J5 K5 F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- \) Y5 D. a8 Im_wndMenu.SetFocus();8 |( {/ o7 S6 `( J, \* B8 V
}- h- x. r$ V4 a* w  h7 k5 f9 i2 ?6 p
------------------------------------------------------------------------------------------------------------, ?! Y7 }& J! W, H1 k- z
*************************6 @% A9 y6 u) ?# [
WndField.h文件! P' d% k4 S1 |! ?  M
*************************
+ ~- C5 S# I2 D7 a搜索:BOOL m_bReport;
# I( L1 _0 v( T( y. T9 q其后添加:
6 {. Q8 M1 R' W1 G0 X) L% n6 ~. l& KCWndMenu m_wndMenu;
( p5 {, F7 B: X6 G搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
  W9 q- J& ^* P: Y8 E- y其后添加:, P+ @$ g/ s) Q' z& P! D# C
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 B0 X% k* p3 C8 g' W5 l
: Y: ]; I7 a8 u) A/ z1 q. Q3 `. ]  p+ D* k

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-30 19:25 , Processed in 0.067212 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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