长者卷轴在线插件

这是我第一次使用 Lua,但不是第一次编程。我有 Java、Action Script 和 HTML 的经验。我正在尝试为 Elder Scroll Online 创建一个 addon。我在以下链接中找到了 ESO API

http://wiki.esoui.com/API#Player_Escorting

我正在尝试创建一个函数,返回每个公会成员在银行存入的物品数量。我目前的代码如下:

function members()
    for i=0, GetNumGuildEvents(3, GUILD_EVENT_BANKITEM_ADDED)
    do
        GetGuildEventInfo(3, GUILD_EVENT_BANKITEM_ADDED, i)
    end

我在引用进行特定存款的角色方面遇到了麻烦。一旦我能够做到这一点,我预见到会创建一个链接列表来存储角色名称和存款的物品数量的 integer/double 计数器。如果有人知道如何引用给定存款的角色,那将不胜感激。

点赞
用户501459
用户501459

我没有游戏可以测试,API文档也比较简略,因此接下来是我所推测的(我很熟悉Lua,曾经为魔兽世界编写过程序)。

Lua支持多重赋值,函数可以返回多个值:

function foo()
    return 1, "two", print
end
local a, b, c = foo()
c(a,b) -- 输出: 1, "two"

GetGuildEventInfo返回如下内容:

eventType, secsSinceEvent, param1, param2, param3, param4, param5

考虑到此函数适用于多种公会事件类型,我预计param1到param5是与你查询的特定事件相关的。打印出来看看你得到了什么。如果您有一个可用的 print 函数,其功能类似于 Lua 的标准 print 函数(即接受多个参数并打印出所有参数),您可以简单地编写:

print(GetGuildEventInfo(3,GUILD_EVENT_BANKITEM_ADDED,i))

来打印其所有返回值。

如果您没有 print,应该编写一个。我看到了函数 LogChatText,它看起来很像是可以将文本写入聊天窗口的东西。如果是这样的话,您可以编写类似Lua的打印函数:

function print(...)
    LogChatText(table.concat({...}, ' '))
end

如果您通过实验发现,例如,param1 是存款人的姓名,您可以编写:

local eventType, secsSinceEvent, playerName = GetGuildEventInfo(3,GUILD_EVENT_BANKITEM_ADDED, i)

我预见到我会创建一个链接列表,存储角色名称和一个整数/双精度计数器来存储存款的数量。

在Lua、Java和ActionScript中均不要使用链接列表进行此操作(在Lua中也是如此)。Lua实际上是建立在哈希表(又称“表”)之上的,Lua中的表非常强大和通用,可以使用任何类型作为键或值。

local playerEvents = {} -- 创建一个表
playerEvents["The Dude"] = 0 -- 将字符串 "The Dude" 与值 0 关联
print(playerEvents["The Dude"]) -- 检索与字符串 "The Dude" 关联的值
playerEvents["The Dude"] = playerEvents["The Dude"] + 1 -- 将 1 添加到与“The Dude”之前相关联的值

如果使用一个没有写入的键来索引表,您将得到 nil。您可以使用它来确定您是否已经为玩家创建了一个条目。

我们要假装param1包含玩家名称。找到其实际位置后,再修复此问题:

local itemsAdded = {}
function members()
    for i=0, GetNumGuildEvents(3, GUILD_EVENT_BANKITEM_ADDED ) do
        local eventType, secsSinceEvent, playerName = GetGuildEventInfo(3, GUILD_EVENT_BANKITEM_ADDED, i)
        itemsAdded[playerName] = (itemsAdded[playerName] or 0) + 1
    end
end

itemsAdded 现在包含每个玩家添加的物品数量。为了打印它们:

for name, count in pairs(itemsAdded) do
    print(string.format("Player %s has added %d items to the bank.", name, count))
end
2014-04-05 03:16:14