查看: 151|回复: 9

[问题求助] 求一个7X能实现区域传送功能的脚本

[复制链接]

78

时沙

1

精华

1

主题

声望: 523   虚弱: 0

Lv.3

炉石祖国万岁!!

发表于 2019-10-8 22:43:14 | 显示全部楼层 |阅读模式
100DKP
研究了好几天了,实在是不会弄,太菜了,请大佬一定要帮帮忙~我要走火入魔了。。。
我觉得我要的这个功能实在是个好功能,如果有大佬给出真的可以修复99.9%的区域传送问题。
事情是这样的,我之前一直在研究8X版本,发现新的法师塔下面的巫师圣殿缺少一个区域触发areatrigger,本来想通过db2和数据库加上,结果倒腾了半天都不行,后来下了serayn大佬的OpenLCore735,发现有类似的问题,比如诅咒之地的黑暗之门传送到地狱火半岛没问题,从地狱火半岛的黑暗之门传送到诅咒之地就出了问题,原来的areatrigger:4352没有了,548版本就有,但是735确实没了,在db2里以及数据库里都加上也都没有效果,这个用.debug areatrigger就能看出,心想可能需要客户端打补丁?这就研究了3、4天,失败失败,还是失败,顶多修改已有的areatrigger,但是不能添加自己想要的areatrigger。
再后来,我突然想到是不是可以通过修改核心或者添加脚本来实现,觉得十分可行,请教了几个群里的大佬,给了几个方向,又研究了3、4天,ε=(´ο`*)))唉失败失败,还是失败,只能来论坛里请教论坛里各位大佬,能不能解决一下我的或者说整个7X8X版本的区域传送问题。
另外,自己想了一个逻辑,拿出来让大佬笑话笑话:取地图坐标x1,x2,y1,y2,z1,z2,当player的坐标值positionx(简称px),positiony(简称py),positionz(简称pz),满足条件(x1<px<x2)&&(y1<py<y2)&&(z1<pz<z2)时,player->TeleportTo(x,y,z,map)
最后,跪求大佬帮忙,只采纳735往后版本的方案~~~~~~~
最低要求:如果有可行的其他方案也会采纳,比如修改db2,数据库hotfixes之类的。
最想要的:如果大佬能给代码里关联个数据库,那就完美了,100dkp如若嫌少,我会再追加,全部身家献上都可以,请大佬一定要帮忙啊



78

时沙

1

精华

1

主题

声望: 523   虚弱: 0

Lv.3

炉石祖国万岁!!

 楼主| 发表于 2019-10-12 20:59:14 | 显示全部楼层
不知道可不可以自己选择自己的回复为最佳答案,算是已经自行解决了,提示一下就算分享了,毕竟搞了这么长时间,太菜了只能在核心中player.cpp添加判断,每次更改要全部重新生成20分钟...用到的函数areaId,GetPositionX(),GetPositionY(),GetPositionZ(),剩下的自己写判断吧,话说最近论坛太安静了,难道天气变冷了大佬都藏起来了吗

41

时沙

0

精华

1

主题

声望: 40   虚弱: 0

Lv.1

发表于 2019-10-9 21:26:50 | 显示全部楼层
#define RANGE_DISTANCE 9.0f
#define MAPID 0

struct Position2d
{
        float x, y, z, o;
};

static Position2d m_teleport[1] =
{
  { -13246.55f, 194.03f, 31.00f, 1.09f }
};

class Tele_Trigger : public CreatureScript
{
  public:
          Tele_Trigger() : CreatureScript("Tele_Trigger") { }

          struct Tele_TriggerAI : public ScriptedAI
          {
                  Tele_TriggerAI(Creature * pCreature) : ScriptedAI(pCreature)
                  {
                       me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
                       me->SetFloatValue(OBJECT_FIELD_SCALE_X, 0);
                  }

                  void MoveInLineOfSight(Unit * who)
                  {
                          if(!who || (!who->isAlive()) && who->GetTypeId() != TYPEID_PLAYER)
                                  return;

                          if(me->IsWithinDistInMap(who, RANGE_DISTANCE))
                          {
                              if(me->GetDistance(who) <= RANGE_DISTANCE)
                                                          {

                                    if(who->ToPlayer()->GetSession()->GetSecurity() == SEC_PLAYER)
                                                                        {
                                      me->MonsterSay("You cannot be up here!", LANG_UNIVERSAL, who->GetGUID());      
                                      who->ToPlayer()->TeleportTo(MAPID, m_teleport[0].x, m_teleport[0].y, m_teleport[0].z, m_teleport[0].o);
                                                                        }
                                                                        else
                                                                        {
                                        // We don't want to kick GameMasters off of there.
                                                                        }
                                                          }
                                                  }
                  }
          };

          CreatureAI * GetAI(Creature * c) const
          {
                  return new Tele_TriggerAI(c);
          }
};

void AddSC_npc_tele_trigger()
{
   new Tele_Trigger();
}
试试这个

78

时沙

1

精华

1

主题

声望: 523   虚弱: 0

Lv.3

炉石祖国万岁!!

 楼主| 发表于 2019-10-9 21:37:08 | 显示全部楼层
qf007 发表于 2019-10-9 21:26
#define RANGE_DISTANCE 9.0f
#define MAPID 0

谢谢大佬,我试试,问一下这个cpp放在哪个位置?scripts-custom里面吗?

41

时沙

0

精华

1

主题

声望: 40   虚弱: 0

Lv.1

发表于 2019-10-9 21:42:32 | 显示全部楼层
嗯,搞往别处应该也可以

78

时沙

1

精华

1

主题

声望: 523   虚弱: 0

Lv.3

炉石祖国万岁!!

 楼主| 发表于 2019-10-9 23:23:26 | 显示全部楼层
qf007 发表于 2019-10-9 21:26
#define RANGE_DISTANCE 9.0f
#define MAPID 0

大佬你有做测试吗?我试了一下不行,首先这个脚本看起来像是通过判断距离生物远近来触发传送不是很合我的要求,毕竟距离是个球,像黑暗之门之类的如果想要实现传送,可能要加N个隐藏生物,如果少了会跟官服相差太远,其次我试了一下确实没有触发,绑定的npc直接消失不见

41

时沙

0

精华

1

主题

声望: 40   虚弱: 0

Lv.1

发表于 2019-10-10 10:23:47 | 显示全部楼层
我觉得你可以参考红玉圣殿BOSS的脚本,暮光撕裂线就是方形的判定

17

时沙

0

精华

0

主题

声望: 153   虚弱: 0

Lv.2

炉石

发表于 2019-10-13 00:43:30 | 显示全部楼层
你其实可以做成传送门

94

时沙

0

精华

32

主题

声望: 1065   虚弱: 0

Lv.3

炉石

发表于 6 天前 | 显示全部楼层
数据库区有SQL版,改下字段就行了

78

时沙

1

精华

1

主题

声望: 523   虚弱: 0

Lv.3

炉石祖国万岁!!

 楼主| 发表于 6 天前 发表自手机触屏版 | 显示全部楼层
lcfllx 发表于 2019-10-16 11:22
数据库区有SQL版,改下字段就行了

大佬…我帖子上提过了7x版本添加不了,改db2也不行
您需要登录后才可以回帖 登录 | 入驻

本版积分规则

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