Mafia's Code

From Kolmafia
Revision as of 04:50, 16 March 2010 by imported>Heeheehee (→‎Iteracting with the Player: Typo-fixing.)
Jump to navigation Jump to search

Character

Under Hardcore or Ronin

KoLCharacter.canInteract();

This function returns true if the character is out of Hardcore or Ronin, false otherwise. It is essentially used to check mall access.

Items

Check if we have a certain Item

We can either use:

InventoryManager.hasItem( final int itemId )	
InventoryManager.hasItem( final int itemId, boolean shouldCreate )
InventoryManager.hasItem( final AdventureResult item )
InventoryManager.hasItem( final AdventureResult item, final boolean shouldCreate )

InventoryManager.hasItem( 1650, true );
InventoryManager.hasItem( ItemPool.MILK_OF_MAGNESIUM, true );

Essentially the top three overloaded functions call the bottom function, telling it NOT to create the item.

Setting "shouldCreate" to true will NOT create the item, instead it will find out if you COULD create the item.

hasItem() will return true if you have the item, or could create it and specify shouldCreate to be true.

The Item Pool

The Item Pool, at /objectpool/itempool/ItemPool.java is primarily a list of items, mapped to their item number. Its purpose is to make code more readable. ItemPool.UNDERWORLD_ACORN is much more obvious than "4274".

Create an Item

CreateItemRequest beltCreator = CreateItemRequest.getInstance( ItemPool.BADASS_BELT );
// getQuantityPossible() should take meat paste or
// Muscle Sign into account
if ( beltCreator.getQuantityPossible() > 0 )
{
	beltCreator.setQuantityNeeded( 1 );
	RequestThread.postRequest( beltCreator );
}

Indicate that Meat or Items have been Gained or Lost

ResultProcessor.processMeat( -300 );
ResultProcessor.processItem( ItemPool.WET_STUNT_NUT_STEW, -1 );

Obviously just change the negative numbers to positive ones to indicate gaining items or meat.

Inventory or Meat changes as results of gaining an Item

Occasionally, gaining an item means silently losing others, and this needs to be reflected. For example, when we gain the S.O.C.K., we lose the four Immateria, and when we gain the steel margarita/lasagne/-scented air freshener we lose Azazel's unicorn, lollipop and tutu.

Go to /session/ResultProcessor.java and edit the gainItem() function intuitively.

Note that this should not be used for items that can, for example, be bought in the mall. It is only suitable for items that can only be obtained through quest adventuring.

Effects

See if we are under the effects of Ode or Got Milk

KoLConstants.activeEffects.contains( ItemDatabase.ODE );
KoLConstants.activeEffects.contains( ItemDatabase.MILK );

Both of these are boolean variables.

See if we are under any effect

KoLConstants.activeEffects.contains( EffectPool.get( "Half-Astral"  ) );

Or we could add "Half-Astral" to the /objectpool/EffectPool.java file, and then use:

KoLConstants.activeEffects.contains( EffectPool.get( EffectPool.HALF_ASTRAL ) );

AdventureResult astral = EffectPool.get( EffectPool.HALF_ASTRAL );
KoLConstants.activeEffects.contains( astral );

This would have the advantage of only needing a single change should Jick ever decide to change the name of an effect.

Interacting with the Player

A Yes/No dialogue box

if ( !InputFieldUtilities.confirm( "Are you sure you want to drink without ode?" ) )
{
	return false;
}

Is the Script being run unattended?

If Mafia is being run from the command line, or similar, a user may not be able to see, let alone answer, dialogue boxes. In this case:

StaticEntity.isHeadless()

returns true if the user can not respond to dialogue boxes.

Changing Text on a Page

Edit RequestEditorKit.java.