Half-Life и Adrenaline Gamer форум
http://aghl.ru/forum/

return (возможные варианты)
http://aghl.ru/forum/viewtopic.php?f=20&t=572
Страница 1 из 1

Автор:  Turanga_Leela [ 12 ноя 2011, 22:51 ]
Заголовок сообщения:  return (возможные варианты)

Как вернуть дробный массив ? возвращает только 1 значение :(
Код:
Float:function()
{
new Float:vel[3]
pev(id, pev_velocity, vel)

return vel
}

Автор:  unnamed [ 12 ноя 2011, 23:20 ]
Заголовок сообщения:  Re: return (возможные варианты)

В амхх функции не могут возвращать массивы. Поэтому только так:

Код:

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

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

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

    pev(id, pev_velocity, vel)
    return 1
}


Автор:  Turanga_Leela [ 13 ноя 2011, 00:52 ]
Заголовок сообщения:  Re: return (возможные варианты)

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))   
}

Автор:  unnamed [ 13 ноя 2011, 02:08 ]
Заголовок сообщения:  Re: return (возможные варианты)

Turanga_Leela писал(а):
Как же можно понять вот это ? если это работает!

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

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

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

Автор:  Turanga_Leela [ 13 ноя 2011, 02:21 ]
Заголовок сообщения:  Re: return (возможные варианты)

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 блочит ?

Автор:  unnamed [ 13 ноя 2011, 02:46 ]
Заголовок сообщения:  Re: return (возможные варианты)

Просто 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

Автор:  Turanga_Leela [ 13 ноя 2011, 02:52 ]
Заголовок сообщения:  Re: return (возможные варианты)

unnamed
Цитата:
вообще не писать return то это будет эквивалентно return 0 или return PLUGIN_CONTINUE
Это знаю, Lev обьяснял. Спасибо - позновательно :beer:

Автор:  Lev [ 13 ноя 2011, 04:07 ]
Заголовок сообщения:  Re: return (возможные варианты)

Возвращение массивов в АМХХ - это порочная практика. Правильный возврат строки - передать в функцию буфер и максимальный размер буфера (либо можно просто знать его) и заполнить буфер внутри функции.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/