Community Patch Events Development

Lots of things added:
Readjusted some of Techpriest Enginseer's Events to the right chances
Added Hokath's Events (A dedicated developer and collaborator)
Added Anatase's Events(A suggester not a developer)
Added Xony's Events(A retired developer)

73 new player events and 50 new city events added!

Non-savegame compatible obviously.

Subscribe today or contribute to the community by helping us make more events!
 
It's not a 'bug' per se, and I don't know if it's a major priority but I had compatibility issues making a multiplayer modpack with this mod.

This is a description of the (audio) issue I ran into. I mentioned it in the MPMPM thread as cicero225 seemed potentially interested in it.
 
Heads-up:

I'm reworking the Event Linking Logic. Right now you can only assign one event/choice to each event/choice using the table elements. That doesn't scale very well, and it is very inefficient, so I'm rewriting it. I'll leave the legacy code in for a version or two until you've switched to the new system, but it'll work very similarly to the Notification system for events.

Code:
<!-- This is the linker table for connecting events to one another. -->
	<Table name="CityEventChoice_EventLinks">
		<!-- This is the parent. This is the event/choice that will or will not fire based on your data below. --> 
		<Column name="CityEventChoice" type="text" reference="CityEventChoices(Type)"/>
		<!-- These four elements: set the event/event choice/city event/city event choice you want to link this event to. 
			You can add elements to each of these so that an event requires another event, event choice, city event, AND a city event choice if you want.
			You'll notice one has the word 'linker' after it - this is to distinguish this event/choice from the event/choice defined above (i.e. the parent)
		-->
		<Column name="Event" type="text" reference="Events(Type)"/>
		<Column name="EventChoice" type="text" reference="EventChoices(Type)"/>
		<Column name="CityEvent" type="text" reference="CityEvents(Type)"/>
		<Column name="CityEventChoiceLinker" type="text" reference="CityEventChoices(Type)"/>
		<!-- This makes the event link span all known players and all known player cities looking for the four elements above. Be sparing with this, can be expensive! -->
		<Column name="CheckKnownPlayers" type="boolean" default="false"/>
		<!-- This looks only at the event city. Only works if you have a CityEvent or CityEventChoice defined above. Also does not work with CheckKnownPlayers-->
		<Column name="CheckOnlyEventCity" type="boolean" default="true"/>
		<!-- Defaults to TRUE, meaning that any event/choice defined above must be active for the event to fire. Setting it to false makes it so that any event/choice defined above that is NOT active is the trigger.-->
		<Column name="CheckForActive" type="boolean" default="true"/>
	</Table>

This will allow you to have events that have multiple event/choice requirements (instead of being locked into one), and will also make every event/choice subject to the same rules.

There will be four tables like this: one for events, one for event choices, one for city events, and one for city event choices.

As I said, I'll leave legacy code in until you are updated.

G
 
Code:
<!-- This is the linker table for connecting events to one another. -->
	<Table name="CityEventChoice_EventLinks">
		<!-- This is the parent. This is the event/choice that will or will not fire based on your data below. --> 
		<Column name="CityEventChoice" type="text" reference="CityEventChoices(Type)"/>
		<!-- These four elements: set the event/event choice/city event/city event choice you want to link this event to. 
			You can add elements to each of these so that an event requires another event, event choice, city event, AND a city event choice if you want.
			You'll notice one has the word 'linker' after it - this is to distinguish this event/choice from the event/choice defined above (i.e. the parent)
		-->
		<Column name="Event" type="text" reference="Events(Type)"/>
		<Column name="EventChoice" type="text" reference="EventChoices(Type)"/>
		<Column name="CityEvent" type="text" reference="CityEvents(Type)"/>
		<Column name="CityEventChoiceLinker" type="text" reference="CityEventChoices(Type)"/>
		<!-- This makes the event link span all known players and all known player cities looking for the four elements above. Be sparing with this, can be expensive! -->
		<Column name="CheckKnownPlayers" type="boolean" default="false"/>
		<!-- This looks only at the event city. Only works if you have a CityEvent or CityEventChoice defined above. Also does not work with CheckKnownPlayers-->
		<Column name="CheckOnlyEventCity" type="boolean" default="true"/>
		<!-- Defaults to TRUE, meaning that any event/choice defined above must be active for the event to fire. Setting it to false makes it so that any event/choice defined above that is NOT active is the trigger.-->
		<Column name="CheckForActive" type="boolean" default="true"/>
	</Table>
Well, we need more than just this. :) Is it the same for EventChoice as well?
 
Well, we need more than just this. :) Is it the same for EventChoice as well?

Yep. Here's all four:

Code:
<!-- This is the linker table for connecting events to one another. You can have multiple of rows of these with the same event type to make specific events that need a specific setup to function (a la parent events above)-->
	<Table name="Event_EventLinks">
		<!-- This is the parent. This is the event/choice that will or will not fire based on your data below. -->
		<Column name="EventType" type="text" reference="Events(Type)"/>
		<!-- These four elements: set the event/event choice/city event/city event choice you want to link this event to. 
			You can add elements to each of these so that an event requires another event, event choice, city event, AND a city event choice if you want.
			You'll notice one has the word 'linker' after it - this is to distinguish this event/choice from the event/choice defined above (i.e. the parent)
		-->
		<Column name="EventLinker" type="text" reference="Events(Type)"/>
		<Column name="EventChoice" type="text" reference="EventChoices(Type)"/>
		<Column name="CityEvent" type="text" reference="CityEvents(Type)"/>
		<Column name="CityEventChoice" type="text" reference="CityEventChoices(Type)"/>
		<!-- This makes the event link span all known players and all known player cities looking for the four elements above. Be sparing with this, can be expensive! -->
		<Column name="CheckKnownPlayers" type="boolean" default="false"/>
		<!-- Defaults to TRUE, meaning that any event/choice defined above must be active for the event to fire. Setting it to false makes it so that any event/choice defined above that is NOT active is the trigger.
		Think of this as a boolean switch - if the state of the event(s) above are hoped to be inactive, make this false. If you want it active, leave it true.
		-->
		<Column name="CheckForActive" type="boolean" default="true"/>
	</Table>

<!-- This is the linker table for connecting events to one another. You can have multiple of rows of these with the same event type to make specific events that need a specific setup to function (a la parent events above)-->
	<Table name="EventChoice_EventLinks">
		<!-- This is the parent. This is the event/choice that will or will not fire based on your data below. -->
		<Column name="EventChoiceType" type="text" reference="EventChoices(Type)"/>
		<!-- These four elements: set the event/event choice/city event/city event choice you want to link this event to. 
			You can add elements to each of these so that an event requires another event, event choice, city event, AND a city event choice if you want.
			You'll notice one has the word 'linker' after it - this is to distinguish this event/choice from the event/choice defined above (i.e. the parent)
		-->
		<Column name="Event" type="text" reference="Events(Type)"/>
		<Column name="EventChoiceLinker" type="text" reference="EventChoices(Type)"/>
		<Column name="CityEvent" type="text" reference="CityEvents(Type)"/>
		<Column name="CityEventChoice" type="text" reference="CityEventChoices(Type)"/>
		<!-- This makes the event link span all known players and all known player cities looking for the four elements above. Be sparing with this, can be expensive! -->
		<Column name="CheckKnownPlayers" type="boolean" default="false"/>
		<!-- Defaults to TRUE, meaning that any event/choice defined above must be active for the event to fire. Setting it to false makes it so that any event/choice defined above that is NOT active is the trigger.
		Think of this as a boolean switch - if the state of the event(s) above are hoped to be inactive, make this false. If you want it active, leave it true.
		-->
		<Column name="CheckForActive" type="boolean" default="true"/>
	</Table>

<!-- This is the linker table for connecting events to one another. You can have multiple of rows of these with the same event type to make specific events that need a specific setup to function (a la parent events above)-->
	<Table name="CityEvent_EventLinks">
		<!-- This is the parent. This is the event/choice that will or will not fire based on your data below. -->
		<Column name="CityEventType" type="text" reference="CityEvents(Type)"/>
		<!-- These four elements: set the event/event choice/city event/city event choice you want to link this event to. 
			You can add elements to each of these so that an event requires another event, event choice, city event, AND a city event choice if you want.
			You'll notice one has the word 'linker' after it - this is to distinguish this event/choice from the event/choice defined above (i.e. the parent)
		-->
		<Column name="Event" type="text" reference="Events(Type)"/>
		<Column name="EventChoice" type="text" reference="EventChoices(Type)"/>
		<Column name="CityEventLinker" type="text" reference="CityEvents(Type)"/>
		<Column name="CityEventChoice" type="text" reference="CityEventChoices(Type)"/>
		<!-- This makes the event link span all known players and all known player cities looking for the four elements above. Be sparing with this, can be expensive! -->
		<Column name="CheckKnownPlayers" type="boolean" default="false"/>
		<!-- This looks only at the event city. Only works if you have a CityEvent or CityEventChoice defined above. Also does not work with CheckKnownPlayers-->
		<Column name="CheckOnlyEventCity" type="boolean" default="false"/>
		<!-- Defaults to TRUE, meaning that any event/choice defined above must be active for the event to fire. Setting it to false makes it so that any event/choice defined above that is NOT active is the trigger.
		Think of this as a boolean switch - if the state of the event(s) above are hoped to be inactive, make this false. If you want it active, leave it true.
		-->
		<Column name="CheckForActive" type="boolean" default="true"/>
	</Table>

<!-- This is the linker table for connecting events to one another. You can have multiple of rows of these with the same event type to make specific events that need a specific setup to function (a la parent events above)-->
	<Table name="CityEventChoice_EventLinks">
		<!-- This is the parent. This is the event/choice that will or will not fire based on your data below. -->
		<Column name="CityEventChoiceType" type="text" reference="CityEventChoices(Type)"/>
		<!-- These four elements: set the event/event choice/city event/city event choice you want to link this event to. 
			You can add elements to each of these so that an event requires another event, event choice, city event, AND a city event choice if you want.
			You'll notice one has the word 'linker' after it - this is to distinguish this event/choice from the event/choice defined above (i.e. the parent)
		-->
		<Column name="Event" type="text" reference="Events(Type)"/>
		<Column name="EventChoice" type="text" reference="EventChoices(Type)"/>
		<Column name="CityEvent" type="text" reference="CityEvents(Type)"/>
		<Column name="CityEventChoiceLinker" type="text" reference="CityEventChoices(Type)"/>
		<!-- This makes the event link span all known players and all known player cities looking for the four elements above. Be sparing with this, can be expensive! -->
		<Column name="CheckKnownPlayers" type="boolean" default="false"/>
		<!-- This looks only at the event city. Only works if you have a CityEvent or CityEventChoice defined above. Also does not work with CheckKnownPlayers-->
		<Column name="CheckOnlyEventCity" type="boolean" default="false"/>
		<!-- Defaults to TRUE, meaning that any event/choice defined above must be active for the event to fire. Setting it to false makes it so that any event/choice defined above that is NOT active is the trigger.
		Think of this as a boolean switch - if the state of the event(s) above are hoped to be inactive, make this false. If you want it active, leave it true.
		-->
		<Column name="CheckForActive" type="boolean" default="true"/>
	</Table>

This is final arrangement unless I missed anything. This replaces all of the RequiredActiveEventOtherPlayer etc. columns. Those were clunky and could not accommodate multiple events. Now you can have events/choices with multiple pre-req events/choices, and they'll all use the same formula.

G
 
Since making a modpack with this is wonky, I was thinking of using a modpack for Vox Populi and then just loading Events through the mod menu. I've done this in the past for things like IGE, but does this sound like it would create a problem for this mod (screwing up load order, database views mods/modpacks differently, something like that)?

For anyone coming across this now, it does not work well. Don't try it.
 
Your audio issue is above my pay grade, Joose. I know that it was recommended against running the modpack in single player, though I don't know what would go wrong.

That recommendation is for that specific modpack because it adds Active Diplomacy or something like that for multiplayer, I make my own modpacks for single player use with nothing extra added and they've worked well ever since I started doing it.

This is the first mod I've ran into that muted audio when incorporated into a pack though. Looking at the MPMPM thread, the exact same issue's happened to at least one other person using an unrelated mod that it sounds like was a bit older and incompatible.

I don't really expect that it's any sort of priority, I was mainly passing it along in case someone knew a lot more than me about how it all works or if multiplayer was an eventual goal for this to be included with the rest of the multiplayer package.
 
If you're that desperate, you could remove all the audio references in the (7) folder(Just ctrl-f everything with audio).
 
Is there a way to propose events without having to code that ourselves? You may think that's easy, but I feel a little overwhelmed when I look at that code.

I think hokath or enginseer have a requests thread, or at least they used to.

Nevertheless, the XML tables are very well documented by me, and you can use the existing XML events to figure out how it is all supposed to work fairly easily. It is plain language code, and the database.log will tell you if you goofed something.

G
 
I think hokath or enginseer have a requests thread, or at least they used to.

Nevertheless, the XML tables are very well documented by me, and you can use the existing XML events to figure out how it is all supposed to work fairly easily. It is plain language code, and the database.log will tell you if you goofed something.

G

Where are those tables? Even if I'm not able to write anything, at least I could see what's possible and what's not.
 
I think hokath or enginseer have a requests thread, or at least they used to.

Nevertheless, the XML tables are very well documented by me, and you can use the existing XML events to figure out how it is all supposed to work fairly easily. It is plain language code, and the database.log will tell you if you goofed something.

G

It's implied to be in our Github since a proposal is usually an issue because people apparently don't like bad events. :mad:
 
Back
Top Bottom