Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 16 июн 2024, 03:34

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: return (возможные варианты)
СообщениеДобавлено: 12 ноя 2011, 22:51 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
09 дек 2021, 03:04
Сообщения: 756
Откуда: Futurama
Как вернуть дробный массив ? возвращает только 1 значение :(
Код:
Float:function()
{
new Float:vel[3]
pev(id, pev_velocity, vel)

return vel
}


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: return (возможные варианты)
СообщениеДобавлено: 12 ноя 2011, 23:20 
Не в сети
Аватара пользователя
Зарегистрирован:
01 июн 2010, 23:25
Последнее посещение:
05 июл 2018, 16:02
Сообщения: 1035
В амхх функции не могут возвращать массивы. Поэтому только так:

Код:

new Float:skorost[3]
get_speed(1, skorost)

//..........
//..........

public get_speed(id, Float:vel[3])
{

    pev(id, pev_velocity, vel)
    return 1
}


_________________
Изображение


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: return (возможные варианты)
СообщениеДобавлено: 13 ноя 2011, 00:52 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
09 дек 2021, 03:04
Сообщения: 756
Откуда: Futurama
unnamed
Как же можно понять вот это ? если это работает! :unknown: . И еще 1н вопрос - что именно означает return "1" ? (как это звучит на человеческом -_-)
Код:
#include <amxmodx>

public plugin_init()
{
   register_clcmd("name_id", "name_id_check")
}

get_name(id)
{
   new name[32]
   get_user_name(id, name, charsmax(name))
   return name
}

public name_id_check(id)
{
   client_print(id, print_chat, "Name is: %s", get_name(id))   
}


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: return (возможные варианты)
СообщениеДобавлено: 13 ноя 2011, 02:08 
Не в сети
Аватара пользователя
Зарегистрирован:
01 июн 2010, 23:25
Последнее посещение:
05 июл 2018, 16:02
Сообщения: 1035
Turanga_Leela писал(а):
Как же можно понять вот это ? если это работает!

А черт его знает. Возможно, как исключение для целочисленных массивов.
В сурсмоде нельзя вообще строки/массивы возвращать.
Вот нашел твою проблему https://forums.alliedmods.net/showthread.php?t=84245
Однако там предлагают то что и я написал. Заодно показывают возможность возврата целочисленных массивов. А вот дробные обошли стороной...

Turanga_Leela писал(а):
:unknown: . И еще 1н вопрос - что именно означает return "1" ? (как это звучит на человеческом -_-)

В данном случае ничего. Можно не писать.

_________________
Изображение


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: return (возможные варианты)
СообщениеДобавлено: 13 ноя 2011, 02:21 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
09 дек 2021, 03:04
Сообщения: 756
Откуда: Futurama
unnamed
В принципе это вариант, подобное хотел замутить чтобы не использовать 2 флот статика ) а тут глобальную и писать в нее ...
Но все-же return "1" очень интересует, ведь при нормальном выполнении функция возвращает "0", значит когда НЕ "0" т.е. к примеру "1" выполнена не совсем корректно или как это еще можно обозвать ... ? Что это означает когда возвращается не "0" ? В общем всегда обходился return "0", как и в циклах только break :D, про continue выяснил только недавно (спасибо KORD_12.7), а return !0 (см. пример) остался загадкой :cry:
Код:
public pligin_init()
{
register_clcmd("slot1", "block")
}

public block()
{
return 1
}
Почему при !0 блочит ?


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: return (возможные варианты)
СообщениеДобавлено: 13 ноя 2011, 02:46 
Не в сети
Аватара пользователя
Зарегистрирован:
01 июн 2010, 23:25
Последнее посещение:
05 июл 2018, 16:02
Сообщения: 1035
Просто register_clcmd использует возвращаемое функцией значение чтоб знать что делать с зарегистрированной командой.
Более грамотно amxx константы использовать:

#define PLUGIN_CONTINUE 0 /* Results returned by public functions */
#define PLUGIN_HANDLED 1 /* stop other plugins */
#define PLUGIN_HANDLED_MAIN 2 /* to use in client_command(), continue all plugins but stop the command */

Код:
return PLUGIN_HANDLED

Если например:

Код:
public pligin_init()
{
register_clcmd("mycommand", "printinfo")
}

public printinfo()
{
client_print(0, print_chat, "Hi!")
return PLUGIN_CONTINUE
}

то при вводе в консоли mycommand в чат выведет Hi! а в консоли напишет unknown command mycommand
И эта команда может быть использована другими плагинами. А если:

Код:
public pligin_init()
{
register_clcmd("mycommand", "printinfo")
}

public printinfo()
{
client_print(0, print_chat, "Hi!")
return PLUGIN_HANDLED
}

То напечатает в чат Hi!, сообщения unknown command mycommand не будет. И команда mycommand дальше этого плагина не пойдет. Т.е. не может быть перехвачена плагинами ниже по списку в plugins.ini

если вообще не писать return то это будет эквивалентно return 0 или return PLUGIN_CONTINUE

Во многих случаях, если надо просто выйти их функции и не надо ничего возвращать, можно использовать просто
Код:
return

_________________
Изображение


Последний раз редактировалось unnamed 13 ноя 2011, 02:53, всего редактировалось 1 раз.

Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: return (возможные варианты)
СообщениеДобавлено: 13 ноя 2011, 02:52 
Не в сети
Аватара пользователя
Зарегистрирован:
24 янв 2011, 03:32
Последнее посещение:
09 дек 2021, 03:04
Сообщения: 756
Откуда: Futurama
unnamed
Цитата:
вообще не писать return то это будет эквивалентно return 0 или return PLUGIN_CONTINUE
Это знаю, Lev обьяснял. Спасибо - позновательно :beer:


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: return (возможные варианты)
СообщениеДобавлено: 13 ноя 2011, 04:07 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
11 июн 2024, 20:00
Сообщения: 6871
Возвращение массивов в АМХХ - это порочная практика. Правильный возврат строки - передать в функцию буфер и максимальный размер буфера (либо можно просто знать его) и заполнить буфер внутри функции.


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB