现在船和钱都有了,该着手解决水手的问题,但是刚开始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是最推荐改的,尤其是船帆船板和朗姆酒,用量超多居然要一个一个点,对于有单手玩游戏癖的人而言巨不爽。