shape1
shape2
shape3
shape4
shape7
shape8

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


Статус
Закрыто для дальнейших ответов.

danilasar

Пошел ко мне? Да ты умняшка! Пиши в ЛС!
Пользователь
12.05.2016
200
80
0
24
Доброго времени суток! В серии уроков "Создание мода с нуля" я расскажу вам о том, как создать мод с нуля.

Обратите внимание!
Если вы не читали мой первый урок - обязательно прочтите!
В прошлом уроке мы создали мод и работали над скинами и спавном пользователей. В этом уроке я более подробно расскажу о пользователях.

Вход и регистрация
Пользователи будут на mxINI. Качаем инклуд mxINI:

mxINI.inc

В нашем моде находим:

#include <a_samp>

После этого пишем:

#include <mxINI>

forward OnPlayerRegister(playerid, password[]);
forward OnPlayerLogin(playerid,password[]);
enum pInfo
{
pPass[64],
pAdmin,
};
new Player[MAX_PLAYERS][pInfo];
new PAccount[MAX_PLAYERS];

Далее в public OnPlayerConnect:

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,"Вход","Аккаунт зарегистрирован, введите пароль","Вход","");// Показываем диалог регистрации.
}

В public OnPlayerDisconnect:

SavePlayer(playerid);

В public OnDialogResponse:

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);// Паблик входа
    }
    else// Если игрок нажал Escape,то покажем ему диалог
    {
        ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Вход","Аккаунт зарегистрирован, введите пароль","Вход","");// показываем диалог
    }
}
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);// Запускаем паблик регистрации
    }
    else// Если игрок нажал Escape
    {
        ShowPlayerDialog(playerid,3,DIALOG_STYLE_INPUT,"Вход","Аккаунт зарегистрирован, введите пароль","Вход","");// Показываем диалог регистрации
    }
}

В конец мода:

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_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_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_closeFile(iniFile);// Закрываем файл
}
else// Если пароль не верен..
{
ini_closeFile(iniFile);// Закрываем файл
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Вход","Аккаунт зарегистрирован, введите пароль","Вход","");// показываем диалог
return 1;
}
SendClientMessage(playerid,green,"Добро пожаловать на наш сервер");// Выводим игрок сообщение
}
return 1;
}

Это сохранит админку и пароль. Если хорошо подумать, надо сделать сохранение денег, score, киллов, оружия и т.п.

В enum pInfo:

pKills,
pCash,
pScore,

В public OnPlayerRegister (после строки ini_setInteger(iniFile, "Admin", 0); // Это не админитсратор):

ini_setInteger(iniFile, "Score", 0);
ini_setInteger(iniFile, "Kills", 0);
ini_setInteger(iniFile, "Cash", 500);

В stock SavePlayer (после строки 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]);

В public OnPlayerLogin (после строки 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]);
GivePlayerMoney(playerid,Player[playerid][pCash]);
SetPlayerScore(playerid, Player[playerid][pScore]);

Ну вот, теперь у нас есть пользователи. Теперь приступим к Админ-Центру.

P.S. Для создания этой части урока пользовался мануалом .

Администраторский раздел
Теперь нам нужен администраторский раздел. Сделаем его через TAB. В enum pInfo:

Muted,
Jailed,
SpecID[MAX_PLAYERS],
SpecType[MAX_PLAYERS],
Freeze,
Zhertva,
Spawned,

В public OnPlayerCommandText:

if(strcmp(cmdtext,"/spec-off",true) == 0)
{
TogglePlayerSpectating(playerid, 0);
Player[playerid][SpecID] = INVALID_PLAYER_ID;
Player[playerid][SpecType] = SPEC_TYPE_NONE;
SendClientMessage(playerid,0x33AAFFAA,"Слежка отключена");
return 1;
}

В public OnPlayerClickPlayer:

if(Player[playerid][pAdmin] == 1)
{
ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"Администраторский раздел","Пнуть\nУбить\nВзорвать\nЗаткнуть\nKикнуть\nЗабанить\nТП к игроку\nТП игрока к себе\nПосадить\nСледить\nЗамарозить\n","Применить","Отмена");
Player[playerid][Zhertva] = clickedplayerid;
}

В public OnDialogResponse:

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
{
}
}

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

Итог работы:

  • Создана регистрация
  • Создан вход
  • Создано сохранение игроков
  • Создан Администраторский раздел
В нашем моде уже есть:

  • Название мода
  • Спавн игроков
  • Скины при входе
  • Регистрация
  • Вход
  • Сохранение игроков
В следующем уроке ждите:

  • Меню сервера
  • Пользовательские команды
Автор: danilasar

 

Вложения

  • mxINI.inc
    61,7 КБ · Просмотры: 24

danilasar

Пошел ко мне? Да ты умняшка! Пиши в ЛС!
Пользователь
12.05.2016
200
80
0
24
, что ты не понял? Давай я попытаюсь объяснить - будет полезнее. 

 

Forumnik

Освоившийся
Пользователь
02.09.2015
82
15
0
Скриптер
C:\Users\X\Desktop\Unite Role Play\gamemodes\Untitled.pwn(115) : error 017: undefined symbol "SPEC_TYPE_NONE"
 
Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase
 
вылезла такая ошибка 
 
Последнее редактирование модератором:

danilasar

Пошел ко мне? Да ты умняшка! Пиши в ЛС!
Пользователь
12.05.2016
200
80
0
24

Forumnik

Освоившийся
Пользователь
02.09.2015
82
15
0
Скриптер
@danilasar, скинь свой мод пожалуйста . Варнинги и прочая фигня лезет, скинь свою pwn пожалуйста третьей версии .

 

danilasar

Пошел ко мне? Да ты умняшка! Пиши в ЛС!
Пользователь
12.05.2016
200
80
0
24
скинь свою 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;
}

P.S. После выхода 3-го урока были изменения.

Варнинги и прочая фигня лезет
Может, с табуляцией проблемы?

 

andrei58russ

Освоившийся
Пользователь
19.04.2016
594
1
31
0
32
Автор забыл скорее всего еще указать то что нужно в папке scriptfiles нужно создать папку users что бы акки туда записывались!

Дополнение к сообщению:
Сервер даже с твоим кодом Unknown почему такое?

 

danilasar

Пошел ко мне? Да ты умняшка! Пиши в ЛС!
Пользователь
12.05.2016
200
80
0
24
Автор забыл скорее всего еще указать то что нужно в папке scriptfiles нужно создать папку users что бы акки туда записывались!
Ничего я не забыл. Можно и самому догадаться.

Сервер даже с твоим кодом Unknown почему такое?
Или коряво вставил или еще что-то.

P.S. почему может быть Unknown:

  • В server.cfg ошибка
  • При компилировании были варнинги или ошибки.
  • Не скомпилировал
  • Мод не в папке gamemodes
  • Удалил AMX-файл
 

andrei58russ

Освоившийся
Пользователь
19.04.2016
594
1
31
0
32
@danilasar,Я не первый раз ставлю мод! Код твой скопировал полностью,в сервер кфг все отлично,компилировал без всяких ошибок! 

 

danilasar

Пошел ко мне? Да ты умняшка! Пиши в ЛС!
Пользователь
12.05.2016
200
80
0
24
@andrei58russ, ну я не знаю. У меня всё работает. MP какой версии? Если 0.3b, возможно, работать не будет. Урок по созданию мода для Criminal Russia Multiplayer 0.3e и старше.

 

danilasar

Пошел ко мне? Да ты умняшка! Пиши в ЛС!
Пользователь
12.05.2016
200
80
0
24
@andrei58russ, ну не знаю. У всех все работает, у тебя и еще одного человека ничего. Скинь лог сервера, может там что-нибудь. 

 

andrei58russ

Освоившийся
Пользователь
19.04.2016
594
1
31
0
32
@danilasar,Логи

Код:
----------
Loaded log file: "server_log.txt".
----------

SA-MP Dedicated Server
----------------------
v0.3e, (C)2005-2012 SA-MP Team

[22:23:02] 
[22:23:02] Server Plugins
[22:23:02] --------------
[22:23:02]  Loading plugin: sscanf.so
[22:23:02] 

[22:23:02]  ===============================

[22:23:02]       sscanf plugin loaded.     

[22:23:02]          Version:  2.8.1        

[22:23:02]    (c) 2012 Alex "Y_Less" Cole  

[22:23:02]  ===============================

[22:23:02]   Loaded.
[22:23:02]  Loading plugin: streamer.so
[22:23:02] 

*** Streamer Plugin v2.6.1 by Incognito loaded ***

[22:23:02]   Loaded.
[22:23:02]  Loaded 2 plugins.

[22:23:02] 
[22:23:02] Ban list
[22:23:02] --------
[22:23:02]  Loaded: samp.ban
[22:23:02] 
[22:23:02] 
[22:23:02] Filterscripts
[22:23:02] ---------------
[22:23:02]   Loading filterscript 'fsdebug.amx'...
[22:23:02] 
  *********************
  * SA:MP DEBUG 0.2   *
[22:23:02]   * By Simon Campbell *
  *********************
[22:23:02]   * Version: 0.5d     *
  *********************
[22:23:02]   * -- LOADED         *
  *********************

[22:23:02]   Loading filterscript 'fly.amx'...
[22:23:02]   Loaded 2 filterscripts.

[22:23:02] Script[gamemodes/new.amx]: Run time error 20: "Invalid index parameter (bad entry point)"
[22:23:02] Number of vehicle models: 0 
 

danilasar

Пошел ко мне? Да ты умняшка! Пиши в ЛС!
Пользователь
12.05.2016
200
80
0
24
@andrei58russ, поставь плагин crashdetect и запусти компиляцию в режиме отладки.

 

Данил3342

Освоившийся
Пользователь
10.12.2014
20
15
0
Вроде как урок, но где ты тут чему учишь? Просто создаем мод типа CTRL + C - CTRL + V ? Тогда уж лучше скачать готовый мод. ИМХО.

 
Статус
Закрыто для дальнейших ответов.