Видел на данном форуме урок: Телепорт на ДМ с сохранением позиции.
Он мне показался убогим, и я решил сделать его более "умным".
[!]P.S: за основу взят тот урок.
И так начнём:
1)Создадим переменную:
Code
new DM[MAX_PLAYERS];
2)Cоздадим саму команду телепорта на ДМ зону:
Code
if (strcmp(cmdtext, "/дм", true)==0 || strcmp(cmd, "/dm", true) == 0) { DM[playerid] = 1;//установим игроку, что он на ДМ SetPlayerVirtualWorld(playerid,1);//установим вирт. мир SetPlayerInterior(playerid,0);//установим 0 инт. (улица) ResetPlayerWeapons(playerid);//отними все оружие GivePlayerWeapon(playerid, 24, 100);//дадим дигл SetPlayerHealth(playerid,100);//установим 100 хп SendClientMessage(playerid, -1, "Чтобы выйти из ДМ пропишите: /выход.");//выдадим сообщение switch(random(4))//5 рандомных телепорта на ДМ. { case 0: SetPlayerPos(playerid,2786.5872,-1495.9363,290.6088);//1 позиция case 1: SetPlayerPos(playerid,2855.9241,-1520.5049,290.1857);//2 позиция case 2: SetPlayerPos(playerid,2882.8647,-1584.2328,290.7744);//3 позиция case 3: SetPlayerPos(playerid,2865.0654,-1607.5795,290.8746);//4 позиция case 4: SetPlayerPos(playerid,2808.3269,-1587.1399,290.1857);//5 позиция } return 1; }
Думаю тут все понятно.
Приступим к команде /выход:
Code
if (strcmp(cmdtext, "/выход", true)==0 || strcmp(cmd, "/exit", true) == 0) { new DM;//обозначим переменную DM = GetPlayerVirtualWorld(playerid);//приравняем переменную DM к вирт. миру игрока (его мы установили при тп. на ДМ) if (DM == 1)//если переменная ДМ = вирт. миру игрока то: { DM[playerid] = 0;//сними условие нахождения игрока на ДМ SpawnPlayer(playerid);//заспавним игрока SetPlayerVirtualWorld(playerid,0);//установим 0 вирт. мир [!] обязательно! GivePlayerWeapon(playerid, 1, 10);// GivePlayerWeapon(playerid, 2, 20);//Дадим игроку пушки GivePlayerWeapon(playerid, 3, 30);// SetPlayerHealth(playerid,100);//Дадим хп. } if (DM == 0)return SendClientMessage(playerid,-1,"Вы не на ДМ.");//но если переменная DM не равна виртуальному миру игрок, то выдадим сообщение. return 1; }
Теперь мелочи:
Добавим в паблик: OnPlayerConnect:
Code
DM[playerid] = 0;
И в паблик OnPlayerSpawn:
Code
if(DM[playerid] == 1) return OnPlayerCommandText(playerid,"/дм");//если переменная DM=1 то вернем игрока на дм зону.
Готово.
--- Плюсы этого урока:
1)Если игрок не на дм он не сможет заспавниться. 2)Мы установили вирт. мир => игрок не будет виден другим игрокам.
---
Автор урока: AppLe.
Спасибо за внимание.
Сообщение отредактировал AppLe - Понедельник, 31.10.2011, 10:36:58