Skip to content

Instantly share code, notes, and snippets.

@LaughingLeader
Created August 1, 2019 01:44
Show Gist options
  • Save LaughingLeader/ea6df3a01b4e87fe699c96fc53c56b8a to your computer and use it in GitHub Desktop.
Save LaughingLeader/ea6df3a01b4e87fe699c96fc53c56b8a to your computer and use it in GitHub Desktop.
DOS2DE story script that auto-identifies items if Loremaster meets a min value in the party.
//REGION AUTO_IDENTIFY
IF
ItemTemplateOpening(_, _Item, _Char)
AND
ObjectGetFlag(_Item, "LLTEST_LORE_Identified", 0)
AND
CharacterIsPlayer(_Char, 1)
AND
LLTEST_LORE_PartyHasHighEnoughLoremaster(_Char, 5)
AND
ItemIsContainer(_Item, _IsContainer)
THEN
LLTEST_LORE_Identify(_Char, _Item, _IsContainer);
IF
ItemAddedToCharacter(_Item, _Char)
AND
ObjectGetFlag(_Item, "LLTEST_LORE_Identified", 0)
AND
CharacterIsPlayer(_Char, 1)
AND
LLTEST_LORE_PartyHasHighEnoughLoremaster(_Char, 5)
AND
ItemIsContainer(_Item, _IsContainer)
THEN
LLTEST_LORE_Identify(_Char, _Item, _IsContainer);
PROC
ProcBlockPickupOfItem((CHARACTERGUID)_Char, (ITEMGUID)_Item)
AND
NOT DB_CustomPickupItemResponse(_Char,_Item, 0) // The item is not blocked
AND
ObjectGetFlag(_Item, "LLTEST_LORE_Identified", 0)
AND
CharacterIsPlayer(_Char, 1)
AND
LLTEST_LORE_PartyHasHighEnoughLoremaster(_Char, 5)
AND
ItemIsContainer(_Item, _IsContainer)
THEN
LLTEST_LORE_Identify(_Char, _Item, _IsContainer);
PROC
ProcBlockMoveOfItem((CHARACTERGUID)_Char,(ITEMGUID)_Item)
AND
NOT DB_CustomMoveItemResponse(_Char, _Item, 0)
AND
ObjectGetFlag(_Item, "LLTEST_LORE_Identified", 0)
AND
CharacterIsPlayer(_Char, 1)
AND
LLTEST_LORE_PartyHasHighEnoughLoremaster(_Char, 5)
AND
ItemIsContainer(_Item, _IsContainer)
THEN
LLTEST_LORE_Identify(_Char, _Item, _IsContainer);
PROC
LLTEST_LORE_Identify((CHARACTERGUID)_Char, (ITEMGUID)_Item, 0)
AND
String(_Item, _Str)
THEN
LeaderLog_Log("DEBUG", "[LaughingLeader_TestMod_Experiments:LORE] Identifying item [",_Str,"] via proxy container.");
ObjectSetFlag(_Item, "LLTEST_LORE_Identified", 0);
LLTEST_LORE_AddToIdentifyContainer(_Char, _Item);
PROC
LLTEST_LORE_AddToIdentifyContainer((CHARACTERGUID)_Char, (ITEMGUID)_Item)
AND
NOT DB_LLTEST_LORE_Temp_IdentifyHolder(_Char, _)
AND
GetPosition(_Char, _x, _y, _z)
AND
CreateItemTemplateAtPosition("CONT_Humans_Backpack_Merchant_A_360e3e11-c7f8-4281-848a-596e37df884b", _x, _y, _z, _Backpack)
THEN
DB_LLTEST_LORE_Temp_IdentifyHolder(_Char, _Backpack);
ItemSetOwner(_Backpack, _Char);
ProcObjectTimer(_Backpack, "LLTEST_Timers_IdentifyContainer", 250);
PROC
LLTEST_LORE_AddToIdentifyContainer((CHARACTERGUID)_Char, (ITEMGUID)_Item)
AND
DB_LLTEST_LORE_Temp_IdentifyHolder(_Char, _Backpack)
THEN
ItemToInventory(_Item, _Backpack);
PROC
ProcObjectTimerFinished((ITEMGUID)_Backpack, "LLTEST_Timers_IdentifyContainer")
AND
DB_LLTEST_LORE_Temp_IdentifyHolder(_Char, _Backpack)
THEN
NOT DB_LLTEST_LORE_Temp_IdentifyHolder(_Char, _Backpack);
ContainerIdentifyAll(_Backpack);
MoveAllItemsTo(_Backpack, _Char, 0, 0, 0);
ProcObjectTimer(_Backpack, "LLTEST_Timers_RemovedIdentifyContainer", 250);
PROC
ProcObjectTimerFinished((ITEMGUID)_Backpack, "LLTEST_Timers_IdentifyContainer")
THEN
ItemRemove(_Backpack);
PROC
LLTEST_LORE_Identify((CHARACTERGUID)_Char, (ITEMGUID)_Item, 1)
AND
String(_Item, _Str)
THEN
LeaderLog_Log("DEBUG", "[LaughingLeader_TestMod_Experiments:LORE] Identifying container [",_Str,"].");
ContainerIdentifyAll(_Item);
ObjectSetFlag(_Item, "LLTEST_LORE_Identified", 0);
InventoryLaunchIterator(_Item, "LLTEST_LORE_FlagAndIdentify", "");
IF
StoryEvent((ITEMGUID)_Item, "LLTEST_LORE_FlagAndIdentify")
THEN
ObjectSetFlag(_Item, "LLTEST_LORE_Identified", 0);
IF
StoryEvent((ITEMGUID)_Item, "LLTEST_LORE_FlagAndIdentify")
AND
ItemIsContainer(_Item, 1)
AND
GetInventoryOwner(_Item, (CHARACTERGUID)_Owner)
THEN
LLTEST_LORE_Identify(_Owner, _Item, 1);
QRY
LLTEST_LORE_PartyHasHighEnoughLoremaster((CHARACTERGUID)_PartyMember, (INTEGER)_MinLoremaster)
AND
CharacterGetAbility(_PartyMember, "Loremaster", _Value)
AND
_Value >= _MinLoremaster
THEN
DB_LLTEST_LORE_LoremasterSuccess(_PartyMember);
QRY
LLTEST_LORE_PartyHasHighEnoughLoremaster((CHARACTERGUID)_PartyMember, (INTEGER)_MinLoremaster)
AND
NOT DB_LLTEST_LORE_LoremasterSuccess(_PartyMember)
AND
DB_IsPlayer(_Player)
AND
CharacterIsInPartyWith(_PartyMember, _Player, 1)
AND
CharacterGetAbility(_Player, "Loremaster", _Value)
AND
_Value >= _MinLoremaster
THEN
DB_LLTEST_LORE_LoremasterSuccess(_PartyMember);
QRY
LLTEST_LORE_PartyHasHighEnoughLoremaster((CHARACTERGUID)_PartyMember, (INTEGER)_MinLoremaster)
AND
DB_LLTEST_LORE_LoremasterSuccess(_PartyMember)
THEN
NOT DB_LLTEST_LORE_LoremasterSuccess(_PartyMember);
//END_REGION
//REGION DEBUG_COMMANDS
IF
TextEventSet("lltest_setlore")
AND
CharacterGetHostCharacter(_Host)
THEN
CharacterAddAbility(_Host, "Loremaster", 5);
IF
TextEventSet("lltest_spawnitems")
AND
NOT GetTextEventParamUUID(1, _)
AND
CharacterGetHostCharacter(_Host)
AND
GetPosition(_Host, _x, _y, _z)
AND
CreateItemTemplateAtPosition("CONT_Humans_Backpack_Merchant_A_360e3e11-c7f8-4281-848a-596e37df884b", _x, _y, _z, _Backpack)
THEN
GenerateTreasure(_Backpack, "EquipAllRarities", 16, _Host);
TeleportTo(_Backpack, _Host);
IF
TextEventSet("lltest_spawnitems")
AND
GetTextEventParamUUID(1, _Target)
AND
ObjectIsCharacter((CHARACTERGUID)_Target, 1)
THEN
CharacterGiveReward(_Target, "EquipAllRarities", 0);
//END_REGION
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment