Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Плагин изменение координат Заложникам

, смена респавна для заложников
Статус пользователя daywer
сообщение 4.9.2016, 18:38
Сообщение #1


Стаж: 13 лет
Город: Санкт-Петербург


Сообщений: 136
Благодарностей: 121
Полезность: 1051

Плагин для смены позиций Заложников.
Инструкция:
создать папку в addons/amxmodx/configs/hostage

Зайти на сервер и выставить спавны через /host(вам откроется меню)

сменяем карту и заложники будут респаться где вы захотите!
Cкриншоты
Прикрепленное изображениеПрикрепленное изображение
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#define MAX_SPAWNS_HOST 8 //Макс спавнов для заложников
new Float:arrSpawnOrigin[MAX_SPAWNS_HOST][3];
new iTotalSpawnsHostage = 0;//Счетчик спавнов для заложников
new HostEntSpawn = 0;
public plugin_init()
{
register_plugin("host origin", "1.01", "daywer")
register_clcmd("say /host", "host_menu")
}
public plugin_precache()
{
RegisterHam(Ham_Spawn,"hostage_entity","host_respawn")
fReadMapSpawnsHostage()
}
public host_respawn(host)
{
if ( !pev_valid(host) )
{
return HAM_HANDLED;
}
new float:g_origin[3];
if(HostEntSpawn >=MAX_SPAWNS_HOST)HostEntSpawn = 0;
g_origin[0] = arrSpawnOrigin[HostEntSpawn][0];
g_origin[1] = arrSpawnOrigin[HostEntSpawn][1];
g_origin[2] = arrSpawnOrigin[HostEntSpawn][2];
set_pev(host, pev_origin, g_origin);
HostEntSpawn++
return HAM_HANDLED;
}
public host_menu(id)
{
if(!( get_user_flags( id ) & ADMIN_BAN ))
{
client_print(id,print_chat,"No acces command")
return;
}
new menu_name[90]
format(menu_name, 89, "\rМеню спавнов: %d", iTotalSpawnsHostage)
new g_menu = menu_create(menu_name, "menuspawn_handler")
menu_additem(g_menu, "\wДобавить точку", "1", 0)
menu_setprop(g_menu, MPROP_EXIT, MEXIT_ALL)
menu_setprop(g_menu, MPROP_EXITNAME, "Exit")
menu_display(id, g_menu, 0)
}
public menuspawn_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return;
}
new Float:origin[3];
entity_get_vector(id, EV_VEC_origin, origin)
save_spawn(origin)
menu_destroy(menu)
return;
}
save_spawn(Float:fOrigin[3])
{
new map[64],iFile[128],CfgDir[64];
get_mapname(map, 63)
formatex(map, 63, "%s.hostage_spawns.cfg", map)
formatex(CfgDir, 63, "%s/hostage", "addons/amxmodx/configs")
formatex(iFile, 127, "%s/%s", "addons/amxmodx/configs/hostage", map)
if(!dir_exists(CfgDir))
if(!mkdir(CfgDir))
return false

new text[100]
format(text, 99,"^"%f^" ^"%f^" ^"%f^"",fOrigin[0], fOrigin[1], fOrigin[2])
write_file(iFile, text, -1)
iTotalSpawnsHostage++
arrSpawnOrigin[iTotalSpawnsHostage][0] = fOrigin[0];
arrSpawnOrigin[iTotalSpawnsHostage][1] = fOrigin[1];
arrSpawnOrigin[iTotalSpawnsHostage][2] = fOrigin[2];
return true;
}
fReadMapSpawnsHostage()
{
new szMap[32],szMapFile[256];
get_mapname(szMap, charsmax(szMap));
format(szMapFile, charsmax(szMapFile), "%s\hostage\%s.hostage_spawns.cfg","addons/amxmodx/configs", szMap);
iTotalSpawnsHostage = 0;
if (file_exists(szMapFile))
{
new szDataFile[124];
new iLength;
new iLine = 0;
new szPos[4][8];
while(iTotalSpawnsHostage < MAX_SPAWNS_HOST && (iLine = read_file(szMapFile , iLine , szDataFile ,charsmax(szDataFile), iLength) ) != 0 )
{
if (strlen(szDataFile) < 2) continue;
parse(szDataFile, szPos[1], 7, szPos[2], 7, szPos[3], 7);
//Координаты
arrSpawnOrigin[iTotalSpawnsHostage][0] = str_to_float(szPos[1]);
arrSpawnOrigin[iTotalSpawnsHostage][1] = str_to_float(szPos[2]);
arrSpawnOrigin[iTotalSpawnsHostage][2] = str_to_float(szPos[3]);
iTotalSpawnsHostage++;
}
}
log_amx("Total Spawns Hostage: %d | Map: %s",iTotalSpawnsHostage,szMap);
}

Прикрепленный файл  host.sma ( 3,24 килобайт ) Кол-во скачиваний: 10

i
Уведомление:
Для оформления кода используйте тег PAWN или CODE + SPOILER
+
Скриншоты убираем под спойлер


Отредактировал: daywer, - 5.9.2016, 10:00


Написание плагинов на заказ.(sql,sqlite,nvault)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 5 раз
   Цитировать сообщение
Статус пользователя ladders
сообщение 4.9.2016, 20:01
Сообщение #2


Стаж: 16 лет

Сообщений: 440
Благодарностей: 49
Полезность: 117

daywer,
Вот это благодарочка!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя daywer
сообщение 5.9.2016, 4:55
Сообщение #3


Стаж: 13 лет
Город: Санкт-Петербург


Сообщений: 136
Благодарностей: 121
Полезность: 1051

UPD.
Более-менее оптимизированная версия.
Cкриншот
Прикрепленное изображение

Прикрепленный файл  host.sma ( 3,24 килобайт ) Кол-во скачиваний: 7

Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#define MAX_SPAWNS_HOST 8 //Макс спавнов для заложников
new Float:arrSpawnOrigin[MAX_SPAWNS_HOST][3];
new iTotalSpawnsHostage = 0;//Счетчик спавнов для заложников
new HostEntSpawn = 0;
public plugin_init()
{
register_plugin("host origin", "1.01", "daywer")
register_clcmd("say /host", "host_menu")
}
public plugin_precache()
{
RegisterHam(Ham_Spawn,"hostage_entity","host_respawn")
fReadMapSpawnsHostage()
}
public host_respawn(host)
{
if ( !pev_valid(host) )
{
return HAM_HANDLED;
}
new float:g_origin[3];
if(HostEntSpawn >=MAX_SPAWNS_HOST)HostEntSpawn = 0;
g_origin[0] = arrSpawnOrigin[HostEntSpawn][0];
g_origin[1] = arrSpawnOrigin[HostEntSpawn][1];
g_origin[2] = arrSpawnOrigin[HostEntSpawn][2];
set_pev(host, pev_origin, g_origin);
HostEntSpawn++
return HAM_HANDLED;
}
public host_menu(id)
{
if(!( get_user_flags( id ) & ADMIN_BAN ))
{
client_print(id,print_chat,"No acces command")
return;
}
new menu_name[90]
format(menu_name, 89, "\rМеню спавнов: %d", iTotalSpawnsHostage)
new g_menu = menu_create(menu_name, "menuspawn_handler")
menu_additem(g_menu, "\wДобавить точку", "1", 0)
menu_setprop(g_menu, MPROP_EXIT, MEXIT_ALL)
menu_setprop(g_menu, MPROP_EXITNAME, "Exit")
menu_display(id, g_menu, 0)
}
public menuspawn_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return;
}
new Float:origin[3];
entity_get_vector(id, EV_VEC_origin, origin)
save_spawn(origin)
menu_destroy(menu)
return;
}
save_spawn(Float:fOrigin[3])
{
new map[64],iFile[128],CfgDir[64];
get_mapname(map, 63)
formatex(map, 63, "%s.hostage_spawns.cfg", map)
formatex(CfgDir, 63, "%s/rune", "addons/amxmodx/configs")
formatex(iFile, 127, "%s/%s", "addons/amxmodx/configs/hostage", map)
if(!dir_exists(CfgDir))
if(!mkdir(CfgDir))
return false

new text[100]
format(text, 99,"^"%f^" ^"%f^" ^"%f^"",fOrigin[0], fOrigin[1], fOrigin[2])
write_file(iFile, text, -1)
iTotalSpawnsHostage++
arrSpawnOrigin[iTotalSpawnsHostage][0] = fOrigin[0];
arrSpawnOrigin[iTotalSpawnsHostage][1] = fOrigin[1];
arrSpawnOrigin[iTotalSpawnsHostage][2] = fOrigin[2];
return true;
}
fReadMapSpawnsHostage()
{
new szMap[32],szMapFile[256];
get_mapname(szMap, charsmax(szMap));
format(szMapFile, charsmax(szMapFile), "%s\hostage\%s.hostage_spawns.cfg","addons/amxmodx/configs", szMap);
iTotalSpawnsHostage = 0;
if (file_exists(szMapFile))
{
new szDataFile[124];
new iLength;
new iLine = 0;
new szPos[4][8];
while(iTotalSpawnsHostage < MAX_SPAWNS_HOST && (iLine = read_file(szMapFile , iLine , szDataFile ,charsmax(szDataFile), iLength) ) != 0 )
{
if (strlen(szDataFile) < 2) continue;
parse(szDataFile, szPos[1], 7, szPos[2], 7, szPos[3], 7);
//Координаты
arrSpawnOrigin[iTotalSpawnsHostage][0] = str_to_float(szPos[1]);
arrSpawnOrigin[iTotalSpawnsHostage][1] = str_to_float(szPos[2]);
arrSpawnOrigin[iTotalSpawnsHostage][2] = str_to_float(szPos[3]);
iTotalSpawnsHostage++;
}
}
log_amx("Total Spawns Hostage: %d | Map: %s",iTotalSpawnsHostage,szMap);
}


Отредактировал: iShot, - 5.9.2016, 7:55


Написание плагинов на заказ.(sql,sqlite,nvault)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 5.9.2016, 9:37
Сообщение #4


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

Код:
   formatex(CfgDir, 63, "%s/rune", "addons/amxmodx/configs")
formatex(iFile, 127, "%s/%s", "addons/amxmodx/configs/hostage", map)
...
format(szMapFile, charsmax(szMapFile), "%s\hostage\%s.hostage_spawns.cfg","addons/amxmodx/configs", szMap);

Супер просто cbf1b2bfde1a.gif

Отредактировал: BaHeK, - 5.9.2016, 9:37


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя daywer
сообщение 5.9.2016, 10:09
Сообщение #5


Стаж: 13 лет
Город: Санкт-Петербург


Сообщений: 136
Благодарностей: 121
Полезность: 1051

BaHeK, ЭЭЭЭ.
Забавно,когда не знаешь как работает и что это обозначает,и пишет такие комменты.

Ну ка,что не так.ЛУЛ



Написание плагинов на заказ.(sql,sqlite,nvault)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 6.9.2016, 10:24
Сообщение #6


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

daywer,
начнем с того, что вместо "CfgDir, 63" правильней писать "CfgDir, charsmax(CfgDir)" и т.д.
далее
formatex(CfgDir, 63, "%s/rune", "addons/amxmodx/configs") - что вообще за дичь? если не используешь get_configsdir, то это надо писать так:
new CfgDir[] = "addons/amxmodx/configs/rune", а не формировать строку через formatex
вместо formatex(map, 63, "%s.hostage_spawns.cfg", map)
проще сделать так:
add(map, charsmax(map), ".hostage_spawns.cfg")
Код:

formatex(CfgDir, 63, "%s/rune", "addons/amxmodx/configs")
...
if(!dir_exists(CfgDir))
if(!mkdir(CfgDir))
return false

Зачем ты создаешь папку и не используешь ее?
В общем - бездумный копипаст кода из разных плагинов.

Отредактировал: BaHeK, - 6.9.2016, 10:25


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя daywer
сообщение 6.9.2016, 11:49
Сообщение #7


Стаж: 13 лет
Город: Санкт-Петербург


Сообщений: 136
Благодарностей: 121
Полезность: 1051

эм...
шас бы написать зачем используется dir_exists(который проверяет директорию) и mkdir(которые создает эту папку).(думая что что-то понимаешь).
И как бы это не копипаст из разных плагинов,это копипаст 1 моего плагина,т.е следуя твоей логике,надо писать с нуля плагины,а функции которые КОРРЕКТНО работают и готовые вообще нафиг не нужны,КОПИПАСТ жеееее1111!
Т.е моя ошибка в том ,что я не использовал функции,которые ты бы использовал?
Видимо ты не понимаешь,как устроен код и что такое пошаговое форматирование сообщения.
так вот.
map = названия файла
CfgDir - папка
iFile - конечный файл

То что ты написал,просто какой-то бред.Вообще НИЧЕГО не выйграю,то что будут такие функции,просто 0.Хотя ты наверное даже не понимаешь почему Ham_Spawn хукается в precache.


Написание плагинов на заказ.(sql,sqlite,nvault)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ladders
сообщение 6.9.2016, 14:51
Сообщение #8


Стаж: 16 лет

Сообщений: 440
Благодарностей: 49
Полезность: 117

А то же самое только для переноса плентов реально реализовать, а то есть карты, а пленты на них делал какой то маньяк)))
Например: de_kabul
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 6.9.2016, 15:14
Сообщение #9


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

daywer, ты глаза то разуй, какую папку создаешь (addons/amxmodx/configs/rune - где она используется?), используй глобальные переменные для папок с конфигами и юзай их во всех функциях.
То что я написал - весомые косяки, если ты этого не видишь, то лучше не выкладывай свой говнокод, делай как скальпель, продавай говнокод, чтобы его никто не видел
Форматирование вообще не уместно, ты еще для каждой буквы текст формируй: formatex(text, charsmax(text), "%s%s%s%s%s%s%s%s", "t", "e", "x", "t", ".", "c", "f", "g")

Отредактировал: BaHeK, - 6.9.2016, 15:17


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя daywer
сообщение 6.9.2016, 16:12
Сообщение #10


Стаж: 13 лет
Город: Санкт-Петербург


Сообщений: 136
Благодарностей: 121
Полезность: 1051

эм rune > hostage.Просто не изменено.То что ты написал это бред.щас бы написать что-то умное в сфере в которой разбираешься(нет).Не понимаешь простое построение кода.Делать глобал переменную,когда она используется 1 раз "оптимизация 100 уровень"(можно конечно const).Короче,разговор считаю закрытым,попросту вставил свои пять копеек туда,куда не следовало.
P.S Щас будет кококококо так можно функцию add использовать,кококококо.

Мой косяк,что я не использую функцию add (весомый косяк)(ROFL).Даже новичок поймет,но ты за свои несколько лет не понимаешь вообще плагинов.

Отредактировал: daywer, - 6.9.2016, 16:16


Написание плагинов на заказ.(sql,sqlite,nvault)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 6.9.2016, 16:49
Сообщение #11


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

daywer, save_spawn используется 1 раз? это я еще не разбираюсь? ubeysya.gif
Твой косяк в том, что ты formatex'ом формируешь строку без переменных, тупо используя текст. Ты этого даже не понимаешь, ты тупо скопипастил код, не понимая как он работает и склепал херню, назвав это плагином.


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя daywer
сообщение 6.9.2016, 18:12
Сообщение #12


Стаж: 13 лет
Город: Санкт-Петербург


Сообщений: 136
Благодарностей: 121
Полезность: 1051

выйграл очень много в производительности по твоему совету(нет).То что я форматирую ибо мне так удобнее,я хочу использовать formatex а не add.Сколько я проиграю если буду использовать formatex вместо add?Забавно когда тебя обвиняют в том,что ты вырезал со своего плагина...В твоих словах есть смысл в некоторых,но смысл если ты выигрываешь от это ничего?Я
Cкрытый код
Код:

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#pragma tabsize 0
#define MAX_SPAWNS_HOST 8 //Макс спавнов для заложников
new Float:arrSpawnOrigin[MAX_SPAWNS_HOST][3];
new iTotalSpawnsHostage = 0;//Счетчик спавнов для заложников
new HostEntSpawn = 0;
new const CfgDir[64] = "addons/amxmodx/configs/hostage";
public plugin_init()
{
register_plugin("host origin", "1.01", "daywer")
register_clcmd("say /host", "host_menu")
}
public plugin_precache()
{
RegisterHam(Ham_Spawn,"hostage_entity","host_respawn")
fReadMapSpawnsHostage()
}
public host_respawn(host)
{
if ( !pev_valid(host) )
{
return HAM_HANDLED;
}
new float:g_origin[3];
if(HostEntSpawn >= MAX_SPAWNS_HOST) HostEntSpawn = 0;
g_origin[0] = arrSpawnOrigin[HostEntSpawn][0];
g_origin[1] = arrSpawnOrigin[HostEntSpawn][1];
g_origin[2] = arrSpawnOrigin[HostEntSpawn][2];
set_pev(host, pev_origin, g_origin);
HostEntSpawn++
return HAM_HANDLED;
}
public host_menu(id)
{
if(!( get_user_flags( id ) & ADMIN_BAN ))
{
client_print(id,print_chat,"No acces command")
return;
}
new menu_name[90]
format(menu_name, 89, "\rМеню спавнов: %d", iTotalSpawnsHostage)
new g_menu = menu_create(menu_name, "menuspawn_handler")
menu_additem(g_menu, "\wДобавить точку", "1", 0)
menu_setprop(g_menu, MPROP_EXIT, MEXIT_ALL)
menu_setprop(g_menu, MPROP_EXITNAME, "Exit")
menu_display(id, g_menu, 0)
}
public menuspawn_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return;
}
new Float:origin[3];
entity_get_vector(id, EV_VEC_origin, origin)
save_spawn(origin)
menu_destroy(menu)
return;
}
save_spawn(Float:fOrigin[3])
{
new map[64],iFile[128];
get_mapname(map, 63);
add(map,charsmax(map),".hostage_spawns.cfg")
formatex(iFile, charsmax(iFile), "%s/%s", CfgDir, map)
if(!dir_exists(CfgDir))
if(!mkdir(CfgDir))
return false

new text[100]
format(text, charsmax(text),"^"%f^" ^"%f^" ^"%f^"",fOrigin[0], fOrigin[1], fOrigin[2])
write_file(iFile, text, -1)
iTotalSpawnsHostage++
arrSpawnOrigin[iTotalSpawnsHostage][0] = fOrigin[0];
arrSpawnOrigin[iTotalSpawnsHostage][1] = fOrigin[1];
arrSpawnOrigin[iTotalSpawnsHostage][2] = fOrigin[2];
return true;
}
fReadMapSpawnsHostage()
{
new szMap[32],szMapFile[128];
get_mapname(szMap, charsmax(szMap));
format(szMapFile, charsmax(szMapFile), "%s/%s.hostage_spawns.cfg",CfgDir,szMap);
iTotalSpawnsHostage = 0;
if (file_exists(szMapFile))
{
new szDataFile[124];
new iLength;
new iLine = 0;
new szPos[4][8];
while(iTotalSpawnsHostage < MAX_SPAWNS_HOST && (iLine = read_file(szMapFile , iLine , szDataFile ,charsmax(szDataFile), iLength) ) != 0 )
{
if (strlen(szDataFile) < 2) continue;
parse(szDataFile, szPos[1], 7, szPos[2], 7, szPos[3], 7);
//Координаты
arrSpawnOrigin[iTotalSpawnsHostage][0] = str_to_float(szPos[1]);
arrSpawnOrigin[iTotalSpawnsHostage][1] = str_to_float(szPos[2]);
arrSpawnOrigin[iTotalSpawnsHostage][2] = str_to_float(szPos[3]);
iTotalSpawnsHostage++;
}
}
log_amx("Total Spawns Hostage: %d | Map: %s",iTotalSpawnsHostage,szMap);
}


Написание плагинов на заказ.(sql,sqlite,nvault)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 7.9.2016, 18:59
Сообщение #13


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

daywer, я про add всего 1 раз сказал, уже 3 поста пишу про то, что formatex глупо использовать для формирования строки без переменных, а именно:
formatex(CfgDir, 63, "%s/rune", "addons/amxmodx/configs")


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя daywer
сообщение 7.9.2016, 20:43
Сообщение #14


Стаж: 13 лет
Город: Санкт-Петербург


Сообщений: 136
Благодарностей: 121
Полезность: 1051

То что сразу понятно,что название папки не изменено на hostage(rune ).Я использую format,чтобы тем кто будет использовать плагин видно было все.Я не знаю,в какой директории захочет хранить свои спавны человек. поэтому отдельно выведено "addons/amxmodx/configs"(хотя можно вообще без него и все вывести в const) но функция Save_Spawn вызывается только когда человек спавны выставляет(допустим 10 раз) он выставил спавны и все,это функция бесполезная,так как координаты берет совсем другая функция(при старте карты).Я не выйграю ничего если будет по другому,вызов функции не 100 раз.Другой плагин просто с другим функционалом,но и я не выйграю ничего,если будет подругому > нет смысла делать по другому.


Написание плагинов на заказ.(sql,sqlite,nvault)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: