SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 19/01/2010, 11:50 PM   #21
Walk_M4n
Little Clucker
 
Join Date: Apr 2009
Location: Russia
Posts: 42
Reputation: 0
Default Re: Коллекция функций / макросов

Quote:
Originally Posted by ^Psycho^
//-----------------------------------------------------------------------------------------------------
Находим самый большой ID на сервере.
Quote:
GetHighestID(playerid)
{
new tmp,tmp2;
for(new i = GetMaxPlayers(); i >= 0; i--)
{
if(IsPlayerConnected(i) && PlayerSpawned[i] == 1 && i != playerid)
{
if(tmp == 0)
{
tmp = 1;
tmp2 = i;
}
}
}
return tmp2;
}
Находим самый маленький ID на сервере.
Quote:
GetLowestID(playerid)
{
new tmp;
new tmp2;
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i) && PlayerSpawned[i] == 1 && i != playerid)
{
if(tmp == 0)
{
tmp = 1;
tmp2 = i;
}
}
}
return tmp2;
}
Проверку PlayerSpawned убери
Walk_M4n is offline   Reply With Quote
Old 20/01/2010, 08:50 AM   #22
JesterX
Little Clucker
 
Join Date: Dec 2008
Posts: 5
Reputation: 0
Default Re: Коллекция функций / макросов

Code:
public writeLog(log[], string[]) {
	new entry[256];
	format(entry, sizeof(entry), "%s %s\r\n", date("[%dd.%mm.%yy %hh:%ii:%ss]", gettime()), string);
	new File:hFile = fopen(log, io_append);
	for(new i=0; i<strlen(entry); i++) {
    		fputchar(hFile, entry[i], false);
	}
	fclose(hFile);
}

Функция записывает строку в файл, в простонародии лог-файл. Прекрасно держится русская кодировка.
Для использования необходима фун-я date() от MX_Master

Пример для использования:

main() {writeLog("../game_log.txt", "Hello world! Русские идут ");}
JesterX is offline   Reply With Quote
Old 20/01/2010, 03:51 PM   #23
JesterX
Little Clucker
 
Join Date: Dec 2008
Posts: 5
Reputation: 0
Default Re: Коллекция функций / макросов

Quote:
Originally Posted by S2D.Alone_ (RU)
Функция надеюсь быстрая?
Напиши транслитом) а то у меня закорючки.
JesterX is offline   Reply With Quote
Old 20/01/2010, 05:52 PM   #24
[JIeXa]
Little Clucker
 
Join Date: Jul 2008
Posts: 44
Reputation: 0
Default Re: Коллекция функций / макросов

нет, она не быстрая...
в основном изза функции date, ну и putchar тоже
ибо в более низком языке программирования операции выполняются быстрее. соответственно fwrite быстрее цикличного putchar тут.
в date опять же, куча цикл, операций и всего всего.
гораздо лучше системе получить время с переменок.
опять же функция format чрезвычайно сложная(примерно такая же как scanff by Yless).
при возможности лучше использовать простые соденинения строк.
вот тогда функция будет максимально быстрой(ну почти, есть ещё вариант засунуть её в дллку, что, я думаю, будет ещё быстрее )
[JIeXa] is offline   Reply With Quote
Old 20/01/2010, 06:06 PM   #25
MX_Master
Huge Clucker
 
Join Date: Jul 2007
Posts: 390
Reputation: 5
Default Re: Коллекция функций / макросов

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

вместо моей date() для лога нужно юзать как раз format(), gettime(.,.,.,) и getdate(.,.,.,)
MX_Master is offline   Reply With Quote
Old 21/01/2010, 09:18 AM   #26
noobik
Little Clucker
 
Join Date: Sep 2009
Posts: 2
Reputation: 0
Default Re: Коллекция функций / макросов

Quote:
Originally Posted by [JIeXa
]
...
опять же функция format чрезвычайно сложная(примерно такая же как scanff by Yless).
...
да и еще оптимизации не хватает, например у меня строка длинной N символов, то strlen будет вызвана N раз.
Quote:
Originally Posted by Y_Leѕѕ
...
More than one function call - save it in a variable
...
Code:
/*
Сплиттер.. отличия от стандартного - значительная оптимизация 
( по тестам для одной и той же задачи требует 46-48 процентов от времени оригинальной функции)
*/
split(const strsrc[], strdest[][], delimiter)
{
	new i, li;
	new aNum;
	new len;
	new length = strlen(strsrc);
	while(i < length)
	{
	  if(strsrc[i]==delimiter)
		{
	    	len = strmid(strdest[aNum], strsrc, li, i, 255);
	    	strdest[aNum][len] = 0;
	    	li = i+1;
	    	aNum++;
		}
		i++;
	}
	len = strmid(strdest[aNum], strsrc, li, length, 255);
  	strdest[aNum][len] = 0;
	return 1;
}
noobik is offline   Reply With Quote
Old 09/02/2010, 07:15 AM   #27
[JIeXa]
Little Clucker
 
Join Date: Jul 2008
Posts: 44
Reputation: 0
Default Re: Коллекция функций / макросов

new bool:VehicleInUse[MAX_VEHICLES];
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
VehicleInUse[vehicleid] = true;
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
VehicleInUse[vehicleid] = false;
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if (newstate == PLAYER_STATE_DRIVER) {
VehicleInUse[GetPlayerVehicleID(playerid)] = true;
}
if(oldstate == PLAYER_STATE_DRIVER) {
VehicleInUse[GetPlayerVehicleID(playerid)] = false;
}
return 1;
}
stock SetVehicleModel(m,model) {
new vehid = GetPlayerVehicleID(m);
new Float:fx[7];
if (RaceStart==1 && RaceParticipant[m]==4 && GetPlayerState(m)!=PLAYER_STATE_PASSENGER) {
fx[0] = PF[m], fx[1] = QF[m], fx[2] = RF[m];
fx[3] = RAngle[m], fx[4] = VX[m], fx[5] = VY[m], fx[6] = VZ[m];
} else {
if (IsPlayerInAnyVehicle(m)) {
GetVehiclePos(vehid,fx[0],fx[1],fx[2]);
GetVehicleZAngle(vehid,fx[3]);
GetVehicleVelocity(vehid,fx[4],fx[5],fx[6]);
} else {
GetPlayerPos(m,fx[0],fx[1],fx[2]);
GetPlayerFacingAngle(m,fx[3]);
GetPlayerVelocity(m,fx[4],fx[5],fx[6]);
}
}
if ((GetVehicleModel(vehid) == model) || (model == 0)) return 1;
if (model == 999) { RemovePlayerFromVehicle(m); DestroyVehicle(vehid); return 1; }
if (IsPlayerInAnyVehicle(m)) RemovePlayerFromVehicle(m), DestroyVehicle(vehid);
for (new i=0;i < MAX_VEHICLES;i++) {
if (GetVehicleModel(i) == model && VehicleInUse[i] == false) {
SetVehiclePos(i,fx[0],fx[1],fx[2]);
//SendClientMessage(m,COLOR_RED,"íàøëè òà÷êó ñàæàåì");
PutPlayerInVehicle(m,i,0);
SetVehicleZAngle(i,fx[3]);
SetVehicleVelocity(i,fx[4],fx[5],fx[6]);
return 1;
}
}
vehid = CreateVehicle(model,fx[0],fx[1],fx[2],fx[3],1,1,1000);
PutPlayerInVehicle(m,vehid,0);
SetVehicleZAngle(vehid,fx[3]);
SetVehicleVelocity(vehid,fx[4],fx[5],fx[6]);
//SendClientMessage(m,COLOR_RED,"íå íàøëè òà÷êó ñîçäà¸ì");
return 1;
}


вроде бы vehicleinuse должна быть на 100% правильно настроена, однако всё равнотупит....
[JIeXa] is offline   Reply With Quote
Old 14/02/2010, 05:55 PM   #28
^Woozie^
Big Clucker
 
^Woozie^'s Avatar
 
Join Date: Jul 2007
Posts: 83
Reputation: 15
Default Re: Коллекция функций / макросов

Конвертируем секунды в минуты.

Quote:
ConvertSeconds(seconds) {
new m = seconds/60,s = seconds%60,string[32];
format(string,32,"%02d:%02d",m,s);
return string;
}
Проверяем, существует ли машина на сервере

Quote:
IsVehicleConnected(vehicleid){
new Float,Float:y,Float:z;
GetVehiclePos(vehicleid,x,y,z);
if(x == 0.0 && y == 0.0 && z == 0.0){
return 0;
}
return 1;
}
Считаем сколько машин на сервере

Quote:
CountServerVehicles(){
new c = 0;
for(new i = 0; i < MAX_VEHICLES; i++){
if(IsVehicleConnected(i)){
c++;
}
}
return c;
}
^Woozie^ is offline   Reply With Quote
Old 15/02/2010, 04:41 AM   #29
JesterX
Little Clucker
 
Join Date: Dec 2008
Posts: 5
Reputation: 0
Default Re: Коллекция функций / макросов

Последнею функцию - счётчик, можно сделать экономней:

stock CountCehicles() {
new id = CreateVehicle(...);
return id--;
}
JesterX is offline   Reply With Quote
Old 15/02/2010, 07:06 PM   #30
^Woozie^
Big Clucker
 
^Woozie^'s Avatar
 
Join Date: Jul 2007
Posts: 83
Reputation: 15
Default Re: Коллекция функций / макросов

ещё раз?
^Woozie^ is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
SA-MP для Anderius, Criminal Russia, United и Gostown6 dimonml Русский/Russian 1002 07/07/2017 06:56 PM
Проблема с прорисовкой некоторых объект& ONIXS Русский/Russian 29 23/11/2011 04:24 PM
Символы, буковки, горячая замена ^Woozie^ Русский/Russian 23 27/02/2010 01:25 PM


All times are GMT. The time now is 11:21 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.