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