gwh6662 发表于 2023-7-14 10:32:16

怎么实现当玩家1获得资源时玩家2获得等量资源

本帖最后由 gwh6662 于 2023-7-22 20:48 编辑

如题,触发怎么实现玩家1获得500食物时玩家2也获得500食物。


我想用堆积属性,但是这个条件只能代表当前拥有量,没法表示“获得”这一属性,玩家1不消耗这500食物这个条件就一直满足。

cly806 发表于 2023-7-15 02:39:09

用编程吧,玩家1或得a资源,玩家2也获得a资源不就行了,研究一下语法和数学模型,试着自己写写

我是谁004 发表于 2023-7-15 07:39:37

需要用xs来实现。对一种资源R设置一个变量P,和一条规则:
当R>P,则玩家2获得(R-P)资源,然后P=R;
当R<P,则只设置P=R。

gwh6662 发表于 2023-7-16 20:55:09

好的,我去试一下

gwh6662 发表于 2023-7-18 22:37:48

void test()
{
float a=xsPlayerAttribute(1,0);
float b=xsPlayerAttribute(2,0);
if(a<xsPlayerAttribute(1,0)){
b=b+xsPlayerAttribute(1,0)-a;
xsSetPlayerAttribute(2,0,b);}
}


这样写有问题吗,我没啥编程基础,想了半天如何实现检测到食物资源的增加,后来才想到这个程序是从上往下运行的,调用两次xsPlayerAttribute作差,但是好像这个间隔太短了,还是没法检测到。

gwh6662 发表于 2023-7-19 17:32:50

我想到怎么做了,搞一个循环触发,定时器两秒,持续检测玩家1的食物量

cly806 发表于 2023-7-19 19:29:41

gwh6662 发表于 2023-7-19 17:32
我想到怎么做了,搞一个循环触发,定时器两秒,持续检测玩家1的食物量

这个方法明显是不行的

cly806 发表于 2023-7-19 19:31:04

gwh6662 发表于 2023-7-18 22:37
void test()
{
float a=xsPlayerAttribute(1,0);


逻辑明显有问题,没有体现a或500b获500的预期效果

我是谁004 发表于 2023-7-19 21:23:32

gwh6662 发表于 2023-7-18 22:37
void test()
{
float a=xsPlayerAttribute(1,0);

同一次调用里面当然是一样的结果了,所以要和上一次调用时的值进行比较,可以用变量来实现。
以下程序,init()开始只执行一次,目的是初始化变量的值为食物量;test()循环执行,用来判断和增加食物:


void init() {
      float r = xsPlayerAttribute(1, 0);
      xsSetTriggerVariable(1, r);
}

void test() {
      float p = xsTriggerVariable(1);
      float r = xsPlayerAttribute(1, 0);
      float b = xsPlayerAttribute(2, 0);
      
      if(r > p){
                xsSetPlayerAttribute(2, 0, b + r - p);
      }
      xsSetTriggerVariable(1, r);
}
页: [1]
查看完整版本: 怎么实现当玩家1获得资源时玩家2获得等量资源