Русское сообщество по скриптингу

[ZP] Сделать авто-возрождение.  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

[ZP] Сделать авто-возрождение.

Сообщение Misha90 » 19 июн 2017, 16:03

Всем снова приветик) Как дела? Как лето проходит? Вообщем тут проблема. У меня раунд идёт 8 минут.
Игрокам надоедает ждать столько времени и они выходят. Помогите пожалуйста сделать авто-респавн в обычным моде и мульти-инфекции пожалуйста. Вот ещё у зомби 5 возрождений, то есть если убили 5 раз то он не возрождается. Можно ли ещё сделать если он перезаходит то эти 5 возрождение вычитаются, то есть его убили осталось 4, он перезашел осталось 3. Умоляю помогите

Код: Выделить всё
#include <amxmodx>
#include <zombieplague>
#include <hamsandwich>
#include <cstrike>

enum (+= 100)
{
    TASK_SPAWN
}

enum cvar
{
    spawndelay, amount, nemesis, survivor, plague, swarm
}

new pcvar[cvar]
new current[33] = 0 
new bool
: ended = false

#define ID_SPAWN (taskid - TASK_SPAWN)

public plugin_init()
{
    events()
    cvars()
}

public events()
{
    RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
}

public cvars()
{
    pcvar[spawndelay] = register_cvar("zp_spawn_delay", "1.5")
    pcvar[amount] = register_cvar("zp_spawn_amount", "5")
    
    pcvar
[nemesis] = register_cvar("zp_respawn_in_nemesis", "0")
    pcvar[survivor] = register_cvar("zp_respawn_in_survivor", "0")
    pcvar[plague] = register_cvar("zp_respawn_in_plague", "0")
    pcvar[swarm] = register_cvar("zp_respawn_in_swarm", "0")
}

public fw_PlayerSpawn_Post(id)
{
    if(!is_user_alive(id))
        return
        
    remove_task
(id+TASK_SPAWN)
    return
}

public fw_PlayerKilled(victim, attacker, shouldgib)
{
    if(zp_is_nemesis_round() && !get_pcvar_num(pcvar[nemesis]))
        return
        
    if
(zp_is_survivor_round() && !get_pcvar_num(pcvar[survivor]))
        return
    
    if
(zp_is_plague_round() && !get_pcvar_num(pcvar[plague]))
        return

    if
(zp_is_swarm_round() && !get_pcvar_num(pcvar[swarm]))
        return

    set_task
(get_pcvar_float(pcvar[spawndelay]), "respawn_player_task", victim+TASK_SPAWN)
    return
}

public respawn_player_task(taskid)
{
    if(!is_user_connected(ID_SPAWN))
    {
        remove_task(ID_SPAWN+TASK_SPAWN)
        return
    
}

    if(current[ID_SPAWN] >= get_pcvar_num(pcvar[amount]))
    {
        remove_task(ID_SPAWN+TASK_SPAWN)
        return
    
}
        
    if
(ended)
    {
        remove_task(ID_SPAWN+TASK_SPAWN)
        return
    
}

    
    if
(cs_get_user_team(ID_SPAWN) != CS_TEAM_SPECTATOR && cs_get_user_team(ID_SPAWN) != CS_TEAM_UNASSIGNED)
    {
        if(zp_is_nemesis_round())
        {
            zp_respawn_user(ID_SPAWN, ZP_TEAM_HUMAN)
            current[ID_SPAWN]++
            return
        
}
        else if(zp_is_plague_round())
        {
            return
        
}
        else if(zp_is_swarm_round())
        {
            return
        
}
        
        zp_respawn_user
(ID_SPAWN, ZP_TEAM_ZOMBIE)
        current[ID_SPAWN]++
    }
    return
}

public zp_round_ended(winter)
{
    ended = true
}

public zp_round_started()
{
    ended = false

    new MaxPlayers 
= get_maxplayers()
    
    for 
(new player = 1; player <= MaxPlayers; player++)   
    
{
        current[player] = 0
    
}
}
Аватара пользователя
Misha90
 
Сообщения: 94
Зарегистрирован: 05 апр 2017, 20:06
Благодарил (а): 49 раз.
Поблагодарили: 2 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: [ZP] Сделать авто-возрождение.

Сообщение Misha90 » 19 июн 2017, 20:37

UP - ПОЖАЛУЙСТА :((
Аватара пользователя
Misha90
 
Сообщения: 94
Зарегистрирован: 05 апр 2017, 20:06
Благодарил (а): 49 раз.
Поблагодарили: 2 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: [ZP] Сделать авто-возрождение.

Сообщение Subb98 » 19 июн 2017, 22:30

Misha90, напоминаю Вам, что:

Fedcomp писал(а):На нашем форуме запрещено:
15. Подымать свою тему ранее чем через 8 часов с момента последнего поста. Стандартное время ожидания ответа на форуме - 2 дня.

Вы должны зарегистрироваться, чтобы видеть ссылки.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: [ZP] Сделать авто-возрождение.

Сообщение Misha90 » 21 июн 2017, 16:22

Subb98 писал(а):Misha90, напоминаю Вам, что:

Fedcomp писал(а):На нашем форуме запрещено:
15. Подымать свою тему ранее чем через 8 часов с момента последнего поста. Стандартное время ожидания ответа на форуме - 2 дня.

Вы должны зарегистрироваться, чтобы видеть ссылки.


Поможешь?
Аватара пользователя
Misha90
 
Сообщения: 94
Зарегистрирован: 05 апр 2017, 20:06
Благодарил (а): 49 раз.
Поблагодарили: 2 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: [ZP] Сделать авто-возрождение.

Сообщение Subb98 » 21 июн 2017, 17:15

Misha90, Ваши попытки предоставьте, а там посмотрим.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: [ZP] Сделать авто-возрождение.

Сообщение R0mz1k » 21 июн 2017, 18:20

Код для проверки количества спавн после отключения. Вот только не знаю нужно ли проверять на то, что идёт тот же раунд.
После этого :
Код: Выделить всё
public fw_PlayerKilled(victim, attacker, shouldgib)
{
    if(zp_is_nemesis_round() && !get_pcvar_num(pcvar[nemesis]))
        return
        
    if
(zp_is_survivor_round() && !get_pcvar_num(pcvar[survivor]))
        return
    
    if
(zp_is_plague_round() && !get_pcvar_num(pcvar[plague]))
        return

    if
(zp_is_swarm_round() && !get_pcvar_num(pcvar[swarm]))
        return

    set_task
(get_pcvar_float(pcvar[spawndelay]), "respawn_player_task", victim+TASK_SPAWN)
    return


Добавь это:
Код: Выделить всё

public client_disconnect
(id){
    current[id]++
    return


И ещё, у вас в коде не будут происходить возрождения в plague и swarm раундах даже при включении через квар, а то почему не происходят возрождения в обычном и мульти непонятно
Аватара пользователя
R0mz1k
 
Сообщения: 20
Зарегистрирован: 30 июл 2014, 12:55
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: [ZP] Сделать авто-возрождение.  [Решено]

Сообщение Misha90 » 22 июн 2017, 14:46

Subb98 писал(а):Misha90, Ваши попытки предоставьте, а там посмотрим.


Код: Выделить всё
#include <amxmodx>
#include <zombieplague>
#include <hamsandwich>
#include <cstrike>

enum (+= 100)
{
    
TASK_SPAWN
}

new 
bool:g_IsZspawned[33]

new 
z_spawn_modez_spawn_infectionz_spawn_team_infectionz_spawn_swarmz_spawn_team_swarmz_spawn_plaguez_spawn_team_plaguez_spawn_nemesisz_spawn_team_nemesisz_spawn_survivorz_spawn_team_survivor

enum cvar
{
    
spawndelayamountnemesissurvivorplagueswarm
}

new 
pcvar[cvar]
new 
current[33] = 
new boolended false

#define ID_SPAWN (taskid - TASK_SPAWN)

public plugin_init()
{
    
z_spawn_mode register_cvar("zp_spawn_mode""1")
    
z_spawn_infection register_cvar("zp_spawn_infection""1")
    
z_spawn_team_infection register_cvar("zp_spawn_team_infection""0")
    
z_spawn_swarm register_cvar("zp_spawn_swarm""1")
    
z_spawn_team_swarm register_cvar("zp_spawn_team_swarm""0")
    
z_spawn_plague register_cvar("zp_spawn_plague""1")
    
z_spawn_team_plague register_cvar("zp_spawn_team_plague""0")
    
z_spawn_nemesis register_cvar("zp_spawn_nemesis""1")
    
z_spawn_team_nemesis register_cvar("zp_spawn_team_nemesis""0")
    
z_spawn_survivor register_cvar("zp_spawn_survivor""1")
    
z_spawn_team_survivor register_cvar("zp_spawn_team_survivor""0")
    
    
register_event("TeamInfo""event_TeamInfo""a""2 = TERRORIST""2 = CT")
    
    
events()
    
cvars()
}

public 
client_putinserver(id)
{
    
g_IsZspawned[id] = false
}

public 
event_TeamInfo()
{
    static 
id
    id 
read_data(1)
    
    if (!
g_IsZspawned[id])
    {
        
set_task(3.0"ZSpawnMode"id)
        
g_IsZspawned[id] = true
    
}
}

public 
ZSpawnMode(id)
{
    if (
get_pcvar_num(z_spawn_mode))
    
    switch (
get_pcvar_num(z_spawn_mode))
    {
        case 
1:
        {
            
set_task(0.1"ZSpawn"id)
            
            if (!
is_user_alive(id))
            
            
set_task(0.5"FuncTeleport"id)
        }
    }
}

public 
ZSpawn(id
{
    if (
zp_is_nemesis_round() && get_pcvar_num(z_spawn_nemesis)) 
    {
        switch (
get_pcvar_num(z_spawn_team_nemesis)) 
        {
            case 
0:
            {
                
zp_respawn_user(idZP_TEAM_ZOMBIE)
            }
            case 
1:
            {
                
zp_respawn_user(idZP_TEAM_HUMAN)
            }
        }
    } 
    else if (
zp_is_survivor_round() && get_pcvar_num(z_spawn_survivor)) 
    {
        switch (
get_pcvar_num(z_spawn_team_survivor)) 
        {
            case 
0:
            {
                
zp_respawn_user(idZP_TEAM_ZOMBIE)
            }
            case 
1:
            {
                
zp_respawn_user(idZP_TEAM_HUMAN)
            }
        }
    } 
    else if (
zp_is_swarm_round() && get_pcvar_num(z_spawn_swarm)) 
    {
        switch (
get_pcvar_num(z_spawn_team_swarm)) 
        {
            case 
0:
            {
                
zp_respawn_user(idZP_TEAM_ZOMBIE)
            }
            case 
1:
            {
                
zp_respawn_user(idZP_TEAM_HUMAN)
            }
        }
    } 
    else if (
zp_is_plague_round() && get_pcvar_num(z_spawn_plague)) 
    {
        switch (
get_pcvar_num(z_spawn_team_plague))
        {
            case 
0:
            {
                
zp_respawn_user(idZP_TEAM_ZOMBIE)
            }
            case 
1:
            {
                
zp_respawn_user(idZP_TEAM_HUMAN)
            }
        }
    } 
    else if (
zp_has_round_started() && get_pcvar_num(z_spawn_infection) && zp_is_nemesis_round() == && zp_is_survivor_round() == && zp_is_swarm_round() == && zp_is_plague_round() == 0
    {
        switch (
get_pcvar_num(z_spawn_team_infection)) 
        {
            case 
0:
            {
                
zp_respawn_user(idZP_TEAM_ZOMBIE)
            }
            case 
1:
            {
                
zp_respawn_user(idZP_TEAM_HUMAN)
            }
        }
    }
}

public 
events()
{
    
RegisterHam(Ham_Spawn"player""fw_PlayerSpawn_Post"1)
    
RegisterHam(Ham_Killed"player""fw_PlayerKilled")
}

public 
cvars()
{
    
pcvar[spawndelay] = register_cvar("zp_spawn_delay""1.5")
    
pcvar[amount] = register_cvar("zp_spawn_amount""5")
    
    
pcvar[nemesis] = register_cvar("zp_respawn_in_nemesis""0")
    
pcvar[survivor] = register_cvar("zp_respawn_in_survivor""0")
    
pcvar[plague] = register_cvar("zp_respawn_in_plague""0")
    
pcvar[swarm] = register_cvar("zp_respawn_in_swarm""0")
}

public 
fw_PlayerSpawn_Post(id)
{
    if(!
is_user_alive(id))
        return
        
    
remove_task(id+TASK_SPAWN)
    return
}

public 
fw_PlayerKilled(victimattackershouldgib)
{
    if(
zp_is_nemesis_round() && !get_pcvar_num(pcvar[nemesis]))
        return
        
    if(
zp_is_survivor_round() && !get_pcvar_num(pcvar[survivor]))
        return
    
    if(
zp_is_plague_round() && !get_pcvar_num(pcvar[plague]))
        return

    if(
zp_is_swarm_round() && !get_pcvar_num(pcvar[swarm]))
        return
    
    
set_task(get_pcvar_float(pcvar[spawndelay]), "respawn_player_task"victim+TASK_SPAWN)
    return
}

public 
client_disconnect(id)
{
    
current[id]++
    return
}

public 
respawn_player_task(taskid)
{
    if(!
is_user_connected(ID_SPAWN))
    {
        
remove_task(ID_SPAWN+TASK_SPAWN)
        return
    }

    if(
current[ID_SPAWN] >= get_pcvar_num(pcvar[amount]))
    {
        
remove_task(ID_SPAWN+TASK_SPAWN)
        return
    }
        
    if(
ended)
    {
        
remove_task(ID_SPAWN+TASK_SPAWN)
        return
    }

    
    if(
cs_get_user_team(ID_SPAWN) != CS_TEAM_SPECTATOR && cs_get_user_team(ID_SPAWN) != CS_TEAM_UNASSIGNED)
    {
        if(
zp_is_nemesis_round())
        {
            
zp_respawn_user(ID_SPAWNZP_TEAM_HUMAN)
            
current[ID_SPAWN]++
            return
        }
        else if(
zp_is_plague_round())
        {
            return
        }
        else if(
zp_is_swarm_round())
        {
            return
        }
        
        
zp_respawn_user(ID_SPAWNZP_TEAM_ZOMBIE)
        
current[ID_SPAWN]++
    }
    return
}

public 
zp_round_ended(winter)
{
    
ended true
}

public 
zp_round_started()
{
    
ended false

    
new MaxPlayers get_maxplayers()
    
    for (new 
player 1player <= MaxPlayersplayer++)   
    {
        
current[player] = 0
    
}
Аватара пользователя
Misha90
 
Сообщения: 94
Зарегистрирован: 05 апр 2017, 20:06
Благодарил (а): 49 раз.
Поблагодарили: 2 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16