飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件  e, m0 Z! k1 c4 v2 j, b% o
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ O( Q5 `& a. b# v6 Q  z# B+ j% H( u5 I8 O( w
struct sItem2 S/ |; R" e. e1 L
{
/ P0 F2 H0 T# W7 D; H0 wDWORD dwId;
% r: F; r- \9 d1 n# j8 G: zDWORD dwKind2;, ~* g4 g& @/ t& I3 \
DWORD dwItemId;
8 l, K5 I+ \: U1 L  W, K! NBYTE nIndex;0 a$ X' q( R% g5 ?9 i, f
sItem(){- _9 R1 s7 W1 k7 Z
  dwId = dwKind2 = dwItemId = nIndex = 0;
" m# t. P% K! g& g$ w# ?) A}& w- e5 [, T( O+ m! I* p9 x8 `2 K
bool operator < (const sItem p2); R# K. Y! s" l; k( x( w/ E
{; y3 i) L9 P4 ]$ v( B
  if (dwKind2 == p2.dwKind2)- n9 ?  D- e' n
  {: M$ ^' [# u; l9 C% T0 f
   return dwItemId < p2.dwItemId;/ `: P7 C/ O3 H% l" y! t
  }else{8 c3 a- n6 p  V3 m, e
   return dwKind2 < p2.dwKind2;
# r( P* ~0 P& E; u4 N0 M  }
' b  g. p" v% F$ h}
5 d( ]! S; y: q/ T9 P};
6 H7 V% }3 o; Yclass CInventorySort2 T/ J0 I2 C5 l/ }. {% k
{% k- c! c2 v/ h$ w
public:
/ s2 v- p- }" `  ~+ W( wCInventorySort(); H# n7 B9 W) {: [
{4 S, \5 b5 ~" G* I, \4 ?* j
  m_dwPos = 0;
1 |: s0 {9 J( z* h* u}: {, ?. }8 U$ Q- Q& a
~CInventorySort(){}. k+ l2 Q/ y8 P- f, v
private:0 q6 i9 m3 p) a* V. k7 W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 b: e. `/ l7 |DWORD m_dwPos;
4 Z, x, L, e2 q: Gpublic:1 s  n( E6 |. n" e( `* d3 H; j
void Add(BYTE nIndex)1 L+ A! P1 J5 w5 m1 a: W& O
{
5 O4 o9 x* j7 w& O& ]9 j  if (m_dwPos >= MAX_INVENTORY)
+ p8 ~- q1 g! [  S% a7 \5 m1 \  {
" V$ h* b; C7 [! M. {" }0 N   return;3 T5 c! H2 E- z6 z& @
  }8 r2 {; F. k0 w4 a- R
  m_Item[m_dwPos].nIndex = nIndex;
, v5 A3 C# S6 K9 F$ B  I' x  m_Item[m_dwPos].dwId = m_dwPos;
( t1 ^4 {- o/ W& l6 B  m_dwPos++;
/ e0 M6 ?3 s  Z}
2 v3 W* v: C9 dBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 Q& S$ f0 d/ e! B5 `) V
{
" w: t% f( S- `5 V! M1 a$ U  for (int i=0;i<MAX_INVENTORY;i++)/ x; G/ D$ C8 |
  {& [% [/ n" O% O3 M) o8 b* q
   if (m_Item.dwId == dwId)
- g) g- ]. i; c   {
9 k' [5 a$ G. f, `    return m_Item.nIndex;# b% p, t3 Q( C' M1 S/ T1 W
   }
1 _0 @  l( z9 ?- G6 G  }& h7 w: ?) y% v8 j, ~* L
  return 255;8 S8 n  E, h9 S: h
}  q2 n4 `) w; t! v4 l. r, n
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: C+ G5 l3 }7 s# K{
( E# q/ t% b) F& i# `8 g  t- {  BYTE nTmp = 0;
4 c" J7 U. ?" ?8 a6 S; q# R  bool bDest = false,bSrc = false;
! R% S, J: I' V$ T6 A- ]! r' C  for (int i=0;i<MAX_INVENTORY;i++), W% g: g* N4 Z* y/ A1 T
  {
3 [" n; _. T9 k7 j5 }   if (dwSrcId == m_Item.dwId)) \9 m+ M6 h" i! d% W$ t: |. [
   {
, E" `, F9 M1 ~    //id相等 则 改变对应的dest和src
. V' J" A0 y0 o    nTmp = m_Item.nIndex;
4 p4 x' b% Q1 t; q    m_Item.nIndex = dest;
# x+ k; w& I8 r   }$ E0 V: d- Z  i. x9 }
  }
1 E$ M; k! U" R8 ?9 F  //临时数据保存完毕,交换开始
. u* k: r9 ~  n' @  for (int i=0;i<MAX_INVENTORY;i++)
. l$ r# i- q) w7 n  {
" D/ a( I! n, H, W" q   if (dest == m_Item.nIndex)" e% j! V+ _9 v* E7 B: m9 r
   {3 Y+ l& v/ b( |
    //id相等 则 改变对应的dest和src$ V, ]& ~, F0 L+ s0 o9 N. c: D
    m_Item.nIndex = nTmp;
4 V% S- j1 ^' T) @" ^. ?0 D   }
. i0 r+ I; H% A  }
5 k& [9 T/ z+ B: S7 }# Q}: L. ]3 M+ K5 r
};
) e4 J; v4 h+ I( E8 W9 p-------------------------------------------------------------------------
# X  e1 b6 |: V- n依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 r- @. W3 W. g% Q  x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' t( ~+ v& O/ _/ e7 S6 {/ f紧靠其上添加:9 m( S4 {; `6 {# o1 r* p
if( pWndBase == &m_wndMenu )6 G% m3 F' j  ]1 a4 W, @
{2 y# A% p" x( i! ^0 e) k. i
  switch( nID )
+ f* C4 B+ P6 h  {
* _  D- \% C3 I2 V: N0 t  case 2:
# o# V1 Y/ m7 T! [8 T0 w   {
# q+ @. F& o: T+ R    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ T7 d! @, t! q  V+ J6 v- w0 S    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); X& f8 X) [: c! z4 D
    {; ]! c8 l' f" x6 k
     break;' O9 C- b4 x& j  Y$ ]* P, z
    }1 h' S: h/ A' F$ S! H
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* }: M, Q7 S% q    {
- q0 w8 G1 t: [     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 X) \. x& l+ B5 t- o+ {
     if( !pItemElem ). Y8 X2 }4 e! E7 z
      continue;
+ S! o  W# K- N- S6 N4 ]     if(pItemElem->GetExtra() > 0)0 B: m7 E3 {* p3 r
      continue;1 j* d# z8 I# f' I
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; l4 `( z- F2 K% ^4 v- T
      continue;( q# G+ l! E/ W4 Q. p0 i2 y
     if( g_pPlayer->IsUsing( pItemElem ) )* u4 @) c* h5 t
      continue;/ i7 c3 b) u8 S0 u! b
     if( pItemElem->IsUndestructable() == TRUE )
- @$ A% z+ q8 Y( A. f5 ?     {6 Q5 D+ @8 c6 x( o& c1 o
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: t& r/ w' c& A8 \$ k      continue;) i6 `& T2 y* S) ?, L$ o
     }
6 m. A/ Z% `. a' T% ]" w3 T, A     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);; o: W* z; p+ `( K/ K
    }3 X* U5 c/ w  e. e
    break;: l# e1 E, J+ O; Q- M
   }. B: G0 r" k3 B7 f- h
  case 1:/ K' s7 A8 l/ ~9 p: D$ i
   {$ T4 @. t2 g0 R1 l1 q" z
    //整理背包
' L( g* z) |% L2 ?    //////////////////////////////////////////////////////////////////////////( G; a; c: m9 x, y4 d
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ H% `& {+ t, @  W- Y6 k" C  Z" }
    //////////////////////////////////////////////////////////////////////////
& r) c* Y1 A* a. O# I( X    //////////////////////////////////////////////////////////////////////////
1 @: q" y+ A3 k    CInventorySort* pInvSort = new CInventorySort;& r: G* o: k3 {! g" E4 G: c
    vector <sItem> vItem;  k1 v% y: [3 r1 R1 Q; e
    vItem.resize(MAX_INVENTORY);//初始化大小
1 j5 ^  v/ L4 C5 n  }' Q     //////////////////////////////////////////////////////////////////////////
4 G6 M4 Z, O3 P0 E1 x) h" a4 Q9 E     //填充数据# q  {# }4 x0 P; ]& b
     for (int i=0;i<MAX_INVENTORY;i++)
0 O! r9 j9 y6 {+ s  z     {: u3 w- a) A: S( L4 R) }
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! t) y; X4 Y; o7 n7 I  U9 d: w* Y
      if (!pItemElem)9 ^3 X% ?. K% h% b' j* `) K; ~
      {- T" R7 k6 k  E6 H9 P6 x
       vItem.dwKind2 = 0xffffffff;+ G+ q, R# t3 g: S( f
       vItem.dwItemId = 0xffffffff;* W' V" e! g$ N; C, a0 t# [
       vItem.nIndex = i;
9 \7 I6 w, g7 }' A      }else {
# h& B) S9 L4 w+ S4 ?! a/ Y       ItemProp* pProp = pItemElem->GetProp();6 M8 L4 e( {0 i: W9 \; ~5 I
       vItem.dwKind2 = pProp->dwItemKind2;
: K- w0 j, t6 T9 h. R$ m0 v       vItem.dwItemId = pItemElem->m_dwItemId;- @- y) k! `8 _/ X3 ~9 L6 S/ M
       vItem.nIndex = i;# k, j1 X* {& b
      }; E) F$ z* J  C" K  Q$ o
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ e* z' R0 A( }' C, \1 m$ U     }
' X1 p, L8 D7 g) A; T  M     //////////////////////////////////////////////////////////////////////////
4 ~0 T8 D  C/ `$ w, X# ]     sort(vItem.begin(),vItem.end());//排序
5 z4 M1 S- j% X) J% n     //////////////////////////////////////////////////////////////////////////
2 R: u2 `/ g% N" a# k, ]; t& Z     //交换
% o# r% l- @& c2 D# }) ], |     for (size_t i=0;i<vItem.size();i++)
, ^" S" R5 W0 L     {
' C( Y. n) A0 Z& I# b& d. U2 ~      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 v. i1 R7 Z+ \! n7 J
      pInvSort->Add(vItem.nIndex);0 C# v7 L$ v; p4 K5 Z2 H
     }# n4 ^$ q" K2 m, J3 }
     BYTE nDestPos = 0;) R; i9 n2 o! s3 g6 p: Q) S
     for (int i=0;i<MAX_INVENTORY;i++)4 k6 n9 ]- B/ s% T+ J2 S5 {
     {
7 ~+ [, @, H2 d- f/ }5 A; b" _8 v      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( f: |! I5 l4 K# B
      if (pItemElem)
& Q3 Q, ?" t2 a8 a  e- V* x& v5 v      {9 Y" b+ F# T. o9 f4 z! ?( \, b
       if (IsUsingItem(pItemElem))
8 e6 B8 T6 ~. {       {/ ^! l3 t5 n* W( A
        //这个位置无法放3 f* n- p9 L3 H9 X9 N) ]' B* f
        nDestPos++;
' T* `* g: z2 X$ H0 m1 x& d$ ^       }7 m+ V3 j( V! m1 B$ F4 y# |* f1 C
      }
6 ?9 J2 J- X- Z: s- ]      BYTE nSrc = pInvSort->GetItemSrc(i);9 c1 J7 P* Q0 ~" A: h! ]
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);0 `8 |* V) d- D) s$ Z
      if (pItemElem)
! k- {7 H  @) v; X' V      {
( ]. W+ @2 y& q       if (IsUsingItem(pItemElem))3 }8 I! D7 K% w' i% j" F0 ]2 y
       {4 ?: v& C: @0 l
        //这个道具无法移动,跳过
3 c' e" q! i0 |6 \6 z        continue;
( y. {3 u6 z' V9 w       }! _' M5 p0 c( c" h4 g
      }else{0 P, Q& U( q/ H0 E3 R
       //空位置 不用动
# c) v5 a! O; m7 C       continue;5 v4 a1 a5 w  a0 @* J" w$ Y0 f
      }8 ~7 I" |! o6 ?" k
      //////////////////////////////////////////////////////////////////////////
! w1 u8 U4 u( J4 s      //开始移动
2 A7 _+ b, s# u4 k8 w/ ^      if (nSrc == nDestPos)% U& s" F3 ]9 c* N
      {
# Q% e7 w6 s1 Q4 j( x8 I8 d# v       //原地不动0 O7 j: o9 K. `* Q
       nDestPos++;
  a6 z5 v0 f# r- n       continue;
& E! d' T2 o; Y0 C$ G6 ?, C% N      }
" w7 C# |# \" t6 d3 C/ g      pInvSort->MoveItem(i,nDestPos);
3 l& K' b4 a; J      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 i+ f" G# W; p' t      Sleep(5);
0 C- F4 J  M: r) p5 y9 F' d7 |      //Error("移动 - %d->%d",nSrc,nDestPos);: m  y7 N9 _1 _3 w& i
      nDestPos++;
, `5 e; u/ X$ ?) d" ]# m3 B  I, \8 h     }  U# M- z. T) }( f8 F" K- t
     //取第一个元素的信息
0 d2 m4 |, Y2 s1 B' l! Q. ~1 P" E     /*
8 C! M( L2 u5 s; S     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# Z% Y; c8 v3 q) G     {
8 ?# F7 M' d4 p9 O      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' v1 \% C" p9 H$ S
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: T  y" d) k5 ]2 D3 y+ d1 B* v     }; s8 j) l! [/ v, Q; \1 F! l
     */
- C( _3 k) ]5 R$ ?    //////////////////////////////////////////////////////////////////////////
# l  ?3 r' Q! y6 j# g2 o7 s    break;# I: v7 z2 ]2 q! L) A% @7 Y, A! k
   }# Z/ Z# k6 ]' A
  }
$ ]* U+ Q5 j9 p( ^7 g& {# a' N) G$ V}: I5 [+ z& q' p3 a, n3 S
m_wndMenu.SetVisible(FALSE);) e: e2 w  Z1 W2 c/ a
8 @4 ?! R- d. M
--------------------------------------------------------------------------------------------------------5 P2 H/ A$ S. W, t- q  I0 }5 {7 \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 A8 C, E3 S2 k% N( R) q% q2 u9 m{
7 _2 ]* u' y3 S! y# k3 y- uBaseMouseCursor();
' A& b% N4 ]0 B" I$ g4 q}
' E1 r4 ?( ^7 r/ n& Q* h在其下添加:
, p9 ?) B6 C  D! Tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
' s7 }+ [! {5 |{& P' @$ {  S) E0 k7 d6 ^! O) X
m_wndMenu.DeleteAllMenu();5 t" h  v7 T$ h4 t2 W4 u, D
m_wndMenu.CreateMenu(this);& w' p  ~# t( @- G7 o# H
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; u1 o" n2 g1 s; k4 |' R" n
6 Z* O8 T$ g+ Y. Y6 k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* u, I+ y& ]% u% R/ X
{
7 w7 h; Q; f9 d$ f  //P以上级别才可以删除所有道具
2 \: T* T0 i% ?) J/ I  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; r' w. S) G" ~$ k0 ~# k
}
& n/ w- e; s' u1 u4 @/ jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );  T: ^4 j7 l/ V- S# {
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );9 r$ S/ R0 Y2 x' x( u! J
m_wndMenu.SetFocus();
. f+ D  P* O+ ^" j) {. Q}# d  r8 t9 B6 P& k- P
------------------------------------------------------------------------------------------------------------- s5 S, g5 e1 {
*************************( Y+ g( O+ m; y
WndField.h文件4 x4 o% Y0 h5 c
*************************
4 y( Q4 x9 m+ c/ w搜索:BOOL m_bReport;
" q# \; f/ N5 r2 v; y2 c其后添加:
  a! @/ R/ h, M: N$ mCWndMenu m_wndMenu;
* r4 a, ]1 K( h. u" ]0 S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
/ H6 G% c* S  s其后添加:
. a; J; H+ F3 `/ H+ s  Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);
! p( I! @. u* H4 p1 H
$ C7 \0 G: T  E$ M; V* t- D. {9 \: c" R0 k+ Z& n/ r( i

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-17 05:47 , Processed in 0.065050 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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