| 
				
				Округление чисел
				 | 
 | 
| 
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 какому то числу? 
 | 
 
|   | 
 |    |