Break Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 (изменено) Помнится на старом никсе, который был несколько лет назад, так вот там на новый год в 00:00 всем давали подарки кто находился в детаче и с минимальным базовым уровнем вроде как 255. Кто подскажет, как реализовать сие чудо? Изменено 14 декабря, 2012 пользователем mrboob Ссылка на комментарий Поделиться на другие сайты Поделиться
kadze Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 выборка по скл? Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 -scriptNGNGNG-1,{if(gettime(den) == vremya){query_sql "select account_id from `char` where online = 1", .@AID;attachrid .@AID;getitem id,count,.@AID;}end;} 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Break Опубликовано 14 декабря, 2012 Автор Жалоба Поделиться Опубликовано 14 декабря, 2012 -scriptNGNGNG-1,{if(gettime(den) == vremya){query_sql "select account_id from `char` where online = 1", .@AID;attachrid .@AID;getitem id,count,.@AID;}end;} Что то я совсем не подумал что всё так просто, спасибо Ссылка на комментарий Поделиться на другие сайты Поделиться
Functor Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 -scriptNGNGNG-1,{if(gettime(den) == vremya){query_sql "select account_id from `char` where online = 1", .@AID;attachrid .@AID;getitem id,count,.@AID;}end;} Это работать не будет 100% Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 -scriptNGNGNG-1,{if(gettime(den) == vremya){query_sql "select account_id from `char` where online = 1", .@AID;attachrid .@AID;getitem id,count,.@AID;}end;} Это работать не будет 100% я пример навел же. Ссылка на комментарий Поделиться на другие сайты Поделиться
Jarek Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 (изменено) - script elephant_giveaway -1,{OnDay0101: query_sql "select account_id from `char` where online = 1", .@AID; for(.@i=0; .@i<getarraysize(.@AID); .@i++){тут должен быть аттач if(checkweight(5146,1)) getitem 5146,1,.@AID[.@i]; end;}Исправил-дополнил-накосячил Изменено 14 декабря, 2012 пользователем Jarek "великий специалист в области программирования" Ссылка на комментарий Поделиться на другие сайты Поделиться
Functor Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 Это уже намного лучше, но вместо: for(.@i=0; .@i<getarraysize(.@AID); .@i++) нужно: for(set .@i, 0; .@i < getarraysize(.@AID); set .@i, .@i + 1) P.S. С таким скриптом можно сразу готовится к разговору с игроками о том, что они не получили подарки из-за: A 'select' query can fill array variables with up to 128 rows of values Ссылка на комментарий Поделиться на другие сайты Поделиться
Jarek Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 окай (правда я не думаю, что на ноунеймовом сервере будет овер 128 онлайн в нг)query_sql "select account_id from `char` where online = 1 limit 0, 128", .@AID1;query_sql "select account_id from `char` where online = 1 limit 128, 128", .@AID2;+ чуточку воображения для автоматизацииитд xDА насчет цикла: я думал, сейчас модно rA, решил подстроиться Ссылка на комментарий Поделиться на другие сайты Поделиться
Functor Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 (изменено) Как по мне, не стОит рассчитывать на то, что персонажей будет <= 128. Тем более, что учитываются детач чары. Так же, как и лишать скрипт переносимости только по причине популярности rA. - script elephant_giveaway -1,{OnDay0101: query_sql "select account_id from `char` where online = 1", .@AID; for(.@i=0; .@i<getarraysize(.@AID); .@i++) if(checkweight(5146,1)) getitem 5146,1,.@AID[.@i]; end;} Нельзя так использовать checkweight, ибо Вы не аттачите персонажей. P.S. Ваш скрипт еще нуждается в проверке на базовый уровень. Изменено 14 декабря, 2012 пользователем Functor 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Jarek Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 Тем не менее в паблике пока не видел ни одного эвента, в котором бы сохранялись какие-то данные в массив и он был рассчитан на участие > 128 тел. И это печально. Наверное всем лень заморачиваться 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 14 декабря, 2012 Жалоба Поделиться Опубликовано 14 декабря, 2012 Кстати, на счет массивов. Можно ли увеличить их кол-во на > 128 ?И вообще интересно почему массив только 128 тянет? память жалко?Небольшой скриптик накатал еще недавно:- script game_event -1,{//OnClock1600:OnMinute55:OnEventRetry:sleep2 10000;query_sql "select `account_id` from `char` where online = 1 order by rand() limit 1", .@AID;attachrid .@AID;if(CheckVending() > 0){ announce "[Система] : Игрок который выбран в эвенте - торгует. Начнем эвент заного.",bc_all; detachrid; donpcevent "game_event::OnEventRetry"; end;} if(!isloggedin(.@AID)){ //Этого не может быть, но все же! announce "[Система] : Никто не победил в эвенте. Игрок который выбран - оффлайн",bc_all; detachrid; donpcevent "game_event::OnEventRetry"; end; } for(.@i=0; .@i<=getarraysize(.not_available_map$); .@i++){ getmapxy .map_player$,.x,.y,0; if(.not_available_map$[.@i] != "") if(.map_player$ == .not_available_map$[.@i]){ announce "[Система] : "+strcharinfo(0)+" не победил в эвенте. Потому что он находится на запретной локации",bc_all; detachrid; donpcevent "game_event::OnEventRetry"; end; } } sleep2 3000; percentheal -100,-100; announce "[Система] : Вы победитель! **** RO награждает вас призами. Спасибо что остаетесь с нами!",bc_self; announce "[Система] : Игрока "+strcharinfo(0)+" забрали Боги сервера и он получает специальный приз!",bc_all; getitem 7227,rand(5); specialeffect2 775; specialeffect2 794; specialeffect2 795; warp "SavePoint",0,0; //soundeffectall "lucky.wav",0; detachrid; end;OnInit:setarray .not_available_map$[0], "geffen";end;}Работает на ура, можешь вытащить себе нужный код Ссылка на комментарий Поделиться на другие сайты Поделиться
Jarek Опубликовано 15 декабря, 2012 Жалоба Поделиться Опубликовано 15 декабря, 2012 The max is 128 because it's using a (index<<24) to store variable (128<<24 is bigger than INT so it bug).Максимальное значение INT 2147483647а 128<<24 уже 2147483648Отсюда и выходит, что индекса больше 127 у массива в скриптах быть не может.И так просто увеличить вряд ли получится, нужно будет перелопатить тонну кода, чтобы потом не было ошибок 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Wan Опубликовано 15 декабря, 2012 Жалоба Поделиться Опубликовано 15 декабря, 2012 (изменено) Попробуйте, насколько не знаю : map/script.c /// Maximum amount of elements in script arrays #define SCRIPT_MAX_ARRAYSIZE 128 Изменено 15 декабря, 2012 пользователем Alex Wan Ссылка на комментарий Поделиться на другие сайты Поделиться
Functor Опубликовано 15 декабря, 2012 Жалоба Поделиться Опубликовано 15 декабря, 2012 /// Maximum amount of elements in script arrays #define SCRIPT_MAX_ARRAYSIZE 128 Вы не читали сообщение Jarek-a? Изменение SCRIPT_MAX_ARRAYSIZE ничего хорошего не даст из-за особенности генерации уникального id. Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 15 декабря, 2012 Жалоба Поделиться Опубликовано 15 декабря, 2012 Попробуйте, насколько не знаю : map/script.c /// Maximum amount of elements in script arrays #define SCRIPT_MAX_ARRAYSIZE 128 Было бы все на столько просто, я бы даже не спрашивал, ибо про эту строчку знаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения