飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1092

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1092
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
. M8 j  A9 x& O搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ k9 K. w5 q$ B' U- L$ t" |+ p
9 L2 e; O! t. L
struct sItem0 n: }7 a6 [- v- ^3 u3 N) K
{
4 |6 d  D) A! z9 \5 O! q- k6 pDWORD dwId;
5 E* O6 Y- a) mDWORD dwKind2;
. ^& h2 B" A+ h- q$ xDWORD dwItemId;9 Q! b4 i: R7 N
BYTE nIndex;
2 g6 n9 V: a0 fsItem(){2 @2 u' [) J: q8 |$ V) S/ c
  dwId = dwKind2 = dwItemId = nIndex = 0;
8 G2 V4 n' e) e; ]  }# ]9 b" u}
5 i5 ]( @8 l% i' Sbool operator < (const sItem p2)) c5 y$ e/ l5 ?! z
{
  l! G& g6 U/ F  d+ {  if (dwKind2 == p2.dwKind2)  L; q4 z# G4 A
  {
8 _0 B: c* B, s0 ~/ k7 a4 K   return dwItemId < p2.dwItemId;& H. M, X0 ~  k
  }else{8 b8 O7 m- {  I" _/ P0 K: D3 F
   return dwKind2 < p2.dwKind2;
+ U- p9 ?& S( N9 f4 z+ L  }
0 z; e& M7 a' t' f}" v# @# ?6 E' Z- C' N3 e
};
3 b- R  c- h4 q" _8 P; l) @class CInventorySort8 H, |: @# X$ j9 W  b2 g- |2 c
{
4 B/ a( _" ?9 K! xpublic:6 T) h* _. y% ?. X
CInventorySort()  ~: B5 d5 @8 s5 |8 @* W
{
3 O0 f- v( Y% D; g+ [5 u6 P$ |  m_dwPos = 0;
5 r% f7 d0 g, F4 ?% Z1 f* W  j}
* W/ f- e) u3 X1 K9 ~# `8 C~CInventorySort(){}
) B1 W2 O; K! p. Mprivate:, \8 A/ Z3 \- W. e
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# X  {5 \* h# i% N
DWORD m_dwPos;
" c! L" a' r: p9 i1 ]! Ypublic:
2 W1 M; Z9 Y- Y: \8 kvoid Add(BYTE nIndex)4 l/ O! n8 b  o7 m( a
{
9 R2 {, w. H# k4 l" p5 K  if (m_dwPos >= MAX_INVENTORY)
; [+ h% F# z' x0 ~+ R* L: U9 n  {
9 }, z3 v; D7 z! @1 k' V, ~5 ]   return;8 |9 w' X! t! x% f- y: U9 O
  }$ l7 S5 n3 x! L2 x7 w
  m_Item[m_dwPos].nIndex = nIndex;: s! p0 D5 Q8 v
  m_Item[m_dwPos].dwId = m_dwPos;( q# W( q4 r& R! ^
  m_dwPos++;
9 O) m) ^9 X( s- m' ?}
1 ]1 r$ g. V. V- d+ ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 M% a9 ~/ j5 o{
1 H( A9 o3 W% l1 Y* v- O+ j  for (int i=0;i<MAX_INVENTORY;i++)
3 `# Y' A/ ~" ?! M- @  {6 ?" {. L1 \7 J3 F9 m
   if (m_Item.dwId == dwId)) x7 [2 H* C/ p- x# E1 F3 k6 ^2 H
   {
* y6 i8 E! j5 d' |0 g    return m_Item.nIndex;
0 R' V" ]# I; u; A  m+ h   }
8 z# {# `9 X& e  }3 K& S* z% S# k6 Q) }2 a
  return 255;
( J0 C+ F7 g. `7 s}( m3 T- f2 b$ f
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; e1 d5 m+ f% N: L  _
{
' _3 Y9 [6 p; j! Z  BYTE nTmp = 0;
/ _. L% P0 D6 i, I  bool bDest = false,bSrc = false;
) I/ I% [" n7 q; F5 T  for (int i=0;i<MAX_INVENTORY;i++)' }0 _6 k8 W( k+ }/ x) a+ i
  {, f* }# Z  j" w" Z' n+ n. A3 Y7 ]
   if (dwSrcId == m_Item.dwId). r, G* l7 D5 g; d# k# Q
   {0 c$ _8 F3 l. N3 E! C
    //id相等 则 改变对应的dest和src
2 A( K2 S/ j7 Q8 b" q- J4 R- i) m    nTmp = m_Item.nIndex;3 h. s( L9 B( p/ }8 E& V% _: V# N7 j
    m_Item.nIndex = dest;
1 w) j# I7 s5 b; L   }7 ~+ D" s. A. |$ g) F9 q
  }0 x" V2 A  B. d, W
  //临时数据保存完毕,交换开始
9 P% W- y4 E4 E2 s: T+ s4 s3 u, }  for (int i=0;i<MAX_INVENTORY;i++)
" d5 l. i5 _: m  x$ Q& Q( k  {# z3 v% E* A+ a* D" n" u
   if (dest == m_Item.nIndex)
7 l/ k$ Z' ]) {' u0 L6 L9 c   {; J) j* \& b( `- H
    //id相等 则 改变对应的dest和src
: f7 p: H$ H2 B    m_Item.nIndex = nTmp;
7 t9 |* f! w6 |$ B* U( I2 j   }
; s% v" B. q. o  {$ ~  }# H# R7 b" T- K( C
}
# c4 r" L& M6 p! B7 u};
7 L2 O# F1 t% G7 c6 D-------------------------------------------------------------------------
0 D; [* j4 O2 u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 l3 O3 b' N, h3 r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 m$ y6 }& `% q* t4 o% G- W' t1 n
紧靠其上添加:
  e8 l% k, s5 i: j  n( ^0 m4 aif( pWndBase == &m_wndMenu )
2 h" J1 {6 A' ]& j" W6 a{
' B0 I4 D; O; ]" e" S  switch( nID )
  O8 \% |$ V3 E  {# M. e6 N+ b- S1 X
  case 2:/ o( ]8 ]0 x, n4 g6 E  Q
   {! f6 y) ]* R' n; ~
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. m  f) d8 f4 v6 T    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 q/ E: P, p5 C: t* _7 X; o) o9 b    {4 Q% t5 e( W2 q% X. w
     break;
4 m/ L/ ~8 S( w6 D/ |% z6 T* @- S    }. ]; C1 J8 ]5 c; o: j
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 {) i/ g2 F8 G* @
    {1 n) J$ N4 E: y
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 D$ }. X1 S- Q; r) v5 W( A6 C+ f) Q
     if( !pItemElem )! f& C" b. O( a* J8 O
      continue;. I/ s) l" H  S7 n
     if(pItemElem->GetExtra() > 0). V  `. g/ W9 N5 W
      continue;
0 n6 e! O+ Z+ R     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) p' `& t2 S+ E/ z/ ~      continue;$ N( m- B. G2 q. e7 a
     if( g_pPlayer->IsUsing( pItemElem ) )
  V& U) O7 Q! ]. j$ e" |9 K      continue;! p' |' Y6 |% W% L
     if( pItemElem->IsUndestructable() == TRUE )6 q3 I2 Y0 I: j$ d3 L! w
     {
/ I& K4 `% ^7 Y; F) F' w. j# |+ ~      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ N" Y% p0 v$ b- Q. z$ S. }; O2 p      continue;
* C; O: F% D  M; E     }" g, T' ~, I+ B" ]& a& ~
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 c$ y, U, j- ]# o6 I6 e0 t) n    }
' v+ N1 E. |1 G2 d    break;
! f4 Z7 P9 t9 J( S# G: s& R# C' B- s   }
( F. q) A/ F8 c) V  `  case 1:
1 h" h& q/ K) G" d: E2 J3 M   {: _4 G& k0 E/ Q$ p: l+ F
    //整理背包# o7 h% D# K7 w/ q
    //////////////////////////////////////////////////////////////////////////; e, p' q! O& v0 j; E! ?
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% b3 V, Q5 j6 W; j5 s1 H2 l    //////////////////////////////////////////////////////////////////////////
. m) m2 O5 b& ~2 U5 L' A$ o    //////////////////////////////////////////////////////////////////////////
' U# a8 O; ~$ w  k1 N    CInventorySort* pInvSort = new CInventorySort;
- K- B! B- w+ {* W* d0 g: p    vector <sItem> vItem;
6 y3 h" k( G# [9 ?: K  {7 q    vItem.resize(MAX_INVENTORY);//初始化大小
8 a$ W  k1 H. h( N; X$ O, K$ \     //////////////////////////////////////////////////////////////////////////  D+ _0 c5 X& X( D  M* s3 N
     //填充数据
3 p1 R. y3 c( ]     for (int i=0;i<MAX_INVENTORY;i++)  A- g1 J) [/ U1 x( \) j9 R  y- h
     {
+ S+ I* U. j+ ~      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ B& j; ^1 `, c* s& e      if (!pItemElem)
' T3 x* O& {& Y$ E; ]' |- U/ x+ J1 c      {2 F1 r, l1 Q& K0 u3 X2 ^9 Y. n1 ]  U
       vItem.dwKind2 = 0xffffffff;
" Y- d5 k, d$ Y' M6 O       vItem.dwItemId = 0xffffffff;+ H) H4 p2 }, G2 U5 t0 x, L% h3 I- {
       vItem.nIndex = i;+ F9 L; B: e9 K0 E3 L- I  e
      }else {
6 B( Q+ u2 J# v! T' n       ItemProp* pProp = pItemElem->GetProp();
  ?) V) w$ ^: a1 s       vItem.dwKind2 = pProp->dwItemKind2;( D2 \# F8 E. l+ Q/ r
       vItem.dwItemId = pItemElem->m_dwItemId;+ @$ [$ G; u, L( P, T; F
       vItem.nIndex = i;9 N$ P5 g9 S4 L, V
      }0 s' e( Q  x0 _: l
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, B4 v- P! |. o     }$ Y/ l  I$ A. l" G
     //////////////////////////////////////////////////////////////////////////$ D! c5 I+ |' R! i
     sort(vItem.begin(),vItem.end());//排序4 [- A6 E+ o7 @) L3 c# n, l! Y1 x$ o' l
     //////////////////////////////////////////////////////////////////////////
2 z) v) n4 v* J8 A+ L% P     //交换
$ P5 e: P. p$ f$ }: n; Z     for (size_t i=0;i<vItem.size();i++); F/ R4 k/ n) P( f
     {
: r3 A3 a9 J5 \, V" P7 {3 r2 y      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 d2 b1 w9 z" u, T
      pInvSort->Add(vItem.nIndex);
: s, V6 D3 d% S1 U9 K" s1 ^9 I  _: s. V1 l     }7 L8 L  ]2 X" `( p, S; n
     BYTE nDestPos = 0;
8 d; l: _+ P/ ^' s* d6 h     for (int i=0;i<MAX_INVENTORY;i++)4 n8 h+ G0 N! X' N2 l$ k' z
     {
( z( {( w% A% i+ A9 G+ h      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
3 I$ G4 w+ j/ `/ `* a/ h# W/ r. @      if (pItemElem)
) i$ u7 ?, N4 ^' A2 I! H' {      {
& K; ]. I: J2 y+ x5 C& U9 N, V       if (IsUsingItem(pItemElem))
: i( l! U: c# s; u& v( R' B/ n       {
1 ~3 T( |& T0 Q" V! k        //这个位置无法放
; V; @% ], Q, e- R3 a        nDestPos++;
' j% M" |: h) l+ E* \0 c0 @       }2 h  p2 {/ `. @0 E/ h
      }
1 {$ ?! B) [3 g0 J' v! v      BYTE nSrc = pInvSort->GetItemSrc(i);0 n1 \: M8 `, D" a. H
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; K  O1 X  j: H' o8 @: {% f
      if (pItemElem)/ [. p) J$ [6 p/ V
      {
. P0 r$ W1 Q) {# t* A# _       if (IsUsingItem(pItemElem))
, }7 C" C: g& m# `. k/ l) L/ ?       {' p, e0 P0 f, \7 R' j
        //这个道具无法移动,跳过
/ Q# R1 w! w! P% k, ?) _        continue;7 F! ?0 O  Y& c! c- p1 N/ M
       }
" w% b" p# @* L      }else{
) x8 g5 w4 }6 G4 h# p       //空位置 不用动
8 Z' G+ o- c0 g: p       continue;
- [( L8 @1 x6 h; H2 t( |      }8 j# ]4 |5 Z8 G
      //////////////////////////////////////////////////////////////////////////
& b; d8 _0 b5 s      //开始移动
, {( d, h3 Z/ u2 ]      if (nSrc == nDestPos)6 Z% F# ]" y* h$ S" e! J& K) H
      {
4 F' X3 y, L& S$ c       //原地不动
) f4 g9 V' [6 H( G1 R% S       nDestPos++;  O! q7 c9 F. M5 w
       continue;
5 k1 b. r3 b' A$ y, P) x( d' V      }+ z: J6 y& L  l3 {+ t
      pInvSort->MoveItem(i,nDestPos);
" j0 ]7 [) s2 b1 p' [      g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ e& b$ z& e& }7 d
      Sleep(5);- |5 F: P) B1 V$ b4 h1 X% S
      //Error("移动 - %d->%d",nSrc,nDestPos);/ D/ W6 _/ ]3 M3 h+ i% |+ ?
      nDestPos++;
" t* |% S! S+ {$ E     }
7 b! X) ?# Z) ]: Q     //取第一个元素的信息* \& U! [) m- o' e
     /*
. c1 X+ q/ Q# K6 j  V     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! v& ~( ^% b: u% U2 `
     {
& S& F# P# w  W8 M8 I      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& W) x" e' {5 g% [' ~2 ~8 v4 F8 m( ?      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ X- Q$ D! O7 p) w  w: Y) E
     }
  G4 b0 {* F% O, C2 j) r     */* m  d6 Y0 Q: Q
    //////////////////////////////////////////////////////////////////////////
- Q& w. z7 C/ U3 u* W/ D% L    break;
7 ?- z0 R; o8 \7 w5 L( L- ]! Q8 W   }
0 h1 d& }8 m- j, c) b6 @  }
/ q  {1 ~) m* c! N  U% m}
  ~( w! D+ a7 U' P  H7 @! Wm_wndMenu.SetVisible(FALSE);* d  }7 _4 ?3 T  u$ s# j8 x6 q
9 t6 P) i- p2 [  u" f0 J
--------------------------------------------------------------------------------------------------------
' ?) d" ~# Y. `' p搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 s8 K5 o1 j8 |0 ?" @5 @* O- D7 C
{
% F+ q/ Q6 |: L5 R5 @) H+ N% CBaseMouseCursor();
; U+ p# o5 l: J! I/ x- \# ]% k}; v6 f: p0 o5 I! I" b
在其下添加:
( o" H0 o1 n  B+ zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 m% J; j" `! G% Z; N. E) r; y# y% P, l{* i% _3 @- I1 u
m_wndMenu.DeleteAllMenu();
$ l" I% j# `# X  y8 `0 `; Dm_wndMenu.CreateMenu(this);
  [: }; n. w1 }7 |- L; V+ y, K% Um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: f5 I; A+ N8 x# t$ F, q

1 ~# m  P0 i- {" n+ t! H* _if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), ^* V4 [. S' U& U8 W5 m% @5 N
{, c/ u/ n. h. {; d, k
  //P以上级别才可以删除所有道具& S6 J8 z# r& z7 j% f
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ _0 K* z( t( [+ j8 n}
8 L/ B: \4 z4 t3 E' c; U$ wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. Z) n; x7 B2 R  p4 ~( Wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );  P- `5 `3 l8 @! }! V
m_wndMenu.SetFocus();
- B% Z$ i9 k/ {9 k& Z9 b4 p+ \}/ S0 G7 G" h+ l/ S
------------------------------------------------------------------------------------------------------------
8 Y+ V# A$ U& Y. g# O) x1 Y$ Y*************************
2 P7 V: W- N5 g/ S- YWndField.h文件% d- k/ z/ K0 |3 o6 |
*************************5 G. N% `1 s- b8 F( g* F
搜索:BOOL m_bReport;* u- d) X0 x" H8 O2 ?
其后添加:
/ k; c. @$ ^: I# ACWndMenu m_wndMenu;1 |5 `  l8 W% n) y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 Y6 z2 m$ d( v% g其后添加:
3 E! [" l4 Q* b) |2 d% D4 O1 Gvirtual void OnRButtonUp(UINT nFlags, CPoint point);6 ?' s/ i( U: n- n

/ R  @+ o6 ^/ W( h6 s! o' c3 _" f% m# p1 `+ _7 T  O/ o7 r

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-29 23:15 , Processed in 0.064179 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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