铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 8691|回复: 8

第六讲 基本API函数

[复制链接]
发表于 2011-10-7 15:48 | 显示全部楼层 |阅读模式
本帖最后由 蓝烟清 于 2011-10-10 11:58 编辑


第六讲 基本API函数


        国庆天天都下雨,比较悲剧。事情有点多,现在已经是国庆最后一天了,加起来上网时间不到五小时。S大发布了苍炎国庆版,也玩了一下新特殊人物“萧雨客”,呵呵。
        虽然国庆版不支持DIY,但是我们的学习还是要继续,再出新版本还会支持的,S大已经说过会慢慢公开,我们不着急,先把基础打好。好了,进入正题。

6.1        介绍与遗留问题
        目前的源码定义了许多的函数,包括函数的入口、战斗、物品等。本次重点讲instruct_3函数。
        学习目标:了解基本函数的定义,仅做为一个参考。
        遗留问题:暂无
6.2        函数定义
  1. function IncludeFile()              --导入其他模块
  2. function SetGlobal()   --设置游戏内部使用的全程变量
  3. function JY_Main()        --主程序入口
  4. function myErrFun(err)      --错误处理,打印错误信息
  5. function JY_Main_sub()        --真正的游戏主程序入口
  6. function NewGame()     --选择新游戏,设置主角初始属性
  7. local function DrawAttrib(str)    --定义内部函数
  8. function Game_Cycle()       --游戏主循环
  9. function Game_MMap()      --主地图
  10. function GetMyPic()      --计算主角当前贴图
  11. function AddMyCurrentPic()        ---增加当前主角走路动画帧,
  12. function CanEnterScene(id,x,y)         --场景是否可进
  13. function MMenu()      --主菜单
  14. function Menu_System()         --系统子菜单
  15. function Menu_Exit()      --离开菜单
  16. function Menu_SaveRecord()         --保存进度菜单
  17. function Menu_ReadRecord()        --读取进度菜单
  18. function Menu_Status()           --状态子菜单
  19. function Menu_PersonExit()        --离队Exit
  20. function SelectTeamMenu(x,y)          --队伍选择人物菜单
  21. function ShowPersonStatus(id)        --显示人状态
  22. local function DrawAttrib(str,color1,color2,v)    --定义内部函数
  23. function TrainNeedExp(id)         --计算人物修炼物品成功需要的点数
  24. function Menu_Doctor()       --医疗菜单
  25. function ExecDoctor(id1,id2)      --执行医疗
  26. function Menu_DecPoison()         --解毒
  27. function ExecDecPoison(id1,id2)     --执行解毒
  28. function Menu_Thing()       --物品菜单
  29. function SelectThing(thing,thingnum)        --显示物品供选择
  30. function Game_SMap()         --场景处理主函数
  31. function SceneCanPass(x,y)  --场景坐标(x,y)是否可以通过
  32. function DtoSMap()          ---D*中的事件数据复制到S*中,同时处理动画效果。
  33. function DrawSMap()       --绘场景地图
  34. function LoadRecord(id)       -- 读取游戏进度
  35. function SaveRecord(id)         -- 写游戏进度
  36. function filelength(filename)         --得到文件长度
  37. function GetS(id,x,y,level)       --读S×数据
  38. function SetS(id,x,y,level,v)       --写S×
  39. function GetD(Sceneid,id,i)          --读D*
  40. function SetD(Sceneid,id,i,v)         --写D×
  41. function LoadData(t,t_struct,data)        --读取R×数据
  42. function SaveData(t,t_struct,data)      --写R×数据
  43. function limitX(x,minv,maxv)       --限制x的范围
  44. function RGB(r,g,b)          --设置颜色RGB
  45. function GetRGB(color)      --分离颜色的RGB分量
  46. function WaitKey()       --等待键盘输入
  47. function DrawBox(x1,y1,x2,y2,color)         --绘制一个带背景的白色方框
  48. function DrawBox_1(x1,y1,x2,y2,color)       --绘制四角凹进的方框
  49. function DrawString(x,y,str,color,size)         --显示阴影字符串
  50. function DrawStrBox(x,y,str,color,size)         --显示带框的字符串
  51. function DrawStrBoxYesNo(x,y,str,color,size)        --显示字符串并询问Y/N
  52. function DrawStrBoxWaitKey(s,color,size)          --显示字符串并等待击键
  53. function Rnd(i)           --随机数
  54. function AddPersonAttrib(id,str,value)            --增加人物属性
  55. function PlayMIDI(id)             --播放midi
  56. function PlayWavAtk(id)             --播放音效atk***
  57. function PlayWavE(id)              --播放音效e**
  58. function ShowScreen()              --刷新屏幕显示
  59. function ShowMenu(menuItem,numItem,numShow,x1,y1,x2,y2,isBox,isEsc,size,color,selectColor)     --通用菜单函数
  60. function UseThing(id)             --物品使用
  61. function DefaultUseThing(id)                --缺省物品使用函数
  62. function UseThing_Type0(id)              --剧情物品使用
  63. function UseThing_Type1(id)            --装备物品使用
  64. function CanUseThing(id,personid)           --判断一个人是否可以装备或修炼一个物品
  65. function UseThing_Type2(id)               --秘籍物品使用
  66. function UseThing_Type3(id)        --药品物品使用
  67. function UseThingEffect(id,personid)          --药品使用实际效果
  68. local function ThingAddAttrib(s)     ---定义局部函数,处理吃药后增加属性
  69. function UseThing_Type4(id)             --暗器物品使用
  70. function EventExecute(id,flag)               --事件调用主入口
  71. function oldEventExecute(flag)            --调用原有的指定位置的函数
  72. function ChangeMMap(x,y,direct)          --改变大地图坐标
  73. function ChangeSMap(sceneid,x,y,direct)       --改变当前场景
  74. function Cls(x1,y1,x2,y2)                    --清除屏幕
  75. function GenTalkString(str,n)              --产生对话显示需要的字符串
  76. function Talk(s,personid)            --最简单版本对话
  77. function TalkEx(s,headid,flag)          --复杂版本对话
  78. function instruct_test(s)
  79. function instruct_0()         --清屏
  80. function instruct_1(talkid,headid,flag)        --对话
  81. function instruct_2(thingid,num)            --得到物品
  82. function instruct_2_sub()               --声望>200以及14天书后得到武林帖
  83. function instruct_3(sceneid,id,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10)     --修改D*
  84. function instruct_4(thingid)         --是否使用物品触发
  85. function instruct_5()         --选择战斗
  86. function instruct_6(warid,tmp,tmp,flag)      --战斗
  87. function instruct_7()                 --已经翻译为return了
  88. function instruct_8(musicid)            --改变主地图音乐
  89. function instruct_9()                --是否要求加入队伍
  90. function instruct_10(personid)            --加入队员
  91. function instruct_11()              --是否住宿
  92. function instruct_12()             --住宿,回复体力
  93. function instruct_13()            --场景变亮
  94. function instruct_14()             --场景变黑
  95. function instruct_15()          --game over
  96. function instruct_16(personid)      --队伍中是否有某人
  97. function instruct_17(sceneid,level,x,y,v)     --修改场景图形
  98. function instruct_18(thingid)           --是否有某种物品
  99. function instruct_19(x,y)             --改变主角位置
  100. function instruct_20()                 --判断队伍是否满
  101. function instruct_21(personid)               --离队
  102. function instruct_22()            --内力降为0
  103. function instruct_23(personid,value)           --设置用毒
  104. function instruct_24()
  105. function instruct_25(x1,y1,x2,y2)             --场景移动
  106. function instruct_26(sceneid,id,v1,v2,v3)           --增加D*编号
  107. function instruct_27(id,startpic,endpic)           --显示动画
  108. function instruct_28(personid,vmin,vmax)          --判断品德
  109. function instruct_29(personid,vmin,vmax)           --判断攻击力
  110. function instruct_30(x1,y1,x2,y2)                --主角走动
  111. function instruct_30_sub(direct)            --主角走动sub
  112. function instruct_31(num)             --判断是否够钱
  113. function instruct_32(thingid,num)           --增加物品
  114. function instruct_33(personid,wugongid,flag)           --学会武功
  115. function instruct_34(id,value)              --资质增加
  116. function instruct_35(personid,id,wugongid,wugonglevel)         --设置武功
  117. function instruct_36(sex)               --判断主角性别
  118. function instruct_37(v)              --增加品德
  119. function instruct_38(sceneid,level,oldpic,newpic)         --修改场景某层贴图
  120. function instruct_39(sceneid)             --打开场景
  121. function instruct_40(v)                --改变主角方向
  122. function instruct_41(personid,thingid,num)        --其他人员增加物品
  123. function instruct_42()          --队伍中是否有女性
  124. function instruct_43(thingid)        --是否有某种物品
  125. function instruct_44(id1,startpic1,endpic1,id2,startpic2,endpic2)     --同时显示两个动画
  126. function instruct_45(id,value)        --增加轻功
  127. function instruct_46(id,value)            --增加内力
  128. function instruct_47(id,value)
  129. function instruct_48(id,value)         --增加生命
  130. function instruct_49(personid,value)       --设置内力属性
  131. function instruct_50(id1,id2,id3,id4,id5)       --判断是否有5种物品
  132. function instruct_51()     --问软体娃娃
  133. function instruct_52()       --看品德
  134. function instruct_53()        --看声望
  135. function instruct_54()        --开放其他场景
  136. function instruct_55(id,num)      --判断D*编号的触发事件
  137. function instruct_56(v)             --增加声望
  138. function instruct_57()       --高昌迷宫劈门
  139. function instruct_58()           --武道大会比武
  140. function instruct_59()           --全体队员离队
  141. function instruct_60(sceneid,id,num)          --判断D*图片
  142. function instruct_61()               --判断是否放完14天书
  143. function instruct_62(id1,startnum1,endnum1,id2,startnum2,endnum2)      --播放时空机动画,结束
  144. function instruct_63(personid,sex)          --设置性别
  145. function instruct_64()                 --小宝卖东西
  146. function instruct_65()           --小宝去其他客栈
  147. function instruct_66(id)       --播放音乐
  148. function instruct_67(id)      --播放音效
  149. function WarSetGlobal()            --设置战斗全程变量
  150. function WarLoad(warid)               --战斗主函数
  151. function WarMain(warid,isexp)
  152. function War_PersonLostLife()             --计算战斗后每回合由于中毒或受伤而掉血
  153. function War_EndPersonData(isexp,warStatus)            --战斗以后设置人物参数
  154. function War_AddPersonLevel(pid)      --人物是否升级
  155. function War_PersonTrainBook(pid)           --战斗后修炼秘籍是否成功
  156. function War_PersonTrainDrug(pid)         --战斗后是否修炼出物品
  157. function War_isEnd()           --战斗是否结束
  158. function WarSelectTeam()            --选择我方参战人
  159. function WarSelectMenu(newmenu,newid)            --选择战斗人菜单调用函数
  160. function WarSelectEnemy()            --选择敌方参战人
  161. function WarLoadMap(mapid)          --读取战斗地图
  162. function WarDrawMap(flag,movex,movey)            --绘战斗地图
  163. function WarDrawEffect(pic)           --显示武功效果
  164. function WarPersonSort()               --战斗人物按轻功排序
  165. function WarSetPerson()            --设置战斗人物位置
  166. function WarCalPersonPic(id)       --计算战斗人物贴图
  167. function War_Manual()                --手动战斗
  168. function WarShowHead()               --显示战斗人头像
  169. function War_MoveMenu()           --执行移动菜单
  170. function War_CalMoveStep(id,stepmax,flag)                   --计算可移动步数
  171. function War_SelectMove()              ---选择移动位置
  172. function War_MovePerson(x,y)            --移动人物到位置x,y
  173. function War_FightMenu()              --执行攻击菜单
  174. function War_Fight_Sub(id,wugongnum,x,y)          --执行战斗
  175. function War_FightSelectType0(wugong,level,x1,y1)          --选择点攻击
  176. function War_FightSelectType1(wugong,level,x,y)            --选择线攻击
  177. function War_FightSelectType2(wugong,level)                 --选择十字攻击
  178. function War_FightSelectType3(wugong,level,x1,y1)            --选择面攻击
  179. function War_Direct(x1,y1,x2,y2)             --计算人方向
  180. function War_ShowFight(pid,wugong,wugongtype,eft)              --显示战斗动画
  181. function War_WugongHurtLife(emenyid,wugong,level)             --计算武功伤害生命
  182. function War_WugongHurtNeili(enemyid,wugong,level)           --计算武功伤害内力
  183. function War_PoisonMenu()              ---用毒菜单
  184. function War_PoisonHurt(pid,emenyid)     --计算敌人中毒点数
  185. function War_DecPoisonMenu()          ---解毒菜单
  186. function War_DoctorMenu()            ---医疗菜单
  187. function War_ExecuteMenu(flag,thingid)            ---执行医疗,解毒用毒暗器
  188. function War_ExecuteMenu_Sub(x1,y1,flag,thingid)     ---执行医疗,解毒用毒暗器的子函数,自动医疗也可调用
  189. function War_ThingMenu()            --战斗物品菜单
  190. function War_UseAnqi(id)          ---战斗使用暗器
  191. function War_AnqiHurt(pid,emenyid,thingid)         --计算暗器伤害
  192. function War_RestMenu()           --休息
  193. function War_WaitMenu()            --等待,把当前战斗人调到队尾
  194. function War_StatusMenu()          --战斗中显示状态
  195. function War_AutoMenu()           --设置自动战斗
  196. function War_Auto()             --自动战斗主函数
  197. function War_Think()           --思考如何战斗
  198. function War_ThinkDrug(flag)             --能否吃药增加参数
  199. function War_ThinkDoctor()          --考虑是否给自己医疗
  200. function War_AutoFight()             ---执行自动战斗
  201. function War_AutoSelectWugong()           --自动选择合适的武功
  202. function War_AutoSelectEnemy()             --选择战斗对手
  203. function War_AutoSelectEnemy_near()              --选择最近对手
  204. function War_AutoMove(wugongnum)              --自动往敌人方向移动
  205. function War_GetCanFightEnemyXY(scope)             --得到可以走到攻击到敌人的最近位置
  206. function War_AutoCalMaxEnemy(x,y,wugongid,level)       --计算从(x,y)开始攻击最多能够击中几个敌人
  207. function War_AutoExecuteFight(wugongnum)            --自动执行战斗,显示攻击动画
  208. function War_AutoEscape()                --逃跑
  209. function War_AutoEatDrug(flag)          ---吃药加参数
  210. function War_AutoDoctor()            --自动医疗
复制代码
6.3        instruct_3函数
        函数的定义:function instruct_3(sceneid,id,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10)
        最复杂的函数,修改事件内容(D*事件),一共有13个参数
        第1个参数:场景编号,-2表示当前场景
        第2个参数:场景位置编号
        第3个参数:是否能通过,0可以通过,1被拦住走不过
        第4个参数:不明白,都是写0
        第5个参数:第一个事件编号,空格触发,不想触发直接写0
        第6个参数:第二个事件编号,使用物品触发
        第7个参数:第三个事件编号,走过时自动触发
        第8个参数:开始贴图编号,-2表示贴图不变,0表示清除贴图
        第9个参数:结束贴图编号,-2表示贴图不变,0表示清除贴图
        第10个参数:临时贴图编号,-2表示贴图不变,0表示清除贴图
        第11个参数:动画延迟,-2表示不变
        第12个参数:横坐标X,-2表示不变,当场景位置为0时,此XY参数生效
        第13个参数:纵坐标Y,-2表示不变

6.3.1   第一个例子
        一灯居的渔夫,在没有触发黄蓉在受伤跑去一灯之前,门口渔夫默认的是触发编号为477,现在咱们改动478直接问要金娃娃
instruct_3(47,2,1,0,478,489,0,7094,7094,7094,-2,-2,-2);
        一灯居的场景编号为47,渔夫所在的位置编号为2,1表示不能通过,0不知道,478要金娃娃事件,489是否使用金娃娃物品事件,0无自动触发事件,7094渔夫的贴图静态的所以三个,贴图三个参数也可以写-2表示贴图不变,此事件贴图不静态后面三个参数可写0可以填-2

6.3.2   第二个例子
        如果咱们没有金娃娃,又不想理他,那么可以直接把给渔夫去掉
        instruct_3(47,2,0,0,0,0,0,0,0,0,0,0,0);
        一灯居的场景编号为47,渔夫所在的位置编号为2,0表示可以通过,0不知道,三个事件都为0表示取消事件,三个贴图都为0表示取消贴图,后面三个也是同样的意思

6.3.2   第三个例子
        增加一个渔夫。很多做DIY的都会用到,渔夫的位置在(36,35)
        instruct_3(47,0,1,0,478,489,0,7094,7094,7094,0,36,35);

6.4        结束语
        函数功能不需要完全的记住,多用几次就熟练了。另外自己也可以定义一些功能更好的函数。
        有人会疑问怎么知道一灯居编号是47,渔夫位置编号是2。我是用UPedit工具看的,当然其它工具也可以,但是我觉得这个工具挺不错的。做剧情的修改必须得下一个。
        SetD,GetD,SetS, GetS这几个函数更抽象,在进入剧情修改部分时再讲。
        建议下UPedit来看一下,可能会学到不少东西。

        本讲至此结束了,下一讲将会是对话框。

        函数说明附件下载:
        附件中除了上面说的,还包含有lib库函数的说明,如果要做MOD,手上的必须要有一份这个函数说明




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x

评分

参与人数 1声望 +10 收起 理由
jy02785317 + 10 好贴奖励

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-10-7 20:08 | 显示全部楼层
沙发~~~支持教学!!

点评

感谢支持  发表于 2011-10-7 22:05
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-10-7 21:14 | 显示全部楼层
支持!虽然完全完全完全的……看不懂……

点评

呵呵。这只是定义,当然比较难理解。 以后会有具体的运用,到时再回头来看就明白多了  发表于 2011-10-7 22:05
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-10-11 20:55 | 显示全部楼层
蓝老师好,这几天太忙了,有空一定要把你所的讲座好好看一遍

点评

呵呵。 每个都要试过,才能容易理解  发表于 2011-10-11 21:48
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
头像被屏蔽
发表于 2011-12-4 17:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-12-10 23:08 | 显示全部楼层
好多函数 不知道怎么用噢 尤其是WAR那里的几个 也不知道参数应该写什么
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2018-4-25 11:44 | 显示全部楼层
蓝大威武,有些还看不明白,但看明白的都受益菲浅。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2020-6-19 00:21 | 显示全部楼层
请问string.sub是什么意思
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2021-8-3 20:02 | 显示全部楼层
代码真复杂,定义了一个世界
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-5-6 01:04

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表