Перейти к содержанию
×
×
  • Создать...

Урок Создание мода с нуля - урок №3


danilasar
 Поделиться
Подписчики 0

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

Доброго времени суток! В серии уроков "Создание мода с нуля" я расскажу вам о том, как создать мод с нуля.

 

Обратите внимание!

  •  Если вы не читали мой первый урок - обязательно прочтите!
  •  Если вы не читали мой второй урок - обязательно прочтите!

 

В прошлом уроке мы работали над входом/регистрации пользователей и создали администраторский раздел. Сегодня создадим самое важное - меню сервера и пользовательские команды.

Меню сервера

Сделаем через команду /меню. В public OnPlayerCommandText создаём /меню:

if(strcmp(cmdtext, "/меню, true) == 0)
	{
	    ShowPlayerDialog(playerid, 5, DIALOG_STYLE_LIST, "Меню", "Игрок\nРабота\nФракция\nНавигатор", "Выбрать", "Закрыть");
	}

Примечание: пункты меню должны разделятся \n.

Теперь укажем, кто что выведет - в public OnDialogResponse:

	if(dialogid == 5) {
	    if(response) {
	        switch(listitem)
	        {
	            case 0:
	                ShowPlayerDialog(playerid, 5, DIALOG_STYLE_MSGBOX, "Меню -> Игрок", "Команды\n • /умереть - самоубийство\n • /пивко - выпить\n • /мангал - ставим мангальчик!", "Закрыть", "");
		    case 1:
SendClientMessage(playerid, -1, " "); // сюда мы потом вернёмся

case 2:
SendClientMessage(playerid, -1, " "); // и сюда тоже case 3: ShowPlayerDialog(playerid, 6, DIALOG_STYLE_LIST, "Меню -> Навигатор", "Останкино\nАЗС\nАвтосалон\nАвтошкола\nОружейный магазин\nАэропорт", "Выбрать", "Закрыть"); } } }

Ну вот и все, теперь у нас есть меню сервера. Приступим к пользовательским командам.

Пользовательские команды

Ни один игровой сервер не может обойтись без команд. В этой части урока я расскажу о них.

Команда выглядит так:

if(strcmp(cmdtext, "/cmd", true) == 0)
{
   GetCommand
}
  • /cmd - команда
  • GetCommand - что выполняет

Пример:

if(strcmp(cmdtext, "/test", true) == 0)
{
   SendClientMessageToAll(0x099DE0F6, "Hello, world!");
}

Команда /test выводит в чат сообщение всем игрокам голубого цвета: Hello, world!

У нас уже есть /mycommand. Ее удалите. Еще можно найти /spec-off и /меню. Добавим команду /дать. Для этого в начало public OnPlayerCommandText:

	new giveplayerid, moneys;
	new sendername[MAX_PLAYER_NAME];
	new giveplayer[MAX_PLAYER_NAME];
	new playermoney;
	new string[200];

И ко всем командам:

	if(strcmp(cmdtext, "/дать", true) == 0) {
		if(!strlen(cmdtext)) {
			SendClientMessage(playerid, 0xAA3333AA, "Используйте: /дать [id] [сумма]");
			return 1;
		}
		giveplayerid = strval(cmdtext);
		if(!strlen(cmdtext)) {
			SendClientMessage(playerid, 0xAA3333AA, "Используйте: /дать [id] [сумма]");
			return 1;
		}
 		moneys = strval(cmdtext);
		if (IsPlayerConnected(giveplayerid)) {
			GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
			GetPlayerName(playerid, sendername, sizeof(sendername));
			playermoney = GetPlayerMoney(playerid);
			if (moneys > 0 && playermoney >= moneys) {
				GivePlayerMoney(playerid, (0 - moneys));
				GivePlayerMoney(giveplayerid, moneys);
				format(string, sizeof(string), "Вы передали игроку %s [%d], %d руб.", giveplayer,giveplayerid, moneys);
				SendClientMessage(playerid, 0xAA3333AA, string);
				format(string, sizeof(string), "Вам передали %d рублей игрок %s [%d]", moneys, sendername, playerid);
				SendClientMessage(giveplayerid, 0xAA3333AA, string);
				printf("%s (playerid:%d) has transfered %d to %s (playerid:%d)",sendername, playerid, moneys, giveplayer, giveplayerid);
			}
			else
			{
				SendClientMessage(playerid, 0xAA3333AA, "Неверная сумма");
			}
		}
		else
		{
			format(string, sizeof(string), "%d неактивен", giveplayerid);
			SendClientMessage(playerid, 0xAA3333AA, string);
		}
		return 1;
	}

P.S. Выдернул из DM Mari El.

На сегодня всё.

Итог работы:

  • Создано меню сервера
  • Созданы команды

В нашем моде уже есть:

  • Название мода
  • Спавн игроков
  • Скины при входе
  • Регистрация
  • Вход
  • Сохранение игроков
  • Меню сервера
  • Команды

В следующем уроке ждите:

  • Пикапы
  • Чекпоинты
  • Работы
  • Фракции (возможно, будет в 4 уроке)

Lenin Forever!

Ссылка на сообщение
Поделиться на другие сайты

danilasar, скинь свой мод пожалуйста . Варнинги и прочая фигня лезет, скинь свою pwn пожалуйста третьей версии .

Ссылка на сообщение
Поделиться на другие сайты

 

 


danilasar, скинь свой мод пожалуйста . Варнинги и прочая фигня лезет, скинь свою pwn пожалуйста третьей версии .

Да это издевательство! Вот код:

#include <a_samp>
#include <mxINI>
#define green 0xFF00000
#define SPEC_TYPE_NONE 0

forward OnPlayerRegister(playerid, password[]);
forward OnPlayerLogin(playerid,password[]);
enum pInfo
{
    pPass[64],
    pAdmin,
    pKills,
    pCash,
    pScore,
    Muted,
	Jailed,
	SpecID[MAX_PLAYERS],
	SpecType[MAX_PLAYERS],
	Freeze,
	Zhertva,
	Spawned,
};
new Player[MAX_PLAYERS][pInfo];
new PAccount[MAX_PLAYERS];



public OnGameModeExit()
{
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
	return 1;
}

public OnPlayerConnect(playerid)
{
	new playername[MAX_PLAYER_NAME];// Массив для имени игрока
	new string[128];// Путь до папки с именем игрока
	GetPlayerName(playerid,playername,sizeof(playername));// Узнаём имя игрока
	format(string,sizeof(string),"users/%s.ini", playername);// Путь к файлу с аккаунтом
	if(fexist(string))// Проверка на файл, если он есть то выполняется следующее действие.
	{
		PAccount[playerid] = 1;// Аккаунт есть
	}
	else// Если файла с именем нет, то выполняется это действие.
	{
		PAccount[playerid] = 0;// Аккаунта нет
	}
	if(PAccount[playerid] == 1) // аккаунт есть
	{
		ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Вход","Аккаунт зарегистрирован, введите пароль","Вход","");// показываем диалог
	}
	else // если нет аккаунта в папке
	{
		ShowPlayerDialog(playerid,3,DIALOG_STYLE_INPUT,"Вход","Аккаунт зарегистрирован, введите пароль","Вход","");// Показываем диалог регистрации.
	}
	ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"Сервер","Мужик\nДевка","OK","");
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    SavePlayer(playerid);
	return 1;
}

public OnPlayerSpawn(playerid)
{
	SetPlayerPos(playerid,1958.3783, 1343.1572, 15.3746); // X,Y,Z - координаты спавна игроков
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
	return 1;
}

public OnVehicleSpawn(vehicleid)
{
	return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
	return 1;
}

public OnPlayerText(playerid, text[])
{
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
	new giveplayerid, moneys;
	new sendername[MAX_PLAYER_NAME];
	new giveplayer[MAX_PLAYER_NAME];
	new playermoney;
	new string[200];
	if(strcmp(cmdtext,"/spec-off",true) == 0)
	{
	    TogglePlayerSpectating(playerid, 0);
		Player[playerid][SpecID] = INVALID_PLAYER_ID;
		Player[playerid][SpecType] = SPEC_TYPE_NONE;
		SendClientMessage(playerid,0xFF00000,"Слежка отключена");
	    return 1;
	}
	if(strcmp(cmdtext, "/меню", true) == 0)
	{
	    ShowPlayerDialog(playerid, 5, DIALOG_STYLE_LIST, "Меню", "Игрок\nРабота\nФракция\nНавигатор", "Выбрать", "Закрыть");
	}
	if(strcmp(cmdtext, "/дать", true) == 0) {
		if(!strlen(cmdtext)) {
			SendClientMessage(playerid, 0xAA3333AA, "Используйте: /дать [id] [сумма]");
			return 1;
		}
		giveplayerid = strval(cmdtext);
		if(!strlen(cmdtext)) {
			SendClientMessage(playerid, 0xAA3333AA, "Используйте: /дать [id] [сумма]");
			return 1;
		}
 		moneys = strval(cmdtext);
		if (IsPlayerConnected(giveplayerid)) {
			GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
			GetPlayerName(playerid, sendername, sizeof(sendername));
			playermoney = GetPlayerMoney(playerid);
			if (moneys > 0 && playermoney >= moneys) {
				GivePlayerMoney(playerid, (0 - moneys));
				GivePlayerMoney(giveplayerid, moneys);
				format(string, sizeof(string), "Вы передали игроку %s [%d], %d руб.", giveplayer,giveplayerid, moneys);
				SendClientMessage(playerid, 0xAA3333AA, string);
				format(string, sizeof(string), "Вам передали %d рублей игрок %s [%d]", moneys, sendername, playerid);
				SendClientMessage(giveplayerid, 0xAA3333AA, string);
				printf("%s (playerid:%d) has transfered %d to %s (playerid:%d)",sendername, playerid, moneys, giveplayer, giveplayerid);
			}
			else
			{
				SendClientMessage(playerid, 0xAA3333AA, "Неверная сумма");
			}
		}
		else
		{
			format(string, sizeof(string), "%d неактивен", giveplayerid);
			SendClientMessage(playerid, 0xAA3333AA, string);
		}
		return 1;
	}
	return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
	return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
	return 1;
}

public OnRconCommand(cmd[])
{
	return 1;
}

public OnPlayerRequestSpawn(playerid)
{
	return 1;
}

public OnObjectMoved(objectid)
{
	return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
	return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
	return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
	return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
	return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
	return 1;
}

public OnPlayerExitedMenu(playerid)
{
	return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
	return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
	return 1;
}

public OnPlayerUpdate(playerid)
{
	return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
	return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
	return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
	return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
	return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	if(dialogid == 1) {
		if(response) {
			if(listitem == 0) {
				SetPlayerSkin(playerid, 7);
 			}
 			if(listitem == 1) {
 			    SetPlayerSkin(playerid, 13);
			}
		}
	}
    if(dialogid == 2)// Ид диалога Для Логина
	{
		if(response)// Если игрок нажал первую кнопку входа
		{
			if(!strlen(inputtext))// Если окно ввода пустое, выводим диалог снова
			{
				ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Вход","Аккаунт зарегистрирован, введите пароль","Вход","");// показываем диалог
				return 1;
			}
			new pass[64];// Масив с паролем
			strmid(pass,inputtext,0,strlen(inputtext),64);// считывание текста с диалога
			OnPlayerLogin(playerid,pass);//паблик входа
		}
	}
	if(dialogid == 3)// Ид диалога для регистрации
	{
		if(response)// Если игрок нажал первую кнопку
		{
			if(!strlen(inputtext))// Если игрок не написал ничего,то выводим диалог снова
			{
				ShowPlayerDialog(playerid,3,DIALOG_STYLE_INPUT,"Вход","Аккаунт зарегистрирован, введите пароль","Вход","");// Показываем диалог регистрации
				return 1;
			}
			new pass[64];// Масив с паролем
			strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога
			OnPlayerRegister(playerid,pass);// Запускаем паблик регистрации
		}
	}
	if(dialogid == 4)
	{
        if(response)
		{
		    new zherid = Player[playerid][Zhertva];
		    new Float:X,Float:Y,Float:Z,pname[40],gname[40],string[256];
			GetPlayerName(playerid,pname,sizeof(pname));
			GetPlayerName(zherid,gname,sizeof(gname));
			if(listitem == 0)
		    {
		        if(!IsPlayerSpawned(zherid))
				{
				    SendClientMessage(playerid,0xB30400EF,"Игрок еще не заспавнен");
				    return 1;
				}
				GetPlayerPos(zherid,X,Y,Z);
		        SetPlayerPos(zherid,X,Y,Z+10);
				format(string,sizeof(string),"Aдминистратор %s пнул игрока %s",pname,playerid,gname,zherid);
				SendClientMessageToAll(0x099DE0F6,string);
			}
			if(listitem == 1)
		    {
		        if(!IsPlayerSpawned(zherid))
				{
				    SendClientMessage(playerid,0xB30400EF,"Игрок еще не заспавнен");
				    return 1;
				}
                SetPlayerHealth(zherid,0.0);
				format(string,sizeof(string),"Aдминистратор %s убил игрока %s",pname,playerid,gname,zherid);
				SendClientMessageToAll(0x099DE0F6,string);
			}
		    if(listitem == 2)
		    {
		        if(!IsPlayerSpawned(zherid))
				{
				    SendClientMessage(playerid,0xB30400EF,"Игрок еще не заспавнен");
				    return 1;
				}
		        GetPlayerPos(zherid,X,Y,Z);
				CreateExplosion(X,Y,Z,10,0);
				CreateExplosion(X,Y,Z,10,0);
				CreateExplosion(X,Y,Z,10,0);
				format(string,sizeof(string),"Aдминистратор %s убил игрока %s",pname,playerid,gname,zherid);
				SendClientMessageToAll(0x099DE0F6,string);
			}
			if(listitem == 3)
			{
			    if(Player[zherid][Muted] == 0)
			    {
					Player[zherid][Muted] = 1;
					format(string,sizeof(string),"Aдминистратор %s заткнул игрока %s",pname,gname);
					SendClientMessageToAll(0x099DE0F6,string);
			    }
			    else
			    {
			        Player[zherid][Muted] = 0;
			        format(string,sizeof(string),"Aдминистратор %s разрешил писать в чат игроку %s",pname,gname);
					SendClientMessageToAll(0x099DE0F6,string);
			    }
			}
			if(listitem == 4)
			{
			    format(string,sizeof(string),"Aдминистратор %s кинул игрока %s",pname,gname);
				SendClientMessageToAll(0x099DE0F6,string);
			    Kick(zherid);
			}
			if(listitem == 5)
			{
			    format(string,sizeof(string),"Aдминистратор %s забанил игрока %s",pname,gname);
				SendClientMessageToAll(0x099DE0F6,string);
			    Ban(zherid);
			}
			if(listitem == 6)
			{
				if(playerid != zherid)
				{
				    if(!IsPlayerSpawned(zherid))
					{
					    SendClientMessage(playerid,0xB30400EF,"Игрок еще не заспавнен");
					    return 1;
					}
			    	GetPlayerPos(zherid,X,Y,Z);
					if(IsPlayerInAnyVehicle(playerid))
					{
					    SetVehiclePos(GetPlayerVehicleID(playerid),X+1,Y,Z);
					}
					else
					{
				    	SetPlayerPos(playerid,X+1,Y,Z);
					}
			    	SetPlayerInterior(playerid,GetPlayerInterior(zherid));
			    	format(string,sizeof(string),"Вы телепортировались к игроку %s",gname);
					SendClientMessage(playerid,0x099DE0F6,string);
					format(string,sizeof(string),"Aдминистратор %s куда-то телепортировался... (к вам)",pname);
					SendClientMessage(zherid,0x099DE0F6,string);
				}
				else
				{
                    SendClientMessage(playerid,0xB30400EF,"Вы телепортировали к cебе игрока Админ");
				    SendClientMessage(playerid,0xB30400EF,"Aдминистратор %s телепортировал вас к себе");
				}
			}
			if(listitem == 7)
			{
			    if(playerid != zherid)
			    {
			        if(!IsPlayerSpawned(zherid))
					{
					    SendClientMessage(playerid,0xB30400EF,"Игрок еще не заспавнен");
					    return 1;
					}
			        GetPlayerPos(playerid,X,Y,Z);
					if(IsPlayerInAnyVehicle(zherid))
					{
					    SetVehiclePos(GetPlayerVehicleID(zherid),X+1,Y,Z);
					}
					else
					{
				    	SetPlayerPos(zherid,X+1,Y,Z);
					}
			    	SetPlayerInterior(zherid,GetPlayerInterior(playerid));
			    	format(string,sizeof(string),"Вы телепортировали к cебе игрока %s",gname);
					SendClientMessage(playerid,0x099DE0F6,string);
					format(string,sizeof(string),"Aдминистратор %s телепортировал вас к себе",pname);
					SendClientMessage(zherid,0x099DE0F6,string);
				}
				else
				{
				    SendClientMessage(playerid,0xB30400EF,"Вы не можете телепортировать себя");
				}
			}
			if(listitem == 8)
			{
			    if(playerid != zherid)
			    {
			        if(!IsPlayerSpawned(zherid))
					{
					    SendClientMessage(playerid,0xB30400EF,"Игрок еще не заспавнен");
					    return 1;
					}
					if(Player[zherid][Jailed] == 0)
					{
			        	Player[zherid][Jailed] = 1;
						SetPlayerInterior(zherid,3);
						SetPlayerPos(zherid,2574.1096,-2413.3933,21.5356);
						format(string,sizeof(string),"Aдминистратор %s посадил %s в тюрьму...",pname,gname);
						SendClientMessageToAll(0x099DE0F6,string);
					}
					else
					{
					    Player[zherid][Jailed] = 0;
						SetPlayerInterior(zherid,0);
						SpawnPlayer(zherid);
						format(string,sizeof(string),"Aдминистратор %s освободил игрока %s",pname,gname);
						SendClientMessageToAll(0x099DE0F6,string);
					}
			    }
			    else
			    {
			        SendClientMessage(playerid,0xB30400EF,"Вы не можете сажать себя в тюрьму");
			    }
			}
			if(listitem == 9)
			{
			    if(playerid != zherid)
			    {
			        if(!IsPlayerSpawned(zherid))
					{
					    SendClientMessage(playerid,0xB30400EF,"Игрок еще не заспавнен");
					    return 1;
					}
   					TogglePlayerSpectating(playerid,1);
					PlayerSpectatePlayer(playerid,zherid);
					SetPlayerInterior(playerid,GetPlayerInterior(zherid));
					Player[playerid][SpecID] = zherid;
					Player[playerid][SpecType] = 1;
					format(string,sizeof(string),"Bы следите за %s.",gname);
					SendClientMessage(playerid,0x099DE0F6,string);
					SendClientMessage(playerid,0x099DE0F6,"Чтобы отключить слежку, введите: \"/spec-off\"");
				}
			}
			if(listitem == 10)
			{
			    if(playerid != zherid)
			    {
			        if(!IsPlayerSpawned(zherid))
					{
					    SendClientMessage(playerid,0xB30400EF,"Игрок еще не заспавнен");
					    return 1;
					}
			        if(Player[zherid][Freeze] == 0)
					{
			        	TogglePlayerControllable(zherid,0);
						format(string,sizeof(string),"Aдминистратор %s заморозил игрока %s",pname,gname);
						SendClientMessageToAll(0x099DE0F6,string);
						Player[zherid][Freeze] = 1;
					}
					else
					{
					    TogglePlayerControllable(zherid,1);
						format(string,sizeof(string),"Aдминистратор %s разморозил игрока %s",pname,gname);
						SendClientMessageToAll(0x099DE0F6,string);
						Player[zherid][Freeze] = 0;
					}
			    }
			}
		}
		else
		{
		}
	}
	if(dialogid == 5) {
	    if(response) {
	        switch(listitem)
	        {
	            case 0:
	                ShowPlayerDialog(playerid, 5, DIALOG_STYLE_MSGBOX, "Меню -> Игрок", "Команды\n • /умереть - самоубийство\n • /пивко - выпить\n • /мангал - ставим мангальчик!", "Закрыть", "");
				case 1:
					SendClientMessage(playerid, -1, " "); // сюда мы потом вернёмся
				case 2: 
					SendClientMessage(playerid, -1, " "); // и сюда тоже
				case 3:
				    ShowPlayerDialog(playerid, 6, DIALOG_STYLE_LIST, "Меню -> Навигатор", "Останкино\nАЗС\nАвтосалон\nАвтошкола\nОружейный магазин\nАэропорт", "Выбрать", "Закрыть");
			}
		}
	}
	return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    if(Player[playerid][pAdmin] == 1)
	{
	    ShowPlayerDialog(playerid,4,DIALOG_STYLE_LIST,"Администраторский раздел","Пнуть\nУбить\nВзорвать\nЗаткнуть\nKикнуть\nЗабанить\nТП к игроку\nТП игрока к себе\nПосадить\nСледить\nЗамарозить\n","Применить","Отмена");
	    Player[playerid][Zhertva] = clickedplayerid;
	}
	return 1;
}
public OnPlayerRegister(playerid, password[])// Паблик регистрации
{
    if(IsPlayerConnected(playerid))
    {
        new string[64];// Масив с путём для файла
        new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока
        GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
        format(string,sizeof(string), "users/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения
        new iniFile = ini_createFile(string);// Создаём файл с именем игрока в папке players
        if(iniFile < 0)// Если Файла нет
        {
            iniFile = ini_openFile(string);// Открываем
        }
        if(iniFile >= 0)// Если файл есть
        {
            strmid(Player[playerid][pPass],password,0,strlen(password),255);// Присваиваем масиву pPass, значение password[]
            ini_setString(iniFile,"Pass",Player[playerid][pPass]);// Записываем пароль игрока в файл
            ini_setInteger(iniFile, "Admin", 0); // Это не админитсратор
            ini_setInteger(iniFile, "Score", 0);
            ini_setInteger(iniFile, "Kills", 0);
            ini_setInteger(iniFile, "Cash", 500);
            ini_closeFile(iniFile);// Закрываем файл
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Вход","Аккаунт зарегистрирован, введите пароль","Вход","");// показываем диалог
        }
    }
    return 1;
}
stock SavePlayer(playerid)
{
    new string[64];// Масив с путём для файла
    new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока
    GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
    format(string, sizeof(string), "users/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения
    new iniFile = ini_openFile(string);// Открываем файл по тому пути который указали.
    ini_setString(iniFile,"Pass",Player[playerid][pPass]);// Записываем пароль игрока в файл
    ini_setInteger(iniFile, "Admin",Player[playerid][pAdmin]); // Сохраняем админ/не админ
    ini_getInteger(iniFile,"Score",Player[playerid][pScore]);
    ini_getInteger(iniFile,"Kills",Player[playerid][pKills]);
    ini_getInteger(iniFile, "Cash",Player[playerid][pCash]);
    ini_closeFile(iniFile);// Закрываем файл
}
public OnPlayerLogin(playerid,password[])
{
    if(IsPlayerConnected(playerid))// Проверка на подключение игрока
    {
        new string[64];// Масив с путём для файла
        new pass[64];// Масив с паролем
        new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока
        GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
        format(string,sizeof(string), "users/%s.ini", playername);// Добавляем имя игрока, в путь для загрузки
        new iniFile = ini_openFile(string);// Открываем файл
        ini_getString(iniFile,"Pass",pass,64);// Загружаем пароль
        if(strcmp(pass,password,true) == 0)// Если введёный пароль, соответсвует паролю при регистрации, то загружаем акк
        {
            ini_getString(iniFile,"Pass",Player[playerid][pPass],64);// Загружаем пароль
            ini_getInteger(iniFile, "Admin",Player[playerid][pAdmin]); // Провераяем на Администратора
            ini_getInteger(iniFile,"Score",Player[playerid][pScore]);
            ini_getInteger(iniFile,"Kills",Player[playerid][pKills]);
            ini_getInteger(iniFile, "Cash",Player[playerid][pCash]);
            GivePlayerMoney(playerid,Player[playerid][pCash]);
            SetPlayerScore(playerid, Player[playerid][pScore]);
            ini_closeFile(iniFile);// Закрываем файл
        }
        else// Если пароль не верен..
        {
            ini_closeFile(iniFile);// Закрываем файл
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Вход","Аккаунт зарегистрирован, введите пароль","Вход","");// показываем диалог
            return 1;
        }
        SendClientMessage(playerid,green,"Добро пожаловать на наш сервер");// Выводим игрок сообщение
    }
    return 1;
}
stock IsPlayerSpawned(playerid)
{
	if(Player[playerid][Spawned] != 0)
	{
	    return 1;
	}
	return 0;
}

 

 


Варнинги и прочая фигня лезет

Табуляцию расставь.

 

 


третьей версии

Не понял, какой версии?

Lenin Forever!

Ссылка на сообщение
Поделиться на другие сайты

@danilasar,лезет Unknown, не указал что добавить в scriptfiles. Тоесть урок не доделанный, лезут варнинги . Да и пишет Unknown еще.....  

Ссылка на сообщение
Поделиться на другие сайты

@Forumnik, какие варнинги? Попробуй табуляцию расставить. MP какой? У всех работает, у тебя и еще одного человека ункновны лезут. 

Lenin Forever!

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

что вот эти варнинги означают

C:\Users\Тимофей\Desktop\srv-pawno-crmp-c3-win\gamemodes\Untitled.pwn(128) : warning 217: loose indentation
C:\Users\Тимофей\Desktop\srv-pawno-crmp-c3-win\gamemodes\Untitled.pwn(129) : warning 217: loose indentation
C:\Users\Тимофей\Desktop\srv-pawno-crmp-c3-win\gamemodes\Untitled.pwn(289) : warning 217: loose indentation
C:\Users\Тимофей\Desktop\srv-pawno-crmp-c3-win\gamemodes\Untitled.pwn(493) : warning 217: loose indentation
C:\Users\Тимофей\Desktop\srv-pawno-crmp-c3-win\gamemodes\Untitled.pwn(494) : warning 217: loose indentation
Pawn compiler 3.2.3664     Copyright (c) 1997-2006, ITB CompuPhase




5 Warnings.
Ссылка на сообщение
Поделиться на другие сайты

 

 

Золотое правило форума: хочешь отблагодарить? Жми +

 

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...
C:\Users\Àëåêñ\Desktop\srv-pawno-crmp-c3-win\gamemodes\simple.pwn(2) : fatal error 100: cannot read from file: "mxINI"

 

Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

 

 

1 Error.

 

Почему тут ошибку выдает, хотя все так же как и в уроке))

Ссылка на сообщение
Поделиться на другие сайты

@stariy-ded-1, Инклуд MxINI киньте в папку pawno/include

 

 

Золотое правило форума: хочешь отблагодарить? Жми +

 

Ссылка на сообщение
Поделиться на другие сайты
  • 4 недели спустя...
Гость
Эта тема закрыта для публикации ответов.
 Поделиться
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу