飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件- B; x4 T1 c: x6 ]- H
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); b# F4 g3 q9 l7 n: s2 U

. U8 ?  [9 V# ?struct sItem
( D! A& V+ u+ R/ f3 K* `' S{/ S: t2 Z# I) M9 {/ ^
DWORD dwId;- P6 Q7 G' g6 ~) f  P8 m
DWORD dwKind2;( X& `  Q3 A2 O+ l) c
DWORD dwItemId;4 m" r7 F, s0 O& Y
BYTE nIndex;
( K* a. g; T& @* G. N& N1 WsItem(){% r4 Z: a. {( A! q8 a4 d+ b
  dwId = dwKind2 = dwItemId = nIndex = 0;
; N; N% h: c$ I7 _" r4 B( ?2 r: J% w}0 Q% B  L0 [9 B+ \& c6 G
bool operator < (const sItem p2)  R6 [, F; u1 F! r$ x3 S* n2 A- s
{
3 _5 R  G0 Y$ x' v, _  if (dwKind2 == p2.dwKind2), s8 Q& z" Y4 F% ~. j
  {
% `& m/ P$ t- n# K( y; b9 E   return dwItemId < p2.dwItemId;
* K- `7 ^* I: D; k  }else{
7 j. V6 F* r+ \$ n0 U   return dwKind2 < p2.dwKind2;
" R( D2 A/ _4 M5 |0 O% e. s% ?  }0 T' |9 P4 c' q2 Q4 l
}
4 w: c, h* Q  @};% r/ w; \5 w0 H
class CInventorySort
: |$ F2 T4 G" T  M3 O2 X: x{3 U- o7 f* ]6 R5 A0 j
public:
) L3 [4 H5 S% kCInventorySort()
( V) f9 [. T) \1 u. \; O- B{" u, ]+ X7 {, k& u5 H7 R4 H& B
  m_dwPos = 0;' J2 T# A4 T( b
}9 D5 z9 q( u0 H/ e/ a, B! d1 [
~CInventorySort(){}7 v$ y/ M. ?& |4 ]" d5 [
private:
! b$ L2 s0 n% d/ k0 fsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 p% C( V. I4 G* G  ]* v+ Q* P! M  L
DWORD m_dwPos;* e% `: y3 g: G. |
public:/ z# g( {% M% b1 `
void Add(BYTE nIndex)2 I5 [1 A" V( r" e$ _5 [' k
{2 o3 G0 Q- }. {  x: X) m
  if (m_dwPos >= MAX_INVENTORY)
. F. C6 h! t9 w' D  {
: K; p( s. R. [, F   return;
) l6 ?3 y! u" J. ^9 v+ N5 a4 T  }
% Q4 ]7 d, r! K5 T  m_Item[m_dwPos].nIndex = nIndex;
1 \( f. ?5 u0 u3 j" t$ }" t  m_Item[m_dwPos].dwId = m_dwPos;+ W  ]7 ^5 U$ ?4 k7 e
  m_dwPos++;- H8 }* P: r% e# ?5 c6 j1 L
}
" W  g% u' T; C7 vBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 e1 ~8 h4 |2 A- L8 b5 C7 a+ b
{& L6 v" W( j/ j3 p
  for (int i=0;i<MAX_INVENTORY;i++)  T# {% v$ e' A0 N& X8 Q
  {
& E* l3 Y  H- v9 B0 f0 Y  A6 {   if (m_Item.dwId == dwId)- X; O; A4 H! S! k- J( a0 D( |7 }
   {$ a, x# C/ I/ i: o) e) E
    return m_Item.nIndex;& E4 [: y5 Q1 z% k
   }
6 O9 G  d/ c/ L- }; T" P  }3 M" }! H- h$ X8 @5 @( V' d. @# _) M
  return 255;( J/ N" M6 L. T, C
}0 b3 E6 I) {& K. Z" C
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# X7 b7 I( |+ b: S# M( ]9 H{
6 o' [1 i8 p2 }) H  BYTE nTmp = 0;9 x, S+ c6 t$ B
  bool bDest = false,bSrc = false;& }0 ?/ Y) ?6 o3 w
  for (int i=0;i<MAX_INVENTORY;i++)# I. Z8 Z' R' o% r6 {" d
  {
1 ]/ F$ x/ F( S4 ?# D* h" V, t# y   if (dwSrcId == m_Item.dwId)% w, C5 D" e! l  L
   {
3 b: z/ Y& c' f/ f. L- i    //id相等 则 改变对应的dest和src
) Q5 `2 [( K1 v# V* [# t! D5 u    nTmp = m_Item.nIndex;
7 I/ k8 j1 e/ K  D1 T4 Z    m_Item.nIndex = dest;
  n7 R' c+ ]# G+ z$ e  n) K   }/ X/ O* K5 c, p7 V- x. F/ V
  }
, A- T7 r3 n6 W' K8 w  //临时数据保存完毕,交换开始
5 r% H" ?( T# y- x0 w' E8 K* P  for (int i=0;i<MAX_INVENTORY;i++)6 O0 E& ~2 C& u& O6 S9 M
  {
. e  a8 w' ?5 {1 j   if (dest == m_Item.nIndex)' O8 p# y8 y3 D! w! F* E0 Q8 `# V
   {
  H' L! a( a, ~    //id相等 则 改变对应的dest和src
; x( I; Q) ]$ Z% H. L. ^0 X! Q/ ]3 W    m_Item.nIndex = nTmp;
) \% [! |" a' T% C8 `  z   }
3 P8 ?# n. h# a0 D5 t1 H  }
% X- m% @$ h2 A8 B& v" A4 M; j) ]}% P  W8 B! ~) Q# p0 |7 ]6 X- V
};
  x5 {& R+ g' p4 y. u/ @-------------------------------------------------------------------------
( v2 T6 D9 J* Z, M6 L依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' [8 Z5 p+ i4 e1 j6 K
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- @- E# r  k. f' t* @& [
紧靠其上添加:
$ M+ M/ a% j+ Lif( pWndBase == &m_wndMenu ), z8 Y6 A1 ~6 _* |4 |
{5 a. I7 I4 w2 D7 \' [! E, x
  switch( nID )
- ]% b, d) Y" A$ t' G$ w# V  {9 n" ]/ ~6 x8 t4 ^0 n
  case 2:6 B4 Z& \6 F  ]: @6 A/ Y
   {% n$ P6 |0 k2 m* ~# N- }: f4 ^$ k
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);  G# |0 R0 b* I
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 y/ O" G4 ]1 K+ {9 R" t0 r    {
1 e  u6 ^& h& r. Y6 f/ `     break;
# P1 p* d6 j# t' G% L    }
. Y) m5 [; J9 M    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! X- `9 C3 n9 d
    {
0 G0 S0 Y8 ~# t. M' {     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 a* U: L; |7 w' b
     if( !pItemElem ), r0 |, D2 G' ?% D
      continue;
+ C- [5 C! g4 x3 E     if(pItemElem->GetExtra() > 0)
6 V- g; V0 k& Q" e. h: b- r2 e* O      continue;
6 D; N3 w( N8 h2 d! \* |     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ ~* Z; ~& T5 d) e, S
      continue;  s; O5 Z4 ]8 F5 l% S$ _
     if( g_pPlayer->IsUsing( pItemElem ) )
* _* {7 v* o: N! j9 V) J      continue;# j7 q% Y) b! Q: k  B0 j, z
     if( pItemElem->IsUndestructable() == TRUE )- _( F! k" L) _% z; V  F
     {" U# Q4 l6 @0 f& G' @
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! y. Y5 G6 k% P' V      continue;
0 a% N. k" m6 E  K" i     }; T" U2 Q& _. \* B% J4 i
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* j+ W' B0 O) i
    }
! E1 f' g1 I! _% O6 }    break;
, J+ z7 i& ?$ n2 t0 q$ }" q   }
2 @9 F( D8 L3 g% D1 W% b2 d6 @4 ~$ N  case 1:
# m3 y2 i7 k# c% E2 o   {
9 I5 d2 H- x, M) N# J' V/ j' j( [    //整理背包
2 ~5 M7 g, ^3 w& X& k    //////////////////////////////////////////////////////////////////////////+ ^# I2 C8 }# x( B
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ g. d' k0 {4 L+ K" \! z7 j  v    //////////////////////////////////////////////////////////////////////////$ B" L0 F9 J3 s+ v9 q/ w- j
    //////////////////////////////////////////////////////////////////////////
2 m. q$ \7 k9 u8 g$ j    CInventorySort* pInvSort = new CInventorySort;7 S! l( T' o* T) \3 L0 Y
    vector <sItem> vItem;
6 u% ~& A! A- i. ~( v    vItem.resize(MAX_INVENTORY);//初始化大小2 o# c( b# Q, h. b0 N0 p
     //////////////////////////////////////////////////////////////////////////0 `5 S/ b! x/ e; m6 ?
     //填充数据( }! w3 L' I) c; {: {
     for (int i=0;i<MAX_INVENTORY;i++)
4 Y; e+ L, x6 A% Z& q  _7 L     {: b' ~* ?$ G) A- _% E3 Z+ ]7 z7 J
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 T# O5 x$ _" {6 n) R' `
      if (!pItemElem)
+ P6 f: H  O* I2 q1 C      {
7 E" ^2 O+ J) o3 }3 U8 N/ v       vItem.dwKind2 = 0xffffffff;2 X" N# |1 ^% W3 c
       vItem.dwItemId = 0xffffffff;1 j  h# ^9 b1 u" r7 m  `
       vItem.nIndex = i;
/ T9 l* S  D% ^      }else {' E( K5 c7 m. ?- l% x, Y
       ItemProp* pProp = pItemElem->GetProp();1 ~% d  {' K1 E
       vItem.dwKind2 = pProp->dwItemKind2;7 d% J# g' `* @7 D# p2 [# S
       vItem.dwItemId = pItemElem->m_dwItemId;
! G" X' A; u4 @, v2 H% p# b9 T4 V       vItem.nIndex = i;2 _' z4 Y% ~& P9 [! ]
      }
. {2 ^/ ?4 `; s' s; v      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 Q% _# F/ s" F0 [( \8 ^1 Z: f
     }! `8 A" b1 E: |* b) ^0 F1 R& D
     //////////////////////////////////////////////////////////////////////////
6 x# T1 v: h! v6 d$ m     sort(vItem.begin(),vItem.end());//排序
3 [/ ?+ @7 I; i; l3 S' h9 J- @     //////////////////////////////////////////////////////////////////////////
5 U& R" q4 N+ D4 w, b( n* @     //交换: b) q3 H9 ~* Z$ j& O9 g
     for (size_t i=0;i<vItem.size();i++)$ r# i! ^( G1 o% y/ L3 K% E6 e
     {
4 S; u  _6 \. s' b- r      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! O3 K* P) _  @& E: u      pInvSort->Add(vItem.nIndex);
0 @$ l  [8 X  X. z2 J* H6 n     }
7 i% v  \% Z. ^- g8 E. _8 H     BYTE nDestPos = 0;; C% n" ]( g$ z0 g% @( K7 y
     for (int i=0;i<MAX_INVENTORY;i++)
! l7 s" _4 G7 m0 ^     {
0 v& T* U1 g2 \% n9 N& ?; ]2 o      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 c' B) Z3 f; z) |      if (pItemElem)$ a$ c+ R0 n- k  ?+ H
      {: D6 G- N0 h7 m. I, U
       if (IsUsingItem(pItemElem))2 q0 ~9 v% ^5 W9 P/ y
       {. H3 P( _! W0 G! [4 `
        //这个位置无法放
  P7 r) _7 W* j        nDestPos++;7 X0 c9 ]: r6 ^7 X' `, x! T# o$ ?+ c
       }8 v, U2 }1 t+ I; W
      }
8 N. M; b3 `; w9 K( {      BYTE nSrc = pInvSort->GetItemSrc(i);$ c" ]3 i3 I2 V
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ \# a& M; s! U- @      if (pItemElem). K3 P7 _6 }1 `9 i* F
      {( o' \0 R( L1 s/ q
       if (IsUsingItem(pItemElem))
% f* ^: y5 \1 Q9 g  O, L       {
' B- g/ ~* H# m3 E0 e( o2 a        //这个道具无法移动,跳过) V4 x+ Q5 q5 }
        continue;
/ @9 t8 O1 ^" M8 H9 w       }; t9 V& m* ~* x) m0 H
      }else{* c* O4 L6 g" c. R$ K5 o9 L1 q& b
       //空位置 不用动
1 ^( e$ s5 \4 W# `3 u* q- u8 `       continue;# C- D$ T+ l$ u2 p& G
      }
2 t; ]; F+ r' |! b' ]2 W      //////////////////////////////////////////////////////////////////////////3 o, Y( X' }$ p9 h& a1 m8 j; N! M* [
      //开始移动7 F, }- m! O) K+ q( u- c
      if (nSrc == nDestPos)
. I# }4 J: M0 y3 X      {7 ~* n& C. @& i0 H3 g
       //原地不动8 O' ^, v7 W7 o
       nDestPos++;
2 N& _; T3 j# a# E* J2 C       continue;
# @+ d0 D" J) l  r      }0 B6 B% X$ J$ M+ A! Y4 Q
      pInvSort->MoveItem(i,nDestPos);" @/ B" {) [2 g( S/ L/ s
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. y. E: n4 Q3 K  b3 K      Sleep(5);7 T% R* |( B2 X
      //Error("移动 - %d->%d",nSrc,nDestPos);
: O& _- c9 [6 R9 B* C      nDestPos++;
. m: o  k" J1 l9 u6 F5 [     }8 n1 s7 ^  w) @; U6 W: S4 A
     //取第一个元素的信息
- ?! W" K& K  O7 m' G3 g$ r     /*
) x4 {$ v# `" {: x7 ?     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 x" S: f) p3 j
     {
8 h$ V: c& z. Q! d& A      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 {+ S- e8 p+ J/ d' M2 r' g! B      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( j, ]! N  E$ Z/ j
     }8 b0 D5 l  u) f9 j" c
     */% E8 o) B% A' I7 Z+ x- s( j% a
    //////////////////////////////////////////////////////////////////////////
; _: B" Y6 p* X, V; p    break;
3 s2 ^) ~( a4 K. G   }" J- @' a+ i8 @" H" x
  }
4 J1 ]& B& P5 r) C2 d! m3 ]}4 b( z4 u. [! s. b
m_wndMenu.SetVisible(FALSE);
% g  V. I' X  Y: A# o' x  X' T
6 n9 m9 u9 z) M( f( b2 A--------------------------------------------------------------------------------------------------------
* N" d" `/ Y0 C; l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 E7 G6 C) w( F0 O7 Z! c* D+ M& `
{+ C1 Z. G6 d3 W- D7 v: Z4 r6 N
BaseMouseCursor();
1 X3 A4 g1 n3 h- F' Z- f. `  Y  v}
* v# ~1 s: \1 h+ q5 Y% X在其下添加:" Q8 @6 ^8 W% o( _/ @
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 n* ~" \& j0 E! G  a{& ~! O! d: o  M; T6 d" c5 N2 e
m_wndMenu.DeleteAllMenu();8 Z' r) ^9 }* ^2 B* ]* E+ X7 t
m_wndMenu.CreateMenu(this);9 B0 g- k$ _( \& L
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# F+ ]2 ]6 w* c. M% ?2 W
- {; t7 I' i) j% H. N7 }) |4 S& |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% j7 W1 |6 r! j
{1 F# z6 [9 [8 K4 H
  //P以上级别才可以删除所有道具
. |; X$ B1 X3 E: C- s$ H' n: Z$ {  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");' A1 f6 o  x4 d3 k, s
}, t7 Y% d# {/ l# o$ E. P
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( f7 K( l7 @- {+ r- R* F; T9 Pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 G% Z$ O! i3 N: P0 o) w
m_wndMenu.SetFocus();
; L2 \! G0 O! _5 z9 O}# \! F: _/ j5 {9 `2 p
------------------------------------------------------------------------------------------------------------, \- ]  b5 ~( G" G' s( }& g0 D
*************************
9 q, }' p  ^* b- x- HWndField.h文件
; P; t( p3 D; L/ z*************************$ p3 v. n1 T1 R* U
搜索:BOOL m_bReport;4 S% O$ K) ^3 P# U7 L
其后添加:
2 S# @" n2 T, X. f3 V. j! LCWndMenu m_wndMenu;
" X' O, }- @; g0 {搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
% ~( t( K- V6 J4 J0 v& x5 t& o4 c! H- k其后添加:
, \$ J, O1 G3 R# Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);+ ], R3 {# i  `$ b8 e2 m

4 U) y) ?/ C/ M: e2 s$ l
9 \( Z' q/ U( K

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-25 23:11 , Processed in 0.065651 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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