《海盗时代2:沉船之城》修改方法详解

《海盗时代2:沉船之城》修改方法详解

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

=======================咱是又长又粗的分割线============================

不过想用彼得同学的人就会发现上面的一些起始阶段的修改会被干掉,5000000没多久就会直接被城管们打劫掉,快艇也不知道沉到哪个角落里了,所以咱还得对彼得同学特殊照顾下,打开ProgramQuestsreaction_functions.c然后找到

void Blood_StartGame(string qName)

这里就是彼得同学的那段小插曲了,让咱们往下看

RemoveCharacterEquip(pchar, BLADE_ITEM_TYPE);

RemoveCharacterEquip(pchar, GUN_ITEM_TYPE);

RemoveCharacterEquip(pchar, SPYGLASS_ITEM_TYPE);

RemoveCharacterEquip(pchar, PATENT_ITEM_TYPE);

RemoveCharacterEquip(pchar, CIRASS_ITEM_TYPE);

RemoveCharacterEquip(pchar, MAPS_ITEM_TYPE);

DeleteAttribute(Pchar, "items");

DeleteAttribute(Pchar, "ship");

DeleteAttribute(Pchar, "ShipSails.gerald_name");

Pchar.ship.type = SHIP_NOTUSED;

汗,大部分修改都给干掉了,前两句是黑装备的常用语句,要是你在其它地方发现某人/尸体的装备蒸发了,不妨搜索这个人的名字,然后看看周围的代码是否有这两句话,而SHIP_NOTUSED就是指主角没船可开,这是黑主角船的常用方法,那直接在这里改?很不幸,后面城管还要黑你一次,所以改这里用处不大,咱们再往下

void CapBloodLineInit(string qName)

好,城管动手了,彼得被扒光后用

int n= FindLocation("Bridgetown_town");

locations[n].reload.l3.close_for_night = false;

扔到了巴巴多斯,接下来

void CapBloodLine_firstEnterHome

黄毛进屋了,那在这里加物品就没人黑了吧?可惜啊,城管是无处不在的

void TakeBlades(string qName)

虽然他们不会关心一个奴隶的钱包有多鼓,但武器是绝对不能拿的,如果你想带着武器在巴巴多斯乱跑的话,可以用//把函数的所有语句给注释掉,就像这样

//sld = GetCharacter(NPC_GenerateCharacter("SolderTakeBlades", "sold_eng_"+(rand(7)+1), "man", "man", 10, ENGLAND, 0, false));

上面这条语句这样处理过后就不起作用了,其余的也可以如法炮制,有了长剑后面救金毛时就容易多了。接下来解决船的问题,如果你上面仔细看过一遍代码,就会发现ProgramDIALOGSrussianQuestCapBloodLineBishop.c这个文件经常被调用,咱们打开来研究研究,搜索SHIP_ARABELLA,可以找到几条造船代码,而这条

Pchar.Ship.Type = GenerateShip(SHIP_ARABELLA, true);

就是彼得同学的,在代码里pchar通常指代主角,所以搜索结果有n条时可以结合这点来判断是哪条。

=======================咱是又长又粗的分割线============================

现在船和钱都有了,该着手解决水手的问题,但是刚开始RP不好城市刷的水手太少的话会需要不少时间来回买人,人多了消耗上来了又要来回买粮食买酒,这帮家伙还狮子大开口成天要钱,最该死的是超载减士气,不理它又有哗变的危险,因此,让咱们祭起16进制编辑器杀向Programscripts目录吧。先看crew.c,一上来没几行

ChangeCrewExp(chr, "Sailors", -1);

ChangeCrewExp(chr, "Cannoners", -1);

ChangeCrewExp(chr, "Soldiers", -1);

ChangeCrewExp是更改水手的经验值,后面的数字就是变动的值,在crew.c里用得很频繁。结合前面的语句可以知道这里定义的是主角在岸上happy时水手们也发懒降经验,下来

int GetMoneyForOfficer(ref Npchar)

副官问你要钱了,咱们可以把

return MOD_SKILL_ENEMY_RATE*4*sum;

除以某个数字减他们的薪水,例如

return MOD_SKILL_ENEMY_RATE*4*sum / 100;

让他们打白工,同样的在

int GetSalaryForShip(ref chref)

里也可以动同样的手脚

return nPaymentQ;

甚至可以更残忍些,改成

return 0;

让他们打白工,再下来还有句类似的

int GetCharacterRaiseCrewMoraleMoney(ref chr)

提升士气要多少钱,一并return 0算了……

void UpdateCrewInColonies()

城镇开始刷水手了,想研究的可以去看看算法,不想看的改这句

rTown.Ship.crew.quantity = nNeedCrew;

就是城镇刷出的水手数,改完了数量咱们来改质量

switch (sti(rTown.nation))

下面为每个势力的水手设置了初始经验值,由最后的三个公式算出最终实际值,博派的可以DIY一把,狂派的看公式下面的三个ChangeCrewExp(),咱别麻烦了,直接加到100了事

int GetCrewPriceForTavern(string sColony)

招水手时要多少钱,继续return 0吧,抠门也要抠得大气点。

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

处理完水手,就来解决吃饭问题,打开food.c,头三句

#define FOOD_BY_CREW       10.0

#define FOOD_BY_SLAVES     20.0

#define FOOD_BY_PASSENGERS 10.0

一单位食物可以养多少水手、奴隶和副官,改完这里基本上后面就没什么事了,想超载的看这句

if (crew > GetOptCrewQuantity(chref))

{

    AddCrewMorale(chref, -(1+rand(3)));

}

超载时改变水手的士气,其中rand(3)是随机生成0到3中的一个数,常用的伪随机数生成函数,你可以BT点改成正数,只要处于超载状态,不用给他们酒喝也能涨士气。最后解决些小麻烦,打开utils.c,找到

void GiveItemToTrader(aref ch)

看见下面一堆的rand()了么?这里就是商人刷的物品,尽情地BT一把吧。再来打开ProgramSTOREinitGoods.c,商品的定义

Goods[GOOD_KNIPPELS].Name                = "Knippels";   //名称

Goods[GOOD_KNIPPELS].Cost                = 26;    //价格

Goods[GOOD_KNIPPELS].Weight                = 2;    //重量,注意是一包,也就是货物界面点一下单箭头变动的量

Goods[GOOD_KNIPPELS].Units                = 20;  //一包有几个单位的货物

Goods[GOOD_KNIPPELS].SpeedV0        = 0.9;

Goods[GOOD_KNIPPELS].DamageHull = 1.5;    //炮弹特有,对船体伤害

Goods[GOOD_KNIPPELS].DamageRig        = 9.0;  //同上,对帆

Goods[GOOD_KNIPPELS].DamageCrew = 0.3;        //同上,对人

Goods[GOOD_KNIPPELS].AfraidWater = 0;

Goods[GOOD_KNIPPELS].type                = TRADE_TYPE_AMMUNITION;

Goods[GOOD_KNIPPELS].canbecontraband        = 0;

Units是最推荐改的,尤其是船帆船板和朗姆酒,用量超多居然要一个一个点,对于有单手玩游戏癖的人而言巨不爽。

=======================咱是又长又粗的分割线============================

要改船的请搜索老帖,要添加新船(包括模型和图片)的请研究造船大大搬运来的黑珍珠。