飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件$ q4 M% N% P& G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) ]" {! `9 y/ i" f$ X# O' A
# F$ X+ j% h; |, Y/ u' {# J* Z8 {struct sItem
! l" C. f8 [2 t0 ?4 y8 j* ]3 Y{( ^1 R  s! Z' Q- c1 C9 n* U* A: k
DWORD dwId;
  U! x% p. w$ a4 d$ ?/ e& vDWORD dwKind2;5 s; S& W8 }: w- m3 d- f
DWORD dwItemId;
/ u9 y( s% j: i  O7 GBYTE nIndex;
' m: `& t" I0 t0 s% E: P% FsItem(){
9 h# l9 w2 z  {9 k* I. e  dwId = dwKind2 = dwItemId = nIndex = 0;! j9 \7 Q8 |8 T8 `  Y" S7 H$ ^
}
4 q; ?" m. V6 g$ ~0 obool operator < (const sItem p2)* ?, c, N6 g2 D) M
{
- f2 ~- ?; ~- W' u! l9 ~- u  if (dwKind2 == p2.dwKind2)
3 J9 k8 N5 M8 f% Z* c  {! k1 X" P, g* o* o
   return dwItemId < p2.dwItemId;
/ z/ ]- f0 |$ h0 m- P5 k! T  }else{
. Y1 i) B* q- ~/ u- L, @4 ~   return dwKind2 < p2.dwKind2;
6 Q! Y$ s! \- s) P  }
  P1 W, U; ?1 n/ {2 L}
/ V2 i: ?: a. H3 ^! z$ M( x};# O6 q% h4 N( y4 B: o9 U: \
class CInventorySort6 l, K4 i- R& K. }
{
4 F7 e; G' a* {9 P- }+ hpublic:
; b( I" w0 L4 U7 v+ e7 g; @CInventorySort()* ~5 o+ s/ o) T  F: m
{. Y+ f) I0 x4 Z# x' Q2 L6 f9 D/ C7 [3 Y
  m_dwPos = 0;
6 n3 [- s4 v- Q1 b' r}+ D4 F3 H# h4 B& g& a- P, o
~CInventorySort(){}7 f" D8 f( r7 @+ `8 U' v
private:
+ @% q& f2 Q. U- d1 h: N" ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
& z& t5 _- D  {5 X) VDWORD m_dwPos;
1 c( v0 ?' z  {! H( S3 v  fpublic:' p$ X  C) `( W4 V& m4 K6 F1 k0 u
void Add(BYTE nIndex)
, i! }- |- `# n5 E{
' l$ O. X5 }7 i% G  if (m_dwPos >= MAX_INVENTORY)! x3 ~9 ]) c& q, v4 K) j. J
  {
; L8 x! M; @6 |6 B" T9 l" o8 K   return;% h% q+ }- L" C. \1 {4 O2 r9 a* P$ D
  }
( L! a. m. x7 @) `, b- a  m_Item[m_dwPos].nIndex = nIndex;
8 H6 j' d2 @2 f4 u! H. |  m_Item[m_dwPos].dwId = m_dwPos;. x8 [/ u  M* J6 d& f) B, X6 S0 ~1 S
  m_dwPos++;
8 H( t6 N* r' `4 _}
2 g7 O. |8 p$ l) n) o6 SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% Q6 @* l+ O5 S1 _{
% z9 y3 _8 u+ N  s. E! W  for (int i=0;i<MAX_INVENTORY;i++)/ t* D( m- w7 N2 O* D( W
  {) D( d7 S1 w% E! i3 v6 ?
   if (m_Item.dwId == dwId)
9 J  [% h0 u% c8 X" E0 y) F   {/ n, K% \, K! ^5 I% k: u: y  w
    return m_Item.nIndex;: i% t4 A- Z0 s1 |  F  B7 W
   }
# C9 A7 q/ q" B! {  }
, ]) g, K3 X4 h) I* p  return 255;7 `& C" P" v+ C, Z( y5 t
}, D" Q1 B3 `( ?+ M) a6 c- ~' z/ o
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ s2 b* `. z1 g" b' f4 s7 K
{2 ~/ u3 x! {* q% i2 o. h* x
  BYTE nTmp = 0;( P% r4 \6 R: w8 k
  bool bDest = false,bSrc = false;3 y! {$ O( h' J/ D) C
  for (int i=0;i<MAX_INVENTORY;i++)
: w0 h! v* x- j( t# T5 Q  {
: R* \# O# X# t3 g+ g/ o& X& R6 {   if (dwSrcId == m_Item.dwId)
7 Z) Y5 B& r' @" H: v   {
' I1 X- Q, Y; a' M/ i    //id相等 则 改变对应的dest和src* q% j, l  S  l5 T! [& [# p1 g
    nTmp = m_Item.nIndex;4 v2 N, w  h4 f4 _. j# M) {
    m_Item.nIndex = dest;1 X5 w  o" t, r8 K  K1 c2 M1 u
   }
" M/ q# `$ R9 X' u  }
* J4 b( T  x* |& D8 z  //临时数据保存完毕,交换开始
. H" ?$ C4 m3 b4 r9 `0 O  for (int i=0;i<MAX_INVENTORY;i++)' m4 {+ b4 {9 ^* E) z
  {) R3 w! Y( j9 t% u
   if (dest == m_Item.nIndex)
2 W3 v) T! D* q+ y, ~! N/ ^- o   {+ A7 B" m1 N9 @% V2 I3 M
    //id相等 则 改变对应的dest和src
: O4 I$ n* |2 m7 A    m_Item.nIndex = nTmp;* X3 B! N. G1 |9 h4 v; ^
   }
/ k+ W7 `; w; M! @  }
; F3 @2 j1 m) ~# n}  ]; @8 \9 |6 `( O6 c0 u
};
' m+ u; O: O% @' o-------------------------------------------------------------------------# h' i2 P; R* F
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% d. T8 B# u+ I$ Y4 C4 v$ R1 N3 s搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 i+ j4 `- a$ G: {6 s+ c: K: p
紧靠其上添加:
3 r+ U2 U/ U' l2 X, R9 L, D, `/ bif( pWndBase == &m_wndMenu )
& V8 ]% Y2 _, S5 d{0 R8 A% h8 L! w2 B
  switch( nID )/ I7 Q2 u: E, L8 c  p
  {- b) d6 |' {4 G3 R' X$ u4 |0 H
  case 2:
8 p% ~7 W4 Z1 `/ R1 ]7 c5 I   {
5 y! r7 B9 O' T2 n* u; w3 \, L  A/ I    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, Z/ J( x. j; D8 z& w* s1 ?; E
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 [. S; O, U& H3 j3 m" K, ]$ [
    {
2 a8 c/ j0 ?) U% p3 J  F     break;
. U  m' a4 P& N1 x) R    }2 ~5 w9 U8 j' D# u' o! v( D
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 K, E& N! k2 b
    {
! V) C% ?. k6 J3 Y% F     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& L6 {$ g# m7 @0 @' [" ~& C     if( !pItemElem ), |+ _5 {5 M* u/ z
      continue;7 K2 O3 p( p' P5 _; A
     if(pItemElem->GetExtra() > 0)
6 Z4 J5 u9 p. h1 x; m9 K      continue;
8 i6 \  W' a  W7 P     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, c4 F- g' Y: Z1 E. g7 |4 `6 n! |      continue;
8 Q- \7 b1 k( k     if( g_pPlayer->IsUsing( pItemElem ) )
2 P1 H" Z* I+ f" x& |) J      continue;
/ w2 U1 P) N+ l6 H, g. |     if( pItemElem->IsUndestructable() == TRUE )
( |4 Y: W( z; P9 o& r) B+ x# q  ?     {8 V4 U& O& f0 X3 [
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; _& o8 U0 n2 u3 ?$ B5 Y8 d# w      continue;
. }1 y7 R8 R2 }4 G     }1 H5 j/ }0 |$ x; ^1 h3 d, c
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; K+ Z- W# @, n; W( n    }
& r( b  u5 C6 ~, {! S7 D  t    break;5 Y4 w2 M4 c3 e' i
   }" l4 M2 Y$ p# s2 P  b: {
  case 1:
  {& m& |* V. [/ n6 L. c   {) Y4 l. \0 w& e  E
    //整理背包. X; w- Z! p5 y/ d, X# A
    //////////////////////////////////////////////////////////////////////////1 a9 N  x1 z; C; H* U9 G9 y- S" ]
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! n. W) {7 V+ N  r    //////////////////////////////////////////////////////////////////////////
" ]' G, a3 O9 C/ M    //////////////////////////////////////////////////////////////////////////. x7 J- ?. [0 h$ [3 W) r5 x
    CInventorySort* pInvSort = new CInventorySort;1 E/ z8 |0 i- X( C4 y, i8 X$ r
    vector <sItem> vItem;6 P9 K* X. W4 L# I
    vItem.resize(MAX_INVENTORY);//初始化大小
) h! g# r& Z( O' e/ U     //////////////////////////////////////////////////////////////////////////# ]1 B, G  _" z/ t( I6 H: w' M
     //填充数据' F2 F8 m3 i6 B5 s; i1 L& l
     for (int i=0;i<MAX_INVENTORY;i++)
6 Y0 E& c" P9 `) p9 W5 X& ^     {$ c& H) D# k) X; a9 }
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ r: g( _$ R- Y6 i) {
      if (!pItemElem)
5 ?: t1 C9 x) K: Z      {
% B9 K. P- s3 E       vItem.dwKind2 = 0xffffffff;
3 W/ J9 F6 _- A       vItem.dwItemId = 0xffffffff;% q) D  ^8 T/ i6 \0 o/ H" i
       vItem.nIndex = i;
. w: P1 X9 a9 `      }else {4 S: j6 W$ v& M* Y9 `
       ItemProp* pProp = pItemElem->GetProp();
2 d- ^7 d8 U5 p       vItem.dwKind2 = pProp->dwItemKind2;$ Q7 E  i8 {( v8 W$ }3 _
       vItem.dwItemId = pItemElem->m_dwItemId;1 D) J, \' `( |* a6 G3 M/ `" n
       vItem.nIndex = i;5 H* K3 ]7 \% V* k- X6 P
      }  F3 S. k1 h7 E0 J, y& y3 D2 n
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 I2 W7 V7 T  L; [* J: X     }, e. K! _6 b6 R. C
     //////////////////////////////////////////////////////////////////////////
  `( v7 d' f+ V  X2 j     sort(vItem.begin(),vItem.end());//排序
9 H/ N. [+ {$ l6 V& M     //////////////////////////////////////////////////////////////////////////8 ^3 u, W8 \: X9 K
     //交换
4 l. {' |! f5 w# s! M+ K9 ~. S     for (size_t i=0;i<vItem.size();i++)( s/ K" Q" u6 u, C' k
     {
$ Z$ G0 t, A  O      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& R5 v0 C$ I; e3 s6 W. H7 o      pInvSort->Add(vItem.nIndex);
/ E  z5 T( C5 |& L3 B; x4 t) V0 h     }9 y8 u( S2 Q  X5 n6 C1 `4 {: j
     BYTE nDestPos = 0;$ `) ~' I. N- v, d5 g  L5 J- N
     for (int i=0;i<MAX_INVENTORY;i++)
# D$ _; V$ [1 e     {" E/ Z$ @$ r0 O4 F6 Y9 Q. P
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 a" L5 ~: ^9 P      if (pItemElem)
9 i# t( [0 h% B9 T      {+ [9 h# m9 `( W4 f9 y
       if (IsUsingItem(pItemElem))& S$ ?/ h' E* f  b: Z& ~
       {
, G8 J: t" [# m0 J& e        //这个位置无法放
7 {6 Q1 M* W6 J9 b8 i        nDestPos++;8 M! }# N& K) {4 s( Z4 b2 G! e
       }7 k7 K& E+ R) }) E) R: @+ A% I9 ?
      }9 Q3 X( M* S, f- n8 r- Y
      BYTE nSrc = pInvSort->GetItemSrc(i);9 }2 P% y; E7 J5 U( H: L
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ g" ~' ~- Z, {      if (pItemElem)9 }/ H" a" w  t2 _# K
      {: c& T5 Y! O0 V( W* \" X4 V6 M/ [
       if (IsUsingItem(pItemElem))( W( r5 y: K7 K% a! w5 j! s
       {! V7 p+ K9 U8 e" F9 D6 y. H
        //这个道具无法移动,跳过
. j4 C$ s; h$ d5 R& y2 E* s        continue;
& j% f6 _6 f7 a" l+ R1 @       }* H9 x. A0 i; x  o0 ^9 C
      }else{
8 q8 v1 P2 Q2 B+ ?  c, O       //空位置 不用动
+ @& l3 K3 x& h. G+ g6 |3 i$ e" w       continue;
0 s3 i& r( [2 n0 c      }2 f! U  {5 E" T/ N
      //////////////////////////////////////////////////////////////////////////
. C& k& T6 Q! W* a) B      //开始移动8 M. R2 {5 m& V4 e1 e
      if (nSrc == nDestPos)) L# P9 K8 j$ c) a" b
      {4 g: E. g! H8 O1 U- Y- K
       //原地不动
8 [: r- W* Y" s/ Q4 S: p       nDestPos++;1 o  d7 B9 M  E
       continue;
: X* b. t, f1 j# D' v4 D6 t9 e' q/ K+ H2 E      }
  Y7 L9 M: ^4 C4 v# |      pInvSort->MoveItem(i,nDestPos);
, @* Y( O; {, m7 F# h9 q9 b      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 O/ y/ u- _( L5 h      Sleep(5);
' |" l6 I& b$ B& r/ o+ {9 y      //Error("移动 - %d->%d",nSrc,nDestPos);
7 `( |& U& j; R5 M( L* g      nDestPos++;
  r) d: p# m) g( R     }
+ a3 R3 G, ], A( m' j1 N3 g: E     //取第一个元素的信息
7 o& S8 m5 s, R/ O     /*
* {/ r: @. p% s     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 _/ J2 H3 E8 G9 H2 g1 J; U) d
     {
- o. V: v3 q( B. ]      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);7 X% Q1 ^9 R! h% o/ }; r
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 ~. Y( P7 k- |9 {9 \6 r6 {+ z& f     }* g' k; f) k7 E% w2 q9 S
     */- x; B; r  S& ]/ j0 N
    //////////////////////////////////////////////////////////////////////////
, w5 n' l2 L  M    break;
+ T: Y; Y3 u7 V0 Y& v! C; [   }
2 X/ t+ a- e6 {% q% f3 R, G0 B  } $ S3 ~4 M5 `  {' {( t
}  ?+ y0 ~0 }* f: q/ K" J
m_wndMenu.SetVisible(FALSE);4 A4 r! A$ ?% O# S  ~4 z

* Y& N  T0 ]( v--------------------------------------------------------------------------------------------------------
( i7 p: C6 x# X搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, Y. m. T8 ?8 B( g0 w/ W{  Y; F- O- Y) C
BaseMouseCursor();& v% P& C# A. `* R
}& q9 z8 }7 y- s0 m2 j) Q* Y1 K, Q* q
在其下添加:4 N5 r) j7 j4 E4 T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* s! v1 ~- S& C( r{; q* _  w4 P6 k' h) \: }
m_wndMenu.DeleteAllMenu();
6 d  `! X# v6 ?3 Im_wndMenu.CreateMenu(this);* d9 X$ ]) @* P  R0 A! I% O# M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, H1 n( ?+ B- l5 l

8 V  Y: q9 V5 q4 e7 c' i5 L+ ?if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ `1 `8 j% h  ~4 S0 M
{
- _3 t3 A- W$ Z( X. K. W" l3 K5 k  //P以上级别才可以删除所有道具2 L% h1 _2 W5 u3 R4 M6 B9 Q) ]
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% `# w, A" H* [! A5 f( _
}
" K0 H  h5 G# N* J- \) Wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ N1 Y6 @, a0 Q0 t% z& o3 A+ R" Cm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ C) [+ j& G) q
m_wndMenu.SetFocus();& K  w8 O' J) K+ \
}% U* X2 f' k3 [0 b6 Y
------------------------------------------------------------------------------------------------------------
% o3 @2 w* P$ @5 p" I6 c*************************
! X0 _2 o0 d9 y( x9 AWndField.h文件
' n' T) U5 @0 ^; Q4 G  T& N: M*************************1 d/ S$ Q0 F. e! h3 R. E
搜索:BOOL m_bReport;! g# h- u* R$ l5 S, n- t. E
其后添加:3 ]; m, F% [( Z: |% o
CWndMenu m_wndMenu;
5 R" r# n0 H) X8 R3 B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
  ]3 L2 _) E8 S) {, {其后添加:
+ a7 F% F4 q3 O( X& Svirtual void OnRButtonUp(UINT nFlags, CPoint point);5 ^) O. \8 N/ z* ~( w* u, h
9 N5 T. w* S. u% O2 \" |* _

  e# ]) _* Y$ K" F$ R' a3 m

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-14 03:52 , Processed in 0.062453 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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