Alex Paen

lua скрипты и моды по изменению баланса

225 posts in this topic

Лимит производства могу увеличить на раз два. Тут кстати дельные мысли возникли. На мой взгляд стоит ЗНАЧИТЕЛЬНО увеличить строительство электропутей, но снизить эксплуатацию электропоездов. Ведь по факту дизель дороже электричества, но инфраструктура отжирает свое. Надо глянуть поподробнее, жаль времени личного мало =(

0

Share this post


Link to post
Share on other sites

В эксплуатацию электротранспорта должны быть встроены расходы на обслуживание электроинфраструктуры, которые составляют значительную часть общих расходов.

Увеличить стоимость прокладки путей и их электрификации в разы - это как раз то, что я и хочу сделать помимо уменьшения цен на вагоны и их обслуживание. Плюс к этому поднять цены на постройку станций, депо и других подобных вещей.

1

Share this post


Link to post
Share on other sites

ну не знаю, электричество нынче не дешевое, ВЛ потребляет порядка 35 квт в час (175р/ч) + до 10 % потери нарпряжения + обслуживание линии (+ бесконечности) + обслуживание подстанций выходит дороже дизеля ЧМЭ3 8кг/ч (200 р/ч), в нагрузке же 200 квт против 250 л при больших маштабах может оно и одинаково.

0

Share this post


Link to post
Share on other sites

Вот об чем и речь, что дешевизна и безусловная выгода электротяги - это расхожий миф.

0

Share this post


Link to post
Share on other sites

Вот такую твикалку сделал:

 

runFn = function (settings)
		addModifier("loadModel", function (fileName, data)
				if data.metadata.transportVehicle and data.metadata.railVehicle then
					if data.metadata.railVehicle.engines then
						if data.metadata.description  then
							if data.metadata.description.name == "Stake car"  then
								data.metadata.cost.price = 100 * (data.metadata.availability.yearFrom - 1825) * data.metadata.railVehicle.weight
								data.metadata.maintenance.runningCosts = 100 * (data.metadata.availability.yearFrom - 1825) * data.metadata.railVehicle.weight * 0.2
							end
						end
					else 
						if data.metadata.transportVehicle.seats then
							data.metadata.cost.price = 200 * data.metadata.railVehicle.topSpeed * (data.metadata.railVehicle.weight * 0.8) 
							data.metadata.maintenance.runningCosts = (200 * data.metadata.railVehicle.topSpeed * (data.metadata.railVehicle.weight * 0.8)) * 0.2
						else
							data.metadata.cost.price = 100 * (data.metadata.availability.yearFrom - 1825) * data.metadata.railVehicle.weight 
							data.metadata.maintenance.runningCosts = 100 * (data.metadata.availability.yearFrom - 1825) * data.metadata.railVehicle.weight * 0.2
						end
					end
				end

				return data
			end)
	end

 

 

Получается так, что цены на грузовые вагоны значительно отличаются от прошитых урбанами значений, например, цистерны трех размеров будут стоить 25к/113к/250к (годовое обслуживание = цена/5) , а вот пассажирские считаются по-другому и довольно мало отличаются от существующих. Обосновывал это тем, что они зарабатывают больше всех, гораздо сложней и дороже в производстве и требуют более дорогого обслуживания.

1

Share this post


Link to post
Share on other sites

офф топ: 
по спойлерам я тут нынче "мастер")))

[спойлер]текст[/спойлер] существует проблема что не во всех браузерах закрывается тег если в нем есть enter, Alex убеждает меня что это не так, но сути не меняет. Так что лучше сначала создаем тег. Жмем отправить. После чего через изменить работаем внутри тега. В таком случае избежим растягивания тега на текст и/или изображение вне ковычек. Shift+еnter переход на новую строку типа <br> не считается и можно использовать.

0

Share this post


Link to post
Share on other sites
2 часа назад, Vitaro сказал:

Лимит производства могу увеличить на раз два. Тут кстати дельные мысли возникли. На мой взгляд стоит ЗНАЧИТЕЛЬНО увеличить строительство электропутей, но снизить эксплуатацию электропоездов. Ведь по факту дизель дороже электричества, но инфраструктура отжирает свое. Надо глянуть поподробнее, жаль времени личного мало =(

Так что там с увеличением лимита?

0

Share this post


Link to post
Share on other sites
1 час назад, 750kVolt сказал:

[спойлер]текст[/спойлер] существует проблема что не во всех браузерах закрывается тег если в нем есть enter, Alex убеждает меня что это не так, но сути не меняет. Так что лучше сначала создаем тег. Жмем отправить.

Я этот тег ставить пытался, но раз в предпросмотре результата не было, убрал их. Теперь поставил - ох и заморочь, пытался тщетно ниже спойлера текст ввести - тщетно. Надо писать сверху и поле спойлера мышой тянуть. И заголовок не отредактировать.

п.с. Потестировал свои формулы - стартовать с ж/д без пассажиров и автомобилей уже вполне можно. Теперь нужно поднять ценники на инфраструктуру и уже можно начинать играться :)

0

Share this post


Link to post
Share on other sites

В связи с этим вопрос - как эти ценники поднять (множитель или абсолютное значение - не важно) из имеющегося файла mod.lua, а не классическим трейнфиверским способом, копируя кучу файлов в папке res со своими значениями?

0

Share this post


Link to post
Share on other sites
18 минут назад, Alex Paen сказал:

В связи с этим вопрос - как эти ценники поднять (множитель или абсолютное значение - не важно) из имеющегося файла mod.lua, а не классическим трейнфиверским способом, копируя кучу файлов в папке res со своими значениями?

Ты же потом выложишь файлик с измененными ценами? Чтобы простые смертные, тоже могли играть?

0

Share this post


Link to post
Share on other sites

Конечно выложу.

0

Share this post


Link to post
Share on other sites

Нашёл кост-мод, но он обфусцирован. Увы.

0

Share this post


Link to post
Share on other sites

А по поводу редакции стоимости нет идей?

0

Share this post


Link to post
Share on other sites
3 часа назад, Alex Paen сказал:

А по поводу редакции стоимости нет идей?

Формулу. Почти вывел. Эмпирическим путем. Луа версии пока нет, есть питоновская, если интересно. Если отображать с точностью как в игре, то совпадает.

Так как времени сейчас не особо, то кидаю наработки.

 

powerCost = 0.4025*6

def line(x1, x2, x, y1, y2):
    return (x - x1)/(x2 - x1)*(y2 - y1) + y1

def speedCost(speed):
    if speed >= 55 and speed <= 68:
        return 1
    elif speed > 68:
        if speed > 68 and speed <= 74:
            return 1 + (speed - 68) * 0.000690
        elif speed > 74 and speed <= 75:
            return 1.0041400 + (speed - 74) * 0.0008295
        elif speed > 75 and speed <= 90:
            return 1.0049695 + (speed - 75) * 0.000620
        elif speed > 90 and speed <= 99:
            return 1.0142695 + (speed - 90) * 0.000804
        elif speed > 99 and speed <= 135:
            return 1.0215055 + (speed - 99) * 0.000924
        elif speed > 135 and speed <= 180:
            return 1.0547695 + (speed - 135)* 0.0009907
        elif speed > 180 and speed <= 195:
            return 1.0993510 + (speed - 180)* 0.0008337
        elif speed > 195 and speed <= 200:
            return 1.1118565 + (speed - 195)* 0.00125
        elif speed > 200 and speed <= 230:
            return 1.1181065 + (speed - 200)* 0.000894
        elif speed > 230 and speed <= 240:
            return 1.1449265 + (speed - 230)* 0.001035
        elif speed > 240 and speed <= 300:
            return 1.1552765 + (speed - 240)* 0.000825
        elif speed > 300 and speed <= 375:
            return 1.2047765 + (speed - 300)* 0.0007741
        elif speed > 375 and speed <= 500:
            return 1.262834  + (speed - 375)* 0.000679
        elif speed > 500 and speed <= 750:
            return 1.347709  + (speed - 500)* 0.00054
        elif speed > 750 and speed <= 1000:
            return 1.482709  + (speed - 750)* 0.00045
        elif speed > 1000:# and speed <= 10000:
            return 1.595709  + (speed - 1000)* 0.0001571
    elif speed < 55:
        if speed >= 54 and speed < 55:
            return 1 + (55 - speed) * 0.002485
        elif speed >= 46 and speed < 54:
            return 1.002485 + (54 - speed) * 0.00082
        elif speed >= 0 and speed < 46:# Этот участок пока не готов
            return 1.009045 + (46 - speed) * 0.0016886801
    else: return 0


power = 1
speed = 200
cost = powerCost*speedCost(speed) * power
running = cost / 6
print("spd = {:0d}\tcst = {:0.2f}\trng = {:0.3f}".format(speed, cost, running))  

 

0

Share this post


Link to post
Share on other sites

Я-то про стоимости инфраструктуры никак не могу нарыть.

Меняю стоимость:

путь, э/фикация, туннель, мосты, станции, депо.

Пока приходится делать это копией конфиг.файлов, но чую что можно это сделать лишь в одном файлике mod.lua

0

Share this post


Link to post
Share on other sites

Все получилось пока ортодоксальным путем через ворох конфиг файлов, но и то уже совсем иначе все выглядит по расходам.

Туннели через полкарты теперь влетят в хорошую копейку. Да и мосты тоже. Электрификация более чувствительна, как и простая прокладка пути уже тоже недешева.

Единственное пока не найду где регулируются стоимости станций.

0

Share this post


Link to post
Share on other sites

Ура! Сбылась мечта, мой красный друг!

В 23.11.2016 в 20:00, Alex Paen сказал:

Пассажирам хотел привязать параметр кол-во мест как множитель, но ничего не получилось. Те параметры, что используются в конфигах не подходят, игра в ошибку влетает сразу. Придется видимо использовать массу вагона и макс.скорость.

Код, который позволяет задать цену вагона в зависимости от количества мест. Конечно это только пенёк (stub), кода и требует допиливания, но он уже работает. Специально не влияет на автомотрисы и составные юниты.

P.S. оффтоп. Кто поможет, у меня на форуме включился режим замены текста типа как по клавише Insert в ворде. Как пофиксить?

 

 

local function modelCallback(fileName, data)
	if data.metadata.transportVehicle then
		if data.metadata.transportVehicle.capacities then
			if not data.metadata.transportVehicle.multipleUnitOnly and data.metadata.railVehicle and not data.metadata.railVehicle.engines then
				if data.metadata.transportVehicle.capacities[1].type == "PASSENGERS" then
					data.metadata.cost.price = data.metadata.transportVehicle.capacities[1].capacity * 10
				end
			end
		end
	end
	return data
end

function data()
return {
	info = {
		minorVersion = 0,
		severityAdd = "NONE",
		severityRemove = "NONE",
		name = _("Passenger Wagons prices rebalance"),
		description = _("Passenger Wagons prices rebalance"),
	},
	runFn = function (settings)
		addModifier("loadModel", modelCallback)
		local costs = table.copy(game.config.costs)
	end
}
end

 

1

Share this post


Link to post
Share on other sites
19 минут назад, Devilhunter сказал:

P.S. оффтоп. Кто поможет, у меня на форуме включился режим замены текста типа как по клавише Insert в ворде. Как пофиксить?

Эмм я думаю виновата та же клавиша Insert. :D

20 минут назад, Devilhunter сказал:

Код, который позволяет задать цену вагона в зависимости количества мест.

Учитывая особенности наших вагонов, не помешал бы мод, который снижал бы цену и\или стоимость обслуживания вагонов в зависимости от их массы (т.е. снижал стоимость обслуживания для тяжёлых вагонов).

1

Share this post


Link to post
Share on other sites
Только что, Alex сказал:

Эмм я думаю виновата та же клавиша Insert. :D

ХМ...действительно. Но я ведь пробовал её нажимать. :wacko:

0

Share this post


Link to post
Share on other sites
10 часов назад, Devilhunter сказал:

capacities[1]

А можно на будущее для общего развития - что значит эта единица в скобках? Я ставил без нее и, понятное дело, игруха сразу же отругивала луа и вываливалась.

Ну и еще - в конфиге рельс параметры завязаны на локальную переменную t - тоже не вышло поправить стоимость скриптом.

0

Share this post


Link to post
Share on other sites
1 час назад, Alex Paen сказал:

А можно на будущее для общего развития - что значит эта единица в скобках? Я ставил без нее и, понятное дело, игруха сразу же отругивала луа и вываливалась.

Ну и еще - в конфиге рельс параметры завязаны на локальную переменную t - тоже не вышло поправить стоимость скриптом.

Я сам без единицы не понимал почему не работает, пока не нашёл мод Klorid realcapacity из ТФ. Там был цикл для изменения вместимости в 4 раза. Я не понимал зачем цикл. Невнимательно разглядывая код для пассажирских вагонов не заметил лишних фигурных скобок. Присмотрелся к коду грузовых вагонов и понял, что капаситис это список/массив/таблица/ну вы поняли.

transportVehicle = {
			carrier = "RAIL",
			capacities = {
				{ type = "COAL", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 2, maxHeight = 1.88 } } },
				{ type = "IRON_ORE", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 3, maxHeight = 1.88 } } },
				{ type = "STONE", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 4, maxHeight = 1.88 } } },
				{ type = "GRAIN", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 5, maxHeight = 1.88 } } },
				{ type = "SLAG", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 6, maxHeight = 1.88 } } },
			},
			loadSpeed = 3
		},

Если убрать из кода выше строку 

if data.metadata.transportVehicle.capacities[1].type == "PASSENGERS" then

но оставить 

data.metadata.cost.price = data.metadata.transportVehicle.capacities[1].capacity * 10

то цена для вагона в примере будет определяться вместимостью угля.

Т.е. capacities[1] это type = "COAL", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 2, maxHeight = 1.88 } } 

capacities[2] это type = "IRON_ORE", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 3, maxHeight = 1.88 } }

А само capacities это (весь список)

				{ type = "COAL", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 2, maxHeight = 1.88 } } },
				{ type = "IRON_ORE", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 3, maxHeight = 1.88 } } },
				{ type = "STONE", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 4, maxHeight = 1.88 } } },
				{ type = "GRAIN", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 5, maxHeight = 1.88 } } },
				{ type = "SLAG", capacity = 52, loadIndicator = { type = "LEVEL", params = { id = 6, maxHeight = 1.88 } } },

Поэтому у capacities нет .capacity

1

Share this post


Link to post
Share on other sites

Кстати. Вдруг кому поможет. Learn Lua in 15 Minutes

За 15 минут я его не осилил, но часа-полтора хватило чтобы неспешно разобраться в базовых принципах ЛУА. Это если вы разбираетесь в программировании в принципе, если нет, то посоветовать могу другое.

0

Share this post


Link to post
Share on other sites
55 минут назад, Devilhunter сказал:

Кстати. Вдруг кому поможет. Learn Lua in 15 Minutes

За 15 минут я его не осилил, но часа-полтора хватило чтобы неспешно разобраться в базовых принципах ЛУА. Это если вы разбираетесь в программировании в принципе, если нет, то посоветовать могу другое.

А есть вариант для чайников?

0

Share this post


Link to post
Share on other sites
6 минут назад, INC(RED)IBLE сказал:

А есть вариант для чайников?

Lua для чайников не видел, может где и есть, но есть программирование для чайников на примере С++, Java, Python 2, Python 3.

Вот там реально для чайников или для тех у кого сильно умные книжки вызывают скуку и они забрасывают изучения языка. Ведь для начала очень важно знать и понимать сами принципы программирования нежели знать язык.

0

Share this post


Link to post
Share on other sites
3 минуты назад, Devilhunter сказал:

Lua для чайников не видел, может где и есть, но есть программирование для чайников на примере С++, Java, Python 2, Python 3.

Вот там реально для чайников или для тех у кого сильно умные книжки вызывают скуку и они забрасывают изучения языка. Ведь для начала очень важно знать и понимать сами принципы программирования нежели знать язык.

Можно ссылок?

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.