 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
Вопрос | Ответ
| |
| Borog | Дата: Среда, 25.04.2012, 22:54 | Сообщение # 4081 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1362
Награды: 43
Город: Москва
Репутация: 1249
Замечания: 20%
Статус: 
| [RD]Chez, Читал, что со скобками работает немного быстрее. Точно не помню, ибо не заострял на этом внимание. Толи компиль дольше на эти доли миллисекунд, толи работа кода.
Silver Break http://s-break.ru/ http://vk.com/sbreak
|
| |
|
|
| RudeBoy | Дата: Четверг, 26.04.2012, 14:58 | Сообщение # 4082 |
|
Освоившийся
Группа:
Продвинутые
Сообщений: 113
Награды: 1
Город: Киев
Репутация: -28
Замечания: 0%
Статус: 
| а тут что быстрее..
IPIO у меня это макрос IsPlayerInRangeOfPoint
Code if(IPIO(i,7.5,2064.2842,-1831.4736,13.5469)) if(IPIO(i,7.5,487.6401,-1739.9479,11.1385)) if(IPIO(i,7.5,1024.8651,-1024.0870,32.1016)) if(IPIO(i,7.5,617.5467,-2.0437,1000.5823)) if(IPIO(i,7.5,615.2847,-124.2390,997.6888)) if(IPIO(i,7.5,-1904.7019,284.5968,41.0469)) if(IPIO(i,7.5,-2425.7822,1022.1392,50.3977)) if(IPIO(i,7.5,-1420.5195,2584.2305,55.8433)) if(IPIO(i,7.5,-99.9417,1117.9048,19.7417)) if(IPIO(i,7.5,1975.2384,2162.5088,11.0703)) if(IPIO(i,7.5,720.0854,-457.8807,16.3359)) if(IPIO(i,7.5,615.9690,-75.0127,997.9922))
или
Code if(IPIO(i,7.5,2064.2842,-1831.4736,13.5469)) else if(IPIO(i,7.5,487.6401,-1739.9479,11.1385)) else if(IPIO(i,7.5,1024.8651,-1024.0870,32.1016)) else if(IPIO(i,7.5,617.5467,-2.0437,1000.5823)) else if(IPIO(i,7.5,615.2847,-124.2390,997.6888)) else if(IPIO(i,7.5,-1904.7019,284.5968,41.0469)) else if(IPIO(i,7.5,-2425.7822,1022.1392,50.3977)) else if(IPIO(i,7.5,-1420.5195,2584.2305,55.8433)) else if(IPIO(i,7.5,-99.9417,1117.9048,19.7417)) else if(IPIO(i,7.5,1975.2384,2162.5088,11.0703)) else if(IPIO(i,7.5,720.0854,-457.8807,16.3359)) else if(IPIO(i,7.5,615.9690,-75.0127,997.9922))
или всё же мой вариант которым давно пользуюсь
Code if(IPIO(i,7.5,2064.2842,-1831.4736,13.5469) || IPIO(i,7.5,487.6401,-1739.9479,11.1385) || IPIO(i,7.5,1024.8651,-1024.0870,32.1016) || IPIO(i,7.5,617.5467,-2.0437,1000.5823) || IPIO(i,7.5,615.2847,-124.2390,997.6888) || IPIO(i,7.5,-1904.7019,284.5968,41.0469) || IPIO(i,7.5,-2425.7822,1022.1392,50.3977) || IPIO(i,7.5,-1420.5195,2584.2305,55.8433) || IPIO(i,7.5,-99.9417,1117.9048,19.7417) || IPIO(i,7.5,1975.2384,2162.5088,11.0703) || IPIO(i,7.5,720.0854,-457.8807,16.3359) || IPIO(i,7.5,615.9690,-75.0127,997.9922))
Сообщение отредактировал RudeBoy - Четверг, 26.04.2012, 14:59 |
| |
|
|
| Borog | Дата: Четверг, 26.04.2012, 23:11 | Сообщение # 4083 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1362
Награды: 43
Город: Москва
Репутация: 1249
Замечания: 20%
Статус: 
| RudeBoy, Приведенный код некорректен, мало того, третий никак не связан с двумя другими. Первый и второй - пустые проверки (уже ошибка, приведи хотя бы пример), с возможностью использовать в каждой что-то свое Третий вариант - единственная проверка
Silver Break http://s-break.ru/ http://vk.com/sbreak
|
| |
|
|
| RudeBoy | Дата: Пятница, 27.04.2012, 07:14 | Сообщение # 4084 |
|
Освоившийся
Группа:
Продвинутые
Сообщений: 113
Награды: 1
Город: Киев
Репутация: -28
Замечания: 0%
Статус: 
| хорошо, тогда вот всё тоже самое но со значением, я ведь для примера приводил думал вы поймете )
Code if(IsPlayerInRangeOfPoint(i,7.5,2064.2842,-1831.4736,13.5469)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,487.6401,-1739.9479,11.1385)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,1024.8651,-1024.0870,32.1016)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,617.5467,-2.0437,1000.5823)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,615.2847,-124.2390,997.6888)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,-1904.7019,284.5968,41.0469)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,-2425.7822,1022.1392,50.3977)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,-1420.5195,2584.2305,55.8433)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,-99.9417,1117.9048,19.7417)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,1975.2384,2162.508 8,11.0703)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,720.0854,-457.8807,16.3359)) { ((действие)); } if(IsPlayerInRangeOfPoint(i,7.5,615.9690,-75.0127,997.9922)) { ((действие)); }
2
Code if(IsPlayerInRangeOfPoint(i,7.5,2064.2842,-1831.4736,13.5469)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,487.6401,-1739.9479,11.1385)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,1024.8651,-1024.0870,32.1016)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,617.5467,-2.0437,1000.5823)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,615.2847,-124.2390,997.6888)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,-1904.7019,284.5968,41.0469)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,-2425.7822,1022.1392,50.3977)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,-1420.5195,2584.2305,55.8433)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,-99.9417,1117.9048,19.7417)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,1975.2384,2162.508 8,11.0703)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,720.0854,-457.8807,16.3359)) { ((действие)); } else if(IsPlayerInRangeOfPoint(i,7.5,615.9690,-75.0127,997.9922)) { ((действие)); }
3
Code if(IPIO(i,7.5,2064.2842,-1831.4736,13.5469) || IPIO(i,7.5,487.6401,-1739.9479,11.1385) || IPIO(i,7.5,1024.8651,-1024.0870,32.1016) || IPIO(i,7.5,617.5467,-2.0437,1000.5823) || IPIO(i,7.5,615.2847,-124.2390,997.6888) || IPIO(i,7.5,-1904.7019,284.5968,41.0469) || IPIO(i,7.5,-2425.7822,1022.1392,50.3977) || IPIO(i,7.5,-1420.5195,2584.2305,55.8433) || IPIO(i,7.5,-99.9417,1117.9048,19.7417) || IPIO(i,7.5,1975.2384,2162.5088,11.0703) || IPIO(i,7.5,720.0854,-457.8807,16.3359) || IPIO(i,7.5,615.9690,-75.0127,997.9922)) { ((действие)); }
Quote (Borog) третий никак не связан с двумя другими.
третий тоже самое что и другие (координаты те же самые) просто сжат в одну большую проверку с единственным значением
У всех вариантов должно быть одинаковое действие, что быстрее в итоге, третий получается? p.s. сорри что глупость полнейшую спрашиваю когда сам знаю ответ я просто не знаю что спросить
а по делу, никто не знает когда примерно выйдет 0.3e ?
Добавлено (27.04.2012, 07:14) --------------------------------------------- а ннееет стойте, вот уже серьезный вопрос
Для примера выдрал этот код откуда-то и сделал прямо сейчас оптимизацию с break и continue, правильно ли?
Code for(new h = 0; h < sizeof(SBizzInfo); h++) { if(IsATruck(tmpcar) && IPIO(i, 10.0, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ])) { format(string, sizeof(string), "~w~%s~n~~r~Products Required~w~: %d~n~~y~Price per Product: ~w~: $%d~n~~g~Funds: ~w~: $%d",SBizzInfo[h][sbMessage],(SBizzInfo[h][sbMaxProducts]-SBizzInfo[h][sbProducts]),SBizzInfo[h][sbPriceProd],SBizzInfo[h][sbTill]); GameTextForPlayer(i, string, 5000, 3); break; } else if(IPIO(i, 2.0, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ])) { if(SBizzInfo[h][sbOwned] == 1) { format(string, sizeof(string), "{666666}ID бизнеса: {00ff00}%d\n{666666}Название: {00ff00}%s\n{666666}Плата за вход: {00ff00}%d\n\n{666666}Владелец: {00ff00}%s\n{666666}Заместитель: {00ff00}%s\n{666666}Уровень: {00ff00}%d",h,SBizzInfo[h][sbMessage],SBizzInfo[h][sbEntranceCost],SBizzInfo[h][sbOwner],SBizzInfo[h][sbExtortion],SBizzInfo[h][sbLevelNeeded]); ShowPlayerDialog(i, 161, 0, "Бизнес", string, "Выбор", "Отмена"); break; } else { format(string, sizeof(string), "{666666}ID бизнеса: {00ff00}%d\n{666666}Название: {00ff00}%s\n{666666}Цена бизнеса: {00ff00}$%d\n{666666}Уровень: {00ff00}%d\n\n...",h,SBizzInfo[h][sbMessage],SBizzInfo[h][sbBuyPrice],SBizzInfo[h][sbLevelNeeded]); } ShowPlayerDialog(i, 162, 0, "Бизнес", string, "Выбор", "Отмена"); break; } continue; } for(new h = 0; h < sizeof(HouseInfo); h++) { if(IPIO(i, 1.0, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez])) { if(HouseInfo[h][hOwned] == 1) { if(HouseInfo[h][hRentabil] == 0) { format(string, sizeof(string), "{666666}Владелец: {00ff00}%s\n{666666}Уровень: {00ff00}%d\n{666666}ID дома: {00ff00}%d",HouseInfo[h][hOwner],HouseInfo[h][hLevel],h); } else { format(string, sizeof(string), "{666666}Владелец: {00ff00}%s\n{666666}Стоймость аренды: {00ff00}$%d\n{666666}Уровень: {00ff00}%d\n{666666}ID дома: {00ff00}%d\n...",HouseInfo[h][hOwner],HouseInfo[h][hRent],HouseInfo[h][hLevel],h); } ShowPlayerDialog(i,6,DIALOG_STYLE_MSGBOX,"Дом",string,"Войти","Отмена"); break; } else { format(string, sizeof(string), "Продаётся\n\nОписание: {00ff00}%s\n{666666}Цена: {00ff00}$%d\n{666666}Уровень: {00ff00}%d\n{666666}ID дома: {00ff00}%d\n",HouseInfo[h][hDiscription],HouseInfo[h][hValue],HouseInfo[h][hLevel],h); } ShowPlayerDialog(i,7,DIALOG_STYLE_MSGBOX,"Дом",string,"Выбор","Отмена"); break; } else if(IPIO(i, 1.0, HouseInfo[h][hExitx], HouseInfo[h][hExity], HouseInfo[h][hExitz])) { ShowPlayerDialog(i, 163, DIALOG_STYLE_MSGBOX, "{33CCFF}Дом", "...", "Выбор", "Отмена"); break; } continue; }
Допустим (для примера) мне надо чтобы данный цикл при просмотре 1 игроком завершался сразу же при найденном значении чтобы не тратить время дальше благодаря break, либо в случае если 1 цикл прошел мимо
(гл.проверки из 1 цикла) if(IsATruck(tmpcar) && IPIO(i, 10.0, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ])) else if(IPIO(i, 2.0, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ])) ... если проверки не прошли то цикл не тратит время благодаря continue; и приступает к другому циклу верно ведь?
Сообщение отредактировал RudeBoy - Пятница, 27.04.2012, 07:24 |
| |
|
|
| Borog | Дата: Пятница, 27.04.2012, 09:50 | Сообщение # 4085 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1362
Награды: 43
Город: Москва
Репутация: 1249
Замечания: 20%
Статус: 
| Quote (RudeBoy) третий тоже самое что и другие Третий вариант содержит сборку всех проверок, однако проверка всего одна. т.о. если все условия удовлетворяются, то выполняется действие. В двух первых же для каждой проверки свое действие. Если оно одно и тоже, то ты его просто будешь 100500 раз переписывать. Тогда само собой, что третий проще. Однако если придерживаться здравой логики и понимать, что первый и второй - отдельно, а третий - отдельно, тогда между первым и вторым перерывчик небольшой более оптимизированный второй, т.к. коду не придется бегать по всем проверкам. Хотя, опять же, все зависит от смысла (почему я и говорю, что нельзя однозначно ответить на этот вопрос без конкретных примеров)
Quote (RudeBoy) я просто не знаю что спросить Может и не стоит, раз не знаешь?
Silver Break http://s-break.ru/ http://vk.com/sbreak
|
| |
|
|
| RudeBoy | Дата: Пятница, 27.04.2012, 16:45 | Сообщение # 4086 |
|
Освоившийся
Группа:
Продвинутые
Сообщений: 113
Награды: 1
Город: Киев
Репутация: -28
Замечания: 0%
Статус: 
| Quote (Borog) Третий вариант содержит сборку всех проверок, однако проверка всего одна. т.о. если все условия удовлетворяются, то выполняется действие.
либо я вас не понял на этой фразе, либо вы сами)
Code т.о. если все условия удовлетворяются, то выполняется действие - зачем все? одного условия (одной координаты) будет достаточно для выполнения действия, т.к. там стоит разделение ||, разделение и && две разные вещи
------------------------------------------
if(IPIO(i,7.5,2064.2842,-1831.4736,13.5469) || IPIO(i,7.5,487.6401,-1739.9479,11.1385) || IPIO(i,7.5,1024.8651,-1024.0870,32.1016) || IPIO(i,7.5,617.5467,-2.0437,1000.5823) || IPIO(i,7.5,615.2847,-124.2390,997.6888) [bgcolor=blue]|| IPIO(i,7.5,-1904.7019,284.5968,41.0469) || IPIO(i,7.5,-2425.7822,1022.1392,50.3977) || IPIO(i,7.5,-1420.5195,2584.2305,55.8433) || IPIO(i,7.5,-99.9417,1117.9048,19.7417) || IPIO(i,7.5,1975.2384,2162.5088,11.0703) || IPIO(i,7.5,720.0854,-457.8807,16.3359) || IPIO(i,7.5,615.9690,-75.0127,997.9922))[/bgcolor] { ((действие)); return true; }
всё таки это максимально быстрейшая проверка как мне кажется.. ведь ему стоит найти определенное место на отрезке как тут же начнет выполнять действие которое тут же завершит return true;, всё гениально быстро же быстрее придумать просто не реально я гений современной науки
и кстати, тоже самое у меня везде и с пикапами, например вот
if(pickupid == healash || pickupid == healz || pickupid == healz2 || pickupid == healz3 [bgcolor=blue]|| pickupid == healz4 || pickupid == healz5 || pickupid == adminsudheal || pickupid == bolheal || pickupid == bolheal2 || pickupid == motoheal || pickupid == autoheal || pickupid == derbiheal || pickupid == libertyheal || pickupid == adminsudheal2)[/bgcolor] { SPA(playerid, 100.0); (жизни взять) return true; }
тоже получается быстро
Quote (Borog) Третий вариант содержит сборку всех проверок, однако проверка всего одна. т.о. если все условия удовлетворяются, то выполняется действие. В двух первых же для каждой проверки свое действие. Если оно одно и тоже, то ты его просто будешь 100500 раз переписывать. Тогда само собой, что третий проще. Однако если придерживаться здравой логики и понимать, что первый и второй - отдельно, а третий - отдельно, тогда между первым и вторым перерывчик небольшой более оптимизированный второй, т.к. коду не придется бегать по всем проверкам. Хотя, опять же, все зависит от смысла (почему я и говорю, что нельзя однозначно ответить на этот вопрос без конкретных примеров)
зачем столько лишних слов? я ведь сам чуть ниже там ответил сам себе на вопрос
вы лучше скажите правильно ли у меня там расставлены continue; - т.к. я ранее с ними не работал и еще достоверно полностью не изучил, т.е. скажите либо да или либо нет и причина почему этого хватит
Сообщение отредактировал RudeBoy - Пятница, 27.04.2012, 17:12 |
| |
|
|
| Borog | Дата: Пятница, 27.04.2012, 23:11 | Сообщение # 4087 |
|
Долгожитель
Группа:
I'm V.I.P.
Сообщений: 1362
Награды: 43
Город: Москва
Репутация: 1249
Замечания: 20%
Статус: 
| Quote (RudeBoy) зачем столько лишних слов? Пытаюсь тебе разъяснить суть и донести, что ты привел 3 разных кода А то, что ты писал, никак нельзя принять за "ответ на вопрос" Но раз ты все понял, то и не будем об этом
Quote (RudeBoy) вы лучше скажите правильно ли у меня там расставлены continue; Честно - лень разбирать код
Silver Break http://s-break.ru/ http://vk.com/sbreak
|
| |
|
|
| [RD]Chez | Дата: Суббота, 28.04.2012, 02:04 | Сообщение # 4088 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 3687
Награды: 206
Город: St. P
Репутация: 0
Замечания: 20%
Статус: 
| Quote (RudeBoy) всё таки это максимально быстрейшая проверка как мне кажется.. Правильно. C++ и многие основанные на нем языки в || условии ждут первого true значения, а затем сразу прекращают свою работу. Однако в некоторых случаях правило Де Моргана быстрее (не в этом).
Code for(new h = 0; h < sizeof(SBizzInfo); h++) { if(IsATruck(tmpcar) && IPIO(i, 10.0, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ])) { format(string, sizeof(string), "~w~%s~n~~r~Products Required~w~: %d~n~~y~Price per Product: ~w~: $%d~n~~g~Funds: ~w~: $%d",SBizzInfo[h][sbMessage],(SBizzInfo[h][sbMaxProducts]-SBizzInfo[h][sbProducts]),SBizzInfo[h][sbPriceProd],SBizzInfo[h][sbTill]); GameTextForPlayer(i, string, 5000, 3); break; } else if(IPIO(i, 2.0, SBizzInfo[h][sbEntranceX], SBizzInfo[h][sbEntranceY], SBizzInfo[h][sbEntranceZ])) { if(SBizzInfo[h][sbOwned] == 1) { format(string, sizeof(string), "{666666}ID бизнеса: {00ff00}%d\n{666666}Название: {00ff00}%s\n{666666}Плата за вход: {00ff00}%d\n\n{666666}Владелец: {00ff00}%s\n{666666}Заместитель: {00ff00}%s\n{666666}Уровень: {00ff00}%d",h,SBizzInfo[h][sbMessage],SBizzInfo[h][sbEntranceCost],SBizzInfo[h][sbOwner],SBizzInfo[h][sbExtortion],SBizzInfo[h][sbLevelNeeded]); ShowPlayerDialog(i, 161, 0, "Бизнес", string, "Выбор", "Отмена"); break; } else { format(string, sizeof(string), "{666666}ID бизнеса: {00ff00}%d\n{666666}Название: {00ff00}%s\n{666666}Цена бизнеса: {00ff00}$%d\n{666666}Уровень: {00ff00}%d\n\n...",h,SBizzInfo[h][sbMessage],SBizzInfo[h][sbBuyPrice],SBizzInfo[h][sbLevelNeeded]); } ShowPlayerDialog(i, 162, 0, "Бизнес", string, "Выбор", "Отмена"); break; } continue; } for(new h = 0; h < sizeof(HouseInfo); h++) { if(IPIO(i, 1.0, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez])) { if(HouseInfo[h][hOwned] == 1) { if(HouseInfo[h][hRentabil] == 0) { format(string, sizeof(string), "{666666}Владелец: {00ff00}%s\n{666666}Уровень: {00ff00}%d\n{666666}ID дома: {00ff00}%d",HouseInfo[h][hOwner],HouseInfo[h][hLevel],h); } else { format(string, sizeof(string), "{666666}Владелец: {00ff00}%s\n{666666}Стоймость аренды: {00ff00}$%d\n{666666}Уровень: {00ff00}%d\n{666666}ID дома: {00ff00}%d\n...",HouseInfo[h][hOwner],HouseInfo[h][hRent],HouseInfo[h][hLevel],h); } ShowPlayerDialog(i,6,DIALOG_STYLE_MSGBOX,"Дом",string,"Войти","Отмена"); break; } else { format(string, sizeof(string), "Продаётся\n\nОписание: {00ff00}%s\n{666666}Цена: {00ff00}$%d\n{666666}Уровень: {00ff00}%d\n{666666}ID дома: {00ff00}%d\n",HouseInfo[h][hDiscription],HouseInfo[h][hValue],HouseInfo[h][hLevel],h); } ShowPlayerDialog(i,7,DIALOG_STYLE_MSGBOX,"Дом",string,"Выбор","Отмена"); break; } else if(IPIO(i, 1.0, HouseInfo[h][hExitx], HouseInfo[h][hExity], HouseInfo[h][hExitz])) { ShowPlayerDialog(i, 163, DIALOG_STYLE_MSGBOX, "{33CCFF}Дом", "...", "Выбор", "Отмена"); break; } continue; }
В данном контексте continue вообще не нужен, он лишь вызовет пару дополнительных итераций (точное кол-во не скажу, возможно 1 или 2), т.к. и так конец шага цикла.
continue имеет смысл вызывать, если хочешь прервать шаг цикла и перети на следующий. Что-то сродни goto }, где "}" - собственно граница цикл, после пересечения которой индекс увеличивается или уменьшается в соответствии с тем, как это требуется.Добавлено (28.04.2012, 01:59) --------------------------------------------- Borog, Его ответ на свой вопрос вполне полон и доходчив, см.выше мой пост. Quote (Borog) Честно - лень разбирать код Зря. Много можно почерпнуть. Код конечно не очень красивый, но достаточно грамотный.Добавлено (28.04.2012, 02:04) ---------------------------------------------
Quote (RudeBoy) if(!IsPlayerConnected(i)) continue; быстрее фильтрует.. мне тоже так кажется, но с другой стороны if(IsPlayerConnected(i)) { ........ } красивее - первый вариант. быстрее на один дополнительный вызов функции IsPlayerConnected - второй, если не существует хеширования. Но так как наши мощности компьютеров способны проглотить и не заметить разницу в пару итераций, зачем выпендриваться? Пишите красиво, и все. Это ценнее сейчас. Вообще в каждую команду пихатьэту проверку нет смысла. Достаточно в заголовок паблика или иной не адресованной amx машиной функции, в котором эта проверка часта, поставить. Объем кода сократится, скорость работы не изменится, красота усилится)
1 час моей работы стоит минимум 800 рублей для срочных работ. Знаю CodeIgniter, Kohana, втч. кастом(php), Вникаю в Yii. jQuery на должном уровне, немного разбираюсь в RightJS. Алсо, 6 лет павно, 2 года в шарпе, понимаю си и плюсы. Немного ассемблер. Ох**тельный верстальщик какб.
Если ваш заказ потребует неделю работы и вы собираетесь заплатить 100 рублей - лес там ->> ^^^^^
chezrd@gmail.com lance@chez-lab.ru
|
| |
|
|
| RudeBoy | Дата: Суббота, 28.04.2012, 08:35 | Сообщение # 4089 |
|
Освоившийся
Группа:
Продвинутые
Сообщений: 113
Награды: 1
Город: Киев
Репутация: -28
Замечания: 0%
Статус: 
| Quote (|RD|Chez) В данном контексте continue вообще не нужен, он лишь вызовет пару дополнительных итераций (точное кол-во не скажу, возможно 1 или 2), т.к. и так конец шага цикла. continue имеет смысл вызывать, если хочешь прервать шаг цикла и перети на следующий. Что-то сродни goto }, где "}" - собственно граница цикл, после пересечения которой индекс увеличивается или уменьшается в соответствии с тем, как это требуется.
о, ясно спасибо
|
| |
|
|
| Lagutin | Дата: Суббота, 28.04.2012, 12:37 | Сообщение # 4090 |
|
Новенький
Группа:
Пользователи
Сообщений: 2
Награды: 0
Город: Arkadak
Репутация: 0
Замечания: 0%
Статус: 
| Помогите с перевозкой продуктов. Когда садишься в машину и пишешь команду(/load и т.д) то пишет Unknown.Вот команды: [cut noguest=команды]Code else if(strcmp(cmd, "/load", true) == 0) { new tmpcar = GetPlayerVehicleID(playerid); if(!IsATruck(tmpcar)) return GameTextForPlayer(playerid, "~r~You are not in a delivery truck", 5000, 1); format(string, sizeof(string), "Продукты: %d/%d.", PlayerHaul[tmpcar][pLoad],PlayerHaul[tmpcar][pCapasity]); send(playerid, 0x00D900C8, string); return 1; } else if(strcmp(cmd, "/buyprods", true) == 0) { new tmpcar = GetPlayerVehicleID(playerid), compcost = 50; if(PlayerToPoint(60.0, playerid, 2787.8,-2436.3,13.7)) { if(!IsATruck(tmpcar)) return send(playerid, 0x00D900C8, "* Вы не в грузовике для перевоза продуктов."); if(PlayerHaul[tmpcar][pLoad] < PlayerHaul[tmpcar][pCapasity]) { new amount; if(sscanf(params, "d", amount)) return send(playerid, COLOR_GRAD1, "Используйте: /buyprods [кол-во продуктов(1-100)]"); if(amount < 1 || amount > 100) return send(playerid, COLOR_GREY, "* Можно купить продуктов не менее 1 и не более 100."); new check= PlayerHaul[tmpcar][pLoad] + amount; if(check > PlayerHaul[tmpcar][pCapasity]) format(string, sizeof(string), " You went over the Truck Products Carry Limit of %d, you currently carry %d.",PlayerHaul[tmpcar][pCapasity],PlayerHaul[tmpcar][pLoad]), send(playerid, COLOR_GREY, string); new cost = amount*compcost; if(GetPlayerMoney(playerid) >= cost) { PlayerHaul[tmpcar][pLoad] += amount; format(string, sizeof(string), "Продукты: %d/%d.", PlayerHaul[tmpcar][pLoad],PlayerHaul[tmpcar][pCapasity]); send(playerid, 0x00D900C8, string); format(string, sizeof(string), "* Вы купили %d продуктов, за $%d.", amount,cost); send(playerid, 0x00D900C8, string); GivePlayerMoney(playerid,-cost); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); return 1; } else return format(string, sizeof(string), "* У вас нехватает средств на %d продуктов. Нужно $%d!", amount,cost), send(playerid, 0x00D900C8, string); } else return format(string, sizeof(string), "Продукты: %d/%d.", PlayerHaul[tmpcar][pLoad],PlayerHaul[tmpcar][pCapasity]), send(playerid, 0x00D900C8, string); } return 1; } else if(strcmp(cmd, "/sellprods", true) == 0) { new cashmade; new tmpcar; if(IsPlayerConnected(playerid)) { tmpcar = GetPlayerVehicleID(playerid); if(!IsATruck(tmpcar)) return send(playerid, 0x00D900C8, "* Вы не в грузовике для перевоза продуктов."); if(PlayerHaul[tmpcar][pLoad] == 0) { GameTextForPlayer(playerid, "~r~Truck is empty, return to the stock house", 5000, 1); format(string, sizeof(string), "Продукты: %d/%d.", PlayerHaul[tmpcar][pLoad],PlayerHaul[tmpcar][pCapasity]); send(playerid, 0x00D900C8, string); return 1; } for(new i = 0; i < sizeof(BizzInfo); i++) { if (PlayerToPoint(10, playerid,BizzInfo[i][bEntranceX], BizzInfo[i][bEntranceY], BizzInfo[i][bEntranceZ])) { for(new l = PlayerHaul[tmpcar][pLoad]; l > 0; l--) { if(BizzInfo[i][bProducts] == BizzInfo[i][bMaxProducts]) { GameTextForPlayer(playerid, "~r~Our stores are full", 5000, 1); format(string, sizeof(string), "Cash Earned $%d.", cashmade); send(playerid, 0x00D900C8, string); format(string, sizeof(string), "Products: %d/%d.", PlayerHaul[tmpcar][pLoad],PlayerHaul[tmpcar][pCapasity]); send(playerid, 0x00D900C8, string); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); return 1; } if(BizzInfo[i][bPriceProd] > BizzInfo[i][bTill]) { GameTextForPlayer(playerid, "~r~We Cant Afford The Deal", 5000, 1); format(string, sizeof(string), "Cash Earned $%d.", cashmade); send(playerid, 0x00D900C8, string); format(string, sizeof(string), "Products: %d/%d.", PlayerHaul[tmpcar][pLoad],PlayerHaul[tmpcar][pCapasity]); send(playerid, 0x00D900C8, string); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); return 1; } PlayerHaul[tmpcar][pLoad]--; BizzInfo[i][bProducts]++; cashmade = cashmade+BizzInfo[i][bPriceProd]; ConsumingMoney[playerid] = 1; GivePlayerMoney(playerid,BizzInfo[i][bPriceProd]); BizzInfo[i][bTill] -= BizzInfo[i][bPriceProd]; if(PlayerHaul[tmpcar][pLoad] == 0) { GameTextForPlayer(playerid, "~r~Truck is empty, return to the stock house", 5000, 1); format(string, sizeof(string), "Cash Earned $%d.", cashmade); send(playerid, 0x00D900C8, string); format(string, sizeof(string), "Products: %d/%d.", PlayerHaul[tmpcar][pLoad],PlayerHaul[tmpcar][pCapasity]); send(playerid, 0x00D900C8, string); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); return 1; } } OnPropUpdate(); return 1; } } } [/cut]
вот сток Code stock IsATruck(carid) { if(carid >= truckcar[0] && carid <= truckcar[1]) return 1; return 0; } вывод сообщения когда в машине Code if(IsATruck(newcar)) { format(string, sizeof(string), "Продукты: %d/%d", PlayerHaul[newcar][pLoad],PlayerHaul[newcar][pCapasity]); send(playerid, 0x00D900C8, string); send(playerid, COLOR_WHITE, "Информация: Вы можете продавать продукты бизнесам."); send(playerid, COLOR_WHITE, "Информация: Используйте: /load /buyprods /sellprods"); }
|
| |
|
|
| RudeBoy | Дата: Суббота, 28.04.2012, 13:16 | Сообщение # 4091 |
|
Освоившийся
Группа:
Продвинутые
Сообщений: 113
Награды: 1
Город: Киев
Репутация: -28
Замечания: 0%
Статус: 
| Quote (Lagutin) stock IsATruck(carid) { if(carid >= truckcar[0] && carid <= truckcar[1]) return 1; return 0; }
убедитесь что truckcar точно привязан к продуктовым авто, возможно причина в этом
если вывод сообщения =
Quote (Lagutin) if(IsATruck(newcar)) { format(string, sizeof(string), "Продукты: %d/%d", PlayerHaul[newcar][pLoad],PlayerHaul[newcar][pCapasity]); send(playerid, 0x00D900C8, string); send(playerid, COLOR_WHITE, "Информация: Вы можете продавать продукты бизнесам."); send(playerid, COLOR_WHITE, "Информация: Используйте: /load /buyprods /sellprods"); }
= всё же происходит когда вы садитесь в это авто то причина в другом.
также советую посмотреть на максимальный размер груза для каждого авто, возможно где-то не хватает либо вообще чего-то нет.
скиньте заодно переменные с грузом для авто ((PlayerHaul))
Сообщение отредактировал RudeBoy - Суббота, 28.04.2012, 13:25 |
| |
|
|
| Lagutin | Дата: Суббота, 28.04.2012, 16:09 | Сообщение # 4092 |
|
Новенький
Группа:
Пользователи
Сообщений: 2
Награды: 0
Город: Arkadak
Репутация: 0
Замечания: 0%
Статус: 
| Кароч я заменил другой системой развозки. Спасиб за помощь!
|
| |
|
|
| [exe]ecco | Дата: Среда, 09.05.2012, 19:30 | Сообщение # 4093 |
|
Группа:
Пользователи
Сообщений: 559
Награды: 3
Город: Киев
Репутация: 4
Замечания: 0%
Статус: 
| Помогите сделать анти рекламу на /me и в чат а то anti-adv на пашет на такое 1_1_1_1:1111 как сделать еще так чтоб мут давало?? с меня 10 плюсов
|
| |
|
|
| Awm | Дата: Четверг, 10.05.2012, 13:57 | Сообщение # 4094 |
|
Группа:
I'm V.I.P.
Сообщений: 3235
Награды: 55
Город: Tallinn
Репутация: 1661
Замечания: 0%
Статус: 
| ecco nu ti skin kod svoego antiadv tam uze budem smotret'
"Life is hard... life is harder if you're stupid." - John Wayne
|
| |
|
|
| MarkeloFF | Дата: Четверг, 10.05.2012, 14:10 | Сообщение # 4095 |
|
Советчик
Группа:
I'm V.I.P.
Сообщений: 1033
Награды: 14
Город: Калининград
Репутация: 191
Замечания: 80%
Статус: 
| [exe]ecco, вставь там где 1.1 и т.д. PlayerInfo[playerid][pMute] = 1; и PlayerInfo[playerid][pMuteTime] = время мута в секундах;
|
| |
|
|
|
 |
|
 | |
| |
|