⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gossip_teleportnpc.cpp

📁 魔兽世界模拟服务器脚本代码. Menu->AddItem(0, " 主城传送 ",100) Menu->AddItem(0, " 初级副本传送 ",101) Menu-&gt
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            {
                //Plr->EventTeleport(553, 40.000000, -28.600000, -1.100000);
                Teleport(Plr,553, 40.000000, -28.600000, -1.100000,0);
            }break; 
        case 1054://外域副本传送2[团] 亚克崔兹
            {
                //Plr->EventTeleport(552, -1.200000, 0.000000, -0.200000);
                Teleport(Plr,552, -1.200000, 0.000000, -0.200000,0);
            }break; 
        case 1055://外域副本传送2[团] 麦克那尔
            {
                //Plr->EventTeleport(554, -28.900000, 0.700000, -1.800000);
                Teleport(Plr,554, -28.900000, 0.700000, -1.800000,0);
            }break; 
        case 1056://外域副本传送2[团] 凤凰大厅
            {
                //Plr->EventTeleport(550, -6.800000, -0.900000, -2.400000);
                Teleport(Plr,550, -6.800000, -0.900000, -2.400000,0);
            }break; 
        case 1057://外域副本传送2[团] 奴隶监狱
            {
                //Plr->EventTeleport(547, 123.146225, -122.687210, -0.446336);
                Teleport(Plr,547, 123.146225, -122.687210, -0.446336,0);
            }break; 
        case 1058://外域副本传送2[团] 蒸汽洞窟
            {
                //Plr->EventTeleport(545, -7.500000, 5.900000, -4.300000);
                Teleport(Plr,545, -7.500000, 5.900000, -4.300000,0);
            }break; 
        case 1059://外域副本传送2[团] 毒牙沼泽
            {
                //Plr->EventTeleport(546, 14.913731, -19.914341, -2.755679);
                Teleport(Plr,546, 14.913731, -19.914341, -2.755679,0);
            }break; 

        case 106://个人银行
            {
                objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
                Menu->AddItem( 0, " 暂时不提供!有什么问题联系QQ:55580780 ", 1061 );                    
                Menu->AddItem(0, "[返回]",        99);
                Menu->SendTo(Plr);            
            }break;
        case 107://开通飞行点
            {
                for (uint8 i=0; i<8; i++) 
                { Plr->SetTaximask(i, 0xFFFFFFFF);} 
                objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
                Menu->AddItem( 0, " 飞行点已开,请返回! ", 1071 );
                Menu->AddItem(0, "[返回]",               99);
                Menu->SendTo(Plr);    

         
            }break;
        case 108://领取工资10G/小时
            {

                if((int)Plr->GetPlayedtime() > 3600) // 条件检查你在线时间大于60秒.这可以自己改 
                { 
                    objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
                    Menu->AddItem( 0, " 您已经上线超过一小时,但是本服务器暂时不提供此项功能! ", 1081 );
                    Menu->AddItem(0, "[返回]",               99);
                    Menu->SendTo(Plr);    
                } 
                else 
                { 
                    objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
                    Menu->AddItem( 0, " 您上线不足一小时,请返回! ", 1081 );
                    Menu->AddItem(0, "[返回]",               99);
                    Menu->SendTo(Plr);    
                }         
            }break;
        case 109://外域传送(5G)
            {
                objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
                Menu->AddItem(5, " 黑暗之门 ", 1091); 
                Menu->AddItem(5, " 永歌森林 ", 1092); 
                Menu->AddItem(5, " 艾克索达 ", 1093); 
                Menu->AddItem(5, " 海加尔山 ", 1094); 
                Menu->AddItem(5, " 青草平原 ", 1095); 
                Menu->AddItem(5, " 翠叶森林 ", 1096); 
                Menu->AddItem(5, " 沙塔斯城 ", 1097); 
                Menu->AddItem(5, " 哈兰 ",     1098); 
                Menu->AddItem(5, " 风暴尖塔 ", 1099);
                Menu->AddItem(0, "[返回]",        99);
                Menu->SendTo(Plr);            
            }break;
        case 1091://外域传送?黑暗之门
            {
                Plr->EventTeleport(530,-246.600006,946.000000,84.400002);
            }break; 
        case 1092://外域传送?永歌森林
            {
                Plr->EventTeleport(530,9336.900391,-7278.399902,13.600000);
            }break; 
        case 1093://外域传送?艾克索达
            {
                Plr->EventTeleport(530,-4043.632813,-11933.284180,-0.057945);
            }break; 
        case 1094://外域传送?海加尔山
            {
                Plr->EventTeleport(534,5070.084473,-1791.984497,1320.995483);
            }break; 
        case 1095://外域传送?青草平原
            {
                Plr->EventTeleport(169,-2674.500000,-2275.800049,148.092743);
            }break; 
        case 1096://外域传送?翠叶森林
            {
                Plr->EventTeleport(169,2737.508057,-3318.579590,101.882820);
            }break; 
        case 1097://外域传送?沙塔斯城
            {
                Plr->EventTeleport(530,-1889,5433,-11);
            }break; 
        case 1098://外域传送?哈兰
            {
                Plr->EventTeleport(530,-1567,7959,-21);
            }break; 
        case 1099://外域传送?风暴尖塔
            {
                Plr->EventTeleport(530,4151,3041,339);
            }break; 

        case 110://野外BOSS传送(10G)
            {
                objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
                Menu->AddItem(5, " 暮色森林 ", 1101); 
                Menu->AddItem(5, " 辛特兰 ",   1102); 
                Menu->AddItem(5, " 灰谷 ",     1103); 
                Menu->AddItem(5, " 艾萨拉 ",   1104); 
                Menu->AddItem(5, " 菲拉斯 ",   1105); 
                Menu->AddItem(5, " 诅咒之地 ", 1106); 
                Menu->AddItem(5, " 水晶谷 ",   1107);
                Menu->AddItem(0, "[返回]",      99);
                Menu->SendTo(Plr);            
            }break;
        case 1101://野外BOSS传送暮色森林
            {
                Plr->EventTeleport(0,-10526.168945,-434.996796,50.894821);
            }break; 
        case 1102://野外BOSS传送辛特兰
            {
                Plr->EventTeleport(0,759.605713,-3893.341309,116.475304);
            }break; 
        case 1103://野外BOSS传送灰谷
            {
                Plr->EventTeleport(1,3120.289307,-3439.444336,139.566345);
            }break; 
        case 1104://野外BOSS传送艾萨拉
            {
                Plr->EventTeleport(1,2622.219971,-5977.930176,100.562897);
            }break; 
        case 1105://野外BOSS传送菲拉斯
            {
                Plr->EventTeleport(1,-2741.290039,2009.481323,31.877323);
            }break; 
        case 1106://野外BOSS传送诅咒之地
            {
                Plr->EventTeleport(0,-12234.000000,-2474.000000,-3.000000);
            }break; 
        case 1107://野外BOSS传送水晶谷
            {
                Plr->EventTeleport(1,-6292.463379,1578.029053,0.155348);
            }break; 

        }
    }

public:
    struct instancelist
    {
        uint32 InstanceId ;
        uint32 MapId;
        uint32 Creation;
        uint32 GroupSignature;
        uint32 Creator;
        uint32 ExpireTime;
        uint32 difficulty;
    };

    instancelist activeinstance[1000];
    int i,j;
    static const int k = 1;

private:

void Teleport(Player* plr,uint32 mapid, float x, float y, float z,int flag) //flag 判断(根据权限)是否需要单独加入副本 预留
{
    uint32 instanceid = 0;

    if (j<k)
    {
        for(i=0;i<1000;i++)
        {
            activeinstance[i].InstanceId=0;
            activeinstance[i].MapId=0;
            activeinstance[i].Creation=0;
            activeinstance[i].GroupSignature=0;
            activeinstance[i].Creator=0;
            activeinstance[i].ExpireTime=0;
            activeinstance[i].difficulty=0;
        }
        j=10;
        sLog.outString(" 初始化副本存储结构 ");
    }


    MapMgr * mapMgr = NULL;
    for(i=0;i<1000;i++)
    {
        sLog.outString(" #副本[%u]  地图[%u]# ",activeinstance[i].InstanceId, activeinstance[i].MapId);
        mapMgr = sWorldCreator.GetMap(activeinstance[i].MapId)->GetRawInstance(activeinstance[i].InstanceId);
        if(mapMgr)
        {
            if(!mapMgr->HasPlayers())
            {
                //sWorldCreator.GetMap(mapid)->DestroyMapMgrInstance(instanceid);
                //sLog.outDebug("Instance %i on map %i deleted with success\n", instanceid, mapid);
                sLog.outString(" #副本[%u]  地图[%u]# 没有玩家 删除副本数据 ",activeinstance[i].InstanceId, activeinstance[i].MapId);
                activeinstance[i].InstanceId =0;
                activeinstance[i].MapId =0;

            }
        }
        //else
        //{
            //sLog.outDebug("Instance %i failed to be deleted, reason: Doesnt Exist\n", instanceid);
        //    sLog.outString(" #副本[%u]  地图[%u]# 副本不存在 ",activeinstance[i].InstanceId, activeinstance[i].MapId);
        //}

        if (activeinstance[i].MapId == 0)
        {
            sLog.outString(" 提示:没有找到该地图的副本 ");
            break;
        }
        else if (activeinstance[i].MapId == mapid)
        {
            instanceid = activeinstance[i].InstanceId;
            break;
        }

        if(i == 999) //一直找不到 执行一次清零
        {
            j = 0;
        }
    }

    if (flag == 0)
    {
        //MapMgr *instance = sWorldCreator.GetInstance(instanceid);
        if(instanceid == 0)
        {
            Map *pMap = sWorldCreator.GetMap(mapid);
            MapMgr *pMapMgr = pMap->CreateMapMgrInstance();
            sLog.outString(" 玩家:[%s] 创建副本 #ID[%u]  地图[%u]# ",plr->GetName(), pMapMgr->GetInstanceID(), pMapMgr->GetMapId());
            activeinstance[i].MapId =mapid;
            activeinstance[i].InstanceId =pMapMgr->GetInstanceID();
            //sLog.outString("activeinstance %d :Instance %u - MapId %u .", i,activeinstance[i-1].InstanceId, activeinstance[i-1].MapId);
            plr->SafeTeleport(mapid,pMapMgr->GetInstanceID(),LocationVector(x,y,z));
            return;
        }
        MapMgr *instance = sWorldCreator.GetInstance(mapid,instanceid);
        mapid = instance->GetMapId();
        plr->SaveEntryPoint(mapid);
        plr->RemoveFromWorld();
        plr->SetInstanceID(instanceid);
        plr->SetMapId(mapid);
        plr->SetPosition(x,y,z,0,true);
        WorldPacket data(SMSG_TRANSFER_PENDING, 4);
        uint32 pid = mapid;
        data << pid;
        plr->GetSession()->SendPacket(&data);
        WorldPacket data2(SMSG_NEW_WORLD, 20);
        data2 << mapid << x << y << z << (float)3.14;
        plr->GetSession()->SendPacket(&data2);
        sLog.outString(" 玩家:[%s] 进入副本 #ID[%u]  地图[%u]# ",plr->GetName(), instance->GetInstanceID(), instance->GetMapId());
    
    }
    else
    {
        Map *pMap = sWorldCreator.GetMap(389);
        MapMgr *pMapMgr = pMap->CreateMapMgrInstance();
        sLog.outString(" 超级玩家:[%s] 创建副本 %u #ID[%u]  地图[%u]# ",plr->GetName(), pMapMgr->GetInstanceID(), pMapMgr->GetMapId());
        plr->SafeTeleport(389,pMapMgr->GetInstanceID(),LocationVector(2.024650,-10.021000,-16.187500));    
        //activeinstance[i].MapId =mapid; //不做记录
        //activeinstance[i].InstanceId =pMapMgr->GetInstanceID();
    }
}

};

void SetupCustom_Teleporters(ScriptMgr * mgr)
{
    /* Teleporter List */
    mgr->register_gossip_script(999999, &TeleportNPC::Create);          // Osciron
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -