飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
1 s+ ~/ ~9 u4 ]$ j+ S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' B9 o- A4 I; g2 y1 X4 n8 `  w  ^% s5 t. g9 [# Z" V
struct sItem  z7 I% N' D+ B& @) X! n7 \$ K) u
{
. B: P" N8 j9 _! W: JDWORD dwId;
/ l# B1 z7 r7 N- GDWORD dwKind2;
; j# G, U# g7 k0 `DWORD dwItemId;( I! K- X$ _3 b0 W9 u, A
BYTE nIndex;
+ `$ h/ w# b4 ?- a: P1 ]sItem(){
6 R4 F& Q" ]9 o: e: E4 o; S+ \9 h  dwId = dwKind2 = dwItemId = nIndex = 0;
; [; ]+ e$ T& V+ n}6 U& P9 K7 H! {3 G! c. y
bool operator < (const sItem p2)
0 S, j, \5 @& j8 h) H9 K$ j8 {8 X, Y{
; O; X' M# H7 d& H  if (dwKind2 == p2.dwKind2)
, v( n3 u( s2 n1 c8 G2 ~& r  {
! z* ?9 L7 u( \( w( l7 n2 W   return dwItemId < p2.dwItemId;
  }* H1 a* y% W! h  }else{
, |6 k, f- L0 _" o  c  _   return dwKind2 < p2.dwKind2;
3 G" Q# @. {8 A  }2 o( Z2 g' {. ?% k
}
9 V& T, \4 L, {5 m" f};
$ }' D; q" |8 G& fclass CInventorySort) P+ Y) _' g8 J& ~' Y
{# p+ R, \/ M( D. P! }' i( }
public:
2 `) Q7 d% V/ R1 v* vCInventorySort()
# g8 s! Q: S4 i2 }{! `* ^' u; [" R# {
  m_dwPos = 0;% T, \6 r+ o* U
}
+ p0 F( [' ~6 ~) ]! e~CInventorySort(){}
8 N3 \2 I% k! F8 k- lprivate:/ t& r7 D- }7 C
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 |& {0 ?5 }- F6 z1 u0 N( ODWORD m_dwPos;
' k* Y% i8 d4 e" _2 D3 Opublic:/ Q1 k" V0 P, {" @5 a6 Z- ]- P
void Add(BYTE nIndex)
' m8 G# L1 q2 B2 Y, X{
( n0 t& B/ g; Q' N  if (m_dwPos >= MAX_INVENTORY)
+ X  H& Z, f2 v) d  {
* _* |, \( ~' n6 a: {8 O5 M   return;
! E7 W/ t- Q4 e2 ?. Q1 n  }
/ e4 _7 ]7 n) @* b7 S/ S. i  m_Item[m_dwPos].nIndex = nIndex;
  \9 c* m+ t4 v  P  m_Item[m_dwPos].dwId = m_dwPos;
6 Y) H2 e; H+ ^) J3 _' K9 p  h2 Q  m_dwPos++;
" f7 Y) V3 s# \5 W& d3 X& Q}
3 h7 q8 m% ^7 v4 I4 d' yBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' E' q8 ^0 T4 x8 E; p: ^9 n{
8 x1 j5 x) Y7 {9 a$ E  for (int i=0;i<MAX_INVENTORY;i++)
, i; G3 P* v+ x+ ~6 r  G8 x" J  {; v7 g# {7 D" `- i5 W
   if (m_Item.dwId == dwId)' W5 s; a, }; A
   {3 J3 }8 b* s* O, K" l$ |7 q; o9 K
    return m_Item.nIndex;
# N" o; h' }8 a9 A   }
+ l8 h$ m( `. A) U7 N6 a  }" ^( n2 m  a$ `$ K
  return 255;
3 Y: Q+ ?$ {& G& f' `. k% A}9 g' v# p, N6 Q5 K7 G! r! z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ t6 [0 k. S* Y7 c; f8 i- ?
{7 O  u* `6 {- y' u+ N
  BYTE nTmp = 0;0 p& t" n* t8 v3 \6 ~5 `7 A% T3 b
  bool bDest = false,bSrc = false;: i" D4 H$ ^* p2 a# q/ E. X
  for (int i=0;i<MAX_INVENTORY;i++)* H" y0 }( ]3 H7 t1 Y# ?2 ^5 {3 ?
  {- T/ H$ q# @+ Q
   if (dwSrcId == m_Item.dwId)
0 n1 d) \+ n  y7 y* _   {
" R. u0 }! c, Z: z) s! G% D: Z    //id相等 则 改变对应的dest和src
, L( y& k) P" i; s    nTmp = m_Item.nIndex;! {6 G1 B5 ?) B" ?$ F/ R
    m_Item.nIndex = dest;
% {( f, |" ~# M   }2 x9 I7 M& o3 _& v1 ~0 ~
  }+ {) J0 {) P* q# X* \1 W7 ]
  //临时数据保存完毕,交换开始
5 p5 c4 Y3 k2 v1 H  for (int i=0;i<MAX_INVENTORY;i++), L4 x2 E' V& K# M7 Y6 t
  {
: W/ {: V3 n& H) r# }   if (dest == m_Item.nIndex)2 ?+ ?$ B* L2 v: \
   {
) k3 Y) U% n) J% T5 s- Y6 O    //id相等 则 改变对应的dest和src$ P, I, n% H$ q+ U+ S
    m_Item.nIndex = nTmp;
$ o1 P, H0 d4 V" f6 h; S  [   }2 i1 X+ ^* C3 x( d0 h
  }6 O# g1 r6 I, b" s2 X3 O
}
5 o: d! N0 s7 R1 @3 g! q};
( ]0 z* k% U" e; Q* ~1 T$ d-------------------------------------------------------------------------
5 Y& K5 k% Z3 z5 j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! a/ w, X3 b% }( c
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; L1 A0 h+ h5 j. n; a/ C; L紧靠其上添加:
. ^6 q+ o# _7 b- x* aif( pWndBase == &m_wndMenu )
& b3 r8 A, W5 I( D1 |9 V{& X! g* Q# g1 \8 ^
  switch( nID )
  A7 m" n+ ^* x( J% S  {
2 f3 X8 a0 R/ F2 M" w5 X  case 2:" Q) H. e; A: J* K
   {& M( m- z5 Z. e4 w3 r2 l" C. y0 X
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- H* v; ]  h& i    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ A4 H+ \$ ], v$ ?$ f# P/ ~0 }0 a    {
1 I* A, \3 C0 g0 q0 w; B     break;
+ z' @$ d& E" S$ U& A* M    }
6 q! U0 g6 Z( U# v( t! x! j    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 R5 H3 M2 O3 E    {
. Q& w, i! G' }$ [; j4 b     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" N* G* S; W8 R. P. U% J
     if( !pItemElem )
2 [. N  X+ T8 k0 f. p* Q3 S0 K      continue;; M1 ?$ f/ y+ A7 }. U# R
     if(pItemElem->GetExtra() > 0)- b0 s  ~. A- O) l8 G
      continue;
7 J1 R0 z; ]  Y     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' l" T+ I4 g0 ^/ r, w% o1 n
      continue;/ W* ?: h8 r" t, p- w
     if( g_pPlayer->IsUsing( pItemElem ) )7 R8 b9 Q7 @  ^( d' Z& Q
      continue;
; O, x; z. e8 S6 e" v5 u     if( pItemElem->IsUndestructable() == TRUE )
0 T# a/ {& \+ ~- ]9 n  v3 g' i( A     {. L/ g4 D1 l7 o( T3 g) V4 p' C
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 x. Y7 ^7 w; ]! l' H' t3 l7 ?      continue;
/ e7 g& |) L* P/ E     }. x& c  A' |/ C- ], }$ [0 q* }
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! H8 P8 [4 H: V- Z
    }
1 J; X" S, R5 P4 R2 r2 g    break;
' u* S+ g' ~4 W; m$ ]$ B7 ^   }) ~- x$ h4 `5 l7 n/ F
  case 1:# a4 X0 B, R* z* |
   {
2 X1 i$ b2 Y# K; k5 F    //整理背包
. [* k# ]/ T! V3 \5 Q% p    //////////////////////////////////////////////////////////////////////////; E7 F+ I- t% X: }7 x* A: W
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 `& s0 t' M: d; }# G. B# P  [" X    //////////////////////////////////////////////////////////////////////////
9 r) E' k- ]8 B5 ?. l" U    //////////////////////////////////////////////////////////////////////////* h2 N2 J" q& G3 J; C
    CInventorySort* pInvSort = new CInventorySort;
4 L% r1 x8 _1 f5 M* ^8 s0 F    vector <sItem> vItem;
) X& Z) C* k9 h& s1 L9 z9 o- y    vItem.resize(MAX_INVENTORY);//初始化大小
$ j3 \) w: d: Y0 X4 M% l     //////////////////////////////////////////////////////////////////////////
* F) K% c' f, _) I/ m8 z* V& ?     //填充数据' G  J8 _' w$ B7 I6 T, ^
     for (int i=0;i<MAX_INVENTORY;i++)
( U+ W! B0 ]- h: ]0 H     {3 Z3 c# x8 @$ T3 X6 Q8 s4 Y
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 D) H+ ^' N- w4 E, R" t      if (!pItemElem)9 ^; [3 z. q* z
      {+ _, `" F1 ^. X
       vItem.dwKind2 = 0xffffffff;7 h* Z6 m) \% i$ n/ b1 l8 D- ]
       vItem.dwItemId = 0xffffffff;0 m" \" G" M  l' k! M3 N$ |9 @
       vItem.nIndex = i;" S, E+ H; F0 F# m! I! k5 A
      }else {: [. l0 q6 a3 n! H7 x" e
       ItemProp* pProp = pItemElem->GetProp();
. f! K! E( C5 l7 i4 J" M/ D       vItem.dwKind2 = pProp->dwItemKind2;- [' S' H7 w6 i1 {
       vItem.dwItemId = pItemElem->m_dwItemId;
7 _0 F: l% F1 k* Q( Y' }       vItem.nIndex = i;
5 D/ J0 w( N5 l/ T  Y      }# p* z9 D6 h1 b5 H" @2 K, p
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& G, U: {4 l* I" H
     }! c& G, i9 b! N. q, r5 O8 s
     //////////////////////////////////////////////////////////////////////////" i* e; \1 }2 \! ^6 y
     sort(vItem.begin(),vItem.end());//排序9 c  s, M3 q+ z3 j4 x% X
     //////////////////////////////////////////////////////////////////////////
1 F( v" _, ~# w2 W3 C2 c     //交换1 X0 t$ A+ ?" u% P( _' w. ~
     for (size_t i=0;i<vItem.size();i++)
+ ~5 c. u- V" T2 J8 n4 t4 M     {
# `' u: q, H0 i5 e: y& |/ N* c      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 ?0 r" e1 R3 Q
      pInvSort->Add(vItem.nIndex);2 d' t4 u  ^" Q3 @, P
     }
+ I* r; r6 a# D     BYTE nDestPos = 0;2 Z; N4 w: m5 a' A/ A2 T/ {$ `
     for (int i=0;i<MAX_INVENTORY;i++)$ R5 E2 F( p# ]/ H; x( ]
     {
$ W  P2 E+ x1 \$ K1 f      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. k; U" }! [3 N  z+ ~+ S2 n
      if (pItemElem)
! i  Z+ A! t* ?  f! @8 l6 a, g      {( W3 y# Z- j9 Z
       if (IsUsingItem(pItemElem)), H3 T, `, `& i: T5 u" o$ h& |& v
       {9 j/ d: _* T$ u: n
        //这个位置无法放# n# @* J2 k- {2 {) l; a  B. D, D
        nDestPos++;
* D5 d; [: g& ^0 K& |       }
# n" O" Y% U! b8 n5 a7 v2 N9 `      }- l" I, u: L; m: p, ?) b# a
      BYTE nSrc = pInvSort->GetItemSrc(i);) T# T: w0 E6 U* u* T
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ ?( J* q, O" Y( f# H( s9 Z. S      if (pItemElem)
8 m7 q( k( Y. B' p* |6 i. z% p      {
: A% P8 T3 E( g: ]2 M$ @       if (IsUsingItem(pItemElem))
- }( r7 l( [: Z+ L3 N       {
* {: `% S- N1 }& H& s0 L( o9 T' Q        //这个道具无法移动,跳过
1 b) x% N0 h* r" T        continue;# ~" g/ B! p& C, d3 P7 D& W
       }0 f+ Z0 K! m+ O+ ]# E8 X6 W. z
      }else{+ i; y8 n$ U% a$ ~
       //空位置 不用动9 i  M1 |" G0 V
       continue;$ F) B& c" E2 P8 o
      }
$ u( f7 J2 o7 }: [) P: o2 E2 f9 Z      //////////////////////////////////////////////////////////////////////////) H2 {' |6 q4 S% m! S
      //开始移动* M9 \& |& z. t
      if (nSrc == nDestPos)
! g' d' A8 A1 p' K      {# z/ X# l3 R+ x: V" k
       //原地不动# ?- j/ F" m" V
       nDestPos++;
2 ]- u$ L; z: n7 R       continue;
% w: N7 M! d, T/ q      }7 A- e2 K" ~- ?$ H& u
      pInvSort->MoveItem(i,nDestPos);
( X& F1 e$ A* u      g_DPlay.SendMoveItem(0,nSrc,nDestPos);: j+ v$ K3 {: V& a- `
      Sleep(5);7 n0 I! _6 J. C
      //Error("移动 - %d->%d",nSrc,nDestPos);
4 \8 I! \7 K  M# y6 }      nDestPos++;5 G, R% z6 G5 n5 z4 s7 O- o  O& `
     }
) `* x- b$ i& _1 E     //取第一个元素的信息1 ~1 ^* X; d2 X
     /*
/ A' Y& e. E2 y# p     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): W8 W2 ?' R. t! k" I
     {: G; q' N' A/ B  l
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 g4 @- H) h0 L      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ Y' Y" B0 X  |; o4 e6 @) ^0 r
     }
8 ?/ N5 t5 A$ I% w2 o; @) ?% g/ `     *// S4 ~( E& L3 N+ L- D7 G
    //////////////////////////////////////////////////////////////////////////5 {6 R! c8 L: ?4 n2 K- {, t
    break;
3 a& _. _* W6 x0 n. T0 a$ C1 K4 _   }
7 n; Q! J% T& K  }
( U2 y* a5 {+ ^. d5 u: N3 d" S}
0 D0 w* j3 Y. D% y+ z# }9 Q% l. ~m_wndMenu.SetVisible(FALSE);1 O9 F+ G# D, i4 K) d% ~

# \( R4 }- v3 Z0 H( H. t6 a--------------------------------------------------------------------------------------------------------) w) f( |# G0 ^( H# m& u" `" \; z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): n. D3 d' ~, _" E
{/ S9 D% }/ I6 w. k9 c1 F
BaseMouseCursor();
; L/ j- S4 E5 U8 R+ R" n) q" Q+ n( C}
3 h$ T6 A. o; _+ E在其下添加:
4 A/ o5 {% n7 ^+ R7 Cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 B( Z: O: g/ u{
( e1 Z; D  E' S' p+ {: Lm_wndMenu.DeleteAllMenu();
9 r" f: G* x: A. Y2 Mm_wndMenu.CreateMenu(this);. f& f8 r- D; W! F9 ^. B
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- r& S. ~! O$ Y; p1 s

' s( |3 l+ B- t3 E% bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 X7 i6 n1 H1 \4 ?4 N
{  ^3 z7 G$ C) A6 j
  //P以上级别才可以删除所有道具
, `( \% k9 }+ K5 F! a; O  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# s. J& j$ J) W# n; t0 [' H( o3 v: J
}
; X2 @, D+ {  B7 f# Sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 I) p/ Y  h+ m9 d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
  Z* n" _% M: n2 O" q2 m8 k1 `. P6 dm_wndMenu.SetFocus();: [, l5 I  J( o3 b+ r
}! J2 I) F8 G" i8 N/ Z3 ?2 P
------------------------------------------------------------------------------------------------------------1 z6 c) y6 ]" j* f3 }, @3 J* k
*************************/ D6 i7 a6 m7 ]2 b8 F5 u& I
WndField.h文件
8 t' t& O" _  U7 F! W4 `' p- Y*************************2 A5 W+ l! j9 g; ~
搜索:BOOL m_bReport;  L8 h8 R6 ^  |$ E6 q
其后添加:, d$ e8 l$ f1 J
CWndMenu m_wndMenu;
% t( i% G" E9 N& S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! q% x9 V5 N4 N# y: S& b
其后添加:7 v. o: f# I; |5 J5 `
virtual void OnRButtonUp(UINT nFlags, CPoint point);
( e6 K  i0 r4 [2 c$ T
% ?, U# B; n  f# V7 e+ h: _. Y7 D9 w8 I8 T# Q, m

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 00:17 , Processed in 0.066432 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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