Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от iMaddy Посмотреть сообщение
    Код написан за 2 минуты, работоспособность не проверял, но должно работать
    Судя по различным функциям, типа getName, код писался явно не сейчас. Можно было и убрать все макросы и заменить свои функции на обычный код.
    Да и вообще, по поводу
    Цитата Сообщение от iMaddy Посмотреть сообщение
    Код пишу под свой мод, так что вам придется переделывать под себя
    Читаем
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    560
    Репутация:
    272 ±
    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_PURPL E,COLOR_PURPLE);
    SetPlayerSpecialAction(suspectid,SPECIAL_ACTION_HA NDSUP);
    ShowPlayerDialog(suspectid,DIALOGINFO,0," ","{FF0000}Вас обезвредили электрошокером!","Закрыть","");
    return 0;
    }
    Кто-нибудь, удалите этот тупой копипаст с п-и нахер и поддайте ТС большого пинка.

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

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

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

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

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

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,282
    Репутация:
    417 ±
    Код 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
    Сообщений
    560
    Репутация:
    272 ±
    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_PURPL E,COLOR_PURPLE);
    SetPlayerSpecialAction(suspectid,SPECIAL_ACTION_HA NDSUP);

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

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

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

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

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

 

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

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

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

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

Ваши права

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