|
выбор человека рандомно
|
|
| bama_boy | Дата: Среда, 17.02.2010, 14:30 | Сообщение # 1 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 214
Награды: 2
Город: Тула
Репутация: 13
Замечания: 0%
Статус: 
| народ, подскажите, как рандомно выбрать игрока на сервере и задать ему переменную. из числа находящихся в онлайне.
И я кричу - остановите пленку Это кино я уже смотрел Эй, режиссер заканчивай съемку А он смеется в объектив как в прицел.
|
| |
|
|
| Eakwarp | Дата: Среда, 17.02.2010, 15:52 | Сообщение # 2 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 4874
Награды: 179
Город: Москва
Репутация: 2543
Замечания: 60%
Статус: 
| new tvoyaperemennaya[MAX_PLAYERS]; new bit; for(new i=0;i<GetMaxPlayers();i++)if(IsPlayerConnected(i))bit=i; new rand = random(bit); tvoyaperemennaya[rand]=139128312;
More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.
Valakas Roleplay on Twitter
Платные консультации, разработка, в ICQ. Дорого.
Сообщение отредактировал Eakwarp - Среда, 17.02.2010, 15:53 |
| |
|
|
| bama_boy | Дата: Среда, 17.02.2010, 16:24 | Сообщение # 3 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 214
Награды: 2
Город: Тула
Репутация: 13
Замечания: 0%
Статус: 
| спасибо большое) еклмн
И я кричу - остановите пленку Это кино я уже смотрел Эй, режиссер заканчивай съемку А он смеется в объектив как в прицел.
|
| |
|
|
| stepmex | Дата: Среда, 17.02.2010, 22:39 | Сообщение # 4 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| Quote (Eakwarp) new tvoyaperemennaya[MAX_PLAYERS]; new bit; for(new i=0;i<GetMaxPlayers();i++)if(IsPlayerConnected(i))bit=i; new rand = random(bit); tvoyaperemennaya[rand]=139128312; не ожидал от тебя такого бреда на сервере 1 человек с ИД 24 счетчик прогоняте 100 значений, предположим прописано 100 слотов. записывает в bit = 24 в rand записывается случайное число от 0 до 24, дальше присваеваем число игрокам которых нет на сервере!
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| Dima-kun | Дата: Четверг, 18.02.2010, 10:46 | Сообщение # 5 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| [pwn]new maxid; public OnPlayerConnect(playerid) { if(maxid<playerid) { maxid=pplayerid; } return 1; } public OnPlayerDisconnect(playerid) { if(playerid==maxid) { for(new i;i<maxid;--i) { if(IsPlayerConnected(maxid)) {maxid--;continue;} else { maxid=i;break; } } } return 1; } public whatewer() { new rand; do { rand=random(maxid); } while(!IsPlayerConnected(rand)); }[/pwn] можно написать функцию чтобы узнать макс ид на сервере [pwn]new maxid; for(new i;i<GetMaxPlayers();++i) { if(IsPlayerConnected(i)) { if(i>maxid){maxid=i;continue;} else {maxid=i;break;} } } public whatewer() { new rand; do { rand=random(maxid); } while(!IsPlayerConnected(rand)); }[/pwn] 2ой способ может и бред хз не проверял. а первый должен работать
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
|
| |
|
|
| stepmex | Дата: Четверг, 18.02.2010, 19:13 | Сообщение # 6 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| DizeL-ZR, а теперь объясни толково накой тебе максимальный ИД на сервере?
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| Eakwarp | Дата: Четверг, 18.02.2010, 19:45 | Сообщение # 7 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 4874
Награды: 179
Город: Москва
Репутация: 2543
Замечания: 60%
Статус: 
| stepmex, ну конечно можно сделать массив в который будет загонятся переменные игроков онлайн, и это всего еще пару строк, но здесь цикл несет лишь смысл поиска максимального ида, да и я понядеялся на то что кто то сделает замечание на эту тему. Добавлено (18.02.2010, 19:45) --------------------------------------------- собственно new tvoyaperemennaya[MAX_PLAYERS]; new players[MAX_PLAYERS]; new bit2; for(new i=0;i<GetMaxPlayers();i++)if(IsPlayerConnected(i)){players[bit2]=i;bit2++;} new rand = random(bit2); tvoyaperemennaya[players[rand]]=139128312;
More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.
Valakas Roleplay on Twitter
Платные консультации, разработка, в ICQ. Дорого.
|
| |
|
|
| stepmex | Дата: Четверг, 18.02.2010, 20:46 | Сообщение # 8 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| Все гораздо банальнее [pwn]new tvoyaperemennaya[MAX_PLAYERS],numplayers = 0; public OnPlayerConnect(playerid) { ... numplayers++; return 1; } public OnPlayerDisconnect(playerid,reason) { ... numplayers--; return 1; } ... new key = random(numplayers); for(new i=0;i<GetMaxPlayers();i++)if(IsPlayerConnected(i)) { if(key = 0){tvoyaperemennaya[i]=139128312;break;} else key--; } ...[/pwn]
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| Eakwarp | Дата: Четверг, 18.02.2010, 20:51 | Сообщение # 9 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 4874
Награды: 179
Город: Москва
Репутация: 2543
Замечания: 60%
Статус: 
| stepmex, зачем то еще использовать глобальные переменные, фи, мой способ наиболее практичный и оптимальный.
More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.
Valakas Roleplay on Twitter
Платные консультации, разработка, в ICQ. Дорого.
|
| |
|
|
| stepmex | Дата: Четверг, 18.02.2010, 21:45 | Сообщение # 10 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| Quote (Eakwarp) зачем то еще использовать глобальные переменные переменная с количеством игроков есть на 95% серверах Quote (Eakwarp) наиболее практичный тем что каждый раз сохдается массиы на 500 слотов? добавь, выделено красным: Quote public OnPlayerCommandText(...) { new fjksdfksd[MAX_PLAYERS][20]; ... return 1; } и через 15-20 команд на сервере ни чего не работает Так что уж лучше 1 ячейка глобальная, чем 500 динамических. Quote (Eakwarp) оптимальный. чем?
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|
| Eakwarp | Дата: Пятница, 19.02.2010, 00:48 | Сообщение # 11 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 4874
Награды: 179
Город: Москва
Репутация: 2543
Замечания: 60%
Статус: 
| Quote (stepmex) new fjksdfksd[MAX_PLAYERS][20]; и нахрен создавать 10 тысяч переменных?... не утрируй элементарный код до состояния бреда.
More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.
Valakas Roleplay on Twitter
Платные консультации, разработка, в ICQ. Дорого.
|
| |
|
|
| ZirkiN | Дата: Пятница, 19.02.2010, 05:24 | Сообщение # 12 |
|
Постоялец
Группа:
Продвинутые
Сообщений: 326
Награды: 15
Город: Новосибирск
Репутация: 144
Замечания: 0%
Статус: 
| Quote (stepmex) new key = random(numplayers); for(new i=0;i<GetMaxPlayers();i++)if(IsPlayerConnected(i)) { if(key = 0){tvoyaperemennaya[i]=139128312;break;} else key--; } А в итоге-то вот что получается: key = random(numplayer); if(IsPlayerConnected(key)) tvoyaperemennaya[key]=139128312; Quote (Eakwarp) new players[MAX_PLAYERS]; new bit2; for(new i=0;i<GetMaxPlayers();i++)if(IsPlayerConnected(i)){players[bit2]=i;bit2++;} new rand = random(bit2); tvoyaperemennaya[players[rand]]=139128312; Quote (Eakwarp) фи, мой способ наиболее практичный и оптимальный. Дело в том, что постоянный пересчет не может быть оптимальным решением там, где его можно избежать. вот примерно в этом направлении можно двигаться (работоспособность не проверял - нету возможности): Code new plvar[MAX_PLAYERS][3]; //0 - ids, 1 - sids, 2 - var new numplayers = 0;
public OnPlayerConnect(playerid) { plvar[numplayers][0]=playerid; // сохранили в номер игрока plvar[playerid][1]=numplayers; // сохранили игроку номер numplayers++; // приготовились к следующему ... return 1; }
public OnPlayerDisconnect(playerid,reason) { numplayers--; // обращаемся к предыдущему (он является последним заполненным в OnPlayerConnect) if(plvar[numplayers][0] != playerid){ // если отключившийся игрок не последний в массиве plvar[plvar[playerid][1]][0] = plvar[numplayers][0]; // перемещаем последнего на место отключившегося plvar[plvar[numplayers][0]][1] = plvar[playerid][1]; // перемещаем его номер } ... return 1; }
Присвоение случайному в данный момент активному игроку ... plvar[random(numplayers)][2] = значение переменной; ...
Чтение для игрока с идом playerid ... куда присвоить = plvar[plvar[playerid][1]][2]; ... как-то так
all:GMCC ~2% current:GMCC.C.L0 ~49%
Сообщение отредактировал ZirkiN - Пятница, 19.02.2010, 05:49 |
| |
|
|
| HELKERN | Дата: Пятница, 19.02.2010, 08:48 | Сообщение # 13 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 767
Награды: 17
Город: Улан-Удэ
Репутация: 206
Замечания: 0%
Статус: 
| stepmex, стоит ли использовать в цикле GetMaxPlayers() если у тебя есть numplayers?
|
| |
|
|
| Dima-kun | Дата: Пятница, 19.02.2010, 16:01 | Сообщение # 14 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| stepmex, чтобы вставить его в random
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
|
| |
|
|
| stepmex | Дата: Пятница, 19.02.2010, 17:11 | Сообщение # 15 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус: 
| HELKERN, количество игроков и максимальный ID зачастую различаются, и инногда второе больше первого! Да обязательно.
И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
|
| |
|
|