Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Закрома Родины
GAMEINATOR forums > S.T.A.L.K.E.R. > Мастерская: создание модов для S.T.A.L.K.E.R.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77
zxcvx
Цитата(stalker_inside @ 29.09.2014, 23:06) *
Т-6638 - финалка. В посте своём посте Loxotron ведь все описал.


Спасибо. Просто я не нашел этот пост Loxotronа.

Просто я никак не могу добраться до своего компа и к тому же там нужно систему ставить еще...
Modera
Цитата(Flammable @ 29.09.2014, 23:10) *
Цитата(Modera @ 29.09.2014, 22:57) *
бенч.

Бенч или не бенч, но сингл и мультиплеер на нем запускаются.

В бенчах вроде всё это есть, никто не вырезал. Я помню ЧН скачивал, там сталкеры были, все дела.
Просто исходники именно той версии движка, которая используется в бенчмарке ЗП 1.6.02.
K.D.
Цитата(Scarabay @ 29.09.2014, 21:22) *
А как ты это исправлял дляТЧ? Нельзя ли пофиксить и в ЗП, если это возможно?

Да просто сохранять в объекте light этот радиус в CHangingLamp::net_spawn ну и в дальнейшем использовать его вместо SMAP_plane.

Цитата(Flammable @ 29.09.2014, 22:08) *
По всей видимости, хотели PCSS или что-то подобное реализовать.

Сильно сомневаюсь. Скорее, использовали в прошлом этот параметр для настройки, а потом забили.

Flammable
Цитата(K.D. @ 30.09.2014, 00:00) *
Сильно сомневаюсь.

http://www.pcgameshardware.com/aid,695861/...ember-2009/News

P.S. Непонятно, почему эта фича позиционируется как DX11 only. Никаких особенностей DX11 там не используется, реализация для DX10 не отличается вообще ничем (если, конечно, это обычный PCSS).
K.D.
Цитата(Flammable @ 30.09.2014, 00:09) *

Я понимаю, что такое PCSS smile.gif Однако, его имплементацию начинают не с заведения специальной настройки, а с заведения специального рендертаргета, написания шейдеров построения шадоумапы и последующего ее наложения. В сталкере нет даже следов этого.

Цитата(Flammable @ 30.09.2014, 00:09) *
P.S. Непонятно, почему эта фича позиционируется как DX11 only

Потому что многократное семплирование шадоумапы для одного пикселя, достаточное для достижения нормального качества - очень и очень тормозной процесс, даже с учетом PCF. А на DX11 (впрочем, на DX10.1 тоже) есть Gather() smile.gif
Flammable
Цитата(K.D. @ 30.09.2014, 02:08) *
В сталкере нет даже следов этого.

Действительно нет. Тогда что на рекламных скриншотах?
Цитата(K.D. @ 30.09.2014, 02:08) *
А на DX11 (впрочем, на DX10.1 тоже) есть Gather()

Посмотрел, круто. Попробую как-нибудь свой кривой PCSS оптимизировать под это.
K.D.
Цитата(Flammable @ 30.09.2014, 02:47) *
Действительно нет. Тогда что на рекламных скриншотах?

А я не совсем про ЗП. Ситуация с виртуальным радиусом ламп не изменилась с ТЧ.
chriotmao
Помнится кто-то писал что где-то видел следы солнца на воде на каких-то скриншотах ПЫС. Так что это было и почему было выпилено?
Flammable
Цитата(K.D. @ 30.09.2014, 08:26) *
А я не совсем про ЗП. Ситуация с виртуальным радиусом ламп не изменилась с ТЧ.

Может то радиус освещения от них?
sgs-sd
Компилил stalker patch 1.0004 при запуске выет с таким логом .

Expression : xml_doc.NavigateToNode(path,index)
Function : CUIXmlInit::InitStatic
File : .\ui\UIXmlInit.cpp
Line : 172
Description : XML node not found
Arguments : message_box_cdkey_in_use:picture
Modera
sgs-sd, что непонятного в этой ошибке? Добавь этот параметр и всё.
sgs-sd
добавлял. в UI фвйлы и ничего . все так же ругаеться
alpet
Смотрю ролики про современную "Припять". Как-же там все деревьями заросло! Такую геометрию походу движок не выдержал-бы, будь локация для ЗП сделана с большей точностью от нынешнего состояния города )
zxcvx
Цитата(Modera @ 29.09.2014, 23:18) *
В бенчах вроде всё это есть, никто не вырезал. Я помню ЧН скачивал, там сталкеры были, все дела.
Просто исходники именно той версии движка, которая используется в бенчмарке ЗП 1.6.02.


Думаю, что бенч - это не урезанная версия, это тот же 1.6.2, только добавлено чуток функций специально для тестов. Поправьте меня, если я не прав.
Меня вот интересует, а T-6638 пробовали компилить ? Какое СДК взять для этой версии ?
Flammable
Цитата(zxcvx @ 01.10.2014, 13:58) *
Думаю, что бенч - это не урезанная версия, это тот же 1.6.2, только добавлено чуток функций специально для тестов. Поправьте меня, если я не прав.

Все необходимое для бенчмарка уже есть в 6638 (кроме дополнительного архива xpatch_03.db). В engine.vc200X сделаны мелкие незначительные правки.
Цитата(zxcvx @ 01.10.2014, 13:58) *
Меня вот интересует, а T-6638 пробовали компилить? Какое СДК взять для этой версии ?

А зачем его компилить, если есть engine.vc200X? СДК берется из stasvn.7z/sources/sdk
Nummer
XR_IOConsole.cpp для поддержки русской клавиатуры в консоли , и регистра букв. Может кому и надо biggrin.gif
Код

Код
// XR_IOConsole.cpp: implementation of the CConsole class.
//
//////////////////////////////////////////////////////////////////////
#include <Windows.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include "stdafx.h"
#include "igame_level.h"
#include "igame_persistent.h"

#include "x_ray.h"
#include "xr_ioconsole.h"
#include "xr_input.h"
#include "xr_ioc_cmd.h"
#include "GameFont.h"
#include "xr_trims.h"
#include "CustomHUD.h"
#pragma warning(push)
#pragma warning(disable:4995)
//#include <locale>
#pragma warning(pop)

#define  LDIST .05f

ENGINE_API CConsole*    Console        =    NULL;
const char *            ioc_prompt    =    "> ";
bool            ruslanguage = false;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
void CConsole::AddCommand(IConsole_Command* C)
{
    Commands[C->Name()] = C;
}
void CConsole::RemoveCommand(IConsole_Command* C)
{
    vecCMD_IT it = Commands.find(C->Name());
    if(Commands.end()!=it)
        Commands.erase(it);
}
void CConsole::Reset()
{
    if(pFont)
        xr_delete(pFont);
}

void CConsole::Initialize()
{
    scroll_delta    = cmd_delta = old_cmd_delta = 0;
    editor[0]       = 0;
    bShift            = false;
    bLCONTROL        = false;
    RecordCommands    = false;
    editor[0]       = 0;
    cur_time        = rep_time = 0;
    fAccel            = 1.0f;
    bVisible        = false;
    rep_time        = 0;
    pFont            = 0;
    last_mm_timer    = 0;
    // Commands
    extern void CCC_Register();
    CCC_Register    ();
}

void CConsole::Destroy    ()
{
    Execute                        ("cfg_save");

    xr_delete                    (pFont);

    Commands.clear                ();
}

void CConsole::OnFrame    ()
{
    u32 mm_timer = Device.dwTimeContinual;
    float fDelta = (mm_timer - last_mm_timer)/1000.0f;
    if (fDelta>.06666f) fDelta=.06666f;
    last_mm_timer = mm_timer;

    cur_time+=fDelta;
    rep_time+=fDelta*fAccel;
    if (cur_time>0.1f) { cur_time-=0.1f; bCursor=!bCursor;    }
    if (rep_time>0.2f) { rep_time-=0.2f; bRepeat=true;    fAccel+=0.2f;    }
/*
    cur_time+=Device.fTimeDelta;
    rep_time+=Device.fTimeDelta*fAccel;
    if (cur_time>0.1f) { cur_time-=0.1f; bCursor=!bCursor;    }
    if (rep_time>0.2f) { rep_time-=0.2f; bRepeat=true;    fAccel+=0.2f;    }
*/
}

void out_font(CGameFont* pFont, LPCSTR text, float& pos_y)
{
    float str_length = pFont->SizeOf_(text);
    if(str_length>1024.0f)
    {
        float _l            = 0.0f;
        int _sz                = 0;
        int _ln                = 0;
        string1024            _one_line;
        
        while( text[_sz] )
        {
            _one_line[_ln+_sz]            = text[_sz];
            _one_line[_ln+_sz+1]        = 0;
            float _t                    = pFont->SizeOf_(_one_line+_ln);
            if(_t > 1024.0f)
            {
                out_font                (pFont, text+_sz, pos_y);
                pos_y                    -= LDIST;
                pFont->OutI                (-1.0f, pos_y, "%s", _one_line+_ln);
                _l                        = 0.0f;
                _ln                        = _sz;
            }else
                _l    = _t;

            ++_sz;
        };
    }else
        pFont->OutI  (-1.0f, pos_y, "%s", text);
}

void CConsole::OnRender    ()
{
    float            fMaxY;
    BOOL            bGame;

    if (!bVisible) return;
    if (0==pFont)
        pFont        = xr_new<CGameFont>    ("hud_font_di",CGameFont::fsDeviceIndependent);

    bGame    =false;    
    if ( (g_pGameLevel && g_pGameLevel->bReady)||
         ( g_pGamePersistent && g_pGamePersistent->m_pMainMenu && g_pGamePersistent->m_pMainMenu->IsActive() ) )    
         bGame = true;

    if        (g_dedicated_server)                bGame = false;

    VERIFY    (HW.pDevice);

    //*** Shadow
    D3DRECT R = { 0,0,Device.dwWidth,Device.dwHeight};
    if        (bGame) R.y2 /= 2;

    CHK_DX    (HW.pDevice->Clear(1,&R,D3DCLEAR_TARGET,D3DCOLOR_XRGB(32,32,32),1,0));

    float dwMaxY=float(Device.dwHeight);
    // float dwMaxX=float(Device.dwWidth/2);
    if (bGame) { fMaxY=0.f; dwMaxY/=2; } else fMaxY=1.f;

    char        buf    [MAX_LEN+5];
    strcpy_s        (buf,ioc_prompt);
    strcat        (buf,editor);
    if (bCursor) strcat(buf,"|");

    pFont->SetColor( color_rgba(128  ,128  ,255, 255) );
    pFont->SetHeightI(0.025f);
    pFont->OutI    ( -1.f, fMaxY-LDIST, "%s", buf );

    float ypos=fMaxY-LDIST-LDIST;
    for (int i=LogFile->size()-1-scroll_delta; i>=0; i--)
    {
        ypos-=LDIST;
        if (ypos<-1.f)    break;
        LPCSTR            ls = *(*LogFile)[i];
        if    (0==ls)        continue;
        switch (ls[0]) {
        case '~':
            pFont->SetColor(color_rgba(255,255,0, 255));
            out_font        (pFont,&ls[2],ypos);
//.            pFont->OutI  (-1.f,ypos,"%s",&ls[2]);
            break;
        case '!':
            pFont->SetColor(color_rgba(255,0  ,0  , 255));
            out_font        (pFont,&ls[2],ypos);
//.            pFont->OutI  (-1.f,ypos,"%s",&ls[2]);
            break;
        case '*':
            pFont->SetColor(color_rgba(128,128,128, 255));
            out_font        (pFont,&ls[2],ypos);
//.            pFont->OutI  (-1.f,ypos,"%s",&ls[2]);
            break;
        case '-':
            pFont->SetColor(color_rgba(0  ,255,0  , 255));
            out_font        (pFont,&ls[2],ypos);
//.            pFont->OutI  (-1.f,ypos,"%s",&ls[2]);
            break;
        case '#':
            pFont->SetColor(color_rgba(0  ,222, 205  ,145));
            out_font        (pFont,&ls[2],ypos);
//.            pFont->OutI  (-1.f,ypos,"%s",&ls[2]);
            break;
        default:
            pFont->SetColor(color_rgba(255,255,255, 255));
            out_font        (pFont,ls,ypos);
//.            pFont->OutI  (-1.f,ypos,"%s",ls);
        }
    }
    pFont->OnRender();
}

int StrLenBuff(const char* str)
{
    int count = 0;
    for(unsigned int i=0;i<strlen(str);i++){
    count++;
    }
    return count;
}

void CConsole::OnPressKey(int dik, BOOL bHold)
{
    if (!bHold)    fAccel            = 1.0f;
    
    // ОПТИМИЗАЦИЯ КОДА
    const int coutsymbols = 47;
    int keyCodes[coutsymbols] = {DIK_1, DIK_2, DIK_3, DIK_4, DIK_5, DIK_6, DIK_7, DIK_8, DIK_9, DIK_0, DIK_A, DIK_B, DIK_C, DIK_D, DIK_E, DIK_F, DIK_G, DIK_H, DIK_I, DIK_J, DIK_K, DIK_L, DIK_M, DIK_N, DIK_O, DIK_P, DIK_Q, DIK_R, DIK_S, DIK_T, DIK_U, DIK_V, DIK_W, DIK_X, DIK_Y, DIK_Z, DIK_LBRACKET, DIK_RBRACKET, DIK_APOSTROPHE, DIK_COMMA, DIK_PERIOD, DIK_EQUALS, DIK_MINUS, 0x27, 0x35, DIK_SPACE, DIK_BACKSLASH};
    const char* symbols[coutsymbols] = {"1","2","3","4","5","6","7","8","9","0","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","[","]","'",",",".","=","-",";","/"," ","\\"};
    const char* symbolstwo[coutsymbols] = {"!","@","#","$","%","^","&","*","(",")","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","{","}","\"","<",">","+","_",":","?"," ","|"};
    const char* symbolsrus[coutsymbols] = {"1","2","3","4","5","6","7","8","9","0","ф","и","с","в","у","а","п","р","ш","о","л","д","ь","т","щ","з","й","к","ы","е","г","м","ц","ч","н","я","х","ъ","э","б","ю","=","-","ж","."," ","\\"};
    const char* symbolstworus[coutsymbols] = {"!","\"","№",";","%",":","?","*","(",")","Ф","И","С","В","У","А","П","Р","Ш","О","Л","Д","Ь","Т","Щ","З","Й","К","Ы","Е","Г","М","Ц","Ч","Н","Я","Х","Ъ","Э","Б","Ю","+","_","Ж",","," ","|"};
    for (int i = 0; i < coutsymbols; ++i)
    {
        if (dik == keyCodes[i]){
            if(dik == keyCodes[31]){
                if(bLCONTROL)
                    {
                        //чтение текста из буфера обмена
                        if ( OpenClipboard(NULL) )//открываем буфер обмена
                        {
                           HANDLE hData = GetClipboardData(CF_TEXT);//извлекаем текст из буфера обмена
                           char* chBuffer= (char*)GlobalLock(hData);//блокируем память
                           if(StrLenBuff(chBuffer) <=100)
                           {
                               if(StrLenBuff(editor) <=100)
                               {
                                strcat(editor,chBuffer);
                               }
                               else
                               {
                                    Msg ("! In line maximum number of characters");
                               }
                           }
                           else
                           {
                               Msg ("! Error when inserting text from the clipboard");
                               Msg ("! Text should not be longer than 100 characters");
                           }
                           GlobalUnlock(hData);//разблокируем память
                           CloseClipboard();//закрываем буфер обмена
                        }
                    }
                    else if(!ruslanguage)
                    {
                        if (bShift) strcat(editor,(symbolstwo[31]));
                        else strcat(editor,symbols[31]);
                    }
                    else
                    {
                        if (bShift) strcat(editor,(symbolstworus[31]));
                        else strcat(editor,symbolsrus[31]);
                    }
                    
                }
            else
                {
                if(!ruslanguage)
                {
                    if (bShift) strcat(editor,(symbolstwo[i]));
                    else strcat(editor,symbols[i]);
                }
                else
                {
                    if (bShift) strcat(editor,(symbolstworus[i]));
                    else strcat(editor,symbolsrus[i]);
                }
            }
        }
    }
    ////////////////////////////////////////
    switch (dik) {
    case DIK_GRAVE:
        if (bShift) { strcat(editor,"~"); break; }
    case DIK_ESCAPE:
        if (!bHold) {
            if  ( g_pGameLevel ||
                ( g_pGamePersistent && g_pGamePersistent->m_pMainMenu && g_pGamePersistent->m_pMainMenu->IsActive() ))
                Hide();
        }
        break;
    case DIK_PRIOR:
        scroll_delta++;
        if (scroll_delta>int(LogFile->size())-1) scroll_delta=LogFile->size()-1;
        break;
    case DIK_NEXT:
        scroll_delta--;
        if (scroll_delta<0) scroll_delta=0;
        break;
    case DIK_TAB:
        {
            LPCSTR radmin_cmd_name = "ra ";
            bool b_ra = (editor==strstr(editor, radmin_cmd_name));
            int offset = (b_ra)?xr_strlen(radmin_cmd_name):0;
            vecCMD_IT I = Commands.lower_bound(editor+offset);
            if (I!=Commands.end()) {
                IConsole_Command &O = *(I->second);
                // write command
                strcpy_s(editor+offset, sizeof(editor)-offset, O.Name());
                strcat(editor+offset," ");
            }
        }
        break;
    case DIK_LALT:
        if(bShift)
        {
            if(!ruslanguage)
            {
                ruslanguage = true;
                Msg ("* Language RUS");
            }
            else
            {
                ruslanguage = false;
                Msg ("* Language EN");
            }
        }
        break;
    case DIK_UP:
        cmd_delta--;
        SelectCommand();
        break;
    case DIK_DOWN:
        cmd_delta++;
        SelectCommand();
        break;
    case DIK_BACK:
            if (xr_strlen(editor)>0) editor[xr_strlen(editor)-1]=0;
        break;
    case DIK_RCONTROL:
    case DIK_LCONTROL:
        bLCONTROL = true;
        break;
    case DIK_LSHIFT:
    case DIK_RSHIFT:
        bShift = true;
        break;
    case DIK_RETURN:
            ExecuteCommand();
        break;
    case DIK_INSERT:
        break;
    default:
        break;
    }
    u32    clip    = MAX_LEN-8;
    if    (xr_strlen(editor)>=clip) editor[clip-1]=0;
    bRepeat        = false;
    rep_time    = 0;
}

void CConsole::IR_OnKeyboardPress(int dik)
{
    OnPressKey(dik);
}

void CConsole::IR_OnKeyboardRelease(int dik)
{
    fAccel        = 1.0f;
    rep_time    = 0;
    switch (dik)
    {
    case DIK_LSHIFT:
    case DIK_RSHIFT:
        bShift = false;
        break;
    case DIK_RCONTROL:
    case DIK_LCONTROL:
        bLCONTROL = false;
        break;
    }
}

void CConsole::IR_OnKeyboardHold(int dik)
{
    float fRep    = rep_time;
    if (bRepeat) { OnPressKey(dik, true); bRepeat=false; }
    rep_time    = fRep;
}

void CConsole::ExecuteCommand()
{
    char    first_word[MAX_LEN];
    char    last_word [MAX_LEN];
    char    converted [MAX_LEN];
    int        i,j,len;

    scroll_delta    = 0;
    cmd_delta        = 0;
    old_cmd_delta    = 0;

    len = xr_strlen(editor);
    for (i=0; i<len; i++) {
        if ((editor[i]=='\n')||(editor[i]=='\t')) editor[i]=' ';
    }
    j   = 0;
    for (i=0; i<len; i++) {
        switch (editor[i]) {
        case ' ':
            if (editor[i+1]==' ') continue;
            if (i==len-1) goto outloop;
            break;
//.        case ';':
//.            goto outloop;
        }
        converted[j++]=editor[i];
    }
outloop:
    converted[j]=0;
    if (converted[0]==' ')    strcpy_s(editor,&(converted[1]));
    else                    strcpy_s(editor,converted);
    if (editor[0]==0)        return;
    if (RecordCommands)        Log("~",editor);
    
    // split into cmd/params
    editor[j++  ]    =    ' ';
    editor[len=j]    =    0;
    for (i=0; i<len; i++) {
        if (editor[i]!=' ') first_word[i]=editor[i];
        else {
            // last 'word' - exit
            strcpy_s(last_word,editor+i+1);
            break;
        }
    }
    first_word[i]=0;
    if (last_word[xr_strlen(last_word)-1]==' ') last_word[xr_strlen(last_word)-1]=0;
    
    // search
    vecCMD_IT I = Commands.find(first_word);
    if (I!=Commands.end()) {
        IConsole_Command &C = *(I->second);
        if (C.bEnabled) {
            if (C.bLowerCaseArgs) strlwr(last_word);
            if (last_word[0]==0) {
                if (C.bEmptyArgsHandled) C.Execute(last_word);
                else {
                    IConsole_Command::TStatus S; C.Status(S);
                    Msg("- %s %s",C.Name(),S);
                }
            } else C.Execute(last_word);
        } else {
            Log("! Command disabled.");
        }
    }
    else
        Log("! Unknown command: ",first_word);
    editor[0]=0;
}

void CConsole::Show            ()
{
    if (bVisible)            return;
    bVisible                = true;

    editor[0]                = 0;
    rep_time                = 0;
    fAccel                    = 1.0f;

    IR_Capture                ( );
    Device.seqRender.Add    (this, 1);
    Device.seqFrame.Add        (this);
}

void CConsole::Hide()
{
    if    (!bVisible)                                                    return;
    if    (g_pGamePersistent && g_dedicated_server)    return;

    bVisible                = false;
    Device.seqFrame.Remove    (this);
    Device.seqRender.Remove    (this);
    IR_Release                ( );
}

void CConsole::SelectCommand()
{
    int        p,k;
    BOOL    found=false;
    for (p=LogFile->size()-1, k=0; p>=0; p--) {
        if (0==*(*LogFile)[p])        continue;
        if ((*LogFile)[p][0]=='~') {
            k--;
            if (k==cmd_delta) {
                strcpy_s(editor,&(*(*LogFile)[p])[2]);
                found=true;
            }
        }
    }
    if (!found) {
        if (cmd_delta>old_cmd_delta) editor[0]=0;
        cmd_delta=old_cmd_delta;

    } else {
        old_cmd_delta=cmd_delta;
    }
}

void CConsole::Execute        (LPCSTR cmd)
{
    strncpy            (editor,cmd,MAX_LEN-1); editor[MAX_LEN-1]=0;
    RecordCommands    = false;
    ExecuteCommand    ();
    RecordCommands    = true;
}
void CConsole::ExecuteScript(LPCSTR N)
{
    string128        cmd;
    strconcat        (sizeof(cmd),cmd,"cfg_load ",N);
    Execute            (cmd);
}


BOOL CConsole::GetBool(LPCSTR cmd, BOOL& val)
{
    vecCMD_IT I = Commands.find(cmd);
    if (I!=Commands.end()) {
        IConsole_Command* C = I->second;
        CCC_Mask* cf = dynamic_cast<CCC_Mask*>(C);
        if(cf){
            val = cf->GetValue();
        }else{
            CCC_Integer* cf = dynamic_cast<CCC_Integer*>(C);
            val = !!cf->GetValue();
        }
    }
    return val;
}

float CConsole::GetFloat(LPCSTR cmd, float& val, float& min, float& max)
{
    vecCMD_IT I = Commands.find(cmd);
    if (I!=Commands.end()) {
        IConsole_Command* C = I->second;
        CCC_Float* cf = dynamic_cast<CCC_Float*>(C);
        val = cf->GetValue();
        min = cf->GetMin();
        max = cf->GetMax();
        return val;
    }
    return val;
}

int CConsole::GetInteger(LPCSTR cmd, int& val, int& min, int& max)
{
    vecCMD_IT I = Commands.find(cmd);
    if (I!=Commands.end()) {
        IConsole_Command* C = I->second;
        CCC_Integer* cf = dynamic_cast<CCC_Integer*>(C);
        if(cf)
        {
            val = cf->GetValue();
            min = cf->GetMin();
            max = cf->GetMax();
        }else{
            CCC_Mask* cm    = dynamic_cast<CCC_Mask*>(C);
            R_ASSERT        (cm);
            val = (0!=cm->GetValue())?1:0;
            min = 0;
            max = 1;
        }
        return val;
    }
    return val;
}


char * CConsole::GetString(LPCSTR cmd)
{
    static IConsole_Command::TStatus stat;
    vecCMD_IT I = Commands.find(cmd);
    if (I!=Commands.end()) {
        IConsole_Command* C = I->second;
        C->Status(stat);
        return stat;
    }

/*
    ioc_command *cmd = (ioc_command *)bsearch(name, ioc_cmd_array,ioc_num_cmd,sizeof(ioc_command),ioc_compare_search_cmd);
    if (cmd!=NULL && cmd->type==cmdVALUE) {
        u32 *v = (u32 *) cmd->ptr; // pointer to value
        xr_token *tok=cmd->tok;
        while (tok->name) {
            if (tok->id==(int)(*v)) {
                return (char *)tok->name;
            }
            tok++;
        }
    }
*/
    return NULL;
}
char * CConsole::GetToken(LPCSTR cmd)
{
    return GetString(cmd);
}

xr_token* CConsole::GetXRToken(LPCSTR cmd)
{
    vecCMD_IT I = Commands.find(cmd);
    if (I!=Commands.end()) {
        IConsole_Command* C = I->second;
        CCC_Token* cf = dynamic_cast<CCC_Token*>(C);
        return cf->GetToken();
    }
    return NULL;
}

/*
char * CConsole::GetNextValue(LPCSTR cmd)
{

    ioc_command *cmd = (ioc_command *)bsearch(name, ioc_cmd_array,ioc_num_cmd,sizeof(ioc_command),ioc_compare_search_cmd);
    if (cmd!=NULL && cmd->type==cmdVALUE) {
        u32 *v = (u32 *) cmd->ptr; // pointer to value
        xr_token *tok=cmd->tok;
        while (tok->name) {
            if (tok->id==(int)(*v)) {
                char *save = (char *)tok->name;
                tok++;
                if (tok->name!=0) return (char *)tok->name;
                else                 return save;
            }
            tok++;
        }
    }

    return GetValue(cmd);
}

char * CConsole::GetPrevValue(LPCSTR cmd)
{

    ioc_command *cmd = (ioc_command *)bsearch(name, ioc_cmd_array,ioc_num_cmd,sizeof(ioc_command),ioc_compare_search_cmd);
    if (cmd!=NULL && cmd->type==cmdVALUE) {
        u32 *v = (u32 *) cmd->ptr; // pointer to value
        xr_token *tok=cmd->tok;
        while (tok->name) {
            if (tok->id==(int)(*v)) {
                if (tok!=cmd->tok) tok--;
                return (char *)tok->name;
            }
            tok++;
        }
    }

    return GetValue(cmd);
}

*/
hi_flyer
alpet,
Думаю вытянет и движок и сдк, разве что ограничение по level_lods пофиксить.
K.D.
Цитата(hi_flyer @ 01.10.2014, 17:45) *
Думаю вытянет и движок и сдк, разве что ограничение по level_lods пофиксить.

Если развивать оффтоп дальше - вытянуть-то вытянет, только какой фпс при этом будет? В игре, на плоской местности сделай rs_stats on и изменяй себе радиус отрисовки травы, наблюдая за кол-вом вершин и фпс в статистике. Получишь приблизительное представление о возможностях движка по геометрии. Именно приблизительное - потому что трава рисуется инстансингом, каким-никаким, что положительно сказывается на фпс.
zxcvx
Цитата(Flammable @ 01.10.2014, 14:27) *
Все необходимое для бенчмарка уже есть в 6638 (кроме дополнительного архива xpatch_03.db). В engine.vc200X сделаны мелкие незначительные правки.


Вот видимо бенчмарк и отличался только паком ресурсов, а так все тоже самое в плане движка.
Nummer
Цитата(zxcvx @ 01.10.2014, 18:00) *
Цитата(Flammable @ 01.10.2014, 14:27) *
Все необходимое для бенчмарка уже есть в 6638 (кроме дополнительного архива xpatch_03.db). В engine.vc200X сделаны мелкие незначительные правки.


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

почему? В нём 4 рендер немного больше грузит ЦП. Значит в нём изменения
zxcvx
Цитата(Nummer @ 01.10.2014, 18:18) *
почему? В нём 4 рендер немного больше грузит ЦП. Значит в нём изменения


Угу. Видимо это из за тестовых функций, а может из за компилятора. На сколько я понимаю ГСЦ не на 2008 и не на 2013 компилировали.
Nummer
Цитата(zxcvx @ 01.10.2014, 18:26) *
Угу. Видимо это из за тестовых функций, а может из за компилятора. На сколько я понимаю ГСЦ не на 2008 и не на 2013 компилировали.


2005 пробовал? Я на ней R2 компилил. Норм прирост фпс на слабых машинах
Nummer
Пойду R3 из ЧН переносить в ТЧ. Скоро отпишусь об успехах =)
Nummer
Кто ТЧ пробовал в 2013 студии компилить? Стоит ли? =)


Для сборки 4 рендера ЗП ставьте на 1 место DX SDK августа 2006, а на второй июнь 2010 . Тогда норм скомпилится, и без лагов попрёт biggrin.gif
Flammable
Цитата(Nummer @ 01.10.2014, 18:18) *
почему? В нём 4 рендер немного больше грузит ЦП. Значит в нём изменения

Нет там изменений.

Цитата(Nummer @ 01.10.2014, 17:26) *
XR_IOConsole.cpp для поддержки русской клавиатуры в консоли , и регистра букв. Может кому и надо

Для ТЧ? Вообще такие штуки принято в виде патчей выкладывать, чтобы можно было у себя применить.
jketiynu
Sorry for my English as usual, but I had a question regarding fixing stealth mechanics.

I've confirmed through looking at the source code for COP that sound suppressors don't do anything at all except modify accuracy and damage, etc. as defined in the config (maybe they just expected all silencer shots would be commented so they had a short range, so they didn't bother doing anything further with them? Seems pretty lazy...)

I believe the biggest problem with stealth is the fact that once you shoot someone that is a member of the squad, that member of the squad as well as the rest of the squad immediately hone in on your position and know where you are.
I'm trying to modify the source so that stealth works better, but I'm not sure if this would be in the code or the scripts. Do you think it's hard-coded or scripted (I'm no good with reading scripts)?

I've seen a few possibilities as to what may cause this (namely hit_memory_manager.cpp) but want to make sure we're all on the same page.
Jein
Цитата(Nummer @ 01.10.2014, 16:26) *
XR_IOConsole.cpp для поддержки русской клавиатуры в консоли , и регистра букв. Может кому и надо biggrin.gif

Как мы раньше без кириллицы, в консоли, жили... А вот как насчет цифровой клавы, подсветки синтаксиса и прозрачного бекграунда? Вообщем аля ЛА, было бы очень даже айс.
VEX
K.D., есть такое предложение по поводу компилятора геометрии, если это возможно, сделать ввиде ключа отключение расчёта террейна. Например -noterrain или типа того. Расчёт лайтмэпа террейна тоже занимает продложительное время, просто после незначительного измениния геометрии при том что первый раз всё скомпилено вместе с террейном, не вижу смысла снова ждать просчёт террейна. Кстати на каком-то старом билде у компилятора геометрии был такой ключ -о, если его написать в батнике, перед запуском компиляции появлялось окошко, с настройками проекта build.prj, и там была опция отключения компиляции террейна и ещё какие-то настройки.
Tron
Ух ты..псевдо-патчер здесь...

Цитата(Nummer @ 01.10.2014, 18:18) *
Цитата(zxcvx @ 01.10.2014, 18:00) *
Цитата(Flammable @ 01.10.2014, 14:27) *
Все необходимое для бенчмарка уже есть в 6638 (кроме дополнительного архива xpatch_03.db). В engine.vc200X сделаны мелкие незначительные правки.


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

почему? В нём 4 рендер немного больше грузит ЦП. Значит в нём изменения

Пройтись diff'ом не пробовал?

Цитата(Nummer @ 01.10.2014, 18:45) *
Цитата(zxcvx @ 01.10.2014, 18:26) *
Угу. Видимо это из за тестовых функций, а может из за компилятора. На сколько я понимаю ГСЦ не на 2008 и не на 2013 компилировали.


2005 пробовал? Я на ней R2 компилил. Норм прирост фпс на слабых машинах

что за бред..
Ронин
Предлагаю в слудеющей версии компиляторов добавить подтверждение выхода, дабы случайно не прервать процесс компилляции.
Nummer
Народ, у кого получалось сталкер на Windows 10 без багов запускать?
RayTwitty
Цитата(Nummer @ 02.10.2014, 19:07) *
Народ, у кого получалось сталкер на Windows 10 без багов запускать?

Кккакой виндоус?? ._.
alpet
Цитата(hi_flyer @ 01.10.2014, 17:45) *
alpet,
Думаю вытянет и движок и сдк, разве что ограничение по level_lods пофиксить.

Ну по факту это получается, надо смешать локации "Припять" и "Рыжий лес" в одну. Затормозиться очень заметно думаю, а уж если деревья будут с листвой... вообще амба.

to all
Пытаюсь разгадать одну проблему в ТЧ, физические объекты какую им массу не назначай - все равно сдвигаются гг словно куски пенопласта. Может что-то делаю не так.

Shocker, загляни в ЛС пжлст.
HikeR
владельцам репозиториев на гитхабе.

с сегодняшнего дня сайт попал в реестр Роскомнадзора. еще не все провайдеры приняли это к сведению, поэтому у кого он пока доступен — синхронизируйтесь и готовьте запасной аэродром.
Nummer
Цитата(Shadows @ 02.10.2014, 20:00) *
Кккакой виндоус?? ._.

preview.windows.com
Modera
Цитата(HikeR @ 02.10.2014, 20:47) *
с сегодняшнего дня сайт попал в реестр Роскомнадзора.

Это за какие заслуги? blink.gif
Nummer
Цитата(Modera @ 02.10.2014, 21:02) *
Цитата(HikeR @ 02.10.2014, 20:47) *
с сегодняшнего дня сайт попал в реестр Роскомнадзора.

Это за какие заслуги? blink.gif


Шутка минутка обо всём говорит laugh.gif

Цитата(HikeR @ 02.10.2014, 20:47) *
владельцам репозиториев на гитхабе.

с сегодняшнего дня сайт попал в реестр Роскомнадзора. еще не все провайдеры приняли это к сведению, поэтому у кого он пока доступен — синхронизируйтесь и готовьте запасной аэродром.

Всё. Убрали гитхаб smile.gif
Flammable
Цитата(HikeR @ 02.10.2014, 20:47) *
с сегодняшнего дня сайт попал в реестр Роскомнадзора. еще не все провайдеры приняли это к сведению, поэтому у кого он пока доступен — синхронизируйтесь и готовьте запасной аэродром.

Не истери.
Единственный заблокированный урл выглядел так: https://github.com/amdf/objidlib/blob/master/suicide.txt
В реестре github.com не значится:


Прогрессивной части юзеров (а другим в этих репозиториях делать нечего) побоку эти левые блокировки. Даже если гитхаб упадет раз и навсегда, ничего не сломается. Распределенные vcs для того и сделаны (не в пример всяким cvs и svn).
HikeR
Цитата(Flammable @ 02.10.2014, 22:10) *
Не истери.

не истерю:


как только начались сработки от самых быстрых провайдеров, так саппорт гитхаба начал чесаться (удалил весь проблемный репозиторий). до этого они с весны игнорировали требования Роскомнадзора.

Цитата(Flammable @ 02.10.2014, 22:10) *
Единственный заблокированный урл

напомни, плиз, сколько процентов отечественных провайдеров имеют оборудование с поддержкой DPI?

Цитата(Flammable @ 02.10.2014, 22:10) *
Даже если гитхаб упадет раз и навсегда, ничего не сломается.

свежо предание. среди этой "прогрессивной части" способных восстановить многопользовательский репозиторий с нарушенной историей еще меньше, чем провайдеров с DPI.

Цитата(Nummer @ 02.10.2014, 21:59) *
Всё. Убрали гитхаб

гы-гы. у меня мобильный провайдер только что включил "к сожалению, запрашиваемый ресурс...", проводной обновляет списки раз в неделю (то есть даже не успел включить).
GHOST
Вопрос к тем,кто занимается чистым небом.Недавно заметил,что не всегда падает на землю болт(анимация броска проигрывается,а летящего на землю болта нет). Это движковое или ошибка в скриптах? Проверялось и возле аномалий и на чистых от них(аномалий) местах.
RayTwitty
Цитата(GHOST @ 02.10.2014, 23:25) *
Недавно заметил,что не всегда падает на землю болт(анимация броска проигрывается,а летящего на землю болта нет). Это движковое или ошибка в скриптах? Проверялось и возле аномалий и на чистых от них(аномалий) местах.

Давний косяк. Скорее всего рассинхронизация стейтов и анимок.
abramcumner
Цитата(alpet @ 02.10.2014, 20:38) *
to all
Пытаюсь разгадать одну проблему в ТЧ, физические объекты какую им массу не назначай - все равно сдвигаются гг словно куски пенопласта. Может что-то делаю не так.

Объектам со скелетом масса через массы костей выставляется.
Flammable
Цитата(HikeR @ 02.10.2014, 23:23) *
Цитата(Flammable @ 02.10.2014, 22:10) *
Не истери.

не истерю:
<поскипано>

https://twitter.com/mksenzov/status/517729173079883776
https://twitter.com/mksenzov/status/517731650642661376
alpet
Цитата(abramcumner @ 02.10.2014, 23:50) *
Объектам со скелетом масса через массы костей выставляется.

Так я вроде и пытаюсь утяжелить элементы физического шелла:
Код
   local ps = obj:get_physics_shell()
    if ps then
       wprintf(" item have physics shell. Current mass = %.3f ", ps:get_mass())
       ps:set_mass(10000) -- CPhysicsShell::setMass
    end -- if ps

Независимо от числа передаваемого в функцию, объект одинаково реагирует на выстрелы из ПМ - немножко сдвигается. Вообще ожидал, если задать отрицательную массу - объект воспарит, но не тут-то было.
macron
Цитата(alpet @ 03.10.2014, 15:38) *
Так я вроде и пытаюсь утяжелить элементы физического шелла:

Массы костей ставятся в акторедиторе. Я так когда-то бочку утяжелял - чтобы нельзя сдвинуть было, ставил 10000. А выставление масс через скрипты, это что-то новое... может тоже надо конкретно кость указывать, если это вообще работает.
alpet
Цитата(macron @ 03.10.2014, 15:51) *
Массы костей ставятся в акторедиторе. Я так когда-то бочку утяжелял - чтобы нельзя сдвинуть было, ставил 10000. А выставление масс через скрипты, это что-то новое... может тоже надо конкретно кость указывать, если это вообще работает.

Все понятно, как оказалось надо было лишь доработать скриптовое API, чтобы масса все-таки передавалась в ODE. Изначально в скриптах вообще таких функций не было.
Когда задал массу элемента -0.1, предмет улетел в космос как-то уж очень стремительно smile.gif
sgs-sd
обяснитпо этим исходникам ...stk-cop-trunk-r8384(~прототип сервера) - март 2012 я то их собрал но толку нет .
Flammable
Цитата(sgs-sd @ 03.10.2014, 21:30) *
но толку нет

this
sgs-sd
все раюотает но чего то не хватает. при запуске exe запускаеться консоль.
macron
Цитата(sgs-sd @ 03.10.2014, 23:13) *
при запуске exe запускаеться консоль.

Выделенный mp-сервер и должен работать как консоль.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.