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

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

    Операторы в Pawn

    Добрый день пользователи портала
    Тема уже сотая с данным содержимым, но дельных тем я так и не увидел

    Для любителей википедии, а не текста, приведенного ниже посвящается: http://wiki.sa-mp.com/wiki/Control_Structures#Operators

    Начну пожалуй с всеми любимого
    PHP код:
    if/else 
    if с англ = если

    PHP код:
    new local 4;//создадим глобальную переменную local
    main(){
    if(
    local == 4) print("okay");//если эта переменная будет равна четырем = все окей
    else if(local == 2) print("local = 2");//если равна двум оповестим об этом в лог
    else printf("local = %d",local);//если неподходит под значения, приведенные выше = выведем в лог значение переменной

    Это достаточно веселенькая конструкция, но в ней иногда можно запутаться =)
    По поводу операторов, используемых в условиях:

    Оператор && - и

    PHP код:
    new local 15shot 3;

    main(){
    if(
    local == 15 && shot == 3){
    print(
    "Все очень даже хорошо");
    }

    Пример не очень, но думаю понятно, если условие == тому то, и другое условие == тому то, то происходит то то

    Оператор || - или
    PHP код:
    new okay 1local 423;

    main(){
    if(
    okay == || local == 423){
    print(
    "okay");
    }

    Если любое из условий истинно, то конструкция сработает

    Оператор ! - не
    PHP код:

    public OnPlayerSpawn(playerid){
    if(!
    IsPlayerInRangeOfPoint(playerid,3.0,0.0,0.0,0.0)){//если игрок Не находится в радиусе 3-х метров у позиции с нулями
    print("ok");
    }
    return 
    true;

    Про операторы сравнения (> < => =<) я думаю объяснять не стоит

    Перейдем к конструкции
    PHP код:
    switch 
    Думаю про нее все наслышаны, поэтому покажу лишь пример использования

    PHP код:
    switch(GetPlayerScore(playerid)){
    case 
    10SendClientMessage(playerid,-1,"10 фрагов");
    case 
    20SendClientMessage(playerid,-1,"20 фрагов");
    case 
    30SendClientMessage(playerid,-1,"30 фрагов");
    default: 
    SendClientMessage(playerid,-1,"Чото не то");

    case ...: - условие, подобно if
    default: - не подходит ни к одному из вышеперечисленных условий

    Конструкция
    PHP код:
    ?: 
    Или же "тернарный оператор"

    Данная конструкция схожа с if/else, но выглядит она в виде однострочного решения

    Общий вид конструкции:

    PHP код:
    логическое выражение выражение 1 выражение 2 
    Простое применение:

    PHP код:
    SetPlayerHealth(playerid, (IsPlayerAdmin(playerid) ? 100.0 50.0));//если игрок в рконе - установим ему 100 хр, в противном случае - 50 хр 
    PHP код:
    new
        
    a,
        
    3;
    if (
    == 1)
    {
        
    2;
    }
    else if (
    == 2)
    {
        
    3;
    }
    else if (
    == 3)
    {
        
    4;
    }
    else
    {
        
    5;
    }


    //Будет равносильно

    new
        
    a,
        
    3;
    = (== 1) ? (2) : ((== 2) ? (3) : ((== 3) ? (4) : (5))); 
    И т.д.


    Далее перейдем к циклам

    PHP код:
    while 
    Использование:

    PHP код:

    new local 0;

    while(
    local != 10){
    //ваши задачи для цикла
    local++;//увеличим переменную local

    Цикл вида
    PHP код:
    for 
    имеют вид

    PHP код:
    for(переменныепеременные != нужному вам числу и прочему прочемучто с этими переменными делать будете
    Приведу пример на валидность пароля
    PHP код:
    valid_password(password[]){
    for(new 
    i;i!=strlen(password);i++){//пробежимся по всей строке
    switch(password[i]){//проверим символ номера i
    case 'A'..'Z','a'..'z','0'..'9': continue;//если символ верхнего регистра, или нижнего, все это инглиш буковками, или там цифра - не будем кричать
    default: return false;//но если символ неподошел под условия свыше - пароль неверный
    }
    }
    return 
    true;//сообщим, что пароль верный

    Окунемся в функции break & continue
    Они используются исключительно в циклах
    В примере выше приведено использование continue, т.е. оно пропускает действие над тем или иным условием

    break обрывает цикл, проще говоря
    PHP код:
    for(new j;j!=10;j++){
    if(
    == 5) break;//если значение в переменной равно 5 - оборвем цикл


    Теперь стартуем к моей самой любимой проблеме -
    PHP код:
    return 
    return может возвращать числовые, дробные, текстовые значения, вызывать различного рода функции

    Примеры:
    Текстовые значения - проверка на присутствие игрока на сервере и вывод текста "В сети/Не в сети":
    PHP код:
    connected_user(nick[]){
        new 
    str[50];
        
    format(str,50,"{ff0000}Не в сети");
        for(new 
    i;i!=GetMaxPlayers();i++){//запустим цикл по всем игрокам
            
    if(IsPlayerNPC(i) || !IsPlayerConnected(i)) continue;//если игрок бот или вообще не в сети - пропустим действие
            
    if(strcmp(p_name(i), nicktrue)==0){//если на сервере имя игрока и имя, которое мы ищем, совпали 
                
    format(str,50,"{00ff00}В сети");//значит игрок в сети
                
    break;//оборвем цикл
            
    }
        }
        return 
    str;//и вернем текст
    }

    p_name(playerid){
    new 
    name[24];
    GetPlayerName(playerid,name,24);
    return 
    name;

    Числовые значения:
    Узнать кол-во патронов в слоте
    PHP код:
    getAmmoGun(playerid,id){
        for(new 
    i,gun,ammo;i!=13;i++){//запустим цикл по всем слотам оружия
            
    GetPlayerWeaponData(playerid,i,gun,ammo);//получим данные в слоте
            
    if(gun == id){//если ID оружия совпали
    return ammo;//вернем патроны у этого оружия
            
    }
        }
        return -
    1;//если же ничего ненайдет - отправит -1

    Автор: Seregamil

  2. #2
    Аватар для Osetin
    •Администратор•

    Статус
    Оффлайн
    Регистрация
    26.03.2013
    Адрес
    ♔Osetia, Vladikavkaz♔
    Сообщений
    3,432
    Репутация:
    1093 ±
    Почистил тему!

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Молодец.

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

    Статус
    Оффлайн
    Регистрация
    29.10.2013
    Сообщений
    100
    Репутация:
    41 ±
    Как всегда радуешь..
    Уважаю данных Людей:

    1. Osetin(Хороший Администратор)
    2.Daniel_Cortez(Классный скриптер)
    3.Londlem(Офигенный скриптер)
    4.#Carleone(Просто хороший человек)

  5. #5
    Аватар для .::Riki::.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.12.2013
    Адрес
    Беларуь
    Сообщений
    6
    Репутация:
    1 ±
    новечкам полезно

  6. #6
    Аватар для Unreal
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.09.2014
    Сообщений
    133
    Репутация:
    4 ±
    PHP код:
    for(new i;i!=strlen(password);i++){//пробежимся по всей строке 
    будет ли разница если я сделаю допустим так ?
    PHP код:
    for(new i_str strlen(password);i!=_str;i++) 

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

    Статус
    Оффлайн
    Регистрация
    19.02.2014
    Сообщений
    38
    Репутация:
    15 ±
    Цитата Сообщение от Unreal Посмотреть сообщение
    будет ли разница если я сделаю допустим так ?
    PHP код:
    for(new i_str strlen(password);i!=_str;i++) 
    Будет

  8. #8
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от MacMailler Посмотреть сообщение
    Будет
    А я не уверен

    • Код:
      for(new i; i != strlen(password); i++)
    • Код:
      for(new i, str = strlen(password); i!= _str; i++)

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

    Статус
    Оффлайн
    Регистрация
    24.09.2014
    Сообщений
    133
    Репутация:
    4 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    А я не уверен

    • Код:
      for(new i; i != strlen(password); i++)
    • Код:
      for(new i, str = strlen(password); i!= _str; i++)
    теперь смотри, я приведу в ответ другой пример:
    PHP код:
    for(new 0<= GetPlayerPoolSize(); i++) 
    и
    PHP код:
    for(new 0,poolsize GetPlayerPoolSize(); <= poolsizei++) 

  10. #10
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Unreal Посмотреть сообщение
    теперь смотри, я приведу в ответ другой пример:
    PHP код:
    for(new 0<= GetPlayerPoolSize(); i++) 
    и
    PHP код:
    for(new 0,poolsize GetPlayerPoolSize(); <= poolsizei++) 
    Опять такой разницы не вижу, хотя могу и ошибаться.

    • PHP код:
      for(new 0<= GetPlayerPoolSize(); i++) 
      PHP код:
      for(объявили обнуленную переменнуюесли переменная меньше/равна количеству игроковинкрементировали переменную
    • PHP код:
      for(new 0,poolsize GetPlayerPoolSize(); <= poolsizei++) 
      PHP код:
      for(объявили обнуленную переменнуюполучили число игроков и сохранили в другой переменнойесли переменная меньше количества в другой переменнойинкрементировали первую переменную


    Ну как то так :)

 

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

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

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

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

Ваши права

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