主程序
主程序的行为主要有两种,一种是载入一个脚本(实际上是把脚本文件整个地运行一遍)。载入的脚本,lua函数外的非local变量(包括函数本身)由主程序全局维护。
global.Include(10000) 实际上就是载入编号10000的脚本。可以尝试在此脚本第一行(函数体外)写一句global.Print(“Pal5Q”),这样每调用一次Include,控制台就会输出一次Pal5Q。
另一种则是直接从全局变量中调用指定名称的函数。
global.CallScript(10000)实际上是看编号10000对应的脚本文件函数名(即function macro)是否存在,若不存在,则先将macro.lua执行一遍。最后调用macro函数。如果事先有调用global.PushParam(a),则调用macro函数时传入参数a。由于macro.lua里面没有声明名字为macro的函数,因此控制台提示函数未定义。
我们看到原生脚本除了macro宏之外都是函数名和文件名对应的,一方面是不宜让主程序维护太多lua变量而拖慢速度,另一方面也可能是写脚本的不清楚个中原理不敢乱来。建议查看AI脚本击败三皇一体,这个里面的脚本就已经不是文件和函数一一对应的了。只要清楚了原理,就可以封装许多公用lua函数,写起脚本方便许多。
顺便一提,之前认为不同目录下脚本重名会有干扰,其实是函数名的覆盖而非文件名的冲突。
控制台命令
控制台实际上只有几个少量命令,效果如下:
clear_script
没有参数,顾名思义,清除主程序维护的全局lua变量(猜的)。
run a b
a和b分别是参数,以script为根目录,若b名称的lua函数不存在,执行a目录下的b.lua文件。最后调用b函数。
do
在script目录下写入console.lua函数然后执行。应该是初期调试使用的命令,现在没有用。
rrun a b
和run命令是类似的,区别是不论全局维护的lua函数中有没有b,都要载入b.lua文件。所以我们修改脚本后一般都使用这个命令来重新载入,使得函数体更新。
reload
重新载入编号2的脚本并执行(prelogue)。
c
废弃函数
t
废弃函数
脚本
仙五前采用lua脚本作为主程序的辅助。要学习lua,建议参考果冻想的博客,内容由浅入深,非常充实完整。注意链接里博文是时间倒序的,作为学习我们应该从后往前看。注意下方的评论也值得研究。
脚本调用主程序的函数,严格说来是主程序特意写好的一些接口函数,开放给了脚本。这些函数都有定义,我们早已获得了,附在最后。从IDA可以很方便地看到这些函数对应的效果,包括需要几个参数,有什么效果,是同步还是异步排队执行。
另外补充一句,后定义的函数覆盖先前的,lua自建的函数覆盖主程序开放的。
例如,在macro.lua里面写
1 2 3
| function player.GetHP(a,b) return 0 end
|
那么player.GetHP这个函数就被你玩坏了。
我写的MOD增强工具里就是这么定义新函数的。它们本质上是lua函数,需要在调用过Include之后方能生效。
player
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| SetPlayerAppear Create Destroy Add Remove SetMainPlayer GetMainPlayer SetMoveMode SetPos SetPosID SetAt SetAtPos MoveTo Stop IsArrive Follow Control AddItem GetItemCount ChangeHP ChangeMP ChangeDP GetTargetPlayer GetTargetNpc AddEquip AddMoney AddMagic AddStat RemoveStat AddProperty AddFormula AutoSave SetSpeed Relive CreateSE SetVisible GetDegreeFromNpc GetPos SetAnim AttachNpc DetachNpc AddPointLight RemovePointLight GetWeaponModelID SetPointLightFlash GetLevel GetHP GetMP IsPlayerInTeam GetEquipCount GetMoney SetXiuWei ChangeLevel MoveBackTo SetWeapon IsPlayerInBattle ToggleBaoziMode ChangeYP ChangeDef ChangeMagicDef GetAtk GetMagicAtk GetAt LockPlace GetBuffCount GetRandomBuff SetShiftItem StopSE SetAppear AddTitleList GetTitle GetExp AddExp GetTitleStat ChangeModel AddRefItem RemoveRefItem
|
npc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| TurnToCurrentPlaye TurnToNpcCallback TurnToNpcCallback SetNpcMoveSpace AddPatrolPoint SetPatrolType SetNpcCollisionType SetNpcAnim AddNpcAnimChain SetNpcAnimSpeed StopNpcSE ContinuePatrol StopPatrol StopNpc SetNpcPos SetNpcAppear SetNpcPos3D NpcSetTexture NpcSetHeadRotCallback NpcSetTexture SetNpcAppearTime ScaleToCallback SetNpcAt SetNpcRot SetNpcAtPos SetNpcTurnToPos MoveNpcTo MoveBackNpc RunNpcTo DashTo AddRefItem RemoveRefItem SetHP FloatTo NpcArrive DisableNpc CreateScaledSENpcCB Create CreateFloat Destroy Enable Disable SetAt SetRot SetAtPos SetPos GetPos MoveTo Stop IsArrive TurnToPlayer TurnToNpc TurnTo TurnToPos SetMoveSpace AddPatrolPoint SetPatrolType StopPatrol ContinuePatrol CreateMonster SetFightSpace SetViewSpace SetViewQuotiety SetRefreshTime GetCurrentID SetCollisionType SetAnim ChangeHP AddStat RemoveStat SetSpeed CreateSE SetVisible SetTimer GetAt SetAppear IsCreated GetScriptID GetVisible FloatTo RunTo AddRefItem RemoveRefItem SetHP DashTo MoveBackTo AddAnimChain SetAnimSpeed GetRace GetHP StopSE CreateScaledSE CreateChest CreateObject ChangeDef SetAtkScript SetSEVisible SetPos3D ChangeMagicDef Follow IsFly GetMonsterPic SetAppearTime ScaleTo FollowPlayer GetTemplateID SetTexture SetHeadRot SetHeadRotTo HurtBy GetCurrentAnim SetFollowDist SetMagicDef AttachNpc SetRelaxAnim
|
global
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| GetSelfHP Print CallScript PlayCg BeginScene EndScene Wait AddTimer ClearTimer WaitForNpcPos WaitForNpcAnim WaitForNpcTurn PushParam WaitForNpcDisappear CreateSE ClearSE SetUpdateScript WaitForCameraLerp WaitForPlayerPos WaitForNpcPos3D SetMotionSpeed PlaySound PlayMusic GetMusicID GetMonsterStat GetQuestStat SetWideScreen GetQuestPicID GetMonsterPicID Include WaitForCgEnd GetItemName MusicFadeIn MusicFadeOut SetMonsterStat CreateSERot Restart PlaySoundLoop StopLastSound CreateCameraSE WaitForCameraSE WaitForInfoList WaitForMusicEnd GetGameStat WaitForBattleUpdate SetShopPriceCut WaitForBattleSEEnd SetSoundVolume IsDLCActived PlayFlash ClearFlash EnableSkipDialog WaitForBattleGame SetSnakeMode SetSnakeViewMode IsWaiting PauseTimer CreatePointLight ClearPointLight WaitForShopDlg SetMusicVolume GetMusicVolume SetGameCycle GetGameCycle WaitForPopo ClearCameraSE GetGameMode StopLastLoopSound
|
map
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Change ChangeFog Weather AddEvent StartWave EndWave SceneEffect GetCurrentMapID ChangeNoScript SetAmbColor SetDirColor EnablePreLight SetGrassColor CreateNameSE CreateData GetScriptID ClearAllMonsters ClearAllEvents DestroyMonster SetViewRange
|
ui
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| Message SetDialogHeadSize Dialog Popo Popo_Auto PopoChoose ShowShopDlg ClearShopList AddShopList AddQuest FinishQuest SetPopoFontSize SetDialogFontSize ShowCount SetDialogTextLeft Dialog_t SetSmallRenderPos ShowSmallRender CloseSmallRender ShowPicDlg DialogChoose ShowTimerDlg ShowWorldMap AddMinimapTarget RemoveMinimapTarget ShowSNCDlg CloseFan CloseStartMenu ShowInfoList ShowHelpDlg SetPopoShowTitle ShowBattleGame HideMiniMap ShowPingshanGame ShowModelDlg ShowChiYouGame ClosePingshanGame CloseChiYouGame
|
flag
1 2 3 4
| SetValue GetValue SetBattleValue GetBattleValue
|
camera
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| ChangeCameraPath ChangeCameraFree ChangeCameraStatic ChangeCameraStaticEye ChangeCameraAutoPath ChangeCameraFixDegree Save Resume Shake ChangeCameraBindNpc ResetLerp ChangeCameraStaticToNpc SetFOV SetBindNpcOffset SetTargetYOffset ResetLerpS SetFOVRate LockWheel
|
effect
1 2 3 4 5 6 7 8 9 10 11 12
| BlackWhite Sepia Heat MotionBlur Transition FadeIn FadeOut Clear FadeInWhite FadeOutWhite SetFilterTexture SetFadeTarget
|
battle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| Begin GetRndPlayer GetRndNpc AtkToPlayer CheckNpcPlace AddNpc BeginSummon GetSelfHP Escape MagicToPlayer MagicToNpc GetRndNumber GetActingPlayerID SetDamageScale MakeUpdate ChangePlayerWeapon End ChangeNpc GetActingNpcID SetNpcExpDouble WaitToUpdate ActionTwice GetTargetPlayer GetTargetNpc CheckNpcStat CheckPlayerStat QTE GetPlaceNpcID Loose GetCenterPlayerID MakeNpcQueueFront MakeNpcQueueEnd CheckPlayerPlace GetPlacePlayerID SetSkillScale GetNext Skip SetNpcSpeed GetNpcSpeed SetSoulCount ChangeNpcByID XueShouQTE
|