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

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

    Необязательные параметры в sscanf

    Hello, World! Подобных вопросов, знаю, много, но именно для своего случая я почему-то ответа не нашел. Слышал про необязательные параметры в sscanf (с заглавными буквами), но не знаю, как правильно их использовать и создать проверку. Может ли кто-нибудь объяснить, или направить на годный мануал/урок, потому что все едва ли затрагиваются этой темы, а я хотел бы понять во всех подробностях. Признаюсь, sscanf я пользовался непростительно мало, поэтому объяснять придется на пальцах. К примеру, команда /veh id color1 color2, которая создает временный тс указанного цвета, а если цвета не указаны, создается машина заранее заданного (допустим, белого)цвета. То есть цвет - это необязательный параметр, и /veh 411 сработает так же, как, допустим, /veh 411 1 1, то есть сообщение о неправильном использовании показывается только при /veh (т.е. без id транспорта), а при /veh 411, без указания параметров цвета - все должно прекрасно работать.


    ...Сорри за цистерну воды, пытаюсь исключить недопонимание)) И да, если можно, хотелось бы пример на командном процессоре с синтаксисом zeex'a (по сути, у всех такой. я лично пользуюсь Pawn.CMD, не в обиду Daniel_Cortez xD)

  2. #2
    Аватар для Josan_Solomon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.08.2018
    Сообщений
    59
    Репутация:
    2 ±
    И можно заодно поподробнее про "<, =, >" в sscanf? Если я правильно понял, это едят с массивами, но не понял, как именно

  3. #3
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Мой вопрос по этой же теме.
    А что касается угловых скобок, это разделение параметров. По умолчанию между аргументами стоит пробел. И используем что-то вроде "dd". Однако, если между ними будет что-то другое (например, запятая, тире, двоеточие или равно), то в угловых скобках указываем именно этот разделитель.

    Так из строки "12.0, 18.82, 28.36" мы можем извлечь три координаты в переменные x,y,z:
    1. sscanf(string, "<,>fff", x, y, z);


    А, например, для извлечение чисел из TIMESTAMP формата (2018-08-19 22:00) можно использовать такой вариант:
    1. sscanf(string, "<->ddd <:>dd", year, month, day, hour, minute, second);


    Единственное, я не знаю как "живет" sscanf, когда видит пробелы. Потому что данная мною выше строка вполне рабочая, хоть и есть пробел.

    [hr]
    Рассмотрим чуть другой вариант. Допустим, есть команда /goto:
    1. CMD:goto(playerid, params[])
    2. {
    3. new
    4. Float:x, Float:y, Float:z,
    5. interior, world;
    6.  
    7. if(sscanf(params, !"<,>fffD(-1)D(-1)", x, y, z, interior, world)){
    8. return SendClientMessage(playerid, -1, !"используйте /goto [x] [y] [z] (интерьер) (виртуальный мир)") & 0;
    9. }
    10.  
    11. if(interior != -1 && interior != GetPlayerInterior(playerid)){
    12. SetPlayerInterior(playerid, interior);
    13. }
    14. if(world != -1 && world != GetPlayerVirtualWorld(playerid)){
    15. SetPlayerVirtualWorld(playerid, world);
    16. }
    17.  
    18. SetPlayerPos(playerid, x, y, z);
    19. return 1;
    20. }
    21.  
    22. В этой команде мы можем не указывать параметры интерьера и виртуального мира. Но если укажем, произойдет изменение интерьера.

  4. Пользователь сказал cпасибо:
    Josan_Solomon (20.08.2018)
  5. #4
    Аватар для Josan_Solomon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.08.2018
    Сообщений
    59
    Репутация:
    2 ±
    Я очень извиняюсь за свою тупость, но не могли бы вы мне, пожалуйста, сказать, почему следующий код крашит сервер:
      Открыть/закрыть
    1. CMD:veh(playerid, params[])
    2. {
    3. CMD:veh(playerid, params[])
    4. {
    5. if (player_info[playerid][aLevel]<2)
    6. return SCM (playerid, SYSTEM_NO_PERMISSION, "Эта команда доступна только администрации и агентам поддержки");
    7. if ( sscanf(params, "dD(1)D(1)D(0)", params[0], params[1], params[2], params[3])) //Что-то мне подсказывает, что ошибка
    8. //тут, так как не выполняется SCM (дефайн SendClientMessage) ни одного из условий
    9. return SCM(playerid, SYSTEM_INCORRECT_USAGE, "Использование: /veh ID цвет 1, цвет 2, наличие сирены(1/0)");
    10. if (399>=params[0]>=601 || 0>params[1]>255 || 0>params[2]>255)
    11. return SCM (playerid, SYSTEM_INCORRECT_USAGE, "Возможные ID транспорта: 400-600. Возможные цвета: 0-255");
    12.  
    13. SCM(playerid, SYSTEM_SUCCESS, "Готово!");
    14. new Float:x, Float:y, Float:z, Float:r;
    15. GetPlayerPos(playerid, x, y, z);
    16. GetPlayerFacingAngle(playerid, r);
    17. printf ("ID %d COLOR 1:%d 2:%d SIREN %d", params[0], params[1], params[2], params[3]);
    18. new car = CreateVehicle(params[0], x,y,z,r,params[1],params[2], -1, params[3]);
    19. return PutPlayerInVehicle(playerid, car, 0);
    20.  
    21. }
    22. }

    И да, где логи подобных крахов? crashinfo показывает далекие от моего понимания ассемблерные листинги (вроде), а в логах сервера даже printf не отобразился

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

    При вводе чего-то, отличного от "/veh", но все равно неправильного, например "/veh pawno-info хороший ресурс" почему-то не отображается никакой ошибки типа "Используйте /veh pro-pawn top, ги сосатб", хотя сервер не крашит
    Последний раз редактировалось Josan_Solomon; 20.08.2018 в 04:18. Причина: исправление иероглифов

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Elrmrnt-Kritik Посмотреть сообщение
    Мой вопрос по этой же теме.
    А что касается угловых скобок, это разделение параметров. По умолчанию между аргументами стоит пробел. И используем что-то вроде "dd". Однако, если между ними будет что-то другое (например, запятая, тире, двоеточие или равно), то в угловых скобках указываем именно этот разделитель.

    Так из строки "12.0, 18.82, 28.36" мы можем извлечь три координаты в переменные x,y,z:
    1. sscanf(string, "<,>fff", x, y, z);


    А, например, для извлечение чисел из TIMESTAMP формата (2018-08-19 22:00) можно использовать такой вариант:
    1. sscanf(string, "<->ddd <:>dd", year, month, day, hour, minute, second);


    Единственное, я не знаю как "живет" sscanf, когда видит пробелы. Потому что данная мною выше строка вполне рабочая, хоть и есть пробел.
    Если указать так:
    1. sscanf(string, "P< ,>fff", x, y, z);

    sscanf будет принимать в качестве разделителя как пробел (это дефолтный разделитель), так и запятую. Таким образом можно добавить и большее количество разделителей (1 символ - 1 разделитель), которые sscanf будет искать по всей строке.

    Цитата Сообщение от Josan_Solomon Посмотреть сообщение
    Я очень извиняюсь за свою тупость, но не могли бы вы мне, пожалуйста, сказать, почему следующий код крашит сервер:
      Открыть/закрыть
    1. CMD:veh(playerid, params[])
    2. {
    3. CMD:veh(playerid, params[])
    4. {
    5. if (player_info[playerid][aLevel]<2)
    6. return SCM (playerid, SYSTEM_NO_PERMISSION, "Эта команда доступна только администрации и агентам поддержки");
    7. if ( sscanf(params, "dD(1)D(1)D(0)", params[0], params[1], params[2], params[3])) //Что-то мне подсказывает, что ошибка
    8. //тут, так как не выполняется SCM (дефайн SendClientMessage) ни одного из условий
    9. return SCM(playerid, SYSTEM_INCORRECT_USAGE, "Использование: /veh ID цвет 1, цвет 2, наличие сирены(1/0)");
    10. if (399>=params[0]>=601 || 0>params[1]>255 || 0>params[2]>255)
    11. return SCM (playerid, SYSTEM_INCORRECT_USAGE, "Возможные ID транспорта: 400-600. Возможные цвета: 0-255");
    12.  
    13. SCM(playerid, SYSTEM_SUCCESS, "Готово!");
    14. new Float:x, Float:y, Float:z, Float:r;
    15. GetPlayerPos(playerid, x, y, z);
    16. GetPlayerFacingAngle(playerid, r);
    17. printf ("ID %d COLOR 1:%d 2:%d SIREN %d", params[0], params[1], params[2], params[3]);
    18. new car = CreateVehicle(params[0], x,y,z,r,params[1],params[2], -1, params[3]);
    19. return PutPlayerInVehicle(playerid, car, 0);
    20.  
    21. }
    22. }

    И да, где логи подобных крахов? crashinfo показывает далекие от моего понимания ассемблерные листинги (вроде), а в логах сервера даже printf не отобразился

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

    При вводе чего-то, отличного от "/veh", но все равно неправильного, например "/veh pawno-info хороший ресурс" почему-то не отображается никакой ошибки типа "Используйте /veh pro-pawn top, ги сосатб", хотя сервер не крашит
    Установи crashdetect и вся информация о краше будет в обычных логах
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  7. Пользователь сказал cпасибо:
    Josan_Solomon (25.08.2018)
  8. #6
    Аватар для ORLADOK
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.08.2017
    Сообщений
    37
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Установи crashdetect и вся информация о краше будет в обычных логах
    Я может туплю, но разве проблема не в первых четырех строках команды?
    1. CMD:veh(playerid, params[])
    2. {
    3. CMD:veh(playerid, params[])
    4. {


    Я не знаю, возможно вам такая команда будет интереснее:
      Открыть/закрыть
    1. CMD:vehicle(playerid, params[]){
    2. new Float:x, Float:y, Float:z, Float:r, vehicleid = GetPlayerVehicleID(playerid);
    3. // Хотя я использую переменные, но вполне, думаю, можно обойтись и params[]
    4.  
    5. GetPlayerPos(playerid, x, y, z);
    6. sscanf(params, !"P< ,>A<i>(0, 0,0, 0)[3]", params);
    7.  
    8. if(!vehicleid && !(400 <= params[0] <= 611)) return
    9. SendClientMessage(playerid, -1, !"Используйте: /vehicle <modelid> <color> <color> <siren>");
    10.  
    11. switch(params[0]){
    12. case -1..1, 400..611:{}
    13. default: return
    14. SendClientMessage(playerid, -1, !"Ключи <modelid>: -1 - 1, 400 - 611!");
    15. }
    16. if(!(0 <= params[1] <= 255) || !(0 <= params[2] <= 255)) return
    17. SendClientMessage(playerid, -1, !"Ключи <color>: 0-255!");
    18.  
    19. if(vehicleid){
    20. if(params[0] < 2){
    21. // Коды: -1, 0, 1
    22.  
    23. new string[3][] = {
    24. !"Ваш транспорт был удален!",
    25. !"Ваш транспорт был починен!",
    26. !"Ваш транспорт был зареспавнен!"
    27. };
    28.  
    29. switch(params[0]){
    30. case -1: DestroyVehicle(vehicleid);
    31. case 0:{
    32. RepairVehicle(vehicleid);
    33. SetVehicleHealth(vehicleid, 1000.0); // Я не помню вызывается ли она при RepairVehicle или нет...
    34. }
    35. case 1: SetVehicleToRespawn(vehicleid);
    36. }
    37. SendClientMessage(playerid, -1, string[params[0] + 1]);
    38.  
    39. } else {
    40. GetVehicleZAngle(vehicleid, r);
    41. SetVehicleToRespawn(vehicleid);
    42.  
    43. vehicleid = CreateVehicle(params[0], x,y,z, r, params[1],params[2], -1, 0);
    44. PutPlayerInVehicle(playerid, vehicleid, 0);
    45.  
    46. SendClientMessage(playerid, -1, !"Вы создали транспорт, зареспавнив прежний!");
    47. }
    48. } else {
    49. vehicleid = CreateVehicle(params[0], x,y,z, r, params[1],params[2], -1, 0);
    50. PutPlayerInVehicle(playerid, vehicleid, 0);
    51.  
    52. SendClientMessage(playerid, -1, !"Вы создали транспорт!");
    53. }
    54.  
    55. return 1;
    56. }


    Здесь задействуется массивы, ключ: a и A.
    Использование:
    a<тип>[размер_массива]
    A<тип>(Необязательные, параметры, перечисленные, через, запятую)[размер_массива]

    Ну, честно говоря, P< ,> я скопировал у DeimoS'a. Хотел наглядно показать использование массива, хотя правда по-мне проще переменными.

    (Я просто не знаю, что можно ответить тут, ибо все уже отписали :D)

    И еще, кто напомнит в каких случаях лучше использовать switch, а где if? Где-то была опись, что в разных случаях один другого предпочтительнее.
    UPD.
    Честно говоря я думал будет надпись "добавлено"...
    Последний раз редактировалось ORLADOK; 22.08.2018 в 09:34.
    Пока я способен делать ошибки в своих словах/делах - я буду их делать. Никто мне не помешает краснеть и в то же время совершенствовать себя в понимании того вопроса!

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

    Статус
    Оффлайн
    Регистрация
    08.08.2018
    Сообщений
    59
    Репутация:
    2 ±
    Цитата Сообщение от ORLADOK Посмотреть сообщение
    Я может туплю, но разве проблема не в первых четырех строках команды?
    1. CMD:veh(playerid, params[])
    2. {
    3. CMD:veh(playerid, params[])
    4. {

    Я неправильно скопировал пока переносил на форум. У меня самого такого повторения (рекурсией назвать не могу) нет. Что касается if и switch, как писал Daniel Cortez, switch препроцессируется в множество if/else if. Так, выражение

    1. switch (variable)
    2. {
    3. case 1:
    4. return 1;
    5. case 2:
    6. return 1;
    7. case 3:
    8. return 1;
    9. default:
    10. return null;
    11. }


    Будет преобразовано в вырежение

    1. if (variable == 1)
    2. return 1;
    3. else if (variable == 2)
    4. return 2;
    5. else if (variable == 3)
    6. return 3;
    7. else
    8. return null;


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

    Цитата Сообщение от DeimoS Посмотреть сообщение

    Установи crashdetect и вся информация о краше будет в обычных логах
    Он есть, но молчит. Возможно ли, что я неправильно его установил? В списке он сразу после mysql

  10. #8
    Аватар для Josan_Solomon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.08.2018
    Сообщений
    59
    Репутация:
    2 ±
    Такая проверка вообще правильная?
    1. if ( sscanf(params, "dD(1)D(1)D(0)", params[0], params[1], params[2], params[3]))
    2. return SCM(playerid, SYSTEM_INCORRECT_USAGE, "Использование: /veh ID цвет 1, цвет 2, наличие сирены(1/0)");

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

    Статус
    Оффлайн
    Регистрация
    09.08.2017
    Сообщений
    37
    Репутация:
    3 ±
    Цитата Сообщение от Josan_Solomon Посмотреть сообщение
    Такая проверка вообще правильная?
    1. if ( sscanf(params, "dD(1)D(1)D(0)", params[0], params[1], params[2], params[3]))
    2. return SCM(playerid, SYSTEM_INCORRECT_USAGE, "Использование: /veh ID цвет 1, цвет 2, наличие сирены(1/0)");
    params = "411":
      Открыть/закрыть

    params = "":
      Открыть/закрыть

    params = "456 54 23 0":
      Открыть/закрыть

    Сам решай :)
    Пока я способен делать ошибки в своих словах/делах - я буду их делать. Никто мне не помешает краснеть и в то же время совершенствовать себя в понимании того вопроса!

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Не стоит забывать, что указание "-1" в качестве цвета приведёт к тому, что авто будет присвоен рандомный цвет. Поэтому гораздо лаконичнее будет в sscanf указать именно "-1", а не "1", дабы было удобнее. А заодно и условие
    PHP код:
    if(!(<= params[1] <= 255) || !(<= params[2] <= 255)) 
    изменить, добавив "-1" в границы доступных значений.

    И кто тебя, ORLADOK, учил return оставлять на первой строке? :) Это же жутко неудобно + теряется весь смысл, заложенный в перенос.

    Да и использование switch тут крайне неоправданно. Особенно в "case -1..1, 400..611:{}"

    Цитата Сообщение от Josan_Solomon Посмотреть сообщение
    Он есть, но молчит. Возможно ли, что я неправильно его установил? В списке он сразу после mysql
    Он должен стоять первым в списке.

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

    Цитата Сообщение от Josan_Solomon Посмотреть сообщение
    Я очень извиняюсь за свою тупость, но не могли бы вы мне, пожалуйста, сказать, почему следующий код крашит сервер:
      Открыть/закрыть
    1. CMD:veh(playerid, params[])
    2. {
    3. CMD:veh(playerid, params[])
    4. {
    5. if (player_info[playerid][aLevel]<2)
    6. return SCM (playerid, SYSTEM_NO_PERMISSION, "Эта команда доступна только администрации и агентам поддержки");
    7. if ( sscanf(params, "dD(1)D(1)D(0)", params[0], params[1], params[2], params[3])) //Что-то мне подсказывает, что ошибка
    8. //тут, так как не выполняется SCM (дефайн SendClientMessage) ни одного из условий
    9. return SCM(playerid, SYSTEM_INCORRECT_USAGE, "Использование: /veh ID цвет 1, цвет 2, наличие сирены(1/0)");
    10. if (399>=params[0]>=601 || 0>params[1]>255 || 0>params[2]>255)
    11. return SCM (playerid, SYSTEM_INCORRECT_USAGE, "Возможные ID транспорта: 400-600. Возможные цвета: 0-255");
    12.  
    13. SCM(playerid, SYSTEM_SUCCESS, "Готово!");
    14. new Float:x, Float:y, Float:z, Float:r;
    15. GetPlayerPos(playerid, x, y, z);
    16. GetPlayerFacingAngle(playerid, r);
    17. printf ("ID %d COLOR 1:%d 2:%d SIREN %d", params[0], params[1], params[2], params[3]);
    18. new car = CreateVehicle(params[0], x,y,z,r,params[1],params[2], -1, params[3]);
    19. return PutPlayerInVehicle(playerid, car, 0);
    20.  
    21. }
    22. }

    И да, где логи подобных крахов? crashinfo показывает далекие от моего понимания ассемблерные листинги (вроде), а в логах сервера даже printf не отобразился

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

    При вводе чего-то, отличного от "/veh", но все равно неправильного, например "/veh pawno-info хороший ресурс" почему-то не отображается никакой ошибки типа "Используйте /veh pro-pawn top, ги сосатб", хотя сервер не крашит
    Глянул сейчас код команды и спешу поздравить тебя с тем, что тебя погубила собственная лень :) Команда не срабатывает из-за вот этой строки:
    PHP код:
        if ( sscanf(params"dD(1)D(1)D(0)"params[0], params[1], params[2], params[3]))
            return 
    SCM(playeridSYSTEM_INCORRECT_USAGE"Использование: /veh ID цвет 1, цвет 2, наличие сирены(1/0)"); 
    А именно потому, что когда ты прописываешь просто "/veh model_id", в params существует лишь столько ячеек, сколько требуется для хранения ID модели- то бишь, всего 3 ячейки, так как изначально ID хранится в виде текста. А ты пытаешься обратиться к четвёртой ячейке, которой в этом случае существовать не будет. Соответственно, ты будешь ловить выход за пределы массива :)

    В общем, +-так
    1. CMD:veh(playerid, params[])
    2. {
    3. if(player_info[playerid][aLevel] < 2)
    4. return SCM(playerid, SYSTEM_NO_PERMISSION, "Эта команда доступна только администрации и агентам поддержки");
    5.  
    6. new vehicletype,
    7. color1,
    8. color2,
    9. addsiren;
    10. if(sscanf(params, "iI(-1)I(-1)I(0)", vehicletype, color1, color2, addsiren))
    11. {
    12. SCM(playerid, SYSTEM_INCORRECT_USAGE, "Использование: /veh [Модель] <Цвет_1> <Цвет_2> <Сирена>");
    13. SCM(playerid, SYSTEM_INCORRECT_USAGE, "<Цвет> {FFFFFF}Значение цвета не может быть меньше -1 или больше 255 (-1 для выдачи рандомного цвета)");
    14. SCM(playerid, SYSTEM_INCORRECT_USAGE, "<Сирена> {FFFFFF}0 - Транспорт без сирены | 1 - Транспорт с сиреной");
    15. return 1;
    16. }
    17.  
    18. if(!(400 <= vehicletype <= 600))
    19. return SCM(playerid, SYSTEM_INCORRECT_USAGE, "Вы указали невалидный ID модели транспорта. [Возможные ID транспорта: 400-600.]");
    20.  
    21. if(!(-1 <= color1 <= 255))
    22. return SCM(playerid, SYSTEM_INCORRECT_USAGE, "Вы указали невалидный ID первого цвета. [Минимальный ID - 0 | Максимальный ID - 255 (\"-1\" - рандомный цвет)]");
    23.  
    24. if(!(-1 <= color2 <= 255))
    25. return SCM(playerid, SYSTEM_INCORRECT_USAGE, "Вы указали невалидный ID второго цвета. [Минимальный ID - 0 | Максимальный ID - 255 (\"-1\" - рандомный цвет)]");
    26.  
    27. if(!(0 <= addsiren <= 1))
    28. return SCM(playerid, SYSTEM_INCORRECT_USAGE, "Вы указали невалидное состояние сирены. [0 - Транспорт без сирены | 1 - Транспорт с сиреной]");
    29.  
    30. new Float:x,
    31. Float:y,
    32. Float:z,
    33. Float:r;
    34. GetPlayerPos(playerid, x, y, z);
    35. GetPlayerFacingAngle(playerid, r);
    36.  
    37. if(!IsPlayerInAnyVehicle(playerid))
    38. {
    39. new vehicleid = CreateVehicle(vehicletype, x, y, z, r, color1, color2, -1, addaddsiren);
    40. PutPlayerInVehicle(playerid, vehicleid, 0);
    41. }
    42. else
    43. {
    44. CreateVehicle(vehicletype, x+2.0, y, z, r, color1, color2, -1, addaddsiren);
    45. }
    46.  
    47. SCM(playerid, SYSTEM_SUCCESS, "Готово!");
    48. return 1;
    49. }
    Последний раз редактировалось DeimoS; 22.08.2018 в 10:18.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  13. Пользователь сказал cпасибо:
    Josan_Solomon (22.08.2018)
 

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

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

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

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

Ваши права

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