Premier Valle
FF: Babylon 5 Mod Team
Hello everyone!
I'm in a mod team,we are making a mod based on the Final Frontier mod, here is what I want to do:
A ship can open a Jump Point (JP) in the space, and make a "jump" from there to somewhere else, other friendly ships can jump from the same JP.
The algorithm:
- A ship can BUILD a Jump Point IMPROVEMENT
- Once the JP Improvement is built ships can PARADROP from it to somewhere else.
- The JP Improvement is like a modified fort, and in order for a unit to paradrop from it, the JP improvement must have culture.
- The JP Improvement is removed at the next turn
Here is the code I'm using to give culture to the JP Improvement @ onImprovementBuilt(...) in CvFinalFrontierEvents.py:
Here is the code that actually creates the culture for the JP improvement:
And just in case, here is the code that removes the JP improvement @
onEndGameTurn(...):
The problem here is that when a ship builds a JP improvement it looses all movement points, and hence can't make the "jump", even with this line:
All units in the same plot/tile/square regain all their movement points, except the unit that built the JP improvement.
The JP improvement XML:
And the XML for the BuildInfo:
Any idea as to how make the unit that builds the JP improvement able to make the jump??
Any help will be appretiated
I'm in a mod team,we are making a mod based on the Final Frontier mod, here is what I want to do:
A ship can open a Jump Point (JP) in the space, and make a "jump" from there to somewhere else, other friendly ships can jump from the same JP.
The algorithm:
- A ship can BUILD a Jump Point IMPROVEMENT
- Once the JP Improvement is built ships can PARADROP from it to somewhere else.
- The JP Improvement is like a modified fort, and in order for a unit to paradrop from it, the JP improvement must have culture.
- The JP Improvement is removed at the next turn
Here is the code I'm using to give culture to the JP Improvement @ onImprovementBuilt(...) in CvFinalFrontierEvents.py:
Code:
#------------------------------ JumpPoint STARTS
iImprovementJumpPointID = CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_JUMP_POINT')
#JumpPoint Finished
if (iImprovement == iImprovementJumpPointID):
pPlot = CyMap().plot(iX, iY)
#pPlot.setImprovementType(-1)
# Look for the jumping Ship on this plot
for iUnitLoop in range(pPlot.getNumUnits()):
pUnit = pPlot.getUnit(iUnitLoop)
pUnit.setName("Da unit")
pUnit.setMoves(0) #Resets the movement points for every other ship (so they can jump)
# if (pUnit.getScriptData() == "BuildingJumpPoint"): #THIS CODE IS USELESS SINCE THE SCRIPT IS NEVER SET
#self.doMakeStarbase(pUnit.getOwner(), iX, iY)
#self.aiKillTimerData = [3, pUnit.getOwner(), pUnit.getID()]
# szTitle = self.szGameDate = CyGameTextMgr().getTimeStr(CyGame().getGameTurn(), false)
# popup = PyPopup.PyPopup(-1)
# popup.setHeaderString(szTitle)
# popup.setBodyString('pUnit!')
# popup.launch(true, PopupStates.POPUPSTATE_QUEUED)
self.jumpPointCulture(pUnit.getOwner(), iX, iY)
#------------------------------ JumpPoint ENDS
Here is the code that actually creates the culture for the JP improvement:
Code:
def jumpPointCulture(self, iPlayer, iX, iY):
#Create culture at the jump point location, so that ships can jump from there
#Based on the updateStarbaseCulture(...)
iActiveX = iX#iXLoop
iActiveY = iY#iYLoop
if (iActiveX < 0):
iActiveX = CyMap().getGridWidth() + iActiveX
if (iActiveY < 0):
iActiveY = CyMap().getGridHeight() + iActiveY
pLoopPlot = CyMap().plot(iActiveX, iActiveY) #GETS THE PLOT IN THIS COORDINATE
# Don't override culture that's already here
if (pLoopPlot.getOwner() == -1): #DOES THE PLOT BELONG TO SOMEONE?
pLoopPlot.setOwner(iPlayer) #SET THE PLOT'S CULTURE
#jumpPointCulture() END
And just in case, here is the code that removes the JP improvement @
onEndGameTurn(...):
Code:
#JumpPoint REMOVAL STARTS
b5_totalMapPlots = CyMap().numPlots() #Total number of plots in the map
b5_count = 0
while b5_count != b5_totalMapPlots: #For-Each plot in the map
b5_plot = CyMap().plotByIndex(b5_count) #get a tile of the map by index
if (b5_plot.getImprovementType() == gc.getInfoTypeForString('IMPROVEMENT_JUMP_POINT')): #if the improvement is a jump point
b5_plot.setImprovementType(-1) #remove the jump point improvement
b5_count = b5_count + 1
#JumpPoint REMOVAL ENDS
The problem here is that when a ship builds a JP improvement it looses all movement points, and hence can't make the "jump", even with this line:
Code:
pUnit.setMoves(0)
The JP improvement XML:
Spoiler :
Code:
<ImprovementInfo>
<Type>IMPROVEMENT_JUMP_POINT</Type>
<Description>Jump Point</Description>
<Civilopedia>TXT_KEY_IMPROVEMENT_FORT_PEDIA</Civilopedia>
<ArtDefineTag>ART_DEF_IMPROVEMENT_JUMP_POINT</ArtDefineTag>
<YieldChanges/>
<bActsAsCity>1</bActsAsCity>
<bHillsMakesValid>0</bHillsMakesValid>
<bFreshWaterMakesValid>0</bFreshWaterMakesValid>
<bRiverSideMakesValid>0</bRiverSideMakesValid>
<bNoFreshWater>0</bNoFreshWater>
<bRequiresFlatlands>0</bRequiresFlatlands>
<bRequiresRiverSide>0</bRequiresRiverSide>
<bRequiresIrrigation>0</bRequiresIrrigation>
<bCarriesIrrigation>0</bCarriesIrrigation>
<bRequiresFeature>0</bRequiresFeature>
<bWater>0</bWater>
<bGoody>0</bGoody>
<bPermanent>0</bPermanent>
<bUseLSystem>1</bUseLSystem>
<iAdvancedStartCost>60</iAdvancedStartCost>
<iAdvancedStartCostIncrease>0</iAdvancedStartCostIncrease>
<iTilesPerGoody>0</iTilesPerGoody>
<iGoodyRange>0</iGoodyRange>
<iFeatureGrowth>0</iFeatureGrowth>
<iUpgradeTime>0</iUpgradeTime>
<iAirBombDefense>0</iAirBombDefense>
<iDefenseModifier>0</iDefenseModifier>
<iHappiness>0</iHappiness>
<iPillageGold>0</iPillageGold>
<bOutsideBorders>1</bOutsideBorders>
<TerrainMakesValids>
<TerrainMakesValid>
<TerrainType>TERRAIN_GRASS</TerrainType>
<bMakesValid>1</bMakesValid>
</TerrainMakesValid>
<TerrainMakesValid>
<TerrainType>TERRAIN_PLAINS</TerrainType>
<bMakesValid>1</bMakesValid>
</TerrainMakesValid>
<TerrainMakesValid>
<TerrainType>TERRAIN_DESERT</TerrainType>
<bMakesValid>1</bMakesValid>
</TerrainMakesValid>
<TerrainMakesValid>
<TerrainType>TERRAIN_TUNDRA</TerrainType>
<bMakesValid>1</bMakesValid>
</TerrainMakesValid>
<TerrainMakesValid>
<TerrainType>TERRAIN_SNOW</TerrainType>
<bMakesValid>1</bMakesValid>
</TerrainMakesValid>
</TerrainMakesValids>
<FeatureMakesValids/>
<ImprovementPillage/>
<ImprovementUpgrade/>
<TechYieldChanges/>
<RouteYieldChanges/>
<bGraphicalOnly>0</bGraphicalOnly>
</ImprovementInfo>
And the XML for the BuildInfo:
Spoiler :
Code:
<BuildInfo>
<Type>BUILD_JUMP_POINT</Type>
<Description>Open JumpPoint</Description>
<Help/>
<PrereqTech>NONE</PrereqTech>
<iTime>0</iTime>
<iCost>0</iCost>
<bKill>0</bKill>
<ImprovementType>IMPROVEMENT_JUMP_POINT</ImprovementType>
<RouteType>NONE</RouteType>
<EntityEvent>ENTITY_EVENT_BUILD</EntityEvent>
<FeatureStructs/>
<HotKey>KB_F</HotKey>
<bAltDown>0</bAltDown>
<bShiftDown>0</bShiftDown>
<bCtrlDown>1</bCtrlDown>
<iHotKeyPriority>0</iHotKeyPriority>
<Button>Art/Interface/Buttons/OpenJumpPointButton.dds</Button>
</BuildInfo>
Any idea as to how make the unit that builds the JP improvement able to make the jump??
Any help will be appretiated
