创建河流函数:
[( )] rmRiverCreate(int areaID, string waterType, int breaks, int offset, int minR, int maxR): make a river dude. [( )] rmRiverAddWaypoint(riverID, xFraction, zFraction):Add waypoint to a river. Don't mix with rmRiverSetConnections or rmRiverConnectRiver [( )] rmRiverAvoid(riverID, riverID2, minDist) [( )] rmRiverConnectRiver(riverID, riverID, pct, end); [( )] rmRiverSetBankNoiseParams(riverID, frequency, octaves, persistence, sineLength, sineAmt, variation); [( )] rmRiverSetShallowRadius(riverID, radius); [( )] rmRiverAddShallows(riverID, count, radius); [( )] rmRiverReveal(int riverID, int extraTiles)(int riverID, int extraTiles) -- reveals a river plus the specified number of extra tiles around it. [(bool)] rmAddAreaToClass(int areaID, int classID): Add given area to specified class.
River | |||||||
![]() |
Amazon River | ![]() |
Andes River | ![]() |
Deccan Plateau River | ![]() |
Pampas River |
![]() |
Yellow River | ![]() |
Yukon River | ||||
Lake | |||||||
![]() |
Amsterdam | ![]() |
Bayou | ![]() |
Berlin | ![]() |
Borneo Water |
![]() |
China_HC | ![]() |
Constantinople | ![]() |
Great Lakes | ![]() |
Great Lakes Ice |
![]() |
Great Plains Pond | ![]() |
India_HC | ![]() |
Iroquois_HC | ![]() |
Japan_HC |
![]() |
Lisbon | ![]() |
London | ![]() |
New England Lake | ![]() |
Northwest Territory Water |
![]() |
Paris | ![]() |
Saguenay Lake | ![]() |
Seville | ![]() |
Texas Pond |
![]() |
Yellow River Flooded | ||||||
Coast | |||||||
![]() |
Amazon River Basin | ![]() |
Araucania Central Coast | ![]() |
Araucania North Coast | ![]() |
Araucania Southern Coast |
![]() |
Atlantic Coast | ![]() |
Bayou SPC | ![]() |
Borneo Coast | ![]() |
California Coast |
![]() |
Caribbean Coast | ![]() |
Ceylon Coast | ![]() |
Cinematic Ship Ocean | ![]() |
Coastal Japan |
![]() |
Hudson Bay | ![]() |
Hudson Bay | ![]() |
New England Coast | ![]() |
Yucatan Coast |
include "mercenaries.xs";
include "ypAsianInclude.xs";
include "ypKOTHInclude.xs";
void main(void)
{
// ---------------------------------------- Map Info -------------------------------------------
int playerTilesX=13200; //设定地图X大小
int playerTilesZ=13200; //设定地图Z大小(帝国3的Y是高度,Z才是我们平常所用到的Y)
//如果玩家大于4将playerTilesX与playerTilesZ改为11500(同一个值的int只能出现1次,当你需要修改数值的时候,不能再加入int)
if (cNumberNonGaiaPlayers >4){ playerTilesX=11500; playerTilesZ=11500;}
if (cNumberNonGaiaPlayers >6){ playerTilesX=10500; playerTilesZ=10500;} //Modify Map X&Z Size of 6,7,8 Player
int SizeX = 2*sqrt(cNumberNonGaiaPlayers*playerTilesX);
int SizeZ = 2*sqrt(cNumberNonGaiaPlayers*playerTilesZ);
string MapTerrain ="Carolinas\ground_marsh3_car"; //<-------- 地图地形,自己参照剧情编辑器 <--------
string MapLighting ="319a_Snow"; //<-------- 照明,自己参照剧情编辑器 <--------
string PlayerTerrain ="Carolinas\ground_marsh1_car"; //<--------- 玩家范围地形 <---------
//设定地图XZ大小,分别调用上面用int定义的SizeX与SizeZ,即为rmSetMapSize(13200,13200);如果玩家大于4将改为11500
rmSetMapSize(SizeX, SizeZ);
rmSetMapElevationParameters(cElevTurbulence, 0.15, 2.5, 0.35, 3.0); // type, frequency, octaves, persistence, variation
rmSetMapElevationHeightBlend(1.0);
//地形初始化,设定地图初始地形,调用上面用string定义MapTerrain,即为"Carolinas\ground_marsh3_car";
rmTerrainInitialize(MapTerrain,6);
//设定照明,调用上面用string定义MapLighting,即为"319a_Snow"
rmSetLightingSet(MapLighting);
rmSetGlobalRain(0.9); //设定下雨
chooseMercs();
rmSetMapType("yucatan");
rmSetMapType("water");
rmSetMapType("default"); //设定地图类型,地图类型影响到宝藏
rmSetMapType("land");
rmSetMapType("bayou");
rmSetSeaLevel(0); // this is height of river surface compared to surrounding land. River depth is in the river XML.
rmSetStatusText("",0.01);//读取地图进度条
rmPlacePlayersCircular(0.35, 0.35, 0.0); //圆形放置玩家
int River2ID = rmRiverCreate(-1, "Northwest Territory Water", 1, 1, 10, 10);
rmRiverAddWaypoint(River2ID, 1.0, 0.0 ); //坐标自己参照地图坐标,这里是地图最左端
rmRiverAddWaypoint(River2ID, 0.6, 0.6 ); //这里是地图中心往上一点
rmRiverAddWaypoint(River2ID, 0.0, 1.0 ); //这里是地图最右端,所以三个点连起来就是一个小三角形。
//另外两个相邻的中续点不要设定相同,否则无法打开地图,不信的话你可以自己去试一试。
rmRiverSetBankNoiseParams(River2ID,0.00, 0, 0.0, 0.0, 0.0, 0.0);
rmRiverBuild(River2ID);
//玩家范围
float AreaSizePlayer = rmAreaTilesToFraction(700);
for(i=1; <=cNumberNonGaiaPlayers)
{
int id=rmCreateArea("Player"+i);
rmSetPlayerArea(i, id);
rmSetAreaWarnFailure(id, false);
rmSetAreaSize(id, AreaSizePlayer, AreaSizePlayer);
rmSetAreaLocPlayer(id, i);
rmSetAreaCoherence(id, 0.85);
rmSetAreaSmoothDistance(id, 2);
rmSetAreaMinBlobs(id, 1);
rmSetAreaMaxBlobs(id, 1);
rmSetAreaTerrainType(id,PlayerTerrain);
rmBuildArea(id);
}
//定义城镇中心
int TownCenterID = rmCreateObjectDef("player TC");
if (rmGetNomadStart())
{
rmAddObjectDefItem(TownCenterID, "CoveredWagon", 1, 0.0);
}
else
{
rmAddObjectDefItem(TownCenterID, "TownCenter", 1, 0);
}
rmSetObjectDefMinDistance(TownCenterID, 0.0);
rmSetObjectDefMaxDistance(TownCenterID, 20.0);
for(i=1; <=cNumberNonGaiaPlayers)
{
rmPlaceObjectDefAtLoc(TownCenterID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
}
//定义起始单位(civs.xml定义那些开局单位)
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
for(i=1; <=cNumberNonGaiaPlayers)
{
vector TCLocation = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TownCenterID, i));
rmPlaceObjectDefAtLoc(startingUnits, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
}
rmSetStatusText("",0.50);//读取地图进度条
rmSetStatusText("",1.00);//读取地图进度条
} //END
include "mercenaries.xs";
include "ypAsianInclude.xs";
include "ypKOTHInclude.xs";
void main(void)
{
// ---------------------------------------- Map Info -------------------------------------------
int playerTilesX=13200; //设定地图X大小
int playerTilesZ=13200; //设定地图Z大小(帝国3的Y是高度,Z才是我们平常所用到的Y)
//如果玩家大于4将playerTilesX与playerTilesZ改为11500(同一个值的int只能出现1次,当你需要修改数值的时候,不能再加入int)
if (cNumberNonGaiaPlayers >4){ playerTilesX=11500; playerTilesZ=11500;}
if (cNumberNonGaiaPlayers >6){ playerTilesX=10500; playerTilesZ=10500;} //Modify Map X&Z Size of 6,7,8 Player
int SizeX = 2*sqrt(cNumberNonGaiaPlayers*playerTilesX);
int SizeZ = 2*sqrt(cNumberNonGaiaPlayers*playerTilesZ);
string MapTerrain ="Carolinas\ground_marsh3_car"; //<-------- 地图地形,自己参照剧情编辑器 <--------
string MapLighting ="319a_Snow"; //<-------- 照明,自己参照剧情编辑器 <--------
string PlayerTerrain ="Carolinas\ground_marsh1_car"; //<--------- 玩家范围地形 <---------
//设定地图XZ大小,分别调用上面用int定义的SizeX与SizeZ,即为rmSetMapSize(13200,13200);如果玩家大于4将改为11500
rmSetMapSize(SizeX, SizeZ);
rmSetMapElevationParameters(cElevTurbulence, 0.15, 2.5, 0.35, 3.0); // type, frequency, octaves, persistence, variation
rmSetMapElevationHeightBlend(1.0);
//地形初始化,设定地图初始地形,调用上面用string定义MapTerrain,即为"Carolinas\ground_marsh3_car";
rmTerrainInitialize(MapTerrain,6);
//设定照明,调用上面用string定义MapLighting,即为"319a_Snow"
rmSetLightingSet(MapLighting);
rmSetGlobalRain(0.9); //设定下雨
chooseMercs();
rmSetMapType("yucatan");
rmSetMapType("water");
rmSetMapType("default"); //设定地图类型,地图类型影响到宝藏
rmSetMapType("land");
rmSetMapType("bayou");
rmSetSeaLevel(0); // this is height of river surface compared to surrounding land. River depth is in the river XML.
rmSetStatusText("",0.01);//读取地图进度条
rmPlacePlayersCircular(0.35, 0.35, 0.0); //圆形放置玩家
int River2ID = rmRiverCreate(-1, "Yellow River", 1, 1, 10, 10);
rmRiverAddWaypoint(River2ID, 1.0, 0.0 );
rmRiverAddWaypoint(River2ID, 0.6, 0.6 );
rmRiverAddWaypoint(River2ID, 0.0, 1.0 );
rmRiverSetBankNoiseParams(River2ID,0.00, 0, 0.0, 0.0, 0.0, 0.0);
rmRiverBuild(River2ID);
//玩家范围
float AreaSizePlayer = rmAreaTilesToFraction(700);
for(i=1; <=cNumberNonGaiaPlayers)
{
int id=rmCreateArea("Player"+i);
rmSetPlayerArea(i, id);
rmSetAreaWarnFailure(id, false);
rmSetAreaSize(id, AreaSizePlayer, AreaSizePlayer);
rmSetAreaLocPlayer(id, i);
rmSetAreaCoherence(id, 0.85);
rmSetAreaSmoothDistance(id, 2);
rmSetAreaMinBlobs(id, 1);
rmSetAreaMaxBlobs(id, 1);
rmSetAreaTerrainType(id,PlayerTerrain);
rmBuildArea(id);
}
//定义城镇中心
int TownCenterID = rmCreateObjectDef("player TC");
if (rmGetNomadStart())
{
rmAddObjectDefItem(TownCenterID, "CoveredWagon", 1, 0.0);
}
else
{
rmAddObjectDefItem(TownCenterID, "TownCenter", 1, 0);
}
rmSetObjectDefMinDistance(TownCenterID, 0.0);
rmSetObjectDefMaxDistance(TownCenterID, 20.0);
for(i=1; <=cNumberNonGaiaPlayers)
{
rmPlaceObjectDefAtLoc(TownCenterID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
}
//定义起始单位(civs.xml定义那些开局单位)
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
for(i=1; <=cNumberNonGaiaPlayers)
{
vector TCLocation = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TownCenterID, i));
rmPlaceObjectDefAtLoc(startingUnits, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
}
rmSetStatusText("",0.50);//读取地图进度条
rmSetStatusText("",1.00);//读取地图进度条
} //END
include "mercenaries.xs";
include "ypAsianInclude.xs";
include "ypKOTHInclude.xs";
void main(void)
{
// ---------------------------------------- Map Info -------------------------------------------
int playerTilesX=13200; //设定地图X大小
int playerTilesZ=13200; //设定地图Z大小(帝国3的Y是高度,Z才是我们平常所用到的Y)
//如果玩家大于4将playerTilesX与playerTilesZ改为11500(同一个值的int只能出现1次,当你需要修改数值的时候,不能再加入int)
if (cNumberNonGaiaPlayers >4){ playerTilesX=11500; playerTilesZ=11500;}
if (cNumberNonGaiaPlayers >6){ playerTilesX=10500; playerTilesZ=10500;} //Modify Map X&Z Size of 6,7,8 Player
int SizeX = 2*sqrt(cNumberNonGaiaPlayers*playerTilesX);
int SizeZ = 2*sqrt(cNumberNonGaiaPlayers*playerTilesZ);
string MapTerrain ="Carolinas\ground_marsh3_car"; //<-------- 地图地形,自己参照剧情编辑器 <--------
string MapLighting ="319a_Snow"; //<-------- 照明,自己参照剧情编辑器 <--------
string PlayerTerrain ="Carolinas\ground_marsh1_car"; //<--------- 玩家范围地形 <---------
//设定地图XZ大小,分别调用上面用int定义的SizeX与SizeZ,即为rmSetMapSize(13200,13200);如果玩家大于4将改为11500
rmSetMapSize(SizeX, SizeZ);
rmSetMapElevationParameters(cElevTurbulence, 0.15, 2.5, 0.35, 3.0); // type, frequency, octaves, persistence, variation
rmSetMapElevationHeightBlend(1.0);
//地形初始化,设定地图初始地形,调用上面用string定义MapTerrain,即为"Carolinas\ground_marsh3_car";
rmTerrainInitialize(MapTerrain,6);
//设定照明,调用上面用string定义MapLighting,即为"319a_Snow"
rmSetLightingSet(MapLighting);
rmSetGlobalRain(0.9); //设定下雨
chooseMercs();
rmSetMapType("yucatan");
rmSetMapType("water");
rmSetMapType("default"); //设定地图类型,地图类型影响到宝藏
rmSetMapType("land");
rmSetMapType("bayou");
rmSetSeaLevel(0); // this is height of river surface compared to surrounding land. River depth is in the river XML.
rmSetStatusText("",0.01);//读取地图进度条
rmPlacePlayersCircular(0.35, 0.35, 0.0); //圆形放置玩家
//5是最小半径,10是最大半径
int River2ID = rmRiverCreate(-1, "Borneo Water", 1, 1, 5, 10);
rmRiverAddWaypoint(River2ID, 1.0, 0.0 );
rmRiverAddWaypoint(River2ID, 0.35, 0.85 );
rmRiverAddWaypoint(River2ID, 0.3, 0.6 );
rmRiverAddWaypoint(River2ID, 0.1, 0.5 );
rmRiverAddWaypoint(River2ID, 0.3, 0.5 );
rmRiverAddWaypoint(River2ID, 0.3, 0.3 );
rmRiverAddWaypoint(River2ID, 0.5, 0.5 );
rmRiverAddWaypoint(River2ID, 0.3, 0.5 );
rmRiverAddWaypoint(River2ID, 0.7, 0.5 );
rmRiverAddWaypoint(River2ID, 0.6, 0.2 );
rmRiverAddWaypoint(River2ID, 0.0, 1.0 );
rmRiverSetBankNoiseParams(River2ID,0.00, 0, 0.0, 0.0, 0.0, 0.0);
rmRiverBuild(River2ID);
//玩家范围
float AreaSizePlayer = rmAreaTilesToFraction(700);
for(i=1; <=cNumberNonGaiaPlayers)
{
int id=rmCreateArea("Player"+i);
rmSetPlayerArea(i, id);
rmSetAreaWarnFailure(id, false);
rmSetAreaSize(id, AreaSizePlayer, AreaSizePlayer);
rmSetAreaLocPlayer(id, i);
rmSetAreaCoherence(id, 0.85);
rmSetAreaSmoothDistance(id, 2);
rmSetAreaMinBlobs(id, 1);
rmSetAreaMaxBlobs(id, 1);
rmSetAreaTerrainType(id,PlayerTerrain);
rmBuildArea(id);
}
//定义城镇中心
int TownCenterID = rmCreateObjectDef("player TC");
if (rmGetNomadStart())
{
rmAddObjectDefItem(TownCenterID, "CoveredWagon", 1, 0.0);
}
else
{
rmAddObjectDefItem(TownCenterID, "TownCenter", 1, 0);
}
rmSetObjectDefMinDistance(TownCenterID, 0.0);
rmSetObjectDefMaxDistance(TownCenterID, 20.0);
for(i=1; <=cNumberNonGaiaPlayers)
{
rmPlaceObjectDefAtLoc(TownCenterID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
}
//定义起始单位(civs.xml定义那些开局单位)
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
for(i=1; <=cNumberNonGaiaPlayers)
{
vector TCLocation = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TownCenterID, i));
rmPlaceObjectDefAtLoc(startingUnits, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
}
rmSetStatusText("",0.50);//读取地图进度条
rmSetStatusText("",1.00);//读取地图进度条
} //END
include "mercenaries.xs";
include "ypAsianInclude.xs";
include "ypKOTHInclude.xs";
void main(void)
{
// ---------------------------------------- Map Info -------------------------------------------
int playerTilesX=13200; //设定地图X大小
int playerTilesZ=13200; //设定地图Z大小(帝国3的Y是高度,Z才是我们平常所用到的Y)
//如果玩家大于4将playerTilesX与playerTilesZ改为11500(同一个值的int只能出现1次,当你需要修改数值的时候,不能再加入int)
if (cNumberNonGaiaPlayers >4){ playerTilesX=11500; playerTilesZ=11500;}
if (cNumberNonGaiaPlayers >6){ playerTilesX=10500; playerTilesZ=10500;} //Modify Map X&Z Size of 6,7,8 Player
int SizeX = 2*sqrt(cNumberNonGaiaPlayers*playerTilesX);
int SizeZ = 2*sqrt(cNumberNonGaiaPlayers*playerTilesZ);
string MapTerrain ="Carolinas\ground_marsh3_car"; //<-------- 地图地形,自己参照剧情编辑器 <--------
string MapLighting ="319a_Snow"; //<-------- 照明,自己参照剧情编辑器 <--------
string PlayerTerrain ="Carolinas\ground_marsh1_car"; //<--------- 玩家范围地形 <---------
//设定地图XZ大小,分别调用上面用int定义的SizeX与SizeZ,即为rmSetMapSize(13200,13200);如果玩家大于4将改为11500
rmSetMapSize(SizeX, SizeZ);
rmSetMapElevationParameters(cElevTurbulence, 0.15, 2.5, 0.35, 3.0); // type, frequency, octaves, persistence, variation
rmSetMapElevationHeightBlend(1.0);
//地形初始化,设定地图初始地形,调用上面用string定义MapTerrain,即为"Carolinas\ground_marsh3_car";
rmTerrainInitialize(MapTerrain,6);
//设定照明,调用上面用string定义MapLighting,即为"319a_Snow"
rmSetLightingSet(MapLighting);
rmSetGlobalRain(0.9); //设定下雨
chooseMercs();
rmSetMapType("yucatan");
rmSetMapType("water");
rmSetMapType("default"); //设定地图类型,地图类型影响到宝藏
rmSetMapType("land");
rmSetMapType("bayou");
rmSetSeaLevel(0); // this is height of river surface compared to surrounding land. River depth is in the river XML.
rmSetStatusText("",0.01);//读取地图进度条
rmPlacePlayersCircular(0.35, 0.35, 0.0); //圆形放置玩家
int RiverRadius = 4.5; int RiverRadius2 = 8.5;
if(cNumberNonGaiaPlayers>=3) {RiverRadius = 5.4; RiverRadius2 = 10.2;}
if(cNumberNonGaiaPlayers>=4) {RiverRadius = 6.2; RiverRadius2 = 11.7;}
if(cNumberNonGaiaPlayers>=5) {RiverRadius = 6.8; RiverRadius2 = 12.8;}
if(cNumberNonGaiaPlayers>=6) {RiverRadius = 7.4; RiverRadius2 = 14.0;}
if(cNumberNonGaiaPlayers>=7) {RiverRadius = 8.0; RiverRadius2 = 15.2;}
if(cNumberNonGaiaPlayers>=8) {RiverRadius = 8.5; RiverRadius2 = 16.2;}
rmSetStatusText("",0.08);
// ---------------------------------------------------------------- River 1 ------------------------------------------------------------------
string RiverType = "Northwest Territory Water";
int RiverID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius, RiverRadius);
rmRiverAddWaypoint(RiverID, 0.500, 0.518 );
rmRiverAddWaypoint(RiverID, 0.478, 0.520 );
rmRiverAddWaypoint(RiverID, 0.450, 0.525 );
rmRiverAddWaypoint(RiverID, 0.420, 0.528 );
rmRiverAddWaypoint(RiverID, 0.400, 0.530 );
rmRiverAddWaypoint(RiverID, 0.380, 0.540 );
rmRiverAddWaypoint(RiverID, 0.330, 0.565 );
rmRiverAddWaypoint(RiverID, 0.300, 0.580 );
rmRiverAddWaypoint(RiverID, 0.280, 0.590 );
rmRiverAddWaypoint(RiverID, 0.260, 0.600 );
rmRiverAddWaypoint(RiverID, 0.240, 0.620 );
rmRiverAddWaypoint(RiverID, 0.210, 0.640 );
rmRiverAddWaypoint(RiverID, 0.200, 0.655 );
rmRiverAddWaypoint(RiverID, 0.180, 0.680 );
rmRiverAddWaypoint(RiverID, 0.170, 0.700 );
rmRiverAddWaypoint(RiverID, 0.160, 0.730 );
// rmRiverAddWaypoint(RiverID, 0.140, 0.725 );
rmRiverAddWaypoint(RiverID, 0.130, 0.720 );
rmRiverAddWaypoint(RiverID, 0.125, 0.670 );
rmRiverAddWaypoint(RiverID, 0.120, 0.650 );
rmRiverAddWaypoint(RiverID, 0.190, 0.625 );
rmRiverAddWaypoint(RiverID, 0.195, 0.610 );
rmRiverAddWaypoint(RiverID, 0.125, 0.600 );
rmRiverAddWaypoint(RiverID, 0.128, 0.560 );
rmRiverAddWaypoint(RiverID, 0.129, 0.550 );
rmRiverAddWaypoint(RiverID, 0.133, 0.533 );
rmRiverAddWaypoint(RiverID, 0.139, 0.520 );
rmRiverAddWaypoint(RiverID, 0.140, 0.500 );
rmRiverAddWaypoint(RiverID, 0.145, 0.480 );
rmRiverAddWaypoint(RiverID, 0.150, 0.461 );
rmRiverAddWaypoint(RiverID, 0.160, 0.480 );
rmRiverAddWaypoint(RiverID, 0.175, 0.430 );
rmRiverAddWaypoint(RiverID, 0.195, 0.400 );
rmRiverAddWaypoint(RiverID, 0.218, 0.370 );
rmRiverAddWaypoint(RiverID, 0.235, 0.360 );
rmRiverAddWaypoint(RiverID, 0.245, 0.350 );
rmRiverAddWaypoint(RiverID, 0.265, 0.340 );
rmRiverAddWaypoint(RiverID, 0.290, 0.310 );
rmRiverAddWaypoint(RiverID, 0.300, 0.305 );
rmRiverAddWaypoint(RiverID, 0.330, 0.288 );
rmRiverAddWaypoint(RiverID, 0.300, 0.305 );
rmRiverAddWaypoint(RiverID, 0.340, 0.275 );
rmRiverAddWaypoint(RiverID, 0.355, 0.270 );
rmRiverAddWaypoint(RiverID, 0.370, 0.265 );
rmRiverAddWaypoint(RiverID, 0.380, 0.260 );
rmRiverAddWaypoint(RiverID, 0.400, 0.265 );
rmRiverAddWaypoint(RiverID, 0.420, 0.255 );
rmRiverAddWaypoint(RiverID, 0.445, 0.250 );
rmRiverAddWaypoint(RiverID, 0.450, 0.249 );
rmRiverAddWaypoint(RiverID, 0.480, 0.248 );
rmRiverAddWaypoint(RiverID, 0.500, 0.247 );
rmRiverAddWaypoint(RiverID, 0.520, 0.249 );
rmRiverAddWaypoint(RiverID, 0.530, 0.250 );
rmRiverAddWaypoint(RiverID, 0.550, 0.255 );
rmRiverAddWaypoint(RiverID, 0.560, 0.257 );
rmRiverAddWaypoint(RiverID, 0.570, 0.261 );
rmRiverAddWaypoint(RiverID, 0.590, 0.263 );
rmRiverAddWaypoint(RiverID, 0.600, 0.267 );
rmRiverAddWaypoint(RiverID, 0.620, 0.270 );
rmRiverAddWaypoint(RiverID, 0.630, 0.275 );
rmRiverAddWaypoint(RiverID, 0.650, 0.278 );
rmRiverAddWaypoint(RiverID, 0.680, 0.288 );
rmRiverAddWaypoint(RiverID, 0.690, 0.300 );
rmRiverAddWaypoint(RiverID, 0.700, 0.305 );
rmRiverAddWaypoint(RiverID, 0.730, 0.320 );
rmRiverAddWaypoint(RiverID, 0.740, 0.333 );
rmRiverAddWaypoint(RiverID, 0.750, 0.345 );
rmRiverAddWaypoint(RiverID, 0.760, 0.355 );
rmRiverAddWaypoint(RiverID, 0.770, 0.365 );
rmRiverAddWaypoint(RiverID, 0.780, 0.375 );
rmRiverAddWaypoint(RiverID, 0.790, 0.385 );
rmRiverAddWaypoint(RiverID, 0.800, 0.390 );
rmRiverAddWaypoint(RiverID, 0.810, 0.405 );
rmRiverAddWaypoint(RiverID, 0.820, 0.420 );
rmRiverAddWaypoint(RiverID, 0.830, 0.435 );
rmRiverAddWaypoint(RiverID, 0.840, 0.450 );
rmRiverAddWaypoint(RiverID, 0.850, 0.460 );
rmRiverAddWaypoint(RiverID, 0.855, 0.500 );
rmRiverAddWaypoint(RiverID, 0.860, 0.510 );
rmRiverAddWaypoint(RiverID, 0.870, 0.520 );
rmRiverAddWaypoint(RiverID, 0.875, 0.530 );
rmRiverAddWaypoint(RiverID, 0.878, 0.540 );
rmRiverAddWaypoint(RiverID, 0.880, 0.550 );
rmRiverAddWaypoint(RiverID, 0.881, 0.560 );
rmRiverAddWaypoint(RiverID, 0.882, 0.570 );
rmRiverAddWaypoint(RiverID, 0.880, 0.600 );
rmRiverAddWaypoint(RiverID, 0.878, 0.620 );
rmRiverAddWaypoint(RiverID, 0.875, 0.640 );
rmRiverAddWaypoint(RiverID, 0.874, 0.660 );
rmRiverAddWaypoint(RiverID, 0.871, 0.680 );
rmRiverAddWaypoint(RiverID, 0.870, 0.700 );
rmRiverAddWaypoint(RiverID, 0.860, 0.730 );
rmRiverAddWaypoint(RiverID, 0.850, 0.740 );
rmRiverAddWaypoint(RiverID, 0.834, 0.730 );/*rmRiverAddWaypoint(RiverID, 0.834, 0.730 );*/
rmRiverAddWaypoint(RiverID, 0.820, 0.700 );/*rmRiverAddWaypoint(RiverID, 0.829, 0.700 );*/
rmRiverAddWaypoint(RiverID, 0.815, 0.670 );/*rmRiverAddWaypoint(RiverID, 0.820, 0.670 );*/
rmRiverAddWaypoint(RiverID, 0.790, 0.660 );
rmRiverAddWaypoint(RiverID, 0.780, 0.650 );
rmRiverAddWaypoint(RiverID, 0.760, 0.640 );
rmRiverAddWaypoint(RiverID, 0.750, 0.620 );
rmRiverAddWaypoint(RiverID, 0.738, 0.600 );
rmRiverAddWaypoint(RiverID, 0.720, 0.580 );
rmRiverAddWaypoint(RiverID, 0.700, 0.570 );
rmRiverAddWaypoint(RiverID, 0.680, 0.565 );
rmRiverAddWaypoint(RiverID, 0.670, 0.560 );
rmRiverAddWaypoint(RiverID, 0.660, 0.555 );
rmRiverAddWaypoint(RiverID, 0.650, 0.550 );
rmRiverAddWaypoint(RiverID, 0.640, 0.550 );
rmRiverAddWaypoint(RiverID, 0.630, 0.545 );
rmRiverAddWaypoint(RiverID, 0.620, 0.540 );
rmRiverAddWaypoint(RiverID, 0.610, 0.535 );
rmRiverAddWaypoint(RiverID, 0.600, 0.530 );
rmRiverAddWaypoint(RiverID, 0.580, 0.528 );
rmRiverAddWaypoint(RiverID, 0.560, 0.526 );
rmRiverAddWaypoint(RiverID, 0.550, 0.525 );
rmRiverAddWaypoint(RiverID, 0.530, 0.522 );
rmRiverAddWaypoint(RiverID, 0.520, 0.520 );
rmRiverAddWaypoint(RiverID, 0.510, 0.519 );
rmRiverAddWaypoint(RiverID, 0.500, 0.518 );
rmRiverSetBankNoiseParams(RiverID,0.00, 0, 0.0, 0.0, 0.0, 0.0);
rmRiverBuild(RiverID);
rmAddAreaToClass(RiverID,rmClassID("Lake"));
//玩家范围
float AreaSizePlayer = rmAreaTilesToFraction(700);
for(i=1; <=cNumberNonGaiaPlayers)
{
int id=rmCreateArea("Player"+i);
rmSetPlayerArea(i, id);
rmSetAreaWarnFailure(id, false);
rmSetAreaSize(id, AreaSizePlayer, AreaSizePlayer);
rmSetAreaLocPlayer(id, i);
rmSetAreaCoherence(id, 0.85);
rmSetAreaSmoothDistance(id, 2);
rmSetAreaMinBlobs(id, 1);
rmSetAreaMaxBlobs(id, 1);
rmSetAreaTerrainType(id,PlayerTerrain);
rmBuildArea(id);
}
//定义城镇中心
int TownCenterID = rmCreateObjectDef("player TC");
if (rmGetNomadStart())
{
rmAddObjectDefItem(TownCenterID, "CoveredWagon", 1, 0.0);
}
else
{
rmAddObjectDefItem(TownCenterID, "TownCenter", 1, 0);
}
rmSetObjectDefMinDistance(TownCenterID, 0.0);
rmSetObjectDefMaxDistance(TownCenterID, 20.0);
for(i=1; <=cNumberNonGaiaPlayers)
{
rmPlaceObjectDefAtLoc(TownCenterID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i));
}
//定义起始单位(civs.xml定义那些开局单位)
int startingUnits = rmCreateStartingUnitsObjectDef(5.0);
rmSetObjectDefMinDistance(startingUnits, 6.0);
rmSetObjectDefMaxDistance(startingUnits, 10.0);
for(i=1; <=cNumberNonGaiaPlayers)
{
vector TCLocation = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TownCenterID, i));
rmPlaceObjectDefAtLoc(startingUnits, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation)));
}
rmSetStatusText("",0.50);//读取地图进度条
rmSetStatusText("",1.00);//读取地图进度条
} //END
include "mercenaries.xs"; include "ypAsianInclude.xs"; include "ypKOTHInclude.xs"; void main(void) { // ---------------------------------------- Map Info ------------------------------------------- int playerTilesX=13200; //设定地图X大小 int playerTilesZ=13200; //设定地图Z大小(帝国3的Y是高度,Z才是我们平常所用到的Y) //如果玩家大于4将playerTilesX与playerTilesZ改为11500(同一个值的int只能出现1次,当你需要修改数值的时候,不能再加入int) if (cNumberNonGaiaPlayers >4){ playerTilesX=11500; playerTilesZ=11500;} if (cNumberNonGaiaPlayers >6){ playerTilesX=10500; playerTilesZ=10500;} //Modify Map X&Z Size of 6,7,8 Player int SizeX = 2*sqrt(cNumberNonGaiaPlayers*playerTilesX); int SizeZ = 2*sqrt(cNumberNonGaiaPlayers*playerTilesZ); string MapTerrain ="Carolinas\ground_marsh3_car"; //<-------- 地图地形,自己参照剧情编辑器 <-------- string MapLighting ="319a_Snow"; //<-------- 照明,自己参照剧情编辑器 <-------- string PlayerTerrain ="Carolinas\ground_marsh1_car"; //<--------- 玩家范围地形 <--------- //设定地图XZ大小,分别调用上面用int定义的SizeX与SizeZ,即为rmSetMapSize(13200,13200);如果玩家大于4将改为11500 rmSetMapSize(SizeX, SizeZ); rmSetMapElevationParameters(cElevTurbulence, 0.15, 2.5, 0.35, 3.0); // type, frequency, octaves, persistence, variation rmSetMapElevationHeightBlend(1.0); //地形初始化,设定地图初始地形,调用上面用string定义MapTerrain,即为"Carolinas\ground_marsh3_car"; rmTerrainInitialize(MapTerrain,6); //设定照明,调用上面用string定义MapLighting,即为"319a_Snow" rmSetLightingSet(MapLighting); rmSetGlobalRain(0.9); //设定下雨 chooseMercs(); rmSetMapType("yucatan"); rmSetMapType("water"); rmSetMapType("default"); //设定地图类型,地图类型影响到宝藏 rmSetMapType("land"); rmSetMapType("bayou"); rmSetSeaLevel(0); // this is height of river surface compared to surrounding land. River depth is in the river XML. rmSetStatusText("",0.01);//读取地图进度条 rmPlacePlayersCircular(0.35, 0.35, 0.0); //圆形放置玩家 int RiverRadius = 4.5; int RiverRadius2 = 8.5; if(cNumberNonGaiaPlayers>=3) {RiverRadius = 5.4; RiverRadius2 = 10.2;} if(cNumberNonGaiaPlayers>=4) {RiverRadius = 6.2; RiverRadius2 = 11.7;} if(cNumberNonGaiaPlayers>=5) {RiverRadius = 6.8; RiverRadius2 = 12.8;} if(cNumberNonGaiaPlayers>=6) {RiverRadius = 7.4; RiverRadius2 = 14.0;} if(cNumberNonGaiaPlayers>=7) {RiverRadius = 8.0; RiverRadius2 = 15.2;} if(cNumberNonGaiaPlayers>=8) {RiverRadius = 8.5; RiverRadius2 = 16.2;} rmSetStatusText("",0.08); // ---------------------------------------------------------------- River 1 ------------------------------------------------------------------ string RiverType = "Northwest Territory Water"; int RiverID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius, RiverRadius); rmRiverAddWaypoint(RiverID, 0.500, 0.518 ); rmRiverAddWaypoint(RiverID, 0.478, 0.520 ); rmRiverAddWaypoint(RiverID, 0.450, 0.525 ); rmRiverAddWaypoint(RiverID, 0.420, 0.528 ); rmRiverAddWaypoint(RiverID, 0.400, 0.530 ); rmRiverAddWaypoint(RiverID, 0.380, 0.540 ); rmRiverAddWaypoint(RiverID, 0.330, 0.565 ); rmRiverAddWaypoint(RiverID, 0.300, 0.580 ); rmRiverAddWaypoint(RiverID, 0.280, 0.590 ); rmRiverAddWaypoint(RiverID, 0.260, 0.600 ); rmRiverAddWaypoint(RiverID, 0.240, 0.620 ); rmRiverAddWaypoint(RiverID, 0.210, 0.640 ); rmRiverAddWaypoint(RiverID, 0.200, 0.655 ); rmRiverAddWaypoint(RiverID, 0.180, 0.680 ); rmRiverAddWaypoint(RiverID, 0.170, 0.700 ); rmRiverAddWaypoint(RiverID, 0.160, 0.730 ); // rmRiverAddWaypoint(RiverID, 0.140, 0.725 ); rmRiverAddWaypoint(RiverID, 0.130, 0.720 ); rmRiverAddWaypoint(RiverID, 0.125, 0.670 ); rmRiverAddWaypoint(RiverID, 0.120, 0.650 ); rmRiverAddWaypoint(RiverID, 0.190, 0.625 ); rmRiverAddWaypoint(RiverID, 0.195, 0.610 ); rmRiverAddWaypoint(RiverID, 0.125, 0.600 ); rmRiverAddWaypoint(RiverID, 0.128, 0.560 ); rmRiverAddWaypoint(RiverID, 0.129, 0.550 ); rmRiverAddWaypoint(RiverID, 0.133, 0.533 ); rmRiverAddWaypoint(RiverID, 0.139, 0.520 ); rmRiverAddWaypoint(RiverID, 0.140, 0.500 ); rmRiverAddWaypoint(RiverID, 0.145, 0.480 ); rmRiverAddWaypoint(RiverID, 0.150, 0.461 ); rmRiverAddWaypoint(RiverID, 0.160, 0.480 ); rmRiverAddWaypoint(RiverID, 0.175, 0.430 ); rmRiverAddWaypoint(RiverID, 0.195, 0.400 ); rmRiverAddWaypoint(RiverID, 0.218, 0.370 ); rmRiverAddWaypoint(RiverID, 0.235, 0.360 ); rmRiverAddWaypoint(RiverID, 0.245, 0.350 ); rmRiverAddWaypoint(RiverID, 0.265, 0.340 ); rmRiverAddWaypoint(RiverID, 0.290, 0.310 ); rmRiverAddWaypoint(RiverID, 0.300, 0.305 ); rmRiverAddWaypoint(RiverID, 0.330, 0.288 ); rmRiverAddWaypoint(RiverID, 0.300, 0.305 ); rmRiverAddWaypoint(RiverID, 0.340, 0.275 ); rmRiverAddWaypoint(RiverID, 0.355, 0.270 ); rmRiverAddWaypoint(RiverID, 0.370, 0.265 ); rmRiverAddWaypoint(RiverID, 0.380, 0.260 ); rmRiverAddWaypoint(RiverID, 0.400, 0.265 ); rmRiverAddWaypoint(RiverID, 0.420, 0.255 ); rmRiverAddWaypoint(RiverID, 0.445, 0.250 ); rmRiverAddWaypoint(RiverID, 0.450, 0.249 ); rmRiverAddWaypoint(RiverID, 0.480, 0.248 ); rmRiverAddWaypoint(RiverID, 0.500, 0.247 ); rmRiverAddWaypoint(RiverID, 0.520, 0.249 ); rmRiverAddWaypoint(RiverID, 0.530, 0.250 ); rmRiverAddWaypoint(RiverID, 0.550, 0.255 ); rmRiverAddWaypoint(RiverID, 0.560, 0.257 ); rmRiverAddWaypoint(RiverID, 0.570, 0.261 ); rmRiverAddWaypoint(RiverID, 0.590, 0.263 ); rmRiverAddWaypoint(RiverID, 0.600, 0.267 ); rmRiverAddWaypoint(RiverID, 0.620, 0.270 ); rmRiverAddWaypoint(RiverID, 0.630, 0.275 ); rmRiverAddWaypoint(RiverID, 0.650, 0.278 ); rmRiverAddWaypoint(RiverID, 0.680, 0.288 ); rmRiverAddWaypoint(RiverID, 0.690, 0.300 ); rmRiverAddWaypoint(RiverID, 0.700, 0.305 ); rmRiverAddWaypoint(RiverID, 0.730, 0.320 ); rmRiverAddWaypoint(RiverID, 0.740, 0.333 ); rmRiverAddWaypoint(RiverID, 0.750, 0.345 ); rmRiverAddWaypoint(RiverID, 0.760, 0.355 ); rmRiverAddWaypoint(RiverID, 0.770, 0.365 ); rmRiverAddWaypoint(RiverID, 0.780, 0.375 ); rmRiverAddWaypoint(RiverID, 0.790, 0.385 ); rmRiverAddWaypoint(RiverID, 0.800, 0.390 ); rmRiverAddWaypoint(RiverID, 0.810, 0.405 ); rmRiverAddWaypoint(RiverID, 0.820, 0.420 ); rmRiverAddWaypoint(RiverID, 0.830, 0.435 ); rmRiverAddWaypoint(RiverID, 0.840, 0.450 ); rmRiverAddWaypoint(RiverID, 0.850, 0.460 ); rmRiverAddWaypoint(RiverID, 0.855, 0.500 ); rmRiverAddWaypoint(RiverID, 0.860, 0.510 ); rmRiverAddWaypoint(RiverID, 0.870, 0.520 ); rmRiverAddWaypoint(RiverID, 0.875, 0.530 ); rmRiverAddWaypoint(RiverID, 0.878, 0.540 ); rmRiverAddWaypoint(RiverID, 0.880, 0.550 ); rmRiverAddWaypoint(RiverID, 0.881, 0.560 ); rmRiverAddWaypoint(RiverID, 0.882, 0.570 ); rmRiverAddWaypoint(RiverID, 0.880, 0.600 ); rmRiverAddWaypoint(RiverID, 0.878, 0.620 ); rmRiverAddWaypoint(RiverID, 0.875, 0.640 ); rmRiverAddWaypoint(RiverID, 0.874, 0.660 ); rmRiverAddWaypoint(RiverID, 0.871, 0.680 ); rmRiverAddWaypoint(RiverID, 0.870, 0.700 ); rmRiverAddWaypoint(RiverID, 0.860, 0.730 ); rmRiverAddWaypoint(RiverID, 0.850, 0.740 ); rmRiverAddWaypoint(RiverID, 0.834, 0.730 );/*rmRiverAddWaypoint(RiverID, 0.834, 0.730 );*/ rmRiverAddWaypoint(RiverID, 0.820, 0.700 );/*rmRiverAddWaypoint(RiverID, 0.829, 0.700 );*/ rmRiverAddWaypoint(RiverID, 0.815, 0.670 );/*rmRiverAddWaypoint(RiverID, 0.820, 0.670 );*/ rmRiverAddWaypoint(RiverID, 0.790, 0.660 ); rmRiverAddWaypoint(RiverID, 0.780, 0.650 ); rmRiverAddWaypoint(RiverID, 0.760, 0.640 ); rmRiverAddWaypoint(RiverID, 0.750, 0.620 ); rmRiverAddWaypoint(RiverID, 0.738, 0.600 ); rmRiverAddWaypoint(RiverID, 0.720, 0.580 ); rmRiverAddWaypoint(RiverID, 0.700, 0.570 ); rmRiverAddWaypoint(RiverID, 0.680, 0.565 ); rmRiverAddWaypoint(RiverID, 0.670, 0.560 ); rmRiverAddWaypoint(RiverID, 0.660, 0.555 ); rmRiverAddWaypoint(RiverID, 0.650, 0.550 ); rmRiverAddWaypoint(RiverID, 0.640, 0.550 ); rmRiverAddWaypoint(RiverID, 0.630, 0.545 ); rmRiverAddWaypoint(RiverID, 0.620, 0.540 ); rmRiverAddWaypoint(RiverID, 0.610, 0.535 ); rmRiverAddWaypoint(RiverID, 0.600, 0.530 ); rmRiverAddWaypoint(RiverID, 0.580, 0.528 ); rmRiverAddWaypoint(RiverID, 0.560, 0.526 ); rmRiverAddWaypoint(RiverID, 0.550, 0.525 ); rmRiverAddWaypoint(RiverID, 0.530, 0.522 ); rmRiverAddWaypoint(RiverID, 0.520, 0.520 ); rmRiverAddWaypoint(RiverID, 0.510, 0.519 ); rmRiverAddWaypoint(RiverID, 0.500, 0.518 ); rmRiverSetBankNoiseParams(RiverID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(RiverID); rmAddAreaToClass(RiverID,rmClassID("Lake")); // ---------------------------------------------------------------- River 2 ------------------------------------------------------------------ //这里说一下,int定义的数值是可以用加法的,所以这里半径等于8.5+2=10.5,哪里来的8.5?自己往上面搜索RiverRadius2 int River2ID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius2+2, RiverRadius2+2); rmRiverAddWaypoint(River2ID, 0.18, 0.60 ); rmRiverAddWaypoint(River2ID, 0.21, 0.50 ); rmRiverAddWaypoint(River2ID, 0.32, 0.32 ); rmRiverAddWaypoint(River2ID, 0.50, 0.31 ); rmRiverAddWaypoint(River2ID, 0.60, 0.32 ); rmRiverAddWaypoint(River2ID, 0.70, 0.38 ); rmRiverAddWaypoint(River2ID, 0.80, 0.50 ); rmRiverAddWaypoint(River2ID, 0.84, 0.62 ); rmRiverAddWaypoint(River2ID, 0.77, 0.53 ); rmRiverAddWaypoint(River2ID, 0.63, 0.47 ); rmRiverAddWaypoint(River2ID, 0.53, 0.48 ); rmRiverAddWaypoint(River2ID, 0.45, 0.45 ); rmRiverAddWaypoint(River2ID, 0.33, 0.50 ); rmRiverAddWaypoint(River2ID, 0.18, 0.60 ); rmRiverAddWaypoint(River2ID, 0.38, 0.38 ); rmRiverAddWaypoint(River2ID, 0.64, 0.42 ); rmRiverSetBankNoiseParams(River2ID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(River2ID); // ------------------------------------------------------------------------------------------------------------------------------------------- rmSetStatusText("",0.12); // ---------------------------------------------------------------- River 3 ------------------------------------------------------------------ int River3ID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius, RiverRadius); rmRiverAddWaypoint(River3ID, 0.84, 0.62 ); rmRiverAddWaypoint(River3ID, 0.795, 0.675 ); rmRiverAddWaypoint(River3ID, 0.87, 0.68 ); rmRiverSetBankNoiseParams(River2ID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(River3ID); int River4ID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius, RiverRadius); rmRiverAddWaypoint(River4ID, 0.18, 0.63 ); rmRiverAddWaypoint(River4ID, 0.120, 0.635 ); rmRiverAddWaypoint(River4ID, 0.180, 0.63 ); rmRiverAddWaypoint(River4ID, 0.170, 0.67 ); rmRiverSetBankNoiseParams(River4ID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(River4ID); // ------------------------------------------------------------------------------------------------------------------------------------------- //玩家范围 float AreaSizePlayer = rmAreaTilesToFraction(700); for(i=1; <=cNumberNonGaiaPlayers) { int id=rmCreateArea("Player"+i); rmSetPlayerArea(i, id); rmSetAreaWarnFailure(id, false); rmSetAreaSize(id, AreaSizePlayer, AreaSizePlayer); rmSetAreaLocPlayer(id, i); rmSetAreaCoherence(id, 0.85); rmSetAreaSmoothDistance(id, 2); rmSetAreaMinBlobs(id, 1); rmSetAreaMaxBlobs(id, 1); rmSetAreaTerrainType(id,PlayerTerrain); rmBuildArea(id); } //定义城镇中心 int TownCenterID = rmCreateObjectDef("player TC"); if (rmGetNomadStart()) { rmAddObjectDefItem(TownCenterID, "CoveredWagon", 1, 0.0); } else { rmAddObjectDefItem(TownCenterID, "TownCenter", 1, 0); } rmSetObjectDefMinDistance(TownCenterID, 0.0); rmSetObjectDefMaxDistance(TownCenterID, 20.0); for(i=1; <=cNumberNonGaiaPlayers) { rmPlaceObjectDefAtLoc(TownCenterID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i)); } //定义起始单位(civs.xml定义那些开局单位) int startingUnits = rmCreateStartingUnitsObjectDef(5.0); rmSetObjectDefMinDistance(startingUnits, 6.0); rmSetObjectDefMaxDistance(startingUnits, 10.0); for(i=1; <=cNumberNonGaiaPlayers) { vector TCLocation = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TownCenterID, i)); rmPlaceObjectDefAtLoc(startingUnits, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); } rmSetStatusText("",0.50);//读取地图进度条 rmSetStatusText("",1.00);//读取地图进度条 } //END
include "mercenaries.xs"; include "ypAsianInclude.xs"; include "ypKOTHInclude.xs"; void main(void) { // ---------------------------------------- Map Info ------------------------------------------- int playerTilesX=13200; //设定地图X大小 int playerTilesZ=13200; //设定地图Z大小(帝国3的Y是高度,Z才是我们平常所用到的Y) //如果玩家大于4将playerTilesX与playerTilesZ改为11500(同一个值的int只能出现1次,当你需要修改数值的时候,不能再加入int) if (cNumberNonGaiaPlayers >4){ playerTilesX=11500; playerTilesZ=11500;} if (cNumberNonGaiaPlayers >6){ playerTilesX=10500; playerTilesZ=10500;} //Modify Map X&Z Size of 6,7,8 Player int SizeX = 2*sqrt(cNumberNonGaiaPlayers*playerTilesX); int SizeZ = 2*sqrt(cNumberNonGaiaPlayers*playerTilesZ); string MapTerrain ="Carolinas\ground_marsh3_car"; //<-------- 地图地形,自己参照剧情编辑器 <-------- string MapLighting ="319a_Snow"; //<-------- 照明,自己参照剧情编辑器 <-------- string PlayerTerrain ="Carolinas\ground_marsh1_car"; //<--------- 玩家范围地形 <--------- //设定地图XZ大小,分别调用上面用int定义的SizeX与SizeZ,即为rmSetMapSize(13200,13200);如果玩家大于4将改为11500 rmSetMapSize(SizeX, SizeZ); rmSetMapElevationParameters(cElevTurbulence, 0.15, 2.5, 0.35, 3.0); // type, frequency, octaves, persistence, variation rmSetMapElevationHeightBlend(1.0); //地形初始化,设定地图初始地形,调用上面用string定义MapTerrain,即为"Carolinas\ground_marsh3_car"; rmTerrainInitialize(MapTerrain,6); //设定照明,调用上面用string定义MapLighting,即为"319a_Snow" rmSetLightingSet(MapLighting); rmSetGlobalRain(0.9); //设定下雨 chooseMercs(); rmSetMapType("yucatan"); rmSetMapType("water"); rmSetMapType("default"); //设定地图类型,地图类型影响到宝藏 rmSetMapType("land"); rmSetMapType("bayou"); rmSetSeaLevel(0); // this is height of river surface compared to surrounding land. River depth is in the river XML. rmSetStatusText("",0.01);//读取地图进度条 int classStartingResource = rmDefineClass("startingResource"); int PlayerHerd2Class = rmDefineClass("PlayerHerd2C"); int classGold = rmDefineClass("Gold"); int avoidGold = rmCreateClassDistanceConstraint ("avoid gold", rmClassID("Gold"), 50.0); int avoidPlayerHerd2Far = rmCreateClassDistanceConstraint("avoid Player Herd2 far", rmClassID("PlayerHerd2C"), 52.0); int avoidStartingResources = rmCreateClassDistanceConstraint("start resources avoid each other2", rmClassID("startingResource"), 4.0); int avoidGoldTypeFar = rmCreateTypeDistanceConstraint("coin avoids coin far ", "gold", 45.0); int avoidHerdTypeFar = rmCreateTypeDistanceConstraint("herd avoids herd far", "herd", 45.0); int avoidTreeType = rmCreateTypeDistanceConstraint("Tree avoids Tree ", "Tree", 25.0); //设定与带有abstractFish标签的单位最小间隔距离30 int avoidFish = rmCreateTypeDistanceConstraint("FishToFish", "abstractFish", 30.0); //设定与陆地最小间隔距离9 int avoidFishLand = rmCreateTerrainDistanceConstraint("FishTOLand", "land", true, 9.0); int avoidLand = rmCreateTerrainDistanceConstraint("ship avoid land", "land", true, 15.0); int shipsVsFlag = rmCreateTypeDistanceConstraint("flag avoid ships", "HomeCityWaterSpawnFlag", 2.0); int flagLand = rmCreateTerrainDistanceConstraint("flag vs land", "land", true, 16.0); int flagVsFlag = rmCreateTypeDistanceConstraint("flag avoid same", "HomeCityWaterSpawnFlag", 8.0); int RiverRadius = 4.5; int RiverRadius2 = 8.5; if(cNumberNonGaiaPlayers>=3) {RiverRadius = 5.4; RiverRadius2 = 10.2;} if(cNumberNonGaiaPlayers>=4) {RiverRadius = 6.2; RiverRadius2 = 11.7;} if(cNumberNonGaiaPlayers>=5) {RiverRadius = 6.8; RiverRadius2 = 12.8;} if(cNumberNonGaiaPlayers>=6) {RiverRadius = 7.4; RiverRadius2 = 14.0;} if(cNumberNonGaiaPlayers>=7) {RiverRadius = 8.0; RiverRadius2 = 15.2;} if(cNumberNonGaiaPlayers>=8) {RiverRadius = 8.5; RiverRadius2 = 16.2;} rmSetStatusText("",0.08); // ---------------------------------------------------------------- River 1 ------------------------------------------------------------------ string RiverType = "Northwest Territory Water"; int RiverID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius, RiverRadius); rmRiverAddWaypoint(RiverID, 0.500, 0.518 ); rmRiverAddWaypoint(RiverID, 0.478, 0.520 ); rmRiverAddWaypoint(RiverID, 0.450, 0.525 ); rmRiverAddWaypoint(RiverID, 0.420, 0.528 ); rmRiverAddWaypoint(RiverID, 0.400, 0.530 ); rmRiverAddWaypoint(RiverID, 0.380, 0.540 ); rmRiverAddWaypoint(RiverID, 0.330, 0.565 ); rmRiverAddWaypoint(RiverID, 0.300, 0.580 ); rmRiverAddWaypoint(RiverID, 0.280, 0.590 ); rmRiverAddWaypoint(RiverID, 0.260, 0.600 ); rmRiverAddWaypoint(RiverID, 0.240, 0.620 ); rmRiverAddWaypoint(RiverID, 0.210, 0.640 ); rmRiverAddWaypoint(RiverID, 0.200, 0.655 ); rmRiverAddWaypoint(RiverID, 0.180, 0.680 ); rmRiverAddWaypoint(RiverID, 0.170, 0.700 ); rmRiverAddWaypoint(RiverID, 0.160, 0.730 ); // rmRiverAddWaypoint(RiverID, 0.140, 0.725 ); rmRiverAddWaypoint(RiverID, 0.130, 0.720 ); rmRiverAddWaypoint(RiverID, 0.125, 0.670 ); rmRiverAddWaypoint(RiverID, 0.120, 0.650 ); rmRiverAddWaypoint(RiverID, 0.190, 0.625 ); rmRiverAddWaypoint(RiverID, 0.195, 0.610 ); rmRiverAddWaypoint(RiverID, 0.125, 0.600 ); rmRiverAddWaypoint(RiverID, 0.128, 0.560 ); rmRiverAddWaypoint(RiverID, 0.129, 0.550 ); rmRiverAddWaypoint(RiverID, 0.133, 0.533 ); rmRiverAddWaypoint(RiverID, 0.139, 0.520 ); rmRiverAddWaypoint(RiverID, 0.140, 0.500 ); rmRiverAddWaypoint(RiverID, 0.145, 0.480 ); rmRiverAddWaypoint(RiverID, 0.150, 0.461 ); rmRiverAddWaypoint(RiverID, 0.160, 0.480 ); rmRiverAddWaypoint(RiverID, 0.175, 0.430 ); rmRiverAddWaypoint(RiverID, 0.195, 0.400 ); rmRiverAddWaypoint(RiverID, 0.218, 0.370 ); rmRiverAddWaypoint(RiverID, 0.235, 0.360 ); rmRiverAddWaypoint(RiverID, 0.245, 0.350 ); rmRiverAddWaypoint(RiverID, 0.265, 0.340 ); rmRiverAddWaypoint(RiverID, 0.290, 0.310 ); rmRiverAddWaypoint(RiverID, 0.300, 0.305 ); rmRiverAddWaypoint(RiverID, 0.330, 0.288 ); rmRiverAddWaypoint(RiverID, 0.300, 0.305 ); rmRiverAddWaypoint(RiverID, 0.340, 0.275 ); rmRiverAddWaypoint(RiverID, 0.355, 0.270 ); rmRiverAddWaypoint(RiverID, 0.370, 0.265 ); rmRiverAddWaypoint(RiverID, 0.380, 0.260 ); rmRiverAddWaypoint(RiverID, 0.400, 0.265 ); rmRiverAddWaypoint(RiverID, 0.420, 0.255 ); rmRiverAddWaypoint(RiverID, 0.445, 0.250 ); rmRiverAddWaypoint(RiverID, 0.450, 0.249 ); rmRiverAddWaypoint(RiverID, 0.480, 0.248 ); rmRiverAddWaypoint(RiverID, 0.500, 0.247 ); rmRiverAddWaypoint(RiverID, 0.520, 0.249 ); rmRiverAddWaypoint(RiverID, 0.530, 0.250 ); rmRiverAddWaypoint(RiverID, 0.550, 0.255 ); rmRiverAddWaypoint(RiverID, 0.560, 0.257 ); rmRiverAddWaypoint(RiverID, 0.570, 0.261 ); rmRiverAddWaypoint(RiverID, 0.590, 0.263 ); rmRiverAddWaypoint(RiverID, 0.600, 0.267 ); rmRiverAddWaypoint(RiverID, 0.620, 0.270 ); rmRiverAddWaypoint(RiverID, 0.630, 0.275 ); rmRiverAddWaypoint(RiverID, 0.650, 0.278 ); rmRiverAddWaypoint(RiverID, 0.680, 0.288 ); rmRiverAddWaypoint(RiverID, 0.690, 0.300 ); rmRiverAddWaypoint(RiverID, 0.700, 0.305 ); rmRiverAddWaypoint(RiverID, 0.730, 0.320 ); rmRiverAddWaypoint(RiverID, 0.740, 0.333 ); rmRiverAddWaypoint(RiverID, 0.750, 0.345 ); rmRiverAddWaypoint(RiverID, 0.760, 0.355 ); rmRiverAddWaypoint(RiverID, 0.770, 0.365 ); rmRiverAddWaypoint(RiverID, 0.780, 0.375 ); rmRiverAddWaypoint(RiverID, 0.790, 0.385 ); rmRiverAddWaypoint(RiverID, 0.800, 0.390 ); rmRiverAddWaypoint(RiverID, 0.810, 0.405 ); rmRiverAddWaypoint(RiverID, 0.820, 0.420 ); rmRiverAddWaypoint(RiverID, 0.830, 0.435 ); rmRiverAddWaypoint(RiverID, 0.840, 0.450 ); rmRiverAddWaypoint(RiverID, 0.850, 0.460 ); rmRiverAddWaypoint(RiverID, 0.855, 0.500 ); rmRiverAddWaypoint(RiverID, 0.860, 0.510 ); rmRiverAddWaypoint(RiverID, 0.870, 0.520 ); rmRiverAddWaypoint(RiverID, 0.875, 0.530 ); rmRiverAddWaypoint(RiverID, 0.878, 0.540 ); rmRiverAddWaypoint(RiverID, 0.880, 0.550 ); rmRiverAddWaypoint(RiverID, 0.881, 0.560 ); rmRiverAddWaypoint(RiverID, 0.882, 0.570 ); rmRiverAddWaypoint(RiverID, 0.880, 0.600 ); rmRiverAddWaypoint(RiverID, 0.878, 0.620 ); rmRiverAddWaypoint(RiverID, 0.875, 0.640 ); rmRiverAddWaypoint(RiverID, 0.874, 0.660 ); rmRiverAddWaypoint(RiverID, 0.871, 0.680 ); rmRiverAddWaypoint(RiverID, 0.870, 0.700 ); rmRiverAddWaypoint(RiverID, 0.860, 0.730 ); rmRiverAddWaypoint(RiverID, 0.850, 0.740 ); rmRiverAddWaypoint(RiverID, 0.834, 0.730 );/*rmRiverAddWaypoint(RiverID, 0.834, 0.730 );*/ rmRiverAddWaypoint(RiverID, 0.820, 0.700 );/*rmRiverAddWaypoint(RiverID, 0.829, 0.700 );*/ rmRiverAddWaypoint(RiverID, 0.815, 0.670 );/*rmRiverAddWaypoint(RiverID, 0.820, 0.670 );*/ rmRiverAddWaypoint(RiverID, 0.790, 0.660 ); rmRiverAddWaypoint(RiverID, 0.780, 0.650 ); rmRiverAddWaypoint(RiverID, 0.760, 0.640 ); rmRiverAddWaypoint(RiverID, 0.750, 0.620 ); rmRiverAddWaypoint(RiverID, 0.738, 0.600 ); rmRiverAddWaypoint(RiverID, 0.720, 0.580 ); rmRiverAddWaypoint(RiverID, 0.700, 0.570 ); rmRiverAddWaypoint(RiverID, 0.680, 0.565 ); rmRiverAddWaypoint(RiverID, 0.670, 0.560 ); rmRiverAddWaypoint(RiverID, 0.660, 0.555 ); rmRiverAddWaypoint(RiverID, 0.650, 0.550 ); rmRiverAddWaypoint(RiverID, 0.640, 0.550 ); rmRiverAddWaypoint(RiverID, 0.630, 0.545 ); rmRiverAddWaypoint(RiverID, 0.620, 0.540 ); rmRiverAddWaypoint(RiverID, 0.610, 0.535 ); rmRiverAddWaypoint(RiverID, 0.600, 0.530 ); rmRiverAddWaypoint(RiverID, 0.580, 0.528 ); rmRiverAddWaypoint(RiverID, 0.560, 0.526 ); rmRiverAddWaypoint(RiverID, 0.550, 0.525 ); rmRiverAddWaypoint(RiverID, 0.530, 0.522 ); rmRiverAddWaypoint(RiverID, 0.520, 0.520 ); rmRiverAddWaypoint(RiverID, 0.510, 0.519 ); rmRiverAddWaypoint(RiverID, 0.500, 0.518 ); rmRiverSetBankNoiseParams(RiverID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(RiverID); rmAddAreaToClass(RiverID,rmClassID("Lake")); // ---------------------------------------------------------------- River 2 ------------------------------------------------------------------ int River2ID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius2+2, RiverRadius2+2); rmRiverAddWaypoint(River2ID, 0.18, 0.60 ); rmRiverAddWaypoint(River2ID, 0.21, 0.50 ); rmRiverAddWaypoint(River2ID, 0.32, 0.32 ); rmRiverAddWaypoint(River2ID, 0.50, 0.31 ); rmRiverAddWaypoint(River2ID, 0.60, 0.32 ); rmRiverAddWaypoint(River2ID, 0.70, 0.38 ); rmRiverAddWaypoint(River2ID, 0.80, 0.50 ); rmRiverAddWaypoint(River2ID, 0.84, 0.62 ); rmRiverAddWaypoint(River2ID, 0.77, 0.53 ); rmRiverAddWaypoint(River2ID, 0.63, 0.47 ); rmRiverAddWaypoint(River2ID, 0.53, 0.48 ); rmRiverAddWaypoint(River2ID, 0.45, 0.45 ); rmRiverAddWaypoint(River2ID, 0.33, 0.50 ); rmRiverAddWaypoint(River2ID, 0.18, 0.60 ); rmRiverAddWaypoint(River2ID, 0.38, 0.38 ); rmRiverAddWaypoint(River2ID, 0.64, 0.42 ); rmRiverSetBankNoiseParams(River2ID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(River2ID); // ------------------------------------------------------------------------------------------------------------------------------------------- rmSetStatusText("",0.12); // ---------------------------------------------------------------- River 3 ------------------------------------------------------------------ int River3ID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius, RiverRadius); rmRiverAddWaypoint(River3ID, 0.84, 0.62 ); rmRiverAddWaypoint(River3ID, 0.795, 0.675 ); rmRiverAddWaypoint(River3ID, 0.87, 0.68 ); rmRiverSetBankNoiseParams(River2ID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(River3ID); int River4ID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius, RiverRadius); rmRiverAddWaypoint(River4ID, 0.18, 0.63 ); rmRiverAddWaypoint(River4ID, 0.120, 0.635 ); rmRiverAddWaypoint(River4ID, 0.180, 0.63 ); rmRiverAddWaypoint(River4ID, 0.170, 0.67 ); rmRiverSetBankNoiseParams(River4ID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(River4ID); // ------------------------------------------------------------------------------------------------------------------------------------------- rmPlacePlayersCircular(0.35, 0.35, 0.0); //圆形放置玩家 //玩家范围 float AreaSizePlayer = rmAreaTilesToFraction(700); for(i=1; <=cNumberNonGaiaPlayers) { int id=rmCreateArea("Player"+i); rmSetPlayerArea(i, id); rmSetAreaWarnFailure(id, false); rmSetAreaSize(id, AreaSizePlayer, AreaSizePlayer); rmSetAreaLocPlayer(id, i); rmSetAreaCoherence(id, 0.85); rmSetAreaSmoothDistance(id, 2); rmSetAreaMinBlobs(id, 1); rmSetAreaMaxBlobs(id, 1); rmSetAreaTerrainType(id,PlayerTerrain); rmBuildArea(id); } //定义城镇中心 int TownCenterID = rmCreateObjectDef("player TC"); if (rmGetNomadStart()) { rmAddObjectDefItem(TownCenterID, "CoveredWagon", 1, 0.0); } else { rmAddObjectDefItem(TownCenterID, "TownCenter", 1, 0); } rmSetObjectDefMinDistance(TownCenterID, 0.0); rmSetObjectDefMaxDistance(TownCenterID, 20.0); for(i=1; <=cNumberNonGaiaPlayers) { rmPlaceObjectDefAtLoc(TownCenterID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i)); } //定义起始单位(civs.xml定义那些开局单位) int startingUnits = rmCreateStartingUnitsObjectDef(5.0); rmSetObjectDefMinDistance(startingUnits, 6.0); rmSetObjectDefMaxDistance(startingUnits, 10.0); int playerherdID = rmCreateObjectDef("starting herd"); rmAddObjectDefItem(playerherdID, "ypWildElephant", 10, 6.0); rmSetObjectDefMinDistance(playerherdID, 8.0); rmSetObjectDefMaxDistance(playerherdID, 12.0); rmSetObjectDefCreateHerd(playerherdID, true); rmAddObjectDefToClass(playerherdID, classStartingResource); rmAddObjectDefConstraint(playerherdID, avoidStartingResources); int playergoldID = rmCreateObjectDef("player mine"); rmAddObjectDefItem(playergoldID, "Minegold", 1, 6); rmSetObjectDefMinDistance(playergoldID, 18.0); rmSetObjectDefMaxDistance(playergoldID, 22.0); rmAddObjectDefToClass(playergoldID, rmDefineClass("startingResource")); rmAddObjectDefToClass(playergoldID, classGold); rmAddObjectDefConstraint(playergoldID, avoidStartingResources); string PlayerTreeType ="TreeRedwood"; int PlayerTreeCount = 8; int playerTree1ID = rmCreateObjectDef("player trees"); rmAddObjectDefItem(playerTree1ID, PlayerTreeType, PlayerTreeCount, 8.0); rmSetObjectDefMinDistance(playerTree1ID, 6); rmSetObjectDefMaxDistance(playerTree1ID, 12); rmAddObjectDefToClass(playerTree1ID, classStartingResource); rmAddObjectDefConstraint(playerTree1ID, avoidStartingResources); int playerBerryID=rmCreateObjectDef("player berries"); rmAddObjectDefItem(playerBerryID, "BerryBush", rmRandInt(3,4), 3.0); rmSetObjectDefMinDistance(playerBerryID, 12); rmSetObjectDefMaxDistance(playerBerryID, 14); rmAddObjectDefToClass(playerBerryID, classStartingResource); rmAddObjectDefConstraint(playerBerryID, avoidStartingResources); int playerHerd2ID = rmCreateObjectDef("player Herd2"); rmAddObjectDefItem(playerHerd2ID, "Bison", rmRandInt(10,11), 10.0); rmSetObjectDefMinDistance(playerHerd2ID, 36); rmSetObjectDefMaxDistance(playerHerd2ID, 38); rmSetObjectDefCreateHerd(playerHerd2ID, true); rmAddObjectDefToClass(playerHerd2ID, PlayerHerd2Class); int playerHerd3ID = rmCreateObjectDef("player Herd3"); rmAddObjectDefItem(playerHerd3ID, "Turkey", rmRandInt(8,9), 8.0); rmSetObjectDefMinDistance(playerHerd3ID, 40); rmSetObjectDefMaxDistance(playerHerd3ID, 42); rmSetObjectDefCreateHerd(playerHerd3ID, true); rmAddObjectDefConstraint(playerHerd3ID, avoidPlayerHerd2Far); int playergold2ID = rmCreateObjectDef("player second mine"); rmAddObjectDefItem(playergold2ID, "mine", 1, 0); rmSetObjectDefMinDistance(playergold2ID, 58.0); rmSetObjectDefMaxDistance(playergold2ID, 62.0); rmAddObjectDefToClass(playergold2ID, classGold); rmAddObjectDefConstraint(playergold2ID, avoidGold); int playergold3ID = rmCreateObjectDef("player third mine"); rmAddObjectDefItem(playergold3ID, "mine", 1, 0); rmSetObjectDefMinDistance(playergold3ID, 68.0); rmSetObjectDefMaxDistance(playergold3ID, 70.0); rmAddObjectDefToClass(playergold3ID, classGold); rmAddObjectDefConstraint(playergold3ID, avoidGold); for(i=1; <=cNumberNonGaiaPlayers) { vector TCLocation = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TownCenterID, i)); rmPlaceObjectDefAtLoc(startingUnits, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playerherdID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playerTree1ID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playergoldID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playerBerryID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playerHerd2ID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playerHerd3ID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playergold2ID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playergold3ID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); } int NativeCenterID = rmCreateGrouping("Native Center ID", "native aztec village "+rmRandInt(rmRandInt(1,2),rmRandInt(3,rmRandInt(4,5)))); rmSetGroupingMinDistance(NativeCenterID, 0.0); rmSetGroupingMaxDistance(NativeCenterID, rmXFractionToMeters(0.0)); rmAddGroupingToClass(NativeCenterID, rmDefineClass("natives")); rmPlaceGroupingAtLoc(NativeCenterID, 0,0.50,0.50); int FixedGunID = rmCreateObjectDef("FixedGun"); rmAddObjectDefItem(FixedGunID, "SPCFixedGun",1,5.0); rmSetObjectDefMinDistance(FixedGunID,0.0); rmSetObjectDefMaxDistance(FixedGunID,30.0); rmPlaceObjectDefAtLoc(FixedGunID,0,0.50,0.50,1); for(i=0; <= cNumberNonGaiaPlayers*3) { int goldID = rmCreateObjectDef("gold"+i); rmAddObjectDefItem(goldID, "mine", 1, 0.0); rmSetObjectDefMinDistance(goldID, rmXFractionToMeters(0.0)); rmSetObjectDefMaxDistance(goldID, rmXFractionToMeters(0.5)); rmAddObjectDefToClass(goldID, classGold); rmAddObjectDefConstraint(goldID, avoidGoldTypeFar); rmPlaceObjectDefAtLoc(goldID, 0, 0.50, 0.50); } int CenterHerdID = rmCreateObjectDef("Center Herd2"); rmAddObjectDefItem(CenterHerdID, "BighornSheep",10, 8.0); rmSetObjectDefMinDistance(CenterHerdID, rmXFractionToMeters(0.0)); rmSetObjectDefMaxDistance(CenterHerdID, rmXFractionToMeters(0.45)); rmSetObjectDefCreateHerd(CenterHerdID, true); rmAddObjectDefConstraint(CenterHerdID, avoidHerdTypeFar); for(i=1; <= cNumberNonGaiaPlayers*3) { rmPlaceObjectDefAtLoc(CenterHerdID, 0, 0.50, 0.50); } int GreenForestTreeObjectID = rmCreateObjectDef("Object Green forest trees"); rmAddObjectDefItem(GreenForestTreeObjectID, "TreeRedwood", 8, 15); rmAddObjectDefItem(GreenForestTreeObjectID, "TreeRedwood", 3, 5); rmAddObjectDefItem(GreenForestTreeObjectID, "UnderbrushCalifornia", 3, 10); rmSetObjectDefMinDistance(GreenForestTreeObjectID, rmXFractionToMeters(0.0)); rmSetObjectDefMaxDistance(GreenForestTreeObjectID, rmXFractionToMeters(0.47)); rmAddObjectDefConstraint(GreenForestTreeObjectID, avoidTreeType); rmPlaceObjectDefAtLoc(GreenForestTreeObjectID, 0, 0.50, 0.50, cNumberNonGaiaPlayers*20); rmSetStatusText("",0.50);//读取地图进度条 int avoidNative = rmCreateClassDistanceConstraint("avoid Native", rmClassID("natives"), 52.0); int avoidGoldTypeMin = rmCreateTypeDistanceConstraint("coin avoids coin Min", "gold", 15.0); int avoidTreeTypeMin = rmCreateTypeDistanceConstraint("Tree avoids Min", "Tree", 15.0); int NativeCenter2ID = rmCreateGrouping("Native Center ID", "native aztec village "+rmRandInt(rmRandInt(1,2),rmRandInt(3,rmRandInt(4,5)))); rmSetGroupingMinDistance(NativeCenter2ID, 0.0); rmSetGroupingMaxDistance(NativeCenter2ID, rmXFractionToMeters(0.5)); rmAddGroupingToClass(NativeCenter2ID, rmDefineClass("natives")); rmAddGroupingConstraint(NativeCenter2ID, avoidNative); rmAddGroupingConstraint(NativeCenter2ID, avoidGoldTypeMin); rmAddGroupingConstraint(NativeCenter2ID, avoidTreeTypeMin); rmPlaceGroupingAtLoc(NativeCenter2ID, 0,0.50,0.50,3); int FountainID=rmCreateObjectDef("FountainOfYouth"); //青春之泉 rmAddObjectDefItem(FountainID, "SPCFountainOfYouth", 1, 0.0); rmSetObjectDefMinDistance(FountainID, 0.0); rmSetObjectDefMaxDistance(FountainID, 10); rmAddObjectDefConstraint(FountainID, avoidFishLand); rmPlaceObjectDefAtLoc(FountainID, 0, 0.50, 0.45, 1); int Fish1count = cNumberPlayers * 3; string Fish1Name = "FishMoonBass"; int Fish2count = cNumberPlayers * 3; string Fish2Name = "FishMoonBass"; int whalecount = (cNumberNonGaiaPlayers * 3) + rmRandInt(1,2); int Junkcount = cNumberPlayers; int RandomJunk = rmRandInt(0,1); //蓝色文字是海军旗帜的语句 int waterSpawnPointID = rmCreateObjectDef("Flag"); rmAddObjectDefItem(waterSpawnPointID, "HomeCityWaterSpawnFlag", 1, 0.0); rmSetObjectDefMaxDistance(waterSpawnPointID, 30); rmAddClosestPointConstraint(flagVsFlag); rmAddClosestPointConstraint(flagLand); for(i=1; <cNumberPlayers) { int ShipsID = rmCreateObjectDef("Ships"+i); //这个是两个玩家的情况下给每个玩家创建1只独木舟。 //这是一种没有出现过的if判断国家方法,总之我的语句很高级就对了。你去函数章节看下国家ID应该会明白是什么。 if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 8) { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } else if (rmGetPlayerCiv(i) == 8) { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17) { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26) { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23) { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } else { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } rmSetObjectDefMaxDistance(ShipsID, 30); rmAddClosestPointConstraint(shipsVsFlag); rmAddClosestPointConstraint(flagLand); //留意下这里的TCLocation与closestPoint,(之前已经解释过vector了,这里不再解释)一个有用vector,另一个没有使用vector,为什么TCLocation没有使用vector呢?因为在上面已经用vector定义过1次了,所以再次使用TCLocation无需加上vector,而closestPoint在此之前没有出现过就要加上vector定义。 //还有TownCenterID,这个是我设定的城镇中心,别的地图可能不是这样设定,它可能是TCID(实际上什么可能都有,反正是随便定义的),如果复制到别的地图里面去,找不到TownCenterID这个定义,那么恭喜你,你的地图打不开了,(解决办法是把TownCenterID改成那幅地图的放置城镇中心设定的定义)。这两个地方非常容易出错,不容易察觉,所以在此提醒你;如果你碰上复制后打不开地图的情况,你却怎样找也找不到原因,我保证你肯定想砸电脑。 TCLocation = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TownCenterID, i)); vector closestPoint = rmFindClosestPointVector(TCLocation, rmXFractionToMeters(1.0)); rmPlaceObjectDefAtLoc(waterSpawnPointID, i, rmXMetersToFraction(xsVectorGetX(closestPoint)), rmZMetersToFraction(xsVectorGetZ(closestPoint))); if(cNumberNonGaiaPlayers == 2) { rmPlaceObjectDefAtLoc(ShipsID, i, rmXMetersToFraction(xsVectorGetX(closestPoint)), rmZMetersToFraction(xsVectorGetZ(closestPoint))); } } rmClearClosestPointConstraints(); rmSetStatusText("",0.80); int Fisch1=rmCreateObjectDef("Fish 1"); rmAddObjectDefItem(Fisch1, Fish1Name, 1, 0.0); rmSetObjectDefMinDistance(Fisch1, 0.3); rmSetObjectDefMaxDistance(Fisch1, rmXFractionToMeters(0.5)); rmAddObjectDefConstraint(Fisch1, avoidFish); rmAddObjectDefConstraint(Fisch1, avoidFishLand); rmPlaceObjectDefAtLoc(Fisch1, 0, 0.5, 0.5, Fish1count); int Fisch2=rmCreateObjectDef("Fish 2"); rmAddObjectDefItem(Fisch2, Fish2Name, 1, 0.0); rmSetObjectDefMinDistance(Fisch2, 0.3); rmSetObjectDefMaxDistance(Fisch2, rmXFractionToMeters(0.5)); rmAddObjectDefConstraint(Fisch2, avoidFish); rmAddObjectDefConstraint(Fisch2, avoidFishLand); rmPlaceObjectDefAtLoc(Fisch2, 0, 0.5, 0.5, Fish2count); rmSetStatusText("",1.00);//读取地图进度条 } //END
include "mercenaries.xs"; include "ypAsianInclude.xs"; include "ypKOTHInclude.xs"; void main(void) { // ---------------------------------------- Map Info ------------------------------------------- int playerTilesX=13200; //设定地图X大小 int playerTilesZ=13200; //设定地图Z大小(帝国3的Y是高度,Z才是我们平常所用到的Y) //如果玩家大于4将playerTilesX与playerTilesZ改为11500(同一个值的int只能出现1次,当你需要修改数值的时候,不能再加入int) if (cNumberNonGaiaPlayers >4){ playerTilesX=11500; playerTilesZ=11500;} if (cNumberNonGaiaPlayers >6){ playerTilesX=10500; playerTilesZ=10500;} //Modify Map X&Z Size of 6,7,8 Player int SizeX = 2*sqrt(cNumberNonGaiaPlayers*playerTilesX); int SizeZ = 2*sqrt(cNumberNonGaiaPlayers*playerTilesZ); string MapTerrain ="Carolinas\ground_marsh3_car"; //<-------- 地图地形,自己参照剧情编辑器 <-------- string MapLighting ="319a_Snow"; //<-------- 照明,自己参照剧情编辑器 <-------- string PlayerTerrain ="Carolinas\ground_marsh1_car"; //<--------- 玩家范围地形 <--------- //设定地图XZ大小,分别调用上面用int定义的SizeX与SizeZ,即为rmSetMapSize(13200,13200);如果玩家大于4将改为11500 rmSetMapSize(SizeX, SizeZ); rmSetMapElevationParameters(cElevTurbulence, 0.15, 2.5, 0.35, 3.0); // type, frequency, octaves, persistence, variation rmSetMapElevationHeightBlend(1.0); //地形初始化,设定地图初始地形,调用上面用string定义MapTerrain,即为"Carolinas\ground_marsh3_car"; rmTerrainInitialize(MapTerrain,6); //设定照明,调用上面用string定义MapLighting,即为"319a_Snow" rmSetLightingSet(MapLighting); rmSetGlobalRain(0.9); //设定下雨 chooseMercs(); rmSetMapType("yucatan"); rmSetMapType("water"); rmSetMapType("default"); //设定地图类型,地图类型影响到宝藏 rmSetMapType("land"); rmSetMapType("bayou"); rmSetSeaLevel(0); // this is height of river surface compared to surrounding land. River depth is in the river XML. rmSetStatusText("",0.01);//读取地图进度条 int classStartingResource = rmDefineClass("startingResource"); int PlayerHerd2Class = rmDefineClass("PlayerHerd2C"); int classGold = rmDefineClass("Gold"); int avoidGold = rmCreateClassDistanceConstraint ("avoid gold", rmClassID("Gold"), 50.0); int avoidPlayerHerd2Far = rmCreateClassDistanceConstraint("avoid Player Herd2 far", rmClassID("PlayerHerd2C"), 52.0); int avoidStartingResources = rmCreateClassDistanceConstraint("start resources avoid each other2", rmClassID("startingResource"), 4.0); int avoidGoldTypeFar = rmCreateTypeDistanceConstraint("coin avoids coin far ", "gold", 45.0); int avoidHerdTypeFar = rmCreateTypeDistanceConstraint("herd avoids herd far", "herd", 45.0); int avoidTreeType = rmCreateTypeDistanceConstraint("Tree avoids Tree ", "Tree", 25.0); //设定与带有abstractFish标签的单位最小间隔距离30 int avoidFish = rmCreateTypeDistanceConstraint("FishToFish", "abstractFish", 30.0); //设定与陆地最小间隔距离9 int avoidFishLand = rmCreateTerrainDistanceConstraint("FishTOLand", "land", true, 9.0); int avoidLand = rmCreateTerrainDistanceConstraint("ship avoid land", "land", true, 15.0); int shipsVsFlag = rmCreateTypeDistanceConstraint("flag avoid ships", "HomeCityWaterSpawnFlag", 2.0); int flagLand = rmCreateTerrainDistanceConstraint("flag vs land", "land", true, 16.0); int flagVsFlag = rmCreateTypeDistanceConstraint("flag avoid same", "HomeCityWaterSpawnFlag", 8.0); //与水域最小间隔距离为12 int avoidWaterMin = rmCreateTerrainDistanceConstraint("avoid Lake Min", "water", true, 12.0); //数量太多了,自己按ctrl+F往下面搜索avoidWaterMin,其实就是给每一组单位都添加了这个avoidWaterMin放置限制 int RiverRadius = 4.5; int RiverRadius2 = 8.5; if(cNumberNonGaiaPlayers>=3) {RiverRadius = 5.4; RiverRadius2 = 10.2;} if(cNumberNonGaiaPlayers>=4) {RiverRadius = 6.2; RiverRadius2 = 11.7;} if(cNumberNonGaiaPlayers>=5) {RiverRadius = 6.8; RiverRadius2 = 12.8;} if(cNumberNonGaiaPlayers>=6) {RiverRadius = 7.4; RiverRadius2 = 14.0;} if(cNumberNonGaiaPlayers>=7) {RiverRadius = 8.0; RiverRadius2 = 15.2;} if(cNumberNonGaiaPlayers>=8) {RiverRadius = 8.5; RiverRadius2 = 16.2;} rmSetStatusText("",0.08); // ---------------------------------------------------------------- River 1 ------------------------------------------------------------------ string RiverType = "Northwest Territory Water"; int RiverID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius, RiverRadius); rmRiverAddWaypoint(RiverID, 0.500, 0.518 ); rmRiverAddWaypoint(RiverID, 0.478, 0.520 ); rmRiverAddWaypoint(RiverID, 0.450, 0.525 ); rmRiverAddWaypoint(RiverID, 0.420, 0.528 ); rmRiverAddWaypoint(RiverID, 0.400, 0.530 ); rmRiverAddWaypoint(RiverID, 0.380, 0.540 ); rmRiverAddWaypoint(RiverID, 0.330, 0.565 ); rmRiverAddWaypoint(RiverID, 0.300, 0.580 ); rmRiverAddWaypoint(RiverID, 0.280, 0.590 ); rmRiverAddWaypoint(RiverID, 0.260, 0.600 ); rmRiverAddWaypoint(RiverID, 0.240, 0.620 ); rmRiverAddWaypoint(RiverID, 0.210, 0.640 ); rmRiverAddWaypoint(RiverID, 0.200, 0.655 ); rmRiverAddWaypoint(RiverID, 0.180, 0.680 ); rmRiverAddWaypoint(RiverID, 0.170, 0.700 ); rmRiverAddWaypoint(RiverID, 0.160, 0.730 ); // rmRiverAddWaypoint(RiverID, 0.140, 0.725 ); rmRiverAddWaypoint(RiverID, 0.130, 0.720 ); rmRiverAddWaypoint(RiverID, 0.125, 0.670 ); rmRiverAddWaypoint(RiverID, 0.120, 0.650 ); rmRiverAddWaypoint(RiverID, 0.190, 0.625 ); rmRiverAddWaypoint(RiverID, 0.195, 0.610 ); rmRiverAddWaypoint(RiverID, 0.125, 0.600 ); rmRiverAddWaypoint(RiverID, 0.128, 0.560 ); rmRiverAddWaypoint(RiverID, 0.129, 0.550 ); rmRiverAddWaypoint(RiverID, 0.133, 0.533 ); rmRiverAddWaypoint(RiverID, 0.139, 0.520 ); rmRiverAddWaypoint(RiverID, 0.140, 0.500 ); rmRiverAddWaypoint(RiverID, 0.145, 0.480 ); rmRiverAddWaypoint(RiverID, 0.150, 0.461 ); rmRiverAddWaypoint(RiverID, 0.160, 0.480 ); rmRiverAddWaypoint(RiverID, 0.175, 0.430 ); rmRiverAddWaypoint(RiverID, 0.195, 0.400 ); rmRiverAddWaypoint(RiverID, 0.218, 0.370 ); rmRiverAddWaypoint(RiverID, 0.235, 0.360 ); rmRiverAddWaypoint(RiverID, 0.245, 0.350 ); rmRiverAddWaypoint(RiverID, 0.265, 0.340 ); rmRiverAddWaypoint(RiverID, 0.290, 0.310 ); rmRiverAddWaypoint(RiverID, 0.300, 0.305 ); rmRiverAddWaypoint(RiverID, 0.330, 0.288 ); rmRiverAddWaypoint(RiverID, 0.300, 0.305 ); rmRiverAddWaypoint(RiverID, 0.340, 0.275 ); rmRiverAddWaypoint(RiverID, 0.355, 0.270 ); rmRiverAddWaypoint(RiverID, 0.370, 0.265 ); rmRiverAddWaypoint(RiverID, 0.380, 0.260 ); rmRiverAddWaypoint(RiverID, 0.400, 0.265 ); rmRiverAddWaypoint(RiverID, 0.420, 0.255 ); rmRiverAddWaypoint(RiverID, 0.445, 0.250 ); rmRiverAddWaypoint(RiverID, 0.450, 0.249 ); rmRiverAddWaypoint(RiverID, 0.480, 0.248 ); rmRiverAddWaypoint(RiverID, 0.500, 0.247 ); rmRiverAddWaypoint(RiverID, 0.520, 0.249 ); rmRiverAddWaypoint(RiverID, 0.530, 0.250 ); rmRiverAddWaypoint(RiverID, 0.550, 0.255 ); rmRiverAddWaypoint(RiverID, 0.560, 0.257 ); rmRiverAddWaypoint(RiverID, 0.570, 0.261 ); rmRiverAddWaypoint(RiverID, 0.590, 0.263 ); rmRiverAddWaypoint(RiverID, 0.600, 0.267 ); rmRiverAddWaypoint(RiverID, 0.620, 0.270 ); rmRiverAddWaypoint(RiverID, 0.630, 0.275 ); rmRiverAddWaypoint(RiverID, 0.650, 0.278 ); rmRiverAddWaypoint(RiverID, 0.680, 0.288 ); rmRiverAddWaypoint(RiverID, 0.690, 0.300 ); rmRiverAddWaypoint(RiverID, 0.700, 0.305 ); rmRiverAddWaypoint(RiverID, 0.730, 0.320 ); rmRiverAddWaypoint(RiverID, 0.740, 0.333 ); rmRiverAddWaypoint(RiverID, 0.750, 0.345 ); rmRiverAddWaypoint(RiverID, 0.760, 0.355 ); rmRiverAddWaypoint(RiverID, 0.770, 0.365 ); rmRiverAddWaypoint(RiverID, 0.780, 0.375 ); rmRiverAddWaypoint(RiverID, 0.790, 0.385 ); rmRiverAddWaypoint(RiverID, 0.800, 0.390 ); rmRiverAddWaypoint(RiverID, 0.810, 0.405 ); rmRiverAddWaypoint(RiverID, 0.820, 0.420 ); rmRiverAddWaypoint(RiverID, 0.830, 0.435 ); rmRiverAddWaypoint(RiverID, 0.840, 0.450 ); rmRiverAddWaypoint(RiverID, 0.850, 0.460 ); rmRiverAddWaypoint(RiverID, 0.855, 0.500 ); rmRiverAddWaypoint(RiverID, 0.860, 0.510 ); rmRiverAddWaypoint(RiverID, 0.870, 0.520 ); rmRiverAddWaypoint(RiverID, 0.875, 0.530 ); rmRiverAddWaypoint(RiverID, 0.878, 0.540 ); rmRiverAddWaypoint(RiverID, 0.880, 0.550 ); rmRiverAddWaypoint(RiverID, 0.881, 0.560 ); rmRiverAddWaypoint(RiverID, 0.882, 0.570 ); rmRiverAddWaypoint(RiverID, 0.880, 0.600 ); rmRiverAddWaypoint(RiverID, 0.878, 0.620 ); rmRiverAddWaypoint(RiverID, 0.875, 0.640 ); rmRiverAddWaypoint(RiverID, 0.874, 0.660 ); rmRiverAddWaypoint(RiverID, 0.871, 0.680 ); rmRiverAddWaypoint(RiverID, 0.870, 0.700 ); rmRiverAddWaypoint(RiverID, 0.860, 0.730 ); rmRiverAddWaypoint(RiverID, 0.850, 0.740 ); rmRiverAddWaypoint(RiverID, 0.834, 0.730 );/*rmRiverAddWaypoint(RiverID, 0.834, 0.730 );*/ rmRiverAddWaypoint(RiverID, 0.820, 0.700 );/*rmRiverAddWaypoint(RiverID, 0.829, 0.700 );*/ rmRiverAddWaypoint(RiverID, 0.815, 0.670 );/*rmRiverAddWaypoint(RiverID, 0.820, 0.670 );*/ rmRiverAddWaypoint(RiverID, 0.790, 0.660 ); rmRiverAddWaypoint(RiverID, 0.780, 0.650 ); rmRiverAddWaypoint(RiverID, 0.760, 0.640 ); rmRiverAddWaypoint(RiverID, 0.750, 0.620 ); rmRiverAddWaypoint(RiverID, 0.738, 0.600 ); rmRiverAddWaypoint(RiverID, 0.720, 0.580 ); rmRiverAddWaypoint(RiverID, 0.700, 0.570 ); rmRiverAddWaypoint(RiverID, 0.680, 0.565 ); rmRiverAddWaypoint(RiverID, 0.670, 0.560 ); rmRiverAddWaypoint(RiverID, 0.660, 0.555 ); rmRiverAddWaypoint(RiverID, 0.650, 0.550 ); rmRiverAddWaypoint(RiverID, 0.640, 0.550 ); rmRiverAddWaypoint(RiverID, 0.630, 0.545 ); rmRiverAddWaypoint(RiverID, 0.620, 0.540 ); rmRiverAddWaypoint(RiverID, 0.610, 0.535 ); rmRiverAddWaypoint(RiverID, 0.600, 0.530 ); rmRiverAddWaypoint(RiverID, 0.580, 0.528 ); rmRiverAddWaypoint(RiverID, 0.560, 0.526 ); rmRiverAddWaypoint(RiverID, 0.550, 0.525 ); rmRiverAddWaypoint(RiverID, 0.530, 0.522 ); rmRiverAddWaypoint(RiverID, 0.520, 0.520 ); rmRiverAddWaypoint(RiverID, 0.510, 0.519 ); rmRiverAddWaypoint(RiverID, 0.500, 0.518 ); rmRiverSetBankNoiseParams(RiverID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(RiverID); rmAddAreaToClass(RiverID,rmClassID("Lake")); // ---------------------------------------------------------------- River 2 ------------------------------------------------------------------ int River2ID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius2+2, RiverRadius2+2); rmRiverAddWaypoint(River2ID, 0.18, 0.60 ); rmRiverAddWaypoint(River2ID, 0.21, 0.50 ); rmRiverAddWaypoint(River2ID, 0.32, 0.32 ); rmRiverAddWaypoint(River2ID, 0.50, 0.31 ); rmRiverAddWaypoint(River2ID, 0.60, 0.32 ); rmRiverAddWaypoint(River2ID, 0.70, 0.38 ); rmRiverAddWaypoint(River2ID, 0.80, 0.50 ); rmRiverAddWaypoint(River2ID, 0.84, 0.62 ); rmRiverAddWaypoint(River2ID, 0.77, 0.53 ); rmRiverAddWaypoint(River2ID, 0.63, 0.47 ); rmRiverAddWaypoint(River2ID, 0.53, 0.48 ); rmRiverAddWaypoint(River2ID, 0.45, 0.45 ); rmRiverAddWaypoint(River2ID, 0.33, 0.50 ); rmRiverAddWaypoint(River2ID, 0.18, 0.60 ); rmRiverAddWaypoint(River2ID, 0.38, 0.38 ); rmRiverAddWaypoint(River2ID, 0.64, 0.42 ); rmRiverSetBankNoiseParams(River2ID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(River2ID); // ------------------------------------------------------------------------------------------------------------------------------------------- rmSetStatusText("",0.12); // ---------------------------------------------------------------- River 3 ------------------------------------------------------------------ int River3ID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius, RiverRadius); rmRiverAddWaypoint(River3ID, 0.84, 0.62 ); rmRiverAddWaypoint(River3ID, 0.795, 0.675 ); rmRiverAddWaypoint(River3ID, 0.87, 0.68 ); rmRiverSetBankNoiseParams(River2ID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(River3ID); int River4ID = rmRiverCreate(-1, RiverType, 1, 1, RiverRadius, RiverRadius); rmRiverAddWaypoint(River4ID, 0.18, 0.63 ); rmRiverAddWaypoint(River4ID, 0.120, 0.635 ); rmRiverAddWaypoint(River4ID, 0.180, 0.63 ); rmRiverAddWaypoint(River4ID, 0.170, 0.67 ); rmRiverSetBankNoiseParams(River4ID,0.00, 0, 0.0, 0.0, 0.0, 0.0); rmRiverBuild(River4ID); // ------------------------------------------------------------------------------------------------------------------------------------------- rmPlacePlayersCircular(0.35, 0.35, 0.0); //圆形放置玩家 //玩家范围 float AreaSizePlayer = rmAreaTilesToFraction(700); for(i=1; <=cNumberNonGaiaPlayers) { int id=rmCreateArea("Player"+i); rmSetPlayerArea(i, id); rmSetAreaWarnFailure(id, false); rmSetAreaSize(id, AreaSizePlayer, AreaSizePlayer); rmSetAreaLocPlayer(id, i); rmSetAreaCoherence(id, 0.85); rmSetAreaSmoothDistance(id, 2); rmSetAreaMinBlobs(id, 1); rmSetAreaMaxBlobs(id, 1); rmSetAreaTerrainType(id,PlayerTerrain); rmBuildArea(id); } //定义城镇中心 int TownCenterID = rmCreateObjectDef("player TC"); if (rmGetNomadStart()) { rmAddObjectDefItem(TownCenterID, "CoveredWagon", 1, 0.0); } else { rmAddObjectDefItem(TownCenterID, "TownCenter", 1, 0); } rmSetObjectDefMinDistance(TownCenterID, 0.0); rmSetObjectDefMaxDistance(TownCenterID, 20.0); for(i=1; <=cNumberNonGaiaPlayers) { rmPlaceObjectDefAtLoc(TownCenterID, i, rmPlayerLocXFraction(i), rmPlayerLocZFraction(i)); } rmAddObjectDefConstraint(TownCenterID, avoidWaterMin); //定义起始单位(civs.xml定义那些开局单位) int startingUnits = rmCreateStartingUnitsObjectDef(5.0); rmSetObjectDefMinDistance(startingUnits, 6.0); rmSetObjectDefMaxDistance(startingUnits, 10.0); rmAddObjectDefConstraint(startingUnits, avoidWaterMin); int playerherdID = rmCreateObjectDef("starting herd"); rmAddObjectDefItem(playerherdID, "ypWildElephant", 10, 6.0); rmSetObjectDefMinDistance(playerherdID, 8.0); rmSetObjectDefMaxDistance(playerherdID, 12.0); rmSetObjectDefCreateHerd(playerherdID, true); rmAddObjectDefToClass(playerherdID, classStartingResource); rmAddObjectDefConstraint(playerherdID, avoidStartingResources); rmAddObjectDefConstraint(playerherdID, avoidWaterMin); int playergoldID = rmCreateObjectDef("player mine"); rmAddObjectDefItem(playergoldID, "Minegold", 1, 6); rmSetObjectDefMinDistance(playergoldID, 18.0); rmSetObjectDefMaxDistance(playergoldID, 22.0); rmAddObjectDefToClass(playergoldID, rmDefineClass("startingResource")); rmAddObjectDefToClass(playergoldID, classGold); rmAddObjectDefConstraint(playergoldID, avoidStartingResources); rmAddObjectDefConstraint(playergoldID, avoidWaterMin); string PlayerTreeType ="TreeRedwood"; int PlayerTreeCount = 8; int playerTree1ID = rmCreateObjectDef("player trees"); rmAddObjectDefItem(playerTree1ID, PlayerTreeType, PlayerTreeCount, 8.0); rmSetObjectDefMinDistance(playerTree1ID, 6); rmSetObjectDefMaxDistance(playerTree1ID, 12); rmAddObjectDefToClass(playerTree1ID, classStartingResource); rmAddObjectDefConstraint(playerTree1ID, avoidStartingResources); rmAddObjectDefConstraint(playerTree1ID, avoidWaterMin); int playerBerryID=rmCreateObjectDef("player berries"); rmAddObjectDefItem(playerBerryID, "BerryBush", rmRandInt(3,4), 3.0); rmSetObjectDefMinDistance(playerBerryID, 12); rmSetObjectDefMaxDistance(playerBerryID, 14); rmAddObjectDefToClass(playerBerryID, classStartingResource); rmAddObjectDefConstraint(playerBerryID, avoidStartingResources); rmAddObjectDefConstraint(playerBerryID, avoidWaterMin); int playerHerd2ID = rmCreateObjectDef("player Herd2"); rmAddObjectDefItem(playerHerd2ID, "Bison", rmRandInt(10,11), 10.0); rmSetObjectDefMinDistance(playerHerd2ID, 36); rmSetObjectDefMaxDistance(playerHerd2ID, 38); rmSetObjectDefCreateHerd(playerHerd2ID, true); rmAddObjectDefToClass(playerHerd2ID, PlayerHerd2Class); rmAddObjectDefConstraint(playerHerd2ID, avoidWaterMin); int playerHerd3ID = rmCreateObjectDef("player Herd3"); rmAddObjectDefItem(playerHerd3ID, "Turkey", rmRandInt(8,9), 8.0); rmSetObjectDefMinDistance(playerHerd3ID, 40); rmSetObjectDefMaxDistance(playerHerd3ID, 42); rmSetObjectDefCreateHerd(playerHerd3ID, true); rmAddObjectDefConstraint(playerHerd3ID, avoidPlayerHerd2Far); rmAddObjectDefConstraint(playerHerd3ID, avoidWaterMin); int playergold2ID = rmCreateObjectDef("player second mine"); rmAddObjectDefItem(playergold2ID, "mine", 1, 0); rmSetObjectDefMinDistance(playergold2ID, 58.0); rmSetObjectDefMaxDistance(playergold2ID, 62.0); rmAddObjectDefToClass(playergold2ID, classGold); rmAddObjectDefConstraint(playergold2ID, avoidGold); rmAddObjectDefConstraint(playergold2ID, avoidWaterMin); int playergold3ID = rmCreateObjectDef("player third mine"); rmAddObjectDefItem(playergold3ID, "mine", 1, 0); rmSetObjectDefMinDistance(playergold3ID, 68.0); rmSetObjectDefMaxDistance(playergold3ID, 70.0); rmAddObjectDefToClass(playergold3ID, classGold); rmAddObjectDefConstraint(playergold3ID, avoidGold); rmAddObjectDefConstraint(playergold3ID, avoidWaterMin); for(i=1; <=cNumberNonGaiaPlayers) { vector TCLocation = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TownCenterID, i)); rmPlaceObjectDefAtLoc(startingUnits, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playerherdID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playerTree1ID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playergoldID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playerBerryID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playerHerd2ID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playerHerd3ID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playergold2ID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); rmPlaceObjectDefAtLoc(playergold3ID, i, rmXMetersToFraction(xsVectorGetX(TCLocation)), rmZMetersToFraction(xsVectorGetZ(TCLocation))); } int NativeCenterID = rmCreateGrouping("Native Center ID", "native aztec village "+rmRandInt(rmRandInt(1,2),rmRandInt(3,rmRandInt(4,5)))); rmSetGroupingMinDistance(NativeCenterID, 0.0); rmSetGroupingMaxDistance(NativeCenterID, rmXFractionToMeters(0.1)); rmAddGroupingToClass(NativeCenterID, rmDefineClass("natives")); rmAddGroupingConstraint(NativeCenterID, avoidWaterMin); //PS:群组与单位的放置限制语句不一样哦。 rmPlaceGroupingAtLoc(NativeCenterID, 0,0.50,0.50); int FixedGunID = rmCreateObjectDef("FixedGun"); rmAddObjectDefItem(FixedGunID, "SPCFixedGun",1,5.0); rmSetObjectDefMinDistance(FixedGunID,0.0); rmSetObjectDefMaxDistance(FixedGunID,30.0); rmAddObjectDefConstraint(FixedGunID, avoidWaterMin); rmPlaceObjectDefAtLoc(FixedGunID,0,0.50,0.50,1); for(i=0; <= cNumberNonGaiaPlayers*3) { int goldID = rmCreateObjectDef("gold"+i); rmAddObjectDefItem(goldID, "mine", 1, 0.0); rmSetObjectDefMinDistance(goldID, rmXFractionToMeters(0.0)); rmSetObjectDefMaxDistance(goldID, rmXFractionToMeters(0.5)); rmAddObjectDefToClass(goldID, classGold); rmAddObjectDefConstraint(goldID, avoidGoldTypeFar); rmAddObjectDefConstraint(goldID, avoidWaterMin); rmPlaceObjectDefAtLoc(goldID, 0, 0.50, 0.50); } int CenterHerdID = rmCreateObjectDef("Center Herd2"); rmAddObjectDefItem(CenterHerdID, "BighornSheep",10, 8.0); rmSetObjectDefMinDistance(CenterHerdID, rmXFractionToMeters(0.0)); rmSetObjectDefMaxDistance(CenterHerdID, rmXFractionToMeters(0.45)); rmSetObjectDefCreateHerd(CenterHerdID, true); rmAddObjectDefConstraint(CenterHerdID, avoidHerdTypeFar); rmAddObjectDefConstraint(CenterHerdID, avoidWaterMin); for(i=1; <= cNumberNonGaiaPlayers*3) { rmPlaceObjectDefAtLoc(CenterHerdID, 0, 0.50, 0.50); } int GreenForestTreeObjectID = rmCreateObjectDef("Object Green forest trees"); rmAddObjectDefItem(GreenForestTreeObjectID, "TreeRedwood", 8, 15); rmAddObjectDefItem(GreenForestTreeObjectID, "TreeRedwood", 3, 5); rmAddObjectDefItem(GreenForestTreeObjectID, "UnderbrushCalifornia", 3, 10); rmSetObjectDefMinDistance(GreenForestTreeObjectID, rmXFractionToMeters(0.0)); rmSetObjectDefMaxDistance(GreenForestTreeObjectID, rmXFractionToMeters(0.47)); rmAddObjectDefConstraint(GreenForestTreeObjectID, avoidTreeType); rmAddObjectDefConstraint(GreenForestTreeObjectID, avoidWaterMin); rmPlaceObjectDefAtLoc(GreenForestTreeObjectID, 0, 0.50, 0.50, cNumberNonGaiaPlayers*20); rmSetStatusText("",0.50);//读取地图进度条 int avoidNative = rmCreateClassDistanceConstraint("avoid Native", rmClassID("natives"), 52.0); int avoidGoldTypeMin = rmCreateTypeDistanceConstraint("coin avoids coin Min", "gold", 15.0); int avoidTreeTypeMin = rmCreateTypeDistanceConstraint("Tree avoids Min", "Tree", 15.0); int NativeCenter2ID = rmCreateGrouping("Native Center ID", "native aztec village "+rmRandInt(rmRandInt(1,2),rmRandInt(3,rmRandInt(4,5)))); rmSetGroupingMinDistance(NativeCenter2ID, 0.0); rmSetGroupingMaxDistance(NativeCenter2ID, rmXFractionToMeters(0.5)); rmAddGroupingToClass(NativeCenter2ID, rmDefineClass("natives")); rmAddGroupingConstraint(NativeCenter2ID, avoidNative); rmAddGroupingConstraint(NativeCenter2ID, avoidGoldTypeMin); rmAddGroupingConstraint(NativeCenter2ID, avoidTreeTypeMin); rmAddGroupingConstraint(NativeCenter2ID, avoidWaterMin); //PS:群组与单位的放置限制语句不一样哦。 rmPlaceGroupingAtLoc(NativeCenter2ID, 0,0.50,0.50,3); int FountainID=rmCreateObjectDef("FountainOfYouth"); rmAddObjectDefItem(FountainID, "SPCFountainOfYouth", 1, 0.0); rmSetObjectDefMinDistance(FountainID, 0.0); rmSetObjectDefMaxDistance(FountainID, 10); rmAddObjectDefConstraint(FountainID, avoidFishLand); rmPlaceObjectDefAtLoc(FountainID, 0, 0.50, 0.45, 1); int Fish1count = cNumberPlayers * 3; string Fish1Name = "FishMoonBass"; int Fish2count = cNumberPlayers * 3; string Fish2Name = "FishMoonBass"; int whalecount = (cNumberNonGaiaPlayers * 3) + rmRandInt(1,2); int Junkcount = cNumberPlayers; int RandomJunk = rmRandInt(0,1); //蓝色文字是海军旗帜的语句 int waterSpawnPointID = rmCreateObjectDef("Flag"); rmAddObjectDefItem(waterSpawnPointID, "HomeCityWaterSpawnFlag", 1, 0.0); rmSetObjectDefMaxDistance(waterSpawnPointID, 30); rmAddClosestPointConstraint(flagVsFlag); rmAddClosestPointConstraint(flagLand); for(i=1; <cNumberPlayers) { int ShipsID = rmCreateObjectDef("Ships"+i); //这个是两个玩家的情况下给每个玩家创建1只独木舟。 //这是一种没有出现过的if判断国家方法,总之我的语句很高级就对了。你去函数章节看下国家ID应该会明白是什么。 if (rmGetPlayerCiv(i) <= 13 && rmGetPlayerCiv(i) != 8) { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } else if (rmGetPlayerCiv(i) == 8) { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } else if (rmGetPlayerCiv(i) >= 14 && rmGetPlayerCiv(i) <= 17) { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } else if (rmGetPlayerCiv(i) == 19 || rmGetPlayerCiv(i) == 22 || rmGetPlayerCiv(i) == 26) { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } else if (rmGetPlayerCiv(i) == 20 || rmGetPlayerCiv(i) == 23) { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } else { rmAddObjectDefItem(ShipsID,"Canoe", 1, 10.0); } rmSetObjectDefMaxDistance(ShipsID, 30); rmAddClosestPointConstraint(shipsVsFlag); rmAddClosestPointConstraint(flagLand); TCLocation = rmGetUnitPosition(rmGetUnitPlacedOfPlayer(TownCenterID, i)); vector closestPoint = rmFindClosestPointVector(TCLocation, rmXFractionToMeters(1.0)); rmPlaceObjectDefAtLoc(waterSpawnPointID, i, rmXMetersToFraction(xsVectorGetX(closestPoint)), rmZMetersToFraction(xsVectorGetZ(closestPoint))); if(cNumberNonGaiaPlayers == 2) { rmPlaceObjectDefAtLoc(ShipsID, i, rmXMetersToFraction(xsVectorGetX(closestPoint)), rmZMetersToFraction(xsVectorGetZ(closestPoint))); } } rmClearClosestPointConstraints(); rmSetStatusText("",0.80); int Fisch1=rmCreateObjectDef("Fish 1"); rmAddObjectDefItem(Fisch1, Fish1Name, 1, 0.0); rmSetObjectDefMinDistance(Fisch1, 0.3); rmSetObjectDefMaxDistance(Fisch1, rmXFractionToMeters(0.5)); rmAddObjectDefConstraint(Fisch1, avoidFish); rmAddObjectDefConstraint(Fisch1, avoidFishLand); rmPlaceObjectDefAtLoc(Fisch1, 0, 0.5, 0.5, Fish1count); int Fisch2=rmCreateObjectDef("Fish 2"); rmAddObjectDefItem(Fisch2, Fish2Name, 1, 0.0); rmSetObjectDefMinDistance(Fisch2, 0.3); rmSetObjectDefMaxDistance(Fisch2, rmXFractionToMeters(0.5)); rmAddObjectDefConstraint(Fisch2, avoidFish); rmAddObjectDefConstraint(Fisch2, avoidFishLand); rmPlaceObjectDefAtLoc(Fisch2, 0, 0.5, 0.5, Fish2count); rmSetStatusText("",1.00);//读取地图进度条 } //END
方法1:在河流那里添加
rmRiverAddShallows(riverID, count, radius);
rmRiverAddShallows(riverID, 浅滩数量, 浅滩半径);
例如:
int River1ID = rmRiverCreate(-1, "Northwest Territory Water", 1, 1, 10, 10);
rmRiverAddWaypoint(River1ID, 0.0, 0.2 );
rmRiverAddWaypoint(River1ID, 1.0, 0.2 );
rmRiverSetBankNoiseParams(River1ID,0.00, 0, 0.0, 0.0, 0.0, 0.0);
rmRiverAddShallows(River1ID,5,8);
rmRiverBuild(River1ID);
方法2:在河流那里添加
rmRiverSetShallowRadius(riverID, radius);
rmRiverAddShallow(riverID, distancePct);
rmRiverSetShallowRadius(riverID, 浅滩半径);//设定浅滩半径,通rmRiverAddShallow语句放置浅滩
rmRiverAddShallow(riverID, 河流长度百分比);
例如:
int River2ID = rmRiverCreate(-1, "Northwest Territory Water", 1, 1, 10, 10);
rmRiverAddWaypoint(River2ID, 0.0, 0.8 );
rmRiverAddWaypoint(River2ID, 1.0, 0.8 );
rmRiverSetBankNoiseParams(River2ID,0.00, 0, 0.0, 0.0, 0.0, 0.0);
rmRiverSetShallowRadius(River2ID,16);
rmRiverAddShallow(River2ID,0.20);
rmRiverAddShallow(River2ID,0.50);
rmRiverAddShallow(River2ID,0.80);