Fix crash when trading items if using keyboard input.
This commit is contained in:
parent
b57c71683f
commit
1b41ffea5a
2 changed files with 93 additions and 9 deletions
|
|
@ -1,3 +1,3 @@
|
|||
[default]
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw1.0.5 r3 \cu(Fri 20 Aug 21:49:13 CEST 2021)\c-";
|
||||
SWWM_SHORTVER="\cw1.0.5 r3 \cu(2021-08-20 21:49:13)\c-";
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw1.0.5 r4 \cu(Fri 20 Aug 21:49:27 CEST 2021)\c-";
|
||||
SWWM_SHORTVER="\cw1.0.5 r4 \cu(2021-08-20 21:49:27)\c-";
|
||||
|
|
|
|||
|
|
@ -570,12 +570,18 @@ Class DemolitionistMenu : GenericMenu
|
|||
}
|
||||
}
|
||||
}
|
||||
else if ( ((tabs[curtab] == TAB_INVENTORY) || (tabs[curtab] == TAB_KEYS) || ((tabs[curtab] == TAB_TRADING) && sub && (sel0 != -1))) && (invlist.Size() > 1) )
|
||||
else if ( ((tabs[curtab] == TAB_INVENTORY) || (tabs[curtab] == TAB_KEYS)) && (invlist.Size() > 1) )
|
||||
{
|
||||
MenuSound("menu/demoscroll");
|
||||
ofs0 = ++sel0;
|
||||
if ( sel0 >= invlist.Size() ) ofs0 = sel0 = 0;
|
||||
}
|
||||
else if ( ((tabs[curtab] == TAB_TRADING) && sub && (sel0 != -1)) && (invlist.Size() > 1) )
|
||||
{
|
||||
MenuSound("menu/demoscroll");
|
||||
ofs1 = ++sel1;
|
||||
if ( sel1 >= invlist.Size() ) ofs1 = sel1 = 0;
|
||||
}
|
||||
else if ( (tabs[curtab] == TAB_STORE) && (storelist.Size() > 1) )
|
||||
{
|
||||
MenuSound("menu/demoscroll");
|
||||
|
|
@ -659,12 +665,18 @@ Class DemolitionistMenu : GenericMenu
|
|||
}
|
||||
}
|
||||
}
|
||||
else if ( ((tabs[curtab] == TAB_INVENTORY) || (tabs[curtab] == TAB_KEYS) || ((tabs[curtab] == TAB_TRADING) && sub && (sel0 != -1))) && (invlist.Size() > 1) )
|
||||
else if ( ((tabs[curtab] == TAB_INVENTORY) || (tabs[curtab] == TAB_KEYS)) && (invlist.Size() > 1) )
|
||||
{
|
||||
MenuSound("menu/demoscroll");
|
||||
ofs0 = --sel0;
|
||||
if ( sel0 < 0 ) ofs0 = sel0 = invlist.Size()-1;
|
||||
}
|
||||
else if ( ((tabs[curtab] == TAB_TRADING) && sub && (sel0 != -1)) && (invlist.Size() > 1) )
|
||||
{
|
||||
MenuSound("menu/demoscroll");
|
||||
ofs1 = --sel1;
|
||||
if ( sel1 < 0 ) ofs1 = sel1 = invlist.Size()-1;
|
||||
}
|
||||
else if ( (tabs[curtab] == TAB_STORE) && (storelist.Size() > 1) )
|
||||
{
|
||||
MenuSound("menu/demoscroll");
|
||||
|
|
@ -703,13 +715,20 @@ Class DemolitionistMenu : GenericMenu
|
|||
MenuSound("menu/demoscroll");
|
||||
}
|
||||
}
|
||||
else if ( ((tabs[curtab] == TAB_INVENTORY) || (tabs[curtab] == TAB_KEYS) || ((tabs[curtab] == TAB_TRADING) && sub && (sel0 != -1))) && (invlist.Size() > 21) )
|
||||
else if ( ((tabs[curtab] == TAB_INVENTORY) || (tabs[curtab] == TAB_KEYS)) && (invlist.Size() > 21) )
|
||||
{
|
||||
int oldsel = sel0;
|
||||
ofs0 = sel0 += 22;
|
||||
if ( sel0 >= invlist.Size() ) ofs0 = sel0 = invlist.Size()-1;
|
||||
if ( sel0 != oldsel ) MenuSound("menu/demoscroll");
|
||||
}
|
||||
else if ( ((tabs[curtab] == TAB_TRADING) && sub && (sel0 != -1)) && (invlist.Size() > 21) )
|
||||
{
|
||||
int oldsel = sel1;
|
||||
ofs1 = sel1 += 22;
|
||||
if ( sel1 >= invlist.Size() ) ofs1 = sel1 = invlist.Size()-1;
|
||||
if ( sel1 != oldsel ) MenuSound("menu/demoscroll");
|
||||
}
|
||||
else if ( (tabs[curtab] == TAB_STORE) && (storelist.Size() > 21) )
|
||||
{
|
||||
int oldsel = sel0;
|
||||
|
|
@ -752,11 +771,16 @@ Class DemolitionistMenu : GenericMenu
|
|||
MenuSound("menu/demoscroll");
|
||||
}
|
||||
}
|
||||
else if ( ((tabs[curtab] == TAB_INVENTORY) || (tabs[curtab] == TAB_KEYS) || ((tabs[curtab] == TAB_TRADING) && sub && (sel0 != -1))) && (invlist.Size() > 21) && (sel0-22 >= 0) )
|
||||
else if ( ((tabs[curtab] == TAB_INVENTORY) || (tabs[curtab] == TAB_KEYS)) && (invlist.Size() > 21) && (sel0-22 >= 0) )
|
||||
{
|
||||
MenuSound("menu/demoscroll");
|
||||
ofs0 = sel0 -= 22;
|
||||
}
|
||||
else if ( ((tabs[curtab] == TAB_TRADING) && sub && (sel0 != -1)) && (invlist.Size() > 21) && (sel1-22 >= 0) )
|
||||
{
|
||||
MenuSound("menu/demoscroll");
|
||||
ofs1 = sel1 -= 22;
|
||||
}
|
||||
else if ( (tabs[curtab] == TAB_STORE) && (storelist.Size() > 21) && (sel0-22 >= 0) )
|
||||
{
|
||||
MenuSound("menu/demoscroll");
|
||||
|
|
@ -2208,7 +2232,7 @@ Class DemolitionistMenu : GenericMenu
|
|||
override void Ticker()
|
||||
{
|
||||
Super.Ticker();
|
||||
if ( (players[consoleplayer].Health <= 0) || isclosing )
|
||||
if ( (gamestate != GS_LEVEL) || (players[consoleplayer].Health <= 0) || isclosing )
|
||||
{
|
||||
// ded (or force close)
|
||||
EventHandler.SendNetworkEvent("swwmclearalltransactions",consoleplayer);
|
||||
|
|
@ -2499,7 +2523,7 @@ Class DemolitionistMenu : GenericMenu
|
|||
// alphabetically sorted inventory
|
||||
for ( Inventory inv=players[consoleplayer].mo.Inv; inv; inv=inv.Inv )
|
||||
{
|
||||
if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectible') && !(inv is 'MagAmmo') ) continue;
|
||||
if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectible') && !(inv is 'MagAmmo') || (inv is 'SWWMCollectible') ) continue;
|
||||
// no hidden weapons
|
||||
if ( (inv is 'SWWMWeapon') && SWWMWeapon(inv).bHIDEINMENU ) continue;
|
||||
String tag = inv.GetTag();
|
||||
|
|
@ -3147,7 +3171,7 @@ Class DemolitionistMenu : GenericMenu
|
|||
}
|
||||
}
|
||||
}
|
||||
else if ( (tabs[curtab] == TAB_INVENTORY) || ((tabs[curtab] == TAB_TRADING) && sub && (sel0 != -1)) )
|
||||
else if ( tabs[curtab] == TAB_INVENTORY )
|
||||
{
|
||||
if ( invlist.Size() <= 0 )
|
||||
{
|
||||
|
|
@ -3207,6 +3231,66 @@ Class DemolitionistMenu : GenericMenu
|
|||
Screen.DrawTexture(WindowSeparatorH,false,origin.x,origin.y+377,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
}
|
||||
else if ( (tabs[curtab] == TAB_TRADING) && sub && (sel0 != -1) )
|
||||
{
|
||||
if ( invlist.Size() <= 0 )
|
||||
{
|
||||
str = StringTable.Localize("$SWWM_NOINV");
|
||||
Screen.DrawText(fnt,Font.CR_FIRE,origin.x+(640-fnt.StringWidth(str))/2,origin.y+(400-fnt.GetHeight())/2,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
return;
|
||||
}
|
||||
xx = 9;
|
||||
yy = 23;
|
||||
int longest, len;
|
||||
int maxcol, totalcol, cols = 1;
|
||||
// first pass, calculate longest item name
|
||||
for ( int i=0; i<invlist.Size(); i++ )
|
||||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else str = invlist[i].GetTag();
|
||||
len = fnt.StringWidth(str);
|
||||
if ( len > longest ) longest = len;
|
||||
}
|
||||
maxcol = 622/(longest+24);
|
||||
totalcol = int(ceil(invlist.Size()/22.));
|
||||
int ofs = int(max(0,(ofs0/22)-(maxcol-1))*22);
|
||||
for ( int i=ofs; i<invlist.Size(); i++ )
|
||||
{
|
||||
if ( !invlist[i] ) continue;
|
||||
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
|
||||
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
|
||||
else str = invlist[i].GetTag();
|
||||
int clscol = Font.CR_WHITE;
|
||||
if ( invlist[i] is 'Weapon' ) clscol = Font.CR_GOLD;
|
||||
else if ( invlist[i] is 'MagAmmo' ) clscol = Font.CR_TAN;
|
||||
else if ( (invlist[i] is 'BackpackItem') || (invlist[i] is 'HammerspaceEmbiggener') ) clscol = Font.CR_DARKBROWN;
|
||||
else if ( invlist[i] is 'Ammo' ) clscol = Font.CR_BROWN;
|
||||
else if ( (invlist[i] is 'PowerupGiver') || (invlist[i] is 'AmmoFabricator') || invlist[i].bBIGPOWERUP ) clscol = Font.CR_PURPLE;
|
||||
else if ( (invlist[i] is 'Health') || (invlist[i] is 'HealthPickup') || (invlist[i] is 'SWWMHealth') ) clscol = Font.CR_RED;
|
||||
else if ( (invlist[i] is 'Armor') || (invlist[i] is 'SWWMSpareArmor') ) clscol = Font.CR_GREEN;
|
||||
else if ( invlist[i] is 'PuzzleItem' ) clscol = Font.CR_LIGHTBLUE;
|
||||
else if ( invlist[i] is 'SWWMCollectible' ) clscol = Font.CR_FIRE;
|
||||
Screen.DrawText(fnt,clscol,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i!=sel1)?Color(96,0,0,0):Color(0,0,0,0));
|
||||
yy += 16;
|
||||
if ( yy >= 370 )
|
||||
{
|
||||
xx += longest+24;
|
||||
yy = 23;
|
||||
cols++;
|
||||
if ( cols > maxcol ) break;
|
||||
}
|
||||
}
|
||||
if ( maxcol < totalcol )
|
||||
{
|
||||
// draw scrollbar
|
||||
int szr = totalcol-maxcol;
|
||||
xx = floor((ofs/22.)*(630./szr))+2.;
|
||||
Screen.DrawText(TewiFont,Font.CR_FIRE,origin.x+xx,origin.y+373,"▬",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
Screen.DrawTexture(WindowSeparatorH,false,origin.x,origin.y+377,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
}
|
||||
else if ( tabs[curtab] == TAB_KEYS )
|
||||
{
|
||||
if ( invlist.Size() <= 0 )
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue