Рекомендованные сообщения



12 posts in this topic

Здравствуйте, такая проблема первый раз инвентарь "Y" открывает , на второй раз открывается и сразу закрывается ... вот код я думаю что тут я не правильно что-то сделал . Заранее спасибо

if(_:clickedid == INVALID_TEXT_DRAW)
	{
		for(new i; i < 16; i++) {
			TextDrawHideForPlayer(playerid, inv_global[i]);
		}
		for(new i; i < 60; i++) {
			PlayerTextDrawHide(playerid, inv_player[playerid][i]);
		}
	 	CancelSelectTextDraw(playerid);
	 	return 1;

 

Share this post


Link to post
Share on other sites
}
	if(PRESSED(KEY_NO)) { // KEY_NO
		ShowInventory(playerid);
		for(new i=0; i<16; i++) {
			TextDrawShowForPlayer(playerid, inv_global[i]);
		}
		for(new i; i < 60; i++) {
			PlayerTextDrawShow(playerid, inv_player[playerid][i]);
		}
		SelectTextDraw(playerid, 0xEA363FFF);
  		return 1;

 

Share this post


Link to post
Share on other sites

Возможно, ты ESC нажимаешь, просто этого не замечаешь? Глупо конечно.. но, как вариант

Share this post


Link to post
Share on other sites

подниму!
просто кнопка KEY_NO работает один раз , второй раз жму "N" открылось и резко закрылось .. не могу понять что не так сделал

Share this post


Link to post
Share on other sites

@Drummer1993 весь паблик с клавишами скинь. Или все, что там есть у тебя с инвентарем

Share this post


Link to post
Share on other sites
8 часов назад, SCRIPTMAN сказал:

@Drummer1993 весь паблик с клавишами скинь. Или все, что там есть у тебя с инвентарем

https://pastebin.com/AMs6HnMp это все что есть инвентарь 
https://pastebin.com/tyurB1rb public OnPlayerKeyStateChange

Share this post


Link to post
Share on other sites
if(PRESSED(KEY_NO)) { // KEY_NO
		for(new A; A != 15; A++)//15
    	{
        	PlayerTextDrawSetPreviewModel(playerid, inv_player[playerid][59], GetPlayerSkin(playerid));//59
        	PlayerTextDrawShow(playerid, inv_player[playerid][A]);
    	}
		for(new i=0; i<16; i++) {
			TextDrawShowForPlayer(playerid, inv_global[i]);
		}
		for(new i; i < 60; i++) {
			PlayerTextDrawShow(playerid, inv_player[playerid][i]);
		}
		SelectTextDraw(playerid, 0xEA363FFF);
  		SetPVarInt(playerid, "inventory_td_check", 1);
  		return 1;

Сделай так, но, пока я это всё это писал, появилась идея, то, замени первый код на этот:

if(_:clickedid == INVALID_TEXT_DRAW && GetPVarInt(playerid, "inventory_td_check") == 1)
	{
		for(new i; i < 16; i++) {
			TextDrawHideForPlayer(playerid, inv_global[i]);
		}
		for(new i; i < 60; i++) {
			PlayerTextDrawHide(playerid, inv_player[playerid][i]);
		}
	 	CancelSelectTextDraw(playerid);
  		DeletePVar(playerid, "inventory_td_check");
	 	return 1;

Не стоит конечно юхать пвары, но, попробуй.

Вкратце объясню: у тебя идёт проверка: если игрок нажал ESC, то TD скрываются, но не указано, какой тд открыт, я добавил, что бы кроме нажатия кнопки, была проверка, а тот ли TD сейчас показывается у игрока.

Share this post


Link to post
Share on other sites
28 минут назад, SCRIPTMAN сказал:

if(PRESSED(KEY_NO)) { // KEY_NO
		for(new A; A != 15; A++)//15
    	{
        	PlayerTextDrawSetPreviewModel(playerid, inv_player[playerid][59], GetPlayerSkin(playerid));//59
        	PlayerTextDrawShow(playerid, inv_player[playerid][A]);
    	}
		for(new i=0; i<16; i++) {
			TextDrawShowForPlayer(playerid, inv_global[i]);
		}
		for(new i; i < 60; i++) {
			PlayerTextDrawShow(playerid, inv_player[playerid][i]);
		}
		SelectTextDraw(playerid, 0xEA363FFF);
  		SetPVarInt(playerid, "inventory_td_check", 1);
  		return 1;

Сделай так, но, пока я это всё это писал, появилась идея, то, замени первый код на этот:


if(_:clickedid == INVALID_TEXT_DRAW && GetPVarInt(playerid, "inventory_td_check") == 1)
	{
		for(new i; i < 16; i++) {
			TextDrawHideForPlayer(playerid, inv_global[i]);
		}
		for(new i; i < 60; i++) {
			PlayerTextDrawHide(playerid, inv_player[playerid][i]);
		}
	 	CancelSelectTextDraw(playerid);
  		DeletePVar(playerid, "inventory_td_check");
	 	return 1;

Не стоит конечно юхать пвары, но, попробуй.

Вкратце объясню: у тебя идёт проверка: если игрок нажал ESC, то TD скрываются, но не указано, какой тд открыт, я добавил, что бы кроме нажатия кнопки, была проверка, а тот ли TD сейчас показывается у игрока.

спасибо, сейчас это заменю аа в public OnPlayerKeyStateChange у меня все в порядке? просто еще вопрос 
кнопка "Н" Заехать в гараж или открыть шлагбаум очень долго нужно жать ... я где то слишал эту проблему но вспомнить не могу

Share this post


Link to post
Share on other sites
56 минут назад, SCRIPTMAN сказал:

if(PRESSED(KEY_NO)) { // KEY_NO
		for(new A; A != 15; A++)//15
    	{
        	PlayerTextDrawSetPreviewModel(playerid, inv_player[playerid][59], GetPlayerSkin(playerid));//59
        	PlayerTextDrawShow(playerid, inv_player[playerid][A]);
    	}
		for(new i=0; i<16; i++) {
			TextDrawShowForPlayer(playerid, inv_global[i]);
		}
		for(new i; i < 60; i++) {
			PlayerTextDrawShow(playerid, inv_player[playerid][i]);
		}
		SelectTextDraw(playerid, 0xEA363FFF);
  		SetPVarInt(playerid, "inventory_td_check", 1);
  		return 1;

Сделай так, но, пока я это всё это писал, появилась идея, то, замени первый код на этот:


if(_:clickedid == INVALID_TEXT_DRAW && GetPVarInt(playerid, "inventory_td_check") == 1)
	{
		for(new i; i < 16; i++) {
			TextDrawHideForPlayer(playerid, inv_global[i]);
		}
		for(new i; i < 60; i++) {
			PlayerTextDrawHide(playerid, inv_player[playerid][i]);
		}
	 	CancelSelectTextDraw(playerid);
  		DeletePVar(playerid, "inventory_td_check");
	 	return 1;

Не стоит конечно юхать пвары, но, попробуй.

Вкратце объясню: у тебя идёт проверка: если игрок нажал ESC, то TD скрываются, но не указано, какой тд открыт, я добавил, что бы кроме нажатия кнопки, была проверка, а тот ли TD сейчас показывается у игрока.

все работает спасибо огромное ! 

Share this post


Link to post
Share on other sites

@Drummer1993 

pc_cmd_how

предоставь

MyButtonSystem(playerid)

и это

Share this post


Link to post
Share on other sites
13 минут назад, SCRIPTMAN сказал:

@Drummer1993 


pc_cmd_how

предоставь


MyButtonSystem(playerid)

и это

уже исправил спасибо ) 

Можно закрыть. я создам новую тему есть еще проблема одна

Share this post


Link to post
Share on other sites

@Drummer1993 чтобы закрыть, нажми кнопку "Вопрос решён" около ответа, который тебе помог

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • youngblaste
      By youngblaste
      Привет. Не нужно писать что команда заезженная - просто выйди с темы.
      И так, постараюсь объяснить как всё работает в этой команде
      Погнали, хлопци!:
      CMD:makeadmin(playerid, params[]){ /* Здесь начинается наша команда */ if(p_info[playerid][pAdmin] < 7) /* Идёт проверка на админку, если наш уровень администратора ниже 7 то ничего не произойдёт (можно сменить на свой уровень) */ return true; /* возвращаем 1 - или же не на ельфийском, то просто ничего не пройзойдёт и команда не продолжит работу */ new name[MAX_PLAYER_NAME], player[MAX_PLAYER_NAME], targetid, admlvl, string[250]; /* Создаем переменные для команды (targetid - кому выдавать будем админку, admlvl - это какой лвл админки будем выдавать), string - ну это стринг :D */ if(sscanf(params, "ud", targetid, admlvl)) /* Делаем проверку на правильное написание команды */ return SendClientMessage(playerid, -1, "{84cd5c}[Подсказка] {ffffff} Используйте команду: /makeadmin [id игрока] [lvl админ-прав]"); /* Если мы ввели не верно команду, то нам возвращает сообщение в чат с подсказкой как ввести команду */ GetPlayerName(playerid, name, MAX_PLAYER_NAME); /* Тут мы получаем наш ник */ GetPlayerName(targetid, player, MAX_PLAYER_NAME); /* А тут мы получаем ник игрока которому выдаем админку */ if(!IsPlayerConnected(targetid)) /* Делаем проверку на то находится ли игрок на сервере, вообще у меня в команде здесь есть проверка на Авторизован ли игрок и она вместе с проверкой на есть ли такой игрок на сервере, но увы, я убрал потому что скорее всего не у всех есть такая фича, это не очень важно но если ты хоть немного шаришь то и сам добавишь проверку */ return SendClientMessage(playerid, -1, "{c23838}[Ошибка] {ffffff} Игрок ещё не вступил в игру"); /* Возвращаем сообщение о том что игрок ещё не вступил в игру - ну вообще должно быть "Игрока с таким ID нету на сервере", но если ты решишь добавить проверку на авторизацию то это будет немного лучше */ if(admlvl < 0 || admlvl > 6) /* Делаем проверку на какой лвл мы хотим поставить игрока, то есть мы не можем выдать лвл адм ниже 0 или выше 6, меняйте на своё если так нужно))) */ return SendClientMessage(playerid, -1, "{c23838}[Ошибка] {ffffff} Увы, нельзя выдавать меньше 0 или выше 6 уровня администратора"); /* Возвращаем сообщение о том что мы не можем выдавать меньше 0 или выше 6 лвл адм */ p_info[targetid][pAdmin] = admlvl; /* И так... p_info у вас может быть разное: PlayerInfo, pInfo, PI, PlayerInformation, p_Info, P_I и т.п., pAdmin так же может быть другим, хотя обычно такое, например: Admin, PlayerAdmin, Player_Admin, Adminka и т.п. */ format(string, sizeof(string), "{b33d3d}{A} Администратор %s[%d] назначил администратором игрока %s[%d]", name, playerid, player, targetid); /* И так, тут мы форматируем string и после отпрам в админ чат))) */ AdmChat(-1, string); /* Ниже вы увидите сток с AdmChat, крч просто отправляем в адм чат */ format(string, sizeof(string), "{ffffff}Администратор %s[%d] назначил Вас администратором %d-го уровня.", name, playerid, admlvl); /* Форматируем опять стринг и потом игроку отправим */ SendClientMessage(targetid, -1, string); /* Устал описовать команду, ну да ладно... Теперь отправляем игроку string */ return true; /* Возвращаем 1, чтобы небыло еррора))) */ } /* Здесь заканчивается наша команда */ /* vk.com/youngblaste - люbлю сkpuптuнг */ А теперь сток AdmChat, добавьте возле своих стоков ну или под командой:
      stock AdmChat(color, const text[]) /* тут не буду много объяснять */ { foreach(new i: Player) if(p_info[i][pAdmin] > 0) SendClientMessage(i, color, text); /* Обычно используют для админ чата... Ну и как всегда... p_info у вас может быть разное: PlayerInfo, pInfo, PI, PlayerInformation, p_Info, P_I и т.п., pAdmin так же может быть другим, хотя обычно такое, например: Admin, PlayerAdmin, Player_Admin, Adminka и т.п. */ } Если Вы заметили какую-то ошибку, пожалуйста отпишите. Надеюсь Вам понравился этот мини-урок, ну а точнее команда /makeadmin.
      Удачи, юные скриптеры