飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
: O( }6 E2 q% v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ s% ?+ j) L4 b% H: J7 d$ y; V: w& k
5 b# z0 i. D5 A7 P" Z- ~6 v! hstruct sItem6 P$ f$ W& w) W# A4 n/ E
{/ k; P  {- U9 `$ L+ X
DWORD dwId;0 O* C' {  p9 p
DWORD dwKind2;
- E8 I2 Z# f0 @  B/ b' {DWORD dwItemId;
( L- }- S' A  T, YBYTE nIndex;
% O: c% Y0 t2 S0 p% y+ x2 x9 r, ysItem(){. z: n) M& `3 b5 E$ L7 _
  dwId = dwKind2 = dwItemId = nIndex = 0;& z- x0 @" i; y) r% }
}5 E* w2 }0 J% [  I) @
bool operator < (const sItem p2)
) \2 _  y; T3 q* j9 d{% n- |, u0 a; u% H' C
  if (dwKind2 == p2.dwKind2)
+ {- F8 a- \( Y  u; ]: W$ H6 _! L  {- u6 u0 ^$ T& Q! G! S
   return dwItemId < p2.dwItemId;+ w) ~) I" W/ r9 E2 u
  }else{2 C- K: ]& X+ e$ X
   return dwKind2 < p2.dwKind2;! G; v$ T2 C8 @1 ^% v, H
  }
7 N7 J: t& t; i: b1 [* j}
" C5 {, a% Q1 R) C- V& E};8 s3 j! y5 E9 {/ }
class CInventorySort. Y$ ~4 Y. ^( m; c& y) Q' r* @
{
4 j& X/ C) p& Z# H, |public:
4 G! g% b6 R9 ^7 D. s. r, z( N. J* gCInventorySort()8 F/ _. Z# b( B( X3 H% `, x5 @
{8 n  p' D: g2 @0 g
  m_dwPos = 0;6 h+ {- G, x8 }2 t4 G
}
+ r* S* M! Z0 D9 E~CInventorySort(){}8 P8 n' T1 R$ _% K
private:% z. l4 m$ Y" V- h
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 r* V3 {& `$ ^- w" ]
DWORD m_dwPos;  Y1 L$ Y( U5 y# r% Y: V
public:. ?$ s- r6 C5 y* S
void Add(BYTE nIndex)
4 Y6 I+ B2 B" M! h' C" d9 f" y{7 c" Y5 m$ h2 p) A, N/ C
  if (m_dwPos >= MAX_INVENTORY)6 V3 y6 q" K# H: C
  {+ c7 @* X: Q1 p( @
   return;5 o6 l2 X2 M2 ]6 ^" {; o
  }! `; h7 _. Y7 _4 P% C8 w: P  y, `
  m_Item[m_dwPos].nIndex = nIndex;
3 W; g) i# K+ z, _2 u/ o+ I- q  m_Item[m_dwPos].dwId = m_dwPos;
+ }. J, u$ B% r2 {! J$ P7 H* z& y4 i  m_dwPos++;' ?* N, q% I* N* ]: \
}9 ^8 u  Q# R5 P+ Q2 m" m6 D* W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' H' G) Q* v' X( R0 F0 b* u{# X8 g# m3 F8 R9 K, M
  for (int i=0;i<MAX_INVENTORY;i++)
$ c# L6 x6 t0 G, T, B  {' l, Y0 a( L$ j0 J' o  i2 m8 f+ P
   if (m_Item.dwId == dwId)
6 j8 P# A9 q& d! W+ g   {
- `0 i/ K% I9 R' l  e* @6 ?9 C    return m_Item.nIndex;
* _4 I: g9 }) F+ F8 g5 t7 n9 [2 H1 X4 `   }: R# E; M6 v: l! v6 \) Q0 d4 n
  }
# s$ t( {  m+ O  return 255;+ _6 `5 R5 r* B. F1 u
}+ ^& L- a! }) j( [. W+ S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' B5 h2 U% C. ~; Y{
% t9 i8 b5 B+ |+ l" ^( Z  BYTE nTmp = 0;" a; q2 v. k+ d4 b  _2 o4 y: w
  bool bDest = false,bSrc = false;. c; F' j' a  ]! R) O
  for (int i=0;i<MAX_INVENTORY;i++)! D) q! T1 p+ T( z+ `# l/ [+ u
  {  L" H1 H4 V6 f# ?' E
   if (dwSrcId == m_Item.dwId)
, o9 R5 R2 i2 C& J4 o   {
3 W; l" @; J" [    //id相等 则 改变对应的dest和src
% k) Z  k" V' o! K9 r% c    nTmp = m_Item.nIndex;8 x5 `/ G/ \, d1 V* H3 T4 o
    m_Item.nIndex = dest;+ _" w2 {6 S# g- r! b2 X
   }6 C2 p, P  h7 R7 x3 y
  }. F9 m, D+ l+ i2 O( k
  //临时数据保存完毕,交换开始
8 G) @% B6 O! N  for (int i=0;i<MAX_INVENTORY;i++)- m2 V0 m; |9 Y6 b
  {( r0 A* P$ g$ o) V' {3 a3 B
   if (dest == m_Item.nIndex)
2 j4 U5 W* r; B/ K7 }2 }" \   {9 ~$ Y/ ^& M9 n! C
    //id相等 则 改变对应的dest和src9 `6 E/ O6 X2 Y8 e4 S8 M( {" t
    m_Item.nIndex = nTmp;
' _1 z, s7 N* i$ r: e   }
+ D' w- ?/ X* L+ F) W  }
& i0 E' e% [# G9 z}! D4 c- @# f) b, L1 D3 V
};4 x* i7 c5 ]3 P1 U
-------------------------------------------------------------------------, _/ Z; v% ~: n$ Q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# o. b# \% a3 Q5 p
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 C8 f% q" L5 @: F% `
紧靠其上添加:
/ c$ L/ U/ [6 Z; ~) z; ]if( pWndBase == &m_wndMenu )$ \1 ~7 N0 y0 k0 u
{; |7 |4 \3 e+ ^7 h
  switch( nID )& @% R- A. X* |) i9 C1 U
  {
/ s+ \* ^# D3 W% [7 ?  case 2:
% M" M9 u& Y$ N) u4 F   {. u, |0 R; o! K; l  ]
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# Z8 G6 t+ b7 h0 A2 d2 J0 x. P
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), f& A7 D: l7 P% @% B  g0 I
    {
( P7 u- v( _) p6 v     break;
1 j+ E2 c7 O8 ^$ ?    }* v# n- J( R+ T  u+ @3 ]
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) s2 c& \4 l$ M% Z( j9 \    {/ p5 C5 U- G2 @7 y, j0 [
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 x* v, I% l2 j* o2 i3 T
     if( !pItemElem )
: ~; l8 O0 V( N& z4 n7 N      continue;
4 Q& f$ T6 ], a) H# t& k     if(pItemElem->GetExtra() > 0)
. u2 F0 \( B5 c8 c: W5 [      continue;
3 ?1 E6 ?8 V* u, e/ A; B$ g& a     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % L% a2 ^8 ?; r/ [
      continue;
8 O+ x- `3 ~% e) B: f. C4 z     if( g_pPlayer->IsUsing( pItemElem ) ), C# L. w$ \2 {6 M4 W
      continue;) `( I/ A! B9 ]* w9 f" C
     if( pItemElem->IsUndestructable() == TRUE )/ J. L( X3 |+ {8 P5 I+ z
     {
" h7 z, w+ q* J      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ |* ?8 P! S  }1 F6 M( L% d      continue;8 |) ?' ]# M1 S. a6 u
     }5 |' S) ?" ?$ D, J2 v* F! Z* W
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& j3 C1 @5 g, R+ k$ J/ c5 F7 d6 d6 O: ]    }+ J. A. y0 N! h3 P6 Z5 o
    break;
0 J( [, [; M, O( u+ d2 ~& R" |# B/ i   }
- H  F1 l8 _' Q' @3 u3 W  ^  case 1:4 B- |7 q  M0 ~# X! s
   {6 m. x5 W6 v" g! C" }) a
    //整理背包
8 i4 O$ [+ E; E( d    //////////////////////////////////////////////////////////////////////////
+ v, E4 F$ D! w" q( u+ p* H  U, C8 V    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );  V: I2 N1 {, u7 h
    //////////////////////////////////////////////////////////////////////////
! m3 r: k3 S: {  \- F    //////////////////////////////////////////////////////////////////////////
. S0 h- K9 r& x9 R  d    CInventorySort* pInvSort = new CInventorySort;
9 ^* V( O: Q  U( a% N% j! G& u    vector <sItem> vItem;
& t% M  d" ^2 [* @; u: {    vItem.resize(MAX_INVENTORY);//初始化大小
5 g. |8 M7 G- n, v- U' Y2 \     //////////////////////////////////////////////////////////////////////////
$ }2 d4 g; {6 z* F1 t" I5 M     //填充数据) R+ ^2 s  U. A4 l: Y1 Z1 B' i
     for (int i=0;i<MAX_INVENTORY;i++)
$ k" s( `( Z7 ^. Z     {
5 Y2 c# P; t' ~      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# S4 v& g3 `2 `. b      if (!pItemElem)+ s( f0 S6 e# e0 I3 |1 j
      {2 h1 G2 {2 C: G6 }
       vItem.dwKind2 = 0xffffffff;
7 B0 s7 F( F7 P+ x       vItem.dwItemId = 0xffffffff;
$ V' E" H  O* N( q       vItem.nIndex = i;5 ?  H9 g; J9 [+ j) U7 A
      }else {
! L: o) ?& s% h+ X5 O) {/ G$ g; m       ItemProp* pProp = pItemElem->GetProp();. O5 S# a, P/ H- X9 c3 n2 |
       vItem.dwKind2 = pProp->dwItemKind2;
& k/ H3 O/ E4 c: @       vItem.dwItemId = pItemElem->m_dwItemId;3 D' w, x! j3 l9 b% b
       vItem.nIndex = i;
% x9 i/ t6 E- k2 t* L) S8 N0 F  {      }% w) a# ~: F8 K4 A9 h$ Y
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 a, E8 U5 F, \2 `6 {# z     }( p! {" k( z  K& I0 R" R9 O+ a6 ~$ G) v
     //////////////////////////////////////////////////////////////////////////# K9 r8 G! V0 Y5 S- f/ F
     sort(vItem.begin(),vItem.end());//排序
, \- c) w% j4 j, K5 l6 K     //////////////////////////////////////////////////////////////////////////
$ F; |) [3 @) W" x  h     //交换
6 L% p) ~2 f& a/ L: S- I  j* f     for (size_t i=0;i<vItem.size();i++)
5 \! [4 ]8 J6 ]4 {, m& e5 U     {
- ~* B3 z) y' c3 L. K5 d, |, O4 _      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 t" T2 i7 @- Q! |4 o
      pInvSort->Add(vItem.nIndex);
: l4 s2 l( C/ m/ q) |     }
9 p" l2 @5 m+ n* d" e8 P2 t     BYTE nDestPos = 0;1 t9 L: h- W1 R3 P  U
     for (int i=0;i<MAX_INVENTORY;i++)5 o8 d7 K, y0 `: D  m
     {7 M5 |, o; m; B. {5 r
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# X; Y0 @# G8 W0 P2 g9 s
      if (pItemElem)3 e6 S4 g$ r5 N+ M9 y& m
      {
% u; n! @9 k  [7 ~3 ^. t1 [* |       if (IsUsingItem(pItemElem))
+ R4 n; ~7 l$ T  G" l5 i       {4 @+ h* [' ?6 p/ q1 |; U
        //这个位置无法放
" g7 L4 e( p( Z2 Y" `% m* A% ]        nDestPos++;
+ B! R% K0 e. y       }
, s" g# @2 h' R+ s0 `      }# j- k, w+ w; K, m/ V' Q
      BYTE nSrc = pInvSort->GetItemSrc(i);' c9 _/ W: f( j0 Q
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 X6 |& v. P: Z9 |
      if (pItemElem)1 W! U  @  K+ R( E4 K) a% r  Z
      {
# i8 I. I9 f0 r, G) Q7 v       if (IsUsingItem(pItemElem))2 ?+ n! u  i. |1 u9 x5 x% f' ^' H
       {, a! j7 h0 O5 I/ t- ]. ]
        //这个道具无法移动,跳过
( X* Y2 r" T& J) a4 X        continue;; I+ N0 I8 }! r5 e) g, {9 K
       }. _% n, ^" B6 ^. Y
      }else{6 i# @; c# x& j# x' |3 b
       //空位置 不用动% @3 y2 B, u4 b& L$ _' q
       continue;, m; g) w' C8 X: k, }, ~
      }+ _$ B8 o! h  H; O- f2 H/ l
      //////////////////////////////////////////////////////////////////////////
; Z1 `9 X( w& c) x& I      //开始移动- J% U$ V/ l$ [2 f: L
      if (nSrc == nDestPos)
1 f  `2 d; _2 ]      {
7 {/ U0 X/ A  k5 S# S' E/ j' o       //原地不动
" h, u3 J1 G% v2 s       nDestPos++;
6 q: Y& X4 E! m! E8 c       continue;
" G* h: i7 Z# x. _' f2 i      }* z1 @% E  ~' p5 Y! t; Y* I) @  r. J, q
      pInvSort->MoveItem(i,nDestPos);
/ l: ~4 G; c8 A7 B3 ^9 J      g_DPlay.SendMoveItem(0,nSrc,nDestPos);% U9 A. ?6 i2 \% L& N4 X
      Sleep(5);' r, e- _& h0 Z. C& o
      //Error("移动 - %d->%d",nSrc,nDestPos);* I1 B+ D4 Z* K' @+ z5 `
      nDestPos++;
6 c9 o( y3 C7 n( a9 h+ i% ]     }; V! V* _0 f; N- V# z3 q# P
     //取第一个元素的信息1 t, Z9 @+ J3 \
     /*
8 K) C; g; A1 a/ m     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
  Q' }% Y8 B( p  ]  b0 x# s6 ~     {! I- r% J8 F: D5 g5 {2 H' q3 d* G
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 F6 D( |7 p4 _  F, Q      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& ]5 x* N" a) ^
     }# W. [/ s1 Q1 q  T" `* e: |+ h, L
     */: n: w( M8 v* ?: k0 D
    //////////////////////////////////////////////////////////////////////////
2 |" ]1 d8 t$ e& B    break;
* l- y1 c0 S" a7 Q8 m1 |% R   }
. u6 M% `3 B- J" o! c  } , t$ a2 z  Q. J7 [- R
}0 e3 }, A: i6 l7 F0 Y2 b
m_wndMenu.SetVisible(FALSE);& S/ d1 k# L" K) j: `
" h- A: A; p  s( [
--------------------------------------------------------------------------------------------------------
0 r" T% G# d  Q2 K* p* h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! w3 v: t" [6 t% n% l2 i. i: _
{8 q/ J( |, o% B8 ?
BaseMouseCursor();
/ \5 r, Z( V3 |$ F: I5 f}
% H0 ~, r/ K/ @- q& E在其下添加:
& W, G! }/ y* n8 K  j! D3 Ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 b, `# l0 Y) ]! ^  F$ P# g- ~* j  k
{) |2 Z: G' g% I9 R+ K7 E" }
m_wndMenu.DeleteAllMenu();7 j4 ~7 p8 N- T7 n+ c& K. W
m_wndMenu.CreateMenu(this);
# J$ u2 D0 E$ s: Rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ M: l! G$ r& f% K# G+ z( n; E6 j. \$ {& ?' O  `
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 j' o% Z4 S/ |$ E1 L0 \- G{
$ _" S6 ^+ K* z$ C* S. S' T  //P以上级别才可以删除所有道具1 s6 Z" i' @( q- D, f
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 F1 t- \( s$ |% }+ X; G- S}3 s8 I4 x3 i, I) Y5 r
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 X" w. U* Z; d% b. B# m3 ^: D( Om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 ?7 Q+ j$ H7 q8 F7 m1 ^m_wndMenu.SetFocus();- \9 V+ p6 f/ R7 X2 [
}7 c$ |0 M5 V4 _$ Q- X- ]
------------------------------------------------------------------------------------------------------------- H$ B  e' ~/ s% F% }. z
*************************
- d6 v" c# u( f, f4 l6 B% oWndField.h文件4 L1 {: x5 h/ v  l. e9 p$ x/ ]
*************************0 A& Q9 H5 {$ \) i
搜索:BOOL m_bReport;
0 J% Z6 G" R) y8 h8 h1 O3 x0 s其后添加:$ A! F$ Q  K0 u
CWndMenu m_wndMenu;6 W) ~) o' H$ @  s4 V* Z# Q1 ^# d% H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. U8 o3 |1 ^1 n5 Y# H9 W* E8 [其后添加:
5 t* L/ V& E- }virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 v/ D% X; ], b; B% @8 @9 R6 E
' J( U2 \5 B' U
0 S. |" M7 [9 R% a

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-14 06:23 , Processed in 0.060965 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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