Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 25
  1. #1
    Аватар для iMaddy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.05.2014
    Сообщений
    0
    Репутация:
    0 ±

    Пистолет-электрошок

    Ко всем new
    Код:
    new PistolTazer[MAX_PLAYERS];
    Ко всем командам

    Вариант: обычная команда
      Открыть/закрыть
    Код:
    else if(strcmp(cmd,"/pistoltazer",true)==0) 
    { 
    	/* AcceptWrite(playerid) - проверка на то, что игрок авторизован. Использует любую удобную вам проверку
    	pData[playerid][Member]: pData[playerid] - общая "структурка" параметров персонажей, выгружаемых и сохраняемых при входе/выходе; [Member] - параметр ида организации игрока, в нашем случае - Полиция
    	PistolTazer[playerid] - параметр, инициализированный нами в самом начале мода, отвечает за включение/выключение пистолета тазера
    	Все остальное - стандартные скриптовые функции */
    
    	new weap,ammo;
    	if(!AcceptWrite(playerid)) 
    		return 1; // проверка: авторизован или нет
    
    	if(pData[playerid][Member] != 1) 
    		return SendClientMessage(playerid,-1,"Ошибка: вы не полицейский!");
    
    	GetPlayerWeaponData(playerid,2,weap,ammo);
    
    	if(weap != 24)
    		return SendClientMessage(playerid,-1,"Ошибка: у вас нет пистолета!");
    	
    	if(PistolTazer[playerid])
    	{
    		PistolTazer[playerid] = 0;
    		return SendClientMessage(playerid,-1,"Пистолет-электрошок отключен");
    	}
    	else
    	{
    		PistolTazer[playerid] = 1;
    		return SendClientMessage(playerid,-1,"Пистолет-электрошок включен. Аккуратно наведите на цель и выстрелите в нее");
    	}
    	return 1;
    }

    Вариант: ZCMD
      Открыть/закрыть
    Код:
    CMD:pistoltazer(playerid)
    {
    	/* пометки для нубов:
     	AcceptWrite(playerid) - проверка на то, что игрок авторизован. Использует любую удобную вам проверку
     	pData[playerid][Member]: pData[playerid] - общая "структурка" параметров персонажей, выгружаемых и сохраняемых при входе/выходе; [Member] - параметр ида организации игрока, в нашем случае - Полиция
     	PistolTazer[playerid] - параметр, инициализированный нами в самом начале мода, отвечает за включение/выключение пистолета тазера
     	Все остальное - стандартные скриптовые функции */
    
    	new weap,ammo;
    	if(!AcceptWrite(playerid)) 
    		return 1; // проверка: авторизован или нет
    
    	if(pData[playerid][Member] != 1) 
    		return SendClientMessage(playerid,-1,"Ошибка: вы не полицейский!");
    
    	GetPlayerWeaponData(playerid,2,weap,ammo);
    
    	if(weap != 24) 
    		return SendClientMessage(playerid,-1,"Ошибка: у вас нет пистолета!");
    	
    	if(PistolTazer[playerid])
    	{
    		PistolTazer[playerid] = 0;
    		return SendClientMessage(playerid,-1,"Пистолет-электрошок отключен");
    	}
    	else
    	{
    		PistolTazer[playerid] = 1;
    		return SendClientMessage(playerid,-1,"Пистолет-электрошок включен. Аккуратно наведите на цель и выстрелите в нее");
    	}
     
    }
     
    }


    Ко всем stock
    Код:
    stock BulletTazer(playerid,suspectid)
    {
    // что ж, реализуем стандартными функциями
    	new string[128], name1[MAX_PLAYER_NAME], name2[MAX_PLAYER_NAME];
            GetPlayerName(playerid, name1, sizeof(name1));
            GetPlayerName(suspectid, name2, sizeof(name2));
    
      	// format(string, sizeof(string), "%s попал из пистолета-электрошока в %s ", getName(suspectid) ,getName(playerid));
            format(string, sizeof(string), "%s попал из пистолета-электрошока в %s ", name2 ,name1);
    
    /* COLOR_PURPLE - константное значение пурпурного/розового цвета в шестнадцатиричном формате. Говоря проше это
     #define COLOR_PURPLE 0xC2A2DAAA . */
    
    /* ProxDetector - думаю у всех есть эта функция, служит для каких-либо действий, например, /me. Но если нет, она //будет ниже */
      	ProxDetector(30.0, suspectid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
      	SetPlayerSpecialAction(suspectid,SPECIAL_ACTION_HANDSUP);
    
    /* DIALOGINFO - константное значение не нужного мне ID'а диалога. Можете просто вставить свой ид, скажем, 1488 */
      	ShowPlayerDialog(suspectid,DIALOGINFO,0," ","{FF0000}Вас обезвредили электрошокером!","Закрыть","");
    	return 0;
    }
    В OnPlayerWeaponShot
    Код:
    if(hittype == 1 && weaponid == 24 && PistolTazer[playerid] == 1)
    	return BulletTazer(playerid,hitid);
    В OnPlayerConnect
    Код:
    PistolTazer[playerid] = 0;

     ProxDetector

    forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);
    public ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:posx, Float:posy, Float:posz;
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    //radi = 2.0; //Trigger Radius
    foreach(new i : Player)
    {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerConnected(i))
    {
    if(GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i))
    {
    GetPlayerPos(i, posx, posy, posz);
    tempposx = (oldposx -posx);
    tempposy = (oldposy -posy);
    tempposz = (oldposz -posz);
    //printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
    if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
    {
    SendClientMessage(i, col1, string);
    }
    else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
    {
    SendClientMessage(i, col2, string);
    }
    else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
    {
    SendClientMessage(i, col3, string);
    }
    else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
    {
    SendClientMessage(i, col4, string);
    }
    else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
    SendClientMessage(i, col5, string);
    }
    }
    }
    else
    {
    SendClientMessage(i, col1, string);
    }
    }
    }
    }//not connected
    return true;
    }[/code]

    Ну вот и все. Суть мануала: при активации копом пистолета-электрошока он может выстрелить в нарушителя и обезвредить его. Повреждений игроку не будет наноситься, т.к. в OnPlayerWeaponShot мы возвращаем 0. Думаю будет полезно для серверов с режимом РП. Код написан за 2 минуты, работоспособность не проверял, но должно работать работоспособность проверена

    Автор: iMaddy(Alexandr Bochkarev)
    Последний раз редактировалось iMaddy; 04.05.2014 в 20:11. Причина: upd

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от iMaddy Посмотреть сообщение
    Код написан за 2 минуты, работоспособность не проверял, но должно работать
    Судя по различным функциям, типа getName, код писался явно не сейчас. Можно было и убрать все макросы и заменить свои функции на обычный код.
    Да и вообще, по поводу
    Цитата Сообщение от iMaddy Посмотреть сообщение
    Код пишу под свой мод, так что вам придется переделывать под себя
    Читаем
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    CMD:pistoltazer(playerid)
    {
    new weap;
    if(!AcceptWrite(playerid)) return 1; // проверка: авторизован или нет
    if(pData[playerid][Member] != 1) return SendClientMessage(playerid,-1,"Ошибка: вы не полицейский!");
    GetPlayerWeaponData(playerid,2,weap,-1);
    if(weap != 24) return SendClientMessage(playerid,-1,"Ошибка: у вас нет пистолета!");

    if(PistolTazer[playerid])
    {
    PistolTazer[playerid] = 0;
    return SendClientMessage(playerid,-1,"Пистолет-электрошок отключен");
    }
    else
    {
    PistolTazer[playerid] = 1;
    return SendClientMessage(playerid,-1,"Пистолет-электрошок включен. Акуратно наведите на цель и выстрелите в нее");
    }
    return 1;
    }
    stock BulletTazer(playerid,suspectid)
    {
    new string[128];
    format(string, sizeof(string), "%s попал из пистолета-электрошока в %s ", getName(suspectid) ,getName(playerid));
    ProxDetector(30.0, suspectid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
    SetPlayerSpecialAction(suspectid,SPECIAL_ACTION_HANDSUP);
    ShowPlayerDialog(suspectid,DIALOGINFO,0," ","{FF0000}Вас обезвредили электрошокером!","Закрыть","");
    return 0;
    }
    Кто-нибудь, удалите этот тупой копипаст с п-и нахер и поддайте ТС большого пинка.

  4. #4
    Аватар для iMaddy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.05.2014
    Сообщений
    0
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Судя по различным функциям, типа getName, код писался явно не сейчас. Можно было и убрать все макросы и заменить свои функции на обычный код.
    Да и вообще, по поводу

    Читаем
    Учту ваши замечания и переделаю код , но думаю любой дурак сможет это сделать под себя, код то пустяковый

  5. #5
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Цитата Сообщение от iMaddy Посмотреть сообщение
    Учту ваши замечания и переделаю код , но думаю любой дурак сможет это сделать под себя, код то пустяковый
    Я не смогу, переделывай.

  6. #6
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Код HTML:
    if(weap != 24)
    Пистолет у нас только дигл?

  7. #7
    Аватар для iMaddy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.05.2014
    Сообщений
    0
    Репутация:
    0 ±
    Старался объяснить все очень доступно, но, извините, дальше некуда. Теперь любой парень с раком мозга меня должен понять, мануал все таки не такой большой

    - - - Добавлено - - -

    Цитата Сообщение от Salvador Посмотреть сообщение
    Код HTML:
    if(weap != 24)
    Пистолет у нас только дигл?
    мне захотелось именно дигл. Обычно у копов на РП серверах только дигл и выдают, но можно сделать if(wep == 24 || wep == 23) и т.д.

    ИМХО: мануал должен подталкивать человека на изучение что-то нового, он должен что-то переделывать под себя, пусть это даже что-то простое. Не вечно же его говном кодом с ложечки кормить

  8. #8
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    ProxDetector - думаю у всех есть эта функция
    нету.
    pData[playerid][Member]: pData[playerid] - общая "структурка" параметров персонажей, выгружаемых и сохраняемых при входе/выходе; [Member] - параметр ида организации игрока, в нашем случае - Полици
    я незнаю что это.
    Вариант ZCMD
    я не использую ZCMD, чо делать?
    stock BulletTazer(playerid,suspectid)
    {
    // что ж, реализуем стандартными функциями
    new string[128], name1[MAX_PLAYER_NAME], name2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name1, sizeof(name1));
    GetPlayerName(suspectid, name2, sizeof(name2));

    // format(string, sizeof(string), "%s попал из пистолета-электрошока в %s ", getName(suspectid) ,getName(playerid));
    format(string, sizeof(string), "%s попал из пистолета-электрошока в %s ", name2 ,name1);

    /* COLOR_PURPLE - константное значение пурпурного/розового цвета в шестнадцатиричном формате. Говоря проше это
    #define COLOR_PURPLE 0xC2A2DAAA . */

    /* ProxDetector - думаю у всех есть эта функция, служит для каких-либо действий, например, /me. Но если нет, она //будет ниже */
    ProxDetector(30.0, suspectid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
    SetPlayerSpecialAction(suspectid,SPECIAL_ACTION_HANDSUP);

    /* DIALOGINFO - константное значение не нужного мне ID'а диалога. Можете просто вставить свой ид, скажем, 1488 */
    ShowPlayerDialog(suspectid,DIALOGINFO,0," ","{FF0000}Вас обезвредили электрошокером!","Закрыть","");
    return 0;
    а диалог вернуть не судьба?

  9. #9
    Аватар для iMaddy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.05.2014
    Сообщений
    0
    Репутация:
    0 ±
    Работоспособность проверена. Позже напишу немного РПшности, скажем, ограниченное число зарядов тазера, подзарядка, определенное расстояние, с которого будет работать тазер и т.д. Это не сложно, но сейчас мне лень

  10. #10
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    274 ±
    Цитата Сообщение от iMaddy Посмотреть сообщение
    Работоспособность проверена. Позже напишу немного РПшности, скажем, ограниченное число зарядов тазера, подзарядка, определенное расстояние, с которого будет работать тазер и т.д. Это не сложно, но сейчас мне лень
    У МЕНЯ НЕ РАБОТАЕТ, ЧО ДЕЛАТЬ?! ПРОБЛЕМЫ ОПИСАЛ УЖЕ

 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •