2012-02-04 15:18:06作者:admin
在痛苦的围着加勒比海绕两圈后(中间省略在大地图上同时被4只海盗围追堵截,同时被海盗和英国人尾追堵截,在风暴中和海盗战斗,花了无数冤枉钱买英国贸易证后...)终于发现快速找木乃伊粉的办法,通过瞎猜文件有以下发现在common_itemtrader文件中有下面两段:
if (pchar.questTemp.Ascold == "Seek_powder" && npchar.city == pchar.questTemp.Ascold.MerchantColony && npchar.location.locator == "merchant1")
{
Dialog.text = DLG_TEXT_BASE[61];
Link.l1 = DLG_TEXT_BASE[62];
Link.l1.go = "AngStep_1";
case "AngStep_1":
Dialog.text = DLG_TEXT_BASE[67];
if (sti(pchar.money) >= 1000)
{
Link.l1 = DLG_TEXT_BASE[68];
Link.l1.go = "AngryExitAgain";
pchar.questTemp.Ascold = "PowderWasSeek";
CharacterDelAngry(npchar);
AddMoneyToCharacter(pchar, -1000);
GiveItem2Character(Pchar,"Powder_mummie");
明眼人看出来了,第二段就是powder_mummie,也就是木乃伊粉的购买命令,那么导向第二段的第一段就是判断命令,即在正确的城市和正确的NPC面前触发第二段命令。那么城市的变量就是pchar.questTemp.Ascold.MerchantColony,通过追踪这个变量追到了两个地方:
questsutilite 文件下的一段话:
nation = storeArray[rand(howStore-1)];
pchar.questTemp.Ascold.TraderId = colonies[nation].id + "_trader";
nation = storeArray[rand(howStore-1)];
pchar.questTemp.Ascold.MerchantColony = colonies[nation].id;
nation = storeArray[rand(howStore-1)];
while (colonies[nation].id == "Panama")
这应该就是以前有人猜测过的创建主角时就把粉钉死的原理,关键是下面:
debuger
totalInfo = descF22;
// -->
{
totalInfo = "Random shop owner: " + pchar.questTemp.Ascold.TraderId + NewStr() +
"Random trader (colony): " + pchar.questTemp.Ascold.MerchantColony + NewStr() +
"Random shipyarder: " + pchar.questTemp.Ascold.ShipyarderId + NewStr()+
"Annals location: " + Items[GetItemIndex("Rock_letter")].startLocation + NewStr()+
"Annals locator: " + Items[GetItemIndex("Rock_letter")].startLocator;
这段明明白白的写出了F22显示这个变量,也就是说可以用F11键直接找到木乃伊粉!
在马拉开波明媚的阳光中,三个欧巴桑在摊位边闲扯,一个鬼鬼祟祟的黑影接近了:"有粉儿么?"第一个大谈了一翻宗教、制度什么的就把这厮轰跑了,第二个也是如此,不过最后她突然大发善心:“看你这孩子乖可怜的,我这还有把香灰,拿去充数吧。”齐活!
从代码来看,我估计应该可以用某个城市的代码直接替换那个变量,把木乃伊粉的位置给固定下来,就看那个懂程序的高人来试验一下了。
PS: 据我所知,触发木乃伊粉任务的商店、卖木乃伊粉的小贩、墓室石碑所在地、开启神灯船坞所在地,是绑定在一起的。纯支持一下吧
nation = storeArray[rand(howStore-1)];
如果真的是绑在一起的~你可以试试把用random方法的这段rand(howStore-1)改成一个固定的数值~这样所有的东西的位置就是固定的了~游戏中只有23个港口~95个小贩