Если смотреть с точки зрения программирования, количество предметов в инвентаре npc может ли как-то влиять на производительность системы? Скажем, будет ли хоть малейшая разница, пусть даже мало заметная, если у npc миллион предметов или вообще ничего нет?
Сообщение было успешно отредактировано Максим Р. (04-09-2009 23:58 GMT3 часа, назад)
Максим Р. Естественно будет. Вообще, в игре может быть не больше 65535 объектов(ограничение по id). При этом, пока объект находится в оффлайн, он почти не влияет на работу системы. Почему почти? Потому что, одно только существование объекта занимает свой объём ОП. Когда объект выводится в онлайн, он использует уже значительно больше памяти. Так вот, предметы находящиеся в инвентаре актора, всё время находятся в онлайн. В этом можно убедиться, просмотрев таблицу db.storage в реальном времени. Данная таблица содержит в себе логические данные о объектах, находящихся в онлайн. Если ты играл в билд 1935, то должен был заметить постепенное увеличение торможения игры, при мародёрстве. Которое происходило из-за увеличения количества предметов в инвентаре актора.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
SOS! Срочно требуется разбор полетов работы скрипта тотализатора.
Есть пара серьезных проблем.
1. Функция отбора денег/ставок не хочет их отбирать.
2. При сохранке - вылет.
3. Далог работает - фразы\ставки рандомно выпадают.
а дальше - ничего - вылета нет, но нет ни сообщений, ни отбора денег, ни выигрыша\проигрыша.
Там в основой функции есть пара неясных мне нюансов.
отбор ставок
local stavka = {1000, 5000, 10000, 15000, 20000, 25000, 30000, 35000, 40000, 50000}
local dolg = 0
function transfer_stavka()
local money = db.actor:money()
for n, s in ipairs(stavka) do
if db.actor:has_info("frase_"..n) then
if money >= s then
db.actor:transfer_money(s, npс)
game_stats.money_quest_update(-s) --\ было без этой строчки
else
dolg = s-money
db.actor:transfer_money(money, npс)
game_stats.money_quest_update(-money) --\ и без этой
end
end
end
this.totalizator() --\ надо что то писать в () ?
end
итоговый вариант функции тотализатор
--\ таблицы поршней и призовых сум не пишу сюда.
function totalizator()
local sums
local summa = 0
for s, v in ipairs(portion) do
if db.actor:has_info(v) then
sums = ts["sums_"..s]
summa = sums[math.random(#sums)]
db.actor:give_money(summa)
game_stats.money_quest_update(summa) --\ было без этой строчки
for k, v in ipairs(prize) do
if summa == v then
news_manager.send_tip(db.actor, "news_"..k, 5000, "stalker", 10000)
end
if dolg > 0 then --\ или так надо: local sum = db.actor:money()
if summa >= dolg then --\ if sum>= dolg then
db.actor:transfer_money(dolg, npс)
game_stats.money_quest_update(-dolg) --\ было без этой строчки
dolg = 0
else
dolg = dolg - summa --\ dolg = dolg - sum
db.actor:transfer_money(summa, npс)
game_stats.money_quest_update(-summa) --\ все вот эти строчки надо вообще добавлять? было без них
end
end
end
end
end
dialogs.disable_portion()
end
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Я так понимаю, что вызывается из диалога у тебя функция transfer_stavka(). При этом, у тебя не передаются в неё данные о собеседниках. Хотя должны. В итоге, переменная npc у тебя берётся не понятно от куда. Поэтому, у тебя ничего и не прёт. Пропиши в скобках соответствующие переменные.
function transfer_stavka(actor, npc) --если вызов идёт из фразы актора
function transfer_stavka(npc, actor) --если вызов идёт из фразы нпса
this.totalizator(actor, npc)
function totalizator(actor, npc)
И переправь все db.actor на actor.
Действие game_stats.money_quest_update(-money) указывать не обязательно. Это запись данных в таблицу stats, и последующий вывод информации в интерфейс движка(используется при разработке и тестировании игры).
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
Ага понял...я так и предполагал, что надо прописывать переменные, но не знал какие ...че то пока не могу разобраться в том, какие переменные надо прописывать в скобочках в разных случаях...
и как делать передающие функции с данными...
а почему db.actor надо на actor переправлять? И в transfer_stavka() и в totalizator(actor, npc) ?
функция у меня вызывается с тэга эктора, значит надо
function transfer_stavka(actor, npc)
и здесь this.totalizator(actor, npc)
щас все исправлю Спасибо.
добавлено спустя 2 минут
а вылет с сохранкой от этих же недочетов?
я прописал обе функции
в одних местах
sr_psy_antenna.load(reader)
totalizator.load_dolg(reader)
и
sr_psy_antenna.save( packet )
totalizator.save_dolg(packet)
добавлено спустя 2 минут
насчет db.actor кажется понял....
Сообщение было успешно отредактировано erlik (05-09-2009 13:35 GMT3 часа, назад) Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
ты же их сам мне сделал: как есть так и вставил
после функции transfer_stavka - хотя их ведь куда хошь можно в файле пихать...
function save_dolg(p) --функция сохранения долга
p:w_u32(dolg)
end
function load_dolg(r) --функция загрузки долга
dolg = r:r_u32()
end
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
local sums_2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
и т.д.
1000000}, --\ 1 сумма по 1000000
local sums_3 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
и так до последней
в самом конце так
1000000} --\ 1 сумма по 1000000
}
И вылет при сейве:
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ...2\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:367: attempt to index global 'totalizator' (a nil value)
367 это строка
totalizator.save_dolg(packet)
добавлено спустя 5 минут
а в функции
function disable_portion() в скобочках ничего не надо указывать?
и там у меня db.actor: используется ...
Сообщение было успешно отредактировано erlik (05-09-2009 14:20 GMT3 часа, назад) Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Ну конечно. У тебя получается, что файл после начала твоей таблицы вообще не читается. Так как получает ошибку чтения. Ты как составил двумерную таблицу? Я тебе как написал?
local tbl =
{
local ключ1 = {},
local ключ2 = {},
local ключ3 = {}
}
Ключи, не могут быть локальными.
добавлено спустя 3 минут
В disable_portion() у тебя, я так понял, просто отключаются включенные поршны. А раз в ней нет никаких нпсов, то actor передавать не обязательно. Оставь как есть.
Сообщение было успешно отредактировано singapur22 (05-09-2009 14:28 GMT3 часа, назад) Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
Блин вот я лоханулся...а я даже не заметил, что у тебя там без local было... ну я ведь еще просто не понял как эти таблицы работают и само их понятие для меня абсолютно новое...
добавлено спустя 1 минуту
хотя нет, заметил...но когда копипаст делал - не исправил...
добавлено спустя 25 минут
а все эти цифры должны быть в одну строку или можно в ряд?
singapur22
Тогда почему не работает???
Может тебе геймдату с файлами тотала залить? (У меня все аккуратно расфасовано - так что можно даже в любой мод потом без адаптации совать - тока локализейшен и систем надо сравнить, и сидору айди диалога вписать). Посмотришь - тестанешь, так яснее наверно будет в чем дело...
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
FaithGTX
Без разницы - главное сделать... (с этим как раз проблема у модмейкеров второй волны) и такой чтобы играть захотелось, а не читать описание и думать: и нафига его делали...
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Максим Р. Разница такая. Если написать < if переменная then ...> То прверка будет производиться не только на существование переменной, но и на значение false. Тоесть условие будет верно, если переменная не равна nil и не равна false. Я не знаю, может ещё на чтото проверяется, но в этих двух я уверен.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
а что такое NLC мод? я слышал, что это какой то аддон к амк, но описание в инете не могу найти! напишите пожалуйста описание.
добавлено спустя 3 минут
а все, сам нашел Но если кому то интересно, то вот:
Теперь собственно описательная часть:
1. New_Level_Changer (NLC) добавляет в игру 12 новых переходов между локациями - это:
I) Кордон-Агропром
II) Агропром -Кордон
III) Агропром-Янтарь
IV) Янтарь-Агропром
V) Янтарь-Радар
VI) Радар-Янтарь
VII) Радар-Темная Долина
VIII)Темная долина-Радар
IX) Темная долина-Склады
X) Склады-Темная долина
XI) Склады-Росток
XII) Росток-Склады
(предвосхищая множество упреков в непонятной "забывчивости" ГГ - т.е. "прошел в одну сторону, а обратно пройти не помнит как!" скажу - согласно всем законам ЗОНЫ сталкер НИКОГДА не возвращается той дорогой, которой пришел! Для разведования обратной дороги необходимы человеческие жертвы или ясная карта!)
2. Указанные выше переходы не доступны сразу, чтобы их найти (получить) необходимо выполнить несколько квестов или найти некоторые документы (предположительно в которых описываются неизвестные дороги) (добавляется 6 квестов)
3. Существующие ранее переходы: (I)Бар-Дикая территория, (II)Бар-Армейские склады и (III)Радар-Армейские Склады в данной версии не работают до выполнения некоторых сюжетных заданий, а именно:
I) Необходимо принести документы из лаборатории Х-18 Бармену;
II) Необходимо принести флешку Круглова Бармену или купить переход за деньги у Осведомителя.
III) Необходимо купить информацию у Осведомителя после отключения выжигателя на Радаре.
4. Существует система МЕЖЛОКАЦИОННЫХ ТЕЛЕПОРТОВ, телепорты могут открыть за определенные артефакты и деньги такие персонажи как - Фанат, Сахаров, Скряга, Макс, Повар, Болотный Доктор. Чтобы получить возможность пользования телепортами необходимо выполнить новые квестовые задания от указанных персонажей. (т.е. добавляются еще 12 квестов)
5. Существует возможнось получения (модификации) артефактов - из низших получить более высокого ранга. Рецепты артмодификаций дают в награду за выполненные задания практически все встречающиеся вам квестовые персонажи. (т.е. добавляется еще 40 квестов)
6. Есть возможность получить нейтралитет с бандитами в ТД (остальные бандиты остаются врагами), и, Выполнив два задания от Борова, можно получить рецепты модификации артефактов из обычных вещей. (добавляется еще 3 квеста)
7. Полностью изменена система торговли с торговцами - теперь хорошее оружие, патроны, аптечки и т.д. можно получить только в обмен на артефакты...
8. Введен специальный ящик для ремонтных наборов, благодаря которым можно ремонтировать оружие и броню самому Меченному.
9. Изменена система накопления радиации от радиоактивных артефактов. Теперь радиация накапливается даже при нахождении артефактов в рюкзаке.
10. Для нейтрализации вредного излучения артефактов есть специальные защитные контейнеры - 3 вида: на 1 артефакт, на 3 артефакта и на 8 артефактов. Каждый контейнер имеет разную степень защиты и соответственно разный вес и стоимость.
11. Введены новые персонажи: бандит Крысюк, Ремонтник в баре Долговязый, Информатор в баре - Доцент, Торговец на Агропроме - Прапорщик Шерстюк, Торговец на Радаре - Сяк, Болотный доктор.
12. Изменено начало игры, теперь не в бункере у Сидоровича.
13. На все локации добавлены невидимые аномалии (не смертельны, но неприятны).
14. Артефакты появляются абсолютно случайно, после каждого Выброса.
15. Выбросы происходят случайным образом (до следующего выброса - от 4 часов до суток).
16. Имеется возможность получения уникального артефакта - "Живое сердце", которое позволяет оживлять квестовых персонажей. (еще 5 квестов для получения рецепта).
17. Имеется возможность значительно (30 мин реального времени) увеличить время до выброса на ЧАЭС (еще 2 квеста).
18. Добавлена возможность выбора музыки в Баре (за деньги у Бармена)
19. Доцент может настроить ваш ПДА для обнаружения опасных монстров и необходимых людей. (еще 3 квеста)
20. На локациях где имеется громкоговоритель - играет музыка.
21. Усилены военные на агропроме (лучше договориться с Шерстюком).
22. Введен аддон "умные неписи" от xStream, благодаря которому, теперь противники бросают гранаты, лечат друг друга, переодеваются в новые бронежилеты, оттаскивают трупы подальше от костров...
23. Введен аддон "марадер мод" от Skunk, благодаря которому в трупах остается именно та броня, в которую был одет убитый.
24. Введен уборщик трупов и бесхозного оружия от Skunk, теперь не нужно беспокоиться об огромном количестве трупов и оружия, валяющихся на локациях.
25. Тайники теперь можно получить - если распить бутылочку водки с персонажем.
Сообщение было успешно отредактировано uht21 (05-09-2009 21:18 GMT3 часа, назад)
всем спасибо!кто откликнулся!вас так много аж не знаю с чего начать!неужели так трудно подсказать!или за своими глобальными проблемами чужие не просматриваются???помогите пацаны как добавить ящик с инструментом чтоб гг мог сам чинить броню и оружие?????зараннее спасибо если хоть у кого то найдется время и желание помочь начинающим!!!!!!?????
А вот как допустим сделать чтобы костюм призрака рандомно портился? Ну то есть спавнился в трупе призрака не со 100% состаяния. А то получается он помер святым духом.
Журнал
- модель M79
- модель HK SL-8
- модель Milkor m32 WIP
blackraven6
Навскидку вот написал такую функцию:
function condition_armor()
local armor = db.actor:object("outfit_stalker_m1") --\ костюм призрака как вещь в рюкзаке ГГ
if armor ~= nil then -\ если у эктора в инвентаре вдруг появился костюм призрака
if armor:condition() == 1 then --\ и если он новехонький
armor:set_condition((math.random(15)+75)/100) --\ то мы его слегка подпортим - коэфф. рандомный
end
end
end
мои комменты после --\лучше будет убрать, если будешь проверять.
эту функцию ставишь на апдейт в файл bind_stalker
в функцию function actor_binder:on_item_take (obj) --\ срабатывает на взятие предмета в инвентарь эктора
типа так: имя_файла_с_функцией. condition _armor()
((math.random(15)+75)/100) --\ здесь задан рандомный диапазон порчи: от 76% до 90%
если поставишь так ((math.random(10)+50)/100) то будет рандом от 51% до 60%
если так ((math.random(40)+50)/100) то от 51% до 90%
Не знаю рабочая ли она - так как все же опыт в написании скриптов пока небольшой - но скрипт теста функций показал , что вроде все норм. Попробуй проверь в игре.
Сообщение было успешно отредактировано erlik (06-09-2009 05:26 GMT3 часа, назад) Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.