《海盗时代2:沉船之城》详细修改教程

《海盗时代2:沉船之城》详细修改教程

所属游戏: 海盗时代2:沉船之城
英文名称:
相关操作: 收藏 下载地址 扩展
模组作者:NoWater
标签:
最后更新:2017-12-19


按顺序来,首先是Programcharacters目录,想必大家都研究透了,就权当照顾下新人吧

characters.h文件定义了一些与角色属性有关的数值和字符串,字符串不能碰,咱可以动动数值

#define PASSENGERS_MAX        64
#define PRISONER_MAX        40
#define COMPANION_MAX        10

懂英语的显然可以看出这是定义乘客数(一般也就是副官)最大值、囚禁舰长数最大值和舰队舰长数(包括主角)最大值,改成想要的值就行了。

#define SKILL_MAX           100
#define SPECIAL_MAX         10

以上分别是技能和属性点的最大值,如果光改实际值不改这个上限是没用的,另外注意技能和属性点不要改太大,否则在游戏的算法引用时会出错,例如把天赋弄到40主角就会像赛亚人一样不管做什么都会升级。

-------------咱是又细又短的分割线----------------

RPGUtilite.c应该是大部分人修改的起点了,涉及人物数值的生成,所以咱们主要是改里面的公式。HP和EN的算法是公用的就别改了,想割草还不如改把神兵出来。嘛,先看这句

int GetCharacterSkillSimple(ref _refCharacter, string skillName)

下面有n行形似

skillN = skillN + SetCharacterSkillByItem(_refCharacter, skillName, SKILL_FORTUNE, "jewelry9",1);

的代码,这是物品的属性加成,SKILL_FORTUNE是技能名,可以去characters.h里找,jewelry9是物品代码,到ProgramITEMS目录下翻吧,1则是加成值(在游戏中实际加成会×10),显然,这个物品是小十字架

int GetShipClassNavySkill(int shipClass)

开船要的航海技能点数,下面的needSkill全=0的话你就可以一开始操MOW了

void AddCharacterExpToSkill(ref _chref, string _skill, float _addValue)

定义经验的获取率,注释officers下面的代码就决定了军官们可以从主角那里揩到多少油水,形如

AddCharacterExpToSkill(GetCharacter(cn), _skill, _addValue * 2);

要多少看着办吧,注意if (CheckCharacterPerk(_chref, "SharedExperience"))下的三句是在有共享经验技能时的揩油率,再下来三句才是正常情况下的

int GetMaxItemsWeight(ref _chref)

这个可谓人尽皆知了,定义人物负重,虽然是公用的不过给敌人加负重也没啥影响

if (IsCharacterPerkOn(_chref, "Grus")) iBonus = 100;

定义负重perk

iBonus = iBonus + CHAR_ITEMS_WEIGHT + GetCharacterSPECIALSimple(_chref, SPECIAL_S)*(GetCharacterSPECIALSimple(_chref, SPECIAL_E) + 75 - MOD_SKILL_ENEMY_RATE);

定义基础负重,最简单的改法就是动那个数字了

void initNewMainCharacter()

主要角色简称主角的定义

case "Adventurer":
SetSPECIAL(ch, 10,10,10,10,10,10,10);
SetCharacterPerk(pchar, "HPPlus");
SetCharacterPerk(pchar, "EnergyPlus");
break;

adventurer就是职业名了,除了可以用SetSPECIAL改属性值外,还可以用SetCharacterPerk加特技,这个方法的麻烦之处在于要选择相应职业,要么就把海盗和商人一并改了,所以咱们可以换用下面这个

ch.skill.freeskill   = 0;
ch.Skill.FreeSPECIAL = 0;

可自由分配的技能点和属性点数,咱进游戏里手动加,再下来

pchar.Ship.Type = GenerateShip(SHIP_WAR_TARTANE, 0);

一开始用什么船,可以去ProgramShips下找,顺便这句是船的生成语句,遍布各个代码文件,跟上面那个SetSPECIAL和SetCharacterPerk一样几乎到处都是,还有如果你足够恶趣味可以把0改成1,你的船就是赃物了……对于狂派而言还有个问题,船的数据是随机生成的,咱想开鱼雷快艇咋办?那就在下面添加

ref rRealShip = GetRealShip(sti(pchar.Ship.Type));
rRealShip.MaxCaliber = 42;
rRealShip.MaxCrew    = 500;
rRealShip.OptCrew    = 350;
rRealShip.Capacity   = 50000;
rRealShip.HP         = 5000;
rRealShip.WindAgainstSpeed = 50.0;
rRealShip.SpeedRate         = 50.0;
rRealShip.TurnRate   = 200.0;
rRealShip.Price      = 500;

好了,鱼雷艇生成完毕,然后咱再改改起始物品就可以上路了

void initMainCharacterItem()

定义角色持有物品

case "Adventurer":
SetSelfSkill(pchar, 5, 5, 5, 5, 100);
SetShipSkill(pchar, 30, 50, 70, 60, 20, 80, 100, 90, 100);
GiveItem2Character(Pchar, "Blade10");
GiveItem2Character(Pchar, "pistol2");
TakenItems(Pchar, "potion1", 13);
TakenItems(Pchar, "potion2", 1);
TakeNItems(Pchar, "bullet", 15);
TakenItems(Pchar, "jewelry9", 1);
GiveItem2Character(Pchar, "Spyglass2");
pchar.money = 5000000;
break;

SetSelfSkill和SetShipSkill是直接定义角色技能值,这些语句其实放哪里都行,不用太拘泥于原函数是干嘛的,咱又不是程序员。GiveItem2Character和TakenItems都是加物品,区别只是加1个和加n个,最后的money就不用说了吧?好,没有啥追求的话到这里就可以开始爽了,去开始新游戏吧。