Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 2
  • 1
  • 2
  • »
Округление чисел
rasav Дата: Суббота, 27.07.2013, 08:17:53 | Сообщение # 1
Сообщений: 58
Репутация: 0 [ +/- ]
Всем привет !
У меня вопрос назрел вот у меня код
Код

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
  if(IsClientInGame(victim)){
   if (GetClientTeam(attacker) != GetClientTeam(victim) && GetClientTeam(attacker) == CS_TEAM_CT)
   {
    ///Например
    damage = (damage*0.8); /// Число нецелое  
    return Plugin_Changed;/// Поэтому он будет отнимать по 1 хп  
   }
  }
  return Plugin_Continue;
}

Помогите решить проблему !

Я знаю вот так можно
Код

public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype)
{
  if(IsClientInGame(victim)){
   if (GetClientTeam(attacker) != GetClientTeam(victim) && GetClientTeam(attacker) == CS_TEAM_CT)
   {
    ///Например
    damage = roundtonearest(damage*0.8); /// Число у меня превращается в 0
    return Plugin_Changed;/// Поэтому он будет отнимать по 0 хп  
   }
  }
  return Plugin_Continue;
}


И получается так , стреляю с авп в голову по идее 450 с лишним отнимет .
А на деле 0.
 
horr0r Дата: Суббота, 27.07.2013, 09:53:45 | Сообщение # 2
Сообщений: 149
Репутация: 40 [ +/- ]
Вот так попробуй.
Код
public OnPluginStart()
{
  HookEvent("player_hurt", OnPlayerHurt);
}

public Action:OnPlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)  
{
  SetEventInt(event, "dmg_health", RoundFloat(GetEventInt(event, "dmg_health")*0.8));
  return Plugin_Changed;
}
 
rasav Дата: Суббота, 27.07.2013, 12:37:27 | Сообщение # 3
Сообщений: 58
Репутация: 0 [ +/- ]
Цитата (horr0r)
Вот так попробуй.
Код
public OnPluginStart()
{
  HookEvent("player_hurt", OnPlayerHurt);
}

public Action:OnPlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)  
{
  SetEventInt(event, "dmg_health", RoundFloat(GetEventInt(event, "dmg_health")*0.8));
  return Plugin_Changed;
}


Дело в том что нужно именно через мою функцию .
Спасибо за ответ но к сожалению мне не подходит это ...
Будут еще варианты ?
 
TEIN Дата: Суббота, 27.07.2013, 13:16:59 | Сообщение # 4
Сообщений: 563
Репутация: 78 [ +/- ]
идея понятна?
Код
#include <sourcemod>

public OnPluginStart()
{
       for (new i = 1; i <= 10; i++)
       {
             new random = GetRandomInt(50, 250);
             PrintToServer("%d. %d * 0.8 = %0.0f", i, random, random * 0.8);
       }
}
 
rasav Дата: Суббота, 27.07.2013, 13:33:29 | Сообщение # 5
Сообщений: 58
Репутация: 0 [ +/- ]
Цитата (TEIN)
идея понятна?
Код
#include <sourcemod>

public OnPluginStart()
{
       for (new i = 1; i <= 10; i++)
       {
             new random = GetRandomInt(50, 250);
             PrintToServer("%d. %d * 0.8 = %0.0f", i, random, random * 0.8);
       }
}


Прости но я не понимаю сути твоей функции
 
Scarface_slv Дата: Суббота, 27.07.2013, 21:13:57 | Сообщение # 6
Сообщений: 737
Репутация: 61 [ +/- ]
Если я тебя правильно понял, попробуй так
damage = (float(damage)*0.8); /// Число нецелое
 
rasav Дата: Суббота, 27.07.2013, 21:45:59 | Сообщение # 7
Сообщений: 58
Репутация: 0 [ +/- ]
Цитата (Scarface_slv)
Если я тебя правильно понял, попробуй так
damage = (float(damage)*0.8); /// Число нецелое

К великому сожалению нет !
У нас получается число с точкой , естественно точка убирается и урон становится огромным что то типа 1.2313 Урон 12313
 
Scarface_slv Дата: Суббота, 27.07.2013, 23:47:26 | Сообщение # 8
Сообщений: 737
Репутация: 61 [ +/- ]
Должно быть так?
Код

  decl String:DamageString[10];
  FloatToString((float(damage)*0.8), DamageString, 10);  
  PrintToServer("======>%d", StringToInt(DamageString));
 
rasav Дата: Воскресенье, 28.07.2013, 07:01:50 | Сообщение # 9
Сообщений: 58
Репутация: 0 [ +/- ]
Цитата (Scarface_slv)
Должно быть так?
Код

  decl String:DamageString[10];
  FloatToString((float(damage)*0.8), DamageString, 10);  
  PrintToServer("======>%d", StringToInt(DamageString));

Блин а есть другие способы ?
 
TEIN Дата: Воскресенье, 28.07.2013, 07:31:06 | Сообщение # 10
Сообщений: 563
Репутация: 78 [ +/- ]
Format(buffer, sizeof(buffer), "%0.0f", damage * 0.8);
// ---
damage = StringToInt(buffer);
 
rasav Дата: Воскресенье, 28.07.2013, 07:51:26 | Сообщение # 11
Сообщений: 58
Репутация: 0 [ +/- ]
Цитата (TEIN)
Format(buffer, sizeof(buffer), "%0.0f", damage * 0.8);
// ---
damage = StringToInt(buffer);

На вид что то интересное сейчас посмотрю .
 
ThRunningMan Дата: Воскресенье, 28.07.2013, 12:07:31 | Сообщение # 12
Сообщений: 140
Репутация: 12 [ +/- ]
А зачем дамаг округлять? вы че то тут городите, дамаг он и есть дамаг нельзя отнять 0.5 хп отнимется 1 хп или вообще не отнимется, просто умнож дамаг на понижающий коэффициен ти не парься...
 
TEIN Дата: Воскресенье, 28.07.2013, 12:08:52 | Сообщение # 13
Сообщений: 563
Репутация: 78 [ +/- ]
7 пост глянь, видимо ТС не с потолка берет цифры
 
ThRunningMan Дата: Воскресенье, 28.07.2013, 12:23:16 | Сообщение # 14
Сообщений: 140
Репутация: 12 [ +/- ]
Код

new String:damage_string[32];
damage = damage * 0.8;
FormatEx(damage_string, sizeof(damage_string), "%d", damage);
damage = StringToInt(damage_string);
 
TEIN Дата: Воскресенье, 28.07.2013, 12:34:09 | Сообщение # 15
Сообщений: 563
Репутация: 78 [ +/- ]
Два раза приравнивать damage какому то числу?
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: