Создать зону на карте и получить индекс
Naykon
Дата: Суббота, 10.05.2014, 17:14:30 | Сообщение # 1
Сообщений: 439
Репутация: -4 [ +/- ]
Нужно создать зону на карте и если игрок находится в этой зоне то получаем индекс этого игрока. Зона должна быть как x y z (кубическая). Есть предложения о реализации?
Darkeneez
Дата: Суббота, 10.05.2014, 17:24:29 | Сообщение # 2
Сообщений: 221
Репутация: 18 [ +/- ]
Код
//Создание "Кубика" stock CreateZoneEntity(Float:fMins[3], Float:fMaxs[3]) { new Float:fMiddle[3]; new iEnt = CreateEntityByName("trigger_multiple"); DispatchKeyValue(iEnt, "spawnflags", "64"); DispatchKeyValue(iEnt, "targetname", "sic_spawn"); DispatchKeyValue(iEnt, "wait", "0"); DispatchSpawn(iEnt); ActivateEntity(iEnt); SetEntProp(iEnt, Prop_Data, "m_spawnflags", 64 ); GetMiddleOfABox(fMins, fMaxs, fMiddle); TeleportEntity(iEnt, fMiddle, NULL_VECTOR, NULL_VECTOR); SetEntityModel(iEnt, smodel); fMins[0] = fMins[0] - fMiddle[0]; if(fMins[0] > 0.0) fMins[0] *= -1.0; fMins[1] = fMins[1] - fMiddle[1]; if(fMins[1] > 0.0) fMins[1] *= -1.0; fMins[2] = fMins[2] - fMiddle[2]; if(fMins[2] > 0.0) fMins[2] *= -1.0; fMaxs[0] = fMaxs[0] - fMiddle[0]; if(fMaxs[0] < 0.0) fMaxs[0] *= -1.0; fMaxs[1] = fMaxs[1] - fMiddle[1]; if(fMaxs[1] < 0.0) fMaxs[1] *= -1.0; fMaxs[2] = fMaxs[2] - fMiddle[2]; if(fMaxs[2] < 0.0) fMaxs[2] *= -1.0; SetEntPropVector(iEnt, Prop_Send, "m_vecMins", fMins); SetEntPropVector(iEnt, Prop_Send, "m_vecMaxs", fMaxs); SetEntProp(iEnt, Prop_Send, "m_nSolidType", 2); HookSingleEntityOutput(iEnt, "OnEndTouch", EntOut_OnEndTouch); } //Когда игрок покидает кубик public EntOut_OnEndTouch(const String:output[], caller, activator, Float:delay) { } //Середина Куба stock GetMiddleOfABox(const Float:vec1[3], const Float:vec2[3], Float:buffer[3]) { new Float:mid[3]; MakeVectorFromPoints(vec1, vec2, mid); mid[0] = mid[0] / 2.0; mid[1] = mid[1] / 2.0; mid[2] = mid[2] / 2.0; AddVectors(vec1, mid, buffer); }
Сообщение отредактировал Darkeneez - Суббота, 10.05.2014, 17:25:15
Naykon
Дата: Суббота, 10.05.2014, 20:25:06 | Сообщение # 3
Сообщений: 439
Репутация: -4 [ +/- ]
Код
PrecacheModel("models/props/cs_militia/silo_01.mdl", true); new trigger_multiple = CreateEntityByName("trigger_multiple"); DispatchKeyValue(trigger_multiple, "spawnflags", "1"); DispatchKeyValue(trigger_multiple, "wait", "0"); DispatchSpawn(trigger_multiple); ActivateEntity(trigger_multiple); TeleportEntity(trigger_multiple, Float: {1080.004517, -641.031250, 16.031311}, NULL_VECTOR, NULL_VECTOR); SetEntityModel(trigger_multiple, "models/props/cs_militia/silo_01.mdl"); SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMins", Float: {-1000.0, -1000.0, -0.0}); SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMaxs", Float: {1000.0, 1000.0, 2000.0}); SetEntProp(trigger_multiple, Prop_Send, "m_nSolidType", 2); HookSingleEntityOutput(trigger_multiple, "OnStartTouch", OnStartTouch); HookSingleEntityOutput(trigger_multiple, "OnEndTouch", OnEndTouch); } public OnStartTouch(const String:output[], ent, client, Float:delay) { // Тут код, если игрок коснулся зоны. PrintToChatAll("Коснулись зоны! %d", client); } public OnEndTouch(const String:output[], ent, client, Float:delay) { // Тут код, если игрок вышел из зоны. PrintToChat(client, "Вышли из зоны!"); }
Есть вот такой тиргер: 1) Нужно его покрасить (сделать видимым) 2) Как проверить находимся ли в зоне этого триггера предметы и записать индексы предметов если они там есть.
Сообщение отредактировал Naykon - Суббота, 10.05.2014, 20:25:26