Урок №? Создание команд с переменными игрока.
[MTA]MaPeR5518 Дата: Среда, 21.09.2011, 07:20:32 | Сообщение # 1
Группа: Пользователи
Сообщений: 181
Итак, в этом уроке вы научитесь создавать команды типа Убить игрока по id или дать здоровье игроку по id. Для начала вставляем функцию, для считывания переменных из команд. Code
strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= " ");) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > " "); && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; }
Итак после этого, ищем паблик OnPlayerCommandText , для создания комманды. Попробуем создать команду для убийства игрока. Сделаем так: Code
if(strcmp("/killman", cmdtext, true, 10) == 0)
Этим, мы обозначили команду. Затем открываем скобочку. Вводим новую переменную, которая будет содержать переменную игрока; переменную, которая будет содержать номер переменной игрока и переменную, которая будет содержать ID игрока, которого надо убить: Code
new tmp[256]; new idx; new killid;
В нашей команде будет одна переменная - это ID игрока, которого нужно убить. Считываем её через strtok и записываем в переменную tmp: Code
tmp = strtok(cmdtext, idx);//Стандартная функция! Не изменять!
Конечно, не обойтись без проверки на существование переменной игрока. Если она не существует, будет высвечиваться сообщение белого цвета о том, как нужно вводить команду: Code
if(!strlen(tmp)) { SendClientMessage(playerid, 0xFFFFFFAA, "Используй: /killman [ID игрока]"); return 1; }
Если же переменная будет существовать, то нам нужно ввести её в переменную: Code
killid = strval(tmp);
Затем делаем проверку, есть ли игрок с данным ID на сервере: Code
if (IsPlayerConnected(killid))
После этого, создаем само действие команды: Code
SetPlayerHealth(killid, 0.0);
Теперь, сделаем отпротивное условие(Если игрок подключен): Code
else{ new string[64]; format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid); SendClientMessage(playerid, 0xFFFF00AA, string); }
Итак, как должна выглядеть команда? Code
if(strcmp("/killman", cmdtext, true, 10) == 0) { new tmp[256]; new idx; new killid; killid = strval(tmp); tmp = strtok(cmdtext, idx);//Стандартная функция! Не изменять! if(!strlen(tmp)) { SendClientMessage(playerid, 0xFFFFFFAA, "Используй: /killman [ID игрока]"); return 1; } if (IsPlayerConnected(killid)) { SetPlayerHealth(killid, 0.0); }else{ new string[64]; format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid); SendClientMessage(playerid, 0xFFFF00AA, string); } return 1; }
Урок by ARHI[V]IRUS([MTA]MaPeR5518)
Ничто не останавливает полет мысли программиста , как компилятор! + не помешает
Сообщение отредактировал [MTA]MaPeR5518 - Среда, 21.09.2011, 07:23:25
Сообщение Итак, в этом уроке вы научитесь создавать команды типа Убить игрока по id или дать здоровье игроку по id. Для начала вставляем функцию, для считывания переменных из команд. Code
strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= " ");) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > " "); && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; }
Итак после этого, ищем паблик OnPlayerCommandText , для создания комманды. Попробуем создать команду для убийства игрока. Сделаем так: Code
if(strcmp("/killman", cmdtext, true, 10) == 0)
Этим, мы обозначили команду. Затем открываем скобочку. Вводим новую переменную, которая будет содержать переменную игрока; переменную, которая будет содержать номер переменной игрока и переменную, которая будет содержать ID игрока, которого надо убить: Code
new tmp[256]; new idx; new killid;
В нашей команде будет одна переменная - это ID игрока, которого нужно убить. Считываем её через strtok и записываем в переменную tmp: Code
tmp = strtok(cmdtext, idx);//Стандартная функция! Не изменять!
Конечно, не обойтись без проверки на существование переменной игрока. Если она не существует, будет высвечиваться сообщение белого цвета о том, как нужно вводить команду: Code
if(!strlen(tmp)) { SendClientMessage(playerid, 0xFFFFFFAA, "Используй: /killman [ID игрока]"); return 1; }
Если же переменная будет существовать, то нам нужно ввести её в переменную: Code
killid = strval(tmp);
Затем делаем проверку, есть ли игрок с данным ID на сервере: Code
if (IsPlayerConnected(killid))
После этого, создаем само действие команды: Code
SetPlayerHealth(killid, 0.0);
Теперь, сделаем отпротивное условие(Если игрок подключен): Code
else{ new string[64]; format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid); SendClientMessage(playerid, 0xFFFF00AA, string); }
Итак, как должна выглядеть команда? Code
if(strcmp("/killman", cmdtext, true, 10) == 0) { new tmp[256]; new idx; new killid; killid = strval(tmp); tmp = strtok(cmdtext, idx);//Стандартная функция! Не изменять! if(!strlen(tmp)) { SendClientMessage(playerid, 0xFFFFFFAA, "Используй: /killman [ID игрока]"); return 1; } if (IsPlayerConnected(killid)) { SetPlayerHealth(killid, 0.0); }else{ new string[64]; format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid); SendClientMessage(playerid, 0xFFFF00AA, string); } return 1; }
Урок by ARHI[V]IRUS([MTA]MaPeR5518) Автор - [MTA]MaPeR5518 Дата добавления - 21.09.2011 в 07:20:32
[east_side]_trane Дата: Среда, 21.09.2011, 16:08:46 | Сообщение # 2
Группа: Пользователи
Сообщений: 443
tmp[256]; Зачем так много ОЗУ выделять ? Лучше будет так: А так урок нормальный лови +
Pawn скриптер Мои услуги по оптимизации
Сообщение tmp[256]; Зачем так много ОЗУ выделять ? Лучше будет так: А так урок нормальный лови + Автор - [east_side]_trane Дата добавления - 21.09.2011 в 16:08:46
[MTA]MaPeR5518 Дата: Пятница, 23.09.2011, 04:40:44 | Сообщение # 3
Группа: Пользователи
Сообщений: 181
Ну темп я поправил, а сам урок полезный, так как это основа для написания любой комманды с id'ом игрока
Ничто не останавливает полет мысли программиста , как компилятор! + не помешает
Сообщение Ну темп я поправил, а сам урок полезный, так как это основа для написания любой комманды с id'ом игрока Автор - [MTA]MaPeR5518 Дата добавления - 23.09.2011 в 04:40:44
TWiX Дата: Пятница, 23.09.2011, 05:38:49 | Сообщение # 4
Группа: Пользователи
Сообщений: 316
а как можно сделать чтоб выдавало оружие игроку? SetPlayerHealth - это дать хп, а как пишется функция чтоб выдавать оружие и куда вписывать список оружия? Или где можно найти список всех функций как SetPlayerHealth для игрока?
Хоронят олигарха. Гроб стоит. Собрались друзья. Подходит к покойному Гусинский, достает портмоне, извлекает 200 долларов, кладет в гроб и скорбно отходит. За Гусинским к гробу подходит Потанин, тоже достает портмоне, отсчитывает 200 долларов, кладет, отходит. Наконец, подбегает Березовский. Достает чековую книжку, выписывает чек на 600 долларов, кладе, забирает 400 баксов наличными, отходит.
Сообщение а как можно сделать чтоб выдавало оружие игроку? SetPlayerHealth - это дать хп, а как пишется функция чтоб выдавать оружие и куда вписывать список оружия? Или где можно найти список всех функций как SetPlayerHealth для игрока? Автор - TWiX Дата добавления - 23.09.2011 в 05:38:49
[MTA]MaPeR5518 Дата: Пятница, 23.09.2011, 06:45:37 | Сообщение # 5
Группа: Пользователи
Сообщений: 181
Про оружие надо просто переменные задать по оружке вот пример Code
if (strcmp("/giveweapon", cmd, true) == 0 && PlayerInfo[playerid][pAdmin] >= 3) { new giveplayerid, giveweapon, giveammo; tmp = strtok(cmdtext, idx); giveplayerid = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]"); return 1; } tmp = strtok(cmdtext, idx); giveweapon = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]"); return 1; } tmp = strtok(cmdtext, idx); giveammo = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]"); return 1; } if(!IsPlayerConnected(giveplayerid)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: Игрок Offline"); return 1; } if(giveweapon < 1 || giveweapon > 46) { SendClientMessage(playerid, 0xFF0000AA, "Используйте ид оружия от 1 до 46"); return 1; } GivePlayerWeapon(giveplayerid, giveweapon, giveammo); return 1; }
А по здоровью: Code
if (strcmp("/sethealth", cmd, true) == 0 && PlayerInfo[playerid][pAdmin] >= 3) { new giveplayerid, sethealth; new string[128]; tmp = strtok(cmdtext, idx); giveplayerid = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /sethealth [id] [количетво]"); return 1; } tmp = strtok(cmdtext, idx); sethealth = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /sethealth [id] [количетво]"); return 1; } if(!IsPlayerConnected(giveplayerid)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: Игрок Offline"); return 1; } SetPlayerHealth(giveplayerid,sethealth); format(string,128,"Вы установили игроку %s %d hp",GetPlayerNameEx(giveplayerid),sethealth); SendClientMessage(playerid,0xFFFF00AA,string); return 1; }
Ничто не останавливает полет мысли программиста , как компилятор! + не помешает
Сообщение Про оружие надо просто переменные задать по оружке вот пример Code
if (strcmp("/giveweapon", cmd, true) == 0 && PlayerInfo[playerid][pAdmin] >= 3) { new giveplayerid, giveweapon, giveammo; tmp = strtok(cmdtext, idx); giveplayerid = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]"); return 1; } tmp = strtok(cmdtext, idx); giveweapon = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]"); return 1; } tmp = strtok(cmdtext, idx); giveammo = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]"); return 1; } if(!IsPlayerConnected(giveplayerid)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: Игрок Offline"); return 1; } if(giveweapon < 1 || giveweapon > 46) { SendClientMessage(playerid, 0xFF0000AA, "Используйте ид оружия от 1 до 46"); return 1; } GivePlayerWeapon(giveplayerid, giveweapon, giveammo); return 1; }
А по здоровью: Code
if (strcmp("/sethealth", cmd, true) == 0 && PlayerInfo[playerid][pAdmin] >= 3) { new giveplayerid, sethealth; new string[128]; tmp = strtok(cmdtext, idx); giveplayerid = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /sethealth [id] [количетво]"); return 1; } tmp = strtok(cmdtext, idx); sethealth = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /sethealth [id] [количетво]"); return 1; } if(!IsPlayerConnected(giveplayerid)) { SendClientMessage(playerid, 0xFF0000AA, "Ошибка: Игрок Offline"); return 1; } SetPlayerHealth(giveplayerid,sethealth); format(string,128,"Вы установили игроку %s %d hp",GetPlayerNameEx(giveplayerid),sethealth); SendClientMessage(playerid,0xFFFF00AA,string); return 1; }
Автор - [MTA]MaPeR5518 Дата добавления - 23.09.2011 в 06:45:37
Загрузка страницы, займет меньше минуты...
Статистика Форума
Последнии темы
Читаемые темы
Лучшие пользователи
Новые пользователи