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

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

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

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

Отлов first spawn игрока, имя игры в списках серверов

Статус пользователя svh0st
сообщение 28.11.2012, 17:00
Сообщение #1


Стаж: 16 лет

Сообщений: 275
Благодарностей: 21
Полезность: 81

Здравствуйте, хотел узнать как отловить первое возрождения игрока и установить название игры в списках серверов.

Вот что вышло.
Посмотрите и скажите какие тут ошибки, потому что пишу первый раз, а да и ещё, скажите, вот мне подсказали написать такое "firstspawn[id-1]". Вопрос почему стоит "-1" и в квадратных скобка? Тесть должно быть так, если человек зашел на сервер, ему пишет сообщения и только ему одному. Да и что будет если firstspawn[id] сделать?
А код "// Отображения имя мода в списках серверов" я выдернул из zombie_plague 4.3 Fix5a.
Скрытый текст
Код
 
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <colorchat>
 
new const PLUGIN_NAME[] = "First my plugin"
new const PLUGIN_VERSION[] = "0.1"
new const PLUGIN_AUTHOR[] = "endymaine"
 
// Game vars
new g_modname[32]
new bool:firstspawn[32]
 
public plugin_precache()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
}
 
public plugin_init()
{
        // FM Форварды
        register_forward(FM_GetGameDescription, "fw_GetGameDescription")
       
        // Формат имя мода
        formatex(g_modname, charsmax(g_modname), "Mod name %s", PLUGIN_VERSION)
}
 
// Отображения имя мода в списках серверов
public fw_GetGameDescription()
{
        // Возвращаем имя мода, чтобы он мог быть легко идентифицирован
        forward_return(FMV_STRING, g_modname)
       
        return FMRES_SUPERCEDE
}
 
public client_putinserver(id)
{
        // Первое возрождения вкл.
        firstspawn[id-1] = true
}
 
public respawn_player(id)
{
        // Когда первое возрождения вкл.
        if(firstspawn[id-1])
        {
                set_task(5.0, "wellcome_msg", id)
        }
        // Первое возрождения выкл.
        firstspawn[id-1] = false
}
 
// Приветствие для игроков
public wellcome_msg(id)
{
        ColorChat(id, GREY, "^3Добро пожаловать на ^4%s %s ^3by ^4%s", PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
        ColorChat(id, GREY, "^3Если Вы новенький и не знаете как играть напиши в чат ^4/help")
}
 


Отредактировал: svh0st, - 28.11.2012, 17:01
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя svh0st
сообщение 28.11.2012, 17:54
Сообщение #2


Стаж: 16 лет

Сообщений: 275
Благодарностей: 21
Полезность: 81

UP
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
cs-portal
сообщение 28.11.2012, 18:06
Сообщение #3
Стаж: 16 лет

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

все просто

1. регистрируем Ham spawn
2. делаем глобальную new spawncount[33]
3.в ham spawn делаем spawncount[id]++
делаем далее что хотим с номерами спаунов

например
if(spawncount[id] == 1) {

do ....
}

НО судя по твоему коду.... достаточно сделать

public client_putinserver(id)
set_task(5.0,"welcome_msg",id)

public welcome_msg(id) {
ColorChat(id, GREY, "^3Добро пожаловать на ^4%s %s ^3by ^4%s", PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
ColorChat(id, GREY, "^3Если Вы новенький и не знаете как играть напиши в чат ^4/help")

}

считать спауны не надо так как путинсервер и есть 1й заход игрока. для большей точности надо хукать jointeam / joinclass
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 28.11.2012, 19:11
Сообщение #4


Стаж: 16 лет

Сообщений: 275
Благодарностей: 21
Полезность: 81

Хорошо, скажи вот если я напишу вот так firstspawn[id] что измениться? И почему не надо считать, если я хочу сделать когда игрок возродился и первый раз.
И есть у кого то уроки про ID и.т.д, а то я чуть запутался в них
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
cs-portal
сообщение 28.11.2012, 20:05
Сообщение #5
Стаж: 16 лет

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

еще раз повторю putinserver(id) тут ставишь таск и все будет ок. не надо морочатся с подсчетом спаунов
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 28.11.2012, 22:34
Сообщение #6


Стаж: 16 лет

Сообщений: 275
Благодарностей: 21
Полезность: 81

ТЫ просто объясни и усе что я спросил почему -1 и в квадратных скобках
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Hellrock
сообщение 29.11.2012, 7:47
Сообщение #7


Стаж: 15 лет

Сообщений: 49
Благодарностей: 14
Полезность: 220

Цитата(svh0st @ 28.11.2012, 22:34) *
ТЫ просто объясни и усе что я спросил почему -1 и в квадратных скобках

По поводу -1 всё просто.
new bool:firstspawn[32] - массив у нас равен 32, и как мы знаем, любой массив начинается с 0, а не 1. Но на сервере нет игроков с индексом 0! Если например id игрока равен 1, то когда мы заносим данные в массив делаем firstspawn[id - 1]. Можно сделать без использования -1, просто создать массив на 33 ячейки, тогда ячейка под номером 0, не будет использоватся!

Отредактировал: Hellrock, - 29.11.2012, 7:47
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 29.11.2012, 10:49
Сообщение #8


Стаж: 16 лет

Сообщений: 275
Благодарностей: 21
Полезность: 81

И написать firstspawn[id] ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
cs-portal
сообщение 29.11.2012, 10:59
Сообщение #9
Стаж: 16 лет

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

квадратные скобки для массивов !!!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя STR@TEG
сообщение 29.11.2012, 11:35
Сообщение #10
Стаж: 16 лет

Сообщений: 4186
Благодарностей: 1763
Полезность: 837

Цитата(Hellrock @ 29.11.2012, 9:47) *
По поводу -1 всё просто.
new bool:firstspawn[32] - массив у нас равен 32, и как мы знаем, любой массив начинается с 0, а не 1. Но на сервере нет игроков с индексом 0! Если например id игрока равен 1, то когда мы заносим данные в массив делаем firstspawn[id - 1]. Можно сделать без использования -1, просто создать массив на 33 ячейки, тогда ячейка под номером 0, не будет использоватся!
Индексация массива всегда начинается с нуля, что за бред выше? Объявишь массив размерностью 33, он и будет содержать в себе 33 ячейки, начиная с нуля.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Hellrock
сообщение 29.11.2012, 17:32
Сообщение #11


Стаж: 15 лет

Сообщений: 49
Благодарностей: 14
Полезность: 220

Цитата(STR@TEG @ 29.11.2012, 11:35) *
Индексация массива всегда начинается с нуля, что за бред выше? Объявишь массив размерностью 33, он и будет содержать в себе 33 ячейки, начиная с нуля.

да, он будет содержать 33 ячейки, 33-я ячейка всегда означает конец массива. Т.е. используются ячейки от 1 до 32, ячейка 0 будет пустая (т.к. нет такого id игрока), а ячейка 33 будет означать конец массива (^0).
id игроков начинатся от 1 до 32, т.е. будут использоватся ячейки от 1 до 32. Если массив будет на 32, и не использовать -1, то игрок с id 32 не будет влазить (будет ошибка переполнения массива). Всё мною описанное, касается именно id игроков и массивов. Т.к. данные с массива мы получаем по id игрока, т.е. id игрока соответсвует номеру ячейки!
А вообще надо просто включить мозг, и подумать самому!
P.S. - если вы что-то не допонимаете - это бред только в ваших глазах.

Отредактировал: Hellrock, - 29.11.2012, 17:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 29.11.2012, 22:44
Сообщение #12


Стаж: 16 лет

Сообщений: 275
Благодарностей: 21
Полезность: 81

Хорошо, тогда нужно сделать так?
плагинчеГГ

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <colorchat>

new const PLUGIN_NAME[] = "First my plugin"
new const PLUGIN_VERSION[] = "0.1"
new const PLUGIN_AUTHOR[] = "endymaine"

// Game vars
new g_modname[32]
new bool:firstspawn[33]

public plugin_precache()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
}

public plugin_init()
{
// FM Форварды
register_forward(FM_GetGameDescription, "fw_GetGameDescription")

// Формат имя мода
formatex(g_modname, charsmax(g_modname), "Mod name %s", PLUGIN_VERSION)
}

// Отображения имя мода в списках серверов
public fw_GetGameDescription()
{
// Возвращаем имя мода, чтобы он мог быть легко идентифицирован
forward_return(FMV_STRING, g_modname)

return FMRES_SUPERCEDE
}

public client_putinserver(id)
{
// Первое возрождения вкл.
firstspawn[id] = true
}

public respawn_player(id)
{
// Когда первое возрождения вкл.
if(firstspawn[id])
{
set_task(5.0, "wellcome_msg", id)
}
// Первое возрождения выкл.
firstspawn[id] = false
}

// Приветствие для игроков
public wellcome_msg(id)
{
ColorChat(id, GREY, "^3Добро пожаловать на ^4%s %s ^3by ^4%s", PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
ColorChat(id, GREY, "^3Если Вы новенький и не знаете как играть напиши в чат ^4/help")
}


А да и ещё new "g_modname[32]" зачем тут 32? Если это показывает в списках серверов, а не на самом сервере, или я что то путаю?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя svh0st
сообщение 30.11.2012, 7:03
Сообщение #13


Стаж: 16 лет

Сообщений: 275
Благодарностей: 21
Полезность: 81

Так или нет?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
cs-portal
сообщение 30.11.2012, 8:08
Сообщение #14
Стаж: 16 лет

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

о я е*
не поним аю зачем ему все ето жевать. task в putinserver вот его уровень . и хватит .
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 30.11.2012, 8:15
Сообщение #15


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

че-то типо такого)
Код
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN                    "New Plugin"
#define VERSION                    "0.1"
#define AUTHOR                    "Author"

new bool:firstspawn[ 33 ]

public plugin_init()
{
    register_plugin( PLUGIN, VERSION, AUTHOR )
    
    register_forward( FM_GetGameDescription,    "fwd_GetGameDescription" )
    RegisterHam( Ham_Spawn, "player",             "fwd_Ham_Spawn", 1 )
}

public fwd_GetGameDescription()
{     
    new gamedesc[ 32 ]
    format( gamedesc, 31, "Mod name: %s", VERSION )
    forward_return( FMV_STRING, gamedesc )
    
    return FMRES_SUPERCEDE
}

public client_connect( id )
{
    firstspawn[ id ] = false
}

public fwd_Ham_Spawn( id )
{
    if( is_user_connected( id ) )
    {
        if( !firstspawn[ id ] )
        {
            set_task( 5.0, "welcome_msg", id )
            firstspawn[ id ] = true
        }
    }
}

public welcome_msg( id )
{
    ColorChat( id, GREY, "^3Добро пожаловать на ^4%s %s ^3by ^4%s", PLUGIN, VERSION, AUTHOR )
    ColorChat( id, GREY, "^3Если Вы новенький и не знаете как играть напиши в чат ^4/help" )
}


Цитата
А да и ещё new "g_modname[32]" зачем тут 32? Если это показывает в списках серверов, а не на самом сервере, или я что то путаю?

Это размер массива, можно сделать и 64 и 231534, но столько символов просто не поместится в гейм дескрипшон, и не нужно вовсе.

Отредактировал: AndrewZ, - 30.11.2012, 8:16


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 30.11.2012, 8:21
Сообщение #16


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Hellrock,
А вы проверяли? massiv[33] ячейка обозначает не конец массива, а index out of bounds. Ячейки massiv[33] нету. Тридцать третяя ячейка имеет индекс 32 и там не обязательно ^0
Код
public plugin_init()
{
new massiv[32]
log_amx("ya4eika 33 ne sushestvuet %d",massiv[33]) //тут плагин не станет компилироваться
}

^0 обозначает конец строки, а не конец массива. Поэтому вы в массив 32 можете записать только 31 символ (с нулевого по 30), а в 32 будет 0
massiv="test"
massiv[2]=^0
получится
massiv[0] -> t
massiv[1] -> e
massiv[2] -> ^0 == 0
massiv[3] -> s
massiv[4] -> t

и при выводе %s, massiv выведет te


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Hellrock
сообщение 30.11.2012, 14:46
Сообщение #17


Стаж: 15 лет

Сообщений: 49
Благодарностей: 14
Полезность: 220

Цитата(mazdan @ 30.11.2012, 8:21) *
Hellrock,
А вы проверяли? massiv[33] ячейка обозначает не конец массива, а index out of bounds. Ячейки massiv[33] нету. Тридцать третяя ячейка имеет индекс 32 и там не обязательно ^0
Код
public plugin_init()
{
new massiv[32]
log_amx("ya4eika 33 ne sushestvuet %d",massiv[33]) //тут плагин не станет компилироваться
}

^0 обозначает конец строки, а не конец массива. Поэтому вы в массив 32 можете записать только 31 символ (с нулевого по 30), а в 32 будет 0
massiv="test"
massiv[2]=^0
получится
massiv[0] -> t
massiv[1] -> e
massiv[2] -> ^0 == 0
massiv[3] -> s
massiv[4] -> t

и при выводе %s, massiv выведет te

Ну я не малость не так обьяснил, но суть то та, по поводу индекса игроков.
P.S. - Просто писал в весьма не трезвом состоянии. crazy.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя STR@TEG
сообщение 4.12.2012, 20:45
Сообщение #18
Стаж: 16 лет

Сообщений: 4186
Благодарностей: 1763
Полезность: 837

Цитата(Hellrock @ 29.11.2012, 19:32) *
Всё мною описанное, касается именно id игроков и массивов.
Еще раз прочитал и понял.

Цитата(Hellrock @ 29.11.2012, 19:32) *
А вообще надо просто включить мозг, и подумать самому!
ОК, попробую на досуге.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 2 гостей читают эту тему: