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

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

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

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

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

Тип контента


Форумы

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

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

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


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

  • Начало

    Конец


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

  • Начало

    Конец


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

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

  1. Может нужен кому нибудь. Переделал из /offadminka Изначального автора незнаю Варны можно снять обычной /unwarn if(strcmp(cmd, "/offwarn", true) == 0) { if(PlayerInfo[playerid][pAdmin] >= 4) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /offwarn [Ник] [Причина]"); 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(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /offwarn [Ник] [Причина]"); format(string, sizeof(string), "%s.ini", tmp); if(fexist(string)) { format(string, sizeof(string), "%s.ini", tmp); new File = ini_openFile(string); ini_setInteger(File,"Warnings",1); ini_closeFile(File); GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "[OFFWARN]Администратор %s выдал варн игроку %s, причина: %s",sendername,giveplayer,(result)); ABroadCast(COLOR_LIGHTRED,string,1); } return true; } else { SendClientMessage(playerid, COLOR_ORANGE, "Вам недоступна эта функция!"); } return true; } Значения: if(PlayerInfo[playerid][pAdmin] >= 4) 4 - Уровень администрирования, с которого можно выдавать предупреждение
  2. Добры день дорогие форумчане вот решил выложить свою вырезку системы подъездов из CRMP|RP. И так приступим! ко всем forward: forward UpdatePodezd(); ко всем new: new lift1fordom1; new dom1vihod; ко всем enum: enum poInfo { Float:poiX, Float:poiY, Float:poiZ, poFirst, poSecond, poTherd, poFour, poFive, poSix, poSeven, poEight, poNine, poTen, poPic, poAllstate, poWwoarld, poInt, }; new Podezd[100][poInfo]; //подъезды после new allhouse: new Allpodezd = 0; Дальше ищем if(newkeys & KEY_SPRINT) И после этого вставляем for(new pod = 1; pod <= Allpodezd; pod++) { if(IsPlayerInRangeOfPoint(playerid,1.0,Podezd[pod][poiX],Podezd[pod][poiY],Podezd[pod][poiZ]) && GetPlayerVirtualWorld(playerid) == Podezd[pod][poWwoarld]) { SetPlayerVirtualWorld(playerid,Podezd[pod][poFirst]); SetPlayerPos(playerid,2337.6519,-1720.1720,24.7105); return 1; } } ко всем диалогам: if(dialogid==3910) { if(response) { if(listitem == 0) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerVirtualWorld(playerid,Podezd[wot][poFirst]); SetPlayerPos(playerid,2333.5459,-1717.8135,24.7109); } if(listitem == 1) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerVirtualWorld(playerid,Podezd[wot][poSecond]); SetPlayerPos(playerid,2333.5459,-1717.8135,24.7109); } if(listitem == 2) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerVirtualWorld(playerid,Podezd[wot][poTherd]); SetPlayerPos(playerid,2333.5459,-1717.8135,24.7109); } if(listitem == 3) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerVirtualWorld(playerid,Podezd[wot][poFour]); SetPlayerPos(playerid,2333.5459,-1717.8135,24.7109); } if(listitem == 4) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerVirtualWorld(playerid,Podezd[wot][poFive]); SetPlayerPos(playerid,2333.5459,-1717.8135,24.7109); } if(listitem == 5) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerVirtualWorld(playerid,Podezd[wot][poSix]); SetPlayerPos(playerid,2333.5459,-1717.8135,24.7109); } if(listitem == 6) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerVirtualWorld(playerid,Podezd[wot][poSeven]); SetPlayerPos(playerid,2333.5459,-1717.8135,24.7109); } if(listitem == 7) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerVirtualWorld(playerid,Podezd[wot][poEight]); SetPlayerPos(playerid,2333.5459,-1717.8135,24.7109); } if(listitem == 8) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerVirtualWorld(playerid,Podezd[wot][poNine]); SetPlayerPos(playerid,2333.5459,-1717.8135,24.7109); } if(listitem == 9) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerVirtualWorld(playerid,Podezd[wot][poTen]); SetPlayerPos(playerid,2333.5459,-1717.8135,24.7109); } } return 1; } в public OnGameModeInit() LoadPodezd(); в public OnPlayerPickUpPickup(playerid, pickupid): for(new pod = 1; pod <= Allpodezd; pod++) { if(IsPlayerInRangeOfPoint(playerid,2.0,Podezd[pod][poiX],Podezd[pod][poiY],Podezd[pod][poiZ])) { GameTextForPlayer(playerid,"~w~мA„–…ЏE ~r~~k~~PED_SPRINT~",5000,1); return 1; } } в public OnPlayerPickUpPickup(playerid, pickupid): if(pickupid == lift1fordom1) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; if(Podezd[wot][poAllstate] == 10) { ShowPlayerDialog(playerid,3910,DIALOG_STYLE_LIST,"Выберите этаж!","1 этаж\n2 этаж\n3 этаж\n4 этаж\n5 этаж\n6 этаж\n7 этаж\n8 этаж\n9 этаж\n10 этаж","выбрать","Отмена"); return 1; } if(Podezd[wot][poAllstate] == 9)return ShowPlayerDialog(playerid,3910,DIALOG_STYLE_LIST,"Выберите этаж!","1 этаж\n2 этаж\n3 этаж\n4 этаж\n5 этаж\n6 этаж\n7 этаж\n8 этаж\n9 этаж","выбрать","Отмена"); if(Podezd[wot][poAllstate] == 8)return ShowPlayerDialog(playerid,3910,DIALOG_STYLE_LIST,"Выберите этаж!","1 этаж\n2 этаж\n3 этаж\n4 этаж\n5 этаж\n6 этаж\n7 этаж\n8 этаж","выбрать","Отмена"); if(Podezd[wot][poAllstate] == 7)return ShowPlayerDialog(playerid,3910,DIALOG_STYLE_LIST,"Выберите этаж!","1 этаж\n2 этаж\n3 этаж\n4 этаж\n5 этаж\n6 этаж\n7 этаж","выбрать","Отмена"); if(Podezd[wot][poAllstate] == 6)return ShowPlayerDialog(playerid,3910,DIALOG_STYLE_LIST,"Выберите этаж!","1 этаж\n2 этаж\n3 этаж\n4 этаж\n5 этаж\n6 этаж","выбрать","Отмена"); if(Podezd[wot][poAllstate] == 5)return ShowPlayerDialog(playerid,3910,DIALOG_STYLE_LIST,"Выберите этаж!","1 этаж\n2 этаж\n3 этаж\n4 этаж\n5 этаж","выбрать","Отмена"); if(Podezd[wot][poAllstate] == 4)return ShowPlayerDialog(playerid,3910,DIALOG_STYLE_LIST,"Выберите этаж!","1 этаж\n2 этаж\n3 этаж\n4 этаж","выбрать","Отмена"); if(Podezd[wot][poAllstate] == 3)return ShowPlayerDialog(playerid,3910,DIALOG_STYLE_LIST,"Выберите этаж!","1 этаж\n2 этаж\n3 этаж","выбрать","Отмена"); if(Podezd[wot][poAllstate] == 2)return ShowPlayerDialog(playerid,3910,DIALOG_STYLE_LIST,"Выберите этаж!","1 этаж\n2 этаж","выбрать","Отмена"); if(Podezd[wot][poAllstate] == 1)return ShowPlayerDialog(playerid,3910,DIALOG_STYLE_LIST,"Выберите этаж!","1 этаж","выбрать","Отмена"); } if(pickupid == dom1vihod) { new wot = GetPlayerVirtualWorld(playerid); wot = wot/10; SetPlayerPos(playerid,Podezd[wot][poiX],Podezd[wot][poiY],Podezd[wot][poiZ]); SetPlayerVirtualWorld(playerid,Podezd[wot][poWwoarld]); return 1; } ко всем командам: if(strcmp(cmd, "/addpod", true) == 0) { if(PlayerInfo[playerid][pAdmin] < 9) return SendClientMessage(playerid, -1, "У вас нет прав на использование этой команды!"); if(dostup[playerid] != 1) { ShowPlayerDialog(playerid,2934,DIALOG_STYLE_INPUT,"Доступ администратора","Введите пароль от административной панели","Ок","Отмена"); return 1; } { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /addpod [колличество этажей]"); new money = strval(tmp); if(money < 1||money > 10)return SendClientMessage(playerid, COLOR_GRAD2, "Не менее 1 и не более 10!"); Allpodezd++; GetPlayerPos(playerid, Podezd[Allpodezd][poiX],Podezd[Allpodezd][poiY],Podezd[Allpodezd][poiZ]); Podezd[Allpodezd][poFirst] = Allpodezd*10; Podezd[Allpodezd][poSecond] = Allpodezd*10+1; Podezd[Allpodezd][poTherd] = Allpodezd*10+2; Podezd[Allpodezd][poFour] = Allpodezd*10+3; Podezd[Allpodezd][poFive] = Allpodezd*10+4; Podezd[Allpodezd][poSix] = Allpodezd*10+5; Podezd[Allpodezd][poSeven] = Allpodezd*10+6; Podezd[Allpodezd][poEight] = Allpodezd*10+7; Podezd[Allpodezd][poNine] = Allpodezd*10+8; Podezd[Allpodezd][poTen] = Allpodezd*10+9; Podezd[Allpodezd][poWwoarld] = GetPlayerVirtualWorld(playerid); Podezd[Allpodezd][poInt] = GetPlayerInterior(playerid); Podezd[Allpodezd][poAllstate] = money; new iniOpen = ini_openFile("podezd.cfg"); ini_setInteger(iniOpen, "AllPodezd", Allpodezd); ini_closeFile(iniOpen); SavePodezd(Allpodezd); UpdatePodezd(); SendClientMessage(playerid, COLOR_GRAD2, "Подъезд успешно создан"); return 1; } } ко всем stock: stock LoadPodezd() { new ids[32]; new iniOpens = ini_openFile("podezd.cfg"); ini_getInteger(iniOpens, "AllPodezd", Allpodezd); ini_closeFile(iniOpens); if(Allpodezd != 0) { for(new pod = 1; pod <= Allpodezd; pod++) { format(ids,sizeof(ids),"podezde/%d.ini",pod); new iniOpen = ini_openFile(ids); ini_getFloat(iniOpen, "poiX", Podezd[pod][poiX]); ini_getFloat(iniOpen, "poiY", Podezd[pod][poiY]); ini_getFloat(iniOpen, "poiZ", Podezd[pod][poiZ]); ini_getInteger(iniOpen, "poFirst", Podezd[pod][poFirst]); ini_getInteger(iniOpen, "poSecond", Podezd[pod][poSecond]); ini_getInteger(iniOpen, "poTherd", Podezd[pod][poTherd]); ini_getInteger(iniOpen, "poFour", Podezd[pod][poFour]); ini_getInteger(iniOpen, "poFive", Podezd[pod][poFive]); ini_getInteger(iniOpen, "poSix", Podezd[pod][poSix]); ini_getInteger(iniOpen, "poSeven", Podezd[pod][poSeven]); ini_getInteger(iniOpen, "poEight", Podezd[pod][poEight]); ini_getInteger(iniOpen, "poNine", Podezd[pod][poNine]); ini_getInteger(iniOpen, "poTen", Podezd[pod][poTen]); ini_getInteger(iniOpen, "poAllstate", Podezd[pod][poAllstate]); ini_getInteger(iniOpen, "poWwoarld", Podezd[pod][poWwoarld]); ini_getInteger(iniOpen, "poInt", Podezd[pod][poInt]); ini_closeFile(iniOpen); new p[64]; format(p,64,"{d2d275}Подъезд номер: {7ba05b}%d",pod); Create3DTextLabel(p,COLOR_BLUE,Podezd[pod][poiX],Podezd[pod][poiY],Podezd[pod][poiZ],50.0,0,1); Podezd[pod][poPic] = CreateDynamicPickup(1318,23,Podezd[pod][poiX], Podezd[pod][poiY], Podezd[pod][poiZ],Podezd[pod][poWwoarld],Podezd[pod][poInt]); } } return 1; } stock UpdatePodezd() { for(new pod = 1; pod <= Allpodezd; pod++) { Delete3DTextLabel(Text3D:pod); DestroyDynamicPickup(Podezd[pod][poPic]); new p[64]; format(p,64,"{d2d275}Подъезд номер: {7ba05b}%d",pod); Create3DTextLabel(p,COLOR_BLUE,Podezd[pod][poiX],Podezd[pod][poiY],Podezd[pod][poiZ],50.0,Podezd[pod][poWwoarld],Podezd[pod][poInt]); Podezd[pod][poPic] = CreateDynamicPickup(1318,23,Podezd[pod][poiX], Podezd[pod][poiY], Podezd[pod][poiZ],Podezd[pod][poWwoarld],Podezd[pod][poInt]); } return 1; } Чуть дальше прошлого stock: stock SavePodezd(podezde) { new ids[32]; format(ids,sizeof(ids),"podezde/%d.ini",podezde); new iniOpen; iniOpen = ini_openFile(ids); if(iniOpen == -1 || iniOpen == -2) iniOpen = ini_createFile(ids); ini_setFloat(iniOpen, "poiX", Podezd[podezde][poiX]); ini_setFloat(iniOpen, "poiY", Podezd[podezde][poiY]); ini_setFloat(iniOpen, "poiZ", Podezd[podezde][poiZ]); ini_setInteger(iniOpen, "poFirst", Podezd[podezde][poFirst]); ini_setInteger(iniOpen, "poSecond", Podezd[podezde][poSecond]); ini_setInteger(iniOpen, "poTherd", Podezd[podezde][poTherd]); ini_setInteger(iniOpen, "poFour", Podezd[podezde][poFour]); ini_setInteger(iniOpen, "poFive", Podezd[podezde][poFive]); ini_setInteger(iniOpen, "poSix", Podezd[podezde][poSix]); ini_setInteger(iniOpen, "poSeven", Podezd[podezde][poSeven]); ini_setInteger(iniOpen, "poEight", Podezd[podezde][poEight]); ini_setInteger(iniOpen, "poNine", Podezd[podezde][poNine]); ini_setInteger(iniOpen, "poTen", Podezd[podezde][poTen]); ini_setInteger(iniOpen, "poAllstate", Podezd[podezde][poAllstate]); ini_setInteger(iniOpen, "poWwoarld", Podezd[podezde][poWwoarld]); ini_setInteger(iniOpen, "poInt", Podezd[podezde][poInt]); ini_closeFile(iniOpen); return 1; } К маппингу сервера: CreateObject(2142, 2335.3999, -1717.69995, 25.5, 0, 0, 0); Вот и всё. Автор: Неизвестен
  3. 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; }
  4. Всем привет. Наверное многих кто работал с модом 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
  5. dima47rus110

    Пробег Gamer

    Решил вырезать пробег для мода с основой Gamer Добавим к enum CarsInfo Float:cProbeg, Ко всем new new Text:Rhymed35[MAX_PLAYERS]; Далее в public OtherTimer new estr[32]; if(IsPlayerInAnyVehicle(i)) { format(estr,32,"~w~ЈPOЂE‚: ~g~~h~%.1f~r~ KM",CarInfo[GetPlayerVehicleID(i)][cProbeg]); TextDrawSetString(Rhymed35[i],estr); } public OnPlayerConnect(playerid) Rhymed35[playerid] = TextDrawCreate(495.000000, 370.000000," ");//ПРОБЕГ++++ 390 TextDrawFont(Rhymed35[playerid],2); TextDrawSetOutline(Rhymed35[playerid], 1); TextDrawLetterSize(Rhymed35[playerid], 0.45, 1.5); TextDrawColor(Rhymed35[playerid],225); TextDrawShowForPlayer(playerid, Rhymed35[playerid]); TextDrawSetProportional(Rhymed35[playerid],1); TextDrawBoxColor(Rhymed35[playerid], 80);//70 public OnPlayerCommandText(playerid, cmdtext[]) if(strcmp(cmd,"/carpasport",true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /passcar [id]"); giveplayerid = ReturnUser(tmp); new veh = GetPlayerVehicleID(playerid); if(GetRealID(veh) == -1) return SendClientMessage(playerid, COLOR_GRAD2, "Вы должны быть в своём автомобиле"); if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GRAD2, "Вы не в машине!"); if(IsPlayerConnected(giveplayerid)) { if(giveplayerid != INVALID_PLAYER_ID) { GetPlayerName(playerid, sendername, sizeof(sendername)); format(string,sizeof(string),"\t{FFFFFF}Модель транспорта:%s\n\t{FFFFFF}Владелец:%s\n\t{FFFFFF}Пробег транспорта:%.1f",VehiclesName[GetVehicleModel(GetPlayerVehicleID(playerid))-400], sendername,CarInfo[veh][cProbeg]); ShowPlayerDialog(giveplayerid,499,DIALOG_STYLE_MSGBOX,"Технический талон транспорта.",string,"Посмотрел","Х");//Если диалог 499 присутствует,то замените на любой другой,которого нету(чтобы окно закрылось) return true; } } } К команде /savecar(по умолчанию) CarInfo[AllCars][cProbeg] = 0; public OnPlayerDisconnect(playerid, reason) TextDrawHideForPlayer(playerid,Rhymed35[playerid]); TextDrawDestroy(Rhymed35[playerid]); public OnPlayerStateChange(playerid, newstate, oldstate) if(oldstate-1 && newstate) TextDrawHideForPlayer(playerid,Rhymed35[playerid]); else if(newstate-1) TextDrawShowForPlayer(playerid,Rhymed35[playerid]); stock LoadCar() ini_getFloat(iniOpen, "cProbeg", CarInfo[car][cProbeg]); stock SaveCar(car) ini_setFloat(iniOpen, "cProbeg", CarInfo[car][cProbeg]); stock CreateCar(car) ini_setFloat(iniOpen, "cProbeg", CarInfo[car][cProbeg]); И в конец мода forward Speeeeed(); public Speeeeed() { foreach(Player, playerid) { new Float:sp = GetPlayerSpeed(playerid),Float:ms; ms = (sp/1.4)/700;//1000 CarInfo[GetPlayerVehicleID(playerid)][cProbeg] += ms; } return 1; } У некоторых не обновлялся пробег,добавьте к таймерам(забыл про него) SetTimer("Speeeeed",6000, 1); Обязательно подключите инклуд "foreach",если не подключен Ко всем инклудам,если нету,то скачайте и закиньте в папку сервер/pawno/include/сюда include <foreach> Не знаю надо ли кому это,но решил вырезать,т.к. очень многие искали пробег Пробег не сохраняется после рестарта,кто знает как исправить отпишитесь пожалуйста! Скрины: http://radikall.com/image/V52V http://radikall.com/image/V52H http://radikall.com/image/V52b
  6. Здравствуйте! Эта тема для тех, кто не знает как ставить анти чит в мод. Начнем. Ко всем 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; } На этом все.
  7. Здравствуйте уважаемые пользователи gs-games. Не знаю есть эта тема или нет... У нас будет сохраняться админка, деньги и Email. Начнем. 1. В самом начале моде вставляем #include <mxINI> 2. Чуть ниже добавляем #define SCM SendClientMessage #define SPD ShowPlayerDialog #define DSI DIALOG_STYLE_INPUT #define DSM DIALOG_STYLE_MSGBOX 3. После этого ниже добавим new sendername[MAX_PLAYER_NAME]; 4. Теперь создадим enum pInfo А значит еще ниже добавляем enum pInfo { pMoney, pPassword[33], pAdmin, pSkin, pEmail[64], }; new Player[MAX_PLAYERS][pInfo]; 5. Дальше создадим простые правила.А значит ниже добавляем new Rules[][] = { {"1. Игровой процесс\n"}, {"Запрещено:\n"}, {"Использование любых программ скриптов читов и.т.п. дающие нечестное преймущество в игре.\n"}, {"Использование багов (Ошибок, Неисправностей мода).\n"}, {"Использовать ESC в целях ухода от погони/смерти.\n"}, {"Убивать игроков на спавне (Место возрождения, базы организаций).\n"}, {"Убивать игроков при помощи транспорта (Давить, Стрелять с водительского места).\n"}, {"Убийство/нанесение физического вреда игрокам без причины (ДМ - Death Match).\n"}, {"Злоупотребление игровыми возможностями для создания неудобств игрокам.\n\n"}, {"2. Ник в игре\n"}, {"(сменить ник можно через /mm » Сменить ник)\n"}, {"Ник должен состоять из Имени_Фамилии с заглавных букв.\n"}, {"Запрещено:\n"}, {"Запрещено использовать чужие (уже кем-то занятые) ники.\n"}, {"Запрещено использовать ники, содержащие нецензурные или оскорбительные слова.\n"}, {"Отправлять более одной заявки в час (Исключение: Просьба Администрации).\n"}, {"Если вам отказали в смене ника, Значит нельзя.\n"} }; И сразу после этого добавим new Rules_2[][] = { {"{FFFFFF}3. Чат\n"}, {"OOC (Out Of Charter) - это всё, что касается реального мира.\n"}, {"IC (In Charter) - это всё, что касается виртульного мира, то есть игры.\n"}, {"Запрещено:\n"}, {"Ругательство, оскорбления или нецензурная речь.\n"}, {"Угрозы игрокам (Не относящиеся к игровому процессу).\n"}, {"Писать сообщения в верхнем регистре (Caps Lock).\n"}, {"Писать в чат объявлений сообщения не относящихся к Role Play.\n"}, {"Писать одно и тоже сообщение слишком часто.\n"}, {"Обсуждать, критиковать действия администрации.\n"}, {"Реклама сторонних ресурсов.\n\n"}, {"{FFFFFF}4. Администрация сервера\n"}, {"Необходимо сообщать администрации о каких либо нарушениях из данных правил (/mm {FFFFFF}> Репорт).\n"}, {"Администрация самостоятельно выбирает штрафные санкции для каждого из случаев.\n"}, {"Запрещено препятствовать администрации в работе.\n"}, {"Решение администрации является окончательным и не подлежит обсуждению.\n\n"}, {"{FFFFFF}5. Торговля.\n"}, {"Запрещены любые денежные махинации.\n"}, {"Запрещена продажа / покупка чего либо, за реальные деньги.\n"}, {"Запрещен обмен внеигровых предметов в любой форме, на игровые.\n"}, {"Запрещен обмен чего либо между игровыми серверами.\n"}, {"Запрещена продажа / передача аккаунтов.\n"} }; 6. Далее переходим в public OnPlayerRequestClass(playerid, classid) Все что там есть стираем. И добавляем это { if(GetPVarInt(playerid, "Logged") == 1) return SpawnPlayer(playerid); SetPlayerInterior(playerid,0); SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); GetPlayerName(playerid, sendername, sizeof(sendername)); new str[320], small[150]; switch(GetPVarInt(playerid, "Account")) { case 0: { format(small, sizeof(small), "{FFFFFF}Добро пожаловать на сервер new-server\nЭтот аккаунт не зарегистрирован\nЧтобы начать игру нужно пройти регистрацию\n\n"); strcat(str, small); format(small, sizeof(small), "\t\t• Пароль должен состоять из Латинских букв\n\t\t• Длина пароля от 6 до 15 символов\n\nВаш логин: %s\nПридумайте свой пароль:",sendername); strcat(str, small); SPD(playerid, 1, DSI, "{FFFFFF}• Регистрация •", str, "Готово", "Отмена"); } case 1: { format(str, sizeof(str), "{FFFFFF}Добро пожаловать на сервер new-server\nЭтот аккаунт зарегистрирован\nЧтобы начать игру нужно Авторизоваться\n\nВаш логин: %s\nВведите свой пароль:",sendername); SPD(playerid, 5, DSI, "{FFFFFF}• Авторизация •", str, "Войти", "Отмена"); } } return 1; } 7. Ищем public OnPlayerConnect(playerid) И вставляем туда { new string[42]; GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "players/%s.ini", sendername); if(fexist(string)) SetPVarInt(playerid, "Account",1); else SetPVarInt(playerid, "Account",0); return 1; } 8. Идем в public OnPlayerDisconnect(playerid, reason) И вставим туда { if(GetPVarInt(playerid, "Logged") == 1) SavePlayer(playerid); return 1; } 9. Теперь переходим в public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) И вставляем туда это { new string[128]; switch(dialogid) { case 1: { if(!response) return Kick(playerid); RegisterPlayer(playerid, inputtext); } case 2: { if(!response) { GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "players/%s.ini",sendername); fremove(string); return true; } new Rules_2_str[1000]; format(Rules_2_str, sizeof(Rules_2_str), "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",Rules_2[0],Rules_2[1],Rules_2[2],Rules_2[3],Rules_2[4],Rules_2[5],Rules_2[6],Rules_2[7],Rules_2[8],Rules_2[9],Rules_2[10],Rules_2[11],Rules_2[12],Rules_2[13],Rules_2[14],Rules_2[15],Rules_2[16],Rules_2[17],Rules_2[18],Rules_2[19],Rules_2[20],Rules_2[21]); SPD(playerid, 3, DSM, "{FFFFFF}• Правила сервера •", Rules_2_str, "Согласен", "Выйти"); } case 3: { if(!response) { GetPlayerName(playerid, sendername, sizeof(sendername)); format(string, sizeof(string), "players/%s.ini",sendername); fremove(string); return true; } SPD(playerid, 4, DSI, "{FFFFFF}• Электронная почта •", "{FFFFFF}Пожалуйста введите действующий адрес электронной почты.\nЕсли вы забудите пароль на него будет выслан новый", "Готово", ""); } case 4: { if(!response) return Kick(playerid); strmid(Player[playerid][pEmail],inputtext,0,strlen(inputtext),255); GetPlayerName(playerid, sendername, sizeof(sendername)); new str[186]; format(str, sizeof(str), "{FFFFFF}Добро пожаловать на сервер new-server\nЭтот аккаунт зарегистрирован\nЧтобы начать игру нужно Авторизоваться\n\nВаш логин: %s\nВведите свой пароль:",sendername); SPD(playerid, 5, DSI, "{FFFFFF}• Авторизация •", str, "Войти", "Отмена"); } case 5: { if(!response) return Kick(playerid); LoginPlayer(playerid, inputtext); } } return 1; } stock RegisterPlayer(playerid, inputtext[]) { if(!IsPlayerConnected(playerid)) return true; new string[40]; GetPlayerName(playerid, sendername, sizeof(sendername)); Player[playerid][pMoney] = 500; Player[playerid][pAdmin] = 0; format(string,sizeof(string), "players/%s.ini", sendername); new accountFile = ini_createFile(string); if(accountFile < 0) { accountFile = ini_openFile(string); } if(accountFile >= 0) { strmid(Player[playerid][pPassword],inputtext,0,strlen(inputtext),255); ini_setString(accountFile,"Password",Player[playerid][pPassword]); ini_closeFile(accountFile); } new Rules_str[1000]; format(Rules_str, sizeof(Rules_str), "{FFFFFF}%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",Rules[0],Rules[1],Rules[2],Rules[3],Rules[4],Rules[5],Rules[6],Rules[7],Rules[8],Rules[9],Rules[10],Rules[11],Rules[12],Rules[13],Rules[14],Rules[15],Rules[16]); SPD(playerid, 2, DSM, "{FFFFFF}• Правила сервера •", Rules_str, "Согласен", "Выйти"); return 1; } stock LoginPlayer(playerid, inputtext[]) { new string[40],pass[32]; GetPlayerName(playerid, sendername, sizeof(sendername)); format(string,sizeof(string), "players/%s.ini", sendername); new File = ini_openFile(string); ini_getString(File,"Password",pass,32); if(strcmp(pass, inputtext, true) != 0) { Kick(playerid); } else { ini_getInteger(File,"Money",Player[playerid][pMoney]); ini_getInteger(File,"Admin",Player[playerid][pAdmin]); ini_getInteger(File,"Skin",Player[playerid][pSkin]); ini_getString(File,"Email",Player[playerid][pEmail],64); SCM(playerid, -1, "Вы успешно авторизовались!"); SpawnPlayer(playerid); SetPVarInt(playerid, "Logged", 1); } return 1; } stock SavePlayer(playerid) { if(!IsPlayerConnected(playerid) && GetPVarInt(playerid, "Logged") == 0) return true; new string[40]; GetPlayerName(playerid, sendername, sizeof(sendername)); format(string,sizeof(string), "players/%s.ini", sendername); new File = ini_openFile(string); ini_setInteger(File, "Money",Player[playerid][pMoney]); ini_setInteger(File,"Admin",Player[playerid][pAdmin]); ini_setInteger(File,"Skin",Player[playerid][pSkin]); ini_setString(File,"Email",Player[playerid][pEmail]); ini_closeFile(File); return 1; } И так на этом наш урок заканчивается. Спасибо за внимание. Скрин регистрации. http://rghost.ru/52319742
  8. 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
  9. Вы все знаете эту команду.и да я уверен она есть у всех!Но я выкладываю для новичков которые только начинают в скриптинге или тем кто пишет свой мод с 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; }
  10. Здравствуйте уважаемые форумчане! Решил вырезать из своего мода команду на рестарт(но это не обычная команда на рестарт,она с причиной) Ну все хватит говорить попусту приступим к работе! 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; } Вот и все если есть недочеты я думаю вы исправите!Спасибо за внимание!Не судите строго
  11. Всем привет Вот вырезал из своего мода, может кому надо. Варны можно снять обычной /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 - Уровень администрирования после максимального количества предупреждений Думаю, разберетесь, т.к. я все подробно расписал. Если будут ошибки при компилировании или что то еще, пишите в тему, постараюсь ответить всем.
  12. Здравствуйте уважаемые пользователи 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; // Лицензия на оружие. } Ну все не чего сложного. Наш урок на этом заканчивается. Спасибо за внимание.
  13. Доброго времени суток. Для собственных нужд необходима была отправка в чат сообщений длиной более 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.
  14. Вы используйте команду /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
  15. 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); Спасибо за внимание.
  16. Здравствуйте ув. пользователи сайта 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]
  17. TrollFace

    "Дернуть ручник"

    Идея моя понятна из самого названия темы. Все мы знаем, что по стандарту ручник - пробел. Так почему бы не сделать более высокий уровень РП при помощи обычного ProxDetectors ??? В коде - абсолютный минимум. На деле - довольно хорошая вещь. Приступим. Все знают, что за нажатие клавиш отвечает автовызываемая OnPlayerKeyStateChange Хорошо... А что с клавишей? Довольно просто. Ид пробела - 128. Что из этого следует? А следующий кусок кода: public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new string[35], name[24]; GetPlayerName(playerid, name, MAX_PLAYER_NAME); if (newkeys == 128 && IsPlayerInVehicle(GetPlayerVehicleID(playerid))) { format(string, sizeof(string), "**%s дернул ручник.",name); ProxDetector(25.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE); } return 1; } Довольно просто, верно? Однако в то же время как-то повышает уровень РП. Я думаю, многие оценят. У кого нет ProxDetectors - отройте в паблике. P.S. ничего подобного в паблике не лицезрел, однако, опять же таки - все просто.
  18. Этот скрипт позволит вам приглашать игрока на дуэль Выбрать оружие и ставку 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; } Вот и всё! Если будут ошибки пишите
  19. Здраствуйте уважаемые пользователи форума. Хочу вам предоставить свой урок КПП на мосту. Я делал его для своего сервера что бы серверу придать больше РП. Пост Расположен на начале моста со стороны Южного. Этот пост могут открывать только 2 фракции. Когда сотрудников ПО нету на сервере пост открыт. Скрин как это выглядит:
  20. 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= Заменяем всё в папке с модом. И компилируйте мод. И Запускаем мод. (Лично мне это помогло!)
  21. Находим И после скобок вставляем вот это : Строго не судите это моя первая работа :)
  22. Интересная функция. Тут будет всё понятно PHP код: public OnPlayerClickMap(playerid, Float: fX, Float: fY, Float: fZ) // Создаем новый паблик { // Открываем if(PlayerInfo[playerid][pAdmin] >= 4); // Уровень Админки указываем свой { SetPlayerPos(playerid, fX, fY, fZ); // Координаты XYZ SendClientMessage(playerid, 0xFFFFFFFF, "Вы телепортированы!"); return 1; } } // Закрываем
×

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

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