162 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #include "0i_menus"
 | |
| // Does startup check if the game has just been loaded.
 | |
| int StartingUp(object oPC);
 | |
| json ai_CheckToReplaceSpell(json jSpellList, int nClass, int nLevel, int nSlot)
 | |
| {
 | |
|     //if(d100() > 49) return jSpellList;
 | |
|     string sSpellTableColumn = Get2DAString("classes", "SpellTableColumn", nClass);
 | |
|     int nRoll = d10() + 1 + nLevel * 10;
 | |
|     int nSpell = StringToInt(Get2DAString("prc_add_spells", sSpellTableColumn, nRoll));
 | |
|     if(nSpell > 0)
 | |
|     {
 | |
|         //WriteTimestampedLogEntry("mm_prc_spells, 13 nSpell: " + IntToString(nSpell) +
 | |
|         //                      " nLevel: " + IntToString(nLevel) + " nSlot: " + IntToString(nSlot));
 | |
|         json jSpellArray = JsonArrayGet(jSpellList, nSlot);
 | |
|         json jSpell = JsonObjectGet(jSpellArray, "Spell");
 | |
|         jSpell = JsonObjectSet(jSpell, "value", JsonInt(nSpell));
 | |
|         jSpellArray = JsonObjectSet(jSpellArray, "Spell", jSpell);
 | |
|         return JsonArraySet(jSpellList, nSlot, jSpellArray);
 | |
|     }
 | |
|     return jSpellList;
 | |
| }
 | |
| void main()
 | |
| {
 | |
|     object oPC = OBJECT_SELF;
 | |
|     if(StartingUp(oPC)) return;
 | |
|     int bChanged, bCreatureChanged, nPosition, nClass, nLevel, nSlot, nMaxSlots;
 | |
|     json jClass, jMemorizedList, jKnownList;
 | |
|     object oModule = GetModule();
 | |
|     json jCreature = GetLocalJson(oModule, AI_MONSTER_JSON);
 | |
|     object oCreature = GetLocalObject(oModule, AI_MONSTER_OBJECT);
 | |
|     json jClassList = GffGetList(jCreature, "ClassList");
 | |
|     while(nPosition <= AI_MAX_CLASSES_PER_CHARACTER)
 | |
|     {
 | |
|         nClass = GetClassByPosition(nPosition, oCreature);
 | |
|         if(Get2DAString("classes", "SpellCaster", nClass) == "1")
 | |
|         {
 | |
|             //WriteTimestampedLogEntry("mm_prc_spells, 39 " + GetName(oCreature) + JsonDump(jClassList, 4));
 | |
|             jClass = JsonArrayGet(jClassList, nPosition - 1);
 | |
|             if(Get2DAString("classes", "MemorizesSpells", nClass) == "1")
 | |
|             {
 | |
|                 nLevel = 1;
 | |
|                 while(nLevel < 9)
 | |
|                 {
 | |
|                     jMemorizedList = GffGetList(jClass, "MemorizedList" + IntToString(nLevel));
 | |
|                     if(JsonGetType(jMemorizedList) != JSON_TYPE_NULL)
 | |
|                     {
 | |
|                         nSlot = 0;
 | |
|                         nMaxSlots = GetMemorizedSpellCountByLevel(oCreature, nClass, nLevel);
 | |
|                         while(nSlot < nMaxSlots)
 | |
|                         {
 | |
|                             jMemorizedList = ai_CheckToReplaceSpell(jMemorizedList, nClass, nLevel, nSlot);
 | |
|                             nSlot++;
 | |
|                         }
 | |
|                         //WriteTimestampedLogEntry("nClass: " + IntToString(nClass) + " nLevel: " + IntToString(nLevel) +
 | |
|                         //                         " nSlot: " + IntToString(nSlot) + " jMemorizedList " + JsonDump(jMemorizedList, 4));
 | |
|                         jClass = GffReplaceList(jClass, "MemorizedList" + IntToString(nLevel), jMemorizedList);
 | |
|                         bChanged = TRUE;
 | |
|                     }
 | |
|                     nLevel++;
 | |
|                 }
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 nLevel = 1;
 | |
|                 while(nLevel < 9)
 | |
|                 {
 | |
|                     jKnownList = GffGetList(jClass, "KnownList" + IntToString(nLevel));
 | |
|                     if(JsonGetType(jMemorizedList) != JSON_TYPE_NULL)
 | |
|                     {
 | |
|                         nSlot = 0;
 | |
|                         nMaxSlots = GetKnownSpellCount(oCreature, nClass, nLevel);
 | |
|                         while(nSlot < nMaxSlots)
 | |
|                         {
 | |
|                             jKnownList = ai_CheckToReplaceSpell(jKnownList, nClass, nLevel, nSlot);
 | |
|                             nSlot++;
 | |
|                         }
 | |
|                         jClass = GffReplaceList(jClass, "KnownList" + IntToString(nLevel), jKnownList);
 | |
|                         bChanged = TRUE;
 | |
|                     }
 | |
|                     nLevel++;
 | |
|                 }
 | |
|             }
 | |
|             if(bChanged)
 | |
|             {
 | |
|                 //WriteTimestampedLogEntry("0i_module, 87 " + GetName(oCreature) + " jClass: " + JsonDump(jClass, 4));
 | |
|                 jClassList = JsonArraySet(jClassList, nPosition - 1, jClass);
 | |
|                 //if(AI_DEBUG) ai_Debug("0i_module, 89 " + GetName(oCreature) + " jClassList: " + JsonDump(jClassList, 4));
 | |
|                 jCreature = GffReplaceList(jCreature, "ClassList", jClassList);
 | |
|                 bCreatureChanged = TRUE;
 | |
|                 bChanged = FALSE;
 | |
|             }
 | |
|         }
 | |
|         nPosition++;
 | |
|     }
 | |
|     if(bCreatureChanged)
 | |
|     {
 | |
|         //WriteTimestampedLogEntry("mm_prc_spells, 99 " + GetName(oCreature) + " jClassList: " + JsonDump(jClassList, 4));
 | |
|         SetLocalJson(oModule, AI_MONSTER_JSON, jCreature);
 | |
|         SetLocalInt(oModule, AI_MONSTER_CHANGED, TRUE);
 | |
|     }
 | |
| }
 | |
| int PRCSpellsSetup(object oPC)
 | |
| {
 | |
|     // Check to make sure prc_add_spells.2da is loaded.
 | |
|     if(ResManGetAliasFor("prc_add_spells", RESTYPE_2DA) == "")
 | |
|     {
 | |
|         SendMessageToPC(oPC, "prc_add_spells.2da is not loaded! Make sure it is in the override or development folder.");
 | |
|         return FALSE;
 | |
|     }
 | |
|     // Check to make sure PRC is loaded.
 | |
|     if(!GetLocalInt(GetModule(), AI_USING_PRC))
 | |
|     {
 | |
|         SendMessageToPC(oPC, "PRC is not being used. PRC must be active for this mod to work.");
 | |
|         return FALSE;
 | |
|     }
 | |
|     return TRUE;
 | |
| }
 | |
| void SetMonsterModJson(object oPC)
 | |
| {
 | |
|     object oModule = GetModule();
 | |
|     json jMonsterMods = GetLocalJson(oModule, AI_MONSTER_MOD_JSON);
 | |
|     if(JsonGetType(jMonsterMods) == JSON_TYPE_NULL) jMonsterMods = JsonArray();
 | |
|     int nIndex;
 | |
|     string sMonsterMod = JsonGetString(JsonArrayGet(jMonsterMods, nIndex));
 | |
|     while(sMonsterMod != "")
 | |
|     {
 | |
|         if(sMonsterMod == "mm_prc_spells") return;
 | |
|         sMonsterMod = JsonGetString(JsonArrayGet(jMonsterMods, ++nIndex));
 | |
|     }
 | |
|     jMonsterMods = JsonArrayInsert(jMonsterMods, JsonString("mm_prc_spells"));
 | |
|     SetLocalJson(oModule, AI_MONSTER_MOD_JSON, jMonsterMods);
 | |
|     ai_SendMessages("mm_prc_spells loaded! Monsters will be using PRC spells.", AI_COLOR_YELLOW, oPC);
 | |
| }
 | |
| int StartingUp(object oPC)
 | |
| {
 | |
|     if(!PRCSpellsSetup(oPC))
 | |
|     {
 | |
|         SendMessageToPC(oPC, "mm_prc_spells monster mod has failed to load due to an error.");
 | |
|         // Return -1 in AI_PLUGIN_SET to tell PEPS that we failed to load.
 | |
|         SetLocalInt(oPC, AI_PLUGIN_SET, -1);
 | |
|         return TRUE;
 | |
|     }
 | |
|     if(GetLocalInt(oPC, AI_ADD_PLUGIN))
 | |
|     {
 | |
|         json jPlugin = JsonArray();
 | |
|         jPlugin = JsonArrayInsert(jPlugin, JsonString("mm_prc_spells"));
 | |
|         jPlugin = JsonArrayInsert(jPlugin, JsonInt(3));
 | |
|         jPlugin = JsonArrayInsert(jPlugin, JsonString("Monsters will use PRC spells!"));
 | |
|         jPlugin = JsonArrayInsert(jPlugin, JsonString(""));
 | |
|         json jPlugins = GetLocalJson(oPC, AI_JSON_PLUGINS);
 | |
|         jPlugins = JsonArrayInsert(jPlugins, jPlugin);
 | |
|         SetLocalJson(oPC, AI_JSON_PLUGINS, jPlugin);
 | |
|         SetLocalInt(oPC, AI_PLUGIN_SET, TRUE);
 | |
|         SetMonsterModJson(oPC);
 | |
|         return TRUE;
 | |
|     }
 | |
|     if(!GetLocalInt(oPC, AI_STARTING_UP)) return FALSE;
 | |
|     SetMonsterModJson(oPC);
 | |
|     return TRUE;
 | |
| }
 | |
| 
 |