找回密码
 点一下
查看: 1563|回复: 10

如何将聊天字符(整数)输入到整数变量中

[复制链接]
发表于 2012-8-16 14:53:27 | 显示全部楼层 |阅读模式
如题:
这是我写的代码:
call DisplayTimedTextToForce( GetPlayersAll(), 3, "请输入开始值:")
call PolledWait(10)
set startA=S2I(GetEventPlayerChatString())
call DisplayTimedTextToForce( GetPlayersAll(), 3, "请输入结束值:")
call PolledWait(10)
set endB=S2I(GetEventPlayerChatString())

本想把输入的开始值输入整型变量startA中,把输入的结束值输入整型变量endB中,实际发现不行,两个整型变量的还是初始值0

我还以为像C语言scanf函数一样呢
求解决。。。。。
发表于 2012-8-16 15:56:59 | 显示全部楼层
GetEventPlayerChatString
这个函数是获取事件捕捉到的玩家输入字符,光是在一个T里用等待是无法获取的

所以应该拆开来写,要玩家输入的T触发后,开启第二个T捕捉玩家输入startA的值,捕捉到后开启第三个T用来捕捉endB的值
回复

使用道具 举报

 楼主| 发表于 2012-8-16 18:15:49 | 显示全部楼层
能否给个实例呢?
回复

使用道具 举报

发表于 2012-8-16 19:04:29 | 显示全部楼层
[trigger]Chat
    事件
        玩家 - 玩家 1 (红色) types a chat message containing <空的字符串> as A子串
    环境
    动作
        游戏 - Display to (All players) the text: (Entered chat string)
[/trigger]
T是面向事件的...
很多函数都必须配合事件使用,GetEventPlayerChatString函数只能在PlayerChatEvent事件里面使用才有效。
回复

使用道具 举报

 楼主| 发表于 2012-8-16 19:33:18 | 显示全部楼层
根据你提供的T,(Entered chat string)是否提示玩家输入的字符串,
另外GetEventPlayerChatString函数该放在哪?
回复

使用道具 举报

发表于 2012-8-16 23:06:14 | 显示全部楼层
(Entered chat string)就是GetEventPlayerChatString...
你写个T,转成JASS就明白了...
回复

使用道具 举报

发表于 2012-8-17 00:04:45 | 显示全部楼层
JASS里面是没有getchar和scanf的,也没有cin,也没有System.in.readline......
所以应该拆开来写,要玩家输入的T触发后,开启第二个T捕捉玩家输入startA的值,捕捉到后开启第三个T用来捕捉endB的值
要想实现想要的效果,你需要按照沙发的提示来做......
回复

使用道具 举报

 楼主| 发表于 2012-8-17 08:04:49 | 显示全部楼层
还是没搞明白,请实例。。。。



function Trig_chat_Actions takes nothing returns nothing
    call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_1383" )
    set udg_startA=S2I(GetEventPlayerChatString())
endfunction
//===========================================================================
function InitTrig_chat takes nothing returns nothing
    set gg_trg_chat = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_chat, Player(1), "startA", true )
    call TriggerAddAction( gg_trg_chat, function Trig_chat_Actions )
endfunction

这个还是不对。
回复

使用道具 举报

发表于 2012-8-17 17:43:37 | 显示全部楼层
[trigger]I
    事件
        地图初始化
    条件
    动作
        游戏 - 对 (所有玩家) 发送文本信息: 输入开始值:
        触发器 - 开启 A <预设>
        等待 10.00 秒游戏时间
        触发器 - 关闭 A <预设>
        游戏 - 对 (所有玩家) 发送文本信息: 输入结束值:
        触发器 - 开启 B <预设>
        等待 10.00 秒游戏时间
        触发器 - 关闭 B <预设>
        游戏 - 对 (所有玩家) 发送文本信息: (开始值为: + (转换 (转换 A 为整数) 为字符串))
        游戏 - 对 (所有玩家) 发送文本信息: (结束值为: + (转换 (转换 B 为整数) 为字符串))
[/trigger]

[trigger]A
    事件
        玩家 - 玩家1(红色) 输入的聊天信息包含 <空字符串> ,匹配方式: 包含字符串
    条件
    动作
        设置 A = (输入的聊天信息)
[/trigger]

[trigger]B
    事件
        玩家 - 玩家1(红色) 输入的聊天信息包含 <空字符串> ,匹配方式: 包含字符串
    条件
    动作
        设置 B = (输入的聊天信息)
[/trigger]

你需要知道 GetEventPlayerChatString 并不能获得“最后输入的聊天信息”,只能获得“当前输入的聊天信息”,它只能在“输入的聊天信息”事件中使用
回复

使用道具 举报

发表于 2012-8-17 17:48:47 | 显示全部楼层
[jass]
globals
    string udg_stdin
endglobals

function HaveString takes nothing returns boolean
    set udg_stdin = GetEventPlayerChatString()
    //将玩家输入的聊天信息储存到变量udg_stdin当中
    //注意GetEventPlayerChatString函数只能在TriggerRegisterPlayerChatEvent事件触发时执行的动作或条件中使用
    return false
endfunction
                           
function GetString takes player whichPlayer,real timeout returns string
    local trigger t = CreateTrigger()
    local timer tm = CreateTimer()
    call TimerStart(tm,timeout,false,null)
    //开启计时器,用于限时输入数据
    call TriggerRegisterPlayerChatEvent(t,Player(0),"",false)
    call TriggerAddCondition(t,Condition(function HaveString))
    //为触发添加事件和条件(当成动作使用),使得玩家在输入数据的时候会执行HaveString函数
    set udg_stdin = ""
    loop
        exitwhen udg_stdin != ""
        exitwhen TimerGetRemaining(tm) <= 0
        call TriggerSleepAction(0.00)
        //循环等待玩家输入数据(检查变量)或时间结束
    endloop
    call DestroyTrigger(t)
    call DestroyTimer(tm)
    set tm = null
    set t = null
    //删除计时器和触发器
    return udg_stdin   
    //返回数据
endfunction
[/jass]

用Jass的话,可以这样写
set s = GetString(Player(0),10)
作用是让玩家一在十秒内输入一段字符串并储存在变量s里面
回复

使用道具 举报

发表于 2012-8-17 18:18:55 | 显示全部楼层
Jscm.w3x (13 KB, 下载次数: 7)
演示地图在这里

建议楼主先多使用一下T,熟悉一下触发器的基本结构,再学习怎么写Jass

使用“触发编辑器”中的“转换为自定义脚本alt+x”功能,能够将T转换为Jass,相互对照可以帮助你快速入门Jass
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-10-1 08:12 , Processed in 0.032930 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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