SemirLab Опубликовано 4 марта, 2013 Жалоба Поделиться Опубликовано 4 марта, 2013 Ситуация:Человек разговаривает с нпц, его портает на локацию, допустим ПвП эвент.Перед тем, как портать игрока на локу - необходимо проверить, есть ли на эвенте игрок с таким же ip\mac.Если есть - отсылаем нах, если нет - регаем и портаем куда надо.Если зареганный ранее игрок оффлайн или на другой локации - он не берется в учет, и попросту удаляется с эвента (массива).Звучит просто, но я, видимо, совсем расслабился, почти сутки потратил(Буду рад любому решению, заранее благодарю. Ссылка на комментарий Поделиться на другие сайты Поделиться
xcoms Опубликовано 4 марта, 2013 Жалоба Поделиться Опубликовано 4 марта, 2013 (изменено) Вот нарыл такой скриптик с функцией... он и реализирует твой задум... если не то или не так понял прошу сильно не пинать (// callfunc "Check_IP","<map_name>";function script Check_IP {// Get list of accounts with attached character's IP address.set .@size, query_sql("SELECT `account_id` FROM `login` WHERE `last_ip` = '"+getcharip()+"'",.@aid);// Passed check if only the attached player is returned.if (.@size < 2) return;// Check all online characters using the IP address if they're on the given map.set .@self, getcharid(3);for(set .@i,0; .@i<.@size; set .@i,.@i+1) {if (attachrid(.@aid[.@i])) {if (strcharinfo(3) == getarg(0)) {set .@name$, strcharinfo(0);attachrid(.@self);mes "Character "+.@name$+" is already logged into this event with your IP.";close;}}}attachrid(.@self);// Passed check.return;}Тут немного по другому. проверка двох одинаковых ИП на карте..если уже есть такой ИП .. . второй варпует в сейпоинт!- script Check_IP -1,{OnInit:setmapflag "map_name", mf_loadevent;end;// Когда игрок заходит на карту срабатывет Мапфлаг.OnPCLoadMapEvent:// На какрй карте Юзать".if (strcharinfo(3) != "mapname") end;// Получение листа ИП адресов.set .@size, query_sql("SELECT `account_id` FROM `login` WHERE `last_ip` = '"+getcharip()+"'",.@aid);// Проверка.if (.@size < 2) end;//Проверка на онлайн.set .@self, getcharid(3);for(set .@i,0; .@i<.@size; set .@i,.@i+1) { if (.@aid[.@i] == .@self) continue; if (attachrid(.@aid[.@i])) { if (compare(strcharinfo(3),"map_")) { set .@name$, strcharinfo(0); attachrid(.@self); message strcharinfo(0),"Чар "+.@name$+" , с Вашего IP уже кто то проходит Квест."; sleep2 2000; warp "SavePoint",0,0; end; } }}// Конец.end;} Изменено 4 марта, 2013 пользователем xcoms 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Break Опубликовано 4 марта, 2013 Жалоба Поделиться Опубликовано 4 марта, 2013 Поиск на афине по ключевому слову Only1perIP Ссылка на комментарий Поделиться на другие сайты Поделиться
SemirLab Опубликовано 4 марта, 2013 Автор Жалоба Поделиться Опубликовано 4 марта, 2013 xcoms, спасибо за труды, почитаю подробнее завтра. +mrboob, запрет второго\третьего окна в целом, не интересует. Только для этого эвента. Ссылка на комментарий Поделиться на другие сайты Поделиться
Break Опубликовано 4 марта, 2013 Жалоба Поделиться Опубликовано 4 марта, 2013 (изменено) Лично я использую вот это для БГ- script Only1perIP -1,{OnPCLoadMapEvent:set .maps$, "bat_room";set .@my_map$, strcharinfo(3);if (compare(","+.maps$+"," , ","+.@my_map$+",")){query_sql "SELECT login.account_id FROM login LEFT JOIN `char` ON login.account_id=`char`.account_id " +"WHERE login.last_ip=(SELECT last_ip FROM login WHERE account_id="+getcharid(3)+") " +"AND `char`.online=1 AND login.account_id!="+getcharid(3), .@account_id;for (set .@i,0; .@i<getarraysize(.@account_id); set .@i,.@i+1){getmapxy .@map$,.@x,.@y, 0, rid2name(.@account_id[.@i]);if (.@map$ == .@my_map$){set .@name$, strcharinfo(0);announce "Sorry, only 1 char per IP can be on this map at a time.", bc_self;sleep 1000;atcommand "@kick " + .@name$;}}}end;}bat_room mapflag loadevent Изменено 4 марта, 2013 пользователем mrboob Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения