public LoadProperty() { new arrCoords[47][64]; new strFromFile2[256]; new File: file = fopen("house/property.cfg", io_read); if (file) { new idx; while (idx < sizeof(HouseInfo)) { fread(file, strFromFile2); split(strFromFile2, arrCoords, ','); HouseInfo[idx][hEntrancex] = floatstr(arrCoords[0]); HouseInfo[idx][hEntrancey] = floatstr(arrCoords[1]); HouseInfo[idx][hEntrancez] = floatstr(arrCoords[2]); HouseInfo[idx][hExitx] = floatstr(arrCoords[3]); HouseInfo[idx][hExity] = floatstr(arrCoords[4]); HouseInfo[idx][hExitz] = floatstr(arrCoords[5]); HouseInfo[idx][hHealthx] = strval(arrCoords[6]); HouseInfo[idx][hHealthy] = strval(arrCoords[7]); HouseInfo[idx][hHealthz] = strval(arrCoords[8]); HouseInfo[idx][hArmourx] = strval(arrCoords[9]); HouseInfo[idx][hArmoury] = strval(arrCoords[10]); HouseInfo[idx][hArmourz] = strval(arrCoords[11]); //printf("HouseInfo hEntrancez %f",HouseInfo[idx][hEntrancez]); strmid(HouseInfo[idx][hOwner], arrCoords[12], 0, strlen(arrCoords[12]), 255); strmid(HouseInfo[idx][hDiscription], arrCoords[13], 0, strlen(arrCoords[13]), 255); HouseInfo[idx][hValue] = strval(arrCoords[14]); HouseInfo[idx][hHel] = strval(arrCoords[15]); HouseInfo[idx][hArm] = strval(arrCoords[16]); HouseInfo[idx][hInt] = strval(arrCoords[17]); HouseInfo[idx][hLock] = strval(arrCoords[18]); HouseInfo[idx][hOwned] = strval(arrCoords[19]); HouseInfo[idx][hRooms] = strval(arrCoords[20]); HouseInfo[idx][hRent] = strval(arrCoords[21]); HouseInfo[idx][hRentabil] = strval(arrCoords[22]); HouseInfo[idx][hTakings] = strval(arrCoords[23]); HouseInfo[idx][hVec] = strval(arrCoords[24]); if(HouseInfo[idx][hVec] == 457) { HouseInfo[idx][hVec] = 411; } HouseInfo[idx][hVcol1] = strval(arrCoords[25]); HouseInfo[idx][hVcol2] = strval(arrCoords[26]); HouseInfo[idx][hDate] = strval(arrCoords[27]); HouseInfo[idx][hLevel] = strval(arrCoords[28]); HouseInfo[idx][hWorld] = strval(arrCoords[29]); HouseInfo[idx][hPjob] = strval(arrCoords[30]); HouseInfo[idx][hWheel] = strval(arrCoords[31]); HouseInfo[idx][hSpoiler] = strval(arrCoords[32]); HouseInfo[idx][hHood] = strval(arrCoords[33]); HouseInfo[idx][hRoof] = strval(arrCoords[34]); HouseInfo[idx][hSideskirt] = strval(arrCoords[35]); HouseInfo[idx][hLamps] = strval(arrCoords[36]); HouseInfo[idx][hNitro] = strval(arrCoords[37]); HouseInfo[idx][hExhaust] = strval(arrCoords[38]); HouseInfo[idx][hStereo] = strval(arrCoords[39]); HouseInfo[idx][hHydraulics] = strval(arrCoords[40]); HouseInfo[idx][hFrontbumper] = strval(arrCoords[41]); HouseInfo[idx][hRearbumper] = strval(arrCoords[42]); HouseInfo[idx][hVentright] = strval(arrCoords[43]); HouseInfo[idx][hVentleft] = strval(arrCoords[44]); HouseInfo[idx][hNeonleft] = strval(arrCoords[45]); HouseInfo[idx][hNeonright] = strval(arrCoords[46]); printf("Информация о доме:%d Владелец:%s",idx,HouseInfo[idx][hOwner]); idx++; } fclose(file); } return true; }
public LoadFlats() { new arrCoords[17][64]; new strFromFile2[256]; new File: file = fopen("house/flats.cfg", io_read); if (file) { new idx; while (idx < sizeof(FlatsInfo)) { fread(file, strFromFile2); split(strFromFile2, arrCoords, ','); FlatsInfo[idx][fOwned] = strval(arrCoords[0]); strmid(FlatsInfo[idx][fOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255); FlatsInfo[idx][fEntrancex] = floatstr(arrCoords[2]); FlatsInfo[idx][fEntrancey] = floatstr(arrCoords[3]); FlatsInfo[idx][fEntrancez] = floatstr(arrCoords[4]); FlatsInfo[idx][fExitx] = floatstr(arrCoords[5]); FlatsInfo[idx][fExity] = floatstr(arrCoords[6]); FlatsInfo[idx][fExitz] = floatstr(arrCoords[7]); FlatsInfo[idx][fInt] = strval(arrCoords[8]); FlatsInfo[idx][fVirtWorld] = strval(arrCoords[9]); FlatsInfo[idx][fValue] = strval(arrCoords[10]); FlatsInfo[idx][fLock] = strval(arrCoords[11]); FlatsInfo[idx][fRent] = strval(arrCoords[12]); FlatsInfo[idx][fRentabil] = strval(arrCoords[13]); FlatsInfo[idx][fTakings] = strval(arrCoords[14]); FlatsInfo[idx][fDate] = strval(arrCoords[15]); FlatsInfo[idx][fLevel] = strval(arrCoords[16]); printf("Квартира: [%d] | Владелец: [%s]",idx,FlatsInfo[idx][fOwner]); idx++; } fclose(file); } return true; }
public LoadBizz() { new arrCoords[24][64]; new strFromFile2[256]; new File: file = fopen("logs/bizz.cfg", io_read); if (file) { new idx; while (idx < sizeof(BizzInfo)) { fread(file, strFromFile2); split(strFromFile2, arrCoords, '|'); BizzInfo[idx][bOwned] = strval(arrCoords[0]); strmid(BizzInfo[idx][bOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255); strmid(BizzInfo[idx][bMessage], arrCoords[2], 0, strlen(arrCoords[2]), 255); strmid(BizzInfo[idx][bExtortion], arrCoords[3], 0, strlen(arrCoords[3]), 255); BizzInfo[idx][bEntranceX] = floatstr(arrCoords[4]); BizzInfo[idx][bEntranceY] = floatstr(arrCoords[5]); BizzInfo[idx][bEntranceZ] = floatstr(arrCoords[6]); BizzInfo[idx][bExitX] = floatstr(arrCoords[7]); BizzInfo[idx][bExitY] = floatstr(arrCoords[8]); BizzInfo[idx][bExitZ] = floatstr(arrCoords[9]); BizzInfo[idx][bBuyPrice] = strval(arrCoords[10]); BizzInfo[idx][bEntranceCost] = strval(arrCoords[11]); BizzInfo[idx][b2Till] = strval(arrCoords[12]); BizzInfo[idx][bLocked] = strval(arrCoords[13]); BizzInfo[idx][bInterior] = strval(arrCoords[14]); BizzInfo[idx][bProducts] = strval(arrCoords[15]); BizzInfo[idx][bMaxProducts] = strval(arrCoords[16]); BizzInfo[idx][bPriceProd] = strval(arrCoords[17]); BizzInfo[idx][b2Till] = strval(arrCoords[18]); BizzInfo[idx][bCena] = strval(arrCoords[19]); BizzInfo[idx][bBarX] = floatstr(arrCoords[20]); BizzInfo[idx][bBarY] = floatstr(arrCoords[21]); BizzInfo[idx][bBarZ] = floatstr(arrCoords[22]); BizzInfo[idx][bMafia] = strval(arrCoords[23]); //BizzInfo[idx][bWorld] = strval(arrCoords[19]); idx++; } fclose(file); } return true; }
public CheckCar() {
new string[100], set;
for(new i; i < GetMaxPlayers(); i++) {
if(!IsPlayerConnected(i)) continue;
if(PlayerInfo[i][pCashs] != GetPlayerMoney(i)) {
ResetPlayerMoney(i);
GivePlayerMoney(i, PlayerInfo[i][pCashs]);
}
if(PlayerEx[i][ChekEx] == PlayerEx[i][TickEx]) if(PlayerEx[i][pSpawnEx] == true) PlayerEx[i][AFKEx] = true;
PlayerEx[i][ChekEx] = PlayerEx[i][TickEx];
if(IDVEH[i] != -1 && IsPlayerInAnyVehicle(i) && !UseEnter[i] && IDVEH[i] != GetPlayerVehicleID(i)) Punish(i);
}
for(new x; x < sizeof(mehanik); x++) {
set = 0;
for(new i; i < GetMaxPlayers(); i++) {
if(!IsPlayerConnected(i)) continue;
if(GetPVarInt(i,"MexKo") > -1 && GetPlayerVehicleID(i) == mehanik[x] && GetPlayerVehicleID(i) == GetPVarInt(i,"arenda")) {
set++;
format(string, sizeof(string), "На работе: %s", SBizzInfo[GetPVarInt(i,"MexKo")][sbMessage]);
Update3DTextLabelText(Meh3d[x], 0x008080FF, string);
}
}
if(set == 0) Update3DTextLabelText(Meh3d[x], 0x008080FF, "Не работает!");
}
for(new j=0; j<MAX_VEHICLES; j++) {
if(zaved[j] == true) {
if(Fuell[j] >= 0) {
Fuell[j] -= 0.2;
for(new i= 0; i < GetMaxPlayers(); i++) {
if(!IsPlayerConnected(i)) continue;
if(j == caridhouse[i]) PlayerInfo[i][pFuelcar] = Fuell[j];
}
}
else {
if(GetVehicleModel(j) != 462 && GetVehicleModel(j) != 510 && GetVehicleModel(j) != 509 && GetVehicleModel(j) != 481) {
GetVehicleParamsEx(j,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(j,VEHICLE_PARAMS_OFF,VEHICLE_PARAMS_OFF,alarm,doors,bonnet,boot,objective);
zaved[j] = false;
}
}
}
}
return true;
}
if(j == caridhouse[i]) { PlayerInfo[i][pFuelcar] = Fuell[j]; break; } // Работает по принципу: Нашли, Записали, Остановили.
new model = GetVehicleModel(j);
if(model != 462 && model != 510 && model != 509 && model != 481)
PHP код:
PHP код:
|
for(new x; x < sizeof(mehanik); x++) {
set = 0;
for(new i; i < GetMaxPlayers(); i++) {
if(!IsPlayerConnected(i)) continue;
if(GetPVarInt(i,"MexKo") > -1 && GetPlayerVehicleID(i) == mehanik[x] && GetPlayerVehicleID(i) == GetPVarInt(i,"arenda")) {
set++;
format(string, sizeof(string), "На работе: %s", SBizzInfo[GetPVarInt(i,"MexKo")][sbMessage]);
Update3DTextLabelText(Meh3d[x], 0x008080FF, string);
}
}
if(set == 0) Update3DTextLabelText(Meh3d[x], 0x008080FF, "Не работает!");
}
Update3DTextLabelText(Meh3d[x], 0x008080FF, string);
Update3DTextLabelText(Meh3d[x], 0x008080FF, string);
break;
после
PHP код:
PHP код:
|
Нет, цикл остановится и будет выведен 3D текст только на одну машину.
|
for(new x; x < sizeof(mehanik); x++) {
set = 0;
for(new i; i < GetMaxPlayers(); i++) {
так цикла ведь два запускается?
PHP код:
|
hello
есть несколько простых логов, пишут в разные файлы в разные моменты работы мода при каждой записи файл открывается, пишется строка, и файл закрывается. вопрос - стоит ли переделать это на принцип: открыл все файлы при старте мода - в процессе работы туда только пишем - при рестарте-выходе(-креше) закрываем? с точки зрения оптимизации - меньше лишних действий = лучше. вижу только один минус. файлы будут блокированы во время работы мода, и их нельзя будет удалить. но это не мешает в моем случае, например. или я чтото еще упускаю? |
new Pos[MAX_PLAYERS][4];
public OnPlayerUpdate(playerid)
{
GetPlayerPos(playerid,Pos[playerid][0],Pos[playerid][1],Pos[playerid][2]);
GetPlayerFacingAngle(playerid,Pos[playerid][3]);
return 1;
}
Здравия всем,и доброго времени суток!
Подскажите,если сделать так PHP код:
|
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOGID)
{
if(response)
{
if(listitem == 0)
{
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
return 1;
}
if(dialogid == DIALOGID+1)
{
if(response)
{
if(listitem == 0)
{
if(GetPlayerMoney(playerid) <200)
return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -200);
GivePlayerWeapon(playerid,22,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45! ($200)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
if(listitem == 1)
{
if(GetPlayerMoney(playerid) <600)
return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -600);
GivePlayerWeapon(playerid,23,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45 с глушителм! ($600)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
if(listitem == 2)
{
if(GetPlayerMoney(playerid) <1200)
return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -1200);
GivePlayerWeapon(playerid,24,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Пустынный Орел! ($1200)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
}
return 1;
}
return 1;
}
Всех с прошедшим,
Объясните как оптимизировать на вот этом примере плиз а то читал, но дошло без примера .... п.с всё стеклось в одну большую кучу ...... |
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOGID:
{
if(response)
{
switch(listitem)
{
case 0:
{
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
}
}
return 1;
}
case DIALOGID+1:
{
if(response)
{
switch(listitem)
{
case 0:
{
if(GetPlayerMoney(playerid) <200) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -200);
GivePlayerWeapon(playerid,22,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45! ($200)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена"); }
}
case 1:
{
if(GetPlayerMoney(playerid) <600) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -600);
GivePlayerWeapon(playerid,23,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45 с глушителм! ($600)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена"); }
}
case 2:
{
if(GetPlayerMoney(playerid) <1200) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -1200);
GivePlayerWeapon(playerid,24,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Пустынный Орел! ($1200)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
}
}
return 1;
}
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOGID)
{
if(!response) return 1;
if(listitem == 0) ShowGunDialog(playerid);
return 1;
}
if(dialogid == DIALOGID+1)
{
if(!response) return 1;
switch(listitem)
{
case 0:
{
if(GetPlayerMoney(playerid) <200) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -200);
GivePlayerWeapon(playerid,22,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45! ($200)");
ShowGunDialog(playerid);
}
case 1:
{
if(GetPlayerMoney(playerid) <600) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -600);
GivePlayerWeapon(playerid,23,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45 с глушителм! ($600)");
ShowGunDialog(playerid);
}
case 2:
{
if(GetPlayerMoney(playerid) <1200) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -1200);
GivePlayerWeapon(playerid,24,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Пустынный Орел! ($1200)");
ShowGunDialog(playerid);
}
}
return 1;
}
return 1;
}
stock ShowGunDialog(playerid)
{
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
сервер и так при каждом апдейте запоминает позицию игрока и прочие параметры.
а это всего лишь перекладывание из его внутренних переменных в дополнительные логичнее брать это только когда нужно. ну или по таймеру более гуманному в плане интервала в любом случае, функции эти особо ничего не считают, нагрузка не должна быть большой |
new Float:gTest[3];
public OnFilterScriptInit()
{
new t = GetTickCount();
for(new i;i<100000;i++) {}
printf("Tick 1: %d",GetTickCount() - t);
t = GetTickCount();
for(new i;i<100000;i++) GetPlayerPos(0,gTest[0],gTest[1],gTest[2]);
printf("Tick 2: %d",GetTickCount() - t);
return 1;
}
for(new i = 1; i != 13; i++)
{
format(string,sizeof(string),"UPDATE Config SET A%d = %d WHERE Settings = Ammo'",i,Massive[i][1]);
db_query(DataBase,string);
}
PHP код:
Возможно ли как-нибудь оптимизировать? |
format(string,
sizeof(string),
"UPDATE Config SET A1 = %d, A2 = %d, A3 = %d, A4 = %d, A5 = %d, A6 = %d, A7 = %d, A8 = %d, A9 = %d, A10 = %d, A11 = %d, A12 = %d WHERE Settings = Ammo",
Massive[1][1],
Massive[2][1],
Massive[3][1],
Massive[4][1],
Massive[5][1],
Massive[6][1],
Massive[7][1],
Massive[8][1],
Massive[9][1],
Massive[10][1],
Massive[11][1],
Massive[12][1]
);
db_query(DataBase,string);
Да, повлияет, каждый раз когда сервер будет получать данные от любого игрока, он будет выполнять данные функции, а учитывая, что самп однопоточен, использование подобной конструкции при более менее высоком онлайне и малом значении рефреш райта - губительно.
|
Здравия всем,и доброго времени суток!
Подскажите,если сделать так PHP код:
|