飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件$ G1 n. x( W9 H: d! E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ O6 f! J4 B6 D9 ?6 N5 T

$ V6 Z( e8 {# I+ wstruct sItem
! I, h" l, D( z{
7 e2 a* e$ S! S/ m( G# [DWORD dwId;
/ B5 c+ k: d! g' N* WDWORD dwKind2;9 `0 A9 O  j- ?# b
DWORD dwItemId;1 A6 l1 N4 e+ _9 Y1 H
BYTE nIndex;
9 i# U% Z. N& J, a# ?7 qsItem(){: i1 V2 B% z! i* [
  dwId = dwKind2 = dwItemId = nIndex = 0;; L2 t3 k2 N% h! l+ L: q/ s
}
  v7 F0 i5 V+ V: i7 w. Ebool operator < (const sItem p2)9 N0 o9 B& k7 d6 b: g' C3 V" \
{* F3 I0 W6 R6 I6 Q
  if (dwKind2 == p2.dwKind2)
' {, O5 V; R" g' T6 p  {. q6 v. E, i1 P/ T+ H
   return dwItemId < p2.dwItemId;1 R' L) N8 c2 d! W# n& D
  }else{$ f; `+ m7 f3 R/ m& [0 N
   return dwKind2 < p2.dwKind2;
. C( K5 }9 |8 A0 k' K  }7 n) V! W% e+ _5 t
}2 O" V2 Z: [6 G- n
};! d, |, p# p5 m+ }+ ^
class CInventorySort0 v0 }4 T+ w6 J% y. B8 Y
{$ ?1 d) ~! o$ Z+ l: g
public:
) i" A2 I: p7 o5 C3 C- E( L# wCInventorySort()
/ c5 r% d. d% R{
+ ^$ C; z0 T  I' F9 o  P7 W  m_dwPos = 0;. ?& o. N: @; y
}2 s0 ^- f$ ~! J1 C
~CInventorySort(){}
; f" n* {8 s7 p# h# d" }private:- m3 v0 c- u) ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 J( n+ }" Z6 ?3 F# [! Y, tDWORD m_dwPos;
  Q! O7 G" }, g3 {public:7 _, }! a- i$ _7 ?* G
void Add(BYTE nIndex). ]3 _& G$ R, k, D5 {4 o, w
{
4 Z! T7 }: X" P3 F: L+ a9 E  if (m_dwPos >= MAX_INVENTORY): F6 p% o+ u& L, e7 X
  {4 K. t6 y9 h, h0 w' ?1 ^
   return;4 Q- I4 V8 D; ?
  }8 ]8 l! ]' i. F$ m% B! v6 b' `: D
  m_Item[m_dwPos].nIndex = nIndex;5 D5 m$ |# w* ~& x" a6 ~# ?1 j3 ?
  m_Item[m_dwPos].dwId = m_dwPos;4 g0 [6 @' x2 d2 H, \, {( r
  m_dwPos++;
& e8 _; [4 T1 k1 A}
/ C) w! i- L) D4 {( z  k3 ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! T7 [7 ~2 z( _! }  G+ c: \{
1 N$ h# z9 P# G1 `% e  for (int i=0;i<MAX_INVENTORY;i++)$ R2 T5 K% S: M4 A/ \
  {  Q& U0 j8 o0 y( t9 a9 l; K
   if (m_Item.dwId == dwId)
3 ~3 J' W+ w+ [8 P' Y, Z   {$ p  J0 N4 y4 A' m4 [
    return m_Item.nIndex;
3 j% B- L; h/ m, c   }
* c4 p8 A  w, r2 J- s5 B; X' J+ P  }
& I6 C) F% Z# r, \/ F0 e# R/ V; F  return 255;
. ~1 m" n4 X' T" N}
4 u- i6 ^# s, u2 ]4 Z( A3 N5 z# f6 Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置  w6 U* W" b+ b' L$ f% P
{7 z4 ]9 g( f6 _6 M
  BYTE nTmp = 0;
) ^: `9 m& E: p5 ]9 }. y( J  bool bDest = false,bSrc = false;
' `. R4 ]5 O8 ]8 n  for (int i=0;i<MAX_INVENTORY;i++)
# o8 Y/ Z. H. w; m  {
/ ~( \/ }+ \1 f  n   if (dwSrcId == m_Item.dwId)
6 K* }1 B+ v8 {) b7 c% Q! }) Y: B   {
) l/ W. ~! n" j! G( Q: K    //id相等 则 改变对应的dest和src  s0 n8 N/ N* n+ A) a
    nTmp = m_Item.nIndex;
  p. H) ^# a# ^" M! N    m_Item.nIndex = dest;4 r5 @# L: M) z7 D+ X
   }
- L3 _# f. H# X9 Q/ Q1 `  }
7 \8 ?  |; K( {% D' h  //临时数据保存完毕,交换开始+ M; H$ p$ W, s, U; W- m5 ]
  for (int i=0;i<MAX_INVENTORY;i++)" h( E+ d+ }% x* l1 B1 C. f
  {
2 Y" W6 S1 ?  w8 L   if (dest == m_Item.nIndex)( p0 u7 q- ]7 R  F- `; I' U
   {
$ }6 B0 _* d7 Y! P6 l2 G; ~  Q    //id相等 则 改变对应的dest和src" Y1 f# {2 U  J3 _0 C. ]
    m_Item.nIndex = nTmp;6 U% _& y1 f; H) ~4 y: J
   }# N0 ?: q+ ^) b. ~/ {: z
  }
' k5 F3 P4 Y; }}
9 `! g( z$ S. V, R. ^0 l};8 U4 {; a* J7 K
-------------------------------------------------------------------------
: k  U8 J% p( ^* R依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 k% _/ d, C# x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, c# e$ N: h! l( z% [) P) u紧靠其上添加:, N( d- Z- F! }) R, B; F, ~6 i5 P: D
if( pWndBase == &m_wndMenu )- T' t! [! U2 S  f3 m$ h" U
{
0 {6 @. h; C' G/ s, M, e  switch( nID )
0 y+ l3 }$ h; o! m  {1 r/ {- ]2 C: M: c2 N# S/ A) j
  case 2:
# a; N' h9 d4 \1 o6 A   {1 e3 V  p$ T, N: s
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 Y" B8 q) ~1 |6 w5 o2 B+ J    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 I: s7 l% ~5 k$ ~+ _& E+ ]
    {
, v' ]3 Q3 z1 y) e6 i     break;
9 y% j9 T! H; v, W4 p    }( ^* d9 {- ?2 X$ P' M# h  e4 z3 s
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 e6 _4 d( Q" |: g- T8 Y1 }! Z
    {
2 A" E" _) L0 Z; E( k, S4 _% D  H     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) F& r8 I6 L8 N
     if( !pItemElem )
; t7 `2 W/ h& i      continue;  Y3 |/ J8 \1 b2 _' m5 M
     if(pItemElem->GetExtra() > 0)
/ @9 t5 V2 P5 D* Y& P9 U      continue;
/ r/ o* t( e+ ~. u2 Z6 L1 r/ a     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 u, D& x* G( @- a- F- G      continue;
, D4 c; g% l3 ?4 k( Y     if( g_pPlayer->IsUsing( pItemElem ) )  K5 J1 e; r9 X1 F* w
      continue;
6 C+ o5 Z* ^8 n; L% Z4 o) T% S     if( pItemElem->IsUndestructable() == TRUE )1 e0 U; T: A! K1 `2 d; L& s* |( ~* ]
     {0 v: B' Y: S% y2 i
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# W! z+ W# T& t( n  p' ]9 D* u
      continue;2 `/ U1 E4 j/ r8 p( F
     }3 f# d2 G& G1 J4 A# n7 n9 a
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ j* I- K2 Y; T- n    }( h+ f  @* v$ d9 R$ D. w& y* F
    break;
8 q/ \) A; ?+ X% r6 s$ W   }
- D2 n( ]& @2 ~  case 1:
" p3 _/ g% W% Y! L/ w7 L   {8 j9 Y9 O9 P- A0 J+ t
    //整理背包
+ g% s+ ]$ ]9 Z4 v# r8 @, P    //////////////////////////////////////////////////////////////////////////" V9 A; |% d4 {; u+ }
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ N3 }3 B! r+ P% b: {    //////////////////////////////////////////////////////////////////////////
! _/ p# w$ o  K/ I3 n    //////////////////////////////////////////////////////////////////////////- D7 X7 f! f4 @7 @; T+ B: x* c7 s
    CInventorySort* pInvSort = new CInventorySort;/ M% M! P) w" r4 c) I4 U9 e
    vector <sItem> vItem;1 j: D; L+ [" n+ r2 z4 B
    vItem.resize(MAX_INVENTORY);//初始化大小# o2 v! U* v  O2 Z4 O
     //////////////////////////////////////////////////////////////////////////' C1 j) T. ?  g, a: t$ k
     //填充数据: n3 M$ ]' C- y
     for (int i=0;i<MAX_INVENTORY;i++)2 c! N1 l$ y- A5 d) ]
     {) Q) Q2 H) C8 D: q
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 p7 _0 w; _2 n( b8 G- [1 N
      if (!pItemElem)
* ~7 q! Z8 j6 W" t$ v# m+ i# d      {
) n; e4 `2 h$ v& U0 c; z       vItem.dwKind2 = 0xffffffff;
  E2 g! ^# K: E' y. C  j       vItem.dwItemId = 0xffffffff;- N! z8 a6 n, S2 U
       vItem.nIndex = i;: Q3 J( q% z3 l, V8 a/ M& k: |& d/ b
      }else {
( |1 ~- x/ q! I       ItemProp* pProp = pItemElem->GetProp();  ^3 @0 P( s9 r: f
       vItem.dwKind2 = pProp->dwItemKind2;
9 H$ R$ ]& G  f4 H6 P: P; h& ?  a       vItem.dwItemId = pItemElem->m_dwItemId;
) F2 }0 T7 L; N0 \0 S* s       vItem.nIndex = i;- l! F. g" X2 Y' Z" T& {3 C
      }
, e. w, ^( B" C& A- c# i' i% l      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. l% q! ^1 ?9 ?7 L2 v8 p
     }' C" r' r' `6 }
     //////////////////////////////////////////////////////////////////////////0 B( |& j+ ^% s3 b5 h
     sort(vItem.begin(),vItem.end());//排序% P$ X+ y% y" m' u" F
     //////////////////////////////////////////////////////////////////////////; G5 e- J, C- D$ `+ y
     //交换
; k8 E) u/ p/ C. o     for (size_t i=0;i<vItem.size();i++)
) w7 Y/ I5 A, }# P; s/ _, b1 k     {# j8 |) [2 W0 \/ Y
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. A, A# [7 D9 G. V1 B
      pInvSort->Add(vItem.nIndex);# u$ X8 ~2 ]5 m  _. y
     }- q. x3 y! e3 g& p9 X) N) S
     BYTE nDestPos = 0;7 L, D$ o# u& p
     for (int i=0;i<MAX_INVENTORY;i++)/ ?. t0 _2 b, R! B8 |6 n
     {3 Y- W8 o4 O  M9 H1 \  T
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& z0 Z" D- C: o0 J      if (pItemElem)
6 V- |* I/ Q( _( w      {8 W3 m0 a; G- P; U* h3 n2 q/ Q
       if (IsUsingItem(pItemElem))! E8 h* m' c- e
       {4 ?; E; i% j- D* c- ^
        //这个位置无法放8 s" ]  C9 d8 w' Y* S" H
        nDestPos++;. x: h* E% x, x0 n+ G& [. T
       }3 x( v9 f. a4 R7 I2 _3 Y# y
      }
% \6 b0 V$ b1 [8 i; x: a" T. C      BYTE nSrc = pInvSort->GetItemSrc(i);
& o- i& H2 o6 p$ W- j4 W8 X. B      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% U/ V9 e3 f5 X# \! M) P2 d, w
      if (pItemElem)6 N+ @# @& a: ]  [
      {
% X) G: o9 T  M- D6 P9 o. z       if (IsUsingItem(pItemElem)); s# V) r2 c: i" z
       {7 a8 H4 g# f8 g9 E$ n
        //这个道具无法移动,跳过
- L4 ~7 J5 t: u  z- [4 H% N        continue;0 P  V  h2 n# d, Q1 p  `; V
       }/ b0 \0 Q% l) ]& G; E% ^& E
      }else{. `7 b; d/ V0 ~7 W. }( N" d
       //空位置 不用动, k' _. K, h8 U
       continue;
; r/ k& }/ k$ z7 a3 S5 R      }
% W" p# S- C! X' L3 _3 y5 a      //////////////////////////////////////////////////////////////////////////
6 J4 ^; e" Y, q/ ~7 M# y      //开始移动
- I1 M" L& n1 z+ O; ^      if (nSrc == nDestPos)
; d7 W6 o- V3 j9 g( V$ G/ s: o      {" Z! s  }3 U' f- H/ o1 Z
       //原地不动
1 ?9 _+ V- D/ X% D7 P( m       nDestPos++;$ ^# M4 I  I. B, z5 y3 n, ]" X& R
       continue;3 W# e8 h# G, m$ M! g; {
      }8 V2 x7 {$ K! {- r
      pInvSort->MoveItem(i,nDestPos);
  y" k! R1 Y) L- f; O- l" f; T      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, R) d: u7 e  H/ `) b8 q      Sleep(5);
) l# x" e5 q1 G! A4 O* A3 \      //Error("移动 - %d->%d",nSrc,nDestPos);
9 m  P! P' A& A; ?# f/ w, S      nDestPos++;
# O4 X, G# ]3 u$ }9 a8 i6 ~     }
1 c7 d9 w/ |" R4 N6 f# u' p     //取第一个元素的信息
, u9 ^0 s3 I/ E  [1 C     /*2 j. s' v* V+ J2 F
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ o5 U% U9 G5 e- O     {
$ F( o0 P' y2 D      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 H. I( }3 J7 F3 @$ G
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' ?. V! Q- x/ }( d) n  V     }
; S5 y& L# ~$ f* T( `4 O2 _/ X     */
# u" M& Z0 @2 t8 [/ u+ D+ g& t* x/ g    //////////////////////////////////////////////////////////////////////////6 C" E0 ?- [! W2 B8 c& t
    break;
. r* k' N  _' n' L5 L   }
% g9 A( r( L- x* F+ ]: X  }
8 R2 n" V  |0 A}* Y1 H$ N6 H/ D3 N1 b/ l
m_wndMenu.SetVisible(FALSE);
& [6 A% F8 v- b4 i2 ~- i9 `' U5 H3 f1 _5 j  L! n- \
--------------------------------------------------------------------------------------------------------
4 ?- e5 R2 _4 m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) w- n- J* v  p2 t7 ~
{
# i/ D, N1 V! MBaseMouseCursor();
$ G: F( Z4 S) `3 G( m& ^}
& u! w( J0 M/ Y3 B% R/ b  O1 W在其下添加:1 ^/ z% p& [. K# q1 v! [( Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: `. P6 E( w5 P4 J# r{0 `/ k1 E+ N6 g% H5 g
m_wndMenu.DeleteAllMenu();
, \2 o5 R% v9 s! k# C0 Am_wndMenu.CreateMenu(this);
7 p( \2 G, B; S$ D8 T9 {8 Zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- j" z: \5 l  J/ Y8 e  ?

/ B8 ?& q& x, S/ c+ g3 tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. @) G9 C( o+ F6 K4 x9 n; i- B{- E4 |% _7 X- k& S( j, \
  //P以上级别才可以删除所有道具' Z- A0 s7 E2 N) u+ ~8 b$ f
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ N3 t& O& N( ~- N
}1 t8 N3 K8 t* _/ _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
4 k! F4 D( n2 E  F" [5 J2 g8 Zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( Z; s9 N5 F. o9 g4 d, X* t+ Dm_wndMenu.SetFocus();
& a4 C* z# T2 o) a$ q6 L}8 F' @4 i+ c. B3 t8 Q8 D3 g
------------------------------------------------------------------------------------------------------------
2 \$ P' j+ p) F( ^*************************
$ M( f& y1 \5 f& l' G( `WndField.h文件
  j: g+ D: ^8 d3 v, X0 |! s*************************0 C! H+ _% x2 A* G8 |$ c$ a
搜索:BOOL m_bReport;$ f9 t; J) Z3 u# Q' K
其后添加:% p+ I$ Z6 `9 I/ E$ O
CWndMenu m_wndMenu;
8 t2 R. N2 y* u% m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ j1 s# h& s( {) b. ^3 \
其后添加:
- F8 {6 {6 F- d6 A' y  W9 }virtual void OnRButtonUp(UINT nFlags, CPoint point);
( ~. T% q# C1 b2 k% T5 S7 ~8 m- z; M5 j9 X4 ?

/ z* |+ r* R. d) X8 n" e

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 13:09 , Processed in 0.061716 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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