飞飞世界论坛

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

一键整理背包

[复制链接]

200

主题

203

帖子

984

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
984
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
, k& D# W% o; _9 G0 k( s. C. ]搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; h8 T7 }! Y3 F9 Z3 g
* J# i+ n+ K! G# ^7 E7 H$ ~- a+ estruct sItem7 T$ F3 y' |+ u) F1 b; M. s
{  {' h( g7 D; F* d% }
DWORD dwId;
9 f$ h+ H2 N" u" G  }DWORD dwKind2;
  i# [! Q9 u! p: w4 I1 a" ADWORD dwItemId;
) d3 T: J2 `- U& W) n" |  ZBYTE nIndex;6 n* ~/ `" U+ l. `' V) g  K8 N8 z7 _
sItem(){
& C+ ]0 i: G- h& N  dwId = dwKind2 = dwItemId = nIndex = 0;
1 A5 @, J- I  O2 {}2 P6 O7 j$ h' R9 |; _
bool operator < (const sItem p2)4 I9 ~) |, y3 {6 T( @
{: o- r. _& R, |( x) g+ k, o) T
  if (dwKind2 == p2.dwKind2)
: J* U& T# ?2 f. P( W. O5 D  {# R7 n3 W4 F" [1 O
   return dwItemId < p2.dwItemId;
7 ~! S7 p( L2 l6 H! n  }else{
3 s  L% u, K& @7 s- \5 U. z! z+ ^- p/ n   return dwKind2 < p2.dwKind2;
- p8 O# C& Q' j, X5 m  }
! l3 o1 ?, }! l9 Y$ L8 \}1 Y2 }! n9 z) P2 s& D$ e
};
2 O$ y+ ^) ~- d/ D+ @7 N' dclass CInventorySort
  p6 w- z5 V8 `$ ]4 Q7 P  _{
* o0 ~* J! O- A  F5 w. Apublic:
6 F1 r6 `* ^, m/ r/ yCInventorySort()
8 S8 c8 V+ c( M{
% V) {! A/ V) O2 l$ S. ?- A  m_dwPos = 0;
$ z) r+ g- a7 h* G}2 k, J/ V3 n1 P, |* h0 |7 |& H
~CInventorySort(){}
; V0 i3 U$ l% [! y- p# E" w- j$ R% nprivate:
3 N) E! z9 s1 HsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( {# V9 X0 X- R. Z0 h' Z& E. {
DWORD m_dwPos;: l' O# {+ s  r: G8 a
public:: I+ F( I6 W& O" H+ m4 k
void Add(BYTE nIndex)
# I2 q8 b9 e1 h{
# l  B7 Z; j! s0 D/ J  if (m_dwPos >= MAX_INVENTORY). A6 K* I, }+ |( }7 J
  {4 Z9 e' w' P+ ]/ X. o* M1 a, b
   return;7 P; M: S, m. \/ e2 v+ i+ i0 k" a
  }
  M  N& E# F! ~) T; b' K  m_Item[m_dwPos].nIndex = nIndex;4 l! R: G) f! Y! @7 V4 d
  m_Item[m_dwPos].dwId = m_dwPos;% g7 y! F$ r) Z' S. B4 ]
  m_dwPos++;
( q/ M( `& Q- _- J3 o}
$ J4 h# y: w& }; b+ T8 tBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 W/ Z0 ^5 }) r& h  X# A! X{
5 _5 J6 z+ W$ h2 }) I0 F  for (int i=0;i<MAX_INVENTORY;i++)
* w  x# x  W. q+ @  {  k4 m0 w8 X0 c. w7 v
   if (m_Item.dwId == dwId)
4 g6 ^% e8 ~  ?" k   {
& ^& {8 h$ C9 O! L0 S0 v$ R    return m_Item.nIndex;
' l0 Y! w* e+ G, h, g. y+ B2 O   }! I. v  d6 P5 {& U. H7 A; H
  }
6 t/ ?4 e9 i; ?' E% Y# ]* k  return 255;9 p& g" A  \$ j  y* Y/ R
}, v, u% e+ a, B1 c% h
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 |; h; e8 \; f( G6 M{
* i. n: G+ j& p, K! b: e  BYTE nTmp = 0;
9 v' n' H  T9 U" A  bool bDest = false,bSrc = false;  ^. J: v3 J5 {: i/ u8 q, q
  for (int i=0;i<MAX_INVENTORY;i++)9 E; r# f& e; v9 N: c% \, N2 t
  {( O+ W. c" `- E, w6 I) I; n3 ~& {
   if (dwSrcId == m_Item.dwId)/ m" }8 j0 Y# ]/ n7 S9 C. I1 c" ~& p
   {) Q( e& V# W5 S1 W) o% c3 z1 v8 A
    //id相等 则 改变对应的dest和src
5 h3 B' b* F7 E" M/ _- e* T    nTmp = m_Item.nIndex;% p, x; j  u4 t- Q
    m_Item.nIndex = dest;+ l& h: s- Z6 n5 t- h3 d. p! N
   }1 q' [* A. m4 \: l
  }
3 e% S4 R; C9 Z3 u  //临时数据保存完毕,交换开始( I( ^9 L5 U) I) ?% W
  for (int i=0;i<MAX_INVENTORY;i++)
! Q8 |( c8 y5 ^" V5 X  {
5 Q4 Q. R- v1 {1 V: N0 a   if (dest == m_Item.nIndex)% t9 `$ a7 G6 p$ _$ q
   {
0 B& B8 [# A4 z2 k8 M# G6 p    //id相等 则 改变对应的dest和src( M4 ^; l, i: A2 a, q
    m_Item.nIndex = nTmp;" i) Z6 {4 x7 X6 ~
   }; d! I; ?, {. `: C
  }+ `  H& M( C+ V# w1 d! |2 U* ^
}& f8 w+ k( a5 x* K# h- c: G1 `1 r" K
};+ b. X# }- w; s* m% _% Y) o
-------------------------------------------------------------------------
% g6 i) T8 Y$ D9 a7 H. Q  ~依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 q! c+ s8 M/ {5 Y1 s
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! ^/ O, N" ^1 O$ \
紧靠其上添加:$ M: c5 [, a, m, Q
if( pWndBase == &m_wndMenu )
9 n0 p- z/ b3 g* z7 e  u6 y{8 s6 x- e: }7 I( x8 d* G; }7 |. l
  switch( nID )( I9 |: [; E; ?* @
  {
/ Q9 {8 h# g. o" j8 y% i+ m) L  case 2:& s4 F( Z7 n( X! Z4 F8 P- Z5 I
   {$ r. @4 |. |4 v! ?
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 O; ]. S& Z) i- C+ `
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 h* j$ O# X+ n4 t! d; ?! q3 k    {! s' u5 V( [1 l% Q6 v. W
     break;
! ?) n* {. N; Y+ ~$ |' ^/ R    }
7 M% k4 L7 v- C2 ]) I5 n  e    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( G0 W' r! {, b7 J4 p; s    {
5 w. S# i7 J) `' f. ~. l  \     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 f( z8 M8 Z) Z4 A5 H     if( !pItemElem )) P6 k/ s0 W, [
      continue;
: n  J7 |8 L# \9 _. j* G* S     if(pItemElem->GetExtra() > 0)
0 ]4 E7 J( c; k, @4 R% S" x* k+ h      continue;+ x0 m( P4 g+ o# u- H. h
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 7 y& L; d: ~1 L6 G
      continue;- t4 s# j6 O! E! K- T
     if( g_pPlayer->IsUsing( pItemElem ) )) R- D) r: s# p% c
      continue;, F0 l5 L8 i! r0 S8 ]- C
     if( pItemElem->IsUndestructable() == TRUE )
( d$ G  y8 N# }9 P3 E+ e     {
# e" n6 B. w- O- R      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ D: N6 d) z$ R3 C
      continue;
# P& G2 z; q4 @3 N5 S1 w: F/ G     }
( K+ |$ h! G$ o  w% ~' ?     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 E2 H# V9 c8 L  M    }/ r2 ?3 H: D2 a6 y3 z& E9 M
    break;
! m" p) w$ ^" w  v; Y   }
' w" P0 b) T6 K0 u4 Y  case 1:
9 Y0 R) K$ }% Q) e+ f   {& b) i6 }+ y. F: ~" H
    //整理背包; b  Y) X' O2 X! Z
    //////////////////////////////////////////////////////////////////////////
# H: @$ b! d# s5 t    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 z" m% Z( A0 f3 k" L9 m: T& x    //////////////////////////////////////////////////////////////////////////( j( @  p1 F$ W1 d
    //////////////////////////////////////////////////////////////////////////
0 c" N- E( ~( _% `7 f4 C    CInventorySort* pInvSort = new CInventorySort;
, q3 v* E! R% O1 v) }. ]2 }    vector <sItem> vItem;
. X  y; ]# Z9 W4 O1 k- K- l    vItem.resize(MAX_INVENTORY);//初始化大小5 k% c; J: g9 ~3 ]
     //////////////////////////////////////////////////////////////////////////# W3 N% J2 ^# ^5 l$ c. v3 i
     //填充数据
/ m) d) W: w, j) n     for (int i=0;i<MAX_INVENTORY;i++)4 [- }0 c% q* t$ n( m2 w
     {  X  ~/ R2 m* y: H6 O# Q( y
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: _* [" m9 E) _( C- u      if (!pItemElem)
( V5 f5 T% U+ V+ k" r      {
1 F8 z+ n/ ~9 h       vItem.dwKind2 = 0xffffffff;
" T; H- A  B) L  E       vItem.dwItemId = 0xffffffff;
( D1 N9 t1 q2 y; ^" {. [       vItem.nIndex = i;- D/ g; Y( W* A' D
      }else {
* k. f1 D6 C" O0 ]       ItemProp* pProp = pItemElem->GetProp();
( S  H) S5 c. w" e       vItem.dwKind2 = pProp->dwItemKind2;
- c( j' n" a  ^0 e7 C" X8 t       vItem.dwItemId = pItemElem->m_dwItemId;5 a1 F, |9 v, ]1 c4 E
       vItem.nIndex = i;' b, |. v/ Z6 V# t
      }7 b+ i& Q& z5 E1 C
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 t& a3 A$ ^! L" X     }+ a- i  i. V0 r* T/ s$ J
     //////////////////////////////////////////////////////////////////////////, O' J; `( f- M) m" J. j7 C+ i
     sort(vItem.begin(),vItem.end());//排序3 x; N# k& l) Q3 e( e
     //////////////////////////////////////////////////////////////////////////1 M. B# G$ D( K" Y5 i1 V) ?4 o
     //交换
" C! _4 P" x& V" n     for (size_t i=0;i<vItem.size();i++)  ]7 f4 c! Y* P& z8 K
     {
4 U- B; t! |7 o      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( }' _0 x2 q5 g& f: T! x
      pInvSort->Add(vItem.nIndex);+ y# m# v  r% b" V( B/ l
     }+ I- F5 I- D$ d9 }: t% ?
     BYTE nDestPos = 0;3 t0 b( j% J4 |# K8 i& q
     for (int i=0;i<MAX_INVENTORY;i++)
3 S" U& _0 ~2 q0 A- ^  a; a     {1 o1 u7 I2 O* ^: `1 v! C
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 `5 |# R4 h5 [      if (pItemElem)
( S5 l- z0 h3 g9 V      {
8 J. z' k1 m9 G' ^7 E7 M       if (IsUsingItem(pItemElem))
. g6 m4 V, L% c3 x; z       {
1 D! C6 h  |' |9 [" i; H% c        //这个位置无法放7 m: P1 D: v4 f+ Z4 h
        nDestPos++;
& I' ~; G; L( H( A' l' J       }
7 E5 E. q: q; f( J      }7 a  k+ t2 D( e
      BYTE nSrc = pInvSort->GetItemSrc(i);! ?0 K( k0 \/ ~. v9 t+ M
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ h& Q+ k* y$ z, Z$ L2 K+ h
      if (pItemElem)
) o" W3 m6 }( }1 \; n      {
8 X! I4 @3 m# i! C) N       if (IsUsingItem(pItemElem))1 Z7 z; f2 m2 s2 H- R
       {/ J, F5 |7 c# D: I
        //这个道具无法移动,跳过( ^# o+ _4 ]% S
        continue;$ s% w5 @3 |- a: I/ v# b4 V$ S
       }
9 O9 r* z1 g  z7 r0 n4 u      }else{
8 y, ]" g, ^0 t$ U0 N       //空位置 不用动
+ T+ y! f7 y6 n& r8 H6 P2 ~       continue;( x) L$ z" h/ g1 |) J
      }
8 W6 x: L+ X! m6 q7 @7 [$ ~0 a      //////////////////////////////////////////////////////////////////////////* R7 l# R+ P; L8 E( }2 v! Y9 Q
      //开始移动
5 A: h1 _7 w5 [9 C      if (nSrc == nDestPos)( G6 P% F: o  e$ S+ w
      {
% V' ~/ X$ _9 `  a1 Y       //原地不动1 }. [  H9 E; P+ s1 G" v
       nDestPos++;
: R, R2 d$ `5 t5 V       continue;
) y6 P' e( t1 e; N" ]9 {6 a      }
8 n# h$ Y- r. B0 k. K0 x      pInvSort->MoveItem(i,nDestPos);
( r& v( t0 |: u3 O1 Z. m      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ m+ i& r5 E' @2 o      Sleep(5);$ b/ H/ n9 ?+ R7 M
      //Error("移动 - %d->%d",nSrc,nDestPos);5 T+ b2 X+ K" `8 y. F
      nDestPos++;5 c. i5 t" Z. U6 s" w$ Z& S" W( D
     }  M" D& Q. F: ?# X' D
     //取第一个元素的信息
/ k, G" a& m7 A1 }     /*+ ?% h* j" s1 I+ K- V' W
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 V" X! `" J7 F/ y) y- X  j* H     {( Q0 ?. p  `5 V/ G6 L9 }
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ z5 u$ ]& k1 f6 q- u      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' L) Y2 _/ x2 B$ p* Z     }
9 Z* a; E" W( v     */
8 [/ s& B" I3 j- b! E% p, h    //////////////////////////////////////////////////////////////////////////
$ J) j4 e0 O+ a6 }. K$ f) u7 {    break;
0 K, d, a+ C1 W) @9 f   }3 L6 P2 x; M7 `5 N2 S
  } , M% z3 @3 M5 J) }1 \
}
) T! M" x9 b* m2 X$ K1 Sm_wndMenu.SetVisible(FALSE);* B, d, L; @$ W7 M8 n

& ?8 p! [7 @8 n$ N  ?--------------------------------------------------------------------------------------------------------
2 c3 @% s4 d5 |# Y( \搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. i$ j: N7 o/ w4 Z& i' r& L$ m{! J# U# B! h5 {
BaseMouseCursor();
8 `% O& g& v9 A- j/ N7 J1 G}( B& W/ j4 x! |
在其下添加:, Z3 K3 r9 ^& a! W0 v- z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 V+ m# U0 h5 o5 i" S{) H+ s/ G) r$ T. |! _1 g
m_wndMenu.DeleteAllMenu();2 D. }0 H3 X; B4 d( v/ i/ H  t
m_wndMenu.CreateMenu(this);
5 q  c& @8 ?* hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
  Z! E+ f: j4 s) b  O: z
% G8 c- R5 {6 m7 g+ u8 ^/ Tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ c( w3 ~+ q/ s6 r$ o
{
* N) g( R2 K$ g4 w, a0 _: k  //P以上级别才可以删除所有道具
6 w  T# h0 g9 i: J1 v" A) U4 e  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: [) j' Y/ i/ x: ~( ?- R}
+ W) b, B8 I7 p) x& I5 R- _+ R2 ?1 q/ gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 _1 N4 z3 ?, q  v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* x( `0 u( Y7 S  t2 lm_wndMenu.SetFocus();
2 V6 V" Q( J/ S. X; a: U1 m( A}
9 a- [3 b! g* o2 a4 p7 v; L------------------------------------------------------------------------------------------------------------0 c$ j. Y( c& x* O. p7 s
*************************
; ^% _- E+ ^0 n# a9 |( yWndField.h文件
( z% k' Z; r4 U% S( R*************************6 D- _" y) }) Y) Z, _
搜索:BOOL m_bReport;
4 t) \2 j2 d0 }0 q其后添加:( t0 t/ k# N& @& g4 }0 q3 |
CWndMenu m_wndMenu;% ^- e/ r; `' N  U3 |7 c7 J, X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 s! i: x9 f) s
其后添加:3 e- a  s* i0 N2 v3 `+ r; V; {
virtual void OnRButtonUp(UINT nFlags, CPoint point);
& v0 b$ h( _& N3 O( j' `
4 V) T$ g" G3 F1 }0 K# Y: W$ @2 e6 j6 ~" b

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 14:11 , Processed in 0.065095 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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