关灯
开启左侧

T端魔兽世界私服中一个前后上下传送的GM命令

  [复制链接]
admin实名认证 发表于 2016-4-23 17:22:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
该GM命令的适用方法:
.warp <方向> <距离> <on>

例如1: .warp y 5 on
这个你将要向前传送5码距离


例如2: .warp y 5
这个你将要向前传送5码距离, 有可能你会掉落虚空

例如3: .warp y -5
这个你将要向后传送5码距离

y = 向前或则向后
x = 向左或则向右
z = 向上或则向下
o = 旋转吧??这个不太清楚了


下面是代码

// LilleCarl made this based on code from Pwntzyou. So fuck you.
#include "Chat.h"
#include "Language.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "Opcodes.h"
#include "Common.h"

#define MSG_COLOR_MAGENTA      "|cffff00ff"
#define MSG_COLOR_WHITE        "|cffffffff"

class warp_commandscript : public CommandScript
{
public:
    warp_commandscript() : CommandScript("warp_commandscript") { }

    ChatCommand* GetCommands() const
    {
        static ChatCommand commandTable[] =
        {
            { "warp",           SEC_MODERATOR,      false, &HandleWarpCommand,       "", NULL },
            { NULL,             SEC_PLAYER,         false, NULL,                     "", NULL }
        };
        return commandTable;
    }

    static bool HandleWarpCommand(ChatHandler* handler, char const* args)
    {
        // Based on a concept by Pwntzyou
        if (!*args)
            return false;

        Player* _player = handler->GetSession()->GetPlayer();

        char* arg1 = strtok((char*)args, " ");
        char* arg2 = strtok(NULL, " ");
        char* arg3 = strtok(NULL, " ");

        if (!arg1 || !arg2)
            return false;

        bool useVMap = false;
        if(arg3)
            useVMap = !strcmp("on", arg3);

        char dir = arg1[0];
        float amount = float(atof(arg2));

        float x = _player->GetPositionX();
        float y = _player->GetPositionY();
        float z = _player->GetPositionZ();
        float o = _player->GetOrientation();

        switch (dir)
        {
        case 'x':
            {
                x = x + cos(o-(M_PI/2))*amount;
                y = y + sin(o-(M_PI/2))*amount;

                handler->PSendSysMessage("%s[Warp Info]%s You teleported %g yards in x direction",MSG_COLOR_MAGENTA,MSG_COLOR_WHITE,amount);
            }
            break;
        case 'y':
            {
                x = x + cosf(o)*amount;
                y = y + sinf(o)*amount;

                handler->PSendSysMessage("%s[Warp Info]%s You teleported %g yards in y direction",MSG_COLOR_MAGENTA,MSG_COLOR_WHITE,amount);
            }
            break;
        case 'z':
            {
                z += amount;

                handler->PSendSysMessage("%s[Warp Info]%s You teleported %g yards in z direction",MSG_COLOR_MAGENTA,MSG_COLOR_WHITE,amount);
            }
            break;
        case 'o':
            {
                o = Position::NormalizeOrientation((amount * M_PI/180.0f)+o);

                handler->PSendSysMessage("%s[Warp Info]%s You rotated %g degrees (%g radians)",MSG_COLOR_MAGENTA,MSG_COLOR_WHITE,amount,amount * M_PI / 180.0f);
                handler->PSendSysMessage("%sCurrent radian/degree: %g %g",MSG_COLOR_WHITE,o,o*180.0f/M_PI);
            }
            break;
        }

        if (useVMap && z == _player->GetPositionZ())
        {
            z = _player->GetMap()->GetHeight(x, y, MAX_HEIGHT);
           handler->PSendSysMessage("%s[Warp Info]%s You were also teleported %g yards in z direction to be on ground.",MSG_COLOR_MAGENTA,MSG_COLOR_WHITE, z - _player->GetPositionZ());
        }
        else
        {
            if (abs(_player->GetMap()->GetHeight(x, y, MAX_HEIGHT) - z) >= 0.5f)
            {
                WorldPacket data(12);
                data.SetOpcode(SMSG_MOVE_SET_CAN_FLY);
                data.append(_player->GetPackGUID());
                data << uint32(0);                                      // unknown
                _player->SendMessageToSet(&data, true);
                handler->PSendSysMessage("%s[Warp Info]%s Enabled fly cheat, we expect you do not want to fall down.",MSG_COLOR_MAGENTA,MSG_COLOR_WHITE);
            }
        }

        _player->NearTeleportTo(x,y,z,o);

        return true;
    }
};

void AddSC_warp_commandscript()
{
    new warp_commandscript();
}


回复下载完整代码


游客,如果您要查看本帖隐藏内容请回复


标签:魔兽世界
 

精彩评论1

倒序浏览
我回来了 发表于 2016-11-7 10:22:43 | 显示全部楼层
 
感谢楼主分享,祝愿吾爱尚玩越来越好!
 
VIP介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 最佳新人

    注册账号后积极发帖的会员
  • 活跃会员

    经常参与各类话题的讨论,发帖内容较有主见
  • 热心会员

    经常帮助其他会员答疑
  • 推广达人

    积极宣传本站,为本站带来更多注册会员
  • 宣传达人

    积极宣传本站,为本站带来更多的用户访问量
  • 灌水之王

    经常在论坛发帖,且发帖量较大
  • 突出贡献

    长期对论坛的繁荣而不断努力,或多次提出建设性意见
  • 优秀版主

    活跃且尽责职守的版主
  • 荣誉管理

    曾经为论坛做出突出贡献目前已离职的版主
  • 论坛元老

    为论坛做出突出贡献的会员

0关注

5粉丝

3421帖子

排行榜
作者专栏

QQ交流群&&微信订阅号

QQ交流群

微信订阅号

吾爱尚玩资源基地永久域名:

Www.523Play.Com

在线管理员QQ:1589479632

邮箱:Email@523play.com

QQ交流群:558936238

Copyright   ©2015-2116  吾爱尚玩资源基地|523play.comPowered by©523Pplay.Com技术支持:吾爱尚玩资源基地