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

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

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

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

Проблема вывода HUD

OverGame
сообщение 1.11.2014, 12:37
Сообщение #1
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Почему худ мешает между собой все данные игроков? И по очереди вывод их.
К примеру зашло 4 человека и с каждой обновой показывает данные другого игрока...

Код:
#include < amxmodx >
#include < amxmisc >
#include < fun >
#include < cstrike >
#include < war3ft_mod >

#define PLUGIN "War3FT Ability"
#define VERSION "1.0"
#define AUTHOR "OverGame"

#pragma tabsize 0

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("ResetHUD","ResetHUD","abe")

set_task(1.0,"Info",_,_,_, "b")

g_MsgHud = CreateHudSyncObj()
MaxPlayers = get_maxplayers()

register_dictionary("war3_lang.txt")
}

public Info()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(!is_user_bot(id) && is_user_connected(id))
{
set_hudmessage(255,255,255, 0.01, 0.20, 0, 15.0, 1.0, _, _, -1)

static buffer[255], g_race_name[255], g_war3_ult[255], g_war3_ult2[255], g_race_name2[255], g_MsgHud, MaxPlayers
formatex(g_war3_ult[id], charsmax(g_war3_ult), "ULT%d", get_war3_ult(id))
formatex(g_war3_ult2[id], charsmax(g_war3_ult2), "%L", LANG_PLAYER, g_war3_ult[id])
formatex(g_race_name[id], charsmax(g_race_name), "U_RACE%d", get_war3_race(id))
formatex(g_race_name2[id], charsmax(g_race_name2), "%L", LANG_PLAYER, g_race_name[id])
formatex(buffer, charsmax(buffer), "%L %s^n%L %d^n%L %d^n%L %s", LANG_PLAYER, "HUD_MSG1", g_race_name2[id], LANG_PLAYER, "HUD_MSG2", get_war3_lvl(id), LANG_PLAYER, "HUD_MSG4", get_war3_exp(id), LANG_PLAYER, "HUD_MSG3", g_war3_ult2[id])
ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
}
}

return PLUGIN_CONTINUE
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Legenda
сообщение 1.11.2014, 14:23
Сообщение #2


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

Стаж: 16 лет

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

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

ты сам-то хоть понял что написал?

set_task(1.0,"Info",_,_,_, "b")
неограниченное кол-во раз, каждую секунду вызываешь функцию Info


public Info()
for(new id = 0; id <= MaxPlayers; id++)
...
...

берешь каждого игрока по очереди
и показываешь ему сообщение

и все это делается по бесконечное кол-во раз

т.е. за одну секунду ты показываешь статистику всех игроков на сервере
при этом данная штуку работает постоянно

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
OverGame
сообщение 2.11.2014, 8:49
Сообщение #3
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Цитата(Legenda @ 1.11.2014, 14:23) *
ты сам-то хоть понял что написал?

set_task(1.0,"Info",_,_,_, "b")
неограниченное кол-во раз, каждую секунду вызываешь функцию Info


public Info()
for(new id = 0; id <= MaxPlayers; id++)
...
...

берешь каждого игрока по очереди
и показываешь ему сообщение

и все это делается по бесконечное кол-во раз

т.е. за одну секунду ты показываешь статистику всех игроков на сервере
при этом данная штуку работает постоянно


Значит получается так?
Код:
#include < amxmodx >
#include < amxmisc >
#include < fun >
#include < cstrike >
#include < war3ft_mod >

#define PLUGIN "War3FT Ability"
#define VERSION "1.0"
#define AUTHOR "OverGame"

#pragma tabsize 0

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("ResetHUD","ResetHUD","abe")


register_dictionary("war3_lang.txt")
}

public client_putinserver(id)
{

set_task(1.0, "Info", id, _, _, "b")

}

public Info(id)
{
if(!is_user_bot(id) && is_user_connected(id))
{
set_hudmessage(255,255,255, 0.01, 0.20, 0, 15.0, 1.0, _, _, -1)

static buffer[255], g_race_name[255], g_war3_ult[255], g_war3_ult2[255], g_race_name2[255], g_MsgHud
formatex(g_war3_ult[id], charsmax(g_war3_ult), "ULT%d", get_war3_ult(id))
formatex(g_war3_ult2[id], charsmax(g_war3_ult2), "%L", LANG_PLAYER, g_war3_ult[id])
formatex(g_race_name[id], charsmax(g_race_name), "U_RACE%d", get_war3_race(id))
formatex(g_race_name2[id], charsmax(g_race_name2), "%L", LANG_PLAYER, g_race_name[id])
formatex(buffer, charsmax(buffer), "%L %s^n%L %d^n%L %d^n%L %s", LANG_PLAYER, "HUD_MSG1", g_race_name2[id], LANG_PLAYER, "HUD_MSG2", get_war3_lvl(id), LANG_PLAYER, "HUD_MSG4", get_war3_exp(id), LANG_PLAYER, "HUD_MSG3", g_war3_ult2[id])
ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
}

return PLUGIN_CONTINUE
}


или я чего-то не догнал?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 2.11.2014, 9:06
Сообщение #4


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

Стаж: 16 лет

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

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

1) да, в данному случаи ты показываешь игроку его же статистику
остальные игроки не видят ее

2) тут явно что-то лишчние
убирай

Код
#include < amxmodx >
#include < amxmisc >
#include < fun >
#include < cstrike >
#include < war3ft_mod >


3)
Код
set_task(1.0, "Info", id, _, _, "b")

id это id задачи, которые совпадает с id игрока
с точки зрения алгоритма -> так не правильно делать, да и вообще так делать нельзя
но многие забивают болт т.к. работает
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 2.11.2014, 9:09
Сообщение #5
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Цитата(Legenda @ 2.11.2014, 9:06) *
1) да, в данному случаи ты показываешь игроку его же статистику
остальные игроки не видят ее

2) тут явно что-то лишчние
убирай

Код
#include < amxmodx >
#include < amxmisc >
#include < fun >
#include < cstrike >
#include < war3ft_mod >


3) set_task(1.0, "Info", id, _, _, "b")
id это id задачи, которые совпадает с id игрока
с точки зрения алгоритма -> так не правильно делать, да и вообще так делать нельзя
но многие забивают болт т.к. работает



по поводу лишнего, я бы не сказал. Ведь не все доделано...
Но если тебе будет спокойней, я просто сделаю так ^^" :
Код:
#include < amxmodx >
//#include < amxmisc >
//#include < fun >
//#include < cstrike >
#include < war3ft_mod >


3)
set_task(1.0, "task_hudmsg", _, _, _, "b")

Отредактировал: OverGame, - 2.11.2014, 9:14
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 2.11.2014, 9:17
Сообщение #6


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

Стаж: 16 лет

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

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

Цитата
3)
set_task(1.0, "task_hudmsg", _, _, _, "b")


оставь как было лучше.......
потом уж точно научишься передавать данные в set_task правильно...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 2.11.2014, 9:20
Сообщение #7
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Цитата(Legenda @ 2.11.2014, 9:17) *
оставь как было лучше.......
потом уж точно научишься передавать данные в set_task правильно...

мм... прочитал что дает id и лучше оставлю его....
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 2.11.2014, 9:36
Сообщение #8
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Очень не понятно... Почему все равно смешиваются данные?



Код:
#include < amxmodx >
//#include < amxmisc >
//#include < fun >
//#include < cstrike >
#include < war3ft_mod >
#include < hamsandwich >

#define PLUGIN "War3FT Ability"
#define VERSION "1.0"
#define AUTHOR "OverGame"

#pragma tabsize 0

new g_MsgHud
new g_race_name[255], g_war3_ult[255], g_war3_ult2[255], g_race_name2[255]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
g_MsgHud = CreateHudSyncObj()


register_dictionary("war3_lang.txt")
}

public client_putinserver(id)
{
set_task(1.0, "task_hudmsg", id, _, _, "b")
}

public fwHamPlayerSpawnPost(id)
{
formatex(g_race_name[id], charsmax(g_race_name), "U_RACE%d", get_war3_race(id))
formatex(g_race_name2[id], charsmax(g_race_name2), "%L", LANG_PLAYER, g_race_name[id])
}

public task_hudmsg(id)
{
set_hudmessage(255,255,255, 0.01, 0.20, 0, 15.0, 1.0, _, _, -1)

static buffer[255]

formatex(g_war3_ult[id], charsmax(g_war3_ult), "ULT%d", get_war3_ult(id))
formatex(g_war3_ult2[id], charsmax(g_war3_ult2), "%L", LANG_PLAYER, g_war3_ult[id])

formatex(buffer, charsmax(buffer), "%L %s^n%L %d^n%L %d^n%L %s", LANG_PLAYER, "HUD_MSG1", g_race_name2[id], LANG_PLAYER, "HUD_MSG2", get_war3_lvl(id), LANG_PLAYER, "HUD_MSG4", get_war3_exp(id), LANG_PLAYER, "HUD_MSG3", g_war3_ult2[id])
ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
}


Отредактировал: OverGame, - 2.11.2014, 9:38
Прикрепленные файлы:
Прикрепленное изображение
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 2.11.2014, 9:39
Сообщение #9


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

Стаж: 16 лет

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

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

set_task(1.0, "task_hudmsg", id, _, _, "b")

потому что флаг b стоит
b означает что задачу выполняется бесконечное кол-во раз
подключился игрок - ты создаешь задачу показа статистики id игрока каждую секунду
пришел еще один игрок - ты еще раз создаешь задачу показа статистики id игрока каждую секунду
подключился 32 игрок - и еще одна задача

итого работает 32 задачи, каждый из которых показывает статистику каждую секунду...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 2.11.2014, 9:42
Сообщение #10
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Цитата(Legenda @ 2.11.2014, 9:39) *
set_task(1.0, "task_hudmsg", id, _, _, "b")

потому что флаг b стоит
b означает что задачу выполняется бесконечное кол-во раз
подключился игрок - ты создаешь задачу показа статистики id игрока каждую секунду
пришел еще один игрок - ты еще раз создаешь задачу показа статистики id игрока каждую секунду
подключился 32 игрок - и еще одна задача

итого работает 32 задачи, каждый из которых показывает статистику каждую секунду...


Значит разумней будет поставить флаг a?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 2.11.2014, 9:43
Сообщение #11


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

Стаж: 16 лет

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

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

это зависит от того, что ты хочешь...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 2.11.2014, 9:45
Сообщение #12
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Цитата(Legenda @ 2.11.2014, 9:43) *
это зависит от того, что ты хочешь...

Ну вообще, что бы данные не смешивались и обновлялись данные игрока.

Хотя... мб из-за того что я получаю данные прямо в task? И стоит вызывать их в другом месте?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 2.11.2014, 9:51
Сообщение #13


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

Стаж: 16 лет

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

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

Цитата(OverGame @ 2.11.2014, 11:45) *
Ну вообще, что бы данные не смешивались и обновлялись данные игрока.

Хотя... мб из-за того что я получаю данные прямо в task? И стоит вызывать их в другом месте?

как данные хранятся?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 2.11.2014, 9:53
Сообщение #14
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Цитата(Legenda @ 2.11.2014, 9:51) *
как данные хранятся?


get_war3_ult(id)

Код:
formatex(g_war3_ult[id], charsmax(g_war3_ult), "ULT%d", get_war3_ult(id))
formatex(g_war3_ult2[id], charsmax(g_war3_ult2), "%L", LANG_PLAYER, g_war3_ult[id])
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 2.11.2014, 9:58
Сообщение #15


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

Стаж: 16 лет

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

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

имею в виду в mysql/sqlite/текстовый файл/nvault/
если ты каждую секунду будешь базу дергать функционалом amx - ни чего хорошего не выйдет
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 2.11.2014, 10:01
Сообщение #16
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Цитата(Legenda @ 2.11.2014, 9:58) *
имею в виду в mysql/sqlite/текстовый файл/nvault/
если ты каждую секунду будешь базу дергать функционалом amx - ни чего хорошего не выйдет

По поводу базы другая идея, визуально показывать статистику в HUD и потом со смерьте ее только заносить в базу.

Я блин все еще догнать не могу....
Почему он выводит чужие данные?
Может потому что активирую в putinserver?

Код:
#include < amxmodx >
//#include < amxmisc >
//#include < fun >
//#include < cstrike >
#include < war3ft_mod >
#include < hamsandwich >

#define PLUGIN "War3FT Ability"
#define VERSION "1.0"
#define AUTHOR "OverGame"

#pragma tabsize 0

new g_MsgHud
new g_race_name[255], g_war3_ult[255], g_war3_ult2[255], g_race_name2[255]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
g_MsgHud = CreateHudSyncObj()


register_dictionary("war3_lang.txt")
}

public client_putinserver(id)
{
set_task(1.0, "task_hudmsg", id, _, _, "a", -1)
}

public fwHamPlayerSpawnPost(id)
{
formatex(g_race_name[id], charsmax(g_race_name), "U_RACE%d", get_war3_race(id))
formatex(g_race_name2[id], charsmax(g_race_name2), "%L", LANG_PLAYER, g_race_name[id])
}

public task_hudmsg(id)
{
set_hudmessage(255,255,255, 0.01, 0.20, 0, 15.0, 1.0, _, _, -1)

static buffer[255]

formatex(g_war3_ult[id], charsmax(g_war3_ult), "ULT%d", get_war3_ult(id))
formatex(g_war3_ult2[id], charsmax(g_war3_ult2), "%L", LANG_PLAYER, g_war3_ult[id])

formatex(buffer, charsmax(buffer), "%L %s^n%L %d^n%L %d^n%L %s", LANG_PLAYER, "HUD_MSG1", g_race_name2[id], LANG_PLAYER, "HUD_MSG2", get_war3_lvl(id), LANG_PLAYER, "HUD_MSG4", get_war3_exp(id), LANG_PLAYER, "HUD_MSG3", g_war3_ult2[id])
ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
}


Отредактировал: OverGame, - 2.11.2014, 10:06
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 2.11.2014, 10:16
Сообщение #17


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

Стаж: 16 лет

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

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

Цитата
Я блин все еще догнать не могу....
Почему он выводит чужие данные?
Может потому что активирую в putinserver?

нет
это потому что ты в одной переменной хранишь данные от всех игроков
тебе тут либо массив нужен либо цикл
могу тебе плагина за $ написать) xDDD
либо учить по тихоньку...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 2.11.2014, 10:35
Сообщение #18


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

Стаж: 16 лет

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

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

и попробуй так:

Скрытый текст

Код:

// такой код не оптимизированный, но работать будет..
// лучше всего сделать массив c данными игроков, обновлять массив при изменении данных, выводить информацию путем создание task для каждого игрока.
// при отключении игрока - удалять task.

#define PLUGIN "War3FT Ability"
#define VERSION "1.0"
#define AUTHOR "OverGame"

new buffer[255], g_race_name[64], g_war3_ult[64], g_war3_ult2[32], g_race_name2[32], g_MsgHud, MaxPlayers

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_dictionary("war3_lang.txt")

g_MsgHud = CreateHudSyncObj()
MaxPlayers = get_maxplayers()
set_task(1.0,"war3_info",_,_,_, "b")
}

public war3_info()
{
for(new id = 0; id <= MaxPlayers; id++)
{
if(!is_user_bot(id) && is_user_connected(id))
{
set_hudmessage(255,255,255, 0.01, 0.20, 0, 15.0, 1.0, _, _, -1)
formatex(g_war3_ult[id], charsmax(g_war3_ult), "ULT%d", get_war3_ult(id))
formatex(g_war3_ult2[id], charsmax(g_war3_ult2), "%L", LANG_PLAYER, g_war3_ult[id])
formatex(g_race_name[id], charsmax(g_race_name), "U_RACE%d", get_war3_race(id))
formatex(g_race_name2[id], charsmax(g_race_name2), "%L", LANG_PLAYER, g_race_name[id])
formatex(buffer, charsmax(buffer), "%L %s^n%L %d^n%L %d^n%L %s", LANG_PLAYER, "HUD_MSG1", g_race_name2[id], LANG_PLAYER, "HUD_MSG2", get_war3_lvl(id), LANG_PLAYER, "HUD_MSG4", get_war3_exp(id), LANG_PLAYER, "HUD_MSG3", g_war3_ult2[id])
ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
}
}

return PLUGIN_CONTINUE
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: