- Added 'ininventory item, amount' option to SBARINFO to check for a minimum

amount instead of mere presence in the inventory.
- Fixed: Door lock messages were overwritten by remote messages.

SVN r1346 (trunk)
This commit is contained in:
Christoph Oelckers 2009-01-02 17:49:48 +00:00
parent aa5bdd0884
commit 35edd15386
4 changed files with 16 additions and 1 deletions

View file

@ -1,3 +1,8 @@
January 1, 2009 (Changes by Graf Zahl)
- Added 'ininventory item, amount' option to SBARINFO to check for a minimum
amount instead of mere presence in the inventory.
- Fixed: Door lock messages were overwritten by remote messages.
January 1, 2009 (Changes by Graf Zahl) January 1, 2009 (Changes by Graf Zahl)
- Fixed: SBARINFO used GetSpecies instead of GetClass to check weapon types. - Fixed: SBARINFO used GetSpecies instead of GetClass to check weapon types.
- Added a few missing NULL pointer checks to SBARINFO code. - Added a few missing NULL pointer checks to SBARINFO code.

View file

@ -291,7 +291,7 @@ static void ParseLock(FScanner &sc)
{ {
lock->RemoteMsg = lock->Message; lock->RemoteMsg = lock->Message;
} }
if (!lock->Message.IsEmpty() && lock->RemoteMsg.IsNotEmpty()) if (lock->Message.IsEmpty() && lock->RemoteMsg.IsNotEmpty())
{ {
lock->Message = lock->RemoteMsg; lock->Message = lock->RemoteMsg;
} }

View file

@ -1356,6 +1356,8 @@ void DSBarInfo::doCommands(SBarInfoBlock &block, int xOffset, int yOffset, int a
{ {
AInventory *item1 = CPlayer->mo->FindInventory(PClass::FindClass(cmd.string[0])); AInventory *item1 = CPlayer->mo->FindInventory(PClass::FindClass(cmd.string[0]));
AInventory *item2 = CPlayer->mo->FindInventory(PClass::FindClass(cmd.string[1])); AInventory *item2 = CPlayer->mo->FindInventory(PClass::FindClass(cmd.string[1]));
if (item1 != NULL && cmd.special2 > 0 && item1->Amount < cmd.special2) item1 = NULL;
if (item2 != NULL && cmd.special3 > 0 && item2->Amount < cmd.special3) item2 = NULL;
if(cmd.flags & SBARINFOEVENT_AND) if(cmd.flags & SBARINFOEVENT_AND)
{ {
if((item1 != NULL && item2 != NULL) && !(cmd.flags & SBARINFOEVENT_NOT)) if((item1 != NULL && item2 != NULL) && !(cmd.flags & SBARINFOEVENT_NOT))

View file

@ -1292,6 +1292,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
this->ParseSBarInfoBlock(sc, cmd.subBlock); this->ParseSBarInfoBlock(sc, cmd.subBlock);
break; break;
case SBARINFO_ININVENTORY: case SBARINFO_ININVENTORY:
cmd.special2 = cmd.special3 = 0;
sc.MustGetToken(TK_Identifier); sc.MustGetToken(TK_Identifier);
if(sc.Compare("not")) if(sc.Compare("not"))
{ {
@ -1306,6 +1307,13 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
{ {
sc.ScriptError("'%s' is not a type of inventory item.", sc.String); sc.ScriptError("'%s' is not a type of inventory item.", sc.String);
} }
if (sc.CheckToken(','))
{
sc.MustGetNumber();
if (i == 0) cmd.special2 = sc.Number;
else cmd.special3 = sc.Number;
}
if(sc.CheckToken(TK_OrOr)) if(sc.CheckToken(TK_OrOr))
{ {
cmd.flags |= SBARINFOEVENT_OR; cmd.flags |= SBARINFOEVENT_OR;