• Our friends from AlphaCentauri2.info are in need of technical assistance. If you have experience with the LAMP stack and some hours to spare, please help them out and post here.

Mimics Multiplayer Modmod

Decius and Flauros build the GM for 60 hammers and will get it before turn 100. They'll get about +8 hammers per turn per city ever after that. If they use Aristofarms (which they should) and Ashen Veil (which is likely enough) then it can be +25 hammers per city by turn 200.

Its pretty sickening.

I see, so would halving it be enough do you think?
 
I think something could be done with vassalisation in MP mod. Current 'vanilla' solution is not working well. I am a fan of RP solution, but mechanics should support it.

My view of vassalization is the situation when 'master' has military superiority over 'vasal', and is able to force him to capitulate. Usually it is because a 'vasal' already lost most of his army and feels he would be destroyed/lose cities easily.
As 'master' settles his strong army near the 'vasal's' city(ies), he is able to impose a 'vasal' will not hold more than a few units within the given city. It's a sort of blackmail: if you are not obedient - I will conquer your city.
It opens the field for nice RP. 'Vasal' is not forced to love his opressor, nor enter into all 'master's' wars automatically. However, he is blackmailed and will probably do. Same for tributes/resources etc. He can try to break free anytime, but there is a high risk he will lose valuable cities.

Mechanics should support such solution. My bunch of ideas:
- remove all currently existing features of vasalization (culture/borders solution may be kept, as it works ok)
+ modify the cost of units held in the vassal's land. Let them be the same as in own land.
+ master's units are not withdrawn automatically from vasal's lands in case of DoW (I believe Esus script can be used somehow)
+ vassalization can be cancelled in negotiation menu if both sides agree
I assume a master can enforce peace and open borders under current mechanics (maybe 'open borders' might be available without Map Making tech?).
 
Vers 0.03 up, I've put vampires str back to 5 but allowed them to take Shadow, Death and Mind magic if they have the appropriate tech and mana, also increased their build cost.

lgaard I like your ideas on vassalization but it looks like a load of work and I am lazy :p so I will attempt to redo vassalization for the last feature of this mod.

As Kyroshill aptly put:
Vassalization - RP Style

The vassal mechanic in MP is broken. Therefore all vassals and colonies should be handled informally in RP mode. This allows retribution by the dominant power when demands aren't met... and allows rebellion by a subservient state.

Since demands can't be made in the trade screen (see above).... there is no way to declare war from a vassal relationship. Therefore, RP solutions are necessary.

I think for now it would be easier to disable vassal in mp games and instead do it informally, you can do all the things you suggested above because we are all human and if you have a large army in your "vassals" borders you can force them to do whatever you want, but if vassals are allowed as they are now then all it does is prevent you fighting each other and the subservient state will never have a chance to fight back.

I will see what I can about it, but I'd rather finish my other features first.
 
It would also be flavorful, if we are talking about RP type games and such, for the hippus to be able to deal in gold transactions from the start, as if they have researched currency. Maybe allow this for the Khazad as well.

I think it would allow for the Hippus to be Mercenaries more easily.

As for Khazad, if people are willing to give the Khazad their much needed gold, they could find themselves a loyal ally.


also, there is an alleged temporary fix to the trait change bug found here http://forums.civfanatics.com/showthread.php?t=326368
 
Ah I forgot about the gold thing, yeah I'll make gold trading available for khazad and hippus from the start. Just downloaded that fix, should be able to finish the cal off now :)
 
Wouldn't he need to modify the way <bAdaptive> tag works in order to allow the player to pick 2 traits instead of 1?

Looks like I may have to do this because no matter what I try the second custom trait overwrites the first when you have chosen them. How would you go about modifying this tag?
 
You'd need to modify the DLL for that. What's the current python code you are using?
 
You mean the CvGameCore041b that you can download from the modders guide to ffh? I've no idea how to use this with ffh though.

I used your code for the python :)
Code:
if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_CUSTOM_TRAIT_1')):
				if iGameTurn == 1:
					iEvent = CvUtil.findInfoTypeNum(gc.getEventTriggerInfo, gc.getNumEventTriggerInfos(),'EVENTTRIGGER_TRAIT_CUSTOM_TRAIT_1')
					triggerData = pPlayer.initTriggeredData(iEvent, true, -1, -1, -1, iPlayer, -1, -1, -1, -1, -1)

if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_CUSTOM_TRAIT_2')):
				if iGameTurn == 1:
					iEvent = CvUtil.findInfoTypeNum(gc.getEventTriggerInfo, gc.getNumEventTriggerInfos(),'EVENTTRIGGER_TRAIT_CUSTOM_TRAIT_2')
					triggerData = pPlayer.initTriggeredData(iEvent, true, -1, -1, -1, iPlayer, -1, -1, -1, -1, -1)
 
In the python callback for EVENTTRIGGER_TRAIT_ADAPTIVE put something like this there:

Code:
def doTraitCustom(argsList):
	iEvent = argsList[0]
	kTriggeredData = argsList[1]
	iPlayer = kTriggeredData.ePlayer
	pPlayer = gc.getPlayer(iPlayer)
	if not pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_CUSTOM_TRAIT_1')) and pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_CUSTOM_TRAIT_2')):
		pPlayer.setHasTrait(gc.getInfoTypeForString('TRAIT_CUSTOM_TRAIT_2'),False)
	if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_CUSTOM_TRAIT_1')) and pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_CUSTOM_TRAIT_2')):
		pPlayer.setHasTrait(gc.getInfoTypeForString('TRAIT_CUSTOM_TRAIT_1'),False)
 
What is the python callback? :confused:
I put that code into CvEventManager.py and it stopped the trait working altogether.
Thanks for helping me :)
 
I implemented it this way:

1. Create a new leader
2. Give him a copy of the adaptive trait and set badaptive to zero
3. Allow any civ to have him as a leader
4. create two eventtriggers (copy of the adaptive eventtrigger with iweight=-1, no recurring, python cando callback so that the events trigger of at 1 and 2 turns elapsed )
5. Modifications of the canApplyTraitAggressive,doTraitAggressive stuff in CvRandomEventinterface.py

not sure if it is easier for you to just get yours to working or copy this, but you definetly don't need to modify the DLL.
 
Ok ... some problems arise .. and unfortunately it seems we cannot reproduce Sephi's method, or something. But do not fear! I have an idea, only no skillz to code such logic.

The first adaptive will somehow go onto both, instead of just trait one. The way I first worded it however, was that you pick trait one, and then you make trait one and trait two SWITCH PLACES, so that your trait one is safely in location two, and your second choice overwrites the original location, which has undisirable trait B instead of your chosen trait A.

I hope I worded this in an unconfusing mannor. You pick trait A and B, trait A goes to the second slot in some way. This can be done by having the second somehow copy the first choice, or trading places with the first choice. Then the second adaptive instance works normally, and gives you a trait one
 
this is the python modifications I have done in CvRandomEventInterface, maybe it helps
Code:
def canApplyTraitAggressive(argsList):
	iEvent = argsList[0]
	kTriggeredData = argsList[1]
	pPlayer = gc.getPlayer(kTriggeredData.ePlayer)
#Sephi	
	if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_OPPERTUNIST_MASTER')):
		if not pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_AGGRESSIVE')):
			return true
		else:
			return false
			
	if gc.getLeaderHeadInfo(pPlayer.getLeaderType()).getPermanentTrait() == gc.getInfoTypeForString('TRAIT_AGGRESSIVE'):
		return False
	return True

def doTraitAggressive(argsList):
	iEvent = argsList[0]
	kTriggeredData = argsList[1]
	iPlayer = kTriggeredData.ePlayer
	pPlayer = gc.getPlayer(iPlayer)
#Sephi	
	if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_OPPERTUNIST_MASTER')):
		pPlayer.setHasTrait(gc.getInfoTypeForString('TRAIT_AGGRESSIVE'),True)
		return
	
	for iTrait in range(gc.getNumTraitInfos()):
		if pPlayer.hasTrait(iTrait):
			if (gc.getTraitInfo(iTrait).isSelectable()):
				if gc.getLeaderHeadInfo(pPlayer.getLeaderType()).getPermanentTrait() != iTrait:
					pPlayer.setHasTrait(iTrait,False)
#					CyMessageControl().sendApplyEvent(5013, EventContextTypes.EVENTCONTEXT_ALL, (iPlayer,iTrait,False))
#	CyMessageControl().sendApplyEvent(5013, EventContextTypes.EVENTCONTEXT_ALL, (iPlayer,gc.getInfoTypeForString('TRAIT_AGGRESSIVE'),True))
	pPlayer.setHasTrait(gc.getInfoTypeForString('TRAIT_AGGRESSIVE'),True)
 
Patch C is out!!! yay!!!
 
And vers 0.06 is up!!! yay!!! :p it should be compatible with patch C, haven't tried it yet :scared: anyway, most of the features I wanted to do when I started this are done and I think it will make mp games fairer and more fun, But it needs some serious testing now (and I've still got to go through that list of ideas, tasunke :p) so I'll be on hamachi all day in case anyone wants to help me test.

EDIT: yup works with patch c

EDIT AGAIN: nope it doesnt :(
 
Ive just read the new changelog ... quite exciting. Can't wait to try it out this Saturday
 
:) should be fun

I've been working on a new game option "Regicide" basically it starts you out with your chosen leader as a unit, if the unit dies you lose all your traits (exactly how Basium and Hyborem work) But I need some help with this python:

CVEventManager.py
Code:
def onGameStart(self, argsList):
		'Called at the start of the game'

if gc.getGame().isOption(GameOptionTypes.GAMEOPTION_REGICIDE):
			if iLeader = cf.getLeader(gc.getInfoTypeForString('LEADER_FALAMAR'))
			newUnit1 = pPlayer.initUnit(gc.getInfoTypeForString('UNIT_FALAMAR'), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)

The new game option shows fine and I already tested the new unit out in worldbuilder but this code never does anything, anyone know whats wrong?
 
New game options require some DLL modifications too AFAIK. To get around it you could make a duplicate of all leaders or create a python event at the start of the game asking the player if they want their chosen leader to lead the nation as a hero unit.
 
Back
Top Bottom