13号避难所

 找回密码
 立即注册
搜索
查看: 989|回复: 10
打印 上一主题 下一主题

书籍 求助

[复制链接]
楼主
发表于 2023-7-6 21:45:25 | 显示全部楼层
原版那五本書的處理是寫死在引擎內的,用物品附加腳本的方式沒辦法繞過,你可以用HOOK_USEOBJ接手整個程序然後重寫一份新的處理方式。

沙发
发表于 2023-7-7 15:23:34 | 显示全部楼层
我不知道你做了什麼,不過書的腳本我偷閒時試著寫了一下,看來不算複雜。
板凳
发表于 2023-7-8 16:07:21 | 显示全部楼层
那是命令行工具,直接執行是沒有用的。
地板
发表于 2023-7-8 18:31:08 | 显示全部楼层
基本一些的就在命令行下:compile.exe -p -O2 你的.ssl

如果你修改的原始腳本是用短路求值邏輯寫的那再加上-s,編譯有問題就照錯誤訊息去找出錯的行數修bug。
5#
发表于 2023-7-12 10:22:28 | 显示全部楼层
這是我寫的腳本框架,你可以自己加上想要的技能提升邏輯。
  1. #include ".\headers\define.h"
  2. #include ".\headers\command.h"
  3. #include ".\headers\sfall\sfall.h"

  4. #define BOOK_BONUS    (5)

  5. procedure start;
  6. procedure UseObjHandler;

  7. procedure UseObjHandler begin
  8.    variable
  9.       user  := get_sfall_arg,
  10.       obj   := get_sfall_arg,
  11.       skill := -1,
  12.       bonus := BOOK_BONUS,
  13.       msg, skLevel;

  14.    if (obj_item_subtype(obj) == item_type_misc_item) then begin
  15.       switch obj_pid(obj) begin
  16.       case PID_BIG_BOOK_OF_SCIENCE:
  17.          skill := SKILL_SCIENCE;
  18.          msg := 802;
  19.       case PID_DEANS_ELECTRONICS:
  20.          skill := SKILL_REPAIR;
  21.          msg := 803;
  22.       case PID_FIRST_AID_BOOK:
  23.          skill := SKILL_FIRST_AID;
  24.          msg := 804;
  25.       case PID_SCOUT_HANDBOOK:
  26.          skill := SKILL_OUTDOORSMAN;
  27.          msg := 806;
  28.       case PID_GUNS_AND_BULLETS:
  29.          skill := SKILL_SMALL_GUNS;
  30.          msg := 805;
  31.       end

  32.       // read book
  33.       if (skill != -1) then begin
  34.          if combat_is_initialized then begin
  35.             display_msg(mstr_proto(902));
  36.             set_sfall_return(0);
  37.             return;
  38.          end

  39.          skLevel := has_skill(dude_obj, skill);

  40.          // custom skill increment logic begin


  41.          // custom skill increment logic end

  42.          gfade_out(1);
  43.          game_time_advance(ONE_GAME_HOUR * (11 - dude_iq));
  44.          exec_map_update_scripts;
  45.          gfade_in(1);
  46.          display_msg(mstr_proto(800));
  47.          if (has_skill(dude_obj, skill) == skLevel) then begin
  48.             msg := 801;
  49.          end
  50.          display_msg(mstr_proto(msg));
  51.          set_sfall_return(1); // remove
  52.       end
  53.    end
  54. end

  55. procedure start begin
  56.    if game_loaded then begin
  57.       register_hook_proc(HOOK_USEOBJ, UseObjHandler);
  58.    end
  59. end
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Archiver|13号避难所

GMT+8, 2024-5-10 19:14 , Processed in 0.049713 second(s), 12 queries .

快速评论 返回顶部 返回列表