飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件' @4 {) z* n+ r2 O( |7 A
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. t3 v9 }* u1 E( k1 O4 ]+ R9 K" ~. O3 ]! ^; c
struct sItem
1 k' l. z/ x: W2 t; x& L. T{
- ^" S* F; B4 p9 F+ N6 ?( xDWORD dwId;
7 g! R9 N( Y0 H0 a. [" eDWORD dwKind2;6 i8 Q" l  }& S7 R
DWORD dwItemId;' v3 j0 Y0 e" l2 N* q! ^
BYTE nIndex;
+ |( `$ C- J' J5 d  d9 G2 d' ]sItem(){2 c' z$ i) K2 n
  dwId = dwKind2 = dwItemId = nIndex = 0;
* B8 Y3 R" V+ i0 k# R3 N}
! n- a7 l# h( _( wbool operator < (const sItem p2)* w" S& a: ~8 {% o5 B9 t3 o
{
' }0 _+ V! d) m7 Y" }  if (dwKind2 == p2.dwKind2)* n) C) f2 @' Q
  {# k  g: k- ~9 j: m
   return dwItemId < p2.dwItemId;" O, g/ d" F5 |  {: D: v
  }else{
) ^: x- [3 x. _   return dwKind2 < p2.dwKind2;
0 n4 N- H: ?  \$ s  }
/ F" E' t; G1 ~& ^}
! y  F! f, F. X5 @6 Z};
- F2 ^& _- s& \' F  B0 P* g4 \; Jclass CInventorySort0 k2 i' j; ^. S* a% B
{
, G; {5 A/ F1 xpublic:' M  X* `* l# o, C% ]: G
CInventorySort()
& N. V8 O" d4 z6 R$ S1 Z1 a{/ G: D9 I- J  I$ x
  m_dwPos = 0;  r! N7 x( J# |. }! P% c
}
8 Z  @7 l: M3 Q/ s/ n; b# y8 N4 l~CInventorySort(){}$ M+ ]6 Q! I, D, V, ~, R' ~
private:& c8 \7 W6 ?6 W; W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 W9 I$ P- I* m  M3 Z
DWORD m_dwPos;
( o7 q. t8 L* S" V: H; [( B1 Kpublic:
  Y6 ?, c  c$ O; ^! H: gvoid Add(BYTE nIndex)' Y/ M  F' {" q0 b2 G. \% X+ G' d
{, H& F! L0 @/ q5 y4 g" q7 u- `
  if (m_dwPos >= MAX_INVENTORY)* k# I; R! k' t  j# Z2 m' K  E9 i
  {$ J8 Z6 l, u1 I+ V5 t
   return;
# ^# c2 {$ t' p5 ]- _/ S4 p  }3 M# Y3 a4 q, |% w
  m_Item[m_dwPos].nIndex = nIndex;
; t+ ^; ~" d9 }& E( v- F" J; E  m_Item[m_dwPos].dwId = m_dwPos;, k$ b0 J; G" g+ t" T% t6 q
  m_dwPos++;
- a% l: K% @( R1 D+ B( |}4 C3 [2 u! C5 e  {7 T
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 s( j0 x* Y/ W) T$ l; j! `) n$ T{( |9 U' ~, W$ l1 Y& E6 N
  for (int i=0;i<MAX_INVENTORY;i++)
. y0 N; t4 R6 r  {
* w0 u) C& k& h   if (m_Item.dwId == dwId)
$ f0 Z- K7 I) a+ e   {
" Q) _) P4 H- _    return m_Item.nIndex;
1 `/ R9 l) _. A. K: \8 F& E   }) W1 `# k! o4 ?- f+ ^6 ~
  }* Z/ ~, y$ C3 B
  return 255;
$ o! F, r2 L  L$ D- f}
7 M1 x4 a; C) B1 W# ~, j3 o& W$ {void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 C' h" E$ A! F4 A% ]4 r9 T! o- Y{
$ u2 o$ U6 \5 N9 Q+ n: N  BYTE nTmp = 0;: Z) o" O0 T* ]% ^9 @# v1 N' @5 X
  bool bDest = false,bSrc = false;- ~( z" T" |! m4 I, P
  for (int i=0;i<MAX_INVENTORY;i++)4 w  j: r0 ?- z
  {
* C9 v1 A. i: W5 X8 b3 K   if (dwSrcId == m_Item.dwId)
+ {! B# z. v5 g3 ^& x   {
+ r* i4 f9 ]7 R# O    //id相等 则 改变对应的dest和src
+ `( A( U& a% X- Q9 p    nTmp = m_Item.nIndex;* O5 a& d5 l* A! J" s  R; x1 W
    m_Item.nIndex = dest;: Z- l: [( }' p. o, x; @, J
   }
0 A0 t8 L" h! L7 G) \5 [  }
7 J  Y: @: g+ h& h3 b0 K4 l1 }  //临时数据保存完毕,交换开始/ t: _& ]. k  R( A" I7 ~8 X+ ^
  for (int i=0;i<MAX_INVENTORY;i++)$ D0 A' \5 P5 U/ W
  {
: K' A1 V# p! Z2 ]   if (dest == m_Item.nIndex)6 q3 c1 q) n' u0 d$ j5 i0 B  F
   {
) d6 @) g, u: u% _  W    //id相等 则 改变对应的dest和src
$ V6 u8 H$ k8 H4 F6 S    m_Item.nIndex = nTmp;; z% e/ Z, Q- I! A
   }
: l" W% ?( \& U/ w) L. Q  }, ^+ l/ u) P" a6 J1 A
}
. W4 X, q' _+ A: f" U, f};" P) n* \. o% F! o/ p
-------------------------------------------------------------------------
4 D2 r8 f3 t6 e& u3 E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ n1 @0 w0 L6 u& Q! i
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" {+ x' Y& {/ c1 |
紧靠其上添加:
/ V8 q4 h% f8 P  p2 p% _+ Nif( pWndBase == &m_wndMenu )
8 E( {* m0 z( m8 L{
0 N1 n( F/ n" w6 E4 p  switch( nID )" l/ D4 G1 |' u/ f
  {. w, p) `- |! t, h. A& p6 J' H" L
  case 2:
( H8 [; H* ~( o* V   {" C" U6 }$ b/ a
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 E& t$ g1 Z0 J4 H/ r' ?% u    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) R! q- V8 J; I6 D( ?: n2 z8 E, y
    {
* Y# l" [9 _$ |. ~7 {0 M     break;
# T. \9 L$ V, b+ S& ?: [. w6 y) J! O    }# }5 H( E$ p3 K& L" Y
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* l. Z9 h% K( |4 c# C    {
/ A" e5 M( t9 e3 _- d5 {- C     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; |0 q+ G) G! K: O& l     if( !pItemElem )7 k) ?7 _: z4 X2 y' e
      continue;% u- g2 O9 t' a* c! q1 n6 C: m
     if(pItemElem->GetExtra() > 0)
3 a0 h- x2 l4 R/ E1 j! O7 |$ `9 l8 ]: m      continue;) F& K5 U% n' t7 I' B. h8 Q
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 T) N1 M9 M' p9 k- o! F      continue;5 r  x% u! M# n
     if( g_pPlayer->IsUsing( pItemElem ) )+ Z$ O" h- u  {$ C, U* {' Z6 b* [
      continue;6 t3 I7 P/ @) q2 p) J+ v6 S" W
     if( pItemElem->IsUndestructable() == TRUE )
" _. @+ q! q# V& [4 }! p     {: k* C' {1 F  [& Q7 J" a8 c" T
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. o: K; Q" ~8 D% ?* v$ }$ B
      continue;8 q3 n0 p6 h+ K7 r
     }
: x6 J  P! S: q) @: }, C     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! k5 O# G$ h, Y5 s    }
3 y2 a+ F( B* g+ `2 k: i/ O    break;
& M7 c2 U3 ^% ?3 V" |   }
: r, ^' h/ w# J1 D  case 1:. g# m  l5 Z- E& Z0 i9 @
   {
( a1 s+ X1 L: p8 ~    //整理背包, B9 t% R7 W! u: J$ Q
    //////////////////////////////////////////////////////////////////////////9 L( n$ D" f3 A
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 _& Z3 I0 d% J( b) U
    //////////////////////////////////////////////////////////////////////////
4 Q( ?; J: F5 U    //////////////////////////////////////////////////////////////////////////
7 w: a5 l( ?+ m4 n( Q    CInventorySort* pInvSort = new CInventorySort;2 u; Y- K4 F# v8 H$ W4 L1 s
    vector <sItem> vItem;
4 {4 b6 j+ x' y( I! Y    vItem.resize(MAX_INVENTORY);//初始化大小% ?# `: c+ a1 J8 o/ s  m/ n% q# [
     //////////////////////////////////////////////////////////////////////////2 i+ b1 V' t* [, k
     //填充数据$ E( L4 S- a) L( J
     for (int i=0;i<MAX_INVENTORY;i++)
8 ^+ ]' J  q% h     {# p& O% I6 Y$ Z
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: M4 g1 H4 e; c/ Q( l
      if (!pItemElem)8 U7 N* N+ M" s3 u* y
      {
6 E! z  D0 H9 k! c. h$ k; _       vItem.dwKind2 = 0xffffffff;
" R4 X+ |  A# g/ q) j& _6 i       vItem.dwItemId = 0xffffffff;7 Z. R& P$ @- b
       vItem.nIndex = i;
4 M$ O: x9 }% t) P      }else {! ]8 I$ V2 v& k( V
       ItemProp* pProp = pItemElem->GetProp();
1 g0 S- d, K/ Y       vItem.dwKind2 = pProp->dwItemKind2;
& l9 }) Z5 K7 Q2 p* ^       vItem.dwItemId = pItemElem->m_dwItemId;) }1 M0 ]2 a$ P. d
       vItem.nIndex = i;9 }1 w! q/ E" D, B: p0 M1 g9 @
      }- _( {  J. n. k
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& Z. `4 A& Q) V. y
     }
6 \. C$ u7 |* g/ J     //////////////////////////////////////////////////////////////////////////# I- r" T3 K* N" C1 j4 ]8 v" V# j2 l, L& s
     sort(vItem.begin(),vItem.end());//排序
! T. N! J  u( @. \) h& b     //////////////////////////////////////////////////////////////////////////
: l8 [% Y9 n8 Q$ P! X* |     //交换% @& l4 Q- n# F9 f
     for (size_t i=0;i<vItem.size();i++)1 S$ Z( q/ o" O. Q6 i3 w3 i* e
     {
: Q: w( w8 I' X5 ^- r. q6 d  n      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 X0 X0 Y. u3 _
      pInvSort->Add(vItem.nIndex);) M* Y( x. M% i% k$ @+ |
     }
& x% p' u$ ~3 {) ?3 d     BYTE nDestPos = 0;
4 j4 X+ Q; E, L: _1 ^+ B     for (int i=0;i<MAX_INVENTORY;i++)
# L2 s+ P, e: u: ^& S     {" \& n5 t5 X9 ]0 p  e- A4 V
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( b, i4 t" X. A) Y, w. N/ d7 v
      if (pItemElem)  {9 Y$ [5 M8 U6 Y4 Y# W) x
      {
6 R, T$ \! E' Z  Z9 ~% G% C       if (IsUsingItem(pItemElem)), S0 V  n) ~# `1 |% J* J
       {9 P$ M; I  P- }2 }- ~, s
        //这个位置无法放0 |$ o3 ~- ^6 J: h- o0 K/ _, X
        nDestPos++;. C/ W) c% C/ P7 k
       }2 D; S, d: ], n
      }
) {5 X7 J' u$ [) S  z1 a* O      BYTE nSrc = pInvSort->GetItemSrc(i);
0 D9 y, G) q. o! p8 x2 h      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 [  y. U- m# |$ g3 i      if (pItemElem)
, Z( u4 y/ y# \# _% Y- k% ~      {7 [! ?% y$ S5 O. T
       if (IsUsingItem(pItemElem))" O- e0 e8 Q, |
       {
, D; z  _  q9 a" F$ G, ]        //这个道具无法移动,跳过
/ c1 K& n& N$ _1 O: X: a. U+ G* a        continue;
4 Q& m: Z( _) v; x, \+ t       }
7 h" @1 A9 ~# ]' j' r3 N      }else{
) o% N0 J. R* y( k       //空位置 不用动/ X/ A2 B5 A: r+ O* D7 z& r
       continue;
8 q- D; {' m6 Z* A9 N( X      }1 N$ v6 B: c% r. F4 H
      //////////////////////////////////////////////////////////////////////////
- F& u0 f$ ^9 h5 J3 G7 J      //开始移动0 O. p  D! u2 M3 V
      if (nSrc == nDestPos)
. X% z7 {: S) [6 }: Q" i1 ^; T      {
. X! O: M9 F. a       //原地不动6 z* C9 T# j' z9 J0 c' I7 g: J
       nDestPos++;- c  C0 v1 K* r$ x0 h
       continue;, M8 k  P+ K  v  O8 S# y
      }
5 l7 T" d1 G6 ^9 T: d* _2 n0 Z) b      pInvSort->MoveItem(i,nDestPos);+ e8 Y: T/ N& p% M
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 b0 t+ {9 V! ^( I" O; N6 \
      Sleep(5);# Z0 h4 ~( |" C% c
      //Error("移动 - %d->%d",nSrc,nDestPos);
7 z# S3 B! Y! Y      nDestPos++;
# ~3 r2 w0 G7 \$ E! D  T     }  i: R% ]# p6 z6 N9 G4 ]1 K
     //取第一个元素的信息4 }& c4 Y1 Q; _6 [
     /*/ r6 s, N4 K$ |: q0 c2 e' |/ J
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 a; h$ P& P, V# D2 X
     {
" i* n4 l5 L% Q# q9 b      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 M7 E! ^- A% r# ^0 O0 a, k
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 L# ^7 E3 L) h9 M9 `# {     }0 ?" D0 r: a$ U& l1 R- a
     */
5 @% ]3 i! Q+ @: T  E  {    //////////////////////////////////////////////////////////////////////////# x3 T$ C7 i' z, B7 x
    break;
/ }6 `5 w8 s6 A4 p   }
+ d$ u) o% y# d* b4 r% F6 j  }
. }' J. I0 X) i}- v/ w# h1 W) n! y( h0 D
m_wndMenu.SetVisible(FALSE);4 h3 X2 h4 u+ F* F* {$ t

- ~2 m4 O- \1 A5 Z) g--------------------------------------------------------------------------------------------------------$ r7 C% _1 v  ^7 v: i
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 T1 X4 w0 r/ X! d5 y, N, p7 v{
7 {3 e% q' v( g/ mBaseMouseCursor();( Q0 ]8 R' B9 }$ L3 B& ]- v( c4 Y
}0 ?8 Q- e% j0 z# S1 V  @
在其下添加:
! v; o/ [3 z- v" O! Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- V9 l3 J  R9 E4 L
{& ]0 O; I) ^5 a6 o4 h
m_wndMenu.DeleteAllMenu();
. O# ^7 ~) @3 t, z! M' Hm_wndMenu.CreateMenu(this);
6 V% S4 B2 G  S& T$ ^m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ W1 E% j& {0 ?. }* k; _/ w
; O* u9 \1 J; G% j% e2 r7 E3 W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# y0 T' D0 y, c- Y% M2 Q{
# g9 ]- Y8 T5 ~7 x! b0 |  //P以上级别才可以删除所有道具
; `- [7 I: t3 g6 r" D+ X' Y, Y2 a  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- `) f: l" B* u- u- B5 ?- p}+ U' C3 v: n; m! i% D$ x
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* ]; f5 U- s/ N6 e, w; Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 V$ s# O) W' v; d  v0 um_wndMenu.SetFocus();
+ V8 }+ w1 x, _: n/ f% K9 P}
' ~" _  L  z( n- A- X------------------------------------------------------------------------------------------------------------. b* V, i. i# d# G. M
*************************0 _$ r/ E/ {; U; _0 L
WndField.h文件% m, R& T3 d8 M' j( X
*************************
8 x& ]4 {" E9 i: r& N4 J' ^搜索:BOOL m_bReport;, f5 @8 O2 r# F' j* U% X/ J
其后添加:
( s% b& }1 t0 p; M- [CWndMenu m_wndMenu;( D" s& s  F7 k/ T* {: {
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: P( k$ W$ s3 E% E: L( C  c; _其后添加:
! p8 X" P2 ]) G' S3 W3 {6 y1 n! evirtual void OnRButtonUp(UINT nFlags, CPoint point);
- z! R2 _1 y7 d* S& Q; e) x7 J
9 g9 R  @% d' N; s8 W
2 s: S/ r: t) O8 _

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-31 14:36 , Processed in 0.071892 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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