找回密码
 点一下
查看: 3699|回复: 7

『翻译版』Multiboard per player tutorial(完结)

[复制链接]
发表于 2008-7-21 13:35:15 | 显示全部楼层 |阅读模式
欢迎来看这篇教程!本教程讲解内容为为每个玩家创建不同的多面板。
废话不说,下面我们就开始...

需要:
1. World Editor  魔兽争霸编辑器
2. 基础JASS知识

变量:
假设地图中有10个玩家,那么我们就需要10个不同的多面板变量, 设置为Multiboard[ARRAY]. ARRAY是玩家数量,例如玩家1就是Multiboard[1], 玩家2就是Multiboard[2],以此类推。

定义i为一个整数变量。

现在新建一个触发器,把触发转化为自定义文本. 这样GUI就转换为JASS格式。
现在把下面的代码写入JASS触发:

[jass]function *TRIGGERNAME* takes nothing returns nothing
    local integer i = 1
    call TriggerSleepAction( 0.00 )

    loop
        exitwhen i > 12
        set udg_Multiboard = CreateMultiboardBJ( ROWS, COLUMNS, "TITLE" )
        call MultiboardDisplayBJ( false, udg_Multiboard )
        set i = i + 1
    endloop

    set i = 1
    loop
        exitwhen i > 12
        if ConvertedPlayer(i) == GetLocalPlayer() then
            call MultiboardDisplayBJ( true, udg_Multiboard )
        endif
        set i = i + 1
    endloop
endfunction[/jass]
现在JASS触发的函数名为*TRIGGERNAME* 类型,假如这个函数不存在,这个触发就不会运行。
想要借测函数是否存在,只要右击触发,取消选择允许触发 , 再选择允许触发,假如函数存在,不会有任何提示, 假如函数不存在, 编辑器会显示错误提示.

现在每个玩家都有一个单独的多面板显示.这是如何运行的呢?在每个玩家的电脑里有创建了12个多面板,但是这些多面板都隐藏起来了,然后使用GetLocalPlayer()(本地玩家)使玩家各自的电脑显示玩家自己的多面板。

提示:假如游戏中玩家人数少于12个, 改变下面代码中的***为玩家数量就可以了.
[jass]function *TRIGGERNAME* takes nothing returns nothing
    local integer i = 1
    call TriggerSleepAction( 0.00 )

    loop
        exitwhen i > ***
        set udg_Multiboard = CreateMultiboardBJ( 3, 5, "Title" )
        call MultiboardDisplayBJ( false, udg_Multiboard )
        set i = i + 1
    endloop

    set i = 1
    loop
        exitwhen i > ***
        if ConvertedPlayer(i) == GetLocalPlayer() then
            call MultiboardDisplayBJ( true, udg_Multiboard )
        endif
        set i = i + 1
    endloop
endfunction[/jass]
接着我们创建一个新的触发器来设置玩家的多面板内容.
这里是设定在RPG地图中,所以使用这个多面板系统来显示技能等级。
下面是触发:
[trigger]
设置玩家1
事件
时间 - 游戏开始0.05秒
条件
动作
多面板 - Set the text for Multiboard[1] item in column 1, row 1 to Cooking
多面板 - Set the text for Multiboard[1] item in column 1, row 2 to Fishing
多面板- Set the text for Multiboard[1] item in column 1, row 3 to Fletching
多面板- Set the text for Multiboard[1] item in column 1, row 4 to Herblaw
多面板 - Set the text for Multiboard[1] item in column 1, row 5 to Mining
多面板 - Set the text for Multiboard[1] item in column 1, row 6 to Smithing
多面板 - Set the width for Multiboard[1] item in column 0, row 0 to 5.50% of the total screen width
多面板 - Set the display style for Multiboard[1] item in column 0, row 0 to Show text and Hide icons
多面板 - Set the text for Multiboard[1] item in column 2, row 1 to (String(Cooking[1]))
多面板 - Set the text for Multiboard[1] item in column 2, row 2 to (String(Fishing[1]))
多面板 - Set the text for Multiboard[1] item in column 2, row 3 to (String(Fletching[1]))
多面板 - Set the text for Multiboard[1] item in column 2, row 4 to (String(Herblaw[1]))
多面板 - Set the text for Multiboard[1] item in column 2, row 5 to (String(Mining[1]))
多面板 - Set the text for Multiboard[1] item in column 2, row 6 to (String(Smithing[1]))[/trigger]

现在已经为玩家1设置好了多面版的行和列,假如其他玩家也要有同样设置,把触发复制一下 ,然后把Multiboard[1]改为 Multiboard[PlayerNumber]。

上面GUI触发的JASS模板:

[jass]function CreateMultiboardEx_ColumnCount takes nothing returns integer
   return 4 //多面板的列数
endfunction

function CreateMultiboardEx_RowCount takes nothing returns integer
   return 4 //多面板的行数
endfunction

function CreateMultiboardEx_Width takes integer row,integer column returns real
   return 0.06 //单项的宽度
endfunction

function CreateMultiboardEx_Val takes integer row,integer column returns string
   return "" //显示的字符串
endfunction

function CreateMultiboardEx_Icon takes integer row,integer column returns string
   return "" //显示的图标
endfunction

function UpdateMultiboardEx takes multiboard mb,integer row,integer column,string val,string icon,real width returns nothing
local multiboarditem mbi=MultiboardGetItem(mb,row,column)
call MultiboardSetItemStyle(mbi,val!="",icon!="")
if val!="" then
     call MultiboardSetItemValue(mbi,val)
endif
if icon!="" then
     call MultiboardSetItemIcon(mbi,icon)
endif
call MultiboardSetItemWidth(mbi,width)
call MultiboardReleaseItem(mbi)
set mbi=null
endfunction

//假如想为所有玩家创意同一个多面板,设置p==null
function CreateMultiboardEx takes player p returns multiboard
local multiboard mb=CreateMultiboard()
local multiboarditem mbi
local string val
local string icon
local integer column=0
local integer row=0
    if p==null then
        call MultiboardDisplay(mb,true)
    else
        call MultiboardDisplay(mb,GetLocalPlayer()==p)
    endif
    loop
        exitwhen row>CreateMultiboardEx_RowCount()
        set column=0
        loop
            exitwhen column>CreateMultiboardEx_columnCount()
            set val=CreateMultiboardEx_Val(row,column)
            set icon=CreateMultiboardEx_Icon(row,column)
            set mbi=MultiboardGetItem(mb,row,column)
            call MultiboardSetItemStyle(mbi,val!="",icon!="")
            if val!="" then
                call MultiboardSetItemValue(mbi,val)
            endif
            if icon!="" then
                call MultiboardSetItemIcon(mbi,icon)
            endif
            call MultiboardSetItemWidth(mbi,CreateMultiboardEx_Width(row,column))
            call MultiboardReleaseItem(mbi)
            set column=column+1
        endloop
        set row=row+1
    endloop
set mbi=null
set bj_lastCreatedMultiboard=mb
set mb=null
return bj_lastCreatedMultiboard
endfunction[/jass]

评分

参与人数 1威望 +52 收起 理由
kook + 52 比我勤快多了..

查看全部评分

发表于 2008-7-21 16:59:25 | 显示全部楼层
我是到处收藏帖子的
有魔兽再看内容

貌似本地玩家
回复

使用道具 举报

发表于 2008-7-21 18:26:26 | 显示全部楼层
什么意思,完全看不懂
回复

使用道具 举报

发表于 2008-7-22 14:31:56 | 显示全部楼层
呃 这没必要翻译把~做个演示就OK 而且这不会很难
回复

使用道具 举报

发表于 2008-7-22 17:26:15 | 显示全部楼层
引用第1楼随心璀璨于2008-07-21 16:59发表的  :
我是到处收藏帖子的
有魔兽再看内容

貌似本地玩家

55……多面板本来就可以用到本地玩家…………
貌似并不是只要有本地玩家就掉线的
回复

使用道具 举报

发表于 2008-8-20 10:14:50 | 显示全部楼层

1

加个图片啊 看不懂啊
回复

使用道具 举报

发表于 2008-9-29 11:55:43 | 显示全部楼层
.........jass看不懂饿~~~~~~~~~~
回复

使用道具 举报

发表于 2008-10-10 01:34:44 | 显示全部楼层
这行写错了
       exitwhen column>CreateMultiboardEx_columnCount()

应该是
       exitwhen column>CreateMultiboardEx_ColumnCount()
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 22:37 , Processed in 0.193386 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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