Участник
Пользователь
- Сообщения
- 702
- Реакции
- 54
Есть несколько способов, но суть одна: получаем нормализированный вектор направления вперед, умножаем на расстояние и добавляем текущие координаты. Например, так:Просто получить координаты точки, которая находиться через сто метров.
#include <amxmodx>
#include <fakemeta>
#include <xs>
public test(player)
{
// Угол напрления взгляда игрока
new Float:vecViewAngle[3];
pev(player, pev_v_angle, vecViewAngle);
// Создаем вектора напраяления из ViewAngle
// Рузультат будет сохранен в глобальные переменные glb_v_forward, glb_v_up, glb_v_right
engfunc(EngFunc_MakeVectors, vecViewAngle);
// Получем вектор направления 'вперед' из глобальной переменной
new Float:vecForward[3];
global_get(glb_v_forward, vecForward);
// Умножаем вектор 'вперед' на необходимое значение (расстояние в юнитах)
xs_vec_mul_scalar(vecForward, 100.0, vecForward);
// Текущие координаты игрока
new Float:vecOrigin[3];
pev(player, pev_origin, vecOrigin);
// Получем координаты точки в напраялении 100 юнитов вперед
xs_vec_add(vecOrigin, vecForward, vecOrigin);
}
Логично, но я немного не о том. Ты говоришь, что если данные по каким-то причинам не получены, заюзать бул и потом учитывать. Хорошо. Но, я же посылаю при коннекте проверку, есть ли данные по моему идентификатору или нет, т.е пытаюсь загрузить, а если их нету, то отправляю игрока на создание новой записи. И вопрос тут в том, что когда мне присваивать значения переменной, которую я потом буду учитывать, если "не загруженные данные" могут означать не только ошибку, а ещё и нового игрока.если новый игрок не записался или его данные не получены, то зачем с ним работать дальше?
public handler_SqlQuery( iFailState, Handle: hQueryHandle, sError[ ], iErrorCode, eSqlData[ ], iDataSize, Float: fQueryTime )
{
switch( eSqlData[ SQL_DATA__QUERY_TYPE ] )
{
case QUERY_TYPE__GET_ONLINE:
{
if( SQL_MoreResults( hQueryHandle ) )
{
g_bReceivedOnline[ id ] = true;
}
else
{
func_QueryInsertOnline( id );
}
}
case QUERY_TYPE__INSERT_ONLINE:
{
g_bReceivedOnline[ id ] = true;
}
}
}
new weapon[20] = "weapon_ak47";
new icon[10] = "d_";
log_amx("%s : %s", icon, weapon);
replace(weapon, charsmax(weapon), "weapon_", "");
formatex(icon, charsmax(icon), "%s%s", icon, weapon);
log_amx("%s : %s", icon, weapon);
L 10/31/2020 - 16:14:22: [test.amxx] d_ : weapon_ak47
L 10/31/2020 - 16:14:22: [test.amxx] d_ak47 : ak47
new const szText[] = "weapon_ak47"
new iPos = strfind(szText, "_")
if(iPos == -1) client_print(0, print_chat, "Not found");
else client_print(0, print_chat, "Weapon: %s", szText[iPos + 1])
/*
* Description: -
* Member type: struct edict_s *
* Get params: get_entvar(index, EntVars:var);
* Set params: set_entvar(index, EntVars:var, value);
*/
var_dmg_inflictor,
/*
* Description: -
* Member type: int
* Get params: get_entvar(index, EntVars:var);
* Set params: set_entvar(index, EntVars:var, value);
*/
var_dmg_take,
/*
* Description: -
* Member type: int
* Get params: get_entvar(index, EntVars:var);
* Set params: set_entvar(index, EntVars:var, value);
*/
var_dmg_save,
/*
* Description: -
* Member type: int
* Get params: get_entvar(index, EntVars:var);
* Set params: set_entvar(index, EntVars:var, value);
*/
var_dmg,
/*
* Description: -
* Member type: float
* Get params: Float:get_entvar(index, EntVars:var);
* Set params: set_entvar(index, EntVars:var, Float:value);
*/
var_takedamage,
ВотТам кста вроде был какой-то способ увеличить урон через вар для всех оружек, кроме ножика, но я его потерял.