testcallinggg
|
Дата: Понедельник, 21.03.2016, 04:39:12 | Сообщение # 1 |
|
Сообщений: 3
Репутация: 0 [ +/- ]
|
|
Привет. Есть код:
Код #include <sourcemod> #include <sdktools_entoutput> #include <sdktools_functions>
new Float:wS_Pos[3];
public OnPluginStart() { HookEvent("player_spawn", player_spawn); }
public OnMapStart() { PrecacheModel("models/props/cs_office/vending_machine.mdl", true); }
public player_spawn(Handle:event, const String:name[], bool:dontBroadcast) { CreateTimer(1.0, CreateEnt_Timer, GetClientOfUserId(GetEventInt(event, "userid"))); }
public Action:CreateEnt_Timer(Handle:timer, any:i) { GetClientAbsOrigin(i, wS_Pos);
// Немного изменяем координату 'x', чтобы предмет был создан рядом с игроком, а не на его месте wS_Pos[0] += 80.0;
new index = CreateEntityByName("prop_dynamic"); if (index > 0) { SetEntityModel(index, "models/props/cs_office/vending_machine.mdl"); DispatchKeyValueVector(index, "origin", wS_Pos);
// Если бы это не сделали, то через предмет можно было проходить (solid 0) и OnTakeDamage не работало бы DispatchKeyValue(index, "solid", "6");
DispatchSpawn(index); HookSingleEntityOutput(index, "OnTakeDamage", EntityOutput:OnTakeDamage_Func, false);
PrintToChat(i, "Стреляйте по предмету"); } }
public OnTakeDamage_Func(const String:output[], caller, activator, Float:delay) { if (activator > 0 && activator <= MaxClients && IsClientInGame(activator) && IsPlayerAlive(activator)) { // Добавляем игроку, который нанес повреждение предмету, 1 hp new hp = GetClientHealth(activator) + 1; SetEntProp(activator, Prop_Send, "m_iHealth", hp); // Если hp игрока 105 или больше, то.. if (hp > 104) { // Перестаем ловить момент, когда предмет получает повреждение UnhookSingleEntityOutput(caller, "OnTakeDamage", EntityOutput:OnTakeDamage_Func);
// Устанавливаем предмету флаг '16 : Break on Touch' DispatchKeyValue(caller, "spawnflags", "16");
// Ловим момент, когда игрок дотрагивается до предмета и он ломается HookSingleEntityOutput(caller, "OnBreak", EntityOutput:OnBreak_Func, true);
// Говорим игроку, чтобы дотронулся до предмета PrintToChat(activator, "Теперь дотроньтесь до предмета"); } } }
public OnBreak_Func(const String:output[], caller, activator, Float:delay) { if (activator > 0 && activator <= MaxClients) { // Предмет удалился, устанавливаем игроку 1 hp SetEntProp(activator, Prop_Send, "m_iHealth", 1); } }
Как сделать так чтоб игрока на стопило когда он качается предмета? - так чтоб он коснулся к ему и даже не почувствовал этого, но OnBreak_Func сработало?
|
|
| |
RunCrafting
|
Дата: Пятница, 25.03.2016, 12:37:32 | Сообщение # 2 |
|
Сообщений: 52
Репутация: 0 [ +/- ]
|
|
Можно попонятнее, я не понял предложение. Тебе нужно чтобы не ставилось одно хп? Убери в коде эту строку: SetEntProp(activator, Prop_Send, "m_iHealth", 1);
|
|
| |