Перейти к содержанию

Новый год


Break

Рекомендуемые сообщения

Помнится на старом никсе, который был несколько лет назад, так вот там на новый год в 00:00 всем давали подарки кто находился в детаче и с минимальным базовым уровнем вроде как 255. Кто подскажет, как реализовать сие чудо? :rolleyes:

Изменено пользователем mrboob
Ссылка на комментарий
Поделиться на другие сайты

-scriptNGNGNG-1,{
if(gettime(den) == vremya){
query_sql "select account_id from `char` where online = 1", .@AID;
attachrid .@AID;
getitem id,count,.@AID;
}
end;
}

Что то я совсем не подумал что всё так просто, спасибо :)

Ссылка на комментарий
Поделиться на другие сайты

-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% :D

я пример навел же.

Ссылка на комментарий
Поделиться на другие сайты

- 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;
}

Исправил-дополнил-накосячил

Изменено пользователем Jarek
"великий специалист в области программирования"
Ссылка на комментарий
Поделиться на другие сайты

Это уже намного лучше, но вместо:

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

:D

Ссылка на комментарий
Поделиться на другие сайты

окай (правда я не думаю, что на ноунеймовом сервере будет овер 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, решил подстроиться

Ссылка на комментарий
Поделиться на другие сайты

Как по мне, не стОит рассчитывать на то, что персонажей будет <= 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. Ваш скрипт еще нуждается в проверке на базовый уровень.

Изменено пользователем Functor
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Тем не менее в паблике пока не видел ни одного эвента, в котором бы сохранялись какие-то данные в массив и он был рассчитан на участие > 128 тел. И это печально. :(

Наверное всем лень заморачиваться

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Кстати, на счет массивов. Можно ли увеличить их кол-во на > 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;
}

Работает на ура, можешь вытащить себе нужный код

Ссылка на комментарий
Поделиться на другие сайты

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 у массива в скриптах быть не может.

И так просто увеличить вряд ли получится, нужно будет перелопатить тонну кода, чтобы потом не было ошибок

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Попробуйте, насколько не знаю ;) :

map/script.c

/// Maximum amount of elements in script arrays

#define SCRIPT_MAX_ARRAYSIZE 128

Изменено пользователем Alex Wan
Ссылка на комментарий
Поделиться на другие сайты

/// Maximum amount of elements in script arrays

#define SCRIPT_MAX_ARRAYSIZE 128

Вы не читали сообщение Jarek-a? :D

Изменение SCRIPT_MAX_ARRAYSIZE ничего хорошего не даст из-за особенности генерации уникального id.

Ссылка на комментарий
Поделиться на другие сайты

Попробуйте, насколько не знаю ;) :

map/script.c

/// Maximum amount of elements in script arrays

#define SCRIPT_MAX_ARRAYSIZE 128

Было бы все на столько просто, я бы даже не спрашивал, ибо про эту строчку знаю.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика