搜索
热搜: 活动 交友 discuz
查看: 2235|回复: 3

[演示] 【Wiki翻译】< Dota 2 Workshop Tools‎ | Scripting>ThinkerFunctions

[复制链接]

1

主题

5

帖子

154

积分

Lv:2 长袍法师

UID
3529
金币
124
精华
0
节操
-1
发表于 2015-10-20 11:06:32 | 显示全部楼层 |阅读模式

前方高能预警!非战斗人员请尽快登录!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
本帖最后由 Fallever 于 2015-10-20 11:08 编辑

Thinker函数(wiki)
--不知道怎么翻译Thinker,计时器的名字并不是很恰当,Thinker函数实现的是通过时间函数来调用其他函数的功能。
SetThink可以被用于:
        •每隔x秒执行某个函数。
        •安排一个函数从现在开始执行x秒。
        !warning:SetThink不会计算游戏的暂停时间,你可以使用
Timer library by BMD (网页链接)来创建计算游戏暂停时间的函数。

目录[hide]
1、规范
2、实例
        2.1 实例1
        2.2 实例2
        2.3 实例3


1、规范
SetThink 是一个基于基础实体类的方法,它可以通过以下两种方法使用:


           
[C] syntaxhighlighter_viewsource syntaxhighlighter_copycode
void SetThink([function] thinkFn,[string] thinkName,float [initialDelay]) 


--方括号中的是参数的类型。
thinkFn:
        想要执行的函数

另外2个参数是可选的:
thinkName:
--你创建的thinker的名字
        thinker的名字,如果你想在同一实体上使用多个Thinker,请添加这个参数。
initialDelay
        在thinker生效前需要延时的时间。

        
[C] syntaxhighlighter_viewsource syntaxhighlighter_copycode
void SetThink([string] thinkFnName, [table] context, [string] thinkName, [float] initialDelay)

--方括号中的是参数的类型。
thinkFnName:
        想要执行的函数
context:
        一个表/对象.这函数将会被注册在context[thinkFnName]中,换而言之,SetThink使用第一个参数作为在第二个参数种的索引。
thinkName,initialDelay:
        这2个参数是可选的,和上面的意思一样。


你的函数需要返回一个数值或者nil:
        •返回一个数字设置下次的think 时间。
        •返回nil会注销thinker来打断它。

2、实例
2.1  实例1
在控制台每5秒打印一条消息
Print a message to the console every 5 seconds:
Class method:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
  -- scripts/vscripts/addon_game_mode.lua
 
 if CustomGameMode == nil then
   CustomGameMode = class({})
 end
 
 function CustomGameMode:PrintHello ()
   print("Hello world!")
   return 5
 end
 
 function CustomGameMode:InitGameMode ()
   GameRules:GetGameModeEntity():SetThink("PrintHello", self)
 end
 
 function Activate ()
   GameRules.CustomAddon = CustomGameMode()
   GameRules.CustomAddon:InitGameMode()
 end

Ordinary Function:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
-- scripts/vscripts/addon_game_mode.lua

 function PrintHello ()
   print("Hello world!")
   return 5
 end

 function Activate ()
   GameRules:GetGameModeEntity():SetThink(PrintHello)
 end

2.2  实例2
在调用Activate函数15后打印一个消息
Print a message to the console 15 seconds after <code>Activate</code> is called:
Class Method:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
-- scripts/vscripts/addon_game_mode.lua
 
 if CustomGameMode == nil then
   CustomGameMode = class({})
 end
 
 function CustomGameMode:PrintHello ()
   print("Hello world!")
   return nil
 end
 
 function CustomGameMode:InitGameMode ()
   GameRules:GetGameModeEntity():SetThink("PrintHello", self, 15)
 end
 
 function Activate ()
   GameRules.CustomAddon = CustomGameMode()
   GameRules.CustomAddon:InitGameMode()
 end

Ordinary Function:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
 -- scripts/vscripts/addon_game_mode.lua
 
 function PrintHello ()
   print("Hello world!")
   return nil
 end
 
 function Activate ()
   GameRules:GetGameModeEntity():SetThink(PrintHello, 15)
 end


2.3 实例3
当Activate调用时从25开始倒计时,并且暂停时间有效
Count down from 25 when <code>Activate</code> is called while respecting pauses:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
 -- scripts/vscripts/addon_game_mode.lualocal COUNT_DOWN_FROM = 25
 function round (num)
   return math.floor(num + 0.5)
 end


 function Activate ()
   local endTime = round(GameRules:GetGameTime() + COUNT_DOWN_FROM)
   GameRules:GetGameModeEntity():SetThink(function ()
     local delta = round(endTime - GameRules:GetGameTime())
     if delta > 0 then
       print(tostring(delta))
       return 1
     end
   end)
 end



2.4实例4
强制 player 0(第一个位置的玩家)在游戏开始时随机一个英雄:
Force player 0 to pick a random hero when the game starts:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
-- scripts/vscripts/addon_game_mode.lua
 
 function RandomHeroThink ()
   local player0 = PlayerResource:GetPlayer(0)
   if player0 then
     PlayerResource:SetHasRepicked(0)
     player0:MakeRandomHeroSelection()
   else
     return 0.5
   end
 end
 
 function Activate ()
   GameRules:GetGameModeEntity():SetThink(RandomHeroThink, "RAND")
 end





点评

海!外直播 t.cn/RxBC0c2 禁闻视频 t.cn/RJvO789 这是哪个国家?治国基本靠裸官,反腐基本靠小三,环保基本靠口号,雾霾基本靠风吹,幸福基本靠央视,前途基本靠父母,命运基本靠投胎,科技基本靠引进,冤情基本靠上   发表于 2019-9-7 08:48

评分

参与人数 2金币 +50 互助 +10 节操 -1 收起 理由
blockbaster + 50 + 10
白睫哥 -1 扣你节操以视鼓励

查看全部评分

回复

使用道具 举报

1

主题

5

帖子

154

积分

Lv:2 长袍法师

UID
3529
金币
124
精华
0
节操
-1
 楼主| 发表于 2015-10-20 11:06:33 | 显示全部楼层
论坛排版好丑= =
回复 支持 反对

使用道具 举报

5

主题

28

帖子

299

积分

Lv:2 长袍法师

UID
4933
金币
330
精华
0
节操
-1
发表于 2016-2-3 20:48:43 | 显示全部楼层
好文章,解我所惑
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|Archiver|手机版|小黑屋|AMHC!dota2rpg~ ( 闽ICP备14009209  

GMT+8, 2019-9-17 04:47 , Processed in 0.156554 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc. Theme.Yeei

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