飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件1 W) p2 n$ A5 j
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& Q. |: ]0 l4 Y4 s$ S6 `
  C2 u# c) E9 `5 `! A
struct sItem3 P5 K2 F- a+ E7 z' Z% p. _
{
: V) U8 }& A) d% u) v5 ?DWORD dwId;
. j* P8 C3 ~& h7 {7 }# x) G! {DWORD dwKind2;% |) f8 m, Q8 f
DWORD dwItemId;
8 W- }: s- j- mBYTE nIndex;
; X. G+ s, d4 N# @1 jsItem(){
8 ?# ~: O1 d  W& d( \8 O3 D  dwId = dwKind2 = dwItemId = nIndex = 0;
- k' r" }+ b, Z4 K& Z# N! E}: ~. w$ @# b% k. ]; r
bool operator < (const sItem p2)( U& J5 x: O8 X
{) N- b' z; v) h2 x: M/ t6 g, o& ?3 F& Y
  if (dwKind2 == p2.dwKind2)0 X8 ^, n' E3 }* d( n
  {  c9 ~# p1 s. b2 G; i( _4 H  E
   return dwItemId < p2.dwItemId;
: @9 x' P9 g0 T; w" W, Z/ j  }else{7 b# F' ?3 n" B7 v( c. M. |) Q
   return dwKind2 < p2.dwKind2;2 Z% Q0 Z( @- [
  }
2 [7 ^" U- f5 o! m2 o}; z* A: }1 @6 I3 R$ P
};
4 B8 t2 h% e- Nclass CInventorySort7 Q- N  b7 ]) t2 t) a
{
4 b  D2 Q& W4 e6 {& e4 Upublic:! o: g8 m) J0 T, b
CInventorySort()2 h( Z" ]% }9 ~! O+ W" l
{
! |. n: I  e1 @, c  q! S& g  m_dwPos = 0;, P9 g' y' A. u7 G8 F
}* z7 K$ V3 T+ D- s2 a8 [+ L
~CInventorySort(){}( D7 i" V" D& ?# Q9 z+ k
private:
' j/ C1 ^1 D2 B& w2 m1 S& ~sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% e8 z# |! k8 {5 f
DWORD m_dwPos;! o* V! q8 M) d2 S, ], E
public:- t$ z  e9 k) R6 T( E
void Add(BYTE nIndex)
! x' e# R$ y$ N* a{+ e. ?& m; N, ]5 @( m4 I4 r
  if (m_dwPos >= MAX_INVENTORY)/ w" J( W$ }; |0 ^
  {
: N; T  g$ B: a8 W   return;+ j+ H) ~  b  H- s1 \$ A, a9 s  P! f
  }
( S: x: ?) X# f2 m0 E' A  {( J% k+ P) H6 e  m_Item[m_dwPos].nIndex = nIndex;
3 Z4 X4 V% P7 n" i4 g0 w  m_Item[m_dwPos].dwId = m_dwPos;
6 L3 [& T3 n) J: [( H7 G# y0 m  m_dwPos++;; I" c0 J5 B! J" Y9 c
}
. `# x1 Z9 v$ j6 a% |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* L, b0 D* E+ V" w/ m
{: p" p% r9 O% b6 U
  for (int i=0;i<MAX_INVENTORY;i++)8 u6 e  ?" Q  t. S% Y/ E
  {3 y  C) e- {" ^0 d3 C- N7 U1 N# V  `
   if (m_Item.dwId == dwId)' [, Q+ V: R: ^
   {6 C6 ^7 q, W' b/ K! w9 H6 Z
    return m_Item.nIndex;6 v* @$ c, e5 U, z7 p. v- J
   }
6 {; ^% ^8 X1 k9 l  }
4 Q  s' F: b; O! c2 g  return 255;6 I& C9 s7 B3 P4 ?3 }
}0 o' R) [( L7 X/ x8 E8 G1 K, R
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( n7 M3 t9 m. W; ~: v
{7 E' j. a% p+ p5 J7 `/ l
  BYTE nTmp = 0;) a1 q5 I! S0 c7 B
  bool bDest = false,bSrc = false;  L/ i1 U* T& i& v9 t, m
  for (int i=0;i<MAX_INVENTORY;i++)
- H; Q0 @/ L/ o* r1 x% q  {3 A5 k# ]8 j! I- F2 z7 E5 Y8 }% `
   if (dwSrcId == m_Item.dwId)
6 @" ?: R3 J2 c5 M6 }   {
4 T! t4 u, w2 S9 ~: u0 i1 F    //id相等 则 改变对应的dest和src
5 C3 U4 l, d* p% W6 Z0 g    nTmp = m_Item.nIndex;% U- }0 ]( U7 J2 R
    m_Item.nIndex = dest;& u, z+ n) g4 ]% k' t' ?* Z
   }- x& i5 j% f$ _, W0 v. s0 l
  }
! k8 @7 E7 j& Z  C$ ~- F1 F9 S  //临时数据保存完毕,交换开始+ \/ I" ^3 G/ y* G/ l) a6 E
  for (int i=0;i<MAX_INVENTORY;i++)& i- X- M* B8 T4 r
  {
" O' a% R  F  o/ i; j   if (dest == m_Item.nIndex)
) ]8 {; V" b, J! v1 e! N6 X   {; F" _# p/ L6 Q/ J5 C! {' T
    //id相等 则 改变对应的dest和src
4 h2 g, R- m7 D  M* K  }    m_Item.nIndex = nTmp;6 E. H8 K( S! s5 }7 I! {) {$ f
   }8 H9 H1 {: r7 R% }2 r" W, O- g
  }. o$ y5 J2 w# D+ b' D3 _% Q* j  ^
}3 ?6 o& U/ K  d3 [
};
$ F" a% S. Y# v1 `1 T, n$ A* z( z-------------------------------------------------------------------------. }2 r1 m8 @- e5 p* `2 S
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 V/ i+ a! p1 E: p" @; n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" M0 C# Z4 i. P
紧靠其上添加:
7 o  f+ [! X  H/ W2 m2 }/ `if( pWndBase == &m_wndMenu )
# Y5 a; t7 }! {{, X- D1 [7 B. F+ d# b; X
  switch( nID )
, K( ]2 o: X7 j% n4 M) ?, F/ [0 o  {
. \, b) h3 _0 E0 }- ~6 h& T  case 2:+ f: U5 x: D: j% C3 M4 Z" V
   {
8 a' B3 |6 X8 O) y, N5 G    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ i' u  [7 |- f% S9 |) `    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& u( F. {- K6 v; O$ ?$ ~6 \6 `$ j
    {
* Y5 ?" j6 P+ \; K7 z  j2 W     break;
7 U: e5 [- g2 h2 J3 z    }
- i5 b) W* t$ }' v$ u( Q2 R    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' e/ O- }" t0 N1 x6 d8 P& y
    {
" O: u- }0 z$ R- V0 [     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& J* y# C8 H! e
     if( !pItemElem )
1 z* y( N* A% k. ?! V      continue;
# g5 {$ P$ ?) [/ m; U3 H3 Q( [     if(pItemElem->GetExtra() > 0)2 M* {& Z+ u$ f0 K
      continue;+ s+ F; p: P4 L
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 x- f# g' O( O/ U9 ~      continue;
: j# `+ _7 E9 F, Z  P     if( g_pPlayer->IsUsing( pItemElem ) )
8 t) A: I5 f; a/ n      continue;
3 A7 M; @' t, f! e- v7 U* Z     if( pItemElem->IsUndestructable() == TRUE )# X( D& ~4 v* s( ~$ H# i1 w
     {
, i% C  a( R5 X, ?. V( I( {      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ D  D1 i5 T" D! B7 C/ @      continue;: c5 f3 c* e3 [" o% h
     }3 j9 W2 I* N1 Z9 K% O4 u: Y- f
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 u; T, S& ^- S8 }2 T- D( }0 e- g) u
    }4 c% P7 J; R0 o  \# M
    break;8 ?2 ]! G- C& `1 H) r2 v- ~, J
   }
% E7 u( u; j; n( Q0 ?# c( b3 K  case 1:
  o# ?2 C1 J! B9 J3 H4 @  x  Z4 F7 ?   {5 D+ Q# y- U: S- [# }4 h- |
    //整理背包1 p) t' P# p% E) d( J
    //////////////////////////////////////////////////////////////////////////
) G$ Q, V  g# J7 h5 {% y! Y% C; ]    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 O* t1 G6 g: {: w( X# D2 _* C
    //////////////////////////////////////////////////////////////////////////% T/ H+ ~4 ?3 D# x1 j
    //////////////////////////////////////////////////////////////////////////
5 u! g! `' ?' A  ?/ ~    CInventorySort* pInvSort = new CInventorySort;9 r; |! ?( L4 T
    vector <sItem> vItem;
! C) i6 p. q1 ?8 V7 x3 w6 v    vItem.resize(MAX_INVENTORY);//初始化大小; `$ t; k$ d+ [. B
     //////////////////////////////////////////////////////////////////////////
7 n6 K- B3 m2 j8 r9 @     //填充数据
3 Q. j! [! E8 j$ _% W% q- [     for (int i=0;i<MAX_INVENTORY;i++)
# S( ~4 R& u, p6 j7 Z3 d& Y( D     {
7 y# @7 _$ X! ]) Z      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 d# w% K# @0 B+ K3 [7 ]+ j
      if (!pItemElem)4 k% e+ ]: o) }; s9 m; ?7 y. X: t+ Q
      {
' D" A3 D! ]$ p2 i) @# F       vItem.dwKind2 = 0xffffffff;
- N. b3 d  [  Y+ i+ Z' }5 P       vItem.dwItemId = 0xffffffff;  X3 V4 O0 b. Q# [) |2 f$ [7 i' ]
       vItem.nIndex = i;
/ u5 v! M, a" m5 }. w% E      }else {
  C# Y6 b/ s' V0 x$ g/ e       ItemProp* pProp = pItemElem->GetProp();/ P7 |6 I' D; |" B3 m' d% _' |: {9 A
       vItem.dwKind2 = pProp->dwItemKind2;' j! l5 C5 V3 O
       vItem.dwItemId = pItemElem->m_dwItemId;* x$ f( G, \, W; }
       vItem.nIndex = i;
) M: }" V! i2 H) w- @      }
& p% s: I/ k1 ^$ S0 v% X      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ G1 z3 r! ^" z5 Y; Y     }
' x5 D3 v# e1 |" c0 C( f     //////////////////////////////////////////////////////////////////////////) k- o9 i8 a! g7 s" t7 I
     sort(vItem.begin(),vItem.end());//排序
: K' R/ P! p7 J$ l     //////////////////////////////////////////////////////////////////////////
/ c) N/ T/ y, j7 Z- d5 A     //交换
- O  Z; ]; D/ A# p% c5 m     for (size_t i=0;i<vItem.size();i++)
" p2 ?( c+ U5 l# c6 R$ g: k     {
& w6 w" i3 S4 ?! e" \1 V      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, F2 Z/ g& s- A* Y2 @      pInvSort->Add(vItem.nIndex);
) ^9 G+ J' u; ?$ f. I     }
' K+ Q% p" Q+ z5 n1 ^0 c     BYTE nDestPos = 0;7 F0 ~7 R/ M: l3 h: n6 a: H; I
     for (int i=0;i<MAX_INVENTORY;i++)
& k" ?; n: z$ Y  r9 T     {
; [# g# J7 @- _, S      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 S: Z( ?" l2 s8 M5 s      if (pItemElem)6 g2 A  t/ J& n* p" _. e
      {
) q  k5 {, o4 v* Q$ A" f       if (IsUsingItem(pItemElem))
; W1 P% u& f5 ]% C3 M       {- E1 ^" u; m, k1 @
        //这个位置无法放8 R. D, {- G) L* Z5 Q
        nDestPos++;: ^% B$ F2 F1 }, H  l$ `5 }
       }
. E6 `0 ?: `- E, q& m      }  t0 Z! B3 W. g0 [: s& a. s/ {$ H9 M
      BYTE nSrc = pInvSort->GetItemSrc(i);2 x4 ~; I$ D& k; p8 ?1 P: T5 l! N- _
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 _% v1 Q' y- k, B( g/ a: W
      if (pItemElem)0 C  Q0 [& n( F/ H/ `$ G9 j
      {
7 W9 ^3 c! Z1 @! ]/ V* k- W       if (IsUsingItem(pItemElem))9 @: _% h  _) ^; z9 d
       {
: L) z0 }  q' l* h0 O        //这个道具无法移动,跳过* j6 V  O# G& W6 p& [
        continue;
9 V4 E4 {# a6 T8 U+ Q( \/ l       }
: U# S. p! H  D      }else{7 d& M/ x3 c* Z3 V: ^( M
       //空位置 不用动; W1 O7 }0 J5 Q4 [! c$ O0 c
       continue;
3 F4 u- g8 U( b  O( Z. Z      }
4 j9 X; ?+ }- Z9 j& z$ o      //////////////////////////////////////////////////////////////////////////
1 ]/ Q* [" U6 R  k1 s- i! {9 ~  e6 |      //开始移动
8 V1 X  i! u6 l6 [      if (nSrc == nDestPos)
" m9 x, v5 W. y$ y, z      {
" x+ n  \2 t  g, w, a: t; U       //原地不动
% \1 f: s% N0 h, d* S       nDestPos++;
* b7 F5 V5 Y1 k7 c       continue;1 z, o# V! v8 a" r/ h8 h& _* ^6 @
      }
. w/ M3 H% \0 e2 A3 b      pInvSort->MoveItem(i,nDestPos);( r" u2 r  z$ ?8 v% [: e
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
5 k- [3 m2 Y0 j& G/ p      Sleep(5);
$ N; _, S( U1 g) r. [) E      //Error("移动 - %d->%d",nSrc,nDestPos);
6 F0 ^0 G6 t" Q4 j: G, c' f      nDestPos++;
" K) o/ S& y5 @' [7 ^5 }$ Z     }
& U% y1 x0 n$ @7 H# P, y" `     //取第一个元素的信息
/ D: j' A8 r: B4 T$ t; r- C. N     /*  ]2 ]% e" h/ c) y2 H
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& Q. a+ C6 q% j# u+ O) M: _     {! l3 }7 a9 b8 F" x( S
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 B4 h' I4 {3 f4 |( j& b" @% h
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) P3 n7 J" }1 r# C" g: R
     }
# t& p. h7 R( k/ ]     */
( I/ K) y. ~9 N" W5 ?6 m    //////////////////////////////////////////////////////////////////////////; Z0 W) f$ e' U2 ?
    break;/ [5 L/ @2 n/ c8 k6 L
   }
1 ]8 U* s8 Y% X5 f  } . w  B0 D( `( _' H4 E
}8 m/ P, S; B0 D& {2 r
m_wndMenu.SetVisible(FALSE);
. ~1 [+ V  G1 U* n! {# J  L' K( n: f6 C) U
--------------------------------------------------------------------------------------------------------
& `$ D4 t' ]6 l& `搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); |* p& C$ T$ u
{/ t4 v" H% x8 i
BaseMouseCursor();
2 `( L9 j: r6 `: O1 s}6 A3 O  k$ n6 p* f5 }( W% {
在其下添加:
, C$ r; ~, _+ y3 Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 ~& G7 A1 l2 ]* J  D3 R: a: G8 j
{
$ U' I: W2 t1 ~- `6 ~5 ~9 E+ Om_wndMenu.DeleteAllMenu();0 l# Z7 R: ^" [/ K. ^& i! _
m_wndMenu.CreateMenu(this);$ w# k8 J% A4 s) Q/ k- _8 e
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 M* \) d. [3 U& H% Y9 ^
, K5 R) N1 ^& ]" Z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% P% o/ ?; J. \, w7 x- Z6 b{: g( A2 i. {8 `
  //P以上级别才可以删除所有道具+ s9 l5 B4 \( S; `' k" ~
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( w5 w1 T) K7 ?" S# |# |
}
) S' `( u4 E) W0 r% X, {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) f0 Q+ ^+ L6 @- w7 r3 }" xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ x* F3 i5 [  ]* Lm_wndMenu.SetFocus();, W3 ~$ O! ^4 n3 l. e' I
}  H3 ]  t( n3 _/ A0 u
------------------------------------------------------------------------------------------------------------8 }- k5 V6 t$ p$ t! X+ E- u
*************************! P4 _4 e( }! ^2 O1 ~2 A( \: p/ r
WndField.h文件+ l! r, r8 r& K3 y; f
*************************! i/ E5 F, I8 x, U  h1 D1 N
搜索:BOOL m_bReport;
" `, C6 g/ C7 X- _, @其后添加:; l/ s" v( R  m4 u0 d
CWndMenu m_wndMenu;
/ g" U" B1 F4 B$ f搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' b. o9 d$ M6 [5 i1 J
其后添加:0 f, n0 t( \6 `$ a- z0 b2 G2 Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);, W0 h0 w' C3 y4 w: z2 A

* W# |$ U# e8 S3 z- |) ?
/ h2 V- I( V% l6 K

相关帖子

回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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