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

IP проверка


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

Ситуация:

Человек разговаривает с нпц, его портает на локацию, допустим ПвП эвент.

Перед тем, как портать игрока на локу - необходимо проверить, есть ли на эвенте игрок с таким же ip\mac.

Если есть - отсылаем нах, если нет - регаем и портаем куда надо.

Если зареганный ранее игрок оффлайн или на другой локации - он не берется в учет, и попросту удаляется с эвента (массива).

Звучит просто, но я, видимо, совсем расслабился, почти сутки потратил(

Буду рад любому решению, заранее благодарю.

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

Вот нарыл такой скриптик с функцией... он и реализирует твой задум... если не то или не так понял прошу сильно не пинать (


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

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

xcoms, спасибо за труды, почитаю подробнее завтра. +

mrboob, запрет второго\третьего окна в целом, не интересует. Только для этого эвента.

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

Лично я использую вот это для БГ

- 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

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

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