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

Polygon4.Net - Тактические игры online (http://forum.polygon4.net/index.php)
-   Общие вопросы. ZM (http://forum.polygon4.net/forumdisplay.php?f=47)
-   -   Автореспавн зомби при возрождении (http://forum.polygon4.net/showthread.php?t=7510)

TPOLI,KUU[B/IKCM] 29.06.2009 02:03

Хотя чисто теоретически можно наверное забабахать плагин, который по истечение определенного времени будет портировать всех теров на респ.
Например, зомб появляется через 30сек, а через 32 сек его и тех, кого он успел цапнуть портует на респ. На досуге попробую это сделать.

HAM$ter 29.06.2009 08:33

Цитата:

Сообщение от TPOLI,KUU[B/IKCM] (Сообщение 125691)
Хотя чисто теоретически можно наверное забабахать плагин, который по истечение определенного времени будет портировать всех теров на респ.
Например, зомб появляется через 30сек, а через 32 сек его и тех, кого он успел цапнуть портует на респ. На досуге попробую это сделать.

всю толпу в одну точку:JC_see_stars:

TPOLI,KUU[B/IKCM] 29.06.2009 13:12

Цитата:

Сообщение от HAM$ter (Сообщение 125698)
всю толпу в одну точку:JC_see_stars:

Почему в одну точку?
Если два человека одновременно пишут зтеле, они не обязательно друг в друге застревают

TPOLI,KUU[B/IKCM] 30.06.2009 03:48

Как и обещал, вот скрипт:
Код:

#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]);
}

Время выставляется в CreateTimer(20.0, TeleZombie, _, TIMER_FLAG_NO_MAPCHANGE);.
В данном варианте 20 сек.
После чего компилируйте и устанавливайте.

Плагин портует всех зомбей, которые появятся к этому моменту.
(т.е. можно специально портовать чуть позже, чтобы зомби имел возможнось кого-нить цапнуть :aga:).
Портуются зомби на те места, на которых спаунились.

TPOLI,KUU[B/IKCM] 01.07.2009 00:27

вот другой вариант.
Во-первых добавлены переменные для включения плагина и установки времени.
Во-вторых первый вариант не всегда корректно работает (почему не знаю, но бывает что не всех зомбей портует).
Код:

#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;
        }
}

Недостаток этого варианта, что добавлен отсчет времени от спауна. Соответственно, если включен автореспаун, то после возрождения зомбика его (одного) опять портнет на респ через "time_tele"+5 сек. Хотя это можно исправить, но не вижу смысла усложнять плагин, т.к. он предназначен для эскейпов, где автореспаун должен быть выключен.

NightDeagle.rus 01.07.2009 09:25

Сам писал? :tick:

TPOLI,KUU[B/IKCM] 01.07.2009 14:03

Цитата:

Сообщение от NightDeagle.rus (Сообщение 126027)
Сам писал? :tick:

Ну да, простенький плагин. Правда вот почему первый вариант не всегда хорошо работает не понимаю.

NightDeagle.rus 01.07.2009 19:27

Цитата:

Сообщение от TPOLI,KUU[B/IKCM] (Сообщение 126064)
Ну да, простенький плагин. Правда вот почему первый вариант не всегда хорошо работает не понимаю.

А где учился не подскажешь?

TPOLI,KUU[B/IKCM] 01.07.2009 20:21

Цитата:

Сообщение от NightDeagle.rus (Сообщение 126103)
А где учился не подскажешь?

Да нигде. Просто берешь сходный (или несколько сходных) по назначению плагин и выковыриваешь из него, то что тебе нужно. Че-нить простенькое не проблемма так накатать.
Если хочешь могу этот плагин расписать, как и че он делает.

NightDeagle.rus 01.07.2009 21:26

Цитата:

Сообщение от TPOLI,KUU[B/IKCM] (Сообщение 126116)
Да нигде. Просто берешь сходный (или несколько сходных) по назначению плагин и выковыриваешь из него, то что тебе нужно. Че-нить простенькое не проблемма так накатать.
Если хочешь могу этот плагин расписать, как и че он делает.

Давай) По Steam? Аськи нету,но есть скайп)


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

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