飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1090

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1090
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
' w4 w. ]3 X: a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ `% T6 p5 d7 t  n6 ^: D. ~$ J
0 Q0 a0 j( {& y8 I
struct sItem
/ r: X( B5 q$ S) ~* v5 W* R{0 Y& M1 o" A8 g6 U
DWORD dwId;5 J. w& l; l9 ^  q  v' b4 T
DWORD dwKind2;
1 ?, Y0 m8 r- `- R3 h2 rDWORD dwItemId;
0 H; i' X6 ~& n3 l! E( KBYTE nIndex;; G4 P4 }# Z& _
sItem(){  v) ?4 M6 Q- d4 r
  dwId = dwKind2 = dwItemId = nIndex = 0;  ~% H! ^$ u, t% m
}
/ X8 W* \* P/ T% i7 c5 u) F' jbool operator < (const sItem p2)% s3 U) ?7 c3 O
{* C5 [/ d: c! I4 L0 O
  if (dwKind2 == p2.dwKind2); d; P- \( r0 f& _8 z7 I$ I
  {, N9 x# q% J1 _% B: ]
   return dwItemId < p2.dwItemId;  u; a% x# I7 P8 I( {  Z7 H  R
  }else{
4 O; h$ f6 E/ U; h2 [, W/ J7 U& T2 u   return dwKind2 < p2.dwKind2;
$ M: |) {+ P3 l  }
& s: r* p0 r  u4 W1 C+ d. _}
/ b7 ~7 n0 [: O) |- g  ]) K+ n};7 q# P2 v) I  i: d, T1 f1 D
class CInventorySort
3 M5 a5 t' i2 g{7 f% S0 n% v2 D, C! ?8 Y
public:
! E/ a) e* `& v) J  b% G# A' U; LCInventorySort()! m4 h; j, q: P7 S
{
% S/ h4 x+ G2 B. i1 b6 t  m_dwPos = 0;
- @! Y2 R& h1 v/ M2 `; n}& |. U# b* Z) v* O$ C1 H% {/ g
~CInventorySort(){}
3 q* G1 d$ S/ t) E+ d- N* Cprivate:6 t; m- J4 W. j
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 ]2 f2 @; F* @  B. t8 P8 K# NDWORD m_dwPos;
: d+ |% E: @: Q) Spublic:
( z! {9 e* o' q4 v0 Avoid Add(BYTE nIndex)  ?0 \: x: D' o# T6 b# @7 w: e
{
: _! U1 n$ k# R5 f  if (m_dwPos >= MAX_INVENTORY)3 |1 O1 l7 F  n6 n: g& d2 K+ B
  {
3 E8 `. Y! L8 b# Q, ~) {   return;
+ x4 c% S3 X  z! B  }
* [& p# q6 C, O8 y  m_Item[m_dwPos].nIndex = nIndex;
$ o# P; @! F* x( h, |* N0 k3 g# K  m_Item[m_dwPos].dwId = m_dwPos;
% t" q; q* B8 P$ ?7 |( i' y- z  m_dwPos++;% Z) M, K! e- _- v9 D
}
% r  W% H! W8 S5 s* Q6 m5 b3 ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 i( I* o* o. z
{8 _# r1 d2 m0 S7 ^/ U1 U2 A
  for (int i=0;i<MAX_INVENTORY;i++)5 U( G% {1 J7 j' x6 h  ^
  {6 E9 p( M- M! w4 t; }: K
   if (m_Item.dwId == dwId)
( |6 N& `* o9 o. K6 j* W) y9 ]   {
: m4 c/ r, r" ^2 a9 k3 e, a) o    return m_Item.nIndex;
& L  k) v* u1 [5 P5 V3 w; s   }
' [8 i% F+ c6 }  }5 a" j% e  |' T' @
  return 255;- J9 o' b$ J* n
}
( \) y$ `9 _; ^$ g* O) hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, @8 ^& c5 v  \6 R* d; ]2 u{& c' E! S2 @& E
  BYTE nTmp = 0;+ _$ v' X& I" w& A& e% Q5 t8 T
  bool bDest = false,bSrc = false;
! _8 W; ]7 N3 i. t, i6 E  for (int i=0;i<MAX_INVENTORY;i++)
0 X$ |$ V  Z3 F4 Y$ D' X9 W7 H" O$ x% l  {4 e$ d9 a* P) V  t
   if (dwSrcId == m_Item.dwId)  f! C5 U0 m4 E1 G
   {
+ u9 U, T2 f" c: Z2 b, Q9 X    //id相等 则 改变对应的dest和src
8 U0 e1 R5 h6 `0 U/ D4 X; r  u    nTmp = m_Item.nIndex;
/ Z6 P$ q5 Q% f7 e  U9 x    m_Item.nIndex = dest;
# T7 v7 z3 @0 M& @1 [1 A- C4 l  F. _   }
& w$ \5 K, y& m" o& }. e2 v9 q  }& l* [6 m9 t$ Y# q
  //临时数据保存完毕,交换开始1 t, x2 V1 ^3 |2 s! S- ~
  for (int i=0;i<MAX_INVENTORY;i++)) ^, |1 j8 q- v
  {( D7 a" Z( q& \) R) Y
   if (dest == m_Item.nIndex)
# X1 z$ H% h& D$ x0 `   {
' |; `* G# n& J1 z    //id相等 则 改变对应的dest和src
% a8 b$ X- X3 M2 k    m_Item.nIndex = nTmp;
( B; L* P. e6 R' k; _' [) O   }( S# }! M* _, {- Q9 {, P: l
  }. e% ~; R* q0 z& B; |
}
0 P6 g( [* s% U5 a9 b};/ f" Y+ F8 H, K! w; y
-------------------------------------------------------------------------) W2 k6 r7 P; T" k. D+ n/ {/ `
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' w4 |) T& n" K搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ c7 q- l  |; o( p3 [. K9 ]! [
紧靠其上添加:0 @+ a9 o. ]4 u/ `/ m/ m- S9 x
if( pWndBase == &m_wndMenu )
9 w' M, a4 J9 \8 i% p{) ^6 o& w( w  A) y. g  N
  switch( nID )% d- ?4 s: x9 d
  {
' ~; w! o7 s  }  case 2:
; a# t6 U' m6 {   {* `2 n: X! Y( [7 o6 X- G: V8 O
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 V! V; [+ K; J( r
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ B) L3 T3 \: U9 P& G0 |# A% P) |    {
4 i+ v9 ]% h/ p7 @5 w5 \( S) l     break;9 }$ R0 \; [/ R( i, s+ e
    }! W% @* M1 h  a5 l
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' t+ q1 B5 R1 v) [
    {* K. t% J' H$ X' h; E5 n( J0 u7 x
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 A9 a$ X: L! L. J$ I
     if( !pItemElem )
& J' B: f2 q* ^1 w# d- W      continue;0 L7 x2 L5 I, z8 S
     if(pItemElem->GetExtra() > 0)
( o8 r# I9 H2 A+ G      continue;
; C" x4 G" v" I4 G     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / l! @0 |. r$ d
      continue;1 p6 Z7 I0 R' i7 r
     if( g_pPlayer->IsUsing( pItemElem ) )
, r& A6 Y4 |7 R3 W      continue;
7 ]9 R+ {7 ]9 S: M; t     if( pItemElem->IsUndestructable() == TRUE )
2 Z* k( F$ z. s& D     {: f5 S- C* q. a; l
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 h  _2 ^' M& U& ?0 p4 l6 ?      continue;6 D/ W4 t- [* H- ^; u8 b
     }
" o9 g/ U( o: j7 z# Z     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" R& C4 O  v: @4 S/ T    }
: ]( L, x; R3 O! I: o! Z4 F% m! p# ]3 T    break;) {/ E0 T! E$ B2 D) F
   }( x; t; E! W% s# U  H( ^4 W: O5 r
  case 1:
4 f4 `7 e. @9 d! W   {. a5 x" Q) ?7 C7 @) {. m! u
    //整理背包$ P! r$ ]  a9 u9 }* |. k7 b
    //////////////////////////////////////////////////////////////////////////
" h; D7 P$ r& k    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 a( y3 l7 v  Z" s. l
    //////////////////////////////////////////////////////////////////////////* Y, Z1 |* R) G  T: L
    //////////////////////////////////////////////////////////////////////////
8 Y8 ?2 T& I6 a$ [  ^    CInventorySort* pInvSort = new CInventorySort;& ^7 I0 s: p0 [4 B3 W" t
    vector <sItem> vItem;
0 S( M7 p. }: U( z; Q    vItem.resize(MAX_INVENTORY);//初始化大小3 _: M$ Q7 `$ d+ e8 H/ e; a
     //////////////////////////////////////////////////////////////////////////0 u+ ]8 L& P" U, Z  {
     //填充数据
( l" N0 x  v2 z     for (int i=0;i<MAX_INVENTORY;i++)
: P2 h9 M8 {) F# w0 t; f4 T& ^. `     {
7 N/ }2 K. G+ [      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: x$ e% F8 z0 R
      if (!pItemElem)
8 k- N/ d* J& G) U4 I      {
* }2 n# v* L2 L$ J# h       vItem.dwKind2 = 0xffffffff;0 c4 _; T% S' O& n# C) M) H
       vItem.dwItemId = 0xffffffff;
$ m' \5 _5 v* K  X0 |7 ^       vItem.nIndex = i;( ~1 k5 w4 ?% A4 |
      }else {
  n; u& n% c/ l3 [- y! f       ItemProp* pProp = pItemElem->GetProp();/ L& `. X% V5 J1 j5 I
       vItem.dwKind2 = pProp->dwItemKind2;
# R+ }/ g" i4 r       vItem.dwItemId = pItemElem->m_dwItemId;
0 I# J9 |0 M2 B7 v+ O- [* O       vItem.nIndex = i;3 G+ Y$ }7 B* y1 V3 c! k8 O' ?
      }3 q" C6 |' S+ `9 L5 I* d$ W( h
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" k" Z! ?5 f  n0 }
     }" T4 T$ G0 J# b6 {: F4 n
     //////////////////////////////////////////////////////////////////////////& c/ _0 T- L: g; F
     sort(vItem.begin(),vItem.end());//排序* U0 R& }1 h8 a7 {
     //////////////////////////////////////////////////////////////////////////
& x- `! `0 t5 V2 g' e. A     //交换' G5 C8 ~4 ]* u9 G
     for (size_t i=0;i<vItem.size();i++)$ @$ S3 V; N3 _) w1 J! B7 R
     {
5 ~4 ]9 K+ Y0 l      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: {( I3 a5 L) V
      pInvSort->Add(vItem.nIndex);
) U. q, P. L6 [. s; s     }
3 I, ^9 b4 P" n: f7 ~% n     BYTE nDestPos = 0;
  U5 G# k; C7 r' J     for (int i=0;i<MAX_INVENTORY;i++)
3 Q5 z- f9 x& |4 ]- i     {
  h: ]3 X6 u$ K, ?      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 O' X, Y" `- H# D7 M) x* i4 |+ L5 v
      if (pItemElem)- g2 k7 v1 ?, c1 F1 Y0 K: J6 W
      {
/ k7 H7 M# L. k       if (IsUsingItem(pItemElem))
& X/ Z" Q8 d) f0 S) J$ r/ s       {
2 S' Z' I' {: z& K  v& F        //这个位置无法放
5 |8 N+ T  Q) l% P2 I' h" u        nDestPos++;
% K) c* C1 p( m* E2 n+ Y       }3 s3 [8 U: c  \6 w; Z& U
      }
  C5 l; G0 F2 _" e$ W      BYTE nSrc = pInvSort->GetItemSrc(i);4 @" P. B# `0 K; B% X: x
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% W4 J" {: X' R* A      if (pItemElem)7 o! M! N! n% L
      {
& ^, B+ @/ t$ s+ k2 v6 i       if (IsUsingItem(pItemElem))
6 k1 B* u( G! v6 @  }6 s       {
' |; q  K, R! e5 ^/ F        //这个道具无法移动,跳过5 C' s* j) [1 i5 p( e
        continue;& M% k; @4 ?- R, \6 l
       }% B; j+ R5 J7 u; x3 [0 N
      }else{
; ~/ P/ `% c; x: H+ B) Q1 `0 m# v6 V       //空位置 不用动* y0 \2 W3 ]9 n* M+ v8 L
       continue;9 u/ o" P. H: K- R4 B3 L! o
      }
; |2 D: Y8 D) r  L; a2 K0 z      //////////////////////////////////////////////////////////////////////////
4 c! `/ Q; b, a* b1 W* x1 r+ G1 b      //开始移动
) ~8 S' y  A* x3 c      if (nSrc == nDestPos)" A2 o) {" m7 G% f
      {; |3 v: L% K, f- g# [) {# [
       //原地不动1 Z* A: Y3 B; u; r0 _, H
       nDestPos++;3 `- L- l7 Q3 x
       continue;$ p5 P4 G& X, ]. k& v9 m8 ^
      }* ~, c- x- t; L& N( w" {
      pInvSort->MoveItem(i,nDestPos);
0 e; n: F+ a9 F/ h      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ ]; {/ b* k& O      Sleep(5);  b4 {; K0 E( C# }3 q9 P
      //Error("移动 - %d->%d",nSrc,nDestPos);' Q5 F1 K  M; \2 D# \! T& M
      nDestPos++;5 E2 N' p" ]. j4 X) y
     }
3 L8 L7 d* x; J% F) p, _     //取第一个元素的信息. ]2 o& u+ z) N) U, p& D$ Q+ ?/ Q. H
     /*; d; I+ N5 q) @8 {- T" Q
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 n# E5 S6 N1 Q# ^5 c- V) H4 {2 `* @( }' H     {6 z) f% t6 \5 Q; I
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 o5 W0 n3 M5 B" l* F, D  C      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 Q- |& w' K) ?
     }1 V5 x# c; H% Y5 u2 j
     */
( G4 z2 J8 B* I) A    //////////////////////////////////////////////////////////////////////////" P' c. _2 L. [4 f' e9 \# y7 P
    break;
3 M' k+ Z" j! ]) Y" E   }. c  `  k7 v* H+ W3 N) T
  }
6 @8 `$ h' o- B9 s}# x; J+ s" c& d9 T7 y, r' p
m_wndMenu.SetVisible(FALSE);
2 J, `4 q+ [8 `/ u: a; J( X2 @& {4 n* }/ B8 g
--------------------------------------------------------------------------------------------------------% ~& S+ E7 ~8 e% Z+ j: B
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! i3 b4 y7 W2 Y" o
{
- }7 O; h8 u9 E9 }/ L/ H5 x2 Z2 ABaseMouseCursor();
/ [/ F) G* s# F: Q$ w" B}9 T. i  P  S) [. |! |
在其下添加:
& e4 K* b! G' J2 ]0 U, Z5 ?6 \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: c' N: N+ Z/ c1 K- @* q7 W{
$ h7 z% y' }: Z# Z5 L9 bm_wndMenu.DeleteAllMenu();+ M+ c) \# m  P. S: j' I$ ~
m_wndMenu.CreateMenu(this);) e" j$ ]$ R% J$ y8 I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 p% Y- ]+ |# r0 M' e
: z8 B, T! G7 V& n: Kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 H- |$ U+ a( M( d% t{
% F* P0 ?* Y: @) I" U& U4 m% R$ k  //P以上级别才可以删除所有道具, u% j# U* f, O* ~- w
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. ]0 L2 j7 [# s
}$ `8 J6 `& Z4 v7 ^) w+ c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. H1 y) j6 @8 ]; k7 q/ ~2 d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 n1 |3 ^. u! k- |; J8 ?m_wndMenu.SetFocus();" y$ C" C5 {8 r. t  Q6 F
}
) y) K6 n! ~+ ]" E+ A) M0 j, p------------------------------------------------------------------------------------------------------------4 U" N! j) C7 Q$ U
*************************
, g* E4 P+ \& U' u. d0 |0 lWndField.h文件4 K3 c* z0 `3 i
*************************- V9 x0 j- v/ ^9 K! H
搜索:BOOL m_bReport;
5 D' A) j. M$ b/ a' w8 @6 O( f: Q其后添加:4 {/ `+ I, V7 d5 Y" c9 K$ t
CWndMenu m_wndMenu;
( U' v$ W- g0 [% Z) b3 Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 G' t8 }: ?9 t8 y7 i" v& Z8 F
其后添加:, M4 A% I. n9 M* k" X( x% N: |4 ^5 A8 s
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 x3 O) p, ?7 V% C2 h& R8 ]9 E, R7 O) E
' J1 a# E. i) Q0 o1 u* O

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-28 14:27 , Processed in 0.067432 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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