Sunday
|
Дата: Суббота, 23.02.2013, 19:48:39 | Сообщение # 1 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
Парни подскажите, пишу меню и когда я создаю через меню Props то другой игрок может его удолить, как сделать так, когда ты создаешь что то то ни кто другой не может выполнить с пропом ни каких действий. Сделал урезанный пример что бы было понятно:
Код #pragma semicolon 1
#include <sourcemod> #include <sdktools>
new String:client_name[64]; new String:modelname[64];
new House_Models_three = 0;
public OnPluginStart() { RegConsoleCmd("sm_cmd", ConsoleCmd); }
public Action:ConsoleCmd(client, args) { if (client < 1 || client > MaxClients) return Plugin_Handled;
new Handle:menu = CreateMenu(MenuHandler1); SetMenuTitle(menu, "Меню"); AddMenuItem(menu, "Prop Menu", "Prop Menu"); SetMenuExitButton(menu, true); SetMenuExitBackButton(menu, false); DisplayMenu(menu, client, 0);
return Plugin_Handled; }
public MenuHandler1(Handle:menu, MenuAction:action, client, param2) { if (action == MenuAction_Select) { decl String:info[64]; GetMenuItem(menu, param2, info, sizeof(info)); GetClientName(client, client_name, sizeof(client_name));
if(strcmp(info, "Prop Menu") == 0) { new Handle:propmenu = CreateMenu(MenuHandler1); SetMenuTitle(propmenu, "Prop Menu"); AddMenuItem(propmenu, "Delete Prop", "Delete Prop"); AddMenuItem(propmenu, "Static Props", "Static Props"); SetMenuExitBackButton(propmenu, true); DisplayMenu(propmenu, client, 0); }
if(strcmp(info, "Delete Prop") == 0) { decl String:classname[64]; new DeleteIndex = GetClientAimTarget(client, false); if (DeleteIndex != -1) { GetEdictClassname(DeleteIndex, classname, sizeof(classname)); } if ((DeleteIndex != -1) && (StrEqual(classname, "prop_physics") || StrEqual(classname, "prop_physics_override") || StrEqual(classname, "prop_dynamic") || StrEqual(classname, "prop_dynamic_override") || StrEqual(classname, "prop_physics_multiplayer") || StrEqual(classname, "prop_dynamic_ornament") || StrEqual(classname, "prop_static"))) { AcceptEntityInput(DeleteIndex, "Kill", -1, -1, 0); PrintToChat(client, "[SM] %s deleted a prop", client_name); } if ((DeleteIndex == -1) || !(StrEqual(classname, "prop_physics") || StrEqual(classname, "prop_physics_override") || StrEqual(classname, "prop_dynamic") || StrEqual(classname, "prop_dynamic_override") || StrEqual(classname, "prop_physics_multiplayer") || StrEqual(classname, "prop_dynamic_ornament") || StrEqual(classname, "prop_static"))) { PrintToChat(client, "[SM] No entity found or invalid entity"); } new Handle:propmenu = CreateMenu(MenuHandler1); SetMenuTitle(propmenu, "Prop Menu"); AddMenuItem(propmenu, "Prop Menu", "<--"); AddMenuItem(propmenu, "Delete Prop", "Delete Prop"); DisplayMenu(propmenu, client, 0); }
if(strcmp(info, "Static Props") == 0) { new Handle:Combine = CreateMenu(MenuHandler1); SetMenuTitle(Combine, "Static Props Menu."); AddMenuItem(Combine, "Prop Menu", "<--"); AddMenuItem(Combine, "House Models", "House Models"); DisplayMenu(Combine, client, 0); }
if(strcmp(info, "House Models") == 0) { new Handle:Combine = CreateMenu(MenuHandler1); SetMenuTitle(Combine, "House Models Menu."); AddMenuItem(Combine, "Static Props", "<--"); AddMenuItem(Combine, "fallhouse", "fallhouse 2$"); DisplayMenu(Combine, client, 0); }
if(strcmp(info, "fallhouse") == 0) { House_Models_three = 1; PrecacheModel("models/Z-O-M-B-I-E/container_01.mdl",true); modelname = "models/Z-O-M-B-I-E/container_01.mdl"; prop_dynamic_create(client); new Handle:Combine = CreateMenu(MenuHandler1); SetMenuTitle(Combine, "House Models Menu."); AddMenuItem(Combine, "House Models", "<--"); AddMenuItem(Combine, "fallhouse", "fallhouse"); DisplayMenu(Combine, client, 0); } }
else if (action == MenuAction_Cancel) { if (param2 == MenuCancel_ExitBack) { RemoveAllMenuItems(menu); AddMenuItem(menu, "Weapon", "Weapon"); AddMenuItem(menu, "Aammunition", "Aammunition"); AddMenuItem(menu, "Infirmary", "Infirmary"); AddMenuItem(menu, "Prop Menu", "Prop Menu"); SetMenuExitButton(menu, true); SetMenuExitBackButton(menu, false); DisplayMenu(menu, client, 0); } } }
public bool:TraceRayDontHitSelf(entity, mask, any:data) { if (entity == data) { return false; } return true; }
public prop_dynamic_create(client) { decl Float:VecOrigin[3]; decl Float:VecAngles[3]; decl Float:normal[3]; new prop = CreateEntityByName("prop_dynamic_override"); DispatchKeyValue(prop, "model", modelname); GetClientEyePosition(client, VecOrigin); GetClientEyeAngles(client, VecAngles); TR_TraceRayFilter(VecOrigin, VecAngles, MASK_SOLID, RayType_Infinite, TraceRayDontHitSelf, client); TR_GetEndPosition(VecOrigin); TR_GetPlaneNormal(INVALID_HANDLE, normal); GetVectorAngles(normal, normal); normal[0] += 90.0;
if (House_Models_three == 1) { VecOrigin[2] += 65.0; House_Models_three = 0; }
DispatchKeyValue(prop, "StartDisabled", "false"); DispatchKeyValue(prop, "Solid", "6"); DispatchKeyValue(prop, "spawnflags", "8"); SetEntProp(prop, Prop_Data, "m_CollisionGroup", 5); TeleportEntity(prop, VecOrigin, normal, NULL_VECTOR); DispatchSpawn(prop); AcceptEntityInput(prop, "EnableCollision"); AcceptEntityInput(prop, "TurnOn", prop, prop, 0);
GetClientName(client, client_name, sizeof(client_name));
return 0; }
Гости не могут скачивать файлы
|
|
|
| |
panorama
|
Дата: Пятница, 16.08.2013, 06:51:18 | Сообщение # 2 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Вопрос еще актуален ? Если да то к каждому пропу можно установить владельца что то типа Код SetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity", client); и при выполнении каких то действий Код new client = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); Проверять на владельца .
Надеюсь что помог )
|
|
| |