飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
' p6 B6 q7 j' o& _% g搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) M+ _0 _3 B/ G# U; s
3 |( |4 U; ^: m: d5 ], `' ^5 o
struct sItem
5 c+ T- }9 H( d' B{6 D  N$ \% B, t  |* O
DWORD dwId;' Z4 [  c5 ?- D) R
DWORD dwKind2;
- @7 Y" J0 A# i1 b" _9 e0 N& bDWORD dwItemId;7 w: d( D& K* R4 d7 K
BYTE nIndex;* g% D9 W+ T* i) {
sItem(){
& X; a' h$ }9 O. e3 c' a$ O  dwId = dwKind2 = dwItemId = nIndex = 0;/ S% x, @* H( c
}
& ~6 V/ V3 }7 T/ q) B- hbool operator < (const sItem p2)
9 p. \, J6 y& Y: I8 h: V2 J{$ Q; W- {. ?7 _
  if (dwKind2 == p2.dwKind2)
; k1 Q% n8 Q6 N$ C% t  {
; f: W0 G+ A$ }; ~8 R& x0 Y/ N   return dwItemId < p2.dwItemId;. C" m! }# G# m7 Q4 I' A  ^2 P) E
  }else{. b, B( ]: Q/ H: C
   return dwKind2 < p2.dwKind2;
0 ]9 Z5 Z# ~/ x; h  }
! K+ p, s  J3 h% r' g# T" ~7 ~}! O! K* R# U4 {1 }, r% n+ K4 s( F6 t
};8 {6 B5 m& }7 o8 h) r+ w; j
class CInventorySort: }* h- _/ @0 v; p& L$ U- k+ `
{
8 m2 i6 O. W1 n! |6 o6 p1 xpublic:9 i! e- q5 H5 [7 g8 Y
CInventorySort()
7 t# y9 j5 l# j{
4 h3 f: P7 `& }' K. e1 s3 H9 J2 Q  m_dwPos = 0;, w6 K  F! w* ^' x/ z
}3 G9 Y  A$ T2 i* {- f* S
~CInventorySort(){}
% C6 l/ @2 k6 u) t+ v$ `) `% yprivate:9 S  T4 y0 i/ C! P; ]! X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 ]/ E. Z( g( EDWORD m_dwPos;/ L6 y. _$ d0 h# Y2 i! k0 N& q
public:
. U& n# k6 S7 V/ c" g! H* xvoid Add(BYTE nIndex)
7 f5 p$ I: E; d" A4 U{5 E! _) y  n/ v1 P
  if (m_dwPos >= MAX_INVENTORY)
5 T2 E& V+ h' n0 U5 ]; q8 R, l! y/ c  {
! L! u1 \0 _7 d2 j* d   return;% n$ X5 r8 d' r7 X- F* N$ c
  }
* n+ \9 e; i7 X! E8 Y/ {  m_Item[m_dwPos].nIndex = nIndex;
  u+ M$ o# h$ b( u. q* C- g8 O( Q- s  m_Item[m_dwPos].dwId = m_dwPos;
( a6 d2 B5 D/ J& d& E1 b  g  m_dwPos++;
: c: e5 ^2 w4 H5 {+ m}  h. @, A4 l* H: K
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 u! {8 g1 k4 U3 s
{5 \3 \2 O* I: e; H: M
  for (int i=0;i<MAX_INVENTORY;i++)$ B  n/ S% r$ ?7 r* P6 v: t7 u
  {  X6 t1 `$ \# R3 a% l8 S( w
   if (m_Item.dwId == dwId)
; V; e1 u. E1 X/ i+ ?   {
; q  D* U. O  n. q0 A    return m_Item.nIndex;
2 p! ^$ k1 C1 c" Z* R) N0 R   }
( `  \0 Z% `3 }, M8 \8 T  }$ b$ N$ e* L, b/ R" Y% Y& L
  return 255;# U7 u( d) a/ `6 U5 L- `1 s; @
}
$ {+ f# }, P: R+ ^- Q7 [$ Kvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! G% f9 g! D. g{
) L, n7 m, N( `  BYTE nTmp = 0;; [% c; `8 b( M. m# |/ M
  bool bDest = false,bSrc = false;+ a. ], f! x+ \7 \0 ~1 b4 a
  for (int i=0;i<MAX_INVENTORY;i++)
! ^. j2 R: T& y! I  {3 P0 {! H9 {2 d! ]8 Q5 `  |3 m
   if (dwSrcId == m_Item.dwId)
8 Q2 `( z: E6 s: S   {" U9 M" Q- V$ f+ t9 t' h* R
    //id相等 则 改变对应的dest和src* V/ S& a0 H* p) l  p& B) {
    nTmp = m_Item.nIndex;
) i/ l* k4 y8 u6 i, t/ r2 n    m_Item.nIndex = dest;
$ Z3 q- @$ q% z, p   }
3 b1 `2 W1 N5 j3 Y) z  }
* o. Q$ Q0 |( r9 h  //临时数据保存完毕,交换开始
' w9 D! C0 S7 @! q: G( y  for (int i=0;i<MAX_INVENTORY;i++)
; n/ B) h6 L4 a" \: I4 n  {
2 W0 q1 e( v# v9 M  C  o   if (dest == m_Item.nIndex)' \0 q# @7 b! _/ P, q5 t1 p' J5 w
   {3 L4 M; ?+ t/ V5 l+ r0 q
    //id相等 则 改变对应的dest和src
, H4 H* E) O. j0 a3 @    m_Item.nIndex = nTmp;
3 u& s! h" c( m0 `3 l; ~   }( z# T- b6 a4 D" f. J  [
  }
+ @0 v- D+ h/ v  E( ?4 y+ R+ {}
& j0 Z* I+ r0 j  b9 z& D};  s$ m; s: U% Q# F* b1 t0 E- E- k3 D
-------------------------------------------------------------------------
3 D. o& k, Y  z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 E, Z3 X) O& ?" ^) X' Z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 l4 }& T7 A6 Y紧靠其上添加:
: b3 I, H) g+ m4 uif( pWndBase == &m_wndMenu )1 `0 D4 {& ^" n* l
{# z8 ~+ P% u  K3 Z
  switch( nID )& Q6 o0 [. i+ M: ?6 R: `/ f
  {
. s$ ]) `' [8 V' r/ K( p/ Z% Q4 B  case 2:
: S1 @  H& j( w- i8 k   {* k1 T2 ^/ {  ]% u" o7 h$ i
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" h5 K7 e+ w# ?. l( b7 O8 [2 {    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 P4 x7 P$ `3 c8 R3 L5 p    {
  D" }' K" W5 Z0 \% Q     break;: a2 t0 r- f3 T# g2 z
    }: D0 R6 B' Z7 ?4 Z
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 t' A: ]$ ]) }% W) C, S  g( t    {9 }8 }$ P4 X" F
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 h3 M! q3 {. E& w- s- q: E0 A
     if( !pItemElem )
: P8 a8 o2 Y/ r2 |  o      continue;
# g/ r2 E. W; y& r     if(pItemElem->GetExtra() > 0)/ U% t% H7 h/ {+ X+ h
      continue;
8 ]5 @* |" K) O" N6 Y     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' T8 W7 S' i! a/ M: E" g
      continue;
" j  g, [/ M6 J9 W0 Y     if( g_pPlayer->IsUsing( pItemElem ) )
3 f3 E% O' `) H      continue;2 B0 k, ?4 K# G1 _9 T
     if( pItemElem->IsUndestructable() == TRUE )7 b# V+ f+ \' W: Q  T- x) P
     {7 |; F2 S9 e2 p/ B% p  I0 e
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
- z) |) x, k, P1 X7 F      continue;- q) w: p" S- R! x
     }
# Z0 Q! Q" I/ V  N. K: @     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 E, I9 \" G# `: z' \$ W* h) _5 W+ U
    }. r2 p8 v5 w" j5 O) U  I
    break;
- ]' S7 Z$ e5 K/ J/ R   }+ x% O+ [8 |: E3 {- n. O
  case 1:& O( ~! b" o+ c8 V& A
   {
8 q; m- G# j2 U* E    //整理背包1 `. K8 P- `: @0 Z) z9 [
    //////////////////////////////////////////////////////////////////////////
. C( f: R7 d4 b) d  R5 j    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 f4 a/ ]% N( h" n$ J
    //////////////////////////////////////////////////////////////////////////
4 s/ P+ e2 P# L+ Y    //////////////////////////////////////////////////////////////////////////0 n7 x* k- m$ D% V3 _$ U
    CInventorySort* pInvSort = new CInventorySort;( f: ^& c' B5 j: _& O  Q' S* |# R
    vector <sItem> vItem;7 q- i3 {) q. E' g
    vItem.resize(MAX_INVENTORY);//初始化大小8 r3 ]; @3 f/ b+ Q0 B2 @5 \& `
     //////////////////////////////////////////////////////////////////////////; c0 E4 S, E' d  }) {4 _8 Y
     //填充数据
& z- T- B2 Z$ p  ~5 ?     for (int i=0;i<MAX_INVENTORY;i++)) F) _0 ]6 @2 g. |5 T; y( Z
     {4 O4 T& M' X7 r
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
  \$ I! @+ M7 L7 W7 \      if (!pItemElem)
3 R; o4 B% R$ A  I4 ~      {* [% @; `$ w! h4 x: q/ g6 y
       vItem.dwKind2 = 0xffffffff;
6 K2 l0 u& ]1 W2 |" |& `9 |/ [# {       vItem.dwItemId = 0xffffffff;
8 ~0 `3 ?# M# ~4 x8 c, @       vItem.nIndex = i;
" ^( K* O6 g" T. a7 N      }else {
6 w( b' g8 h+ z! L% W: s       ItemProp* pProp = pItemElem->GetProp();% z2 n  k7 s) P/ v! h9 Y( R
       vItem.dwKind2 = pProp->dwItemKind2;# R5 C* F0 [& J. W
       vItem.dwItemId = pItemElem->m_dwItemId;- Y7 A/ K  _7 O& y
       vItem.nIndex = i;, D% w7 q! r* e6 `/ D' P4 G
      }% a& w+ `4 u; {9 M2 d/ v
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 U: ]$ L. u; Q4 Q' X! }# h$ I
     }$ c$ u+ V" [4 H8 f4 V# L$ O
     //////////////////////////////////////////////////////////////////////////  U- ]" N; I6 g6 Q
     sort(vItem.begin(),vItem.end());//排序
/ \; S) L. a3 T  Q$ K     //////////////////////////////////////////////////////////////////////////' A9 X" r; n7 X- a1 ^
     //交换
8 T9 j, n: A' j# `! t) ?  w. N     for (size_t i=0;i<vItem.size();i++)
8 {. N: T' |. n     {; Z$ i, d; a& A
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# Z& Z/ Z' V; f7 L9 ~0 Y: v      pInvSort->Add(vItem.nIndex);( V6 F. _1 @) L; B( \; X
     }, v9 t: h3 K  w$ P
     BYTE nDestPos = 0;
. Q# _2 \" P9 J  e( T     for (int i=0;i<MAX_INVENTORY;i++)
  Z' R$ O/ q+ y) w5 G9 Q: l- p     {# u% W- K) D/ b+ m
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ d- O, x3 p* ~$ l/ O! h
      if (pItemElem)
: }* i( o9 ~) y3 b- u; [      {
3 N- j( S/ X, O# ^& d       if (IsUsingItem(pItemElem))) b; a( [- ]1 e5 [: }. p
       {
" y" I3 l( T) @        //这个位置无法放
4 Z2 r; V" s1 P2 O+ T        nDestPos++;
& a8 C7 Y. T# I% I1 }) L) t- X       }& D6 I+ ^" ]/ W6 A+ t0 z2 r
      }2 p: g) H( |. \" r$ Q% X
      BYTE nSrc = pInvSort->GetItemSrc(i);
# a% l# ^0 b4 w  l+ Y8 X      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( p! U5 J2 C9 x/ j2 M7 T1 D      if (pItemElem)* @# g! Z1 t+ ]7 s* G( R
      {
; _: A; N9 N2 I6 M( c       if (IsUsingItem(pItemElem))$ x0 p! R2 }0 z: }) K
       {
. `# H: b5 W7 V        //这个道具无法移动,跳过
" }! a; {, [3 s# [! ]4 h& C        continue;
8 V7 O' ]! t- R, s       }) W; k$ ^+ j' @- X' f7 Q
      }else{' I3 j$ d$ o+ a( z6 E
       //空位置 不用动
4 p7 d+ U5 i) k, a" z       continue;
$ a1 ]& N) ^) ^      }# H4 q; s$ v; b) o
      /////////////////////////////////////////////////////////////////////////// ^3 ^' s( |! q' f  D( p( u  m
      //开始移动2 s! f, V9 Z5 Z! e7 \: a
      if (nSrc == nDestPos)
. D# w' o- V- }3 L      {
0 j2 w4 }/ n4 }$ h; t+ ?- \       //原地不动/ Q, o1 r1 e' q% i
       nDestPos++;* N* r3 G0 l0 D, v0 Z$ J( b. V
       continue;& m  |( h8 |9 X# N( ]9 ?  h
      }
0 ~4 d: h$ W; t+ y- a      pInvSort->MoveItem(i,nDestPos);7 t5 z  d+ Q2 D/ ~9 h) l) r
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ t8 E/ c5 l% }* R
      Sleep(5);
, C" _/ l$ V$ f+ [7 C7 @+ Z      //Error("移动 - %d->%d",nSrc,nDestPos);
/ e3 Y/ \- y8 B( R) K* @! `) w      nDestPos++;4 g- Q0 R* z* K2 `- ]3 c$ i. o* A0 M
     }3 z1 t6 {- k3 i3 M& M5 z
     //取第一个元素的信息
# ]7 D; t8 g& a! z' D     /*1 F# V; D" R0 T; K' G) q* R
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. E4 C, k6 c8 e+ g" }     {
# y2 j' U& a4 j( v      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 _4 `9 z2 `! G" Q1 D  r      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' |( r. W3 m4 w* B
     }$ T! i" g# ~7 `  V# j5 }( f! l# O
     */5 v7 V9 s& L5 N' o/ v% Z! s
    //////////////////////////////////////////////////////////////////////////
8 a- L! C  H/ }; L    break;
8 M3 d1 x+ M% Q: _2 t' S( y   }1 O$ [9 g1 b& Y, o7 h
  } 2 l7 E2 C0 a$ h6 g0 |& D4 W
}6 m  ]; p4 n+ K0 y; T
m_wndMenu.SetVisible(FALSE);- j: Q7 t/ x# f. R& v; Q: r
: U1 W. S7 X0 U+ [: r; T
--------------------------------------------------------------------------------------------------------3 k7 M1 I# O+ u( |* r
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" z4 P8 q9 p) O1 |  z6 y{
1 n: j( u6 @2 K' bBaseMouseCursor();* [2 F5 k9 o& g! t% u* e& g
}4 o- p8 x, `2 V9 D# n3 W0 {
在其下添加:
- ~1 [! C! P5 A6 W8 j$ rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 ]* |* j  ~6 N/ n" h{
9 t+ W' v+ B9 S/ t% hm_wndMenu.DeleteAllMenu();
$ G+ P6 n" h5 t3 X( {4 g1 ]m_wndMenu.CreateMenu(this);2 Z8 j) N8 Y' u* ?7 W: R( E
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ B3 x5 J! E5 w2 D  w; W( P5 Q
# s+ Q3 x) r/ }3 {+ G# {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) Y( C9 d" A2 t  N/ |
{% x; W* z: u7 S% g) m  ^
  //P以上级别才可以删除所有道具
5 [1 G0 {- \5 U/ `" t  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 y1 ]$ i, f: H4 ?& p  {}
9 A, N% @3 k; Q+ k/ pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );; O" C0 k' s8 Y- g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ {" \( ?* u* b7 Ym_wndMenu.SetFocus();$ j5 z# }- B* m# A
}0 s- n4 Q8 e* F
------------------------------------------------------------------------------------------------------------
- ]2 X4 v& b# u( M$ ~" f*************************
/ B# a- K0 y6 I# ~+ g+ J8 BWndField.h文件5 \& v+ J1 B; ~8 Q# e5 U0 I
*************************
: ]6 y7 p! d6 `4 n  r搜索:BOOL m_bReport;
1 B8 X3 [5 R; |/ F其后添加:
9 a; R) e0 G9 ?7 wCWndMenu m_wndMenu;3 k, {' T5 C& R+ H: L
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& {- u* o4 x* k1 L其后添加:
2 ^9 W, h$ l9 ^9 svirtual void OnRButtonUp(UINT nFlags, CPoint point);
! B+ B. T& {. x4 l& M+ k  j7 |: c; Y$ m  [8 Q) S, s! [5 H2 |

2 Q+ F1 z1 x" C

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 08:17 , Processed in 0.087686 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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