飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1064

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1064
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 d9 p* X) Q9 x* l5 _6 g* K4 s搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); D) e2 n/ G  R, m! n+ R4 ~
! Q6 u( Q' W9 x( o3 R1 j2 F
struct sItem
' d, S' X" X, w2 G{/ r6 j0 ?$ X' {8 u- e: ]1 P5 `) c, {
DWORD dwId;3 t4 V8 h1 V& P4 N
DWORD dwKind2;3 ~3 p. |6 G. h: [, m
DWORD dwItemId;* J! l& |6 O7 }+ M/ L
BYTE nIndex;9 m+ c' |/ B$ n$ |; [
sItem(){" u- ~, O: R3 p& E
  dwId = dwKind2 = dwItemId = nIndex = 0;
  S7 T( l" x: S. M1 J0 S; X# P6 f}+ N9 e3 e; ?- s/ [
bool operator < (const sItem p2)
1 i# f! s- R! \8 W! `8 k{
' q& r1 I4 B- r  if (dwKind2 == p2.dwKind2)
! M4 q% v. J! E8 {$ v  {
: {; _. A  E. h( o   return dwItemId < p2.dwItemId;6 J4 P1 n$ z. G, D6 [1 n' K' u
  }else{* O1 B) X4 {& U- ~, v8 `
   return dwKind2 < p2.dwKind2;
/ K. z: P- m+ I( Q1 U+ B: J  }. ~0 f9 y. K- x) c& ?5 j" z2 O: [; J3 q6 l
}) \, |8 `! c$ k
};
# I7 n7 l+ ^% X6 d: M9 t" n+ d7 hclass CInventorySort
8 _! V. S# U) Q4 J7 D{, u$ g+ E9 k- s% S8 d# E, G% {5 W
public:
8 m$ w" b4 o: A, d  l+ o8 qCInventorySort()3 L  b0 O8 w. E* I3 Y: u
{  B6 v1 y8 ^8 u. B
  m_dwPos = 0;
- p4 |6 u6 g  I* P2 o" D; s( M  a2 }}. S: j5 o" r5 V# I3 M0 |
~CInventorySort(){}+ G& e0 D# m9 W1 k4 a
private:
$ G. m  k# q+ Q0 c' C) X, qsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 O  _0 x* R% Y6 T
DWORD m_dwPos;6 r2 D: ]. I" J9 y) l4 ]* G5 x/ {7 U
public:2 ^# M7 o* Q  v5 l# r% k" T
void Add(BYTE nIndex)
0 H" Y! h  s! k$ T6 |{% q, W' E# U. ]$ \2 N* J/ ^! _1 b# y) X
  if (m_dwPos >= MAX_INVENTORY)
* e* E* ^' j% z/ D8 J# h) d" i) \  {/ B( J: `4 V7 K
   return;6 f, T( p- u; X
  }4 t0 i$ q* `1 ?& [! Y4 t8 z1 `
  m_Item[m_dwPos].nIndex = nIndex;
2 a- }+ o- \5 g  m_Item[m_dwPos].dwId = m_dwPos;5 R. i6 ]5 B$ A' _, M* j2 X
  m_dwPos++;
2 ^7 D8 r/ I8 |; z) V1 I}
% i7 c2 `: o' p! c. R+ \BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" i0 c, J7 b  g. e/ d
{9 l) D9 q; f7 |- l
  for (int i=0;i<MAX_INVENTORY;i++)
5 ]. N. `8 U6 Q. n  M, y* Y  {
" s- w- V+ A+ I% y   if (m_Item.dwId == dwId)
7 h  e2 \0 _1 o   {6 R2 d5 n, B" z# a. u2 i
    return m_Item.nIndex;9 Y7 ~4 ?! x1 s' C9 A" U0 `
   }
6 k* M. [/ |8 k  }
$ b2 t9 J: V# M% X8 P, b( K  return 255;
2 d2 @7 c) v, W}, S* I" j; e7 |2 Y( |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' P- ~" ^; P; q+ l
{
1 P5 [" _8 _' _9 O8 H  V, i! y  BYTE nTmp = 0;2 @$ U$ l* `" T1 f6 A
  bool bDest = false,bSrc = false;0 t4 P5 P5 I' S9 p: H
  for (int i=0;i<MAX_INVENTORY;i++)% L' q/ L& r3 E: _( f; R
  {
. R* l5 s' C) |   if (dwSrcId == m_Item.dwId)- U# `% x! B# @% }3 h9 j
   {
, u% C+ K* Y7 @) B    //id相等 则 改变对应的dest和src
! U$ Q7 L  V1 T2 ?9 U- {    nTmp = m_Item.nIndex;
0 n% p; |( z' B    m_Item.nIndex = dest;
' O5 U2 C; B* G& j   }% t+ s4 L% U- _& {
  }
+ j- [9 G% f# ^: }- h2 [; ^$ u" @  //临时数据保存完毕,交换开始
  b* F% ]. k3 z% L- s. x: S* g. d  for (int i=0;i<MAX_INVENTORY;i++)
0 i. I/ g8 i7 i- u  {
6 I4 v$ O  g8 l- t, e$ Z   if (dest == m_Item.nIndex); C+ l! \  ~5 Z+ P
   {" t2 |2 j# ?0 ?4 g) X9 G5 A! ?
    //id相等 则 改变对应的dest和src
% @! B( p7 d) u3 V8 ?    m_Item.nIndex = nTmp;
* P# K0 J. V' U" a   }3 i. a% M  `6 ~
  }
1 M1 W+ Q2 R5 a- o7 T}
9 l7 o' D; ~1 S* z( a9 a" Q};
4 W" e' R% I! E: [-------------------------------------------------------------------------1 v+ B, i/ H( g/ Q; _; I# e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 O, `: N( d/ D4 Q% q/ S, Z" O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);  s. \" W! ?, C- ^; G
紧靠其上添加:7 w  d& a, w8 ^' I- Z
if( pWndBase == &m_wndMenu )3 M3 k. B8 R5 k) z# k8 b9 p
{/ d% ~6 g* x: M5 N4 d
  switch( nID )5 Y( N8 X& g. z7 H2 u" I
  {
% p- Q3 R/ I/ j3 C2 N9 ]' E+ O  case 2:* ^* h4 H7 l5 B6 d
   {
6 W. J% F5 \% z+ L& v8 V- D6 e" ?9 g) t    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ M8 R, j" u4 B) ~" W. s    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# I1 {+ q4 U9 t0 k$ F  a3 ~
    {
" J) p4 `/ }1 \1 H8 W     break;
1 b( _8 R1 u; L# D5 @    }
% _% X" N) T7 B" ]    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ t# ]1 M- \4 y+ v' K    {
; l, Z4 @3 G! E# x7 ?0 M     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- d8 u) I4 f0 V( L# Q4 ]3 b
     if( !pItemElem )
7 A1 F- h: z- Y/ T0 h) ]' d' _      continue;/ l4 N* }3 n: H, P) p
     if(pItemElem->GetExtra() > 0)
6 Y6 B2 ~& y6 V. e! F+ S      continue;# D8 u& k/ D4 _! e3 G+ E! J; A, o( g
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : X3 I- C# B) c" Y
      continue;1 [. l: I! Q. N' Z' A
     if( g_pPlayer->IsUsing( pItemElem ) )
. \0 r3 a* ]# K$ u      continue;
2 ?$ E, w& q: _  }     if( pItemElem->IsUndestructable() == TRUE )
6 F* Y6 h- n4 F6 ~7 L     {
: X" w8 l' P* U      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% Z$ c( B* U; |- v* i
      continue;
; P+ M- P- G- S1 f; c2 h8 Z! S     }4 L0 w4 A- x1 a2 a* O
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; ~$ K/ e( q4 _3 i    }  H* }5 S# t+ f& m2 Q& b
    break;$ L: {) @1 B/ n$ t: f
   }4 T9 v4 {) C3 g! J  i( n
  case 1:
# h7 g  a2 k  T# {2 N, u, `2 k   {
# j6 V9 W& ?( g) w. A4 a7 c$ K    //整理背包
6 v* f$ k: R1 b# W5 _. C( K' y    //////////////////////////////////////////////////////////////////////////
8 B5 x3 d; E# \, k+ ~- {    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ S1 d* w6 L0 X8 T; H' m
    //////////////////////////////////////////////////////////////////////////8 P) v, n/ r" n- ?
    //////////////////////////////////////////////////////////////////////////
3 l. M  [% k& p% i5 L    CInventorySort* pInvSort = new CInventorySort;
  A& X* e$ K# ]$ m: @( m# h7 Z    vector <sItem> vItem;
9 s1 u5 Z3 h4 J# c" C    vItem.resize(MAX_INVENTORY);//初始化大小
/ j# t5 a# n2 T) z4 c" o5 v     //////////////////////////////////////////////////////////////////////////  G' x! _$ k6 z
     //填充数据- j2 I  K2 ~5 ?" o5 _) _
     for (int i=0;i<MAX_INVENTORY;i++)! P6 r) X! ~$ V' b2 ^9 ?& w
     {  I1 G. `. b; B- @9 J! z
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 U/ f! ]* _% ]9 m' X1 {; A      if (!pItemElem)
+ g. ?1 T! O" ?6 ^- G- B      {
0 i' L. y( O) Y( x" E5 a2 g; B       vItem.dwKind2 = 0xffffffff;( f; E0 a/ J, w; {: x
       vItem.dwItemId = 0xffffffff;7 @% O9 w. V  o0 l  U
       vItem.nIndex = i;
" H$ w- w% @6 A2 a5 [4 A5 u      }else {# o* j2 e: x3 H, p4 L3 i
       ItemProp* pProp = pItemElem->GetProp();6 B, w4 o/ m8 m1 j" `) s
       vItem.dwKind2 = pProp->dwItemKind2;  _% g  e3 @9 {$ B- K' N5 D
       vItem.dwItemId = pItemElem->m_dwItemId;. c2 c# |( b! Q& g
       vItem.nIndex = i;2 B4 X. s4 a  K: r6 k$ q
      }1 T4 E6 f; h4 c. O
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; k1 x' I, G9 o7 s8 h$ g1 a     }
# M6 E3 c8 @" N. z  M     //////////////////////////////////////////////////////////////////////////
* S3 x& D$ z+ X1 |( ^     sort(vItem.begin(),vItem.end());//排序
* N0 ?9 S. F5 B6 r1 U" X. D     //////////////////////////////////////////////////////////////////////////# a$ N; _; \* ?0 f4 `8 x# p: U# y
     //交换
% J2 J- h  g3 S4 P' t8 e: V% w     for (size_t i=0;i<vItem.size();i++)
- Z  L+ h2 a2 B7 Z! d3 t5 l) H- L     {
# Z' F  _3 p1 _4 m7 @      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ A8 ~) L0 |* |' o- M
      pInvSort->Add(vItem.nIndex);
/ q; }* E2 O+ r7 P$ I+ F# i/ m4 i     }* V+ ]3 b' l) K$ R
     BYTE nDestPos = 0;
7 [; C: \# p; B     for (int i=0;i<MAX_INVENTORY;i++)
) I/ ]7 p) G5 Y# B& g3 j  v     {
! Y4 u2 O2 @6 D% \3 G      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 n+ M0 R+ y$ `) w      if (pItemElem)
9 w  }; B8 l9 k9 E      {' [. i+ x6 L9 \& L4 k
       if (IsUsingItem(pItemElem))
3 M& P9 ~0 a2 J$ x% w/ l; e2 Q       {
/ s9 P2 u3 u4 h* i7 A: {        //这个位置无法放; m+ y. ^4 E6 d
        nDestPos++;
% A2 e; s. D+ m; Q  f) ^       }7 E% T2 g- c: r+ s9 |3 q, R
      }( ]% d0 a, v) o6 t- Q% [
      BYTE nSrc = pInvSort->GetItemSrc(i);
5 I- D" k2 \! c, N! T      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 B( s8 F4 q8 r4 H
      if (pItemElem)
% N# |) {1 l  L      {
6 p  E$ l# J% U! A% J0 \1 T1 w9 H# T       if (IsUsingItem(pItemElem))$ h; L! D4 t$ t2 w- V
       {+ j( S  x+ Y4 g# ^: t+ f* h
        //这个道具无法移动,跳过: S# p. T. [5 |
        continue;9 h, `: H" b' f+ q0 o% }, q
       }$ ~3 d+ i* _0 P' N! i4 _
      }else{
- W$ j+ S# [: ]& g! J       //空位置 不用动
& o/ q- y1 H0 Z( R: R- ]       continue;
; C" S) r) p, r/ ^& ?      }
. B3 `' x6 \$ K$ w  m      //////////////////////////////////////////////////////////////////////////9 [5 e$ z$ G% g
      //开始移动
& o2 C  ~# X/ P      if (nSrc == nDestPos)
4 v' F7 W* h6 v5 [9 x0 c. K1 Y      {
+ T* }  @# }9 r& S, Z' p       //原地不动
- J3 O6 w4 p& S2 x! M0 [       nDestPos++;! D: \9 C1 k# f
       continue;
+ o  W/ O/ G# j7 f* D      }: C4 o6 f- c2 y+ _( N
      pInvSort->MoveItem(i,nDestPos);7 q: @$ d( ^1 F/ G) B! g
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);  j4 d7 z' W* M
      Sleep(5);
$ \4 N9 W$ X4 m( s9 q" c7 G7 d- P% C      //Error("移动 - %d->%d",nSrc,nDestPos);$ H9 x' K; h4 q3 {9 m
      nDestPos++;" Q4 b% h* L* u+ x
     }$ u2 ]; `0 \! Z- D: t1 s; }0 j
     //取第一个元素的信息7 U( m& f# ~8 y) h* a3 v& Z
     /*% Z4 y1 u+ H$ I" p9 D, P
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) ~' w( g# K1 S% M
     {
) S: n: Y. M7 S& W      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 H: ]7 n2 }! e& Q/ v      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 e3 z) J& @( c
     }
2 r* U6 ?' b6 V     */2 `% c: R9 U  h0 ^- Q
    //////////////////////////////////////////////////////////////////////////
7 ~& M0 g5 a( [    break;
8 l: B. ^9 u% v- h   }& T, L+ x* W  h* C/ M2 c
  } ' ]2 K0 \" \5 L; j1 i$ R) m2 G! E
}
/ i8 t# H* s6 a) |$ Ym_wndMenu.SetVisible(FALSE);- v) S! ^6 g( ~1 C# P# k- V- [

. c& {1 |% V  }3 |$ \--------------------------------------------------------------------------------------------------------
- _! Z: U5 G9 W% V* ?搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)/ e2 p* u  i' I6 C3 S3 c8 K
{
8 T: D8 q# L/ h; m9 O/ s- aBaseMouseCursor();
$ B$ J5 [# _& P, e" u}
, y! G+ n! y( }/ K( |在其下添加:3 B2 N. e0 A8 ?+ Z
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( y& R+ T2 c' y/ e
{
! Z, [: n+ N) t' [" Z* Sm_wndMenu.DeleteAllMenu();
" M9 ^) Z9 Z* N) n$ [5 tm_wndMenu.CreateMenu(this);4 \6 Q0 s( d. `. S. [* M, G. j1 b
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");# L: P, _7 c  T2 A. [) J5 W

  c! \8 e6 s& kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; S4 b4 i. r, j6 C- E{
9 o+ t/ _, \6 Y* Q( s$ d  //P以上级别才可以删除所有道具
" E8 {- k1 F8 I  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! c9 {3 a/ s: f0 r}
: r8 x+ y; v4 H' cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! t6 S1 y$ Y/ I" R& d) {7 K
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. a- A. r* l- v% i( B
m_wndMenu.SetFocus();
" a* s6 {, c5 }2 K2 g6 l}
3 R+ t4 [  M' o7 I" S+ k------------------------------------------------------------------------------------------------------------
' h( S6 }9 J/ a( K- ~1 Q8 a7 L" A8 Y*************************
  W0 p5 R$ ~" B# DWndField.h文件7 Y5 {9 p2 T3 B" ]. B
*************************! z2 j1 G2 ^4 Q: F# }6 B5 {
搜索:BOOL m_bReport;7 G. h* [2 W9 P% N1 K: a  |  h
其后添加:$ d# S- B2 {% R. B6 ~5 u5 n
CWndMenu m_wndMenu;
5 `( j  T0 u! B( ~$ X% w搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
/ a* E# j& ?  H! M* }其后添加:
2 a9 ^: I2 ]+ O! S* J& Uvirtual void OnRButtonUp(UINT nFlags, CPoint point);
: l5 ?& F, Q2 H0 A7 L
, M% \% [4 h1 o. ?! y
. p6 P6 _! T7 U9 Z5 v5 ~7 x6 ?

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-2 09:24 , Processed in 0.065096 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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