飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
  T8 I- C! V, J$ ~搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 {3 r, I4 N: _* q6 h' s" G8 J7 d4 S: ~5 m' Y8 H5 l! ]  s
struct sItem
% O* m0 u9 z/ H  L, {4 {{
% l& {' ~+ o4 O1 x5 XDWORD dwId;* ?( |4 ?4 S9 ]3 r% [- m
DWORD dwKind2;
# f5 E3 z. U) h6 vDWORD dwItemId;. F5 w2 ^+ ^; e; ?$ K+ F( t
BYTE nIndex;
6 T* a2 w! ^( S7 G, FsItem(){+ |/ u2 a+ l" h, O  A3 ?5 z
  dwId = dwKind2 = dwItemId = nIndex = 0;9 O8 P, T5 o2 S2 [; v
}5 ]' [; G. c# \! C
bool operator < (const sItem p2). @: q. ^3 o4 }( C& t. S* T
{5 v, O, ?5 C% N' l6 z( H5 @5 Z( q
  if (dwKind2 == p2.dwKind2)
3 x6 v) t( L0 ]  {/ z9 Q2 W  T" M! ~; ^
   return dwItemId < p2.dwItemId;
. H6 P# A, m( ?9 d9 i7 Z  }else{
3 L6 q$ h" Z2 P   return dwKind2 < p2.dwKind2;
! _# H- ]& c# R; p0 N7 Y) s- T  }
2 s) S+ `0 N; e5 o/ j% ~8 X' b}& Z6 \  B( b/ B6 v
};: R7 I' a0 e$ ]' _, ?- k. [" h
class CInventorySort
- ?  {; d. r8 Q8 c& t{. V# I. [7 l1 s/ C$ l$ y; o* P
public:
" B9 c3 M6 j* y6 C3 hCInventorySort()
* I- ?# o' G- J0 V2 s$ q- T& v: T# ?{
$ h" ^& P4 J. V  w  m_dwPos = 0;( a& T8 p# B0 G# l8 U8 I
}: y) g* d( ^% R( V+ B
~CInventorySort(){}
2 W! s: @0 t, w- R. b2 bprivate:
' f, J3 b3 V, @7 m+ @0 EsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# N4 T( C7 e" [9 g& r8 i, R% t
DWORD m_dwPos;
) ?- @  l1 H8 v3 b8 O5 opublic:
0 i& M* N1 u# Uvoid Add(BYTE nIndex)) e1 S3 y4 i  n5 \3 Y
{8 _0 @, D: q7 q7 T9 u6 Z
  if (m_dwPos >= MAX_INVENTORY)
6 m6 `% Z  W$ ~5 J' b: ~+ K  {. m5 ]) \, C% U
   return;: e* L+ @+ w5 f5 S/ b* o8 _0 ?: ?
  }
: M  S1 j  @% H6 \' e# {; ]/ b  m_Item[m_dwPos].nIndex = nIndex;
6 E& Z3 m6 {" _7 K5 W$ I  m_Item[m_dwPos].dwId = m_dwPos;
0 M# h9 N7 C2 O; Y$ t  m_dwPos++;
* r- y4 y8 I& X, A$ C5 X}% g3 U' b  D& D. B* E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列# f. Q0 c3 `) ~
{3 u0 U( L& U1 D+ P  G
  for (int i=0;i<MAX_INVENTORY;i++): D/ I. U2 W$ E! w8 {0 m' {& U2 s
  {) L3 [. F* k0 q; a8 A
   if (m_Item.dwId == dwId)& W# U$ U8 V) ^" k  q
   {( T% m# G# n) J# W' H; R) I
    return m_Item.nIndex;
: ^) d' i' H& f% K9 N   }1 I. P- Z! j$ w7 _
  }
5 n. {; o+ ?; W  [: C  return 255;& \1 J% e# E4 Z! m/ Y/ O4 I
}' g7 q: Z+ t) [5 }% d9 w1 F
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ z/ k+ W: s5 f" W7 T
{
; I7 j7 j! W& |& t1 e  BYTE nTmp = 0;
( ~9 d* p$ H4 w6 Z0 U  bool bDest = false,bSrc = false;3 P; Z; |. _$ p# N  H0 _
  for (int i=0;i<MAX_INVENTORY;i++)" G( S$ @6 k* ^# ?  q5 k. o
  {
% f  m) K% b" h' ~  E# e6 l- [   if (dwSrcId == m_Item.dwId)- {9 o1 Z: ~. t8 b
   {
5 Q+ D! x' o9 R7 z: l    //id相等 则 改变对应的dest和src  Z/ [! R( N+ E7 u; n' [
    nTmp = m_Item.nIndex;3 F" W7 I& A% L9 e0 {2 }
    m_Item.nIndex = dest;/ n; v  B. K  ^! j2 O- D$ ]7 `) q
   }! \* Q4 B  v" L( J
  }
* {; y* |% W( I/ E* Z" h  //临时数据保存完毕,交换开始6 w. Q# @$ J3 `: E1 u
  for (int i=0;i<MAX_INVENTORY;i++); ]% W7 q. Z5 `9 S" t" _: G" r8 a0 r
  {
% l1 y/ D- f; j   if (dest == m_Item.nIndex)
* L$ A! t" x, \* Q: R   {/ ^9 D* n$ v6 ]
    //id相等 则 改变对应的dest和src
! H; d; x; w! d, t7 P3 i    m_Item.nIndex = nTmp;" `5 _5 p/ x& h  W
   }
5 p) _( f. D4 `( Z& B# G1 {  }2 V- q* j$ v0 f7 K( i) J
}
! G! |7 b. W( w; {, J' V};: b2 p! c3 p& c8 U% w$ s. W
-------------------------------------------------------------------------8 ?$ U$ f2 L5 v/ ~; n: @! |1 B
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 G. H: [3 V9 o) a7 V9 ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. L2 A0 {) A! ^; w紧靠其上添加:
" u3 b& w5 T& X4 A: Tif( pWndBase == &m_wndMenu )
2 F# d8 Q: A) c" l4 q{( o- ~* t! ^( Z
  switch( nID )% G. Q! p& E3 S: W
  {# [- _; D+ e: T! g/ _' |
  case 2:, p, Y8 T+ P6 b1 ~: u
   {
2 o" u2 t8 F4 i. X$ g0 F5 g* q2 s    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ u2 Z! C2 X& r) {+ D    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" m' M4 }/ T# p$ }% v0 t
    {
# O) L' e) {+ O" J     break;4 v/ T. l# m# {+ S* T& p
    }* E9 g1 F( {7 d: R' ?& C
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& X; B8 F. ^' l6 ~7 ~3 ?
    {' t/ V* U$ \9 m/ s" u5 l
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ s. l: @2 ^- n+ {& x- x     if( !pItemElem ), A7 f0 l$ i( k
      continue;, \) ]/ ], G# Q! z7 m
     if(pItemElem->GetExtra() > 0)
" S% L2 ~( z8 ~  H1 c      continue;
3 w/ E" O$ Z+ S  L     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' E6 y0 f/ U2 a; y! c9 F! B7 k0 E      continue;% y0 y9 K. M4 X1 k
     if( g_pPlayer->IsUsing( pItemElem ) )
; S3 q7 t9 R; f* o/ Q7 l6 f      continue;
* n; i8 y( `8 o. H! m9 b1 n$ Q     if( pItemElem->IsUndestructable() == TRUE )
9 M% i8 t9 N5 O& E, p% u5 U     {/ w  Z5 L# @/ R. V3 G
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) l7 t; }, Z9 ]* B      continue;: ~4 g# n5 S% }7 ]0 N  L0 c
     }7 X6 \! p1 t7 Q$ W# j: g% t
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 K% D' O8 X3 Z& p" Q# u" ]2 M: j
    }
% l/ a; R9 f& p7 K5 r0 W: w6 H5 z# Y    break;
7 A% o6 e; S2 o) F$ `2 L   }
; ^1 X% a  e% \, U; U  case 1:
, w+ g7 a% u* V. }6 @1 w, c" V   {& D. r0 ^% {: M2 H) R" k
    //整理背包- p6 o' h9 t5 T+ m% i
    //////////////////////////////////////////////////////////////////////////
3 }$ @5 _' l, C4 m, X% h    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 P* m4 p/ @3 [, d- ?( c    //////////////////////////////////////////////////////////////////////////
# C2 i6 e8 t1 x2 Q$ m& K    //////////////////////////////////////////////////////////////////////////( V0 u$ U, z) n; W& F
    CInventorySort* pInvSort = new CInventorySort;8 J( `, c4 ]# o; q% [2 d
    vector <sItem> vItem;( v0 {$ H6 ?0 }5 b( L! ]
    vItem.resize(MAX_INVENTORY);//初始化大小3 t+ I& S" D0 {* U8 T
     //////////////////////////////////////////////////////////////////////////0 R/ {0 \; `( J+ D" R5 w5 V" G
     //填充数据- E$ t- \6 }- N
     for (int i=0;i<MAX_INVENTORY;i++)
$ Z6 R: k3 L6 C) a* I     {
! z, {* l" }, s) j5 J/ A) ?; `      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);  w9 E; ^# C6 Y- f
      if (!pItemElem)
. O) W4 _' a5 d2 A+ M      {
- H" [+ D  S' G  M7 G       vItem.dwKind2 = 0xffffffff;: C( R8 Q; l9 ~( a- J
       vItem.dwItemId = 0xffffffff;3 }9 g8 M9 v2 \* {
       vItem.nIndex = i;
& P! i- Q( X: P- v& f8 ?      }else {
  C: h9 ?5 J8 }+ f       ItemProp* pProp = pItemElem->GetProp();/ Y5 i/ w3 [; i6 u0 r
       vItem.dwKind2 = pProp->dwItemKind2;
; M! }8 {8 I( J8 P       vItem.dwItemId = pItemElem->m_dwItemId;
% G1 O# U1 l! g# W' z' T# u1 ^       vItem.nIndex = i;" p8 C8 j  i0 A$ H& T! v* m
      }" u* U) b' v% H1 F8 f- O
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( O0 D6 l0 c& ?2 Q- r' d     }
$ `* E! l$ f9 G     //////////////////////////////////////////////////////////////////////////* V& R& q" x8 n5 G6 N' g
     sort(vItem.begin(),vItem.end());//排序
. h- V! K7 \' g9 n     //////////////////////////////////////////////////////////////////////////
' w+ b3 t" K) ]" m% ^  T+ R     //交换  K( m+ M$ A$ B) Z% `
     for (size_t i=0;i<vItem.size();i++)1 H3 w0 I: J; |; L
     {
" P8 k) }& A$ |, s6 ^# @      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, u9 C$ L0 l. ^% G5 o7 M' l6 P
      pInvSort->Add(vItem.nIndex);
) H) p( W, G0 g' T7 f7 N! t     }
5 k  O- u, \( a     BYTE nDestPos = 0;/ [! J2 Z; k5 V7 a% P
     for (int i=0;i<MAX_INVENTORY;i++)
- B" e5 s+ ~2 |" R     {5 W; i: d) E: G6 e6 }9 f& M5 Y
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 G+ s, f8 ?  b+ I; p
      if (pItemElem)" ?6 j) G% g  G
      {! [: Z+ ^( U, q& F( {0 P
       if (IsUsingItem(pItemElem))
/ S3 A1 H! x1 z& N0 H5 `. q       {
4 p2 O) \% r. n2 |6 e7 e        //这个位置无法放, r3 _: |9 V, U+ @$ U4 N$ O' F- w) C. g
        nDestPos++;
; R& y, {  ~& V       }
$ v7 R2 b6 `8 q; k      }
3 u  l# l( Z8 y1 F9 z) a2 i5 q      BYTE nSrc = pInvSort->GetItemSrc(i);
! W0 R# C6 A0 X      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) W) _+ ]" P$ C& }  l; ~0 a
      if (pItemElem): P" q: P# W- t* _1 S
      {0 l& O, j9 k8 }* B* [
       if (IsUsingItem(pItemElem))
, b/ a0 j" e7 s       {( O7 b; u; e  T; j
        //这个道具无法移动,跳过6 y  E1 H( ?; _# F; a4 L
        continue;
! w7 q: e  k! E5 g9 N       }
% b/ i# t" ]/ s: ^      }else{5 I' Z4 d7 c  o/ k; a  u6 a$ J
       //空位置 不用动0 P9 c5 R- v* D9 a" s6 i/ N# `, w
       continue;
8 u/ W& c# h6 C6 q) x4 S( |2 [      }7 A9 x/ }7 Z7 {; h! G- P! A" z
      //////////////////////////////////////////////////////////////////////////
2 }' }% @' d8 K0 W6 }5 o! Y      //开始移动
# D2 s1 C# Q# [      if (nSrc == nDestPos)
- i( G$ a8 M1 S* |& w1 i& o      {- p  d/ s; T% [1 J, G1 w. ]
       //原地不动+ F; U. c1 W" A  h
       nDestPos++;
- r6 f4 M& Z. G: u) E9 h4 H       continue;' g8 f; g& Y" J5 T- L+ y5 [" t
      }
* @, Q. ^. W- f. Y9 C% `      pInvSort->MoveItem(i,nDestPos);
: s% x( @; O) i+ q- g      g_DPlay.SendMoveItem(0,nSrc,nDestPos);* Y" v, [" p7 ?( {2 s
      Sleep(5);2 X3 V0 e' j0 s, @- [
      //Error("移动 - %d->%d",nSrc,nDestPos);5 M3 o# G& ]) _% G
      nDestPos++;( r6 c; t9 s" _! w* ^
     }! B- ^$ J0 {1 F# f9 l% o* X$ u
     //取第一个元素的信息# M: ?0 N$ ]3 T  S4 @' w
     /*
$ v# z7 B' ~' {; Y* D5 Q3 W! ~     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), t& s6 d' S2 p$ e7 o* G
     {: m2 r! a, i- N2 \; t) e) H
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. {( U( ]: T. c$ i% h- X: j; s      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);) T5 G/ \0 V0 s  S
     }% u3 l6 c' P; c( \' J# q& C
     */$ Q, Q( q, g: q& \& K
    //////////////////////////////////////////////////////////////////////////1 v8 q1 _$ R4 Z9 `- |, u) Q
    break;
! h9 U6 J& r, U2 R- u   }
6 a% g9 j7 F8 Q  } ! U& J; ^* F, d# }! Y/ W
}
4 Q$ R. [" A% l/ am_wndMenu.SetVisible(FALSE);& a5 D/ v: J* D; z' o+ R  ]' j8 F) |2 e
* i# s6 ?/ g$ I* S/ u9 v0 H5 P
--------------------------------------------------------------------------------------------------------
& O4 k0 }" P" ?$ }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" W6 V0 F. a/ [  c" N
{; j" W, k! |; }" b' Z5 I1 ?6 D
BaseMouseCursor();  D& F9 G0 ~4 n; [& w2 r
}( K# @; A( ^/ m0 V- K# S( Q- ]9 O5 |
在其下添加:. O- g6 m* E: _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 ]7 b7 |; \/ m/ h, S
{
" q, @# M' W- c4 X5 r: Rm_wndMenu.DeleteAllMenu();
* Q( @) c5 w% s( a) G$ Lm_wndMenu.CreateMenu(this);# s% L' `! K: x4 r) P" p! O: Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
8 v5 p/ p3 {9 f- [2 a1 H1 T% }: S/ X& i; v5 Z# w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( N/ [" I% v4 K! q* |6 q; F2 o{
- m9 t6 i# {& P( g3 `+ q* J  //P以上级别才可以删除所有道具
# a6 O5 s! j$ o) @* L8 i& o8 T; u  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! x: u, ^; ?( T- ?' J2 h! U6 `4 [8 @}
3 {* d: S& `! u9 T- cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! C9 v3 @2 \& Y) B, h
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! {' r; U- N6 D/ i% G
m_wndMenu.SetFocus();
7 H, P9 N7 G+ t* M; W1 k& M9 f}. ^) g+ h$ j, S8 L; y& l4 n
------------------------------------------------------------------------------------------------------------$ X+ e7 z' V) d. O4 C( K# Y
*************************: f/ l- a4 I# L
WndField.h文件: N+ _3 z) g8 E
*************************
' f7 L4 t/ Q' I* D' E6 \7 {  c搜索:BOOL m_bReport;5 u' N4 N/ b% e, V( O6 W
其后添加:
  }: S  r# y  VCWndMenu m_wndMenu;" O  R5 T5 B( b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& X; g; {9 l7 r% E% X其后添加:
+ e% o: y1 E3 [+ K% w% Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 |3 F8 l: |: S$ w* o, u7 @
8 g9 K7 [$ B5 Z8 t+ Q& l  i2 K: y" N: i* I9 R4 K

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 13:40 , Processed in 0.064647 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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