manx
Сталкеры-
Публикаций
5 -
Зарегистрирован
-
Посещение
Репутация
0 НейтральнаяИнформация о manx
-
Звание
Новичок
-
N42 , спасибо за ответ. Мне стал больше понятен Lua. Но, все-таки, одну вещь я не понимаю... Вот две одинаковые функции: function if_hip_veteran(actor, npc) local rank = ranks.get_obj_rank_name(npc) return (rank == "veteran" or rank == "expert" or rank == "master" or rank == "legend") end function request_to_hip_task(actor) local rank = ranks.get_obj_rank_name(actor) return (rank == "veteran" or rank == "expert" or rank == "master" or rank == "legend") end Разница только в actor или npc. Когда я ставлю в файле trade_mercenary.ltx условие buy_supplies = {=if_hip_veteran(actor)} , то результата нет. Не работает. А, когда ставлю {=request_to_hip_task(actor)} - работает. Я думал, по своей логике, что actor/npc - это просто условная переменная, которую можно заменить на любое слово, которое и подставится в ranks.get_obj_rank_name(). То есть в аргументе функции я выбираю, кого будет функция проверять на ранг. Соответственно, я ставлю actor , чтобы система проверила мой ранг в игре и продавала мне вещи или не продавала по скрипту. И я думал, что, то, что я пишу в аргументе (), оно же и дублируется в тело функции ranks.get_obj_rank_name() ... Но, получается, что нет. В чем тут дело? Тоже самое с функцией: function npc_rank(actor, npc, p) if p[1] == nil then printf("Wrong number of params in npc_rank") end if ranks.get_obj_rank_name(npc) == p[1] then return true end return false end В аргумент тут, по идее, нужно вписать название ранга (veteran, master и т.д.). Но кого он будет проверять на соответствие? npc ? Какого npc ? И как сделать, чтобы он проверял на ранг игрока, то есть actor ? Что вписывать в аргумент при вызове функции? (Это все при условии, что я не хочу менять саму функцию, а просто использовать ее для условий в trade_.ltx)
-
StrawFlux, N42 , спасибо за ваши ответы! А как мне узнать, какое название (с actor_ или без) приписал герою движок? Речь о моде Anomaly, на базе CoC, если что. По поводу return, то есть эти функции (к примеру) равнозначны: function npc_in_actor_community(actor,npc,p) local comm = character_community(npc) return db.actor and string.find(character_community(db.actor),comm) ~= nil end function npc_in_actor_community(actor,npc,p) local comm = character_community(npc) if db.actor and string.find(character_community(db.actor),comm) ~= nil then return true end return false end Вторую функцию я сам подредактировал из первой. Надеюсь, без ошибок И еще вопрос по другому скрипту: function if_actor_powerful(actor, npc) local repu = actor:character_reputation() if (repu >= 999) then return true else return false end end Почему здесь actor:character_reputation() , а не db.actor:character_reputation() ? Могу ли я использовать эти функции как условие в файлах trade_.ltx ? Я так понял, что is_actor_from_faction точно можно использовать как условие, нужно только вписать группировку в аргумент... А по поводу вышеуказанных функций не уверен. Подскажите...
-
N42, спасибо за ответ! 1. То есть можно с уверенностью сказать, что функция character_community(db.actor) возвращает actor_dolg, а не просто dolg? В game_relations.ltx есть и actor_dolg и dolg... В чем разница между этими понятиями? Ведь герой может быть просто dolg... 2. sub(7) получается обрезает возвращенный ответ на 7 символов? Я правильно понял? 3. Каким именно образом character_community(db.actor) получает actor_dolg ? Можно объяснить подробно новичку в программировании? И еще пару вопросов по Lua, если можно... Что значит вот это: obj:character_community() ? Что вообще делает двоеточие? (Я не нашел внятного объяснения в руководствах по языку - там это как-то сложно объяснено). Точка в db.actor - это ссылка либо на файл, либо на таблицу? Правильно? Почему в функции указаны параметры (actor, npc, p), хотя они не все используются? Зачем лишние? db.actor - это ссылка на файл db.script ? Но там же actor = nil Как так? И еще такой момент: return db.actor and string.find(character_community(db.actor),comm) ~= nil Я правильно понял, что после return идут условия этого return ? Это какая-то недокументированная фича? В руководствах об этом ни слова не сказано. Там сказано, что return всегда идет в конце и после него ничего не должно быть из условий... Ценю ваши ответы!..
-
Здравствуйте! Я еще только начал изучать Lua. Помогите понять логику скрипта: function character_community(obj) if not (obj) then return end if IsStalker(obj) then return obj:character_community() end return "monster" end Это из файла _g.script. К этой функции обращаются разные другие функции в других файлах скриптов, чтобы узнать группировку сталкера. Но я не понимаю, как эта функция работает. Откуда берет название группировки? Можете объяснить по пунктам, как новичку? Желательно всю цепочку ее работы. И еще вопрос, который меня мучает: В чем разница между этими двумя функциями и почему они вообще по-разному написаны, если делают, по-сути, одно и то же? И объясните их механизм работы по-подробнее, если не трудно... function is_actor_from_faction(actor, npc, p) local comm = db.actor and character_community(db.actor):sub(7) for k,v in pairs (p) do --printf("actor community: [%s], needed community: [%s]", comm, v) if (v == comm) then return true end end return false end function actor_community(actor,npc,p) if not (db.actor) then return false end for i=1,#p do if (character_community(db.actor) == p[i]) then return true end end return false end