![]() |
|
Общие вопросы. ZM Обсуждаем вопросы связанные непосредственно с игрой |
![]() |
|
Опции темы | Опции просмотра |
|
![]() |
#1 |
Читатель
Регистрация: 12.01.2008
Сообщений: 2,089
Поблагодарил(а): 644
Получил(а): 492 "Спасибо" за 339 сообщений
Сказал(а) Фууу!: 25
Сказали Фууу! 22 раз(а) в 13 сообщениях
Репутация: 514 ![]() ![]() ![]() ![]() ![]() ![]() |
Как и обещал, вот скрипт:
Код:
#include <sourcemod> #include <sdktools_functions> #include <sdktools> #include <cstrike> #include <hacks> #define VERSION "0.5" new Float:spawnLoc[MAXPLAYERS+1][3]; public Plugin:myinfo = { name = "tele_zm", author = "TPOLI,KUU[B/IKCM]", description = "tele for zombie", version = VERSION, url = "www.sourcemod.net" }; public OnPluginStart() { HookEvent("round_freeze_end", RoundFreezeEnd); HookEvent("player_spawn", PlayerSpawn); } public RoundFreezeEnd(Handle:event, const String:name[], bool:dontBroadcast) { CreateTimer(20.0, TeleZombie, _, TIMER_FLAG_NO_MAPCHANGE); } public Action:TeleZombie(Handle:timer) { for (new i = 1; i <= MaxClients+1; i++) { if (GetClientHealth(i) > 100) { TeleportEntity(i, spawnLoc[i], NULL_VECTOR, NULL_VECTOR); } } } public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) { new index = GetClientOfUserId(GetEventInt(event, "userid")); GetClientAbsOrigin(index, spawnLoc[index]); } В данном варианте 20 сек. После чего компилируйте и устанавливайте. Плагин портует всех зомбей, которые появятся к этому моменту. (т.е. можно специально портовать чуть позже, чтобы зомби имел возможнось кого-нить цапнуть ![]() Портуются зомби на те места, на которых спаунились.
__________________
![]() Здесь слово "русский" не вполне политкорректно, Вот "россиянин" - это "чисто" и "конкретно". (с) Кинчев Последний раз редактировалось TPOLI,KUU[B/IKCM]; 30.06.2009 в 03:50.. |
![]() |
![]() |
Эти 3 человек(а) поблагодарили пользователя TPOLI,KUU[B/IKCM] за полезное сообщение: | |
![]() |
#2 |
Читатель
Регистрация: 12.01.2008
Сообщений: 2,089
Поблагодарил(а): 644
Получил(а): 492 "Спасибо" за 339 сообщений
Сказал(а) Фууу!: 25
Сказали Фууу! 22 раз(а) в 13 сообщениях
Репутация: 514 ![]() ![]() ![]() ![]() ![]() ![]() |
вот другой вариант.
Во-первых добавлены переменные для включения плагина и установки времени. Во-вторых первый вариант не всегда корректно работает (почему не знаю, но бывает что не всех зомбей портует). Код:
#include <sourcemod> #include <sdktools_functions> #include <sdktools> #include <cstrike> #include <hacks> #define VERSION "1.0" new Float:spawnLoc[MAXPLAYERS+1][3]; new Handle:Switch; new Handle:tLIMIT; new bool: aRestrict[MAXPLAYERS+1]; public Plugin:myinfo = { name = "tele_zm", author = "TPOLI,KUU[B/IKCM]", description = "tele zombie", version = VERSION, url = "www.sourcemod.net" }; public OnPluginStart() { Switch = CreateConVar("tele_on","1","Turns the plugin on and off 1/0",FCVAR_NOTIFY); tLIMIT = CreateConVar("time_tele","20.0","time v sec"); HookEvent("round_freeze_end", RoundFreezeEnd); HookEvent("player_spawn", PlayerSpawn); } public RoundFreezeEnd(Handle:event, const String:name[], bool:dontBroadcast) { new Float:time = GetConVarFloat(tLIMIT); CreateTimer(time, TeleZombie, _, TIMER_FLAG_NO_MAPCHANGE); } public Action:TeleZombie(Handle:timer) { new maxplayers = GetMaxClients(); for (new i = 1; i <= maxplayers; i++) { if (GetClientHealth(i) > 100 && GetConVarInt(Switch) && aRestrict[i] != true) { TeleportEntity(i, spawnLoc[i], NULL_VECTOR, NULL_VECTOR); aRestrict[i] = true; } } } //----------------------------------------------------------------------------------------------------- public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); GetClientAbsOrigin(client, spawnLoc[client]); new Float:time = GetConVarFloat(tLIMIT); CreateTimer(time+5.0, TeleZombie2, client, TIMER_FLAG_NO_MAPCHANGE); aRestrict[client] = false; } public Action:TeleZombie2(Handle:timer, any:index) { if (GetClientHealth(index) > 100 && GetConVarInt(Switch) && aRestrict[index] != true) { TeleportEntity(index, spawnLoc[index], NULL_VECTOR, NULL_VECTOR); aRestrict[index] = true; } } |
![]() |
![]() |
Эти 3 человек(а) поблагодарили пользователя TPOLI,KUU[B/IKCM] за полезное сообщение: | |
Реклама |
![]() |
#3 |
0.0
Капитан
Регистрация: 19.12.2008
Адрес: Москва,Бутово.
Имя: Гриха.
Сообщений: 873
Поблагодарил(а): 62
Получил(а): 88 "Спасибо" за 67 сообщений
Сказал(а) Фууу!: 0
Сказали Фууу! 0 раз(а) в 0 сообщениях
Репутация: 85 ![]() |
Сам писал?
![]() |
![]() |
![]() |
![]() |
#4 |
Читатель
Регистрация: 12.01.2008
Сообщений: 2,089
Поблагодарил(а): 644
Получил(а): 492 "Спасибо" за 339 сообщений
Сказал(а) Фууу!: 25
Сказали Фууу! 22 раз(а) в 13 сообщениях
Репутация: 514 ![]() ![]() ![]() ![]() ![]() ![]() |
Ну да, простенький плагин. Правда вот почему первый вариант не всегда хорошо работает не понимаю.
|
![]() |
![]() |
![]() |
#5 |
0.0
Капитан
Регистрация: 19.12.2008
Адрес: Москва,Бутово.
Имя: Гриха.
Сообщений: 873
Поблагодарил(а): 62
Получил(а): 88 "Спасибо" за 67 сообщений
Сказал(а) Фууу!: 0
Сказали Фууу! 0 раз(а) в 0 сообщениях
Репутация: 85 ![]() |
|
![]() |
![]() |
![]() |
#6 |
Читатель
Регистрация: 12.01.2008
Сообщений: 2,089
Поблагодарил(а): 644
Получил(а): 492 "Спасибо" за 339 сообщений
Сказал(а) Фууу!: 25
Сказали Фууу! 22 раз(а) в 13 сообщениях
Репутация: 514 ![]() ![]() ![]() ![]() ![]() ![]() |
Да нигде. Просто берешь сходный (или несколько сходных) по назначению плагин и выковыриваешь из него, то что тебе нужно. Че-нить простенькое не проблемма так накатать.
Если хочешь могу этот плагин расписать, как и че он делает.
__________________
![]() Здесь слово "русский" не вполне политкорректно, Вот "россиянин" - это "чисто" и "конкретно". (с) Кинчев Последний раз редактировалось TPOLI,KUU[B/IKCM]; 01.07.2009 в 20:25.. |
![]() |
![]() |
![]() |
#7 |
0.0
Капитан
Регистрация: 19.12.2008
Адрес: Москва,Бутово.
Имя: Гриха.
Сообщений: 873
Поблагодарил(а): 62
Получил(а): 88 "Спасибо" за 67 сообщений
Сказал(а) Фууу!: 0
Сказали Фууу! 0 раз(а) в 0 сообщениях
Репутация: 85 ![]() |
Давай) По Steam? Аськи нету,но есть скайп)
|
![]() |
![]() |
![]() |
#8 |
Читатель
Регистрация: 12.01.2008
Сообщений: 2,089
Поблагодарил(а): 644
Получил(а): 492 "Спасибо" за 339 сообщений
Сказал(а) Фууу!: 25
Сказали Фууу! 22 раз(а) в 13 сообщениях
Репутация: 514 ![]() ![]() ![]() ![]() ![]() ![]() |
Код:
#include <sourcemod> Типо подгружает библиотеки (здесь правда лишних напихал) #include <sdktools_functions> #include <sdktools> #include <cstrike> #include <hacks> #define VERSION "1.0" Версия (число не особо важно) new Float:spawnLoc[MAXPLAYERS+1][3]; переменные действующие на весь плагин new Handle:Switch; new Handle:tLIMIT; new bool: aRestrict[MAXPLAYERS+1]; public Plugin:myinfo = информация о плагине. Первые три строчки можно редактироваать как угодно { name = "tele_zm", author = "TPOLI,KUU[B/IKCM]", description = "tele zombie", version = VERSION, url = "www.sourcemod.net" }; public OnPluginStart() действия, выполняемые при запуске плагина { Switch = CreateConVar("tele_on","1","Turns the plugin on and off 1/0",FCVAR_NOTIFY); Создание переменных tLIMIT = CreateConVar("time_tele","20.0","time v sec"); HookEvent("round_freeze_end", RoundFreezeEnd); регистрирует конец заморозки (во время закупки) и выполняет соответствующее действие HookEvent("player_spawn", PlayerSpawn); регистрирует спаун игроков AutoExecConfig(true, "zm_tele"); автоматическое создание конфиг файла } public RoundFreezeEnd(Handle:event, const String:name[], bool:dontBroadcast) действие выполняемое в конце заморозки { new Float:time = GetConVarFloat(tLIMIT); создаем новую перенменную и записываем в нее из конфига, время через которое зомбаки будут телепортироваться CreateTimer(time, TeleZombie, _, TIMER_FLAG_NO_MAPCHANGE); Запускаем таймер, при срабатывании которого плагин выполнит следующее действие } public Action:TeleZombie(Handle:timer) действие, выполняемое при срабатывании таймера { new maxplayers = GetMaxClients(); Записываем в новую переменную число игроков for (new i = 1; i <= maxplayers; i++) Цикл, который должен проитись по всем игрокам (почему то не по всем проходится, почему и понадобилось дорабатывать плангин) { if (GetClientHealth(i) > 100 && GetConVarInt(Switch) && aRestrict[i] != true) условие (если у игрока больше 100хп, плагин включен и игрок еще не портовался) { TeleportEntity(i, spawnLoc[i], NULL_VECTOR, NULL_VECTOR); телепортирует игрока aRestrict[i] = true; для данного игрока записываем что он портнулся } } } //----------------------------------------------------------------------------------------------------- public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) действие выполняемое при спауне { new client = GetClientOfUserId(GetEventInt(event, "userid")); в переменную записываем индификатор игрока GetClientAbsOrigin(client, spawnLoc[client]); получаем координаты игрока и записываем в другую переменную new Float:time = GetConVarFloat(tLIMIT); CreateTimer(time+5.0, TeleZombie2, client, TIMER_FLAG_NO_MAPCHANGE); запускаем таймер (ко времени добавляем 5 сек, т.к. спаунятся игроки на 5 сек раньше, чем кончается заморозка) aRestrict[client] = false; записываем для данного игрока, что он еще не портнулся } public Action:TeleZombie2(Handle:timer, any:index) при срабатывании этого таймера делаем следующее { if (GetClientHealth(index) > 100 && GetConVarInt(Switch) && aRestrict[index] != true) проверем что игрок зомби, плагин включен и он еще не портовался { TeleportEntity(index, spawnLoc[index], NULL_VECTOR, NULL_VECTOR); портуем его aRestrict[index] = true; записываем что он портнулся } } В принципе первый таймер можно удлинить и при его срабатывании не проверять всех игроков на зомбячество, а записывать булеановскую переменную, которая будет означать, что портировать больше не надо. А при срабатывании второго таймера проверять эту переменную. А при регистрации конца заморозки записывать в нее, что телепортировать можно. Только это переменную надо зарегистрировать в начале раунда. Тогда плагин будет корректно работать и при автореспауне ![]() -----------добавлено----------- вот пример: Код:
#include <sourcemod> #include <sdktools_functions> #include <sdktools> #include <cstrike> #include <hacks> #define VERSION "1.0" new Float:spawnLoc[MAXPLAYERS+1][3]; new Handle:Switch; new Handle:tLIMIT; new bool: monatele; public Plugin:myinfo = { name = "tele_zm", author = "TPOLI,KUU[B/IKCM]", description = "tele zombie", version = VERSION, url = "www.sourcemod.net" }; public OnPluginStart() { Switch = CreateConVar("tele_on","1","Turns the plugin on and off 1/0",FCVAR_NOTIFY); tLIMIT = CreateConVar("time_tele","20.0","time v sec"); HookEvent("round_freeze_end", RoundFreezeEnd); HookEvent("player_spawn", PlayerSpawn); } public RoundFreezeEnd(Handle:event, const String:name[], bool:dontBroadcast) { new Float:time = GetConVarFloat(tLIMIT); CreateTimer(time+5.0, TeleZombie, _, TIMER_FLAG_NO_MAPCHANGE); monatele = true; } public Action:TeleZombie(Handle:timer) { monatele = false; } //----------------------------------------------------------------------------------------------------- public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); GetClientAbsOrigin(client, spawnLoc[client]); new Float:time = GetConVarFloat(tLIMIT); CreateTimer(time+5.0, TeleZombie2, client, TIMER_FLAG_NO_MAPCHANGE); } public Action:TeleZombie2(Handle:timer, any:index) { if (GetClientHealth(index) > 100 && GetConVarInt(Switch) && monatele == true) { TeleportEntity(index, spawnLoc[index], NULL_VECTOR, NULL_VECTOR); } } -----------добавлено----------- Хотя, погорячился. Если кто-то зайдет в начале раунда, то респанется он чуть позже, и портнется соответственно тоже позже, поэтому первый таймер лучше оставить как есть (чтоб его могло вовремя портнуть при переборе) и добавить третий. Я думаю принцип понятен, поэтому еще один вариант приводить не буду. ![]()
__________________
![]() Здесь слово "русский" не вполне политкорректно, Вот "россиянин" - это "чисто" и "конкретно". (с) Кинчев Последний раз редактировалось TPOLI,KUU[B/IKCM]; 02.07.2009 в 00:02.. Причина: Склейка мультипостинга |
![]() |
![]() |
Этот человек поблагодарил пользователя TPOLI,KUU[B/IKCM] за полезное сообщение: | |
NightDeagle.rus (02.07.2009)
|
![]() |
#9 |
0.0
Капитан
Регистрация: 19.12.2008
Адрес: Москва,Бутово.
Имя: Гриха.
Сообщений: 873
Поблагодарил(а): 62
Получил(а): 88 "Спасибо" за 67 сообщений
Сказал(а) Фууу!: 0
Сказали Фууу! 0 раз(а) в 0 сообщениях
Репутация: 85 ![]() |
Основное понятно,а вот то,что внутри,более интересней...
|
![]() |
![]() |
![]() |
#10 |
Читатель
Регистрация: 12.01.2008
Сообщений: 2,089
Поблагодарил(а): 644
Получил(а): 492 "Спасибо" за 339 сообщений
Сказал(а) Фууу!: 25
Сказали Фууу! 22 раз(а) в 13 сообщениях
Репутация: 514 ![]() ![]() ![]() ![]() ![]() ![]() |
где внутри?
|
![]() |
![]() |
![]() |
Закладки |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|