Another cool thing we'll be including is an awesome script that TheMasterRat developed which generates flags according to your attributes. So if you have 8 strength, it'll generate the flag "Strength8" as well all the preceding Strengths down to Strength5. This code works for attributes up to 20, and could easily expand by adding more numbers in the AttributeValues database. So in the dialog of a global character you could make the flag "Strength8" a condition for a certain keyword (such as a "Flex" keyword where you try to impress or intimidate someone with a show of strength).

Here's the code. There might still be some bugs, but it seems to work well. Note that in this current iteration, it will check for both players when you enter a dialog. So even if player1 initiates a dialog across the map from player2, player1 will benefit from player2's attributes for generating strings.

TheMasterRat also has code for traits so that if you have certain traits, a string will generate and you'll be able to use those in dialog. E.G., you're spiritual so you'll have more dialog options when talking to someone religious. We're going to bug test that a bit more and then we'll post the code for that.

Code
INIT

DB_CharacterToCount(CHARACTER_Player1);
DB_CharacterToCount(CHARACTER_Player2);

DB_AttributeNames("Strength");
DB_AttributeNames("Intelligence");
DB_AttributeNames("Constitution");
DB_AttributeNames("Speed");
DB_AttributeNames("Perception");
DB_AttributeNames("Dexterity");

DB_AttributeValues(5,"5");
DB_AttributeValues(6,"6");
DB_AttributeValues(7,"7");
DB_AttributeValues(8,"8");
DB_AttributeValues(9,"9");
DB_AttributeValues(10,"10");
DB_AttributeValues(11,"11");
DB_AttributeValues(12,"12");
DB_AttributeValues(13,"13");
DB_AttributeValues(14,"14");
DB_AttributeValues(15,"15");
DB_AttributeValues(16,"16");
DB_AttributeValues(17,"17");
DB_AttributeValues(18,"18");
DB_AttributeValues(19,"19");
DB_AttributeValues(20,"20");

KB

IF 
DialogStarted(_DialogName,_InstanceID)
THEN
ProcTriggerAttributeCheck();

IF
DialogStartRequested(_Character1,_Character2)
THEN
ProcTriggerAttributeCheck();

PROC
ProcTriggerAttributeCheck()
AND
DB_AttributeNames(_AttributeName)
AND
DB_CharacterToCount(_Character)
AND
CharacterGetAttribute(_Character,_AttributeName,_AttributeValue)
THEN
SetAttributeFlag(_AttributeName,_AttributeValue);


PROC
SetAttributeFlag((STRING)_Attribute,(INTEGER)_Value)
THEN
ProcGetValueAsString(_Attribute,_Value);

//This part generates a string and then subtracts 1 from the attribute value
 so that it will then generate all the appropriate strings down to 5. So if you have Strength8, it will generate "Strength8,"
 then "Strenth7," then "Strength6," etc.

PROC
ProcGetValueAsString((STRING)_Attribute,(INTEGER)_Value)
AND
DB_AttributeValues(_Value,_ValueAsString)
AND
StringConcatenate(_Attribute,_ValueAsString,_StringResult)
AND
NOT DB_EventSet(_StringResult)
AND
IntegerSubtract(_Value,1,_ValueMinusOne)
THEN
GlobalSetEvent(_StringResult);
DB_EventSet(_StringResult);
ProcGetValueAsString(_Attribute,_ValueMinusOne);


Ability code:

Code
DB_Abilities("WarriorLore");
DB_Abilities("RangerLore");
DB_Abilities("SingleHanded");
DB_Abilities("TwoHanded");
DB_Abilities("Blackrock");
DB_Abilities("Bow");
DB_Abilities("Crossbow");
DB_Abilities("Shield");
DB_Abilities("Reflexes");
DB_Abilities("ArmorMastery");
DB_Abilities("Sourcery");
DB_Abilities("Telekinesis");
DB_Abilities("Willpower");
DB_Abilities("FireSpecialist");
DB_Abilities("WaterSpecialist");
DB_Abilities("AirSpecialist");
DB_Abilities("EarthSpecialist");
DB_Abilities("Repair");
DB_Abilities("Sneaking");
DB_Abilities("Pickpocket");
DB_Abilities("Lockpicking");
DB_Abilities("Loremaster");
DB_Abilities("Crafting");
DB_Abilities("Barter");
DB_Abilities("Charm");
DB_Abilities("Intimidate");
DB_Abilities("Reason");
DB_Abilities("Charisma");
DB_Abilities("Leadership");
DB_Abilities("Luck");
DB_Abilities("DualWielding");

DB_AbilityLevel(0,"0");
DB_AbilityLevel(1,"1");
DB_AbilityLevel(2,"2");
DB_AbilityLevel(3,"3");
DB_AbilityLevel(4,"4");
DB_AbilityLevel(5,"5");


DB_CharacterToCount(CHARACTER_Player1);
DB_CharacterToCount(CHARACTER_Player2);

IF 
	DialogStarted(_DialogName,_InstanceID)
THEN
	ProcTriggerAbilityCheck();

IF
	DialogStartRequested(_Character1,_Character2)
THEN
	ProcTriggerAbilityCheck();

PROC
	ProcTriggerAbilityCheck()
AND
	DB_Abilities(_Ability)
AND
	DB_CharacterToCount(_Character)
AND
	CharacterGetAbility(_Character,_Ability,_AbilityLevel)
THEN
	ProcSetAbilityFlag(_Ability,_AbilityLevel);


PROC
	ProcSetAbilityFlag((STRING)_Ability,(INTEGER)_AbilityLevel)
AND
	DB_AbilityLevel(_AbilityLevel,_AbilityLevelAsString)
AND
	StringConcatenate(_Ability,_AbilityLevelAsString,_StringResult)
AND
	IntegerSubtract(_AbilityLevel,1,_AbilityLevelMinusOne)
AND
	NOT DB_AbilitySet(_StringResult)
THEN
	GlobalSetEvent(_StringResult);
	DB_AbilitySet(_StringResult);
	ProcSetAbilityFlag(_Ability,_AbilityLevelMinusOne);














Last edited by Baardvark; 29/08/15 11:47 PM.