Утвержденные плагины для AMX Mod X администратором/модератором форума.
Модератор: Leonidddd
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только работоспособных плагинов для AMX Mod X. Новые плагины нужно выкладывать в разделе "Новые плагины".
Subb98 » 16 янв 2017, 23:25
Map Spawn Editor v1.0 [обновление от 23.10.2006]Автор: jopmako
Вы должны зарегистрироваться, чтобы видеть ссылки.Этот плагин позволит вам (добавлять / удалять / редактировать) точки спавнов на картах без каких-либо усилий.
Зачем это нужно:- * Многие карты имеют "плохие" точки спавнов, в которых игрок сразу же умирает; или же точки с плохим расположением, которые также препятствует нормальному появлению игрока на карте.
- Как мы можем это исправить? Можно использую некоторые инструменты (например, ripent), но это не представляется возможным, находясь в игре.
- Имея этот плагин, мы получаем возможность делать это прямо в игре.
- * Насколько это просто?
- Используя один плагин и одно меню, вы можете делать две вещи.
- Редактировать и изменять точки спавнов, изменять углы точек спавнов в любое время без перезагрузки сервера или смены карты - просто используйте функцию сохранения.
- Добавлять и удалять точки спавнов просто перезагрузив карту один раз (вы можете удалить все точки спавнов, если вы захотите).
Консольные команды:- amx_spawn_editor 1/0 // Включить / отключить режим редактирования
- amx_editor_menu // Открыть меню редактора
Требования:- AMX Mod X 1.76a или выше
- Модуль Engine
Инструкция по установке:- Поместить файл Map_Spawns_Editor.amxx в <GAME_DIR>/addons/amxmodx/plugins
- Поместить файл map_spawns_editor.txt в <GAME_DIR>/addons/amxmodx/data/lang
- Добавить в <GAME_DIR>/addons/amxmodx/configs/plugins.ini строку:
- Код: Выделить всё
Map_Spawns_Editor.amxx
- Загружаем карту, на которой необходимо отредактировать точки спавнов.
- Заходим на сервер с ADMIN_BAN доступом и биндим команду amx_editor_menu на любую удобную кнопку.
- Выполняем команду amx_spawn_editor 1 в консоли, чтобы включить режим редактирования.
- Нажмите забинденную ранее кнопку, чтобы открыть меню редактора.
- Сейчас добавляйте / удаляйте / редактируйте точки спавна через меню.
- И, наконец, выберите "save all spawns" в меню, когда вы закончили, и изменения будут применены.
Примечание: если ваш (Editor Spawns) отличается от (Original Spawns), то карта должна быть перезагружена один раз, чтобы изменения вступили в силу.
[2007-02-07] change lang file character format to ASIN for most ppl.(TO chinese user: 下载 map_spawns_editor.txt 后请转换为 UTF-8 格式后再使用)
[2006-10-23] v1.0 Rewrite all code, it's almost a new one.
- Fixed the Del spawns can not be less than orgign limit.
- Added change spawn vangle left&right function.
- Added easily create above player spawn function.
- Added auto create (spawns) folder function if it's not exist.
- Added multi-lingual support
- Added Cvar map_spawns record spawns lets HLSW or Server Tools can see how many spawns in that map.
[2006-08-23] First release. v0.5
- it works but have more bad code
Благодарности:Помощь и некоторые участки кода
- FreeCode, BAILOPAN, VEN, oneofthedragon
- и другие...
Мультиязычность:- [cn]
- [en] - добавил XxAvalanchexX
- [pl] - добавил Zuko
- [es] - добавил KylixMynxAltoLAG
- [de] - добавил |PJ| Shorty
- [bp] - добавил commonbullet
- [nl] - добавил DSI
- [ro] - добавил Cladyu
У вас нет необходимых прав для просмотра вложений в этом сообщении.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
-

Subb98

-
- Сообщения: 5486
- Зарегистрирован: 24 мар 2011, 19:42
- Откуда: г. Пермь
- Благодарил (а): 1329 раз.
- Поблагодарили: 2344 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: PHP
butkov34 » 27 май 2020, 16:23
Как-то можно сделать условие, чтобы в определенные момент только работал этот плагин? Например если у нас gGameMode = true, то игроки будут возрождаться согласно точкам этого плагина, а если gGameMode = false, то плагин так скажем не будет осуществлять свою функцию?
-

butkov34
-
- Сообщения: 57
- Зарегистрирован: 17 апр 2020, 12:14
- Благодарил (а): 9 раз.
- Поблагодарили: 1 раз.
- Языки программирования: Я ничего не знаю
MayroN » 27 май 2020, 19:49
butkov34,
Если я правильно понял,то...
На модах ксдм,и гг - если активирован режим спавнов в разных местах и есть соответствующий сам файл для карты,то будут работать рандомные точки спавна.
Если файла нет,то появление на базах закупки
-

MayroN
-
- Сообщения: 675
- Зарегистрирован: 10 окт 2010, 18:23
- Откуда: Украина, г. Белая Церковь
- Благодарил (а): 151 раз.
- Поблагодарили: 87 раз.
- Опыт программирования: Около года
- Языки программирования: На которых говорю...
-
butkov34 » 27 май 2020, 20:08
Да в общем хочу для jb мода сделать csdm мод, ну типо по команде определенной запускался бы csdm мод и вот возник вопрос как бы это всё сделать, а именно спавн игроков в рандомном месте на карте
-

butkov34
-
- Сообщения: 57
- Зарегистрирован: 17 апр 2020, 12:14
- Благодарил (а): 9 раз.
- Поблагодарили: 1 раз.
- Языки программирования: Я ничего не знаю
MayroN » 27 май 2020, 20:42
butkov34,
Ну я бы просто поставил этот плагин,вручную бы по всех картах наставил бы спавнов и все...
-

MayroN
-
- Сообщения: 675
- Зарегистрирован: 10 окт 2010, 18:23
- Откуда: Украина, г. Белая Церковь
- Благодарил (а): 151 раз.
- Поблагодарили: 87 раз.
- Опыт программирования: Около года
- Языки программирования: На которых говорю...
-
butkov34 » 27 май 2020, 20:45
Я это и хочу сделать, но в каком моменте там надо поставить проверку если включен мод csdm то плагин работает грубо говоря
-

butkov34
-
- Сообщения: 57
- Зарегистрирован: 17 апр 2020, 12:14
- Благодарил (а): 9 раз.
- Поблагодарили: 1 раз.
- Языки программирования: Я ничего не знаю
butkov34 » 28 май 2020, 00:57
Можете пожалуйста подсказать в каком месте нужно вставить проверку на условие, чтобы игроки спавнились в назначенных точках только при выполнении условия, а если условие не выполняется, то по дефолту?
- Код: Выделить всё
new g_SpawnFile[256], g_DieFile[256], g_EntFile[256]
new g_MainMenuID = -1
new bool:g_DeathCheck_end = false
new bool:g_LoadSuccessed = false
new bool:g_LoadInit = true
new bool:g_CheckDistance = true
new bool:g_AbovePlayer = false
new g_OffSet = SPAWN_PRESENT_OFFSET
new g_Editing
new g_SpawnT, g_EditT
new g_SpawnCT,g_EditCT
new Laser_Spr
new g_BeamColors[4][3]={{255,0,0},{0,255,0},{200,200,0},{0,0,255}}
public plugin_init()
{
register_plugin(PLUGINNAME, VERSION, AUTHOR)
register_dictionary("map_spawns_editor.txt")
g_LoadInit = false Spawns_Count()
new string[16]
format(string,15,"T(%d) CT(%d)",g_SpawnT,g_SpawnCT)
register_cvar("map_spawns",string,FCVAR_SERVER) register_event("TextMsg", "event_restartgame", "a", "2&#Game_C","2&#Game_w")
register_event("DeathMsg", "event_death", "a")
register_event("HLTV", "event_newround", "a", "1=0", "2=0")
register_clcmd("amx_spawn_editor", "editor_onoff", REQUIRED_ADMIN_LEVEL, "- 1/0 switch editor function on/off")
register_clcmd("amx_editor_menu", "editor_menu", REQUIRED_ADMIN_LEVEL, "- open editor menu")
}
public editor_onoff(id,level,cid)
{
if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
if (g_Editing && g_Editing!=id){
client_print(id,print_chat,"* %L",id,"MSG_ALREADY_INUSE")
return PLUGIN_HANDLED
}
new arg[2]
read_argv(1,arg,2)
if (equal(arg,"1",1) && !g_Editing){
g_Editing = id
Clear_AllEdit(0)
Load_SpawnFlie(0)
Spawns_To_Edit()
client_print(0,print_chat,">> %L - %L",id,"MENU_TITLE",id,"ON")
}else if (equal(arg,"0",1)){
g_Editing = 0
Clear_AllEdit(0)
if (task_exists(id+CHECKTASKID)) remove_task(id+CHECKTASKID)
client_print(0,print_chat,">> %L - %L",id,"MENU_TITLE",id,"OFF")
}
return PLUGIN_HANDLED
}
public editor_menu(id,level,cid)
{
if (!cmd_access(id,level,cid,1))
return PLUGIN_HANDLED
if (!g_Editing){
client_print(id,print_chat,"* %L",id,"MSG_FUNCTION_DISABLED")
return PLUGIN_HANDLED
}
if (g_Editing!=id){
client_print(id,print_chat,"* %L",id,"MSG_ALREADY_INUSE")
return PLUGIN_HANDLED
}
new tempString[101]
format(tempString,100,"%L",id,"MENU_TITLE")
g_MainMenuID = menu_create(tempString, "m_MainHandler")
new callbackMenu = menu_makecallback("c_Main")
menu_additem(g_MainMenuID, "[Spawns Info]","1", 1, callbackMenu)
menu_addblank(g_MainMenuID, 0)
menu_additem(g_MainMenuID, "[Add spawn locate: present/above player]","2", 0, callbackMenu)
format(tempString,100,"%L",id,"MENU_ADD_SPAWN","T")
menu_additem(g_MainMenuID, tempString,"3", 0, callbackMenu)
format(tempString,100,"%L",id,"MENU_ADD_SPAWN","CT")
menu_additem(g_MainMenuID, tempString,"4", 0, callbackMenu)
menu_addblank(g_MainMenuID, 0)
format(tempString,100,"\y%L",id,"MENU_TURN_LEFT")
menu_additem(g_MainMenuID, tempString,"5", 0, callbackMenu)
format(tempString,100,"\y%L",id,"MENU_TURN_RIGHT")
menu_additem(g_MainMenuID, tempString,"6", 0, callbackMenu)
menu_addblank(g_MainMenuID, 0)
format(tempString,100,"%L",id,"MENU_SAVE_ALL_SPAWNS")
menu_additem(g_MainMenuID, tempString,"7", 0, callbackMenu)
menu_addblank(g_MainMenuID, 0)
menu_additem(g_MainMenuID, "[Spawns Info]","11", 1, callbackMenu)
menu_addblank(g_MainMenuID, 0)
menu_additem(g_MainMenuID, "[Safe range check on/off]","12", 0, callbackMenu)
format(tempString,100,"%L",id,"MENU_CLEAR_SPAWN")
menu_additem(g_MainMenuID, tempString,"13", 0, callbackMenu)
menu_addblank(g_MainMenuID, 0)
format(tempString,100,"%L",id,"MENU_CLEAR_ALL_T_SPAWNS")
menu_additem(g_MainMenuID, tempString,"14", 0, callbackMenu)
format(tempString,100,"%L",id,"MENU_CLEAR_ALL_CT_SPAWNS")
menu_additem(g_MainMenuID, tempString,"15", 0, callbackMenu)
format(tempString,100,"%L",id,"MENU_DEL_SPAWNS_FILE")
menu_additem(g_MainMenuID, tempString,"16", 0, callbackMenu)
format(tempString,100,"%L",id,"MENU_EXPORT_FOR_RIPENT")
menu_additem(g_MainMenuID, tempString,"17", 0, callbackMenu)
menu_addblank(g_MainMenuID, 0)
format(tempString,100,"%L",id,"MENU_EXIT")
menu_setprop(g_MainMenuID, MPROP_EXITNAME, tempString)
format(tempString,100,"%L",id,"MENU_NEXT")
menu_setprop(g_MainMenuID, MPROP_NEXTNAME, tempString)
format(tempString,100,"%L",id,"MENU_BACK")
menu_setprop(g_MainMenuID, MPROP_BACKNAME, tempString)
menu_setprop(g_MainMenuID, MPROP_EXIT, MEXIT_ALL)
menu_display (id,g_MainMenuID,0)
client_cmd(id,"spk buttons/button9")
set_task(CHECKTIMER,"check_Task",id+CHECKTASKID,_,_,"b")
return PLUGIN_HANDLED
}
public c_Main(id, menu, item)
{
if (item < 0) return PLUGIN_CONTINUE
new cmd[6], fItem[256], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 5, iName, 63, callback)
new num = str_to_num(cmd)
if (num==1 || num==11){
if (g_EditT!=g_SpawnT || g_EditCT!=g_SpawnCT)
format(fItem,255,"%L ( T=%d + CT=%d ) ^n0.\y %L \r( T=%d + CT=%d ) ^n>> %L", id, "MENU_ORIGIN_SPAWNS",g_SpawnT,g_SpawnCT, id,"MENU_EDIT_SPAWNS", g_EditT,g_EditCT, id,"MENU_NOTICE_SAVE")
else format(fItem,255,"%L ( T=%d + CT=%d ) ^n0.\y %L ( T=%d + CT=%d )", id, "MENU_ORIGIN_SPAWNS",g_SpawnT,g_SpawnCT, id,"MENU_EDIT_SPAWNS", g_EditT,g_EditCT)
menu_item_setname(menu, item, fItem )
return ITEM_DISABLED
}
switch (num){
case 2:{
if (g_AbovePlayer)
format(fItem,255,"\y%L ->\r %L",id,"MENU_ADD_LOCATION",id,"MENU_LOCATION_ABOVE")
else format(fItem,255,"\y%L ->\r %L",id,"MENU_ADD_LOCATION",id,"MENU_LOCATION_CURRENT")
menu_item_setname(menu, item, fItem )
}
case 12:{
if (g_CheckDistance)
format(fItem,255,"\y%L ->\r %L",id,"MENU_SAFE_CHECK",id,"ON")
else format(fItem,255,"\y%L ->\r %L",id,"MENU_SAFE_CHECK",id,"OFF")
menu_item_setname(menu, item, fItem )
}
}
return ITEM_ENABLED
}
public m_MainHandler(id, menu, item)
{
if (item==MENU_EXIT || !g_Editing){
if (task_exists(id+CHECKTASKID)) remove_task(id+CHECKTASKID)
menu_destroy(g_MainMenuID)
return PLUGIN_HANDLED
}
new cmd[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd,5, iName, 63, callback)
new iChoice = str_to_num(cmd)
switch(iChoice)
{
case 2:{ if (g_AbovePlayer){
g_OffSet = SPAWN_PRESENT_OFFSET
g_AbovePlayer = false
}else{
g_OffSet = SPAWN_ABOVE_OFFSET
g_AbovePlayer = true
}
client_cmd(id,"spk buttons/button3")
}
case 3:{ if (g_CheckDistance && !SafeRangeCheck(id,g_OffSet)){
client_cmd(id,"spk buttons/button2")
client_print(0,print_chat,">> %L",id,"MSG_CHECK_FAULT")
}
else if (CreateEditEntity(1,id,g_OffSet)==1){
g_EditT++
client_cmd(id,"spk buttons/button9")
client_print(0,print_chat,">> %L",id,"MENU_ADD_SPAWN","T")
}
}
case 4:{ if (g_CheckDistance && !SafeRangeCheck(id,g_OffSet)){
client_cmd(id,"spk buttons/button2")
client_print(0,print_chat,">> %L",id,"MSG_CHECK_FAULT")
}
else if (CreateEditEntity(2,id,g_OffSet)==2){
g_EditCT++
client_cmd(id,"spk buttons/button9")
client_print(0,print_chat,">> %L",id,"MENU_ADD_SPAWN","CT")
}
}
case 5:{ new entity = Get_Edit_Point_By_Aim(id)
if (entity && is_valid_ent(entity)){
Entity_Turn_angle(entity,10)
client_cmd(id,"spk buttons/blip1")
}else{
client_cmd(id,"spk buttons/button2")
client_print(0,print_chat,">> %L",id,"ERROR_POINT_NOTFOUND")
}
}
case 6:{ new entity = Get_Edit_Point_By_Aim(id)
if (entity && is_valid_ent(entity)){
Entity_Turn_angle(entity,-10)
client_cmd(id,"spk buttons/blip1")
}else{
client_cmd(id,"spk buttons/button2")
client_print(0,print_chat,">> %L",id,"ERROR_POINT_NOTFOUND")
}
}
case 7:{ if (Save_SpawnsFile()){
Load_SpawnFlie(0)
client_cmd(id,"spk buttons/blip2")
client_print(0,print_chat,">> %L (T=%d,CT=%d)",id,"MSG_SAVE_SPAWNSFLIE",g_EditT,g_EditCT)
}else
client_print(0,print_chat,">> %L",id,"ERROR_SAVE_SPAWNSFLIE")
}
case 12:{ g_CheckDistance = g_CheckDistance ? false:true
client_cmd(id,"spk buttons/button3")
}
case 13:{ new entity = Get_Edit_Point_By_Aim(id)
if (entity && is_valid_ent(entity)){
new team = entity_get_int(entity,EV_INT_iuser2)
remove_entity(entity)
client_cmd(id,"spk buttons/button3")
if (team==1){
g_EditT--
client_print(0,print_chat,">> %L",id,"MSG_CLEAR_SPAWN","T")
}else{
g_EditCT--
client_print(0,print_chat,">> %L",id,"MSG_CLEAR_SPAWN","CT")
}
}else{
client_cmd(id,"spk buttons/button2")
client_print(0,print_chat,">> %L",id,"ERROR_POINT_NOTFOUND")
}
}
case 14:{ Clear_AllEdit(1)
client_cmd(id,"spk buttons/blip2")
client_print(0,print_chat,">> %L",id,"MENU_CLEAR_ALL_T_SPAWNS")
}
case 15:{ Clear_AllEdit(2)
client_cmd(id,"spk buttons/blip2")
client_print(0,print_chat,">> %L",id,"MENU_CLEAR_ALL_CT_SPAWNS")
}
case 16:{ if (file_exists(g_SpawnFile)){
delete_file(g_SpawnFile)
client_cmd(id,"spk buttons/blip2")
client_print(0,print_chat,">> %L",id,"MSG_DEL_SPAWNSFILE")
}
}
case 17:{ if (Export_RipentFormatFile()){
client_cmd(id,"spk buttons/blip2")
client_print(0,print_chat,">> %L [%s] (T=%d,CT=%d)",id,"MSG_EXOPRT_SPAWNSFLIE",g_EntFile,g_EditT,g_EditCT)
}
}
}
if (iChoice>=11 && iChoice<=17) menu_display (id, g_MainMenuID, 1)
else menu_display (id, g_MainMenuID, 0)
return PLUGIN_CONTINUE
}
public plugin_precache()
{
new configdir[128]
get_configsdir(configdir, 127 )
new spawndir[256]
format(spawndir,255,"%s/spawns",configdir)
if (!dir_exists(spawndir)){
if (mkdir(spawndir)==0){ log_amx("Create [%s] dir successfully finished.",spawndir)
}else{
log_error(AMX_ERR_NOTFOUND,"Couldn't create [%s] dir,plugin stoped.",spawndir)
pause("ad")
return PLUGIN_CONTINUE
}
}
precache_model(T_MDL)
precache_model(CT_MDL)
Laser_Spr = precache_model(LINE_SPR)
new MapName[32]
get_mapname(MapName, 31)
format(g_SpawnFile, 255, "%s/%s_spawns.cfg",spawndir, MapName)
format(g_DieFile, 255, "%s/%s_spawns_die.cfg",spawndir, MapName)
format(g_EntFile, 255, "%s/%s_ent.txt",spawndir, MapName)
if (Load_SpawnFlie(1)) g_LoadSuccessed = true
else
g_LoadSuccessed = false
return PLUGIN_CONTINUE
}
stock Load_SpawnFlie(type) {
if (file_exists(g_SpawnFile))
{
new ent_T, ent_CT
new Data[128], len, line = 0
new team[8], p_origin[3][8], p_angles[3][8]
new Float:origin[3], Float:angles[3]
while((line = read_file(g_SpawnFile , line , Data , 127 , len) ) != 0 )
{
if (strlen(Data)<2) continue
parse(Data, team,7, p_origin[0],7, p_origin[1],7, p_origin[2],7, p_angles[0],7, p_angles[1],7, p_angles[2],7)
origin[0] = str_to_float(p_origin[0]); origin[1] = str_to_float(p_origin[1]); origin[2] = str_to_float(p_origin[2]);
angles[0] = str_to_float(p_angles[0]); angles[1] = str_to_float(p_angles[1]); angles[2] = str_to_float(p_angles[2]);
if (equali(team,"T")){
if (type==1) ent_T = create_entity("info_player_deathmatch")
else ent_T = find_ent_by_class(ent_T, "info_player_deathmatch")
if (ent_T>0){
entity_set_int(ent_T,EV_INT_iuser1,1) entity_set_origin(ent_T,origin)
entity_set_vector(ent_T, EV_VEC_angles, angles)
}
}
else if (equali(team,"CT")){
if (type==1) ent_CT = create_entity("info_player_start")
else ent_CT = find_ent_by_class(ent_CT, "info_player_start")
if (ent_CT>0){
entity_set_int(ent_CT,EV_INT_iuser1,1) entity_set_origin(ent_CT,origin)
entity_set_vector(ent_CT, EV_VEC_angles, angles)
}
}
}
return 1
}
return 0
}
public pfn_keyvalue(entid)
{ if (g_LoadSuccessed && !g_LoadInit){
new classname[32], key[32], value[32]
copy_keyvalue(classname, 31, key, 31, value, 31)
if (equal(classname, "info_player_deathmatch") || equal(classname, "info_player_start")){
if (is_valid_ent(entid) && entity_get_int(entid,EV_INT_iuser1)!=1) remove_entity(entid)
}
}
return PLUGIN_CONTINUE
}
public event_restartgame()
{
if (g_Editing && file_exists(g_DieFile))
delete_file(g_DieFile)
g_DeathCheck_end = false
if (g_Editing){
Clear_AllEdit(0)
Load_SpawnFlie(0)
Spawns_To_Edit()
}
return PLUGIN_CONTINUE
}
public event_death()
{
if (!g_DeathCheck_end){
new string[12]
read_data(4,string,11)
if (equal(string,"worldspawn")){
new id = read_data(2)
if (g_Editing){
new entList[1],team
find_sphere_class(id,EDIT_CLASSNAME, 30.0, entList, 1)
if (entList[0]){
team = entity_get_int(entList[0],EV_INT_iuser2) if (team==1){
client_print(0,print_chat,">> %L",id,"MSG_AUTO_REMOVE_SPAWN","T")
g_EditT--
}else{
client_print(0,print_chat,">> %L",id,"MSG_AUTO_REMOVE_SPAWN","CT")
g_EditCT--
}
remove_entity(entList[0])
return PLUGIN_CONTINUE
}
}else{
new team = get_user_team(id)
if (team==1) Point_WriteToFlie(g_DieFile,1,id,1)
else if (team==2) Point_WriteToFlie(g_DieFile,2,id,1)
}
}
}
return PLUGIN_CONTINUE
}
public event_newround()
set_task(3.0,"deathCheck_end")
public deathCheck_end()
g_DeathCheck_end = true
stock CreateEditEntity(team,iEnt,offset)
{
new Float:fOrigin[3],Float:fAngles[3]
entity_get_vector(iEnt, EV_VEC_origin, fOrigin)
entity_get_vector(iEnt, EV_VEC_angles, fAngles)
fOrigin[2] += float(offset) new entity = create_entity("info_target")
if (entity){
entity_set_string(entity, EV_SZ_classname, EDIT_CLASSNAME)
entity_set_model(entity,(team==1) ? T_MDL:CT_MDL)
entity_set_origin(entity, fOrigin)
entity_set_vector(entity, EV_VEC_angles, fAngles)
entity_set_int(entity, EV_INT_sequence, 4)
entity_set_int(entity,EV_INT_iuser2,team) return team
}
return 0
}
stock Clear_AllEdit(team){
new entity
switch (team){
case 0:{
while ((entity = find_ent_by_class(entity, EDIT_CLASSNAME)))
remove_entity(entity)
g_EditT = 0
g_EditCT = 0
}
case 1:{
while ((entity = find_ent_by_class(entity, EDIT_CLASSNAME)))
if (entity_get_int(entity,EV_INT_iuser2)==1)
remove_entity(entity)
g_EditT = 0
}
case 2:{
while ((entity = find_ent_by_class(entity, EDIT_CLASSNAME)))
if (entity_get_int(entity,EV_INT_iuser2)==2)
remove_entity(entity)
g_EditCT = 0
}
}
}
stock Spawns_To_Edit()
{
new entity
g_EditT = 0
while ((entity = find_ent_by_class(entity, "info_player_deathmatch"))){
CreateEditEntity(1,entity,0)
g_EditT++
}
entity = 0
g_EditCT = 0
while ((entity = find_ent_by_class(entity, "info_player_start"))){
CreateEditEntity(2,entity,0)
g_EditCT++
}
}
stock Spawns_Count()
{
new entity
g_SpawnT = 0
while ((entity = find_ent_by_class(entity, "info_player_deathmatch")))
g_SpawnT++
entity = 0
g_SpawnCT = 0
while ((entity = find_ent_by_class(entity, "info_player_start")))
g_SpawnCT++
}
public check_Task(taskid){
SafeRangeCheck(taskid-CHECKTASKID,SPAWN_PRESENT_OFFSET)
Get_Edit_Point_By_Aim(taskid-CHECKTASKID)
}
public reset_entity_stats(param){
new entity = param - RESETENTITYTASKID
if (is_valid_ent(entity)){
entity_set_float(entity, EV_FL_animtime, 0.0)
entity_set_float(entity, EV_FL_framerate, 0.0)
entity_set_int(entity, EV_INT_sequence, 4)
}
}
stock Entity_Turn_angle(entity,turn){
if (is_valid_ent(entity)){
new Float:fAngles[3]
entity_get_vector(entity, EV_VEC_angles, fAngles)
fAngles[1] += turn
if (fAngles[1]>=360) fAngles[1] -= 360
if (fAngles[1]<0) fAngles[1] += 360
entity_set_vector(entity, EV_VEC_angles, fAngles)
}
}
stock SafeRangeCheck(id,offset)
{
new safepostion = 1
new Float:fOrigin[3],Float:fAngles[3],Float:inFrontPoint[3],Float:HitPoint[3]
entity_get_vector(id, EV_VEC_origin, fOrigin)
fOrigin[2] += offset entity_get_vector(id, EV_VEC_angles, fAngles)
for (new i=0;i<360;i+=10)
{
fAngles[1] = float(i)
Vector_By_Angle(fOrigin,fAngles, SAFEp2w * 2.0, 1, inFrontPoint)
trace_line(-1,fOrigin,inFrontPoint,HitPoint)
new distance = floatround(vector_distance(fOrigin, HitPoint))
if (distance<SAFEp2w){ Make_TE_BEAMPOINTS(id,0,fOrigin,HitPoint,2,255)
safepostion = 0
}
else if (distance < SAFEp2w * 1.5)
Make_TE_BEAMPOINTS(id,2,fOrigin,HitPoint,2,255)
}
new entList[10],Float:vDistance
new Float:entity_origin[3]
find_sphere_class(0,EDIT_CLASSNAME, SAFEp2p * 1.5, entList, 9, fOrigin)
for(new i=0;i<10;i++){
if (entList[i]){
entity_get_vector(entList[i], EV_VEC_origin, entity_origin)
vDistance = vector_distance(fOrigin,entity_origin)
if (vDistance < SAFEp2p){ Make_TE_BEAMPOINTS(id,0,fOrigin,entity_origin,5,255)
entity_set_int(entList[i], EV_INT_sequence, 64)
safepostion = 0
if (task_exists(entList[i]+RESETENTITYTASKID))
remove_task(entList[i]+RESETENTITYTASKID)
set_task(CHECKTIMER+0.1,"reset_entity_stats",entList[i]+RESETENTITYTASKID)
} else Make_TE_BEAMPOINTS(id,1,fOrigin,entity_origin,5,255)
}
}
return safepostion
}
stock Get_Edit_Point_By_Aim(id)
{
new entList[1],team
new Float:fOrigin[3],Float:vAngles[3],Float:vecReturn[3]
entity_get_vector(id, EV_VEC_origin, fOrigin)
fOrigin[2] += 10 entity_get_vector(id, EV_VEC_v_angle, vAngles)
for(new Float:i=0.0;i<=1000.0;i+=20.0)
{
Vector_By_Angle(fOrigin,vAngles,i,1,vecReturn)
find_sphere_class(0,EDIT_CLASSNAME, 20.0, entList, 1, vecReturn)
if (entList[0]){
entity_set_float(entList[0], EV_FL_animtime, 1.0)
entity_set_float(entList[0], EV_FL_framerate, 1.0)
team = entity_get_int(entList[0],EV_INT_iuser2)
client_print(id,print_center,"%L #%d",id,"MSG_AIM_SPAWN",(team==1) ? "T":"CT",entList[0])
if (task_exists(entList[0]+RESETENTITYTASKID))
remove_task(entList[0]+RESETENTITYTASKID)
set_task(CHECKTIMER+0.1,"reset_entity_stats",entList[0]+RESETENTITYTASKID)
break
}
}
return entList[0] }
stock Vector_By_Angle(Float:fOrigin[3],Float:vAngles[3], Float:multiplier, FRU, Float:vecReturn[3])
{
angle_vector(vAngles, FRU, vecReturn)
vecReturn[0] = vecReturn[0] * multiplier + fOrigin[0]
vecReturn[1] = vecReturn[1] * multiplier + fOrigin[1]
vecReturn[2] = vecReturn[2] * multiplier + fOrigin[2]
}
stock Make_TE_BEAMPOINTS(id,color,Float:Vec1[3],Float:Vec2[3],width,brightness){
message_begin(MSG_ONE_UNRELIABLE ,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_BEAMPOINTS) write_coord(floatround(Vec1[0])) write_coord(floatround(Vec1[1]))
write_coord(floatround(Vec1[2]))
write_coord(floatround(Vec2[0])) write_coord(floatround(Vec2[1]))
write_coord(floatround(Vec2[2]))
write_short(Laser_Spr) write_byte(1) write_byte(0) write_byte(4) write_byte(width) write_byte(0) write_byte(g_BeamColors[color][0])
write_byte(g_BeamColors[color][1])
write_byte(g_BeamColors[color][2])
write_byte(brightness) write_byte(0) message_end()
}
stock Save_SpawnsFile()
{
if (file_exists(g_SpawnFile))
delete_file(g_SpawnFile)
new mapname[32],line[128]
get_mapname(mapname,31)
format(line,127,"/* %s T=%d,CT=%d */ Map Spawns Editor Format File",mapname,g_EditT,g_EditCT)
write_file(g_SpawnFile, line, -1)
new entity,team
while ((entity = find_ent_by_class(entity, EDIT_CLASSNAME))){
team = entity_get_int(entity,EV_INT_iuser2)
Point_WriteToFlie(g_SpawnFile,team,entity,1)
}
return 1
}
stock Export_RipentFormatFile()
{
if (file_exists(g_EntFile))
delete_file(g_EntFile)
new entity,team
while ((entity = find_ent_by_class(entity, EDIT_CLASSNAME))){
team = entity_get_int(entity,EV_INT_iuser2)
Point_WriteToFlie(g_EntFile,team,entity,2)
}
return 1
}
stock Point_WriteToFlie(Flie[],team,entity,saveformat)
{
new line[128],sTeam[32]
new nOrigin[3],nAngles[3]
new Float:fOrigin[3],Float:fAngles[3]
entity_get_vector(entity, EV_VEC_origin, fOrigin)
entity_get_vector(entity, EV_VEC_angles, fAngles)
FVecIVec(fOrigin,nOrigin)
FVecIVec(fAngles,nAngles)
if (nAngles[1]>=360) nAngles[1] -= 360
if (nAngles[1]<0) nAngles[1] += 360
if (saveformat==1){ if (team==1) sTeam = "T"
else sTeam = "CT"
format(line, 127, "%s %d %d %d %d %d %d", sTeam, nOrigin[0], nOrigin[1], nOrigin[2], 0, nAngles[1], 0)
write_file(Flie, line, -1)
}
else if (saveformat==2){ if (team==1) sTeam = "info_player_deathmatch"
else sTeam = "info_player_start"
format(line, 127,"{^n ^"classname^" ^"%s^"",sTeam)
write_file(Flie, line , -1)
format(line, 127, " ^"origin^" ^"%d %d %d^"", nOrigin[0], nOrigin[1], nOrigin[2])
write_file(Flie, line, -1)
format(line, 127, " ^"angle^" ^"0 %d 0^"^n}^n", nAngles[1])
write_file(Flie, line, -1)
}
}
-

butkov34
-
- Сообщения: 57
- Зарегистрирован: 17 апр 2020, 12:14
- Благодарил (а): 9 раз.
- Поблагодарили: 1 раз.
- Языки программирования: Я ничего не знаю
Fedcomp » 09 июн 2020, 08:00
спавнить их самостоятельно где надо?
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.
"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
-

Fedcomp

-
- Сообщения: 4952
- Зарегистрирован: 28 авг 2009, 20:47
- Благодарил (а): 818 раз.
- Поблагодарили: 1320 раз.
- Языки программирования: =>
pawn / php / python / ruby
javascript / rust
Вернуться в Утвержденные плагины
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1