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

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

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

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

[Ищу] Помогите запилить нормальный автореспавн при коннекте

trollface
сообщение 29.5.2014, 17:15
Сообщение #1
Стаж: 12 лет

Сообщений: 1970
Благодарностей: 2423
Полезность: 0

Всем привет.
В общем суть такая, невсегда люди спавнятся... то есть игрок заходит и все.
Но в 90% случаев все ок. Но такой расклад не очень sad.gif
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

public plugin_init()
{
register_plugin("AutoRespawn", "1.0", "kto_to")
register_clcmd("joinclass", "AutoRespawn")
}

public AutoRespawn(id)
{
set_task(3.0, "ReSpawn", id)
}

public ReSpawn(id)
{
if(is_user_alive(id))
{
return
}
switch(get_pdata_int(id, 114))
{
case 1, 2:
{
ExecuteHamB(Ham_CS_RoundRespawn, id)
}
}
}


Отредактировал: trollface, - 29.5.2014, 17:26
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
trollface
сообщение 29.5.2014, 19:45
Сообщение #2
Стаж: 12 лет

Сообщений: 1970
Благодарностей: 2423
Полезность: 0

забыл сказать, условий, при которых не спавнятся люди я не знаю.
только по чату знаю что некоторым не удается "появиться"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 29.5.2014, 19:53
Сообщение #3


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

попробуй
developer

Код:

/* last update 1/15/14 */

#include <amxmodx>
#include <hamsandwich>
#include <cstrike>

#define RESPAWNDELAY 3 // delay before respawn

// ===========

new giDelay
new Float:gflDelay
new gMsgBarTime

new giMaxPlayers
new bool:giBlockRespawn // whether respawn process should be blocked for now

new giInDelay // whether respawn process was started
#define CheckInDelay(%1) ( giInDelay & ( 1 <<( %1-1 ) ) )
#define SetInDelay(%1) ( giInDelay |= ( 1 <<( %1-1 ) ) )
#define ClearInDelay(%1) ( giInDelay &= ~( 1 <<( %1-1 ) ) )

public plugin_init() {
register_plugin( "Respawn", "0.3", "fl0wer / Safety1st / mod Leg-join-spawn" )
register_dictionary( "respawn.txt" )
gMsgBarTime = get_user_msgid( "BarTime" )
giDelay = RESPAWNDELAY
gflDelay = float( RESPAWNDELAY )
giMaxPlayers = get_maxplayers()

register_logevent("logevent_team_join", 3, "1=joined team")

register_event( "HLTV", "NewRound", "a", "1=0", "2=0" )
register_event( "TextMsg", "CancelRespawn", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
register_logevent( "CancelRespawn", 2, "1=Round_End" )

RegisterHam( Ham_Killed, "player", "FwdKilled" )
}

public FwdKilled(id) {
if( giBlockRespawn )
return

client_print( id, print_center, "%L", id, "RESPAWN_MSG", giDelay )

message_begin( MSG_ONE_UNRELIABLE, gMsgBarTime, _, id )
write_short( giDelay )
message_end()

set_task( gflDelay, "Respawn", id )
SetInDelay(id)
}

public Respawn(id) {
switch( cs_get_user_team(id) ) {
case CS_TEAM_T, CS_TEAM_CT : {
ExecuteHamB( Ham_CS_RoundRespawn, id )
ClearInDelay(id)
}
}
}

public client_disconnect(id) {
if( CheckInDelay(id) ) {
remove_task(id)
ClearInDelay(id)
}
}

public CancelRespawn() {
giBlockRespawn = true

if( !giInDelay ) // no one is scheduled to be respawned
return

for( new i = 0; i < giMaxPlayers; i++ ) {
if( CheckInDelay(i) )
remove_task(i)
}

giInDelay = 0 // completely reset the value
}

public NewRound() {
giBlockRespawn = false
}

public logevent_team_join()
{
new id = get_loguser_index()
set_task(1.0, "Respawn",id)

}

stock get_loguser_index()
{
static loguser[80], name[32];
read_logargv(0,loguser,79);
parse_loguser(loguser,name,31);

return get_user_index(name);
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 29.5.2014, 19:57
Сообщение #4
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Legenda, не-не, это очень плохой алгоритм. Подробно описал тут.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
trollface
сообщение 29.5.2014, 20:01
Сообщение #5
Стаж: 12 лет

Сообщений: 1970
Благодарностей: 2423
Полезность: 0

Legenda,
где то уже видел такое...
честно, не рискнул проверить только потому что смутило, что ловят смену команды а не выбор класса.
то есть игрок может выбрать команду и не успеть выбрать класс. в итоге игрок никогда не войдет в игру.
тут надо что то другое...

ps.gif Пробовал через эвент TeamInfo все ок. Только как сказал один человек с данного форума, эвент этот явно не для таких целей.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 29.5.2014, 20:03
Сообщение #6


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

можно же класс выбирать за игрока....
в принципе многих устраивает такой вариант
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 29.5.2014, 20:09
Сообщение #7
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Вы оба не заметили хороший способ по линку? )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя csnet
сообщение 29.5.2014, 20:14
Сообщение #8
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

Ham_Spawn работает сам по себе когда игрок зашел ( dead )


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
trollface
сообщение 29.5.2014, 20:18
Сообщение #9
Стаж: 12 лет

Сообщений: 1970
Благодарностей: 2423
Полезность: 0

Developer,
я видел.
уже пошел тестить =)
просто ответил легенде;)

csnet,
верно, но один раз и то в тот момент, когда игрок еще физически не может появиться.

UPD:
зашел по середине карты и не зареспился, лол.
Способ из плагина сафетиста ;)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 29.5.2014, 20:26
Сообщение #10
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

trollface, значит, не судьба ;)
Ибо по опыту знаю, что разбираться - почему у тебя не сработало - ты не будешь.
--

Цитата(csnet @ 29.5.2014, 22:14) *
Ham_Spawn работает сам по себе когда игрок зашел ( dead )

Цитата(trollface @ 29.5.2014, 22:18) *
верно, но один раз и то в тот момент, когда игрок еще физически не может появиться.

Тут неверно. 1 раз - до client_putinserver, когда игрок ещё не connected. А если после выбора класса игра заспавнит - вызовётся ещё раз.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: