飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件! R) C7 ^9 p# O) P6 M" z/ \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 Q4 u- O; V. X1 \/ `! \/ t+ f: o9 t  w# b$ {7 J
struct sItem
  F, a4 [3 }6 p! j% i{- W4 c5 E( u7 j4 u  }  x
DWORD dwId;
% U% |% H- P$ Y- }+ s) vDWORD dwKind2;
- s2 F1 k1 Z" L) u1 F. XDWORD dwItemId;
9 @5 F0 v0 L% A! `& @$ IBYTE nIndex;" d' q: u/ Z4 Z5 I; H: W/ X
sItem(){( C* v$ d' H, g- {" @' I
  dwId = dwKind2 = dwItemId = nIndex = 0;) x; x( o" X/ }+ U8 w
}
) e$ j( l3 \: b* j0 wbool operator < (const sItem p2)
) W2 r/ D) y% B- ^6 N{
% _0 L/ W) d) H, u7 t  if (dwKind2 == p2.dwKind2)& n# F3 ~7 k2 y: ]- U9 y4 |, ~
  {
$ G! n4 E% E1 m) j# S9 ^1 P/ m, Z   return dwItemId < p2.dwItemId;
, r8 q7 s- U8 y& s* ]* d  }else{
% K6 X5 ?. ]0 W/ V; S7 `9 S' H   return dwKind2 < p2.dwKind2;/ `5 k  U+ u  e
  }( \4 Z, K) h$ G( c3 \
}
* F# t( j' v( H: I- M- n' b};, j3 o* |" J  U/ w/ h  i0 C
class CInventorySort
* [' a3 }* B% |, n9 u# `" q  E{
8 |% a, D- n, H1 A0 Kpublic:
8 q* d# I: V, G- H* [) tCInventorySort()# U4 J% _: Y0 K$ b9 Z2 L  P
{- V& F" A: A2 y; Z' }
  m_dwPos = 0;
/ x# Z. }8 A+ }$ ^* Y}
! s, _" X6 |0 C4 K& D9 o) c& T' U~CInventorySort(){}- m) S5 X- }5 G7 X/ h4 E
private:2 q3 B3 \( R. U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 F* A8 e  M, c" f, H" Q
DWORD m_dwPos;8 A9 ^- m1 W# y% T& A3 L
public:
! M5 S* D$ ?7 `/ j7 q& \void Add(BYTE nIndex)6 u( G/ i9 B, h. @' ~* O- J' w% Z; P
{
/ m. `- w6 v$ q  if (m_dwPos >= MAX_INVENTORY)
. c. D  k6 s" J5 k: Y  v- y  {+ C0 e4 d$ `. [) K/ v1 q& ^
   return;6 o3 |$ o5 {! f, q, F
  }  u7 y& D( C1 _, H- g, E5 z
  m_Item[m_dwPos].nIndex = nIndex;
! W# h2 u' w" a9 l! j4 k7 m  m_Item[m_dwPos].dwId = m_dwPos;- u' ^1 Q0 R2 `3 _8 S
  m_dwPos++;
) N  F. ]7 Z: T8 w) F$ H}3 @/ l0 u& {( m) S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 F( v& o, `0 T6 f1 R5 c) }. {
{0 I' z4 V4 f) p' X8 l
  for (int i=0;i<MAX_INVENTORY;i++)0 L0 Y' }% F$ L" |5 A* {6 {8 b
  {# n! y+ S: r6 y' P6 \4 w( b
   if (m_Item.dwId == dwId)% T# b$ K! d; n! B* {
   {
9 @6 ]: g* ^* F& J& t  O$ H    return m_Item.nIndex;6 K) C* `0 S7 M2 E8 s0 U
   }* ^& p" |. H' b1 l$ K
  }
" y; @! A/ S* B2 T/ A- C! z9 l) I  return 255;
5 }) ]/ e) x& M, V$ Y}
  B3 c$ ?6 ]' Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) X' [# B) ~: E# |{
. C( h# Z& W( ^4 {8 ~6 f/ {  BYTE nTmp = 0;
8 b# d( Z7 H; L4 H  bool bDest = false,bSrc = false;0 z+ v  o3 h8 A2 J: o
  for (int i=0;i<MAX_INVENTORY;i++)
" A6 Q- \" |: P+ ^5 k  {
6 d! R% q- u$ O# G. ^$ C   if (dwSrcId == m_Item.dwId)1 P/ i1 p3 J4 l0 G. ~5 K. h
   {
: |- W+ ^8 I) R" E8 X5 q! k- V) S4 t    //id相等 则 改变对应的dest和src/ J1 H7 r* q) A) c
    nTmp = m_Item.nIndex;' @, Z/ H$ T' E( E# _3 r: Q
    m_Item.nIndex = dest;: {! x1 O0 I$ P8 C
   }
& j1 y* e6 M! Y  h  }
! f0 S- C" H8 R- a/ O+ a  //临时数据保存完毕,交换开始
- T3 Z$ k& q9 l7 W- R+ n% W  for (int i=0;i<MAX_INVENTORY;i++)
+ U) i' @8 I6 a( F* K# ^  {
  \6 M7 w5 l8 [5 E! ^   if (dest == m_Item.nIndex)0 u# {: K3 ?1 G# A! r' P
   {
* r# a8 y0 q6 V2 U* Z    //id相等 则 改变对应的dest和src
9 O5 B. \0 }: D4 |    m_Item.nIndex = nTmp;" t! W% n6 Q6 m4 ]7 c! \/ T
   }" i' }6 Y, E$ p5 O4 w8 L7 E
  }1 D7 t& `) E# P- `0 V2 K3 b5 X
}0 ]' b5 f& N$ c) I$ w
};
9 u9 ]: m/ t, r4 ]* b% r-------------------------------------------------------------------------
. D5 g! F7 I  `( c, Z3 F依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 b9 E# Z/ l+ Y0 G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" l6 |* q$ n) c7 m* [' `  M1 d
紧靠其上添加:
9 v% Z7 k" @, k' _" ~3 A7 H. ~if( pWndBase == &m_wndMenu )- q; g( \# y5 ]: m
{
1 V  l, T( k1 B) R( Z) V3 ^  switch( nID )% y1 K2 X; @9 ^6 a/ T9 k8 p9 x2 Y0 R
  {; o& w5 U! [' A$ ?, j
  case 2:
& X) J1 ?: r1 }8 I# o( N# `   {
) G! c$ k7 y; S+ e8 ~  g    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 g/ Y/ {* J) ]/ i# a5 W& B
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& {/ a, C6 x. G$ _/ ^3 k
    {; H* S# A- H! j. s! {# L2 B
     break;
" [9 @) S9 \4 ^; Y, h/ j    }
" i  r8 s$ D# I: E! J) y    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 k5 G3 x% k9 Q4 |9 x8 h4 K9 A    {: Z- _# i$ K7 O& o$ H7 x/ \
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 W1 R# o/ M7 J: k
     if( !pItemElem )
  e: b0 o$ U4 C+ x( U: N, @$ H  \      continue;, e  o! r" ~3 [# s
     if(pItemElem->GetExtra() > 0)1 g' u* e3 ]  F
      continue;5 i0 o  G% F; i6 n) J, p
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 C" {. H, x# G$ Z$ p% A
      continue;
2 S0 O6 E; T3 q% P5 s# C     if( g_pPlayer->IsUsing( pItemElem ) ): p6 v8 o$ C0 {0 W
      continue;
. o8 e3 F8 N* x: _& U$ \  q" b( j     if( pItemElem->IsUndestructable() == TRUE )# M$ E2 E5 r- T; ]1 G7 }
     {/ v# Z- B; o1 U. B( O4 A+ A
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 V! \- X+ L( c) q- ^3 q" k
      continue;- D1 F# E( C1 ^4 L
     }
! Y/ W5 I" i) c% X1 d     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" ^2 c8 I4 ?( O* r
    }
3 K+ v9 D' m0 Y8 l    break;
- r/ R+ ?& e# H! |" t   }
7 n; t0 I8 r' U2 I  case 1:
2 c1 o" Y% M! Y5 |0 y  W  U   {
- c. S" Z6 W, o& W* e    //整理背包
- z0 u7 p+ S# `+ ?$ \  H    //////////////////////////////////////////////////////////////////////////
7 J2 z1 ^+ }, z: C+ |    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ F) X. f1 A$ d& i8 y
    //////////////////////////////////////////////////////////////////////////" ^: V) U7 t& t, Z$ z2 t- J
    //////////////////////////////////////////////////////////////////////////+ o  S0 H, y0 t2 w4 k
    CInventorySort* pInvSort = new CInventorySort;
7 i0 b8 G9 z, E* g; d" X+ ]    vector <sItem> vItem;
5 ?- _, M" m  j  T" ]) w9 n    vItem.resize(MAX_INVENTORY);//初始化大小
) G6 ~/ B2 F- a; C- ]/ e     //////////////////////////////////////////////////////////////////////////8 D& o' a9 f0 F, y
     //填充数据9 t+ C, f9 a! V: G
     for (int i=0;i<MAX_INVENTORY;i++)3 J$ N2 r- e0 y/ B4 N6 n5 J9 V+ v9 t
     {
- b: Q* G4 P) f% o- q; X      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
  G' v. Z4 H$ ]! _& V      if (!pItemElem)
* j9 i, q! j4 E* N7 Q      {
, K& Z! y+ o! S' }) g0 N' i       vItem.dwKind2 = 0xffffffff;5 i% P# o  s% E) P+ N
       vItem.dwItemId = 0xffffffff;
! ?. g, \2 D8 Q; R/ N3 I/ n       vItem.nIndex = i;
* a& `0 v' D0 f6 z, J; ?# V" |      }else {
! |$ _! t" D" I- U4 H       ItemProp* pProp = pItemElem->GetProp();( h$ E  N: \( u3 j3 p" T
       vItem.dwKind2 = pProp->dwItemKind2;
: N3 o0 d% F9 I( w3 k       vItem.dwItemId = pItemElem->m_dwItemId;# d9 A, C8 e1 q
       vItem.nIndex = i;5 u$ g# e& }3 m  w) q
      }# X% t0 n  O9 q  K9 _! M  e  m
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. Z# U' b( Q. j& K8 B# w  s5 ~, r/ ?     }
4 a% ]- }6 a! |( e; d     /////////////////////////////////////////////////////////////////////////// B9 I  X+ A. x
     sort(vItem.begin(),vItem.end());//排序
' P0 U7 _2 @1 O- R8 h0 `     //////////////////////////////////////////////////////////////////////////- J8 |3 a3 K; m* q( J: u
     //交换
' [2 ~& Q; P. H! b5 V3 ~; N     for (size_t i=0;i<vItem.size();i++)
  C, [& m( C: h. H     {
! s  D" X3 O, a8 |3 N      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 t, K' P" H- e% G/ F8 R$ L
      pInvSort->Add(vItem.nIndex);- S) I! u3 Z0 z' s" P
     }! A$ l  |( X8 e& |8 E2 {3 w
     BYTE nDestPos = 0;
/ ^0 U' F+ g- R% m: y! {3 Y     for (int i=0;i<MAX_INVENTORY;i++)6 h3 [2 H9 F6 r: |+ l# X
     {  H; E  I$ Z7 S3 y
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 \; w/ m% ?$ L! I; B
      if (pItemElem)
( J% y# J& q* l: O( b* r1 r      {( g% F1 P( h0 v3 y- o4 [
       if (IsUsingItem(pItemElem))
2 B: \8 O$ B; W- T- Q1 Y& G       {
  O2 |$ Q% j' {6 I. N# A& Y        //这个位置无法放
% m+ Z5 R8 `0 {: j        nDestPos++;
. X; D$ V0 a7 O6 e       }
" X, q% n. K% {0 p  U- F- n9 {      }" Z" c, n5 U+ c' p! B
      BYTE nSrc = pInvSort->GetItemSrc(i);' C! j3 Y, O9 D* ^) C
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 F) x: J: L) F" o- J% c5 S
      if (pItemElem), p2 G1 Q  B4 D; L' N) ]
      {+ h5 u! h6 |% `& {$ a3 l
       if (IsUsingItem(pItemElem))
# U- c( |4 C& X. X, O       {
, m& s$ k& n# n  L8 y/ U# H7 x9 N: P5 ]        //这个道具无法移动,跳过
+ B( v& o$ t: C: Z        continue;
2 f# {+ g1 x1 P9 f/ y3 F8 A       }! S2 Y) w6 b" T9 f5 P1 ^
      }else{; A' r2 k2 i" z9 W" ~' X5 e3 g4 M) k
       //空位置 不用动! v1 z& ]0 s9 f0 j/ r) Q
       continue;
  z0 [! J9 x$ v" F; l# }      }; M% k3 H. h) [2 ~
      //////////////////////////////////////////////////////////////////////////5 Q. E! y* [' Z+ I- T- S: H! o
      //开始移动
# ^: U5 x; l1 i* T# u) E      if (nSrc == nDestPos): K0 d# y" w4 o* H2 t; A/ o
      {
1 ]0 ]6 u; x3 }3 {       //原地不动
3 u' c1 }. ]3 ]8 q       nDestPos++;
- K5 X1 _7 ~( i* n) C       continue;
" ^3 u3 M/ c; _- M5 p      }" e, ]5 W8 M' Q2 f. _" v: y
      pInvSort->MoveItem(i,nDestPos);
" [* G3 \, \% Q( q9 {      g_DPlay.SendMoveItem(0,nSrc,nDestPos);# O& `8 m+ M6 V4 Q3 y
      Sleep(5);. p) {1 H3 x$ h" V  Z( [
      //Error("移动 - %d->%d",nSrc,nDestPos);
! d3 f5 d  \& n. U2 U      nDestPos++;2 v* n! {* |* |" Z0 @& [
     }0 ?. H/ R! p* m' b$ r! H
     //取第一个元素的信息
" F$ w. m/ X" O: v: T     /*, c8 b# A" z% `6 V5 L7 q
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( X2 I+ d3 I* W4 T! J+ @! H3 K     {
' q; {! r, e6 F1 C2 F6 s# [      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 V; R6 ]1 H. B9 q9 ?2 n      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( W9 w/ x% K, v- F  T8 Z; D2 y# p
     }; ?% `* T, u5 g8 B  v: R3 z2 Z+ L% \" Z
     */
. {: [# F( Q& E1 F    //////////////////////////////////////////////////////////////////////////
. p& k7 S, H$ y' Z9 `" k# F+ U# n. h    break;
6 s" U! O! m' s2 q, w- R/ `, W7 R* n2 e   }  L. e, T$ q+ p
  }
+ b! p, L! m3 b8 {1 K2 H+ }; Q- d}
  n) B/ K: k3 p9 M$ Sm_wndMenu.SetVisible(FALSE);
& J+ k) e8 q1 I
" S( [7 N) j1 h--------------------------------------------------------------------------------------------------------( Q" E- [4 g- D8 t! |
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! D' D& O( U" H4 R) d, K  C. D$ W{
2 }7 t7 Z$ o5 L8 x& t- |: eBaseMouseCursor();
# t3 S" m% Y' j3 l2 X% X, C+ X7 n}  i, O1 H& C) ?+ |" q# C
在其下添加:
! a3 o4 {, S2 d9 F- Xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); }4 F! P( k. f
{; X! W5 I- b! C, `
m_wndMenu.DeleteAllMenu();$ E% N. J! h( J9 R  K5 }
m_wndMenu.CreateMenu(this);! _( H! p3 H# y( C% M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 v4 {. f6 J/ L( @
( \# h, H* l9 x  ~9 ]
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! o- Z2 @) G# }, x
{% [& [  H: [) p* K
  //P以上级别才可以删除所有道具
* L/ S- p% s- W" S  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) z4 b  V4 ~' I
}# ^; n# s( `7 z: w3 g. a
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 L# _3 {4 @0 P4 I# A" ?) l: Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ Y' j! p( O7 n6 j0 Q$ pm_wndMenu.SetFocus();
3 s- r0 W9 ?0 G* Q" i- W/ W7 P}
( I! E: X0 V+ t4 J% [* H. D2 M+ u------------------------------------------------------------------------------------------------------------
2 D' P$ h" j) v*************************, z% q& ?( S7 @) |- e
WndField.h文件# Y7 r, _' `7 N4 z9 w4 h
*************************
2 F% R- _; ^, Y$ E; E* D搜索:BOOL m_bReport;
. ?5 M0 ^$ ~0 U. T2 w其后添加:" n; x, ?( ]* Q* G9 R3 H
CWndMenu m_wndMenu;
6 ^5 K0 E/ I1 p! |2 o; B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ R& N/ |: i* Q- |5 H" n
其后添加:
& F0 @' c+ y) M$ L, |virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 o5 H! x/ }/ j0 f2 u4 [$ T6 M
1 ^. q- Q: O" J! [& H
: V% k' D* n  }9 ?

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-23 07:11 , Processed in 0.065180 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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