如何以不滞后的方式获得Vault的顶级帐户?

时间:2015-08-20 01:41:51

标签: bukkit bukkit-vault

Vault是Bukkit的插件,也是经济API 。它可用于发布玩家资金的更新,并在服务器中用作货币。

VaultAPI 也是open-sourced at Github

我正在尝试获得拥有最多金额的帐户,但这在Vault的API中并不是直截了当的。

所以,我试图做的是:

  
      
  1. 迭代所有OfflinePlayers并比较货币值
  2.   
  3. 恢复最大值
  4.   

代码:

## Tested Method
sub do_fieldNames {
    my ($self, $sql, $has_results) = @_;
    my ($sth, $rv, @row, @query_results);

    ## Execute the SQL statement
    $sth = $$self->prepare($sql);
    $rv = $sth->execute or &error(3306, __LINE__, __FILE__, $sql, $$self->errstr);
    return undef unless $rv > 0;

    ## SOLUTION >> Field Name arrayref, part of the standard included DBI Perl Module
    my $field_name_arrayref = $sth->{NAME};

    ## Parse the results
    if ($has_results || $sql =~ /^select/i) { 
        while (@row = $sth->fetchrow_array) {
            push @query_results, [ @row ];      
        }
    }

    ## Return results
    return (\@query_results, $field_name_arrayref) ;

}

我尝试迭代所有次数以找到最高金额,但是当你有太多玩家时它会落后很多。

有没有办法找到哪些玩家的钱最多?

1 个答案:

答案 0 :(得分:2)

有几种方法可以实现这一目标。

首先,您可以使用Essentials' UserBalanceUpdateEvent并确定余额是否高于配置中的高分(在这种情况下,您使用新值及其所属的UUID更新存储的值)。

其次,您可以遍历OfflinePlayers,但使用异步任务。