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

Вис691

Управление проектами
  • Публикаций

    1 539
  • Пожертвование

    0,00 ₽ 
  • Зарегистрирован

  • Посещение

  • Победитель дней

    67

Сообщения, опубликованные Вис691


  1. Вообще эта тема немного не о том была, но т.к. она заброшена, то не особо важно.
     

    по 1XP за каждый украденный предмет

    Не, это совсем не так. В скрипте чётко выведена некая формула, которая и на странице мода есть:

     

    Item Weight + (Current Item Value / 100) + Target Perception

     

    Так что соотношение не 1 к 1. А теперь к теме.
    По 1 единице опыта за 1 крафт, хм. Должно быть более чем реально. А если учесть, что в игре аж испытание есть, то шансы повышаются в разы, т.к. игра всё-таки считает количество скрафченных предметов. Вопрос лишь в том, как там всё устроено? Если какая-то переменная глобальная или ещё что-нибудь? В идеале, конечно, найти бы какую-нибудь функцию, верно? И, да, действительно, искать не пришлось совсем. Она попалась мне буквально за первые 15 секунд. Вот только не скажу я вам её  :D.
    Предлагаю следующую схему, раз уж вы тут написали: тот, кто хочет этим заняться сейчас мне ответит, а хочет ли он попытаться сделать этот мод самостоятельно? Пока что в моей голове всё выглядит достаточно просто, поэтому это будет неплохая тренировка, которая позволит вам разобраться с основами скриптинга (и даже немного с продвинутым уровнем). Как я вижу, минимум 2 человека хотят увидеть такое нововведение в игре, поэтому я всё же надеюсь, что кто-то вызовется добровольцем (а ещё лучше, если сразу оба ;)). А т.к. это школа, то с моей стороны будет обеспечена любая помощь по любым вопросом, подсказки и проверка сделанного. Ну а если никто не хочет и пальцем о палец бить, или ни у кого катастрофически не хватает времени (как у меня например), то пишите в тему "Вопросы по моддингу", как найду время, так постараюсь что-то сделать.


  2. А, ты в том смысле, что скрипт работает всегда. Ну а тут никак ничего не сделать. Однако у нас он видит условие, понимает, что оно не выполняется, и идёт себе дальше. И вся эта куча строк кода с волшебным циклом из Label и GoTo просто скипается. Что, естественно, положительно сказывается на производительности)

    • Нравится 1

  3. Вот это 

    Let rCurCell := Player.GPC
    printc "%i" rCurCell
    If ListGetFormIndex aaHookUpAllowedCells rCurCell > -1
    

    Вытащить в самое начало. И если внимательно посмотреть, то можно заметить, что проверка идёт до блока проверок.

    Касаемо задержки - там в самом начале

    set subLoops to 5
    set loopDelay to 300 / subLoops
    

    Т.е. получаем 60 секунд. Вообще можно в тупую строку set fDelay to loopDelay заменить на set fDelay to [Задержка в секундах]

    • Нравится 1

  4. Вроде так не будет работать. Эти условия отвечают за другое
     

     

     

    Quest Conditions: Any conditions here are considered to apply to all dialogue in the quest. The quest conditions are checked first; only if those are true are the conditions on the infos evaluated.

    Так что, могу предложить уменьшить кулдаун, а строку с проверкой ячейки повесить на весь скрипт, т.е. в самое начало поднять те строки.


  5. Окей, давай. Как этот скрипт вызывается? Он висит на квесте или что?

    Но проблема всё-таки в определении ячейки значит. Я бы вначале с ней разобрался. Замени  If rCurCell.IsInList aaHookUpAllowedCells на  ListGetFormIndex aaHookUpAllowedCells rCurCell > -1


  6. Так, ID верный (это ай ди ячейки), значит мы на верном пути. Докинь теперь после if (scanIndex == scanChance) строку printc "%n" scan

    И в блок if scan.IsInList aaHookUpsBannedNPC строку print "1"

    Сейчас мы проверим условие на НПС.


  7. Давай попробуем так, потом посмотрим.

     

    scn SexoutHookupQuestScript
    
    short playing
    float approach
    short legion
    short powder
    short kings
    short khans
    short ncrWhore
    short Whoring
    
    short doLegion
    short doPowder
    short doKings
    short doKhans
    short doNCRwhore
    short doWhoring
    
    short mLegion
    short mPowder
    short mKings
    short mKhans
    short mNCRwhore
    short mWhoring
    
    ref SexoutNCRWhore
    ref targetRef
    int iSelf
    
    short init
    
    short scanChance
    short scanIndex
    short scanCount
    short subLoops
    short loopDelay
    
    ref rCurCell
    
    float fDelay
    
    Begin GameMode
    
    	if init < 5
    		set init to 5
    		set approach to 1.5
    		set scanIndex to 0
    		set subLoops to 5
    		set loopDelay to 300 / subLoops
    	endif
    
    	if GetGameLoaded
    		PrintC "SexoutHookups:	загрузка..."
    		set iSelf to GetModIndex "SexoutHookups.esm"
    		if 255 == iSelf
    			set iSelf to GetModIndex "SexoutHookups.esp"
    		endif
    		if 255 == iSelf
    			set iSelf to GetModIndex "SexoutHookupsAlt.esm"
    		endif
    		if 255 == iSelf
    			set iSelf to GetModIndex "SexoutHookupsAlt.esp"
    		endif
    		set targetRef to BuildRef iSelf 2781
    		PrintC "SexoutHookups:	Quest is %i" targetRef 
    		set targetRef to BuildRef iSelf 18649
    		PrintC "SexoutHookups:	DebugQuest is %i" targetRef 
    		set targetRef to BuildRef iSelf 18651
    		PrintC "SexoutHookups:	DebugOffQuest is %i" targetRef 
    	endif
    
    	if GetGameRestarted
    		set SexoutNCRWhore to 0
    		set mKhans to 0
    		set mKings to 0
    		set mLegion to 0
    		set mNCRwhore to 0
    		set mPowder to 0
    		set mWhoring to 0
    
    		if IsModLoaded "sexoutKhans.esp"
    			set mKhans to GetModIndex "sexoutKhans.esp"
    		endif
    		if IsModLoaded "sexoutKhans.esm"
    			set mKhans to GetModIndex "sexoutKhans.esm" 
    		endif
    		if IsModLoaded "sexoutKings.esp"
    			set mKings to GetModIndex "sexoutKings.esp" 
    		endif
    		if IsModLoaded "sexoutKings.esm"
    			set mKings to GetModIndex "sexoutKings.esm" 
    		endif
    		if IsModLoaded "sexoutLegion.esp"
    			set mLegion to GetModIndex "sexoutLegion.esp"
    		endif
    		if IsModLoaded "sexoutLegion.esm"
    			set mLegion to GetModIndex "sexoutLegion.esm"
    		endif
    		if IsModLoaded "sexoutNCR.esp"
    			set mNCRwhore to GetModIndex "sexoutNCR.esp"
    			set SexoutNCRWhore to BuildRef mNCRwhore 160621
    		endif
    		if IsModLoaded "sexoutNCR.esm"
    			set mNCRwhore to GetModIndex "sexoutNCR.esm"
    			set SexoutNCRWhore to BuildRef mNCRwhore 160621
    		endif
    		if IsModLoaded "sexoutPowderGangers.esp"
    			set mPowder to GetModIndex "sexoutPowderGangers.esp"
    		endif
    		if IsModLoaded "sexoutPowderGangers.esm"
    			set mPowder to GetModIndex "sexoutPowderGangers.esm"
    		endif
    		if IsModLoaded "sexoutProstitutes.esp"
    			set mWhoring to GetModIndex "sexoutProstitutes.esp"
    		endif
    		if IsModLoaded "sexoutProstitutes.esm"
    			set mWhoring to GetModIndex "sexoutProstitutes.esm"
    		endif
    		if IsModLoaded "sexoutWorkinhGirl.esp"
    			set mWhoring to GetModIndex "sexoutWorkinhGirl.esp"
    		endif
    		if IsModLoaded "sexoutWorkinhGirl.esm"
    			set mWhoring to GetModIndex "sexoutWorkinhGirl.esm"
    		endif
    	endif
    
    	short startwhile
    	short endwhile
    	set endwhile to 1
    
    	set doKhans to Khans * mKhans
    	set doKings to Kings * mKings
    	set doLegion to Legion * mLegion
    	set doNCRwhore to NCRwhore * mNCRwhore
    	set doPowder to Powder * mPowder
    	set doWhoring to Whoring * mWhoring
    
    	set targetRef to playerRef
    
    	ref scan
    	set scan to GetFirstRef 200
    
          ; lets put a little delay here
         if fDelay > 0
           set fDelay to fDelay - GetSecondsPassed
           return
        endif
         set fDelay to loopDelay
    
        set scanChance to (scanChance + 1) % subLoops ; one of 'subLoops' people tested at a time
    
        set scan to GetFirstRef 200
        set scanCount to 0
        set scanIndex to 0
    
        Let rCurCell := Player.GPC
    	printc "%i" rCurCell
    	If rCurCell.IsInList aaHookUpAllowedCells
    
     	   Label startwhile
    	    set scanIndex to (scanIndex +1) % subLoops
    
    		if scan
       	     if (scanIndex == scanChance)
    				if scan.IsChild
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.IsInList aaHookUpsBannedNPC
    						set scan to GetNextRef
    						Goto startwhile
    				endif
    				if scan == playerRef
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.GetDisabled
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.GetIsCreature
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.GetPlayerTeammate || scan.GetFactionRank FollowerFaction > -1
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.GetDead
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.GetUnconscious
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.GetRestrained
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    
    				if ListGetFormIndex SexoutSLActorDataIsReserved scan > -1
    						set scan to GetNextRef
    						Goto startwhile
    				endif
    				if scan.IsInList SexoutSLActorDataIsReserved
    						set scan to GetNextRef
    						Goto startwhile
    				endif
    
    				if ListGetFormIndex SexoutListBannedActor scan > -1
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.IsInList SexoutListBannedActor
    						set scan to GetNextRef
    						Goto startwhile
    				endif
    
    				if ListGetFormIndex SexoutSLActorDataHatesSex scan > -1
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.IsInList SexoutSLActorDataHatesSex
    						set scan to GetNextRef
    						Goto startwhile
    				endif
    
    				if ListGetFormIndex SexoutSLActorDataIsNotLookingForSex scan > -1
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.IsInList SexoutSLActorDataIsNotLookingForSex
    						set scan to GetNextRef
    						Goto startwhile
    				endif
    
    				if ListGetFormIndex SexoutSLActorDataIsPartneredFaithfully scan > -1
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    				if scan.IsInList SexoutSLActorDataIsPartneredFaithfully
    						set scan to GetNextRef
    						Goto startwhile
    				endif
    
    				if scan.GetIsClass Prostitute
    					set scan to GetNextRef
    					Goto startwhile
    				endif
    
    				if doPowder
    					if scan.GetInFaction vDialoguePowderGangerFaction
    						set scan to GetNextRef
    						Goto startwhile
    					endif
    				endif
    
    				if doLegion
    					if scan.GetInFaction vCaesarsLegionFaction
    						set scan to GetNextRef
    						Goto startwhile
    					endif
    				endif
    
    				if doKings
    					if scan.GetInFaction vKingsDialogueFaction
    						set scan to GetNextRef
    						Goto startwhile
    					endif
    				endif
    
    				if doKhans
    					if scan.GetInFaction vGreatKhansDialogueFaction
    						set scan to GetNextRef
    						Goto startwhile
    					endif
    				endif
    
    				if doNCRwhore
    					if scan.GetinFaction vNCRMilitaryDialogueFaction
    						if targetRef.GetEquipped SexoutNCRWhore
    							set scan to GetNextRef
    							Goto startwhile
    						endif
    					endif
    				endif
    
    				if doWhoring
    					; what we really want is:
    					;	set scan to BuildRef mWhoring 139704
    					;	if scan.whoremode
    					if targetRef.GetEquipped SexoutListProstituteOutfits	; far from perfect as WorkingGirl allows whoring in arbitrary clothes
    						set scan to GetNextRef
    						Goto startwhile
    					endif
    				endif
    
    				if (0 == (scan.IsSpellTarget SexoutHookupEffect)) && (0 == (scan.IsSpellTarget SexoutHookupOld))
    					short Limit
    					; base change 50 over 200 (1 in 4)
    					set Limit to 50
    					;	if night, double limit
    					if Gamehour > 19
    						set Limit to 2 * Limit
    					endif
    					;	if nympho, double limit again or for first time if not night
    					if ListGetFormIndex SexoutSLActorDataIsNymphomaniac scan > -1
    						set Limit to 2 * Limit
    					endif
    					; boosts
    					;	+ charisma * approach
    					;	+ 1/100 of Evil Karma
    					set Limit to (Limit + (scan.GetAv Karma / -100) + (targetRef.GetAV Charisma * approach))
    				;	if wearing any armor with DT, make limit 0
    					if player.getav damagethreshold > 25
    						set Limit to 0 * Limit
    					else
    						set Limit to 1 * Limit
    					endif
    					short random
    					set random to 2 * GetRandomPercent
    					if random < Limit
    						scan.CIOS SexoutHookupEffect
    					else
    						scan.CIOS SexoutHookupOld
    					endif
    				endif
    
    			endif
    
    			set scan to GetNextRef
    			Goto startwhile
    		endif
    	endif
    End
    

     

    • Нравится 1

  8. Как вариант, перед строкой с Label как раз таки и запихнуть

    Let rCurCell := Player.GPC
    If rCurCell.IsInList aaHookUpAllowedCells == 0
    
    ...
    всё, что относится к циклу
    ...
    
    Endif
    

    То, что цифра 3 не появляется - это нормально, если ты не в разрешённой ячейке. Странно то, что 1 и 2 появились всего 1 раз. Походу весь скрипт ломается на какой-то строке...


  9. Вот этот блок надо выкинуть

    			if scan.IsInList aaHookUpsBannedNPC
    					set scan to GetNextRef
    					Goto startwhile
    			endif
    

    Не знаю, что может быть не так. Давай просто проверим работает ли сканер вообще.

    После Label startwhile вставь строку print "1", после блока с детьми print "2", ну и после нашего блока print "3". А вообще не понимаю, почему тебе просто не убивать сканер вообще, если ГГ не в разрешённых ячейках находится?


  10. А, ну естественно он работать не будет. Сканер тупо НПС и сканирует) В таком случае возвращаемся к моему первому посту, который я не зря написал. После блока проверки ребёнка (т.е. первого) пишем как-то так:

    if ListGetFormIndex aaHookUpsBannedNPC scan > -1 && rCurCell.IsInList aaHookUpAllowedCells == 0
    	set scan to GetNextRef
    	Goto startwhile
    endif
    

    Про переменную вначале ты сама уже увидела. Строку вроде тоже написала.


  11. А, ну так бы и сказала, что тебе нужно просто условие. Тогда я не уверен, что сработает, ибо я не знаю, как задаётся переменная scan. Вполне вероятно напорется на ту проблему, которую я описал в первом посте. Но надо тестить. А так да, вроде верно.


  12. Методом сравнения имеющегося скрипта и тыка вывела такое:

    if ListGetFormIndex aaHookUpsBannedNPC scan > -1 && ListGetFormIndex aaHookUpAllowedCells scan == 0

    Правильно ли? 

     

    Не понимаю, почему -1, но в этом же скрипте используются формлисты, и в условиях, где логически значение позитивное (НПС принадлежит этому списку), выставлено так.

    Чуть более высокий уровень скриптинга - тут и НПС, и ячейки в одном листе. Эта функция возвращает -1 только, когда объекта нет в списке. Следовательно > -1 означает, что объект всё же где-то есть. Он может лежать под номером 0, под 10 и т.д. (нумерация объектов, как ты наверно заметила, начинается с 0). А вот == 0 - очень сомнительная вещь, ибо сработает только когда Scan = первому объекту в листе. Вероятно, имеется в виду == -1, т.е. объекта нет в листе. Тогда как раз таки твоя вторая формулировка "если ячейка НЕ в списке и НПС В списке - аборт (там есть такая команда)." будет выполняться.

    • Нравится 1

  13. Тогда как-то так (может не работать, т.к. сходу я обычно косячу):

    ref rCurCell
    
    Begin GameMode
    
    ...
    
       Let rCurCell := Player.GPC ; Функция GetParentCell. Вместо Player можно подавать любой ref, необязательно НПС
       If (rCurCell.IsInList [ID листа]) && ([Ref ID НПС].IsInList [ID листа] == 0)
          что-то делаем
       Endif
    
    ...
    
    End
    

    Вообще фраза "(реф НПС) НЕ в списке запрещенных НПС" немного некорректная. Дело в том, что можно сделать лист, где хранятся именно REFы НПС, а можно, где Base Formы НПС. И если бы лист был именно с РЕФами, то IsInList не сработал бы, ибо он берёт реф, как параметр, смотрит его Base Form и ищет именно Base Form в листе. Всегда есть НВСЕшный IsRefInList, который сработает и с рефами, и с Base формами, но тут тебе это не нужно. Я почти что уверен, что список делается путём переноса НПС в сам лист.


  14. А можно чуть более развёрнуто, что за казино?)

    А, кто-то пиратские фильмы или сериалы не смотрел. Я, правда, тоже, но наслышан не мало. Ситуация следующая: смотришь фильм/сериал/etc, наступает некий напряжённый момент. Ты прям чувствуешь, что сейчас что-то произойдёт и... Резко вылезает реклама этого самого казино примерно следующего содержания: "Проблемы с доступом к Джойказино? Добавь цифру 1 в начало ссылки так, чтобы получилось 1ДжойКазино.ру и ты снова сможешь наслаждаться лучшими рулетками мира!". 

    Вот тут всё это более правильно написано) https://thequestion.ru/questions/101038/chto-takoe-dzhoikazino-i-pochemu-u-vsekh-problemy-s-dostupom-k-nemu

     

    Ну а по теме, я бы такое даже к Дикой Пустоши не стал привязывать  :D


  15. У нас система обновления немного другая. Каждое обновление РА помимо всех фиксов включает новые моды и фишки. Т.е., грубо говоря, "стабильной" версии не существует. Именно в кавычках потому, что сборка играбельная, но всегда находятся незначительные баги, которые фиксятся. Фиксы, кстати, можно брать на баг-трекере, если прям невозможно подождать обновы. Бывали, конечно, критические фиксы, которые сразу вливали в раздачу, но таких случаев на моей памяти было немного. Да и вроде фикс лежал отдельным файлом, чтобы не перекачивать.

     

    И вам спасибо за доброжелательные сообщения. Помнится, как-то попытался помочь человеку, задавшему вопрос, так он столько всего мне высказал, дескать, не тебе задавал, не отвечай мне и т.д. А ваши сообщения читать - одно удовольствие)


  16. Помнится, были уже попытки залива на торрент, но они оказались неудачными.

     

     

    И кстати, еще один вопрос: зачем нужна 15-секундная пауза перед загрузкой? Она очень затягивет дело(

    Должно же быть разграничение в группах пользователей) 


×
×
  • Создать...