Lunix

/model id (исправлено)

4 posts in this topic

Posted (edited)

 

Здравствуйте. Для ленивых и не знающих, предоставляю небольшой пример как использовать /model по id.

PS Этот пример является желательным для чистого сервера.

Итак, давайте начнем!)

Для того, чтобы начать работу в папке " events " создаем файл "skin.js"

Потом мы объявляем глобальную переменную

global.ped = 
{

};

Затем вписываем список наших скинов, я взял только животных

global.ped = 
{
  skin: mp.joaat(["A_C_Boar",
 "A_C_Chickenhawk",
  "A_C_Chimp",
  "A_C_Chop",
  "A_C_Cormorant",
  "A_C_Cow",
  "A_C_Coyote",
  "A_C_Crow",
  "A_C_Deer",
  "A_C_Fish",
  "A_C_Hen",
  "A_C_Husky",
  "A_C_MtLion",
  "A_C_ig",
  "A_C_igeon",
  "A_C_Rat",
  "A_C_Retriever",
  "A_C_Rhesus",
  "A_C_Rottweiler",
  "A_C_Seagull",
  "A_C_SharkTiger",
  "A_C_shepherd")]
};

Прошу прощения за не красивый код)) в описании я оставлю файл с полным списком скинов))

Затем перейдем в папку " commands " в файле "basiccommands.js"

Мы ищем строку  "model": (player, args) => и заменяем команду

"model": (player, args) =>
	{
		
		if (args[1] >= 723) 
		{
			player.outputChatBox("Используйте /model 0-722");
		}
		else if (args[1] >= 0 || args[1] <= 722) 
		{
			player.model = ped.skin[args[1]];
		}
		else if (typeof args[1] === 'string') 
		{
			player.outputChatBox("Используйте /model 0-722");

		}
	},

1. Мы проверили правильность ввода идентификатора скина
2. При вводе /model 0  выводим функцию player.model = ped.skin [args[1]];
3. При вводе /model A_C_Boar выводим ошибку player.outputChatBox("Используйте /model 0-722");

Было принято решение выводить ошибку т.к. можно крашить используя допустим /model infernus

И вот, что мы имеем: при вводе команды "/model 0" мы будем в скине кабана

Если Вам, каким-то образом понравился пример, поддержите хорошим комментарием)

Пишите в комментах если хотите также /veh и /weapon по id

Замечен баг, не все скины отображаются, список будет чистится

skin.js - https://yadi.sk/d/rNFgkcpm36n3dV

Помог в корректировке кода CocaColaBear

 

Edited by Lunix
4 people like this

Share this post


Link to post
Share on other sites

Posted (edited)

1. Не очень универсально с ID. Т.к. не все разработчики будут придерживаться одинакового порядка и ID на одном сервере будет не соответствовать ID с другого сервера. Даже если все будут сортировать по алфавиту, то при добавлении новой моделькой с новым патчем (к игре) есть шанс, что куда-то в середину добавится модель. Следовательно ID'шники сдвинутся.

2. Если входной параметр строка, то нет проверки на корректность. Правильно было бы:
 

if (typeof(args[1]) === 'string') 
{
	const model = ped.skin.indexOf(args[1]) > -1 ? mp.joaat(args[1]) : null;
  	
  	if (model == null)
  		player.outputChatBox("Invalid tag");
	else
		player.model = model;
}

3. После каждой if'ки нужно сделать return (или остальные делать через else if). Т.к. если юзер введет "/model 1488" то будет показано сообщение и дальше будут выполнены остальные if, которые всегда возвращают false (бесполезные действия)

Edited by N1kS
3 people like this

Share this post


Link to post
Share on other sites
4 часа назад, CocaColaBear сказал:

1. Не очень универсально с ID. Т.к. не все разработчики будут придерживаться одинакового порядка и ID на одном сервере будет не соответствовать ID с другого сервера. Даже если все будут сортировать по алфавиту, то при добавлении новой моделькой с новым патчем (к игре) есть шанс, что куда-то в середину добавится модель. Следовательно ID'шники сдвинутся.

2. Если входной параметр строка, то нет проверки на корректность. Правильно было бы:
 


if (typeof args[1] === 'string') 
{
	const model = ped.skin.indexOf(args[1]) > -1 ? mp.joaat(args[1]) : null;
  	
  	if (model == null)
  		player.outputChatBox("Invalid tag");
	else
		player.model = mp.joaat(args[1]);
}

3. После каждой if'ки нужно сделать return (или остальные делать через else if). Т.к. если юзер введет "/model 1488" то будет показано сообщение и дальше будут выполнены остальные if, которые всегда возвращают false (бесполезные действия)

Спасибо за поправление)

Отмечу:

1. Я был приметил в начале что этот пример больше к чистым серверам, то есть к freeroam и думаю игрокам будет куда проще вписать цифры чем тег, по поводу новых, они если и будут то под новым тегом (например A_M_Y который есть) и проще их кинуть в конец и ничего не сдвинется)

2. Данный код делает так, что-бы при вводе любой текстовой информации выскакивала ошибка, я не знаю почему, тестил)

Проще сделать, что-бы только по id вводить, т.к. это и проще и не вызовет крашей)

3. Спасибо за корректировку, я потом уже понял эту глупость, я подправил код)

1 person likes this

Share this post


Link to post
Share on other sites

Спасибо, очень полезно! :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.