飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件1 A! g$ w) k0 {  V1 a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). ~: h" m. V! i+ ?- L* h! }$ E$ m
3 B" f- R* L, C0 q$ \& p
struct sItem' Q* ]2 B7 o8 c, B$ ?) ?
{0 c5 X" @/ ~. q6 [$ ]
DWORD dwId;
3 j2 g7 Z& R6 a; K8 k' NDWORD dwKind2;# W2 j1 c: |( i
DWORD dwItemId;
3 U# _+ H* G5 W8 N( E0 ^% VBYTE nIndex;
/ ?- w/ e! V+ y/ o9 h9 wsItem(){
9 I: }( L! H1 F: Y/ I- p0 A  dwId = dwKind2 = dwItemId = nIndex = 0;: I( C4 ^& N8 M$ k( ~
}
1 P$ @  f$ R; I0 ^, `bool operator < (const sItem p2)
0 v: I  X7 F! R0 T. b{, H! k4 Y0 s& R% B2 Z, r
  if (dwKind2 == p2.dwKind2), M% P" A- q) z% U
  {/ I- `  @2 u; U4 ^& I8 |( }5 c
   return dwItemId < p2.dwItemId;
9 |: W* }. q  u" L  }else{
7 s; d! i* I7 ]& V+ h. s) |0 M   return dwKind2 < p2.dwKind2;
; c9 t2 W9 {0 W" Q$ n. ]9 Z8 r  }
4 A8 G( O; f2 m7 k1 V$ ~3 {}
- j% I4 e8 P) R5 j7 z1 r- w4 \' R3 ^# O};) G7 f- i2 |8 F9 f& s, Y
class CInventorySort" v( l9 ~5 O' M9 n% S1 ?
{
6 I3 d# C# d, J! Spublic:
' q! Z6 B2 Y* w9 xCInventorySort()
1 h$ t* ]) b4 F7 g( U- g1 j{
) g3 f. @  w& k3 M: X  m_dwPos = 0;
* H% \1 `" Z- t& W( i& r}8 r$ P9 l3 f- P* c  K  _
~CInventorySort(){}6 O6 n  |, B; u, o: w
private:: ~$ a4 z( v+ z1 g: G: y# v% [
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* i* `& w+ b7 V, n
DWORD m_dwPos;; o* y* h9 i) u; U
public:* c' f* i: z  @4 T9 E% u
void Add(BYTE nIndex)
( i% ^1 t  E! o0 |- u1 E{9 j: v1 C7 Q& q  q, U
  if (m_dwPos >= MAX_INVENTORY)- Z% K* ?% }  R+ i# d
  {+ z9 t, \2 d. m
   return;3 K0 U/ c! u6 {  R/ W
  }
* A4 |* Y% P8 ^3 U9 f- O7 Q  m_Item[m_dwPos].nIndex = nIndex;  `% Z' {- f3 T6 N+ b: W
  m_Item[m_dwPos].dwId = m_dwPos;$ s1 v$ a. y* |# M! l; I' s
  m_dwPos++;5 @3 F& w& v+ A2 C( G) O
}
- i9 z- v* x% s; Y5 FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: z. I* b  r9 ~* G' s
{: E( x, b9 m3 |8 F
  for (int i=0;i<MAX_INVENTORY;i++)
! O: ]2 ]% P( U0 Y  {
  n9 |( j" Z" a' a   if (m_Item.dwId == dwId)7 w. y( L8 N9 A! \- S
   {& Y2 \3 C( X9 x
    return m_Item.nIndex;
+ t7 n7 }% }6 n  T   }+ |1 ]) S# ?& r
  }  J% X+ \/ H* |- d
  return 255;+ ?1 k- Z* ?+ h( D
}" K( K* I: d. D* z$ z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 v& L% Y* E7 g, T% c2 t) P5 N
{* z" E5 U1 T7 m& w$ w8 ]
  BYTE nTmp = 0;
- }; c. L% m, M. l  bool bDest = false,bSrc = false;1 ]  Z: S0 y2 X. X; S7 H% g
  for (int i=0;i<MAX_INVENTORY;i++)
) ]9 g% K2 O- V! m: r  {
  G8 P5 f0 Q6 R* d6 l   if (dwSrcId == m_Item.dwId)  p, `4 m% N, L, ]
   {
! Z0 w3 w0 |) @5 d9 S1 W    //id相等 则 改变对应的dest和src' Y( S; H  [) i
    nTmp = m_Item.nIndex;
! U' K* m5 y7 Z    m_Item.nIndex = dest;$ p" p0 }; e$ D. e, }( i9 ^
   }6 M$ p* X7 y# Q
  }( r# x# `8 g5 x* ?
  //临时数据保存完毕,交换开始
5 d! {/ q2 G, }5 f  U- i  for (int i=0;i<MAX_INVENTORY;i++)
  ?6 Y5 Q0 z3 A0 b8 z: @+ p  {4 e0 F& t2 M& g( ~, U
   if (dest == m_Item.nIndex)# @0 W# Z5 @2 N9 E; r
   {0 l9 Y1 U) Q, k* _
    //id相等 则 改变对应的dest和src) O4 F( \! \& C6 I* ~% T$ ?; S' E
    m_Item.nIndex = nTmp;
3 ~  D3 p1 w" P8 u7 y0 W   }
, G6 n+ ]+ |$ U9 F0 C4 e5 `# U  }
" B& B. |: ?: C* X  V5 I}2 N# w+ F; G. m5 E9 v
};
7 O: p3 r; \3 O" \-------------------------------------------------------------------------
. ?- e" ?: W) Q5 u* [, o依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 W* s% \0 u3 J  `搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 j# p; x* J: {7 L) k紧靠其上添加:' G7 g: L8 D6 e" c3 C
if( pWndBase == &m_wndMenu )
' C0 s; J* ]. v7 s$ B; o{: p/ w3 u! T; C/ p  O" R3 S
  switch( nID )
  |3 V: P- O1 v6 `. D/ j6 p( q  {' I* _2 [1 [  D) ~8 c$ @! }
  case 2:& k4 u4 y, r2 V; y$ L
   {
% w3 Z3 H- \2 p' g# }    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);- j. l. f' P% x7 p9 P& ?( N3 M
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 E8 i, T7 i% V1 `/ [
    {3 r' i3 G1 u1 M+ @7 S: ^
     break;! }% j: u  n+ S! d/ }
    }- T' T$ j9 l9 c9 x
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( e7 A9 n: B  H3 Q
    {
+ f& F/ Y% M  S% b& V/ P5 E     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 R. s  u% E4 ]% i* ?( S7 w     if( !pItemElem ). O& w2 Q* w8 v4 n! T2 b; b
      continue;
( l8 t+ h  V0 R7 T  g2 F$ F5 w     if(pItemElem->GetExtra() > 0)  K* k4 s; e0 k/ {/ O
      continue;( W, j# n& @. A
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, |/ s* A3 m* M% @( u9 x+ q      continue;
' \& c4 L4 ~6 l8 Z( x: J+ y% m     if( g_pPlayer->IsUsing( pItemElem ) )/ ?& J* V2 V% w4 |
      continue;
0 c& k8 e# A  {5 C; Z! ^- Q* p4 i     if( pItemElem->IsUndestructable() == TRUE )+ c6 P; m% Q3 ?- O- h# z
     {2 l+ x- e5 t  r( e
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) N( T3 }! ]6 t      continue;% c% ?8 q7 t: y) n; U% X% [4 y6 O2 V
     }
" g6 f. x4 e! G$ q( b* b$ G     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. T. O! s0 v! d2 F; X2 a    }
# E6 W5 }( @2 ~( R* z1 f    break;
2 u1 }$ {/ ?( H: r, p   }
$ Y9 w( U( B; ]- X( w4 `7 h: p* o! i  case 1:
* b* P+ @; `2 V- F. G1 C; X! G   {9 `* f7 t) z* I: N
    //整理背包$ F( m3 K" m, L! f4 V
    //////////////////////////////////////////////////////////////////////////8 O5 p# A4 b& ^5 B
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 P* B, v; D5 u3 p( u2 `    //////////////////////////////////////////////////////////////////////////
, R. y3 r* T  f  J) c5 [: E+ [    //////////////////////////////////////////////////////////////////////////
  r2 s1 V5 o; {! `. l( N' h  N    CInventorySort* pInvSort = new CInventorySort;
8 J8 _8 |! a, u; x: @    vector <sItem> vItem;- i$ |0 q1 q! g0 V5 w
    vItem.resize(MAX_INVENTORY);//初始化大小* N  c8 m1 e: S1 m
     //////////////////////////////////////////////////////////////////////////" u; B, D& j$ T6 O
     //填充数据
* E6 w5 i, j6 \, g     for (int i=0;i<MAX_INVENTORY;i++)' s4 l' y) G- \3 @8 r
     {+ j# y3 V/ k0 h
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 V, k/ @) d! J      if (!pItemElem)1 H; q& U+ b8 C) I8 r+ \
      {: r) X& F* G" j1 g  ]* m* f1 p3 r
       vItem.dwKind2 = 0xffffffff;
4 d) y( M5 p/ g' p; j* Z4 K. m5 m" l       vItem.dwItemId = 0xffffffff;! A2 l3 K  l, x: k5 l2 u9 j. V
       vItem.nIndex = i;9 C1 r( g% C6 b5 p
      }else {& \  l+ C. o# m
       ItemProp* pProp = pItemElem->GetProp();+ D! j- ^3 I9 e* e
       vItem.dwKind2 = pProp->dwItemKind2;
( x+ A) J% b0 P" n( G       vItem.dwItemId = pItemElem->m_dwItemId;
: d; D8 Y3 Q* P# y. e       vItem.nIndex = i;
; J8 U* V& M' b      }- f3 g2 M* M& I* R
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: F( F% D1 L* y$ O2 ~
     }
" c7 M) Y. s: J% r: L" d8 z     //////////////////////////////////////////////////////////////////////////
2 P7 t: c  h; U! ?4 `; q9 M4 @. e     sort(vItem.begin(),vItem.end());//排序
2 ~* g4 c0 [5 ?/ a$ F     //////////////////////////////////////////////////////////////////////////
: O$ m# e7 m; z! K3 x& y     //交换1 L8 @. |% P8 q
     for (size_t i=0;i<vItem.size();i++). U4 T. f* W1 B5 s, @# n
     {1 {+ S+ y. M0 ~# x) [2 y
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 @9 W. L4 C) i$ K* A      pInvSort->Add(vItem.nIndex);
) k4 Y! p$ J! a! y) p# D3 Q     }
- @& ]; Y+ D" y1 L     BYTE nDestPos = 0;
; X+ P4 X/ v8 L  n+ ^* S$ H     for (int i=0;i<MAX_INVENTORY;i++)
$ F, A8 ]% \6 G' v6 T. {* J     {  u* I; u$ y) r& ^
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 p# k* v+ x1 M  O7 l* g" z
      if (pItemElem)4 B  u3 J" _4 A( M4 m9 P+ p6 j
      {
7 |  w" D0 j* M       if (IsUsingItem(pItemElem)): x3 V6 F% Q- Z- x- \. J
       {9 p8 K( V" L- D6 q1 ?
        //这个位置无法放# w. a5 M+ a1 B3 S1 D  s8 N
        nDestPos++;
# w- t+ P& r0 ~2 k: N. s8 w# Y       }/ `0 e8 G3 n9 j5 ?# u; J5 g# h
      }
" f- [- y, H* t2 c6 X4 r! |      BYTE nSrc = pInvSort->GetItemSrc(i);
7 P- k7 ^; Z8 z+ q      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 u* _# K* R- y+ q      if (pItemElem)
5 m0 g. V: [3 u: n; o      {
5 t5 i7 s! U0 l. B  P' @" C  ~       if (IsUsingItem(pItemElem))
. S/ {0 `$ [+ t0 Y" J       {5 _( [! F' p3 `3 N
        //这个道具无法移动,跳过/ @/ H  f* N: y6 E
        continue;3 ?! y6 o* G: Z9 b/ n7 h" ~
       }
# M. t5 ^8 F$ G0 H3 y( f6 x7 `      }else{* w8 E+ U- g: D; Z
       //空位置 不用动
; P7 c3 i7 \  s3 a9 |       continue;* T, S8 Q  E. S" J7 l# d6 K# r
      }
, {6 x: s3 v4 q7 w2 U      //////////////////////////////////////////////////////////////////////////
* W: I( a) M+ v! w8 P5 S. h, `      //开始移动* d2 E" X5 I" @1 A) S
      if (nSrc == nDestPos)
6 ~4 V* G2 |  T3 Y& V  r$ V: d      {$ M5 T! ~9 _- L. B
       //原地不动3 r  v) c  ~6 u9 a! J# V9 j
       nDestPos++;" Y9 ~4 f* R& [' l
       continue;0 I; b  c0 S" P0 ~5 |5 c1 `- x, @
      }, Z7 X5 v( p. v/ l1 c# N' b
      pInvSort->MoveItem(i,nDestPos);
& Y- L7 j+ ^9 m& Y      g_DPlay.SendMoveItem(0,nSrc,nDestPos);" B7 g* C) \; B& n5 ^* X3 z! ^; z
      Sleep(5);
* v. \; ?+ G# Z1 H      //Error("移动 - %d->%d",nSrc,nDestPos);! v% S4 G. F' `+ `
      nDestPos++;
2 P0 d4 q8 \' I7 u2 P% d# X     }& v2 e: W9 L) {4 B8 |' O
     //取第一个元素的信息
1 G  U5 I  J0 ?) Z! F     /*
+ U2 L4 }* {; `     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! i4 L2 ?3 M6 C( @9 h     {2 `% a. _' q/ t* z- n( i/ v
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# n; Y7 [7 z/ L: j3 Y* k4 C  g4 p
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 B  U0 M& R1 D9 j
     }
% h' F2 h* o* {     */
" ?' D& q- Y3 \& ]# H$ r    //////////////////////////////////////////////////////////////////////////
: `6 ~- S& f' Z# [* U  k    break;
9 h: P* m6 m. A+ I' E! f' e/ ]" V   }, P9 f& S+ e* U5 U" `
  }
; G9 f( b, p& \/ A7 ^9 V! [; v}# j0 h6 b2 }4 i3 u7 U' l- N" g0 F
m_wndMenu.SetVisible(FALSE);
0 `, K4 K7 f0 b0 t
! s- K6 U+ F: ]. d* }0 o5 I--------------------------------------------------------------------------------------------------------" t7 K2 \# G  q# E0 ~2 o- `4 Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 a8 }; h8 @; l, G{
8 K" _" g6 u% PBaseMouseCursor();9 ?) s7 N: a. Y; Q
}0 a" P! x" o, i2 |3 P2 M
在其下添加:8 v1 T- n% I1 e+ N# O4 A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 E$ Z' ?# y+ V{8 K: ^2 f6 @1 O, k: y# R7 t, k
m_wndMenu.DeleteAllMenu();
( f* ~: A5 i( ~+ @m_wndMenu.CreateMenu(this);5 K: n3 H! l* e* D: n8 O+ w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ m6 E8 m8 D1 W: b1 [  E( E$ Q  r. U
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 w+ f' d0 M) p1 r1 ~6 f
{
  H! o/ p/ @: V! I* M! c( j6 [  //P以上级别才可以删除所有道具
; Y9 m& ^8 l( U- {8 I  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 w) V" V6 n! W+ u2 R}
+ u* }0 H( b& ?- r& E: Z4 P1 xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 i  [8 Y# r- m- o" f% t( Y$ o! ?8 _
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 Z2 k) A, a, `m_wndMenu.SetFocus();
1 p" [& @# y! L; v; r}; w9 c( N: d: r& o6 ]) R
------------------------------------------------------------------------------------------------------------3 H& p* E! t- v( ~
*************************% h- g& Z5 \) y4 n$ C$ \
WndField.h文件
% E$ _/ u/ k0 C************************** @( N7 N& a9 C" I+ M+ I
搜索:BOOL m_bReport;
* a' y% Q' E( k+ U% U2 r/ q4 K其后添加:
* D2 A! S( C* `% Z: Q, O3 qCWndMenu m_wndMenu;) E, v9 J6 F& q- N/ b. Z" E  }4 \
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 V+ Q/ h, {1 o+ i4 O0 K$ B其后添加:7 H# N, p$ A1 l4 o7 }
virtual void OnRButtonUp(UINT nFlags, CPoint point);* w5 J0 H+ X0 i2 J2 }; ~' e' l
/ L# u* t5 r- r8 M; i2 P, p

3 j7 D" L5 X) A9 a! d# |

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-11 19:44 , Processed in 0.061332 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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