飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1088

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1088
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
: B; [$ m; I6 D4 A; }/ W搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% J# m) s! E7 a
' v5 N! b' \; v) Ystruct sItem
' y  h: E, i* Q! ?3 D! l* ~6 A# F; O{, ]# P. ^) W$ {: d9 e% x8 J
DWORD dwId;8 p4 _2 Q) J: ]
DWORD dwKind2;& B, z. N$ f' w' u% x
DWORD dwItemId;
4 P3 G1 o& c) G9 \; \BYTE nIndex;- p1 X2 x4 s5 e8 H# W
sItem(){
- D6 t5 J. c& a+ `2 y+ ^% q  dwId = dwKind2 = dwItemId = nIndex = 0;! X/ x) i% o" V; v/ z1 S" s3 n
}
! N9 }, Q# K; E6 `bool operator < (const sItem p2)
/ C/ n" j* H. a4 O2 P) q7 G" U{  j6 B" b  @1 @
  if (dwKind2 == p2.dwKind2)6 W/ v* R, l4 @
  {
7 [5 _" X9 V1 [" P8 F   return dwItemId < p2.dwItemId;
7 `! a/ z3 L' a0 {! g  }else{2 u. v* r1 w& i- D1 j
   return dwKind2 < p2.dwKind2;1 a1 \% c+ j9 ?6 b. p; h, v9 N
  }
9 ]* H9 ]& l* }}
$ Y9 N6 `( @( L" Q! C" L0 I0 ^};
: K% d2 D2 _8 M4 h- W* Nclass CInventorySort9 C; \* u7 V' b" |
{- L& [* h+ N; B7 w
public:0 d- i3 j' C9 L2 D
CInventorySort()
5 C7 }( z% a! `3 d2 x, ^# k{5 o' T0 E, F/ j3 S4 a
  m_dwPos = 0;/ j# f1 y& F- J
}  x  H+ D% a" J: h8 [* I
~CInventorySort(){}
4 {. F, j" b) N# a3 yprivate:1 W* t& @9 C, ?* ~( @: p
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
  I* r8 D  m& w$ B& Z6 SDWORD m_dwPos;
5 q" s5 ~0 U- P' w6 jpublic:
0 a, y' [3 V; X% _9 L  t/ Pvoid Add(BYTE nIndex). w+ y& n# |, y2 [- p
{
7 g: Y- _2 `% c& y. ?  if (m_dwPos >= MAX_INVENTORY)& M: h- }3 p2 O
  {
0 R. j+ n0 [' k   return;- }2 |  w2 ]5 x9 m
  }
( R! _' i% z% ^) f* X( M) L. _  m_Item[m_dwPos].nIndex = nIndex;, _. S/ X+ I5 I; e6 G$ t) i; Y
  m_Item[m_dwPos].dwId = m_dwPos;
9 C$ ~6 Y8 Q, P. R/ Z7 L" B  R3 P  m_dwPos++;& t; P6 O9 R0 Z0 K
}
/ s+ |0 s; \; t! b4 J4 O& cBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 L% o) Z1 j, D7 f% o{# x1 `; f8 Z. Q- J$ \
  for (int i=0;i<MAX_INVENTORY;i++)) u; H0 }# e( j0 j& h+ S  f
  {. k; M- A$ o' h3 \( ]5 d
   if (m_Item.dwId == dwId)  w9 Z* S$ c* e+ N5 `
   {" d0 h4 H9 G2 Q7 t- p1 ?% M
    return m_Item.nIndex;! v7 X* ~3 l  i. e6 Y6 m
   }# O( Z1 t/ j+ Q. v) T
  }
) [. j6 }& r9 f: o  return 255;6 A/ u8 f  |3 P' V0 X7 _1 N5 H
}
% X& `' _; }: M/ d: L. e! R" y3 Z/ r2 Yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 a$ r, T7 T# R% w& }7 {{, r! J3 Y; d2 E( S: W" o0 T
  BYTE nTmp = 0;
* E& E6 ?% q5 p  bool bDest = false,bSrc = false;
# |0 y2 O; G* g7 T% M  for (int i=0;i<MAX_INVENTORY;i++)8 L+ J9 @0 G# H% U, C2 K* U
  {% @5 [4 O! ]$ N- _- i7 J3 J) q
   if (dwSrcId == m_Item.dwId)2 C  ~; c$ F6 K) X! C; m
   {" E; `0 R! _% v" F$ B
    //id相等 则 改变对应的dest和src
8 S9 z# I! M$ J) k6 p    nTmp = m_Item.nIndex;1 n, o% R# j( O* ^" |# }) s
    m_Item.nIndex = dest;2 h# L: ?8 M" Z8 a5 x0 f: F4 j2 i/ N
   }5 p& @- T0 P) [# u
  }7 Q5 E$ C' d" y, W
  //临时数据保存完毕,交换开始
( `4 F; P4 \  K6 S  for (int i=0;i<MAX_INVENTORY;i++)
$ H- p2 i9 }/ o( e2 Q% d6 M! d  {
8 S7 Z! Y+ y& ~- u% }   if (dest == m_Item.nIndex)
2 o* K  U7 i: A! K& n   {
& Y, M8 J1 e4 h% Q* l4 t% l    //id相等 则 改变对应的dest和src3 `& ^- c3 w: ]! h) g
    m_Item.nIndex = nTmp;
- f, r' A5 z/ w   }/ e9 N- P: j' c6 e7 L* Z
  }8 v; C+ V, Y+ a7 _& P
}
: Q; G% q- k2 M7 c/ f};# a% I$ y4 z$ H. E
-------------------------------------------------------------------------
2 _% B: @9 j& Q0 j. M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ E/ a4 `5 k* |搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 q# u, i: c9 r( N
紧靠其上添加:
! S! B0 ?( Q4 C" y+ s3 g/ H5 C2 b" nif( pWndBase == &m_wndMenu )
1 K1 Y+ n; X8 a3 K: A{1 k# F! ?! P- c1 g# x
  switch( nID )/ v: C! }5 e" u' u# R) a
  {
. @6 ^2 X) r) C9 n( C) [( M  case 2:$ u! ]( n6 k. N0 E# g
   {
+ E7 K! I+ M" {    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( L8 C; R6 a5 p$ Y" [9 a
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 c, O0 j5 D! s7 k' }/ ?! m
    {
& Z, z3 U! O: }! l' V9 A: I0 H' f     break;
* _- v5 c; @7 X: j% D7 _    }
* K- @9 r( h% N% @! y    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). U2 ?+ h. @3 }" Y( M; A# k: u
    {
+ m0 b6 v3 F3 A7 w     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ d1 w' _6 h, v, B; T
     if( !pItemElem ). ~8 ~" C2 H3 h( I' e
      continue;
& a# q* b4 w: `! M7 F/ D0 l/ G( H) i     if(pItemElem->GetExtra() > 0)
; s1 x) [9 n5 H  [$ V      continue;
1 @3 I: A6 p$ {1 F- Y4 l     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% n2 \. y0 G% S* p) S* p) T      continue;
$ V/ }" r0 L8 x/ N, ?6 P) b' q     if( g_pPlayer->IsUsing( pItemElem ) )
: ]5 Y' v& w4 s# c      continue;
7 ?8 a+ G; b$ K( G2 s9 u     if( pItemElem->IsUndestructable() == TRUE )
* ]) h3 ~# A2 ?  Z  {     {
" t# \5 j2 @% V. w1 a, _      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) n/ J& h5 j* `4 M% o) [7 C
      continue;
; y/ s' I+ m, |     }5 T* S- M) W0 v- u% f4 E
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 u6 ~9 _  |8 S' A    }0 r( Q1 [6 A% O2 l) g/ C7 V) `- ^
    break;
, b+ X8 o$ U1 u5 `" e   }" f% ^9 [3 W; @8 ~
  case 1:9 u. K7 G: O' I; z
   {
7 U) F) t/ S1 d6 c! l) m    //整理背包: F5 z8 B" E( v, Q4 y9 T
    //////////////////////////////////////////////////////////////////////////
2 I2 P3 g, I# d    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. x! Y* d; a6 \* M4 d7 t
    //////////////////////////////////////////////////////////////////////////
' j' ?. _- {! p" v, s4 D    //////////////////////////////////////////////////////////////////////////3 R. g( e8 M. K6 u  [' f7 P* N
    CInventorySort* pInvSort = new CInventorySort;9 j+ M* b8 R/ z- a0 N7 r0 g/ J
    vector <sItem> vItem;- o" I1 B6 u( [$ s
    vItem.resize(MAX_INVENTORY);//初始化大小4 k! T8 ~% D  b7 _9 @- A. x
     //////////////////////////////////////////////////////////////////////////- J1 R7 ~1 ?% y. D+ f% I
     //填充数据
+ U# m# g# {" w/ ?1 ], \- H) [     for (int i=0;i<MAX_INVENTORY;i++)1 G+ \7 O) f$ Y2 `- K$ }
     {
1 M( f: j' q: G- g+ i      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 K+ U1 t! ?) E6 M      if (!pItemElem)2 Z! x( O. c4 ^( X( U: h% o! Z, y# [
      {1 P1 s5 E5 j) S9 W! w+ ?
       vItem.dwKind2 = 0xffffffff;
7 x) N4 y1 T. t       vItem.dwItemId = 0xffffffff;
3 d! \7 I. {$ j  w! B7 N6 e# r5 d       vItem.nIndex = i;- ?1 ~* u+ x  u/ z! U) k
      }else {
; B+ X% s$ V! ?" ~" E& L% {       ItemProp* pProp = pItemElem->GetProp();
# M6 ]$ k" d% M  e, O$ I* D       vItem.dwKind2 = pProp->dwItemKind2;
& b  F: g/ y1 T9 H       vItem.dwItemId = pItemElem->m_dwItemId;4 `) K, u. R6 G7 M; J( z6 y
       vItem.nIndex = i;
" @( K# F; q" {3 g( r1 j8 B4 I9 a      }$ r4 M1 m, U9 w4 d, W' g
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 C3 _& B+ T9 z9 Q
     }
1 M9 y( ]' a% F! [) A+ R     //////////////////////////////////////////////////////////////////////////4 B) n' z6 S4 s4 t1 U
     sort(vItem.begin(),vItem.end());//排序7 X: k& n/ _9 M
     //////////////////////////////////////////////////////////////////////////
. _" Q8 Y; B* g5 C) V8 k     //交换
8 d; H0 l' H  X1 S# B     for (size_t i=0;i<vItem.size();i++); e, L8 u, k' @2 C( J# B% a
     {3 C  `. u- Q: f6 w
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( Z6 w1 }4 O& I# r6 q
      pInvSort->Add(vItem.nIndex);
2 V4 l7 w$ [) j2 w0 {: ?( H     }. N) E& Z: X$ i5 H  I
     BYTE nDestPos = 0;
' t, X* h5 [8 Y     for (int i=0;i<MAX_INVENTORY;i++)8 S# Y) J+ E) d# A3 ~
     {
5 ^: C1 z) j) y, K% ]4 q9 z6 J      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& \9 \/ n' `9 J- o$ T. h0 R6 q      if (pItemElem)3 g8 L+ M  X0 l5 s
      {
5 I+ }" z9 c7 S       if (IsUsingItem(pItemElem)). g  w7 M5 C6 f; M  E/ Q
       {
6 q1 n1 B% e1 \        //这个位置无法放3 `4 Y: g$ P- k" E
        nDestPos++;
. t; H* |0 s! g. J       }7 T3 b3 R9 G# R% J8 o3 p
      }5 r8 C4 I/ ~3 {* m/ F6 s
      BYTE nSrc = pInvSort->GetItemSrc(i);$ c5 f. o, K9 f6 Q- b/ {3 g5 \
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" a3 r! f9 F3 M/ b5 j7 A: i& C
      if (pItemElem)& {8 q0 `7 F% V1 V
      {4 h6 P4 S! H% A' l+ d9 X! Y
       if (IsUsingItem(pItemElem))
  u# [1 s2 W' D- l! D2 X       {
# O' A" G6 u- K0 L/ R" h2 C3 B: @        //这个道具无法移动,跳过
; F/ I& R+ U8 B$ t" i        continue;
, Q6 I4 [2 [& w7 I8 B( ^# E       }9 q7 {7 w. I& {5 C) R) n
      }else{7 A$ h% R4 c0 U7 ^' B+ J1 p
       //空位置 不用动. M! k( p- Z* Y  ]& i
       continue;
4 M8 W. L9 {5 `$ \" r      }
/ z  ^) I2 T: R2 J      //////////////////////////////////////////////////////////////////////////2 Q+ y, h  y  P  h8 C, j+ K
      //开始移动
$ E9 h' u% f4 a1 T' {1 b      if (nSrc == nDestPos). n3 P. Y% w) |3 b
      {- L: Q& |4 U+ ]; y1 H
       //原地不动& r0 Z1 I1 C0 N. e8 f% \
       nDestPos++;! T' E7 t- y2 B) G7 n" X
       continue;! `9 J+ E: H! h. O1 Z
      }
. ~9 r0 i5 b% f& H2 A. f9 {      pInvSort->MoveItem(i,nDestPos);+ g* E: L4 G+ i1 _
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. `" g, B$ S. ]& P  [) i# s      Sleep(5);
8 I' X# X9 A4 T; L      //Error("移动 - %d->%d",nSrc,nDestPos);
- W) Y9 k7 E/ s: G, ]1 ]0 C( g      nDestPos++;7 c, v) t" P# y6 e) Y
     }' `/ w3 J/ w8 a1 _2 ^3 Y4 ]
     //取第一个元素的信息
( |, t. N9 z( J) @7 t7 c* ], f     /*1 B% G" i( D( r
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& [( q9 s* Q$ y1 F' U8 R( u     {# k2 J! @' F$ B2 E5 i+ E
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; z* Q7 z$ T: u/ x0 i' r8 \: j      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. C; K/ r; U% \7 d  t' b+ B1 X     }
- ~& G) ?: B% N/ r/ d9 _& s     */
2 q$ |' t7 n; b( y    //////////////////////////////////////////////////////////////////////////3 M4 `% i6 a7 k6 l, V2 }! }
    break;8 t3 y! G% i5 K7 W( l. @6 U
   }4 _- T& f. n2 k' r# L9 C* Z+ R7 b
  }
3 o. d& H% r: O  N}; b" e, P7 X9 s- f6 d+ ^) b/ D
m_wndMenu.SetVisible(FALSE);3 a2 W0 P1 D2 o

2 W; v4 ~" M8 h0 l9 s( U--------------------------------------------------------------------------------------------------------8 }1 b! C" f& s: E) j
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; l# I2 V0 w# N, c{
( [7 X8 a$ g" gBaseMouseCursor();0 T4 ~/ B2 t4 I# l  S9 k
}/ @1 m1 O; J" S6 W# X; K% e
在其下添加:  S7 k3 X5 a1 ]+ b8 S
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% n/ c: F( ~/ @) R& [) E2 ~  v{
4 x( d+ r$ z% X- c* D' O: am_wndMenu.DeleteAllMenu();7 b4 f0 ], D% f" @3 h3 v, c* P
m_wndMenu.CreateMenu(this);
  M8 D& y/ z, {4 a1 l1 em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. @9 f8 k2 M2 P5 d* k: d

' g7 g+ o+ V, Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 a5 R! \) e8 }% w$ ]{. _% \# }# f6 a& c
  //P以上级别才可以删除所有道具  a/ e; G/ R3 F" h# X3 ]7 E) ~
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" Z" U7 v' L! |$ z, i2 j. X}
) d+ N* b6 U2 U" V8 n) a. hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ A. h# K) Z; [$ h6 q' E6 Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ N3 y' C/ ~' G& I$ q! l
m_wndMenu.SetFocus();
* L5 s3 G( Z. L' Y% t}) E1 }. @" X- _# I2 G7 [! y
------------------------------------------------------------------------------------------------------------+ w/ p5 t% m( E1 `/ m
*************************
* U+ r) J+ ^& q' Y  o! RWndField.h文件2 s1 `9 E0 l5 J  x! E. G
*************************% X; Z3 d/ f9 L/ q' _0 C
搜索:BOOL m_bReport;
9 e/ |7 y: `/ y2 O* e其后添加:. P0 p# T% G6 z8 d
CWndMenu m_wndMenu;
& Z; R7 G9 `& w% D' S) {; a5 t搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 p7 a& T& f$ Z! ^! S
其后添加:
. |# e) S/ O8 }6 P2 o1 z" q, E8 ~! avirtual void OnRButtonUp(UINT nFlags, CPoint point);
& U, _! s; R' O; |( v, C0 Y3 J
& D' g( l% K9 [$ x. w) R7 s
1 U. Z- g- ~0 Q

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-24 00:46 , Processed in 0.068091 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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