飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
- w9 O; N, d3 A5 k% ~搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ ]; H" v) Q( W5 l  x
+ V, r* L: y) F5 \
struct sItem
' M9 p- l- X# B& G/ T7 `{
; W5 S3 E% k" f$ u% g. `  E5 LDWORD dwId;
- r3 D* ^" p* P. V+ i- o" O0 CDWORD dwKind2;
' f3 y8 B' ^0 g( S; \+ JDWORD dwItemId;) C& I  X% A2 D6 M/ v
BYTE nIndex;
+ K$ ~* P( K0 k0 [sItem(){
* U. n* d1 o- y# n  dwId = dwKind2 = dwItemId = nIndex = 0;
9 E( q1 I2 X. n. k  U}
7 K+ |8 ?1 A8 H3 I' Jbool operator < (const sItem p2)
2 j2 P' y0 r6 K; X8 T! H{, u) `  B9 q) ~& U3 r2 M2 m$ T
  if (dwKind2 == p2.dwKind2)
. ^" F2 Z; I  F% w9 m- M5 r% ^  {2 R+ @: J$ ~( \  z. f2 B1 P# y) S
   return dwItemId < p2.dwItemId;
, p( Q) `' r$ u# a& l4 ?  }else{
# D* @0 z+ K5 T6 A3 H9 g' `% j6 q+ t   return dwKind2 < p2.dwKind2;
3 w' C; q4 ]$ n$ V9 ~! q  w, k, o  }
+ l# S% m8 K/ Y/ y}
' c6 p7 c/ p" i2 b5 L  \0 `- O};; r9 @1 A* S6 L# W: L" D$ }
class CInventorySort) y" ^7 ~8 `! c- t4 F
{
7 h) K6 ~" O4 p& c5 dpublic:
+ O- k' Y! _& ?& {) hCInventorySort()
/ @$ u; Z* H8 A: K5 H{( M. d) d1 ^5 s1 l
  m_dwPos = 0;
+ ?- ~# z. `5 |: w+ |}
" ^2 _1 E; Z: o6 A* B~CInventorySort(){}* K3 x9 r( u% n. l2 `! ^3 \
private:8 d6 v5 F3 a5 l) C) X
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% H& h1 h/ H$ `5 T
DWORD m_dwPos;2 N; r- {  m# Y/ z0 Y  {$ W3 g; j
public:' {' X4 I2 ?5 w+ N: A
void Add(BYTE nIndex)
  L! ?7 z6 M6 i  N{/ F, K+ Q6 `6 c8 D0 ^8 p" ^
  if (m_dwPos >= MAX_INVENTORY)
) Q7 j- X$ u: g3 E! C  {
# v: \- o5 z) a8 S/ Q( x   return;
% I/ e/ B4 i$ {1 ]& @  }
/ f" A# ]3 q* k* ]  m_Item[m_dwPos].nIndex = nIndex;
! l+ g7 p; D- k* t  m_Item[m_dwPos].dwId = m_dwPos;
) a( ]( ^/ j0 f3 ]- u  m_dwPos++;
# N* S  g8 F' j( V}  j% \: }9 G6 n/ S0 H
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 }( ]) \6 X% c4 U6 L
{
$ o% \# O- P+ v0 {6 `2 [8 {* Y  for (int i=0;i<MAX_INVENTORY;i++): Z1 G6 W: L! f7 _
  {
3 q4 C- x+ ~% ?, {' ]; h   if (m_Item.dwId == dwId): E& h5 I9 K! a% N3 Q$ e! }4 m
   {
2 p5 |$ s+ V( M# K% b    return m_Item.nIndex;  l* q& u7 D/ y
   }/ j/ `% X' z. Y  s
  }0 j% |, S5 h& P
  return 255;
  ?" n- w: v9 ?1 B1 U4 D}* Q2 w4 e; _( n: n, i2 F+ V) E% p: J
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# v% w. g, \( {, K  d7 R# R{
% U' e- d# Z- B: z( g) L. u  BYTE nTmp = 0;4 H2 _" `8 r3 @9 q* j
  bool bDest = false,bSrc = false;" c! _& R7 L' v5 C$ S8 Q' a
  for (int i=0;i<MAX_INVENTORY;i++): I% c3 p' L. W8 W' x- x9 U
  {" w0 y( E' Z0 x9 l: }
   if (dwSrcId == m_Item.dwId). Y8 K" P* b0 L4 J
   {
$ N% W6 ^& E2 i; _3 n    //id相等 则 改变对应的dest和src
, T1 R) a% L# b: T    nTmp = m_Item.nIndex;
) Y( U1 Y4 ^. z+ o1 ?    m_Item.nIndex = dest;
' L7 I6 F# E' a$ v   }0 t: W. C. a/ o0 i  w7 U+ p* ^
  }# `6 ~, \, I5 x8 L; ~
  //临时数据保存完毕,交换开始
" p! x$ z+ D* j, h9 d4 U( a: g  for (int i=0;i<MAX_INVENTORY;i++)
; m$ ?1 s' Z  K' ]/ c- q; m- A9 s  {
* v: Y" b5 {$ O   if (dest == m_Item.nIndex)/ t" p, {( w3 ^$ }! M' T
   {
/ F. s9 {# {4 g4 @( S/ s# y! N) p    //id相等 则 改变对应的dest和src
' P2 L8 N% M$ t( x9 ?% ^! t7 o    m_Item.nIndex = nTmp;! o$ _- C( A+ c3 E* {3 s2 U
   }8 h7 y% S8 k" q1 H3 p% q4 m4 I
  }
0 V( w; ~! C) G# Y$ d$ C5 D6 Z( ]( V}
0 Z/ d4 B8 \. t};
$ b" r2 @* Z$ f" g-------------------------------------------------------------------------
1 J1 @) P# }# T  s& @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 w5 x( c1 w% Z% \
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 D, a) T- }4 L' @紧靠其上添加:
+ Y3 @3 I8 U! [! B) d$ ^if( pWndBase == &m_wndMenu )
5 y. C  k/ U4 X; ?{
5 @( n- P* c8 o/ j  switch( nID ); x) N$ ?# o0 Q! j) C( j6 J6 v
  {
, m" _( Y! V) o+ m, h  case 2:
" G5 {: J6 L0 K4 e# ^   {
4 f+ O8 D0 G) P, C7 A" `    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 _! R! U% ]% @; h/ k0 [
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ @6 `# H  z$ v9 v
    {: E& b: d) v6 P9 g$ |4 Z
     break;# [# O$ s+ i$ J, q, q
    }9 ?' D, ]0 d  s: O7 X/ N' x
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* L- G% u$ E' q# t    {
" v1 c3 z: }  K$ [8 v8 u5 {- G     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: \2 r( P: N" d, G; D+ v; \
     if( !pItemElem )
: @" A. }1 G' A% p) L: {3 x      continue;- {! Z- }: b2 d1 _& X
     if(pItemElem->GetExtra() > 0)& M2 |6 b& m) ?( z, }/ O! H
      continue;
  A3 O* D. S& I0 Z: O8 L1 i/ G5 E: G     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 C+ U) T: Y7 [* O      continue;
( P2 T9 z, T/ P. A/ m1 |     if( g_pPlayer->IsUsing( pItemElem ) )
) [% t9 Q+ S, X6 Q      continue;7 F5 w4 Q) T! D% k6 U% Q6 a# h
     if( pItemElem->IsUndestructable() == TRUE )1 {( ~4 e" R) O1 o
     {! P5 M0 o* m- j$ G
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 _4 F% |; b$ z
      continue;# _& G! `  Z0 }# m1 ?1 Q$ V
     }
5 d- a$ z! Q# ?+ F$ ]# ^1 h     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 o9 u, m/ i# \. a; X+ @" c    }0 k, K1 M/ v, R; ^
    break;' f# g5 E! ~& M7 U) S5 c
   }% C' z: E  i" v
  case 1:8 V8 F5 \! Q& ~& X1 B. {
   {
  _% ^3 `0 T9 T7 v$ d7 |8 V    //整理背包. m; @& A# p/ j; {
    //////////////////////////////////////////////////////////////////////////
) Y3 ^1 |& x* i9 |/ P8 ^6 A) k% U, I    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );9 R' q5 K9 @+ z- [6 i/ G. ~
    //////////////////////////////////////////////////////////////////////////7 u( a. ~# E+ y. k; J0 e
    //////////////////////////////////////////////////////////////////////////
3 X/ [1 A% t; {$ d    CInventorySort* pInvSort = new CInventorySort;
( `% a. M. U5 ^& }) f8 [  I    vector <sItem> vItem;& f. ?  m! x2 L. y* u
    vItem.resize(MAX_INVENTORY);//初始化大小
/ K. g- g9 H) P     //////////////////////////////////////////////////////////////////////////3 H: g2 W+ q& X# ^; h
     //填充数据$ i# R: y' x( F3 j6 Q5 \
     for (int i=0;i<MAX_INVENTORY;i++)
# `1 q! R  R/ `; o4 \2 q     {" G4 C2 Y7 x( f) `- \' C7 o6 {. \7 [, f. p
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 W1 z1 ^9 o! R* p" X% f$ p
      if (!pItemElem)6 G( |* g7 Y  c, G$ V3 h
      {6 {8 T. _- Z6 l+ _+ G1 k8 K$ J
       vItem.dwKind2 = 0xffffffff;8 R) D( a5 k+ w4 S
       vItem.dwItemId = 0xffffffff;
* g/ n' m& O% F       vItem.nIndex = i;
+ S& q: Q# s/ X      }else {
/ ?% t; {, Y6 ^       ItemProp* pProp = pItemElem->GetProp();
/ U0 ^% a5 w9 _4 V+ L# m       vItem.dwKind2 = pProp->dwItemKind2;( s5 o, I) a8 _2 R
       vItem.dwItemId = pItemElem->m_dwItemId;1 r. p- m$ A) a* {
       vItem.nIndex = i;- y; H3 w0 ?7 j" n, Y, `
      }+ E2 [$ g/ d2 O5 }6 m7 c( W6 o
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 Y( h" c% J: I  g! U2 ~, i9 P; B  k0 e
     }( Z, i% j0 X4 N0 b; i
     //////////////////////////////////////////////////////////////////////////
+ s! f9 [. P7 O/ \- k' a, x4 c     sort(vItem.begin(),vItem.end());//排序
, |3 B4 L# J1 ?     //////////////////////////////////////////////////////////////////////////" G" O1 q1 a' I- H
     //交换/ b6 p) R+ u$ ?0 w
     for (size_t i=0;i<vItem.size();i++)
3 g0 `: T6 E9 o8 _! t- U     {
$ |% N: B9 A$ P' |7 P6 f      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
  ]" i  z2 Q3 L8 i" b# t6 N      pInvSort->Add(vItem.nIndex);  y; Z$ i0 g7 u/ l
     }
. S! c! Z  \. A6 `# m; D& |% F     BYTE nDestPos = 0;
5 w# K  R' g% i/ P8 J     for (int i=0;i<MAX_INVENTORY;i++)* K9 b% E, T, G* ]
     {
# s" v5 r! G! K' v7 R1 `      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 d1 R% R# a8 k
      if (pItemElem)
0 _& M' a$ t- }8 d6 {: z7 l      {
; i' R3 n) z8 F* f8 I/ M1 F       if (IsUsingItem(pItemElem))
% V* a6 r/ J1 t& j       {) Z$ Z! Q; ~- @% `. j
        //这个位置无法放2 A# ]7 ]9 Z+ l) }1 i3 ?
        nDestPos++;2 B- @) k. ?, M7 V1 p! v. @& s
       }
; Z. m$ }6 p5 U& b+ ?4 @      }
8 `4 d. k( f# ^* ^5 F) \9 ]      BYTE nSrc = pInvSort->GetItemSrc(i);; J6 Y0 ~& q# t* `! L5 f
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; b1 n1 F' w7 k0 k, M! B
      if (pItemElem)
3 Y& K$ I2 o$ _8 j" m3 G, t9 l      {
: Y, o" M/ p# q8 g2 q       if (IsUsingItem(pItemElem))
- J& R8 q4 @2 A0 r- j, p/ k9 x/ d       {
1 R6 J: s0 V( R! d        //这个道具无法移动,跳过+ ^1 z  ]( }6 Z3 @" X8 M
        continue;
- A' Z# v7 r, T2 t       }5 W+ \; F& s7 c3 F
      }else{- X. v' m/ @( ^+ D/ e( Q
       //空位置 不用动
1 T3 e2 N1 S/ `7 d% m       continue;
: _3 l& @: V! V2 a      }
* a4 v7 O" L& P' ^! j/ C. ~      //////////////////////////////////////////////////////////////////////////
7 e+ s& H6 A6 I4 ~, a      //开始移动
1 }+ [- R) Z7 l- S$ e      if (nSrc == nDestPos)% A9 e: l1 w$ j0 S, N2 F
      {" N) O4 A% Q  b, J  @3 u
       //原地不动
$ }$ ~: M  e: m: j' O3 n$ e0 h( `       nDestPos++;
4 l6 O/ u4 w" m% f9 R1 r       continue;
3 c. b3 T" ]2 s! y8 Z7 W* n      }
4 P. ]1 }6 q+ l* Q2 |) G. K      pInvSort->MoveItem(i,nDestPos);- O6 n; X. i# x0 m$ i% P
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- a4 W8 N7 z; Z" U7 K; h: h      Sleep(5);4 J& O  f( m. j1 N
      //Error("移动 - %d->%d",nSrc,nDestPos);
- g; e9 R) S$ M4 ]      nDestPos++;
4 j6 t) Q$ ?" S6 a6 G7 ^     }+ q# ]& t; G( g* S8 p6 C
     //取第一个元素的信息
, z6 e8 v' t! f% k/ P/ D     /*# d9 b5 @3 K$ h1 C
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 M0 Q+ b+ l' M+ z0 ^
     {
& G9 o/ k/ H7 z, k, f. p      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 F8 a0 P4 |. [+ A2 W4 A
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 n% u/ N! Z4 u( K1 K* K) J( c# t     }  t& w0 f) x% B6 W# n6 ?
     */' L( H% F) R  D, ?' ]. i; M: J( U
    //////////////////////////////////////////////////////////////////////////# Y+ M( T% p& p, p
    break;
1 i2 T7 g7 Y5 A. l9 [, M; q4 i   }
8 f. s' a) F. @9 Y* E) F' d  } 0 V/ g0 ?. [8 j, H3 f$ w
}# m+ U6 d/ u1 p; g0 \
m_wndMenu.SetVisible(FALSE);+ w$ A6 R9 C% ~& X* H2 O# e

' {$ m. S# a( ]% b. J--------------------------------------------------------------------------------------------------------
6 ?9 i- `: K& Z6 t( O% ^搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
" K7 `( l9 h& ^) b{
. s8 y) F9 o1 h# w1 `4 RBaseMouseCursor();
2 A- ^' ]0 M& e+ F2 l; A}' ?' t- k8 z0 Y  q! Z" _3 P
在其下添加:' e5 q% p3 t+ t! y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
( m3 C4 h" b4 P/ Q: Q{8 u& P7 F# e; |2 m. s. o
m_wndMenu.DeleteAllMenu();
+ |7 ]% {/ |) Q9 Am_wndMenu.CreateMenu(this);
) K4 k% v% ^( I. [m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
  P2 ]/ G5 `2 u. I! B* b
. ]/ X& S' K* t' s1 T1 hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ t7 ^, e7 |4 j( r* H- |
{# ?4 c- ~) h+ l
  //P以上级别才可以删除所有道具9 W9 r  T0 Q5 L- l
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- G3 L7 C* v$ ^, v% @- \* f
}. ?+ L; u& P! x& R3 @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ M* j8 V& x; D/ W( d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, W/ c9 b- ~) I) P4 S, m
m_wndMenu.SetFocus();
$ D/ C4 k( s- D+ A}2 `4 c) L4 S# \8 ]; r/ R
------------------------------------------------------------------------------------------------------------
1 Z: c, N$ d2 m4 g3 X# |* l*************************
% n/ R1 x( d) j" h' e4 q1 EWndField.h文件
6 U; g: B; R4 Q* p$ _7 k*************************
6 g# J& i0 @/ s' }搜索:BOOL m_bReport;
8 A0 O( G& U2 S# G其后添加:" ^' K) \' g& J* l
CWndMenu m_wndMenu;
6 w/ Q6 n5 Y+ I6 M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ z2 [( @( W3 t- m8 y
其后添加:0 M6 I! ?) v$ u0 Z& K3 W
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# K* C+ Q# s: \0 q, y& Q; q2 k4 j& c) b' Y
8 |7 V5 p+ R& V2 j* r, d

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-3 09:43 , Processed in 0.130624 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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