SA-MP Forums Archive
Скриптинг курилка - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Скриптинг курилка (/showthread.php?tid=111279)



Re: Скриптинг курилка - Diman777 - 19.08.2016

хз, кинь код


Re: Скриптинг курилка - Andrey_Kiryuhin - 19.08.2016

Quote:
Originally Posted by Diman777
View Post
хз, кинь код
PHP Code:
new rowsfields;
    
cache_get_data(rowsfields);
    new 
string2[30];
    for(new 
idx 1idx <= rowsidx++)
    {
        if(
idx MAXORGCAR) break;
        
OrgCarInfo[idx][orgcID] = cache_get_field_content_int(idx-1,"ID",cMySQL);
        
OrgCarInfo[idx][orgcFrac] = cache_get_field_content_int(idx-1,"Frac",cMySQL);
        
OrgCarInfo[idx][orgcRank] = cache_get_field_content_int(idx-1,"Rank",cMySQL);
        
OrgCarInfo[idx][orgcCity] = cache_get_field_content_int(idx-1,"City",cMySQL);
        
OrgCarInfo[idx][orgcModel] = cache_get_field_content_int(idx-1,"Model",cMySQL);
        
OrgCarInfo[idx][orgCarPos][0] = cache_get_field_content_float(idx-1,"posX",cMySQL);
        
OrgCarInfo[idx][orgCarPos][1] = cache_get_field_content_float(idx-1,"posY",cMySQL);
        
OrgCarInfo[idx][orgCarPos][2] = cache_get_field_content_float(idx-1,"posZ",cMySQL);
        
OrgCarInfo[idx][orgCarPos][3] = cache_get_field_content_float(idx-1,"posA",cMySQL);
        
OrgCarInfo[idx][orgcColor1] = cache_get_field_content_int(idx-1,"Color1",cMySQL);
        
OrgCarInfo[idx][orgcColor2] = cache_get_field_content_int(idx-1,"Color2",cMySQL);
        
OrgCarInfo[idx][orgcInt] = cache_get_field_content_int(idx-1,"Int",cMySQL);
        
OrgCarInfo[idx][orgcWorld] = cache_get_field_content_int(idx-1,"World",cMySQL);
        
OrgCarInfo[idx][orgcNumberColor] = FracColors[OrgCarInfo[idx][orgcFrac]];
        
OrgCarInfo[idx][orgcCar] = P_AddStaticVehicleEx(OrgCarInfo[idx][orgcModel],OrgCarInfo[idx][orgCarPos][0],OrgCarInfo[idx][orgCarPos][1],OrgCarInfo[idx][orgCarPos][2],OrgCarInfo[idx][orgCarPos][3],
            
OrgCarInfo[idx][orgcColor1],OrgCarInfo[idx][orgcColor2],7200);
        
//OnVehicleSpawn(OrgCarInfo[idx][orgcCar]);
        
        
if(OrgCarInfo[idx][orgcInt] > 0LinkVehicleToInterior(OrgCarInfo[idx][orgcCar],OrgCarInfo[idx][orgcInt]);
        if(
OrgCarInfo[idx][orgcWorld] > 0SetVehicleVirtualWorld(OrgCarInfo[idx][orgcCar],OrgCarInfo[idx][orgcWorld]);
        switch(
OrgCarInfo[idx][orgcCity])
        {
            case 
1format(string2,sizeof(string2),"[LA%dUS]",idx);
            case 
2format(string2,sizeof(string2),"[SF%dUS]",idx);
            case 
3format(string2,sizeof(string2),"[LV%dUS]",idx);
            case 
4format(string2,sizeof(string2),"[CA%dUS]",idx);
        }
        
SetVehicleNumberPlate(OrgCarInfo[idx][orgcCar],string2);
        
OrgCarInfo[idx][orgcNumber] = CreateDynamic3DTextLabel(string2,0xAFAFAF90,0,0,0.0,15.0,INVALID_PLAYER_ID,OrgCarInfo[idx][orgcCar],1);
        if(
OrgCarInfo[idx][orgcFrac] == 15)
        {
            
format(string2,sizeof(string2),"%s",OrgInfo[OrgCarInfo[idx][orgcFrac]][orgName]);
            
OrgCarInfo[idx][orgcText] = CreateDynamic3DTextLabel(string2,0xFFA500FF,0,0,1.25,15.0,INVALID_PLAYER_ID,OrgCarInfo[idx][orgcCar],1);
        }
        
Fuel[idx] = VehicleParams[OrgCarInfo[idx][orgcModel]-400][vMaxFuel];
        
Engine[idx] = false;
        
Light[idx] = false;
        
OrgCarInfo[idx][orgLightOnOff] = false;
        
OrgCarInfo[idx][orgpLight] = 0;
        
OrgCarInfo[idx][orgpMilage] = 0;
        
OrgCarInfo[idx][orgcLock] = true;
        
OrgCarInfo[idx][orgcMax] = false;
        
TOTALORGCAR idx;
    }
    
printf(" * [Load System] : Çàãðóçêà ñèñòåìû ìàøèí ôðàêöèé ïðîøëà óäà÷íî: %d øò.",TOTALORGCAR);
    return 
true;




Re: Скриптинг курилка - Diman777 - 19.08.2016

PHP Code:
OrgCarInfo[idx][orgcCar] = P_AddStaticVehicleEx(OrgCarInfo[idx][orgcModel],OrgCarInfo[idx][orgCarPos][0],OrgCarInfo[idx][orgCarPos][1],OrgCarInfo[idx][orgCarPos][2],OrgCarInfo[idx][orgCarPos][3],OrgCarInfo[idx][orgcColor1],OrgCarInfo[idx][orgcColor2],7200);
printf("idx = %d, orgcCar = %d"idxOrgCarInfo[idx][orgcCar]); 
когда индекс idx уже 255, то глянь не INVALID_VEHICLE_ID ли созданная тачка? Хотя врят ли в этом проблема, ты ж пишешь, что после 255 норм создались. Но всё равно сделай так.

И почему вот это в комменте?
PHP Code:
//OnVehicleSpawn(OrgCarInfo[idx][orgcCar]); 



Re: Скриптинг курилка - Andrey_Kiryuhin - 23.08.2016

Quote:
Originally Posted by Diman777
View Post
PHP Code:
OrgCarInfo[idx][orgcCar] = P_AddStaticVehicleEx(OrgCarInfo[idx][orgcModel],OrgCarInfo[idx][orgCarPos][0],OrgCarInfo[idx][orgCarPos][1],OrgCarInfo[idx][orgCarPos][2],OrgCarInfo[idx][orgCarPos][3],OrgCarInfo[idx][orgcColor1],OrgCarInfo[idx][orgcColor2],7200);
printf("idx = %d, orgcCar = %d"idxOrgCarInfo[idx][orgcCar]); 
когда индекс idx уже 255, то глянь не INVALID_VEHICLE_ID ли созданная тачка? Хотя врят ли в этом проблема, ты ж пишешь, что после 255 норм создались. Но всё равно сделай так.

И почему вот это в комменте?
PHP Code:
//OnVehicleSpawn(OrgCarInfo[idx][orgcCar]); 
Д думал что паблик не воспринимает 255 машину, т.к тоже подумал INVALID_VEHICLE_ID


Re: Скриптинг курилка - Diman777 - 23.08.2016

Как все знают 1 сек = 1000 млс. Я время повторения поставил в таймере 1 млс, в надежде увидеть в логе 1000 вызовов, но в логе вызовов всего 198. Почему так?
PHP Code:
SetTimerEx("SpentTimeUpdate"11"d"playerid);
forward SpentTimeUpdate(playerid);
public 
SpentTimeUpdate(playerid)
{
    print(
"test");

Цель - Мне нужно сохранять миллисекунды. Как же тогда вычислять?


Re: Скриптинг курилка - ZiGGi - 23.08.2016

Quote:
Originally Posted by Diman777
View Post
Как все знают 1 сек = 1000 млс. Я время повторения поставил в таймере 1 млс, в надежде увидеть в логе 1000 вызовов, но в логе вызовов всего 198. Почему так?
Время вызовов в таймерах имеет погрешность, примерно 25%. Об этом написано на wiki.

Quote:
Originally Posted by Diman777
View Post
Цель - Мне нужно сохранять миллисекунды. Как же тогда вычислять?
https://sampwiki.blast.hk/wiki/GetTickCount


Re: Скриптинг курилка - Diman777 - 23.08.2016

Quote:
Originally Posted by ZiGGi
View Post
примерно 25%
"Звезда в шоке" как говорится

Quote:
Originally Posted by ZiGGi
View Post
Да, спс. Вот нашёл пример - http://forum.sa-mp.com/showpost.php?...9&postcount=14 (это на будущее если кому-то надо)


Re: Скриптинг курилка - ZiGGi - 23.08.2016

Quote:
Originally Posted by Diman777
View Post
Да, спс. Вот нашёл пример - http://forum.sa-mp.com/showpost.php?...9&postcount=14 (это на будущее если кому-то надо)
Только опять же учитывай, что функция GetTickCount не защищена от переполнения, поэтому при работе сервера более суток возможны проблемы. Пример того, как это можно исправить здесь.


Re: Скриптинг курилка - Diman777 - 23.08.2016

А если предположим я за двое суток - всего раза 3 юзанул GetTickCount, то всё равно будет проблема?


Re: Скриптинг курилка - stabker - 23.08.2016

Вообще-то, ~24.8 суток может работать без переполнения

2147483647/60000/60/24


Re: Скриптинг курилка - ZiGGi - 23.08.2016

Quote:
Originally Posted by Diman777
View Post
А если предположим я за двое суток - всего раза 3 юзанул GetTickCount, то всё равно будет проблема?
Количество вызовов GetTickCount не влияет на возвращаемый результат, функция возвращает количество миллисекунд, прошедшее с запуска сервера (то есть компьютера, на котором запускается SA-MP сервер).

Quote:
Originally Posted by stabker
View Post
Вообще-то, ~24.8 суток может работать без переполнения

2147483647/60000/60/24
Верно, попутал.


Re: Скриптинг курилка - Diman777 - 23.08.2016

Quote:
Originally Posted by ZiGGi
View Post
Пример того, как это можно исправить здесь.
Протестил, вроде работает. Надеюсь, что не подведёт


Re: Скриптинг курилка - DartfoL - 23.08.2016

Quote:
Originally Posted by ZiGGi
View Post
(то есть компьютера, на котором запускается SA-MP сервер).
поэтому вместо GetTickCount() лучше юзать tickCount() - эта функция возвращает количество миллисекунд именно с запуска сервера самп (хотя на линуксе GetTickCount() равносилен tickCount())


Re: Скриптинг курилка - ZiGGi - 24.08.2016

Quote:
Originally Posted by DartfoL
View Post
поэтому вместо GetTickCount() лучше юзать tickCount() - эта функция возвращает количество миллисекунд именно с запуска сервера самп (хотя на линуксе GetTickCount() равносилен tickCount())
tickcount() медленнее, лучше использовать предоставленный мною "фикс" переполнения.


Re: Скриптинг курилка - themakar - 26.08.2016

Есть ли какой то аналог SPECIAL_ACTION_CARRY (0.3x) для 0.3e (CRMP)?


Re: Скриптинг курилка - Andrey_Kiryuhin - 26.08.2016

Почему OnVehicleDeath не автовызывается для трейлеров когда он находится в воде?


Re: Скриптинг курилка - ZiGGi - 26.08.2016

Quote:
Originally Posted by Andrey_Kiryuhin
View Post
Почему OnVehicleDeath не автовызывается для трейлеров когда он находится в воде?
OnVehicleDeath не вызывается ни для какого уничтоженного транспорта, в котором не сидел игрок. Это баг.


Re: Скриптинг курилка - Andrey_Kiryuhin - 26.08.2016

Quote:
Originally Posted by ZiGGi
View Post
OnVehicleDeath не вызывается ни для какого уничтоженного транспорта, в котором не сидел игрок. Это баг.
Душевно Чет тухнут порталы, бывают такие глупые вопросы в голове создаются, а ответа так и не находишь. За то сложные проблемы решаешь как орешки щелкать!


Re: Скриптинг курилка - Andrey_Kiryuhin - 26.08.2016

А что можешь сказать про SetPlayerSpecialAction 68, даже струйка мочи не появляется.
В чем суть может быть?


Re: Скриптинг курилка - Diman777 - 27.08.2016

Quote:
Originally Posted by Andrey_Kiryuhin
View Post
SetPlayerSpecialAction 68, даже струйка мочи не появляется.
а у меня работает, значит ты не правильно используешь видимо