|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
CS: Postal2-fun stats(T 1)
|
|
Brute | Дата: Четверг, 14.08.2008, 16:21:15 | Сообщение # 1 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Статус: Не в сети
| CS: Postal2-fun stats(T 1.1) - это аналог стандартного плагина CS Misc. Stats(miscstats), включает в себя: 75 звуков для различных событий: *5 анонсов вы победили(рандом) *5 анонсов вы проиграли(рандом) *5 анонсов Т набирают очки(рандом) *5 анонсов СТ набирают очки(рандом) *3 анонса для Т манипуляции с бомбой *3 анонса для СТ манипуляции с бомбой *11 анонсов Хедшот(рандом) *7 анонсов убийство ножом(рандом) *5 анонсов ТК(рандом) *10 анонсов очки убийцы(рандом) *счёт от 1 до 10 для бомбы+озвучка осталось 30 секунд и одна минута *1 анонс суицида *анонсирование сколько времени осталось до конца раунда. Все звуки на русском языке 30+ цветных сообщений, в том числе и дублкилл, мултикилл, рампаже, хедшот и т.д. есть поддержка FFA режима cvar's: "postal2_enabled", "1" - плагин 1/0=вкл/выкл "postal2_ffa", "0" - режим free for all 1/0=вкл/выкл "postal2_mb", "1" - режим блокирования стандартных сообщений 1/0=вкл/выкл Настраивать плагин, точно так-же как и CS Misc. Stats через админ-меню. Скачать плагин можно из файлового архива: CS Postal2-fun stats(T 1.1).zip Для работы плагина так-же требуется скачать звуковой пакет. postal2_sound(full 75).zip (Тем кто уже скачал Demo, качать звуки заново не нужно!) Изменения: Quote версия T 1.1 +добавлен встроенный Messages blocker(спасибо Ven!) +добавлена новая cvar: postal2_mb +исправлен баг с 32мя игроками(спасибо DaTa!) +добавлена функция анонсирования сколько времени осталось до конца раунда(анонсирует 5, 3, 1 минуты и 30 секунд) -удалена функция TEAM SCORE MSG(объединены в одно текстовые сообщение, сообщения TEAM SCORE и TEAM WIN) +почти все выводимые сообщения поменяли своё местоположение(оптимизация под разрешение экрана 800х600) +небольшая оптимизация кода +добавлена поддержка плагина Random C4 Timer +улучшена поддержка плагина CT Bomb Stealer [v0.2beta] +исправлены баги с надписями о манипуляциях с бомбой +ещё куча всяких исправлений
Сообщение отредактировал Brute - Суббота, 16.08.2008, 13:48:16 |
|
| |
aha | Дата: Четверг, 14.08.2008, 17:29:45 | Сообщение # 2 |
Генерал-майор
Группа: Пользователи
Сообщений: 370
Статус: Не в сети
| Спасибо Brute за плугин , очень прикольный !, и хорошо что сделал режим для FFA , полезная вещь .
|
|
| |
Brute | Дата: Четверг, 14.08.2008, 17:52:52 | Сообщение # 3 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Статус: Не в сети
| Quote (aha) Спасибо Brute за плугин , очень прикольный !, Плагин конечно хороший, но хотелось бы услышать пожеланий: что добавить, что поменять, что исправить, может надписи переместить, может ещё что. Я ведь совсем в КС не играю =).
|
|
| |
DaTa | Дата: Четверг, 14.08.2008, 20:46:31 | Сообщение # 4 |
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| не нужно, так как не используется в коде --- неправильная запись инициализации массива Code new KillerScore[MAX_PLAYERS] = 0 new HeadShot[MAX_PLAYERS] = 0 //... public plugin_precache() { if(info_enabled()) { new sound[128] = 0 нужно, например Code new KillerScore[MAX_PLAYERS] = {0, ...} но и это не обязательно, так как при инициализации переменных в pawn, они всегда инициализируются нулевыми, : Code new KillerScore[MAX_PLAYERS] new HeadShot[MAX_PLAYERS] //... public plugin_precache() { if(info_enabled()) { new sound[128] --- Quote new KillerScore[MAX_PLAYERS] new HeadShot[MAX_PLAYERS] возможные индексы 0-31 но здесь Code public client_death(killer, victim, wpnindex, hitplace, TK) { if(info_enabled()) { KillerScore[victim] = 0[u]//если игроков на сервере 32 - выход за границы массива[/u] HeadShot[victim] = 0[u]//если игроков на сервере 32 - выход за границы массива[/u] if(!TK && killer != victim) { KillerScore[killer]++[u]//если игроков на сервере 32 - выход за границы массива[/u]
if(wpnindex == CSW_KNIFE) eventKnifeKill(killer, victim) if(hitplace == HIT_HEAD) { eventHeadShot(killer, victim) HeadShot[killer]++[u]//если игроков на сервере 32 - выход за границы массива[/u] } eventKillerScore(killer, KillerScore[killer], HeadShot[killer]) eventDoubleKill(killer) } else if(TK && killer != victim && !info_ffa()) { KillerScore[killer] = 0[u]//если игроков на сервере 32 - выход за границы массива[/u] HeadShot[killer] = 0[u]//если игроков на сервере 32 - выход за границы массива[/u] eventTK(killer, victim) eventDoubleKill(killer) } else if(TK && killer != victim && info_ffa()) { KillerScore[killer]++[u]//если игроков на сервере 32 - выход за границы массива[/u]
if(wpnindex == CSW_KNIFE) eventKnifeKill(killer, victim) if(hitplace == HIT_HEAD) { eventHeadShot(killer, victim) HeadShot[killer]++[u]//если игроков на сервере 32 - выход за границы массива[/u] } eventKillerScore(killer, KillerScore[killer], HeadShot[killer])[u]//если игроков на сервере 32 - выход за границы массива[/u][u]//если игроков на сервере 32 - выход за границы массива[/u] eventDoubleKill(killer) } else if(killer == victim) { eventSelfKill(victim) } } } Code public client_putinserver(id) { if(info_enabled()) { KillerScore[id] = 0[u]//если игроков на сервере 32 - выход за границы массива[/u] HeadShot[id] = 0[u]//если игроков на сервере 32 - выход за границы массива[/u] } } я бы посоветовал тебе не мучатся и объявить KillerScore, HeadShot как Quote new KillerScore[MAX_PLAYERS+1] = 0 new HeadShot[MAX_PLAYERS+1] = 0 а так же исправить места, где это не учтено Code public eventRestartRound() { if(info_enabled()) { remove_task(777) RoundNumber = 0 TeamScore[1] = 0 TeamScore[2] = 0 for(new i=0; i<MAX_PLAYERS; i++) { KillerScore[i] = 0 HeadShot[i] = 0 } } } например на Code public eventRestartRound() { if(info_enabled()) { remove_task(777) RoundNumber = 0 TeamScore[1] = 0 TeamScore[2] = 0 for(new i=1; i<=MAX_PLAYERS; i++) { KillerScore[i] = 0 HeadShot[i] = 0 } } } и вообще сдесь можно добыть кол-во игроков на сервере при инициализации плагина и использовать для уменьшения кол-ва циклов Code new g_maxplayers public plugin_init() { //... g_maxplayers =get_maxplayers() } Code public eventRestartRound() { if(info_enabled()) { remove_task(777) RoundNumber = 0 TeamScore[1] = 0 TeamScore[2] = 0 for(new i=1; i<=g_maxplayers; i++) { KillerScore[i] = 0 HeadShot[i] = 0 } } } но можно еще оптимальнее поступить: )) Quote /* Sets string with given character. */ native setc(src[],len,ch); тогда можно отказаться от g_maxplayers и поступить так: Code public eventRestartRound() { if(info_enabled()) { remove_task(777) RoundNumber = 0 TeamScore[1] = 0 TeamScore[2] = 0 setc(KillerScore,sizeof(KillerScore),0) setc(HeadShot,sizeof(HeadShot),0) } } --- функции public p2Message, public p2sound, public eventKnifeKill, public eventKillerScore, public eventDoubleKill, public eventTK, public eventHeadShot, public eventSelfKill можно не объявлять public, так как их не будут вызывать из-вне плагина для наглядности: Code public p2Message(id, id2, MSG_ID, ToWhom, param, param2) { Code p2Message(id, id2, MSG_ID, ToWhom, param, param2) { --- Code public eventSelfKill(victim) { if(!BlockEvents) { new SoundNumber = 0 if(SuicideSound) p2sound(SoundListSelfKill[SoundNumber], ALLUS, victim) if(SuicideMsg) p2Message(victim, 0, 23, ALLUS, 0, 0) } } непонятно, зачем тебе нужна переменная SoundNumber, мог бы и закомментировать ее(на будущее продвижение плагина) и использовать SoundListSelfKill[0] --- можно оптимизировать функцию Code public eventTimerC4() { TimerC4-- if(TimerC4 == 30 && !BlockEvents) { if(C4TimerSound) p2sound("Announcer30sec", ALLUS, 0) } else if(TimerC4 == 60 && !BlockEvents) { if(C4TimerSound) p2sound("Announcer1min", ALLUS, 0) } else if(TimerC4 < 11 && TimerC4 > 0 && !BlockEvents) { if(C4TimerSound) p2sound(SoundListEvents[TimerC4], ALLUS, 0) if(C4TimerMsg) p2Message(0, 0, TimerC4, ALLUS, 0, 0) } } например в Code public eventTimerC4() { TimerC4-- if( BlockEvents ) return if(0 < TimerC4 < 11) { if(C4TimerSound) p2sound(SoundListEvents[TimerC4], ALLUS, 0) if(C4TimerMsg) p2Message(0, 0, TimerC4, ALLUS, 0, 0) return } if(!C4TimerSound) return switch( TimerC4 ) { case 30: p2sound("Announcer30sec", ALLUS, 0) case 60: p2sound("Announcer1min", ALLUS, 0) } } --- для удобства мог бы использовать макроконстанты, это уменьшит шанс ошибиться Code switch(MSG_ID) { case 57: { set_hudmessage(128, 128, 128, -1.0, -1.0, 2, 0.5, 5.0, 0.1, 0.2, MSG_ID+HC-7) show_hudmessage(players[i], "%L", players[i], "P2_MSG_EXPLODE", name) } case 56: { set_hudmessage(128, 128, 128, -1.0, -1.0, 2, 0.5, 5.0, 0.1, 0.2, MSG_ID+HC-6) show_hudmessage(players[i], "%L", players[i], "P2_MSG_FAILEDDEFUSE", name) } например в Code #define MSG_EXPLODE 57 #define MSG_FAILEDDEFUS 56 //#define ... //... public p2Message(id, id2, MSG_ID, ToWhom, param, param2) { //... for(new i=0; i<pnum; i++) { switch(MSG_ID) { case MSG_EXPLODE: { set_hudmessage(128, 128, 128, -1.0, -1.0, 2, 0.5, 5.0, 0.1, 0.2, MSG_ID+HC-7) show_hudmessage(players[i], "%L", players[i], "P2_MSG_EXPLODE", name) } case MSG_FAILEDDEFUS: { set_hudmessage(128, 128, 128, -1.0, -1.0, 2, 0.5, 5.0, 0.1, 0.2, MSG_ID+HC-6) show_hudmessage(players[i], "%L", players[i], "P2_MSG_FAILEDDEFUSE", name) } //case ... и вызывать например Code public bomb_explode(planter, defuser) { if(info_enabled() && BombExplodeMsg && !BlockEvents) { BlockWinEvent = true if(defuser) p2Message(defuser, 0, MSG_FAILEDDEFUS, ALLUS, 0, 0)//<- else if(planter) p2Message(planter, 0, MSG_EXPLODE, ALLUS, 0, 0)//<- } } --- еще можно объявить SoundListLost[MAX_MESS_LOST][], SoundListWon[MAX_MESS_WON][] и другие не изменяемые данные как const(new const SoundListLost[MAX_MESS_LOST][]=...), но толку никакого, просто для наглядности --- удачи в развитии скила скриптера
|
|
| |
Brute | Дата: Четверг, 14.08.2008, 21:27:16 | Сообщение # 5 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Статус: Не в сети
| Quote (DaTa) удачи в развитии скила скриптера На что ты намекаешь? Ты ещё не одного своего плагина не выложил, искать ошибки в чужих плагинах проще всего, а вот что-то придумать и написать-это потяжелее. Quote (DaTa) я бы посоветовал тебе не мучатся и объявить KillerScore, HeadShot как Quote new KillerScore[MAX_PLAYERS+1] = 0 new HeadShot[MAX_PLAYERS+1] = 0 Я просто забыл что убрал из #define MAX_PLAYERS 32 плюс один(#define MAX_PLAYERS 32+1) Можно было просто написать, что неверный размер массива у таких-таких-то, а не копипастить пол плагина. А насчёт оптимизации, конечно это хороший тон... Но нужна ли эта оптимизация обладателям двуядерных процессоров? Quote (DaTa) непонятно, зачем тебе нужна переменная SoundNumber, мог бы и закомментировать ее(на будущее продвижение плагина) и использовать SoundListSelfKill[0] Потому-что планируется пополнение этого массива-думаю пихнуть туда ещё 2 звука Quote (DaTa) для удобства мог бы использовать макроконстанты, это уменьшит шанс ошибиться Ты сам себе противоречишь, то оптимизация, то удобство, ты уж выбери, что-нибудь одно. Спасибо, что сообщил о ошибкЕ. Оптимизации учится у тебя я точно не буду! Спасибо ещё раз.
|
|
| |
DaTa | Дата: Пятница, 15.08.2008, 00:55:44 | Сообщение # 6 |
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| Quote (Brute) На что ты намекаешь? на то, что век живи - век учись Quote (Brute) Ты ещё не одного своего плагина не выложил, я изучаю скриптинг что-бы содержать свой сервер, все уникальные идеи только на нем, может быть когда-то что-то и выложу, если посчитаю это готовым для публики Quote искать ошибки в чужих плагинах проще всего, а вот что-то придумать и написать-это потяжелее. ошибки искать конечно в чужих плагинах намного проще, из-за другой природы их происхождения, так что пользуйся, пока тебе помогают Quote (Brute) Ты сам себе противоречишь, то оптимизация, то удобство, ты уж выбери, что-нибудь одно. то, что я тебе советовал, не изменит скомпилированый вариант плагина ну например: Code #define MAAAAAAAACROOOOOOS (5+24-3)*3 call_func(MAAAAAAAACROOOOOOS) после подстановки препроцессором будет иметь вид Code call_func((5+24-3)*3) а компилятор на этапе компиляции посчитает значение и функция вызвется как Quote (Brute) Оптимизации учится у тебя я точно не буду! не нравится мой вариант, сделай свой, лучше, но в том месте оптимизация уместна.
|
|
| |
Brute | Дата: Суббота, 16.08.2008, 13:50:36 | Сообщение # 7 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Статус: Не в сети
| Level Up! CS: Postal2-fun stats(T 1.1) Изменения: Quote версия T 1.1 +добавлен встроенный Messages blocker(спасибо Ven!) +добавлена новая cvar: postal2_mb +исправлен баг с 32мя игроками(спасибо DaTa!) +добавлена функция анонсирования сколько времени осталось до конца раунда(анонсирует 5, 3, 1 минуты и 30 секунд) -удалена функция TEAM SCORE MSG(объединены в одно текстовые сообщение, сообщения TEAM SCORE и TEAM WIN) +почти все выводимые сообщения поменяли своё местоположение(оптимизация под разрешение экрана 800х600) +небольшая оптимизация кода +добавлена поддержка плагина Random C4 Timer +улучшена поддержка плагина CT Bomb Stealer [v0.2beta] +исправлены баги с надписями о манипуляциях с бомбой +ещё куча всяких исправлений
|
|
| |
DaTa | Дата: Суббота, 16.08.2008, 15:16:34 | Сообщение # 8 |
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| я наверно конкретно достал, но... --- Code for(new i=0;i<0; i++) { format(sound, 127, "%s/%s.wav", SOUNDDIR, SoundListSelfKill[i]) precache_sound(sound) } этот код никогда не выполнится, так как сразу после i=0 идет проверка условия i<0, так как 0<0 == false, цикл сразу пропускается Подсказка: sizeof SoundListSelfKill == 1 --- константы Code #define MSG_ROUND 0 #define MSG_NUM_01 1 #define MSG_NUM_02 2 #define MSG_NUM_03 3 #define MSG_NUM_04 4 #define MSG_NUM_05 5 #define MSG_NUM_06 6 #define MSG_NUM_07 7 #define MSG_NUM_08 8 #define MSG_NUM_09 9 #define MSG_NUM_10 10 #define MSG_THE_END 11 #define MSG_HEADSHOT 12 #define MSG_KNIFEKILL 13 #define MSG_TK 14 #define MSG_SUICIDE 15 #define MSG_DOUBLEKILL 16 #define MSG_MULTIKILL 17 #define MSG_ULTRAKILL 18 #define MSG_KILLINGSPREE 19 #define MSG_RAMPAGE 20 #define MSG_UNSTOPPABLE 21 #define MSG_MONSTERKILL 22 #define MSG_GODLIKE 23 #define MSG_WON 24 #define MSG_LOST 25 #define MSG_PLANTEDBOMB 26 #define MSG_DROPPEDBOMB 27 #define MSG_PICKEDBOMB 28 #define MSG_PLANTINGBOMB 29 #define MSG_DEFUSINGBOMB 30 #define MSG_DEFUSEDBOMB 31 #define MSG_FAILEDDEFUSE 32 #define MSG_EXPLODE 33 для удобства можно объявить как Code enum { MSG_ROUND, MSG_NUM_01, MSG_NUM_02, MSG_NUM_03, MSG_NUM_04, MSG_NUM_05, MSG_NUM_06, MSG_NUM_07, MSG_NUM_08, MSG_N UM_09, MSG_NUM_10, MSG_THE_END, MSG_HEADSHOT, MSG_KNIFEKILL, MSG_TK, MSG_SUICIDE, MSG_DOUBLEKILL, MSG_MULTIKILL, MSG_ULTRA KILL, MSG_KILLINGSPREE, MSG_RAMPAGE, MSG_UNSTOPPABLE, MSG_MONSTERKILL, MSG_GODLIKE, MSG_WON, MSG_LOST, MSG_PLANTEDBOMB, MS G_DROPPEDBOMB, MSG_PICKEDBOMB, MSG_PLANTINGBOMB, MSG_DEFUSINGBOMB, MSG_DEFUSEDBOMB, MSG_FAILEDDEFUSE, MSG_EXPLODE } ничего от это-го не изменится, просто не надо писать "#define MACROS цифру++" каждый раз, меньше шанс ошибиться --- почитай детальнее http://amxmodx.ucoz.ru/forum/4-2061-13427-16-1218732391 если есть желание оптимизировать больше
|
|
| |
Brute | Дата: Суббота, 16.08.2008, 15:34:00 | Сообщение # 9 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Статус: Не в сети
| Quote (DaTa) ничего от это-го не изменится, просто не надо писать "#define MACROS цифру++" каждый раз, меньше шанс ошибиться Мне и так всё понятно как и тебе... Quote (DaTa) Code for(new i=0;i<0; i++) { format(sound, 127, "%s/%s.wav", SOUNDDIR, SoundListSelfKill[i]) precache_sound(sound) } этот код никогда не выполнится, так как сразу после i=0 идет проверка условия i<0, так как 0<0 == false, цикл сразу пропускается Подсказка: sizeof SoundListSelfKill == 1 Вот мля... я опять забыл про эту хрень, спасибо.
|
|
| |
SONY | Дата: Суббота, 16.08.2008, 19:42:09 | Сообщение # 10 |
Сержант
Группа: Пользователи
Сообщений: 22
Статус: Не в сети
| щас проверю работоспособность после демо версии.... у меня вопрос что значит FFA режим
|
|
| |
Brute | Дата: Суббота, 16.08.2008, 20:10:49 | Сообщение # 11 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Статус: Не в сети
| Quote (SONY) у меня вопрос что значит FFA режим Капитальное рубилово, когда брат идёт на брата, сыт идёт на отца, что-то навроде гражданской войны Каждый за себя, нет командной игры, просто валишь все что движется, своих, чужих... Беспредел короче говоря.
|
|
| |
SONY | Дата: Суббота, 16.08.2008, 20:56:20 | Сообщение # 12 |
Сержант
Группа: Пользователи
Сообщений: 22
Статус: Не в сети
| кстати есть большой косяк ))) щас тестили не дему версию а вот эту кароче косяк...... ну так звуки работают.... но когда убиваешь кого то ну противника говорят что твоя тима класс и всё всех выкидывает с сервера.... в демо версии такого не было кароче косяк гдето Добавлено (2008-08-16, 8:56 Pm) --------------------------------------------- точнее вот мы один на один тестили я убиваю сразу нас кикает и говится как бы в догонку твоя тима класс... на этом всё заканчивается вообщем )
|
|
| |
Brute | Дата: Суббота, 16.08.2008, 21:36:52 | Сообщение # 13 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Статус: Не в сети
| Quote (SONY) кстати есть большой косяк ))) щас тестили не дему версию а вот эту кароче косяк...... ну так звуки работают.... но когда убиваешь кого то ну противника говорят что твоя тима класс и всё всех выкидывает с сервера.... в демо версии такого не было кароче косяк гдето Добавлено (2008-08-16, 8:56 Pm) --------------------------------------------- точнее вот мы один на один тестили я убиваю сразу нас кикает и говится как бы в догонку твоя тима класс... на этом всё заканчивается вообщем ) а что в консоле пишет?
|
|
| |
SONY | Дата: Суббота, 16.08.2008, 22:30:47 | Сообщение # 14 |
Сержант
Группа: Пользователи
Сообщений: 22
Статус: Не в сети
| в консоле у всех игроков пишет Code Host_Error: UserMsg: Not Present on Client 23
|
|
| |
Brute | Дата: Воскресенье, 17.08.2008, 08:28:14 | Сообщение # 15 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 1123
Статус: Не в сети
| Хз, что такое, откройте plugins.ini найдите p2_fun_stats.amxx и добавьте debug, чтобы было так: Code p2_fun_stats.amxx debug
|
|
| |
| AMX Mod X Russian Community © 2006-2025 | |
|
| |