Polygon4.Net - Тактические игры online  

Вернуться   Polygon4.Net - Тактические игры online > Общие вопросы > Другие игры > Counter-Strike : Source - ZombieMod > Общие вопросы. ZM
Справка Пользователи Календарь Галерея Закачка файлов Сообщения за день

Общие вопросы. ZM Обсуждаем вопросы связанные непосредственно с игрой

Ответ
 
Опции темы Опции просмотра
Старый 01.07.2009, 23:24   #31
TPOLI,KUU[B/IKCM]
Читатель
 
Аватар для TPOLI,KUU[B/IKCM]
 
Регистрация: 12.01.2008
Сообщений: 2,089
Поблагодарил(а): 644
Получил(а): 492 "Спасибо" за 339 сообщений
Сказал(а) Фууу!: 25
Сказали Фууу! 22 раз(а) в 13 сообщениях
Репутация: 514 TPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмени
Награды (1) За умелое ведение спора 
Код:
#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);
	}
}
В этом случае проверка на то что зомб уже портнулся не надо, поэтому переменную aRestrict[] удаляем
-----------добавлено-----------
Хотя, погорячился.
Если кто-то зайдет в начале раунда, то респанется он чуть позже, и портнется соответственно тоже позже, поэтому первый таймер лучше оставить как есть (чтоб его могло вовремя портнуть при переборе) и добавить третий.
Я думаю принцип понятен, поэтому еще один вариант приводить не буду.
__________________

Здесь слово "русский" не вполне политкорректно,
Вот "россиянин" - это "чисто" и "конкретно". (с) Кинчев

Последний раз редактировалось TPOLI,KUU[B/IKCM]; 02.07.2009 в 00:02.. Причина: Склейка мультипостинга
TPOLI,KUU[B/IKCM] вне форума   Ответить с цитированием
Этот человек поблагодарил пользователя TPOLI,KUU[B/IKCM] за полезное сообщение:
NightDeagle.rus (02.07.2009)
Старый 02.07.2009, 00:04   #32
NightDeagle.rus
0.0
Капитан
 
Аватар для NightDeagle.rus
 
Регистрация: 19.12.2008
Адрес: Москва,Бутово.
Имя: Гриха.
Сообщений: 873
Поблагодарил(а): 62
Получил(а): 88 "Спасибо" за 67 сообщений
Сказал(а) Фууу!: 0
Сказали Фууу! 0 раз(а) в 0 сообщениях
Репутация: 85 NightDeagle.rus скоро станет знаменитым
Основное понятно,а вот то,что внутри,более интересней...
NightDeagle.rus вне форума   Ответить с цитированием
Реклама
Старый 02.07.2009, 00:09   #33
TPOLI,KUU[B/IKCM]
Читатель
 
Аватар для TPOLI,KUU[B/IKCM]
 
Регистрация: 12.01.2008
Сообщений: 2,089
Поблагодарил(а): 644
Получил(а): 492 "Спасибо" за 339 сообщений
Сказал(а) Фууу!: 25
Сказали Фууу! 22 раз(а) в 13 сообщениях
Репутация: 514 TPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмени
Награды (1) За умелое ведение спора 
Цитата:
Сообщение от NightDeagle.rus Посмотреть сообщение
Основное понятно,а вот то,что внутри,более интересней...
где внутри?
__________________

Здесь слово "русский" не вполне политкорректно,
Вот "россиянин" - это "чисто" и "конкретно". (с) Кинчев
TPOLI,KUU[B/IKCM] вне форума   Ответить с цитированием
Старый 02.07.2009, 00:58   #34
NightDeagle.rus
0.0
Капитан
 
Аватар для NightDeagle.rus
 
Регистрация: 19.12.2008
Адрес: Москва,Бутово.
Имя: Гриха.
Сообщений: 873
Поблагодарил(а): 62
Получил(а): 88 "Спасибо" за 67 сообщений
Сказал(а) Фууу!: 0
Сказали Фууу! 0 раз(а) в 0 сообщениях
Репутация: 85 NightDeagle.rus скоро станет знаменитым
Цитата:
Сообщение от TPOLI,KUU[B/IKCM] Посмотреть сообщение
где внутри?
В самом скрипте) Допустим :

Цитата:
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"); автоматическое создание конфиг файла
}


То что показал.
То что хотелось узнать...
NightDeagle.rus вне форума   Ответить с цитированием
Старый 02.07.2009, 01:52   #35
TPOLI,KUU[B/IKCM]
Читатель
 
Аватар для TPOLI,KUU[B/IKCM]
 
Регистрация: 12.01.2008
Сообщений: 2,089
Поблагодарил(а): 644
Получил(а): 492 "Спасибо" за 339 сообщений
Сказал(а) Фууу!: 25
Сказали Фууу! 22 раз(а) в 13 сообщениях
Репутация: 514 TPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмениTPOLI,KUU[B/IKCM] любим всеми как пельмени
Награды (1) За умелое ведение спора 
Switch = CreateConVar("tele_on","1","Turns the plugin on and off 1/0",FCVAR_NOTIFY);

Создаем серверную переменную "tele_on", задаем ее значение "1" и присваиваем это значение переменной Switch
"Turns the plugin on and off 1/0" - описание переменной (как хотим так и описываем, чтоб в конфиг файле потом было понятно что она делает)
FCVAR_NOTIFY - сам не знаю, что значит. Просто в образце (другом плагине) было так

tLIMIT = CreateConVar("time_tele","20.0","time v sec");

Все тоже самое, ток нет FCVAR_NOTIFY (опять же по образцу)

HookEvent("round_freeze_end", RoundFreezeEnd);

HookEvent - команда означающая, что плагин будет отслеживать определенное событие
"round_freeze_end" - событие, которое отслеживается. Количество таких событий ограничено и из каждого можно почерпнуть какие-то данные
Например из "player_death" можно выковырять кого убили, кто убил, каким оружием, был ли хедшот и еще что-то.
В данном случае мв тупо регистрируем само событие.
Т.е. если оно происходит выполняем какое-нить действие.
В данном случае RoundFreezeEnd (название не принципиально, но в плагине необходимо его расписать)

HookEvent("player_spawn", PlayerSpawn);

Тоже самое. Только регистрируется событие Спаун. Т.е. когда игрок спаунится выполняется последовательность, описанная в PlayerSpawn
Отсюда мы правда выковыриваем кто респаунился и все действия производим с ним.

Весь остальной текст - описание этих последовательностей (действий) и подпоследовательностей
__________________

Здесь слово "русский" не вполне политкорректно,
Вот "россиянин" - это "чисто" и "конкретно". (с) Кинчев

Последний раз редактировалось TPOLI,KUU[B/IKCM]; 02.07.2009 в 01:55..
TPOLI,KUU[B/IKCM] вне форума   Ответить с цитированием
Ответ

Закладки


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +5, время: 05:32.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Khorost Group© 2002-2021