Jump to content

Общий мини "HELP ME" топик по скриптингу


Recommended Posts

Здравствуйте. Когда время анимации ставишь на нуль, то пед получает возможность бегать и вообще передвигаться с анимацией. Так вот, а если я ставлю параметр loop на false, то в конце анимации у педа "замораживаются" руки, и отмораживаются только когда он прыгнет, сядет в машину и пр. Так вот, как разморозить их в конце анимации без физ. манипуляций? Пробовал таймером обнулить анимку: setPedAnimation(source) - не помогает. Желательно конечно обнулить её в самом конце.

UP!

Link to comment

Чем отличается использование localPlayer и getLocalPlayer() ? Первое будет более оптимизированее, Верно ? И еще, где невозможно обойтись localPlayer и нужно использовать функцию ?

Link to comment

localPlayer - предопределенная переменная во всех клиентских скриптах.

getLocalPlayer() - функция которая возвращает localPlayer. Ее оставили для совместимости со старыми версиями ресурсов, которые были написаны до введения localPlayer.

Link to comment

В фрироме есть xml со скинами, также там есть ключевые слова к скинам. Можно создать скриптик, который переберет их и возвратит таблицу, где ключ - ид скина, значение - булевое true, что значит мужик.

Link to comment
maleSkins = { 
  [0]   = true; 
  [7]   = true; 
  [14]  = true; 
  [15]  = true; 
  [16]  = true; 
  [17]  = true; 
  [18]  = true; 
  [19]  = true; 
  [20]  = true; 
  [21]  = true; 
  [22]  = true; 
  [23]  = true; 
  [24]  = true; 
  [25]  = true; 
  [26]  = true; 
  [27]  = true; 
  [28]  = true; 
  [29]  = true; 
  [30]  = true; 
  [32]  = true; 
  [33]  = true; 
  [34]  = true; 
  [35]  = true; 
  [36]  = true; 
  [37]  = true; 
  [43]  = true; 
  [44]  = true; 
  [45]  = true; 
  [46]  = true; 
  [47]  = true; 
  [48]  = true; 
  [49]  = true; 
  [50]  = true; 
  [51]  = true; 
  [52]  = true; 
  [57]  = true; 
  [58]  = true; 
  [59]  = true; 
  [60]  = true; 
  [61]  = true; 
  [62]  = true; 
  [66]  = true; 
  [67]  = true; 
  [68]  = true; 
  [70]  = true; 
  [71]  = true; 
  [72]  = true; 
  [73]  = true; 
  [78]  = true; 
  [79]  = true; 
  [80]  = true; 
  [81]  = true; 
  [82]  = true; 
  [83]  = true; 
  [84]  = true; 
  [94]  = true; 
  [95]  = true; 
  [96]  = true; 
  [97]  = true; 
  [98]  = true; 
  [99]  = true; 
  [100] = true; 
  [101] = true; 
  [102] = true; 
  [103] = true; 
  [104] = true; 
  [105] = true; 
  [106] = true; 
  [107] = true; 
  [108] = true; 
  [109] = true; 
  [110] = true; 
  [111] = true; 
  [112] = true; 
  [113] = true; 
  [114] = true; 
  [115] = true; 
  [116] = true; 
  [117] = true; 
  [118] = true; 
  [120] = true; 
  [121] = true; 
  [122] = true; 
  [123] = true; 
  [124] = true; 
  [125] = true; 
  [126] = true; 
  [127] = true; 
  [128] = true; 
  [132] = true; 
  [133] = true; 
  [134] = true; 
  [135] = true; 
  [136] = true; 
  [137] = true; 
  [142] = true; 
  [143] = true; 
  [144] = true; 
  [146] = true; 
  [147] = true; 
  [153] = true; 
  [154] = true; 
  [155] = true; 
  [156] = true; 
  [158] = true; 
  [159] = true; 
  [160] = true; 
  [161] = true; 
  [162] = true; 
  [163] = true; 
  [164] = true; 
  [165] = true; 
  [166] = true; 
  [167] = true; 
  [168] = true; 
  [170] = true; 
  [171] = true; 
  [173] = true; 
  [174] = true; 
  [175] = true; 
  [176] = true; 
  [177] = true; 
  [179] = true; 
  [180] = true; 
  [181] = true; 
  [182] = true; 
  [183] = true; 
  [184] = true; 
  [185] = true; 
  [186] = true; 
  [187] = true; 
  [188] = true; 
  [189] = true; 
  [200] = true; 
  [202] = true; 
  [203] = true; 
  [204] = true; 
  [206] = true; 
  [209] = true; 
  [210] = true; 
  [212] = true; 
  [213] = true; 
  [215] = true; 
  [217] = true; 
  [220] = true; 
  [221] = true; 
  [222] = true; 
  [223] = true; 
  [227] = true; 
  [228] = true; 
  [229] = true; 
  [230] = true; 
  [234] = true; 
  [235] = true; 
  [236] = true; 
  [239] = true; 
  [240] = true; 
  [241] = true; 
  [242] = true; 
  [247] = true; 
  [248] = true; 
  [249] = true; 
  [250] = true; 
  [252] = true; 
  [253] = true; 
  [254] = true; 
  [255] = true; 
  [258] = true; 
  [259] = true; 
  [260] = true; 
  [261] = true; 
  [262] = true; 
  [264] = true; 
  [274] = true; 
  [275] = true; 
  [276] = true; 
  [277] = true; 
  [278] = true; 
  [279] = true; 
  [280] = true; 
  [281] = true; 
  [282] = true; 
  [283] = true; 
  [284] = true; 
  [285] = true; 
  [286] = true; 
  [287] = true; 
  [288] = true; 
} 
  

Link to comment
enum "eWalkingStyle" 
{
    MOVE_PLAYER         = 54;
    MOVE_PLAYER_F       = 55;
    MOVE_PLAYER_M       = 56;
    MOVE_ROCKET         = 57;
    MOVE_ROCKET_F       = 58;
    MOVE_ROCKET_M       = 59;
    MOVE_ARMED          = 60;
    MOVE_ARMED_F        = 61;
    MOVE_ARMED_M        = 62;
    MOVE_BBBAT          = 63;
    MOVE_BBBAT_F        = 64;
    MOVE_BBBAT_M        = 65;
    MOVE_CSAW           = 66;
    MOVE_CSAW_F         = 67;
    MOVE_CSAW_M         = 68;
    MOVE_SNEAK          = 69;
    MOVE_JETPACK        = 70;
    MOVE_MAN            = 118;
    MOVE_SHUFFLE        = 119;
    MOVE_OLDMAN         = 120;
    MOVE_GANG1          = 121;
    MOVE_GANG2          = 122;
    MOVE_OLDFATMAN      = 123;
    MOVE_FATMAN         = 124;
    MOVE_JOGGER         = 125;
    MOVE_DRUNKMAN       = 126;
    MOVE_BLINDMAN       = 127;
    MOVE_SWAT           = 128;
    MOVE_WOMAN          = 129;
    MOVE_SHOPPING       = 130;
    MOVE_BUSYWOMAN      = 131;
    MOVE_SEXYWOMAN      = 132;
    MOVE_PRO            = 133;
    MOVE_OLDWOMAN       = 134;
    MOVE_FATWOMAN       = 135;
    MOVE_JOGWOMAN       = 136;
    MOVE_OLDFATWOMAN    = 137;
    MOVE_SKATE          = 138;
};
 
local SKIN_WALKING_STYLES =
{
    [0]     = MOVE_PLAYER;     
    [1]     = MOVE_MAN;    
    [2]     = MOVE_MAN;    
    [7]     = MOVE_MAN;
    [9]     = MOVE_WOMAN;
    [10]    = MOVE_OLDFATWOMAN;
    [11]    = MOVE_WOMAN;
    [12]    = MOVE_SEXYWOMAN;
    [13]    = MOVE_WOMAN;
    [14]    = MOVE_MAN;
    [15]    = MOVE_MAN;
    [16]    = MOVE_MAN;
    [17]    = MOVE_MAN;
    [18]    = MOVE_MAN;
    [19]    = MOVE_GANG1;
    [20]    = MOVE_MAN;
    [21]    = MOVE_GANG1;
    [22]    = MOVE_GANG2;
    [23]    = MOVE_MAN;
    [24]    = MOVE_MAN;
    [25]    = MOVE_MAN;
    [26]    = MOVE_MAN;
    [27]    = MOVE_MAN;
    [28]    = MOVE_GANG2;
    [29]    = MOVE_MAN;
    [30]    = MOVE_MAN;
    [31]    = MOVE_OLDFATWOMAN;
    [32]    = MOVE_MAN;
    [33]    = MOVE_MAN;
    [34]    = MOVE_MAN;
    [35]    = MOVE_MAN;
    [36]    = MOVE_MAN;
    [37]    = MOVE_MAN;
    [38]    = MOVE_WOMAN;
    [39]    = MOVE_OLDFATWOMAN;
    [40]    = MOVE_SEXYWOMAN;
    [41]    = MOVE_WOMAN;
    [43]    = MOVE_MAN;
    [44]    = MOVE_MAN;
    [45]    = MOVE_MAN;
    [46]    = MOVE_MAN;
    [47]    = MOVE_MAN;
    [48]    = MOVE_MAN;
    [49]    = MOVE_OLDMAN;
    [50]    = MOVE_MAN;
    [51]    = MOVE_MAN;
    [52]    = MOVE_MAN;
    [53]    = MOVE_OLDWOMAN;
    [54]    = MOVE_OLDWOMAN;
    [55]    = MOVE_WOMAN;
    [56]    = MOVE_WOMAN;
    [57]    = MOVE_MAN;
    [58]    = MOVE_MAN;
    [59]    = MOVE_MAN;
    [60]    = MOVE_MAN;
    [61]    = MOVE_MAN;
    [62]    = MOVE_OLDMAN;
    [63]    = MOVE_PRO;
    [64]    = MOVE_PRO;
    [66]    = MOVE_MAN;
    [67]    = MOVE_MAN;
    [68]    = MOVE_MAN;
    [69]    = MOVE_WOMAN;
    [70]    = MOVE_MAN;
    [71]    = MOVE_MAN;
    [72]    = MOVE_MAN;
    [73]    = MOVE_MAN;
    [75]    = MOVE_PRO;
    [76]    = MOVE_SEXYWOMAN;
    [77]    = MOVE_MAN;
    [78]    = MOVE_MAN;
    [79]    = MOVE_MAN;
    [80]    = MOVE_MAN;
    [81]    = MOVE_MAN;
    [82]    = MOVE_MAN;
    [83]    = MOVE_MAN;
    [84]    = MOVE_MAN;
    [85]    = MOVE_PRO;
    [87]    = MOVE_SEXYWOMAN;
    [88]    = MOVE_OLDWOMAN;
    [89]    = MOVE_OLDFATWOMAN;
    [90]    = MOVE_JOGWOMAN;
    [91]    = MOVE_SEXYWOMAN;
    [92]    = MOVE_SKATE;
    [93]    = MOVE_SEXYWOMAN;
    [94]    = MOVE_MAN;
    [95]    = MOVE_MAN;
    [96]    = MOVE_JOGGER;
    [97]    = MOVE_JOGGER;
    [98]    = MOVE_MAN;
    [99]    = MOVE_SKATE;
    [100]   = MOVE_MAN;
    [101]   = MOVE_MAN;
    [102]   = MOVE_GANG1;
    [103]   = MOVE_GANG2;
    [104]   = MOVE_GANG1;
    [105]   = MOVE_GANG2;
    [106]   = MOVE_GANG1;
    [107]   = MOVE_GANG2;
    [108]   = MOVE_GANG1;
    [109]   = MOVE_GANG2;
    [110]   = MOVE_GANG1;
    [111]   = MOVE_MAN;
    [112]   = MOVE_MAN;
    [113]   = MOVE_MAN;
    [114]   = MOVE_GANG1;
    [115]   = MOVE_GANG2;
    [116]   = MOVE_GANG1;
    [117]   = MOVE_MAN;
    [118]   = MOVE_MAN;
    [120]   = MOVE_MAN;
    [121]   = MOVE_GANG1;
    [122]   = MOVE_GANG2;
    [123]   = MOVE_GANG1;
    [124]   = MOVE_GANG1;
    [125]   = MOVE_MAN;
    [126]   = MOVE_MAN;
    [127]   = MOVE_MAN;
    [128]   = MOVE_MAN;
    [129]   = MOVE_OLDWOMAN;
    [130]   = MOVE_OLDWOMAN;
    [131]   = MOVE_SEXYWOMAN;
    [132]   = MOVE_MAN;
    [133]   = MOVE_MAN;
    [134]   = MOVE_OLDMAN;
    [135]   = MOVE_MAN;
    [136]   = MOVE_MAN;
    [137]   = MOVE_MAN;
    [138]   = MOVE_WOMAN;
    [139]   = MOVE_WOMAN;
    [140]   = MOVE_WOMAN;
    [141]   = MOVE_BUSYWOMAN;
    [142]   = MOVE_MAN;
    [143]   = MOVE_GANG1;
    [144]   = MOVE_GANG2;
    [145]   = MOVE_WOMAN;
    [146]   = MOVE_MAN;
    [147]   = MOVE_MAN;
    [148]   = MOVE_BUSYWOMAN;
    [150]   = MOVE_BUSYWOMAN;
    [151]   = MOVE_SEXYWOMAN;
    [152]   = MOVE_PRO;
    [153]   = MOVE_MAN;
    [154]   = MOVE_MAN;
    [155]   = MOVE_MAN;
    [156]   = MOVE_MAN;
    [157]   = MOVE_WOMAN;
    [158]   = MOVE_MAN;
    [159]   = MOVE_MAN;
    [160]   = MOVE_OLDMAN;
    [161]   = MOVE_MAN;
    [162]   = MOVE_OLDMAN;
    [163]   = MOVE_MAN;
    [164]   = MOVE_MAN;
    [165]   = MOVE_MAN;
    [166]   = MOVE_MAN;
    [167]   = MOVE_MAN;
    [168]   = MOVE_MAN;
    [169]   = MOVE_SEXYWOMAN;
    [170]   = MOVE_MAN;
    [171]   = MOVE_MAN;
    [172]   = MOVE_BUSYWOMAN;
    [173]   = MOVE_GANG1;
    [174]   = MOVE_GANG2;
    [175]   = MOVE_GANG1;
    [176]   = MOVE_MAN;
    [177]   = MOVE_MAN;
    [178]   = MOVE_SEXYWOMAN;
    [179]   = MOVE_MAN;
    [180]   = MOVE_MAN;
    [181]   = MOVE_MAN;
    [182]   = MOVE_MAN;
    [183]   = MOVE_MAN;
    [184]   = MOVE_MAN;
    [185]   = MOVE_MAN;
    [186]   = MOVE_MAN;
    [187]   = MOVE_MAN;
    [188]   = MOVE_MAN;
    [189]   = MOVE_MAN;
    [190]   = MOVE_BUSYWOMAN;
    [191]   = MOVE_WOMAN;
    [192]   = MOVE_SEXYWOMAN;
    [193]   = MOVE_SEXYWOMAN;
    [194]   = MOVE_SEXYWOMAN;
    [195]   = MOVE_WOMAN;
    [196]   = MOVE_OLDWOMAN;
    [197]   = MOVE_OLDWOMAN;
    [198]   = MOVE_WOMAN;
    [199]   = MOVE_WOMAN;
    [200]   = MOVE_MAN;
    [201]   = MOVE_WOMAN;
    [202]   = MOVE_MAN;
    [203]   = MOVE_MAN;
    [204]   = MOVE_MAN;
    [205]   = MOVE_WOMAN;
    [206]   = MOVE_MAN;
    [207]   = MOVE_PRO;
    [209]   = MOVE_OLDMAN;
    [210]   = MOVE_OLDMAN;
    [211]   = MOVE_WOMAN;
    [212]   = MOVE_MAN;
    [213]   = MOVE_MAN;
    [214]   = MOVE_WOMAN;
    [215]   = MOVE_WOMAN;
    [216]   = MOVE_WOMAN;
    [217]   = MOVE_MAN;
    [218]   = MOVE_WOMAN;
   
Link to comment
    local skinID = { 
    [280] = true, 
    [281] = true, 
    [282] = true, 
    [283] = true, 
    [284] = true, 
    [288] = true, 
    [228] = true, 
    [286] = true 
    } 
     
    local skinIDrnd = { 
    {280}, 
    {281}, 
    {282}, 
    {283}, 
    {284}, 
    {288}, 
    {228}, 
    {286} 
    } 
     
    function giveWeapSec ( player, cmd ) 
    if ( isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( player )), aclGetGroup ( "Security" ) )  
  
) then 
        if skinID [ getElementModel ( player ) ] ~= nil then 
            setPedSkin ( player, skinIDrnd[ math.random ( 1, #skinIDrnd ) ] ) 
                giveWeapon ( player, 31, 300, true ) 
                giveWeapon ( player, 24, 90, true ) 
                setElementHealth ( player, 100 ) 
                setPedArmor ( player, 100 ) 
            else 
                giveWeapon ( player, 31, 300, true ) 
                giveWeapon ( player, 24, 90, true ) 
                setElementHealth ( player, 100 ) 
                setPedArmor ( player, 100 ) 
        end 
    end 
    end 
    addCommandHandler( "gwSec", giveWeapSec ) 

Не выдается рандомный скин. Наверняка проблема в извлечением элементов таблицы.

И как не делать 2 таблицы, а пользоваться одной, в данном случае, подскажите. Спасибо.:)

Link to comment

1) Используете hasObjectPermissionTo

2) Можно просто if skinID [ getElementModel ( player ) ] then

3) skinIDrnd[ math.random ( 1, #skinIDrnd ) ] возвращает таблицу. Потому что вы так создали таблицу. Этот вариант ее будет рабочим.

local skinIDrnd = { 280, 281, 282, 283, 284, 288, 228, 286, } 

Link to comment

Здрасти. Реализую свою систему неймтэгов над головами педов. На странице вики https://wiki.multitheftauto.com/wiki/GetPedBonePosition приведен пример реализации. Так вот, в том примере нет никаких колшейпов, а цикл просто перебирает всех игроков. Я решил реализовать с колшейпами:

в начале рендера запихал создание колшейпа на позиции игрока, а в конце - удаление, после создания уже функцией getElementsWithinColShape брал всех игроков в этом колшейпе и создавал dx'ы (нэймтэги). Как оказалось, не работает(!). Я так и не понял почему, т.к. сам колшейп создается, и это видно если его не удалять в конце, а в консоли прописать "/showcol". (в итоге колшейпы бесконечно размножались)

Позже я решил объявить колшейп в начале клиента, а после спавна приаттачить его к игроку и потом брать всех игроков в нем функцией getElementsWithinColShape - сработало.

Но меня терзают сомненья:

так как экономичнее и быстрее? Может в одном случае нагружается сервер, а в другом - клиент? Или один из способов сам по себе экономичнее и самый грамотный, проверенный годами? Объясните.

Link to comment
Здрасти. Реализую свою систему неймтэгов над головами педов. На странице вики https://wiki.multitheftauto.com/wiki/GetPedBonePosition приведен пример реализации. Так вот, в том примере нет никаких колшейпов, а цикл просто перебирает всех игроков. Я решил реализовать с колшейпами:

в начале рендера запихал создание колшейпа на позиции игрока, а в конце - удаление, после создания уже функцией getElementsWithinColShape брал всех игроков в этом колшейпе и создавал dx'ы (нэймтэги). Как оказалось, не работает(!). Я так и не понял почему, т.к. сам колшейп создается, и это видно если его не удалять в конце, а в консоли прописать "/showcol". (в итоге колшейпы бесконечно размножались)

Позже я решил объявить колшейп в начале клиента, а после спавна приаттачить его к игроку и потом брать всех игроков в нем функцией getElementsWithinColShape - сработало.

Но меня терзают сомненья:

так как экономичнее и быстрее? Может в одном случае нагружается сервер, а в другом - клиент? Или один из способов сам по себе экономичнее и самый грамотный, проверенный годами? Объясните.

По-моему в использовании колшейп нет нужды. Рендерить неймтаг как показано в примере лучший вариант.

Link to comment

1) Вариант с колшейпами, при правильной реализации, работает и быстрее и по памяти экономичнее.

2) Вычислять расстояние между точками лучше функцией getDistanceBetweenPoints3D. Она выполняется на более низком уровне и производит расчеты быстрее.

Link to comment
1) Вариант с колшейпами, при правильной реализации, работает и быстрее и по памяти экономичнее.

2) Вычислять расстояние между точками лучше функцией getDistanceBetweenPoints3D. Она выполняется на более низком уровне и производит расчеты быстрее.

А если учесть то, что колшейпы присоединены к игрокам - это можно назвать правильной реализацией?

Link to comment

Ещё как вариант делать выборку элементов в стриме через функцию getElementsByType. Третий аргумент streamedIn на true.

И ещё как вариант сделать эту таблицу локальной и не вызывать эту функцию каждый раз при выборке. Это сэкономит 1-10мс в зависимости от размера таблицы.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...