Броня игрока
|
|
panorama
|
Дата: Пятница, 26.07.2013, 18:00:37 | Сообщение # 1 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Здравствуйте , скажите каким способом можно сделать функцию если у игрока есть броня то снимать ее с каждым выстрелом противника , если нету то выполняем дальнейшее действие ? С броней все получается но как заставить не снимать хп , не знаю !
HELP кто может . Спасибо !
|
|
| |
ThRunningMan
|
Дата: Пятница, 26.07.2013, 18:08:14 | Сообщение # 2 |
|
Сообщений: 140
Репутация: 12 [ +/- ]
|
|
хукай дамаг наносимы игроку другим игроком, проверяй есть ли у него броня, если есть то возвращаешь нулевой дамаг и отнимаешь броню, есили нет брони просто продолжить действие нанесения дамага SDKHook_OnTakeDamage
Сообщение отредактировал ThRunningMan - Пятница, 26.07.2013, 19:13:52 |
|
| |
panorama
|
Дата: Пятница, 26.07.2013, 20:22:20 | Сообщение # 3 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Цитата (ThRunningMan) хукай дамаг наносимы игроку другим игроком, проверяй есть ли у него броня, если есть то возвращаешь нулевой дамаг и отнимаешь броню, есили нет брони просто продолжить действие нанесения дамага SDKHook_OnTakeDamage Ну так по идеи если я дамаг сделаю 0 то и броня не будет сниматься . Мне нужно именно урон на броню сделать больше так чтобы она снималась от выстрела противника. Ну типа
damage = damage+50
Только тут нужно дамаг на броню перебросить а не на здоровье .
Что то типо того ... Если вы меня поняли то помогите
|
|
| |
sssw
|
Дата: Суббота, 27.07.2013, 12:50:02 | Сообщение # 4 |
|
Сообщений: 123
Репутация: 14 [ +/- ]
|
|
Так получи здоровье и установи его в чём проблема?
|
|
| |
rasav
|
Дата: Суббота, 27.07.2013, 20:59:24 | Сообщение # 5 |
|
Сообщений: 58
Репутация: 0 [ +/- ]
|
|
Цитата (sssw) Так получи здоровье и установи его в чём проблема? План действий 1. Заблокировать получение урона на здоровье что то типа Код SetEntProp(client, Prop_Data, "m_takedamage", 0, 1); (Не выполнено) 2. Запретить снимать ЗДОРОВЬЕ до тех пор пока не снимется все броня (Например выстрел в грудь - 25 брони)(Выполнено) 3. Если броня закончилась разрешаем сносить здоровье .(Выполнено) 4. Выполняем функцию ... (Выполнено)
Как вы понимаете я не знаю как запретить сносить здоровье .
Спасибо !
|
|
| |
Scarface_slv
|
Дата: Суббота, 27.07.2013, 21:17:36 | Сообщение # 6 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Я наверно один тебя так и не понял) Что ты хочешь? Что бы сначала снималась вся броня и только потом снимался хп?
|
|
| |
|
Scarface_slv
|
Дата: Воскресенье, 28.07.2013, 00:28:39 | Сообщение # 8 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Подойдет как пример? Код public OnPluginStart() HookEvent("player_hurt", OnPlayerHurt);
public Action:OnPlayerHurt(Handle:event, const String:name[], bool:dontBroadcast) { if(GetEventInt(event, "armor") > 0) SetEntProp(GetClientOfUserId(GetEventInt(event, "userid")), Prop_Data, "m_iHealth", 100); }
Сообщение отредактировал Scarface_slv - Воскресенье, 28.07.2013, 00:28:50 |
|
| |
TEIN
|
Дата: Воскресенье, 28.07.2013, 06:54:21 | Сообщение # 9 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
EventHookMode_Pre
|
|
| |
panorama
|
Дата: Воскресенье, 28.07.2013, 07:00:36 | Сообщение # 10 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Цитата (TEIN) EventHookMode_Pre
Цитата (Scarface_slv) Подойдет как пример? Код
public OnPluginStart() HookEvent("player_hurt", OnPlayerHurt);
public Action:OnPlayerHurt(Handle:event, const String:name[], bool:dontBroadcast) { if(GetEventInt(event, "armor") > 0) SetEntProp(GetClientOfUserId(GetEventInt(event, "userid")), Prop_Data, "m_iHealth", 100); }
Блин вы меня не понимаете
Ладно сделаю по простому как вы советуете ...
Всем спасибо !
|
|
| |
TEIN
|
Дата: Воскресенье, 28.07.2013, 07:29:50 | Сообщение # 11 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Чего не понимаете?? Здоровье не будет отниматься, пока есть броня, что непонятного в коде то?
|
|
| |
Scarface_slv
|
Дата: Воскресенье, 28.07.2013, 11:07:45 | Сообщение # 12 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
panorama, Выражайся яснее...
Сообщение отредактировал Scarface_slv - Воскресенье, 28.07.2013, 11:09:19 |
|
| |
ThRunningMan
|
Дата: Воскресенье, 28.07.2013, 11:43:02 | Сообщение # 13 |
|
Сообщений: 140
Репутация: 12 [ +/- ]
|
|
А че вам не понятно... Стреляешь в игрока 100 брони у него, один выстрел 25 брони сняло а здоровье нет, еще выстрел еще 25 или рандомное число, и так пока не станет 0, а потом стандартный дамаг на хп, во и все тут делов в две строки...
|
|
| |
TEIN
|
Дата: Воскресенье, 28.07.2013, 11:52:49 | Сообщение # 14 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
тебе не кажется, что Scarface_slv уже реализовал?
|
|
| |
ThRunningMan
|
Дата: Воскресенье, 28.07.2013, 11:55:10 | Сообщение # 15 |
|
Сообщений: 140
Репутация: 12 [ +/- ]
|
|
Код public OnClientPutInServer(client) { SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage); }
public Action:OnTakeDamage(client, &attacker, &inflictor, &Float:damage, &damagetype) { new iArmor = GetEntData(client, FindDataMapOffs(client, "m_ArmorValue"), 4); //это собственно получаем сколько у клиента брони по которому стреляют или тот который получает дамаг new iArmor_dmg = GetRandomInt(20,25); //это задает сколько отнмать брони когда получает дамаг, уже сам настроишь фильтры дамага, ножи там оружие падение и т.д. new iArmor_raz; // это для получения будующей разницы между нанесенным дамагом броне и тем что имеется if(iArmor > 0) { if(iArmor_dmg <= iArmor) { iArmor_raz = iArmor - iArmor_dmg; //собственно отнимаем установленное количество брони и записываем в перменную SetEntData(client, FindDataMapOffs(client, "m_ArmorValue"), iArmor_raz, 4, true); // отправляем данные игроку damage = 0; // меняем дамаг который должен был быть нанесен игроку п окоторому стреляем и отправляем return Plugin_Change; }else { SetEntData(client, FindDataMapOffs(client, "m_ArmorValue"), 0, 4, true); // это сработает если у игрока брони меньше чем мы хоти у него отнять, тогда установится минимальный порог брони т.е. 0 damage = 0; // и тут также не разрешаем дамажить по хп return Plugin_Change; } }else return Plugin_Continue; // это сработает когда не выполнится условие что у игркоа етсь броня в нашем случае не нулевая, тогда все повреждения будут засчитываться }
Сообщение отредактировал ThRunningMan - Воскресенье, 28.07.2013, 12:02:07 |
|
| |