Перейти к содержанию

Поиск сообщества

Показаны результаты для тегов 'уроки crmp'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Информационный раздел
    • Новости портала
    • Техническая поддержка
    • Приватный форум
  • CRMP 0.3е
    • Помощь по Скриптингу
    • Ошибки
    • Готовые сервера
    • Дополнительные скрипты
    • Мануалы/Уроки
    • Модификации
    • Поиск
    • Архив Вопросов/Проблем/Ошибок
    • Файловый архив
    • Другое
  • SAMP/CRMP 0.3.7
    • Помощь по Скриптингу
    • Ошибки
    • Готовые сервера
    • Плагины
    • Поиск
    • Документация
  • Другое
    • Флейм

Поиск результатов в...

Поиск результатов, которые содержат...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Найдено: 180 результатов

  1. Показываю как сделать бан на время с использованием Unix Времени + MxINI Бан работает так банишь игрока /ban [1-сек,2-мин,3-часы,4-дни] [ид] [число времени] [причина] пример /ban 2 1 10 проверка Если человек забанен и он заходит на сервер то ему вылазиет диалог когда он был забанен,когда разбанят,причина и потом кикает. Если бан закончится то аккаунт который забанен будет лежать в папке banlist пока игрок которого забанили зайдет снова на сервер. Важно: создать папку в scriptfiles с названием banlist Скачать инклуды можно тут ИНКЛУД (http://rghost.ru/35622578) Инклуды кидать в папку pawno->include, если есть то заменить. Время перевода с Unix на нормальное настроенно на московское В начало мода вставляем если нету #include <MxINI> #include <mxdate> // Для диалогов id меняйте на ваши свободные #define DIALOGUNBAN 1 // id дилога для высвечивания даты Это в свободное место stock GetBan(playerid) { new PlayerNick[MAX_PLAYER_NAME],string[255]; GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME); format(string, sizeof(string), "banlist/%s.ini", PlayerNick); if(fexist(string)) { new OpenBan = ini_openFile(string); new bantime, unbantime, PlayerBan[MAX_PLAYER_NAME], reason[128]; ini_getInteger(OpenBan, "BanTime", bantime); ini_getInteger(OpenBan, "UnBanTime", unbantime); ini_getString(OpenBan, "PlayerBan", PlayerBan); ini_getString(OpenBan, "Reason", reason); ini_closeFile(OpenBan); if(gettime() >= unbantime) return UnBan(PlayerNick); else { format(string, sizeof(string), "\ Дата бана: %s\n\ Дата Разбана: %s\n\ Забанил: %s\n\ Причина бана: %s\n\ ", date("%dd.%mm.%yyyy в %hh:%ii:%ss",bantime), date("%dd.%mm.%yyyy в %hh:%ii:%ss",unbantime), PlayerBan,reason); ShowPlayerDialog(playerid,DIALOGUNBAN,0,"Вы забанены",string,"Выйти",""); return Kick(playerid); } } else return true; } stock UnBan(playerid[]) { new string[64]; format(string, sizeof(string), "banlist/%s.ini", playerid); return fremove(string); } stock AddBan(player, playerid[], giveplayerid[], type = 1, chislo = 0, reason[]) { new totalban = 0; switch(type) { case 1: totalban = 60*chislo; // минуты case 2: totalban = 3600*chislo; // часы case 3: totalban = 86400*chislo; // сутки default: totalban = chislo; // секунды } new string[64]; format(string, sizeof(string), "banlist/%s.ini", playerid); new OpenBan = ini_createFile(string); if(OpenBan < 0) ini_openFile(string); ini_setInteger(OpenBan, "BanTime", gettime()); ini_setInteger(OpenBan, "UnBanTime", gettime()+totalban); ini_setString(OpenBan, "PlayerBan", giveplayerid); ini_setString(OpenBan, "Reason", reason); ini_closeFile(OpenBan); // Закрываем файл. ShowPlayerDialog(player,DIALOGUNBAN,0,"Вы забанены","{FF0000}Вы забанены","Выйти",""); return Kick(player); } Далее вставляем в начало паблика OnPlayerConnect GetBan(playerid); Далее создадим саму команду бана (оптимизируйте под себя её) сделал под GF if(strcmp(cmd, "/ban", true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]"); giveplayerid = strval(tmp); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]"); new type = strval(tmp); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]"); new chislo = strval(tmp); if(PlayerInfo[playerid][pAdmin] >= 4) { if(giveplayerid != INVALID_PLAYER_ID) { new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] <= ' ')) idx++; new offset = idx; new result[64]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if(!strlen(result)) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /ban [playerid] [type:(1-минуты)(2-часы)(3-дни)(другое секунды)] [число] [причина]"); new PlayerNick[MAX_PLAYER_NAME], PlayerBan[MAX_PLAYER_NAME]; GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME); GetPlayerName(giveplayerid, PlayerBan, MAX_PLAYER_NAME); AddBan(giveplayerid, PlayerBan, PlayerNick, type, chislo, result); return true; }//not connected } return true; } Теперь создадим команду разбана ниже if(strcmp(cmd,"/unban",true)==0) { if(PlayerInfo[playerid][pAdmin] >= 8) { tmp = strtok(cmdtext,idx); if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GRAD1,"/unban [players nick]"); UnBan(tmp); } return true; } Автор:Lik Взято с павно портала
  2. Доброго времени суток. Опять от безделья чтото да наколякал :) Крч новый подгон. Управление коордами. И так ид сторон : 0 : Вверх 1 : Вниз 2 : Влево 3 : Вправо. И так суть команды : Вы можете перемещать любого игрока на своё расстояние. Начнём команду вписывать в мод : Создаём #forward : #forward SetPlayerConsumPosition(playerid, using, typeid); Далее вставляем саму команду в public OnPlayerCommandTex() Для sscanf'щиков :) : if(strcmp(cmd, "/setpos", true) == 0) { if(!IsPlayerConnected(playerid)) return true; //if(Player[playerid][pAdmin] < 3) return true; // Проверка на админку if(sscanf(params, "iii", params[0],params[1],params[2])) return SendClientMessage(playerid,-1,"Ошибка команды : Введите [ID][Сторона][Радиус]"); return SetPlayerConsumPosition(params[0],params[1],params[2]); } Для простых процессеров : if(strcmp(cmd, "/setpos", true) == 0) { new TYPE[3]; cmd = strtok(cmdtext, idx); if(!IsPlayerConnected(playerid)) return true; if(!strlen(cmd)) return SendClientMessage(playerid,-1,"Ошибка команды : Введите [ID][Сторона][Радиус]"); TYPE[0] = strval(cmd); cmd = strtok(cmdtext, idx); if(!strlen(cmd)) return SendClientMessage(playerid,-1,"Ошибка команды : Введите [ID][Сторона][Радиус]"); TYPE[1] = strval(cmd); cmd = strtok(cmdtext, idx); if(!strlen(cmd)) return SendClientMessage(playerid,-1,"Ошибка команды : Введите [ID][Сторона][Радиус]"); TYPE[2] = strval(cmd); return SetPlayerConsumPosition(TYPE[0],TYPE[1],TYPE[2]); } И в конец мода создай сток и кэллбек : public SetPlayerConsumPosition(playerid,using,typeid) { new Float:POS[3] ,str[50], string[128]; GetPlayerPos(playerid,POS[0],POS[1],POS[2]); // Узнаём координаты. switch(using) { case 0: SetPlayerPos(playerid, POS[0], POS[1], POS[2]+typeid), str = ("вверх"); // Суммируем полученные координаты case 1: SetPlayerPos(playerid, POS[0], POS[1], POS[2]-typeid), str = ("ввниз"); // Суммируем полученные координаты case 2: SetPlayerPos(playerid, POS[0], POS[1]-typeid, POS[2]), str = ("влево"); // Суммируем полученные координаты case 3: SetPlayerPos(playerid, POS[0], POS[1]+typeid, POS[2]), str = ("вправо"); // Суммируем полученные координаты } format(string,128,"- %s был перемешенны на %i %s",GetPlayerNameEx(playerid),typeid,str); return SendClientMessage(playerid,-1,string); } И сток для определения имён : stock GetPlayerNameEx(playerid) { new pname[MAX_PLAYER_NAME]; new i; GetPlayerName(playerid,pname,sizeof(pname)); GPNXLABEL: i = strfind(pname,"_",true); if(i != (-1)) pname[i] = ' '; if(strfind(pname,"_",true)>-1)goto GPNXLABEL; return pname; } Вот и всё. Автор : Trateus
  3. Доброго времени суток форумчане. Вот от скукоты решил сделать небольшую команду. В самое начало добавим форвард forward SetPlayerSlap(playerid,typeid); Для тех у кого стоит sscanf : В public OnPlayerCommandText if(strcmp(cmd, "/slap", true) == 0) { if(!IsPlayerConnected(playerid)) return true; if(sscanf(params, "ii", params[0],params[1])) return SendClientMessage(playerid,-1,"Ошибка команды : Введите [ID][Высота]"); if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid,-1,"Данный игрок не подключен."); return SetPlayerSlap(params[0],params[1]); } Для тех у кого utils : В public OnPlayerCommandText if(strcmp(cmd, "/slap", true) == 0) { new type[2]; if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Ошибка команды : Введите [ID][Высота]"); type[0] = strval(strtok(cmdtext, idx)); type[1] = strval(strtok(cmdtext, idx)); if(!IsPlayerConnected(playerid)) return true; if(!IsPlayerConnected(player)) return true; return SetPlayerSlap(type[0],type[1]); } В конец мода ставим этот паблик: public SetPlayerSlap(playerid,typeid) { new Float:sPOS[3]; new str[128]; GetPlayerPos(playerid, sPOS[0], sPOS[1], sPOS[2]); SetPlayerPos(playerid, sPOS[0], sPOS[1], sPOS[2]+typeid); format(str,128,"Игрок %s был слэпнут на расстояние %i метров вверх",GetPlayerNameEx(playerid),typeid); SendClientMessageToAll(-1,str); return true; } Добавим ещё определение имён : stock GetPlayerNameEx(playerid) { new pname[MAX_PLAYER_NAME]; GetPlayerName(playerid,pname,sizeof(pname)); new i; GPNXLABEL: i = strfind(pname,"_",true); if(i != (-1)) pname[i] = ' '; if(strfind(pname,"_",true)>-1)goto GPNXLABEL; return pname; } На этом всё. Автор : Trateus.
  4. Frost1217

    Записка на авто

    Здравствуйте дорогие пользователи gsgames,сегодня мы создадим с вами мануал,который поможет создать записку на автомобиль. К примеру! "Продам авто.Тел:******" Очень полезный мануал чтобы не писать в /ad продам машину,вместо этого у вас на заднем окне машины будет написано объявление. Начнем! Скрипт пойдет только на CR:MP Автор: Frost. Добавим ко всем new: new Text3D:Numbertext[MAX_VEHICLES]; Далее Ко всем цветам: #define COLOR_ZAO 0x4592DEAA За тем в enum aInfo добавим,если нету создадите сами: aTextCar, Ну а теперь добавим сами команды добавляем в public OnPlayerCommandText: if (strcmp(cmd, "/zapiska", true) == 0) { new v = GetPlayerVehicleID(playerid); new text_car[256]; if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pCarKey2] == 0 && PlayerInfo[playerid][pCarKey] == 0) { SendClientMessage(playerid,COLOR_ZAO,"У вас нет авто"); return 1; } if(AutoInfo[v][aTextCar]==1) { SendClientMessage(playerid, COLOR_LIGHTRED, "На транспорте уже есть записка"); return 1; } new cari = GetPlayerVehicleID(playerid); if(cari == PlayerInfo[playerid][pCarKey] || cari == PlayerInfo[playerid][pCarKey2]) { new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] На этом все :) Скриншоты скоро выкладу.
  5. Как мы с Вами знаем , при создание пабликов , надо строго создавать forward'ы Но с кусочком этого кода , нам этого не понадобится В начало мода к define добавим: #define pubfor:%0(%1) forward %0(%1); public %0(%1) И теперь при создании паблика не пишем public . а пишем pubfor Пример: pubfor: Vasek(playerid) Стандартные паблики не изменять!!
  6. EgorKa29

    Телепорт по TAB

    Здравствуйте уважаемые пользователи gs-games. Сегодня я хочу рассказать вам как создать телепорт по кнопке TAB. Начнем. 1. В public OnPlayerClickPlayer(playerid, clickedplayerid, source) Добавляем if(PlayerInfo[playerid][pAdmin] < 1) return true; new Float:x,Float:y,Float:z; GetPlayerPos(clickedplayerid,x,y,z);//текущие координаты игрока, на которого кликаем if (GetPlayerState(playerid) == 2)//находитесь ли вы сейчас в автомобиле { SetVehiclePos(GetPlayerVehicleID(playerid), x, y+4, z);//перемещаем автомобиль по координатам игрока LinkVehicleToInterior(GetPlayerVehicleID(playerid), GetPlayerInterior(clickedplayerid));// загружаем его интерьер SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(clickedplayerid));//загружаем его виртуальный мир } else//если вы пешком { SetPlayerPos(playerid,x,y+2,z);//телепортируем к игроку SetPlayerInterior(playerid,GetPlayerInterior(clickedplayerid));// загружаем его интерьер SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(clickedplayerid));//загружаем его виртуальный мир SendClientMessage(playerid, COLOR_GREY, "Вы телепортировались к игроку"); } Вот и все не чего сложного нет. Ну как же без скринов. Скрины. 1. http://imgdepo.ru/id/i6060290 2. http://imgdepo.ru/id/i6060295
  7. Ничего мудреного - обычная команда с анимацией избушки на персонаже.
  8. В этом уроке вы узнаете как сделать динамическое название сервера(hostname). Ко всем new, добавляем: new gChangeHN; В OnGameModeInit(), добавим таймер: SetTimer("ChangeHostname", 10000, 1); // Промежуток времени, через которое будет меняться название сервера(Сейчас стоит 10 сек.) В конец мода(ну или куда удобнее), добавим: forward ChangeHostname(); public ChangeHostname() { switch (gChangeHN) { case 0: SendRconCommand("hostname Название RP [CR-MP 0.3e]"); //Название 1 case 1: SendRconCommand("hostname Название RP [Присоединяйся!]"); //Название 2 } if(gChangeHN == 2) { gChangeHN = 0; } else { gChangeHN++; } } Автор: Неизвестен
  9. Всем привет. Наверное многих кто работал с модом Gamer достал один баг, вроде в исправлении легкий но сложный в поиске. Я долго искал в чем проблема, пока не начал по этапно изучать все. Как извесно баг заключается в том что авто после рес кара ставало не так как его парковали. Но после "Рестарта" все было норм. Кароче говоря проблема в одном паблике OnVehicleSpawn(vehicleid). Для того что бы вам исправить баг нужно заменить всего пару строчек. В геймере этот паблик выглядит так: public OnVehicleSpawn(vehicleid) { DestroyObject(Blink[vehicleid][0]); DestroyObject(Blink[vehicleid][1]); VehInfo[vehicleid][vRightBlink] = 0; DestroyObject(Blink[vehicleid][2]); DestroyObject(Blink[vehicleid][3]); VehInfo[vehicleid][vLeftBlink] = 0; if(GetRealID(vehicleid) != -1) { if(!strcmp(CarInfo[GetRealID(vehicleid)][cOwner],"Nones",false)) { SetVehiclePos(vehicleid,CarInfo[GetRealID(vehicleid)][cAx],CarInfo[GetRealID(vehicleid)][cAy],CarInfo[GetRealID(vehicleid)][cAz]); SetVehicleZAngle(vehicleid,CarInfo[GetRealID(vehicleid)][cAa]); } else { SetVehiclePos(vehicleid,CarInfo[GetRealID(vehicleid)][cPx],CarInfo[GetRealID(vehicleid)][cPy],CarInfo[GetRealID(vehicleid)][cPz]); SetVehicleZAngle(vehicleid,CarInfo[GetRealID(vehicleid)][cPa]); } ChangeVehicleColor(vehicleid,CarInfo[GetRealID(vehicleid)][cCol1],CarInfo[GetRealID(vehicleid)][cCol2]); SetTuneCar(vehicleid); } return 1; } Но функция здесь не верна, так как SetVehicleZAngle не загружает угол поворота если персонаж не находится в авто. По этому что бы загружать угол поворота вам нужно сделать уничтожение авто и создание нового. Выглядит это примерно вот так: public OnVehicleSpawn(vehicleid) { DestroyObject(Blink[vehicleid][0]); DestroyObject(Blink[vehicleid][1]); VehInfo[vehicleid][vRightBlink] = 0; DestroyObject(Blink[vehicleid][2]); DestroyObject(Blink[vehicleid][3]); VehInfo[vehicleid][vLeftBlink] = 0; DestroyVehicle(CarInfo[GetRealID(vehicleid)][cID]);//Удаляем авто if(!strcmp(CarInfo[GetRealID(vehicleid)][cOwner],"Nones",false)) { CarInfo[GetRealID(vehicleid)][cID] = CreateVehicle(CarInfo[GetRealID(vehicleid)][cMod],CarInfo[GetRealID(vehicleid)][cAx],CarInfo[GetRealID(vehicleid)][cAy],CarInfo[GetRealID(vehicleid)][cAz],CarInfo[GetRealID(vehicleid)][cAa],CarInfo[GetRealID(vehicleid)][cCol1],CarInfo[GetRealID(vehicleid)][cCol2],60000*4); } else { CarInfo[GetRealID(vehicleid)][cID] = CreateVehicle(CarInfo[GetRealID(vehicleid)][cMod],CarInfo[GetRealID(vehicleid)][cPx],CarInfo[GetRealID(vehicleid)][cPy],CarInfo[GetRealID(vehicleid)][cPz],CarInfo[GetRealID(vehicleid)][cPa],CarInfo[GetRealID(vehicleid)][cCol1],CarInfo[GetRealID(vehicleid)][cCol2],60000*4); } ChangeVehicleColor(vehicleid,CarInfo[GetRealID(vehicleid)][cCol1],CarInfo[GetRealID(vehicleid)][cCol2]); SetTuneCar(vehicleid); ChangeVehiclePaintjob(vehicleid,CarInfo[GetRealID(vehicleid)][cPaintJob]); SetTuneCar(vehicleid); return 1; } Взято с другого ресурса!!! Автор : Red_Devils
  10. Maximka

    Вип чат

    Здравствуйте Уважаемые пользователи сайта Gs-Games! Вот выкладываю вип чат(Для игроков с випом 1,2,и 3 лвл) Делал сам! Вот собственно команда Автор:Maximka if(strcmp(cmd, "/vc", true) == 0 || strcmp(cmd, "/v", true) == 0 || strcmp(cmd, "//", true) == 0) { if(IsPlayerConnected(playerid)) { GetPlayerName(playerid, sendername, sizeof(sendername)); new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] <= ' ')) { idx++; } new offset = idx; new result[72]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if(!strlen(result)) { SendClientMessage(playerid, COLOR_GRAD2, "*Используйте: (/vc)[Вип чат]"); return 1; } if (PlayerInfo[playerid][pDonateRank] == 1) { format(string, sizeof(string), "Bronse VIP`S %s: %s", sendername, result); SendClientMessageToAll(COLOR_ORANGE,string); } else if (PlayerInfo[playerid][pDonateRank] == 2) { format(string, sizeof(string), "Silver VIP`S %s: %s", sendername, result); SendClientMessageToAll(COLOR_WHITE,string); } else if (PlayerInfo[playerid][pDonateRank] == 3) { format(string, sizeof(string), "Gold VIP`S %s: %s", sendername, result); SendClientMessageToAll(COLOR_YELLOW,string); } else { SendClientMessage(playerid, COLOR_GRAD1, " У вас нет прав!"); return 1; } printf("Vip %s: %s", sendername, result); } return 1; }
  11. Здравствуйте! Эта тема для тех, кто не знает как ставить анти чит в мод. Начнем. Ко всем include добавляем: #include <a_samp> Затем ко всем new: new Money[MAX_PLAYERS]; Теперь ищем форвары и ко всем forward: forward Loshadka(); И теперь в public вставим это: public Loshadka() { for(new i =0;i<MAX_PLAYERS;i++) { if(GetPlayerMoney(i) != Money[i]) { GivePlayerMoney(i,Money[i]-GetPlayerMoney(i)); //SendClientMessage(i,0xFEFEFEFF,"Не шали с читами тута"); } } } stock ResetPlMon(playerid) { Money[playerid] =0; GivePlayerMoney(playerid,0-GetPlayerMoney(playerid)); return 1; } stock GiveMoney(playerid,a) { Money[playerid] += a; GivePlayerMoney(playerid,a); return 1; } На этом все.
  12. Вы используйте команду /canal [1-10000] для выбора нужной вам частоты. После выбора частоты вы автоматический подключаетесь к выбранному вами каналу и можете активно вести общение с помощью команды /rс [текст]. Также другой или иной игрок может подключиться к вашей частоте. Ко всем forward: forward SendRcanalMessage(canal, color, string[]); Ко всем new: new Rcanal[MAX_PLAYERS]; В public OnPlayerConnect добавляем: Rcanal[playerid] = 0; В конец мода: public SendRcanalMessage(canal, color, string[]) { for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(Rcanal[i] == canal) { SendClientMessage(i, color, string); } } } }В public OnPlayerCommandText добавляем команды:if(strcmp(cmd, "/rс", true) == 0) { if(!IsPlayerConnected(playerid)) return 1; if(PlayerInfo[playerid][pMuted] == 1) return SendClientMessage(playerid, -1, "Вы не можете писать, у вас молчанка"); if(Rcanal[playerid] < 1) return SendClientMessage(playerid, -1, "Вы не на частоте. Подключитесь, используя /canal (номер канала от 0 по 10000)"); GetPlayerName(playerid, sendername, sizeof(sendername)); new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] <= ' ')) { idx++; } new offset = idx; new result[64]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if(!strlen(result)) return SendClientMessage(playerid, -1, "Используйте: /rc [текст]"); format(string, sizeof(string), "(%d) %s: %s", Rcanal[playerid], sendername, result); SendRcanalMessage(Rcanal[playerid], TEAM_CYAN_COLOR, string); return 1; } if(strcmp(cmd, "/canal", true) == 0) { if(!IsPlayerConnected(playerid)) return 1; tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Используйте: /canal [номер канала[(1-10000)]"); new canal; canal = strval(tmp); if(canal > 10000|| canal < 1) return SendClientMessage(playerid, -1, "Номер канала от 1 по 10000!"); Rcanal[playerid] = canal; format(string, sizeof(string), "Вы подключились к частоте номер %d", canal); SendClientMessage(playerid, COLOR_LIGHTBLUE,string); } Автор: NOD32
  13. Здравствуйте уважаемые пользователи Gs-Games. Сегодня я расскажу вам как создать пикап с бонусом. Начнем. 1. Сначала откроем наш мод. 2. Переходим в переменные new. И создадим там новою переменную. new FFF; 3. Далее перейдем в public OnGameModeInit И вставим туда. FFF = CreatePickup(ID пикапа,тип пикапа,X,Y,Z, ID виртуального мира пикапа);// Координаты X,Y,Z сменить на свои. Теперь когда мы создали пикап, наша задача сделать так, чтобы когда мы наступили на этот пикап нам выдавался бонус. 4. Идем далее в OnPlayerPickUpPickup Добавим следующее if(pickupid == FFF) // Это наше название пикапа, то есть когда мы записывали в переменной FFF значит и название будет FFF. { if(PlayerInfo[playerid][pLevel] >= 3) // Это проверка на то что-бы игрок не получил бонус два раза. { SendClientMessage(playerid, COLOR_PURPLE, "Этот бонус только для новичков 1 лвл."); return 1; } SendClientMessage(playerid,0xFFFF00AA,"Вы получили свой бонус!"); SendClientMessage(playerid, COLOR_WHITE, "2.000.000Р."); SendClientMessage(playerid, COLOR_WHITE, "3 LVL."); SendClientMessage(playerid, COLOR_WHITE, "Все лицензии."); PlayerInfo[playerid][pLevel] = 3; // Где 3 это уровень, если хотите уровень больше или меньше меняйте 3 на ваш уровень. GivePlayerMoney(playerid, 2000000); // 3000000 - это количество денег, которое выдаст вам. PlayerInfo[playerid][pCarLic] = 1; // Лицензия на вождение. PlayerInfo[playerid][pFlyLic] = 1; // Лицензия на воздушный транспорт. PlayerInfo[playerid][pMotoLic] = 1; // Лицензия на мотовождения. PlayerInfo[playerid][pBoatLic] = 1; // Лицензия на водное вождение. PlayerInfo[playerid][pGunLic] = 1; // Лицензия на оружие. } Ну все не чего сложного. Наш урок на этом заканчивается. Спасибо за внимание.
  14. Доброго времени суток. Для собственных нужд необходима была отправка в чат сообщений длиной более 128 символов, без обрыва строки на середине и с корректным переносом. Имеющиеся реализации не устроили - перенос был оформлен не совсем корректно, да и выглядеть будет некошерно. Реализовал собственное решение, полностью совместимое с синтаксисом стандартных SendClientMessage/SendClientMessageToAll. forward SendClientMessageEx (playerid, color, const message[]); forward SendClientMessageToAllEx (color, const message[]); public SendClientMessageEx (playerid, color, const message[]) { new length = strlen(message); new outstr[128]; new trim; if (length > 127) { for (new i = 127; i>=0; i--) { trim = i; if (message[i] == ' ') break; } if (trim < 64) trim = 127; strmid (outstr, message, 0, trim, 128); SendClientMessage (playerid, color, outstr); strmid (outstr, message, trim, length, 128); SendClientMessage (playerid, color, outstr); } else SendClientMessage (playerid, color, message); return 1; } public SendClientMessageToAllEx (color, const message[]) { new length = strlen(message); new outstr[128]; new trim; if (length > 127) { for (new i = 127; i>=0; i--) { trim = i; if (message[i] == ' ') break; } if (trim < 64) trim = 127; strmid (outstr, message, 0, trim, 128); SendClientMessageToAll (color, outstr); strmid (outstr, message, trim, length, 128); SendClientMessageToAll (color, outstr); } else SendClientMessageToAll (color, message); return 1; }Для наглядности - скриншот. Не стоит обращать внимания на то, что он снят на адаптации мультиплеера - функции будут корректно работать, даже если использовать 0.3a-ветку SA:MP.
  15. Многие просят вырезать систему авто с мода gamer. Сегодня решил попробовать вырезать. Вырезал не так что попадется, а компилировал как скрипт. Так что думаю ничего не упустил. В коде есть закомментированные строки, их нужно включить когда вошьете авторынок в свой мод. Если не включите, не пойми что у вас там случиться. Если возникнут проблемы при компиляции пишите в данную тему. Автор вырезки: Amfy auto.pwn
  16. Здравствуйте уважаемые форумчане! Решил вырезать из своего мода команду на рестарт(но это не обычная команда на рестарт,она с причиной) Ну все хватит говорить попусту приступим к работе! 1)Добавляем в public OnDialogResponse следующее: if(dialogid == 564) { if(response) { new pname[MAX_PLAYER_NAME]; new string[256]; GetPlayerName(playerid, pname, MAX_PLAYER_NAME); SendClientMessage(playerid,-1,"---------------------------------------------------------"); format(string, sizeof(string), "Гл.администратор %s : произвел рестарт сервера.", pname); SendClientMessageToAll(COLOR_GREEN,string); format(string, sizeof(string), "Причина рестарта: %s ",inputtext); SendClientMessageToAll(COLOR_RED,string); SendClientMessage(playerid,COLOR_YELLOW,"Через 10 секунды произодет рестарт"); SetTimer("GameModeInitExitFunc", 10000, false); SendClientMessage(playerid,-1,"---------------------------------------------------------"); new message[256]; format(message,sizeof(message),"Администратор: %s рестарт причина: %s",pname,inputtext); SendClientMessageToAll(COLOR_LIGHTBLUE,string); } else { SendClientMessage(playerid, COLOR_GRAD2, "Вы отменили рестарт"); return 1; }} Ну и саму команду для рестарта: if(strcmp(cmd, "/restart", true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pAdmin] >= 4) { ShowPlayerDialog(playerid,564,DIALOG_STYLE_INPUT,"Причина","Введите причину рестарта","ОК","Отмена"); } else { SendClientMessage(playerid, COLOR_GREEN, "Вы не уполномочены!"); } } return true; } Вот и все если есть недочеты я думаю вы исправите!Спасибо за внимание!Не судите строго
  17. Вы все знаете эту команду.и да я уверен она есть у всех!Но я выкладываю для новичков которые только начинают в скриптинге или тем кто пишет свой мод с 0. ну ладно приступим вот команда: if(strcmp(cmd, "/slap", true) == 0) { if(Offlineonline(playerid)) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /slap [playerid/PartOfName]"); return 1; } new playa; new Float:shealth; new Float:slx, Float:sly, Float:slz; playa = strval(tmp); if (PlayerInfo[playerid][pAdmin] >=3) { if(Offlineonline(playa)) { if(playa != INVALID_PLAYER_ID) { if(PlayerlogInfo[playa][lgolos] == 99||PlayerlogInfo[playa][lgolos] == 100){SendClientMessage(playerid, COLOR_ISPOLZUY,"Игрок имеет неприкосновенность!");return 1;} GetPlayerName(playa, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); GetPlayerHealth(playa, shealth); SetPlayerHealth(playa, shealth-5); GetPlayerPos(playa, slx, sly, slz); SetPlayerPos(playa, slx, sly, slz+5); PlayerPlaySound(playa, 1130, slx, sly, slz+5); printf("Админ: %s Подкинул %s",sendername, giveplayer); format(string, sizeof(string), "Администратор %s Дал ремешком по жопе игроку: %s ",sendername,giveplayer ); ABroadCast(0xD30505AA,string,1,playerid); } } } else { SendClientMessage(playerid, COLOR_GRAD1, "У вас нет прав на использование этой команды!"); } } return 1; }
  18. Всем привет Вот вырезал из своего мода, может кому надо. Варны можно снять обычной /unwarn if(strcmp(cmd, "/awarn", true) == 0) { if (PlayerInfo[playerid][pAdmin] >= 7) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /awarn [id] [причина]"); if (dostup[playerid] != 1) return ShowPlayerDialog(playerid,2934,DIALOG_STYLE_INPUT,"Доступ администратора","Введите пароль от административной панели","Ок","Отмена"); giveplayerid = ReturnUser(tmp); if (PlayerInfo[playerid][pAdmin] >= 7) { if(IsPlayerConnected(giveplayerid)) { if(giveplayerid != INVALID_PLAYER_ID) { GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] <= ' ')) { idx++; } new offset = idx; new result[64]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /awarn [id] [причина]"); PlayerInfo[giveplayerid][pWarns] += 1; PlayerInfo[giveplayerid][pAdmin] -=1; if(PlayerInfo[giveplayerid][pWarns] >= 3) { new ip[256]; new year, month,day; getdate(year, month, day); format(string, sizeof(string), "{ff4f30}Администратор %s был снят с администрирования админом %s [%d/3] предупреждений.", giveplayer,sendername,PlayerInfo[giveplayerid][pWarns]); SendClientMessageToAll(COLOR_LIGHTRED, string); format(string, sizeof(string), "Вы были сняты с должности администратора!"); SendClientMessage(giveplayerid, COLOR_LIGHTRED, string); GetPlayerIp(giveplayerid,ip,sizeof(ip)); PlayerInfo[giveplayerid][pAdmin] = 0; PlayerInfo[giveplayerid][pHelper] = 0; format(string, sizeof(string), "- Ник: [%s] IP: [%s]",giveplayer,ip); ABroadCast(COLOR_LIGHTRED,string,1); return 1; } format(string, sizeof(string), "{ff4f30}Администратор %s получил предупреждение от %s [%d/3]. Причина: %s", giveplayer,sendername,PlayerInfo[giveplayerid][pWarns], (result)); SendClientMessageToAll(COLOR_LIGHTRED,string); format(string, sizeof(string), "Внимание! Вы получили предупреждение! После 3-х предупреждений вы будете сняты с должности!"); SendClientMessage(giveplayerid, COLOR_LIGHTRED, string); return 1; } } } else { SendClientMessage(playerid, COLOR_GREY, "[Ошибка] Игрок не найден!"); } } return 1; } Значения: if (PlayerInfo[playerid][pAdmin] >= 7) 7 - Уровень администрирования, с которого можно выдавать предупреждение ------------------------------------------------------------------------------------------------------------ PlayerInfo[giveplayerid][pAdmin] -=1; -=1 - На сколько раз уровень администрирования понизится при предупреждении -------------------------------------------------------------------------------------------------------------- PlayerInfo[giveplayerid][pAdmin] = 0; 0 - Уровень администрирования после максимального количества предупреждений Думаю, разберетесь, т.к. я все подробно расписал. Если будут ошибки при компилировании или что то еще, пишите в тему, постараюсь ответить всем.
  19. Здравствуйте ув. пользователи сайта gs-games , сегодня я вам расскажу о оптимизации игровых модов. Посмотрим как будет выгледеть обычная команда: if(strcmp(cmd,"/tskill",true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pTskill] > 1000){ PlayerInfo[playerid][pTskill] = 1000; } if(PlayerInfo[playerid][pTskill] < 0){ PlayerInfo[playerid][pTskill] = 0; } format(string,sizeof(string),"Ваш скилл : %d / 1000",PlayerInfo[playerid][pTskill]); SendClientMessage(playerid,COLOR_BLUE,string); return 1; } return 1; } Теперь посмотрите команду более оптимизированую: CMD:tskill(playerid, params[]) { if(!IsPlayerConnected(playerid)) return true; if(PlayerInfo[playerid][pTskill]>999) return PlayerInfo[playerid][pTskill]=1000; if(PlayerInfo[playerid][pTskill]<0) return PlayerInfo[playerid][pTskill]=0; format(string,sizeof(string),"Ваш скилл : %d / 1000",PlayerInfo[playerid][pTskill]); SendClientMessage(playerid,COLOR_BLUE,string); return true; } 1) Комманды станут короче и более оптимизированы. Диалоги: Диалог до оптимизации: if(dialogid == 99) { olololo=1; } if(dialogid == 88) { olololo=2; } После switch(dialogid) { case 99: olololo=1; case 88: olololo=2; return true; } Чем же это оптимизирует? А тем, что при сравнении сервер тоже использует память, и в итоге если этих диалогов будет не 2 как в примере, а 20000. То при поиске диалога сервер просто-напросто повиснет, а в случае со свичем он просто ищет диалог. То-есть он не проверяет каждую возможность, а просто берет число и ищет кейс с ним. На этом наш урок закончен Автор урока : [Ega29]
  20. Aleksey_Dolgov

    Падающий снег.

    Здраствуйте уважаемые пользователи Gs-Games. К вашему вниманию. Были скрипты Падающего снега. Но выглядело не очень. Я Сделал другой выход. Чтобы добавить снег в мод, нужно В public OnGameModeInit добавить: for(new x=-3000; x < 3000; x+=100) for(new y=-3000; y < 3000; y+=100) CreateDynamicObject(18864, x, y, 0.0, 0.0, 0.0, 0.0); Спасибо за внимание.
  21. Здраствуйте уважаемые пользователи форума. Хочу вам предоставить свой урок КПП на мосту. Я делал его для своего сервера что бы серверу придать больше РП. Пост Расположен на начале моста со стороны Южного. Этот пост могут открывать только 2 фракции. Когда сотрудников ПО нету на сервере пост открыт. Скрин как это выглядит:
  22. 1. Забыли скомпилировать мод Заходи в папку gamemodes и открывай .pwn файл и нажимай клавишу F5 2.Мод не до конца скомпилировался, или amx. файл поврежден Проверяем размер amx. файла, если 0 кб, значит ошибка компиляции. Проблема в исходном коде, или ошибка запуска компилятора. Запускайте pawncc.exe от имени администратора. 3.У вас нету в моде "точки входа" (функция main) Открываем мод и добавляем в любое место: ( не в stock и не public естественно ) main(){} 4.У вас не установлена программы на компьютере NET Framework или Microsoft Visual C++ Гуглим то и другое, качаем. 5.Не прописаны в server.cfg плагины (нужно проверить используются в моде они или нет для начала) Заходим в папку с сервером и находим файл server.cfg и если у вас нету строки plugins, то добавляем в конце plugins Имя плагина Если у вас стоит Linux то после имя плагина должно быть написано так Имя плагина.so И мой способ: 6).Качаем Streamer: https://code.google.com/p/samp-streamer-plugin/downloads/detail?name=streamer_plugin_v2_6_1_r84.zip&can=2&q= Заменяем всё в папке с модом. И компилируйте мод. И Запускаем мод. (Лично мне это помогло!)
  23. Этот скрипт позволит вам приглашать игрока на дуэль Выбрать оружие и ставку P.S.Координаты меняйте на свои! И так приступаем... Открываем new.pwn удаляем оттуда все и вставляем это: new StartingDuel[MAX_PLAYERS]; new CountDuelTimer[MAX_PLAYERS]; new WeaponDuel = 24; new MoneyDuel = 1000; new bool:DuelPlaceVisit = false; new Float:duelspawn[12][3] = { {-1129.8909,1057.5424,1346.4141}, {-1103.7913,1086.7838,1341.9036}, {-1082.0232,1043.7269,1343.7159}, {-1053.5138,1023.3488,1343.1503}, {-1048.3635,1058.6753,1343.9337}, {-1060.6057,1092.9423,1342.9473}, {-1036.6921,1088.7567,1343.1466}, {-1015.7525,1069.8811,1344.1016}, {-1020.4619,1034.2771,1342.4492}, {-992.12230,1036.9589,1341.8861}, {-973.94290,1061.5148,1345.6714}, {-992.10420,1090.4716,1342.8617} }; forward DuelStarting(playerid); //============================================================================== public OnPlayerConnect(playerid) { PlayerInDuel[playerid] = 0; GetDuelCreate[playerid] = INVALID_PLAYER_ID; return 1; } //============================================================================== public OnPlayerDisconnect(playerid, reason) { KillTimer(CountDuelTimer[playerid]); for(new i=0; i<MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(PlayerInDuel[i] == 1) { PlayerInDuel[i] = 0; DuelPlaceVisit = false; SendClientMessage(i, -1, "Твой противник покинул дуэль!"); OnPlayerSpawn(i); } } } return 1; } //============================================================================== public OnPlayerSpawn(playerid) { return 1; } //============================================================================== public OnPlayerCommandText(playerid, cmdtext[]) { new string[1024], cmd[256], tmp[256], giveplayerid, idx; cmd = strtok(cmdtext, idx); if(strcmp(cmd, "/duel", true) == 0) { if(PlayerInDuel[playerid] == 1) return SendClientMessage(playerid, -1, "Ты уже участвуешь в дуэли."); if(DuelPlaceVisit) return SendClientMessage(playerid, -1, "Подождите пока место для дуэли освободится."); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Использование: /duel [ id игрока ] [ id оружия ] [ ставка ]"); giveplayerid = strval(tmp); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Использование: /duel [ id игрока ] [ id оружия ] [ ставка ]"); WeaponDuel = strval(tmp); if(WeaponDuel < 0 || WeaponDuel > 42) return SendClientMessage(playerid, -1, "Ты ввёл не верный id оружия. Используй id от 0 до 42"); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Использование: /duel [ id игрока ] [ id оружия ] [ ставка ]"); MoneyDuel = strval(tmp); if(MoneyDuel < 1 || MoneyDuel > 100000) return SendClientMessage(playerid, -1, "Ты ввёл не верную сумму ставки. Используй сумму от 1$ до 100000$"); if(MoneyDuel > GetPlayerMoney(playerid)) return SendClientMessage(playerid, -1, "Тебе не хватает на ставку. Укажи другую сумму!"); if(MoneyDuel > GetPlayerMoney(giveplayerid)) return SendClientMessage(playerid, -1, "Твоему противнику не хватает на ставку. Укажи другую сумму!"); if(IsPlayerConnected(giveplayerid)) { new Float:POS[3]; GetPlayerPos(giveplayerid, POS[0], POS[1], POS[2]); if(playerid == giveplayerid) return SendClientMessage(playerid, -1, "Ты не можешь применить это действие к самому себе."); if(!IsPlayerInRangeOfPoint(playerid, 5, POS[0], POS[1], POS[2])) return SendClientMessage(playerid, -1, "Ты находишься слишком далеко от этого игрока."); if(PlayerInDuel[giveplayerid] == 1) return SendClientMessage(playerid, -1, "Этот игрок уже участвует в дуэли."); GetDuelCreate[giveplayerid] = playerid; format(string, sizeof(string), "Ты успешно пригласил игрока {9DDAF2}%s{FFFFFF} на дуэль! Дождись ответа.", pNick(giveplayerid)); SendClientMessage(playerid, -1, string); format(string, sizeof(string), "Игрок %s приглашает тебя на дуэль.\n\nОружие: %d\nСтавка: %d$", pNick(playerid), WeaponDuel, MoneyDuel); ShowPlayerDialog(giveplayerid, DUEL_ID, DIALOG_STYLE_MSGBOX, "Приглашение на дуэль", string, "Да", "Нет"); } else { SendClientMessage(playerid, -1, "Игрок с указанным тобой id не найден!"); } return 1; } return 0; } //============================================================================== public DuelStarting(playerid) { new string[256]; StartingDuel[playerid] -= 1; format(string, sizeof(string), "~y~STARTING: ~w~%d", StartingDuel[playerid]); GameTextForPlayer(playerid, string, 999, 3); SetPlayerHealth(playerid, 100); if(StartingDuel[playerid] == 0) { GameTextForPlayer(playerid, "~g~DUEL START", 3000, 3); TogglePlayerControllable(playerid, true); KillTimer(CountDuelTimer[playerid]); } return 1; } //============================================================================== public OnPlayerDeath(playerid, killerid, reason) { if(PlayerInDuel[killerid] == 1 && PlayerInDuel[playerid] == 1) { new string[256]; DuelPlaceVisit = false; PlayerInDuel[killerid] = 0; PlayerInDuel[playerid] = 0; GetDuelCreate[killerid] = INVALID_PLAYER_ID; GetDuelCreate[playerid] = INVALID_PLAYER_ID; GivePlayerMoney(killerid, MoneyDuel); GivePlayerMoney(playerid, -MoneyDuel); format(string, sizeof(string), "~g~+%d$", MoneyDuel); GameTextForPlayer(killerid, string, 1000, 1); format(string, sizeof(string), "~r~-%d$", MoneyDuel); GameTextForPlayer(playerid, string, 1000, 1); format(string, sizeof(string), ">>> В дуэли между игроками {FFFFFF}%s{00FF00} и {FFFFFF}%s{00FF00} победил игрок {FFFFFF}%s", pNick(killerid), pNick(playerid), pNick(killerid)); SendClientMessageToAll(0x00FF00FF, string); SetTimerEx("OnPlayerSpawn", 1000, false, "i", killerid); return 1; } return 1; } //============================================================================== public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { new string[1024]; new dueledid = GetDuelCreate[playerid]; if(dialogid == DUEL_ID) { if(response) { if(PlayerInDuel[playerid] == 1) { SendClientMessage(playerid, -1, "Ты уже участвуешь в дуэли."); SendClientMessage(dueledid, -1, "При соглашении на участие в дуэли произошла ошибка!"); GetDuelCreate[playerid] = INVALID_PLAYER_ID; return 1; } if(PlayerInDuel[dueledid] == 1) { SendClientMessage(playerid, -1, "Игрок, отославший тебе приглашение, уже участвует в дуэли."); SendClientMessage(dueledid, -1, "При соглашении на участие в дуэли произошла ошибка!"); GetDuelCreate[playerid] = INVALID_PLAYER_ID; return 1; } if(DuelPlaceVisit) { SendClientMessage(playerid, -1, "Подожди пока место для дуэли освободится."); SendClientMessage(dueledid, -1, "Подожди пока место для дуэли освободится."); GetDuelCreate[playerid] = INVALID_PLAYER_ID; return 1; } if(IsPlayerConnected(dueledid)) { PlayerInDuel[playerid] = 1; PlayerInDuel[dueledid] = 1; DuelPlaceVisit = true; new rand1 = random(sizeof(duelspawn)); SetPlayerPos(playerid, duelspawn[rand1][0], duelspawn[rand1][1], duelspawn[rand1][2]); new rand2 = random(sizeof(duelspawn)); SetPlayerPos(dueledid, duelspawn[rand2][0], duelspawn[rand2][1], duelspawn[rand2][2]); SetCameraBehindPlayer(playerid); SetCameraBehindPlayer(dueledid); SetPlayerInterior(playerid, 10); SetPlayerInterior(dueledid, 10); SetPlayerHealth(dueledid, 100); SetPlayerHealth(playerid, 100); SetPlayerVirtualWorld(playerid, DUEL_MIR); SetPlayerVirtualWorld(dueledid, DUEL_MIR); TogglePlayerControllable(playerid, false); TogglePlayerControllable(dueledid, false); StartingDuel[playerid] = 6; StartingDuel[dueledid] = 6; CountDuelTimer[playerid] = SetTimerEx("DuelStarting", 1000, true, "i", playerid); CountDuelTimer[dueledid] = SetTimerEx("DuelStarting", 1000, true, "i", dueledid); ResetPlayerWeapons(playerid); ResetPlayerWeapons(dueledid); GivePlayerWeapon(playerid, WeaponDuel, 99999); GivePlayerWeapon(dueledid, WeaponDuel, 99999); GetDuelCreate[playerid] = INVALID_PLAYER_ID; } else { SendClientMessage(playerid, -1, "Игрок, отославший тебе приглашение, отсоеденился!"); GetDuelCreate[playerid] = INVALID_PLAYER_ID; } } else { format(string, sizeof(string), "Ты отказался на участие в дуэли с игроком {9DDAF2}%s", pNick(dueledid)); SendClientMessage(playerid, -1, string); format(string, sizeof(string), "Игрок {9DDAF2}%s{FFFFFF} отказался на участие в дуэли с тобой!", pNick(playerid)); SendClientMessage(GetDuelCreate[playerid], -1, string); GetDuelCreate[playerid] = INVALID_PLAYER_ID; } return 1; } return 1; } //============================================================================== stock pNick(playerid) { new nick[MAX_PLAYER_NAME]; GetPlayerName(playerid, nick, MAX_PLAYER_NAME); return nick; } //============================================================================== 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; } Вот и всё! Если будут ошибки пишите
  24. Находим И после скобок вставляем вот это : Строго не судите это моя первая работа :)
×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.