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

Неверное логирование статы

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

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

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

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

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

Неверное логирование статы

Сообщение Skriptar » 31 янв 2010, 19:35

Вобщим psychostats я так понял криво работает в силу неправильного логирования сервера:
т.е. если юзверь steam_id_lan был убит в голову steam_0:xxxxx то стата начисляет ему хеады хотя как в
halflife.pm я все добавил правильно
Код: Выделить всё

     
# completely ignore player events for players with STEAM_ID_PENDING, it just causes problems
    if ($worldid eq 'STEAM_ID_PENDING' or $worldid eq 'STEAM_ID_LAN' or $worldid eq 'VALVE_ID_LAN'  ) {
        return undef;


  

Код: Выделить всё
/* AMX Mod X
*   Stats Logging Plugin
*
* by the AMX Mod X Development Team
*  originally developed by JustinHoMi
*
* This file is part of AMX Mod X.
*
*
*  This program is free software; you can redistribute it and/or modify it
*  under the terms of the GNU General Public License as published by the
*  Free Software Foundation; either version 2 of the License, or (at
*  your option) any later version.
*
*  This program is distributed in the hope that it will be useful, but
*  WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
*  General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software Foundation, 
*  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*  In addition, as a special exception, the author gives permission to
*  link the code of this program with the Half-Life Game Engine ("HL
*  Engine") and Modified Game Libraries ("MODs") developed by Valve, 
*  L.L.C ("Valve"). You must obey the GNU General Public License in all
*  respects for all of the code used other than the HL Engine and MODs
*  from Valve. If you modify this file, you may extend this exception
*  to your version of the file, but you are not obligated to do so. If
*  you do not wish to do so, delete this exception statement from your
*  version.
*/

#include <amxmodx>
#include <csx>

new g_pingSum[33]
new g_pingCount[33]
new g_inGame[33]

public plugin_init()
{
    register_plugin("CS Stats Logging", AMXX_VERSION_STR, "AMXX Dev Team")
}

public client_disconnect(id)
{
    if (!g_inGame[id])
        return
        
    g_inGame
[id] = 0
    
    if 
(is_user_bot(id))
    {
        return
    
}

    remove_task(id)
    
    new szTeam
[16], szName[32], szAuthid[32], iStats[8], iHits[8], szWeapon[24]
    new iUserid = get_user_userid(id)
    new _max = xmod_get_maxweapons()
    
    get_user_team
(id, szTeam, 15)
    get_user_name(id, szName, 31)
    get_user_authid(id, szAuthid, 31)

    for (new i = 1 ; i < _max ; ++i)
    {
        if (get_user_wstats(id, i, iStats, iHits))
        {
            xmod_get_wpnname(i, szWeapon, 23)
            
            log_message
("^"%s<%d><%s><%s>^" triggered ^"weaponstats^" (weapon ^"%s^") (shots ^"%d^") (hits ^"%d^") (kills ^"%d^") (headshots ^"%d^") (tks ^"%d^") (damage ^"%d^") (deaths ^"%d^")", 
                        szName
, iUserid, szAuthid, szTeam, szWeapon, iStats[4], iStats[5], iStats[0], iStats[2], iStats[3], iStats[6], iStats[1])
            log_message("^"%s<%d><%s><%s>^" triggered ^"weaponstats2^" (weapon ^"%s^") (head ^"%d^") (chest ^"%d^") (stomach ^"%d^") (leftarm ^"%d^") (rightarm ^"%d^") (leftleg ^"%d^") (rightleg ^"%d^")", 
                        szName
, iUserid, szAuthid, szTeam, szWeapon, iHits[1], iHits[2], iHits[3], iHits[4], iHits[5], iHits[6], iHits[7])
        }
    }
    
    new iTime 
= get_user_time(id, 1)
    
    log_message
("^"%s<%d><%s><%s>^" triggered ^"time^" (time ^"%d:%02d^")", szName, iUserid, szAuthid, szTeam, (iTime / 60), (iTime % 60))
    log_message("^"%s<%d><%s><%s>^" triggered ^"latency^" (ping ^"%d^")", szName, iUserid, szAuthid, szTeam, (g_pingSum[id] / (g_pingCount[id] ? g_pingCount[id] : 1)))
}

public client_connect(id)
{
    g_inGame[id] = 0
}

public client_putinserver(id)
{
    g_inGame[id] = 1
    if 
(!is_user_bot(id))
    {
        g_pingSum[id] = g_pingCount[id] = 0
        if 
(task_exists(id))
            remove_task(id)
        set_task(19.5, "getPing", id, "", 0, "b")
    }
}

public getPing(id)
{
    new iPing, iLoss
    
    get_user_ping
(id, iPing, iLoss)
    g_pingSum[id] += iPing
    
++g_pingCount[id]
}
 


есть ли какие нибудь варианты решения помимо как установки статы по нику ?
Я знаю только то, что я ничего не знаю.
Аватара пользователя
Skriptar
 
Сообщения: 953
Зарегистрирован: 20 окт 2009, 15:34
Благодарил (а): 180 раз.
Поблагодарили: 136 раз.
Языки программирования: Counter-Strike 1.6

Re: Неверное логирование статы

Сообщение DJ_WEST » 02 фев 2010, 16:42

Посмотри в логах, как там записывается стата. Может где-то в AMXX модуле или психе стоит проверка на STEAM_ID_LAN и тому подобное. А вообще если ты ведешь стату по id, то они должны быть у всех разные, а то STEAM_ID_LAN, как я понимаю, может быть у нескольких игроков. Смысла тогда нет по ID ее вести.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Неверное логирование статы

Сообщение Skriptar » 02 фев 2010, 17:11

DJ_WEST писал(а):Посмотри в логах, как там записывается стата. Может где-то в AMXX модуле или психе стоит проверка на STEAM_ID_LAN и тому подобное. А вообще если ты ведешь стату по id, то они должны быть у всех разные, а то STEAM_ID_LAN, как я понимаю, может быть у нескольких игроков. Смысла тогда нет по ID ее вести.


Вот без той строчки которую я подправил если стата по id то в ней появляется один игрок с 100000 киллами с 10000 IP и никами
Я в принципе думал что если добавить steam-id_lan т.е. как и написано в исходнике скрипта игнорирование будет полное

Сейчас посмотрел я так думаю только вот из таких строчек может браться стата по хитбоксом
Код: Выделить всё
L 12/23/2009 - 02:27:45: "[NO-myAC]123456<14628><STEAM_0:0:1352885762><TERRORIST>" triggered "weaponstats" (weapon "grenade") (shots "1") (hits "1") (kills "0") (headshots "0") (tks "0") (damage "39") (deaths "0")
L 12/23/2009 - 02:27:45: "[NO-myAC]123456<14628><STEAM_0:0:1352885762><TERRORIST>" triggered "weaponstats2" (weapon "grenade") (head "0") (chest "0") (stomach "0") (leftarm "0") (rightarm "0") (leftleg "0") (rightleg "0")
L 12/23/2009 - 02:27:45: "[NO-myAC]123456<14628><STEAM_0:0:1352885762><TERRORIST>" triggered "weaponstats" (weapon "m4a1") (shots "25") (hits "5") (kills "1") (headshots "0") (tks "0") (damage "106") (deaths "1")
L 12/23/2009 - 02:27:45: "[NO-myAC]123456<14628><STEAM_0:0:1352885762><TERRORIST>" triggered "weaponstats2" (weapon "m4a1") (head "0") (chest "1") (stomach "0") (leftarm "3") (rightarm "0") (leftleg "0") (rightleg "1")
L 12/23/2009 - 02:27:45: "[NO-myAC]123456<14628><STEAM_0:0:1352885762><TERRORIST>" triggered "weaponstats" (weapon "knife") (shots "2") (hits "0") (kills "0") (headshots "0") (tks "0") (damage "0") (deaths "1")
L 12/23/2009 - 02:27:45: "[NO-myAC]123456<14628><STEAM_0:0:1352885762><TERRORIST>" triggered "weaponstats2" (weapon "knife") (head "0") (chest "0") (stomach "0") (leftarm "0") (rightarm "0") (leftleg "0") (rightleg "0")
Я знаю только то, что я ничего не знаю.
Аватара пользователя
Skriptar
 
Сообщения: 953
Зарегистрирован: 20 окт 2009, 15:34
Благодарил (а): 180 раз.
Поблагодарили: 136 раз.
Языки программирования: Counter-Strike 1.6

Re: Неверное логирование статы

Сообщение Skriptar » 19 мар 2010, 12:45

Вообщим вариант решения я так думаю тут один - это генерация для старых клиентов UniqId по IP
Настроил все вроде бы нормально по хеадам расчитывает, но я хочу чтобы игроки с Uniqid содержащим STEAM_0:4 были в базе, но никогда для них ранк не расчитывался т.е. также как и можно установить условия по кол-ву фрагов и или онлайну
Это не так сложно, есть здесь спецы по Perl ?

Сорри за оффтоп.
Я знаю только то, что я ничего не знаю.
Аватара пользователя
Skriptar
 
Сообщения: 953
Зарегистрирован: 20 окт 2009, 15:34
Благодарил (а): 180 раз.
Поблагодарили: 136 раз.
Языки программирования: Counter-Strike 1.6

Пред.

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

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

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 18