![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Level 9 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [PW] ![]() |
Так уж сложилось, что лицензионных версий игры в России почти не водится. В связи с этим на всех русских шардах отключена проверка СД-КЕЯ средствами bioware. Но из-за этого любой игрок может пропустить проверку логин:пароль и зайти на шард под любым логином.
Способов борьбы с этим опять-же - полно. Кто-то требует ввода в поле Deity специального ключа, генерируемого по имени\логину, кто-то записывает СДКЕЙ в БД. Наверное есть еще варианты. Хотелось бы услышать - кто и как с этим борется. Добавлено в [mergetime]1087026014[/mergetime] Вот один из вариантов скрипта. Он привязывает СД-КЕЙ, с которым создали персонажа к логину\имени персонажа. Зайти в игру этим персонажем можно только с этим СД-КЕЙем. На случай смены СД-КЕЯ предусмотренна возможность временного отключения проверки из dm-console командой `dm_setmodulevarint SecurityDisable 1`. Включить защиту обратно: `dm_setmodulevarint SecurityDisable 0` Вызывается из события onClientEnter: ExecuteScript("_security",OBJECT_SELF); _security.nss Код void main() { object oPC = GetEnteringObject(); string sCDKEY = GetPCPublicCDKey(oPC); string sName = GetName(oPC); string sPCName = GetPCPlayerName(oPC); string sID = "(("+sPCName+"))"+sName; //ДМ-ы должны знать пароль и их обычно не проверяют if (GetIsDM(oPC)) return; // Читаем из БД строку по паре логин+имя персонажа string sReadID = GetCampaignString("Security",sID); //Дополнительная возможность банить игрока - положить ему в инвентарь итем с тегом "mg_bootstone" if (!GetLocalInt(GetModule(),"SecurityDisable") && GetIsObjectValid(GetItemPossessedBy(oPC,"mg_bootstone"))) { BootPC(oPC); return; } //Если игрок зашел впервые (только создали) или отключена защита - записываем новый СДКЕЙ if (sReadID =="" || GetLocalInt(GetModule(),"SecurityDisable")) { SetCampaignString("Security",sID,sCDKEY); return; } //Проверяем if (sReadID != sCDKEY && !GetLocalInt(GetModule(),"SecurityDisable") ) { BootPC(oPC); SendMessageToAllDMs("Security: Error! "+sName+" :["+sPCName+"]: with key ="+sCDKEY+ " != "+sReadID); WriteTimestampedLogEntry("Security: Error! "+sName+" :["+sPCName+"]: with key ="+sCDKEY+ " != "+sReadID); return; } } |
![]() |
![]()
Сообщение
#2
|
|
Level 3 ![]() Класс: Тайный Лучник Характер: Neutral Good Раса: Эльф NWN: Скриптинг [PW] ![]() |
Мне это было нужно, когда мы хостились на uagames. Там на сервере было 4 рута, а ДМы жаловались на то, что какие-то админы в количестве много штук заходили на сервер. Мне это надоело. А поскольку любой рут может как посмотреть ДМ пароль, так и добавить свой сидикей в базу данных, то я решил сделать так.
Хешировалась именно public часть CD-key'я. Весь смысл в том, что админ сервера не сможет сам посчитать этот хэш и добавить его в БД. А следовательно и зайти на сервер с правами ДМа. |
![]() ![]() |
Текстовая версия | Сейчас: 17th June 2025 - 16:42 |