Форум Trainsim

Форум Trainsim (http://www.trainsim.ru/forum/index.php)
-   TrainZ — Об игре (http://www.trainsim.ru/forum/forumdisplay.php?f=22)
-   -   Исправление ошибок контента, старые дополнения (http://www.trainsim.ru/forum/showthread.php?t=9301)

Iva 19.02.2010 20:14

В СМП никаких ошибок нету

Iva 22.02.2010 01:45

Хм, а нельзя ли сделать так, чтоб по дефолту все команды из правила driver commands были доступны в списке команд driver setup(просто даже при нерабочем правиле driver command работают команды wait, load и т.д.). Это конечно было бы неудобно, но всё же лучше чем ничего

TRam_ 22.02.2010 01:57

в общем, когда-то давно (точнее этим летом) я это правило себе чинил. Примерно так...

1) открыл куид Driver command на редактрование
2) скрипт там шифрованный, поэтому скопировал скрипт какого-то локомотива с переименованием на DriverCommandRule.gs

3) вставил скрипт этого правила из АПИ 2006

как я помню, заработало :)

[HTML]//
// DriverCommandRule.gs
//
// Copyright (C) 2002 Auran Developments Pty Ltd
// All Rights Reserved.
//

include "ScenarioBehavior.gs"
include "World.gs"
include "Browser.gs"
include "KUID.gs"


//
// This rule allows the scenario-designer to edit the driver commands available in a profile.
//
class DriverCommandRule isclass ScenarioBehavior
{
KUID[] driverCommands; // array of KUIDs of the driver commands currently in this rule
bool isDefault = true; // set to true if this rule's properties have not been customised


//
// Resets the commands in the Trainz world to the ones this rule has. Called by Pause()
// when this behavior is unpaused to reset driver commands.
//
void CreateCommandsNow(void);

void FillDefaults(void);


//
// ScenarioBehavior methods
//

//
// Initialization method that sets the driver command array to being empty.
//
public void Init(Asset p_self)
{
inherited(p_self);

driverCommands = new KUID[0];
}

//
// Pause/unpause this behavior. When unpaused, CreateCommandsNow() is called to reset
// driver commands.
//
public void Pause(bool paused)
{
if (paused == IsPaused())
return;

SetStateFlags(PAUSED, paused);

if (!paused)
CreateCommandsNow();
}


//
// PropertyObject methods
//

//
// Initializes the driver commands list of this rule from the given database.
//
public void SetProperties(Soup soup)
{
inherited(soup);

//
// Clear any existing data
//
driverCommands = new KUID[0];

//
// Reload from the specified soup
//
Soup commands = soup.GetNamedSoup("commands");

int i, count = commands.CountTags();
for (i = 0; i < count; i++)
{
Soup commandInfo = commands.GetNamedSoup((string)i);
driverCommands[i] = commandInfo.GetNamedTagAsKUID("kuid");
}
Interface.Log("DriverCommandRule.SetProperties> " + driverCommands.size() + " commands loaded");


isDefault = !count and !soup.GetNamedTagAsInt("DriverCommandRule.modified");





// this is a helper in case someone needs to know what commands are available
// it may cause inconsistancies if multiple DriverCommandRules are present!
// THIS IS A HACK - DONT RELY ON THIS IF AT ALL POSSIBLE
if (World.GetCurrentModule() == World.SURVEYOR_MODULE)
CreateCommandsNow();
}

//
// Saves the KUIDs of the driver commands in this rule to a database and returns it.
//
public Soup GetProperties(void)
{
Soup soup = inherited();

Soup commands = Constructors.NewSoup();
int i, count = driverCommands.size();
for (i = 0; i < count; i++)
{
Soup commandInfo = Constructors.NewSoup();
commandInfo.SetNamedTag("kuid", driverCommands[i]);
commands.SetNamedSoup((string)i, commandInfo);
}
soup.SetNamedSoup("commands", commands);

soup.SetNamedTag("DriverCommandRule.modified", !isDefault);

Interface.Log("DriverCommandRule.GetProperties> " + driverCommands.size() + " commands saved");

return soup;
}


public bool ListContainsKUID(KUID[] list, KUID it)
{
int i;
for (i = 0; i < list.size(); i++)
if (list[i] == it)
return true;

return false;
}

public bool ListRemoveKUID(KUID[] list, KUID it)
{
int i;
for (i = 0; i < list.size(); i++)
if (list[i] == it)
{
list[i, i+1] = null;
return true;
}

return false;
}

public void ListAddKUID(KUID[] list, KUID it)
{
list[list.size()] = it;
}


//
// Returns HTML code with hyperlinks that allows commands in this rule to be added/deleted.
//
public string GetDescriptionHTML(void)
{
if (isDefault)
FillDefaults();

StringTable strTable = GetAsset().GetStringTable();
string list = "";
int i;

list = list + "<table>";

Asset[] commandAssets = World.GetAssetList("DriverCommand");

for (i = 0; i < commandAssets.size(); i++)
{
Asset commandAsset = commandAssets[i];
KUID commandKUID = commandAsset.GetKUID();
string commandName = commandAsset.GetName();
string commandIcon = commandKUID.GetHTMLString();
string description = commandAsset.GetStringTable().GetString("description");
string url = "live://property/" + (string)i;
string link = "<a href='" + url + "'>";

if (description.size())
description = BrowserInterface.Quote(description);
else
description = strTable.GetString("no-description");


list = list + "<tr>";


list = list + "<td>" + link;
list = list + HTMLWindow.CheckBox( url, ListContainsKUID(driverCommands, commandKUID) );
/*if (ListContainsKUID(driverCommands, commandKUID))
list = list + "<img src='checkbox-on.tga'>";
else
list = list + "<img src='checkbox-off.tga'>";*/
list = list + "</td>";


list = list + "<td>" + link;
list = list + "<img kuid='" + commandIcon + "' width=48 height=48>";
list = list + "</a></td>";

list = list + "<td>" + link;
list = list + "<font color=#000000>" + BrowserInterface.Quote(commandName) + "</font></a><br>";
list = list + "<font color=#000000 size=-4>" + description + "</font>";
list = list + "</td>";


list = list + "</tr>";

}

/*

for (i = 0; i < driverCommands.size(); i++)
{
Asset commandAsset = World.FindAsset(driverCommands[i]);
KUID kuid = commandAsset.GetKUID();
string icon = kuid.GetHTMLString();

string commandName;

if (commandAsset)
commandName = commandAsset.GetName();
else
commandName = "<not installed>";

list = list + "<tr><td width=5></td><td>";
list = list + "<img kuid='" + icon + "' width=32 height=32> </td><td width=5></td><td><font color=#000000>" + BrowserInterface.Quote(commandName) + "</font>";
list = list + "</td>";
list = list + "<td width=5></td><td>";
list = list + "<font color=#000000><a href=live://property/" + ((string)i) + ">" + strTable.GetString("html_description3") + "</a></font>";
list = list + "</td></tr>";
}
*/

list = list + "</table>";


//if (driverCommands.size() < 20)
// list = list + strTable.GetString("html_description1");

return "<html><body><font color=#000000>" + strTable.GetString("html_description2") + list + "</font></body></html>";
}

//
// Gets user-friendly readable name for the named property.
//
string GetPropertyName(string p_propertyID)
{
StringTable strTable = GetAsset().GetStringTable();
//if (p_propertyID == "add-object")
// return strTable.GetString("property_name_add");

return "<null>";
}

//
// Gets user-friendly readable description of named property.
//
string GetPropertyDescription(string p_propertyID)
{
StringTable strTable = GetAsset().GetStringTable();
//if (p_propertyID == "add-object")
// return strTable.GetString("property_desc_add");

return "<null>";
}

//
// Gets the type for the named property.
//
string GetPropertyType(string p_propertyID)
{
//if (p_propertyID == "add-object")
// return "list";

return "link";
}

//
// Called by SetPropertValue and GetPropertyElementList to get the names of all of the
// commands in the array.
//
/*void GetCommandNameKUIDList(string[] names, KUID[] kuids)
{
Asset[] commandAssets = World.GetAssetList("DriverCommand");

int i, out = 0;
for (i = 0; i < commandAssets.size(); i++)
{
KUID kuid = commandAssets[i].GetKUID();
int n;

for (n = 0; n < driverCommands.size(); n++)
if (driverCommands[n] == kuid or driverCommands[n].GetName() == commandAssets[i].GetName() )
{
kuid = null;
break;
}

if (kuid)
{
if (names)
names[out] = commandAssets[i].GetName();
if (kuids)
kuids[out] = kuid;

out++;
}
}
}*/

//
// Sets the value of the named property.
//
/*void SetPropertyValue(string p_propertyID, string p_value)
{
if (p_propertyID == "add-object")
{
string[] names = new string[0];
KUID[] kuids = new KUID[0];

GetCommandNameKUIDList(names, kuids);
int i;

for (i = 0; i < names.size(); i++)
if (names[i] == p_value)
{
driverCommands[driverCommands.size()] = kuids[i];
return;
}
}
}*/

//
// Respond to a hyper-link click on the named property.
//
void LinkPropertyValue(string p_propertyID)
{
isDefault = false;

int index = Str.ToInt(p_propertyID);
//driverCommands[index, index + 1] = null;

Asset[] commandAssets = World.GetAssetList("DriverCommand");
KUID commandKUID = commandAssets[index].GetKUID();

if (ListRemoveKUID(driverCommands, commandKUID))
{
// an item was removed
}
else
{
// add an item
ListAddKUID(driverCommands, commandKUID);
}


// this is a helper in case someone needs to know what commands are available
// it may cause inconsistancies if multiple DriverCommandRules are present!
// THIS IS A HACK - DONT RELY ON THIS IF AT ALL POSSIBLE
CreateCommandsNow();
}

//
// Gets a list of elements the user can select for the named property.
//
public string[] GetPropertyElementList(string p_propertyID)
{
string[] ret = new string[0];

//if (p_propertyID == "add-object")
// GetCommandNameKUIDList(ret, null);

return ret;
}


//
// Resets the commands in the Trainz world to the ones this rule has. Called by Pause()
// when this behavior is unpaused to reset driver commands.
//
void CreateCommandsNow(void)
{
if (isDefault)
FillDefaults();

//
// Reset the driver commands list
//
int i, count = driverCommands.size();

DriverCommand[] dcs = World.GetDriverCommandList();
for (i = 0; i < dcs.size(); i++)
World.RemoveDriverCommand(dcs[i]);

Interface.Log("DriverCommandRule.CreateCommandsNow> " + dcs.size() + " commands removed");


for (i = 0; i < count; i++)
{
Asset commandAsset = World.FindAsset(driverCommands[i]);

if (commandAsset)
World.AddDriverCommand(commandAsset);
}

Interface.Log("DriverCommandRule.CreateCommandsNow> " + driverCommands.size() + " commands added");
}

void FillDefaults(void)
{
Asset asset = GetAsset();

driverCommands = new KUID[11];

driverCommands[0] = asset.LookupKUIDTable("drive-to-command");
driverCommands[1] = asset.LookupKUIDTable("drive-to-trackmark-command");
driverCommands[2] = asset.LookupKUIDTable("drive-via-trackmark-command");
driverCommands[3] = asset.LookupKUIDTable("drive-schedule-command");
driverCommands[4] = asset.LookupKUIDTable("load-command");
driverCommands[5] = asset.LookupKUIDTable("unload-command");
driverCommands[6] = asset.LookupKUIDTable("couple-command");
driverCommands[7] = asset.LookupKUIDTable("decouple-command");
driverCommands[8] = asset.LookupKUIDTable("runaround-command");
driverCommands[9] = asset.LookupKUIDTable("wait-for-command");
driverCommands[10] = asset.LookupKUIDTable("notify-command");

isDefault = true;
}


public void AppendDependencies(KUIDList io_dependencies)
{
inherited(io_dependencies);

int i;
for (i = 0; i < driverCommands.size(); i++)
io_dependencies.AddKUID(driverCommands[i]);
}

};
[/HTML]

antikiller_bmrf 22.02.2010 02:00

Ты попробуй [URL="http://dump.ru/file/4346628"]правило[/URL] установить снова, когда ты его скоммитишь, у тебя скорее всего появятся ошибки, т.к. трс 2010 дрянь прячет ошибки встроенного контента

Iva 23.02.2010 01:42

antikiller_bmrf:
У меня не получается скоммитить это правило, ругается СМП(видимо из-за того что пиратка), но если сделать клон, его открыть для редактирования, а потом скоммитить, то ошибок никаких нету.

TRam_
Сделал всё как ты написал(открыл для редактирования, взял левый скрипт, вставил в него то что ты написал, переименовал, скоммитил) но команды всёравно не отображаются((
Только делал это так же с клоном driver commands, так как потом бы не скоммитилось если бы был оригинал

Arturmachinist 23.02.2010 01:49

Хмм, блин. как я до клона-то не додумался...:)
[B]Iva[/B], это не из-за пиратки. Это чёртов Ауран внедрил такую систему, которая хрен коммитит встроенные куиды, которые уже открывались на редактирование. Можно только вернуть к оригиналу этот куид. А вот клон - хорошая идея.

antikiller_bmrf 23.02.2010 02:01

Я вижу один выход, устанавливать допы по порядку, пока проблема не проявит себя.
Сначала по категориям сохраняешь свой контент, и устанавливаешь.
Потом в конкретной категории ищешь объект, приводящий к проблеме.
Начинай искать со всякой хрени мелкой, правил, скриптов и т.д. (не думаю что виной этому здания или рельсы))

Iva 23.02.2010 22:42

Да, пожалуй придётся так и сделать
(Пошёл запасаться терпением)

Iva 24.02.2010 02:45

Ура!
Заработало!
А всё было из-за карявой команды autodrive
подправил в ней конфиг и всё стало отображаться и работать

antikiller_bmrf 24.02.2010 02:46

Так там ошибка была в смр?

Iva 24.02.2010 12:10

Ошибка в CMP была напротив Autodrive, а driver command было без ошибок

Виталик 26.02.2010 14:15

Помогите исправить такую ошибку: Error: Script class does not match asset kind (signal).
Это <kuid:189155:1068> А вот и сам скрипт: [CODE]// Original script written by Dmitry Kovaliov aka Дмитрий К & Michail Rozov aka RMM

include "common.gs"
include "Signal.gs"
include "gs.gs"

class kdakm isclass Signal {
Soup settings;
StringTable ST;
string kmnumber1, kmnumber2;
int km1,i;

string MakeProperty(string link, string text) {
string t;
if (text=="") {t=ST.GetString("none"); } else {t=text;}
return HTMLWindow.MakeLink("live://property/"+link,t);
}

public string GetDescriptionHTML(void) {
string ret="<HTML><body>";
string bgcol=ST.GetString("BGCOLOR");
string bgcol2=ST.GetString("BGCOLOR2");

ret=ret+HTMLWindow.StartTable();
ret=ret+HTMLWindow.MakeRow(HTMLWindow.MakeCell(ST.GetString("platetext")));

ret=ret+HTMLWindow.MakeRow(HTMLWindow.MakeCell(ST.GetString("platetext1"),bgcol)+HTMLWindow.MakeCell(MakeProperty("kmnumber1",kmnumber1),bgcol2));
ret=ret+HTMLWindow.EndTable();

ret=ret+"</Body></html>";
return ret;
}

public string GetPropertyType(string id) {
string[] tok=Str.Tokens(id,"/");

if (tok[0]=="kmnumber1") { return "string,0,4"; }
return "link";
}


public void SetPropertyValue(string id, string val) {
string[] tok=Str.Tokens(id,"/");


if (tok[0]=="kmnumber1") {
kmnumber1=val;
if (kmnumber1=="") {SetFXNameText("name1"," ");} else {SetFXNameText("name1",kmnumber1);}
}
}

public string GetPropertyName(string id) {
string[] tok=Str.Tokens(id,"/");

if (tok[0]=="kmnumber1") { return ST.GetString("platetext1"); }
return "";
}

public Soup GetProperties(void) {
Soup db=inherited();
db.SetNamedTag("kmnumber1",kmnumber1);
db.SetNamedTag("kmnumber2",kmnumber2);
return db;
}

public void SetProperties(Soup db) {
kmnumber1=db.GetNamedTag("kmnumber1");
kmnumber2=kmnumber1+"a";
i=0;
km1=0;
for(;kmnumber2[i]!=97;i++) ;
if (i==1) km1=kmnumber2[0]-48;
if (i==2) km1=(kmnumber2[0]-48)*10+kmnumber2[1]-48;
if (i==3) km1=(kmnumber2[0]-48)*100+(kmnumber2[1]-48)*10+kmnumber2[2]-48;
if (i==4) km1=(kmnumber2[0]-48)*1000+(kmnumber2[1]-48)*100+(kmnumber2[2]-48)*10+kmnumber2[3]-48;
if (i==5) km1=(kmnumber2[0]-48)*10000+(kmnumber2[1]-48)*1000+(kmnumber2[2]-48)*100+(kmnumber2[3]-48)*10+kmnumber2[4]-48;
km1=km1+1;
kmnumber2=km1;
if (kmnumber1=="") {SetFXNameText("name0"," ");} else {SetFXNameText("name0",kmnumber1);}
if (kmnumber2=="") {SetFXNameText("name1"," ");} else {SetFXNameText("name1",kmnumber2);}

PostMessage(me,"kdakm","Setup",0);
}

public void Init(void) {
inherited();
Asset self=GetAsset();
settings=self.GetConfigSoup().GetNamedSoup("settings-table");
ST=self.GetStringTable();
return;
}

};[/CODE]

TRam_ 26.02.2010 15:36

[url]http://www.trainsim.ru/forum/showpost.php?p=154822&postcount=77[/url]

Виталик 26.02.2010 16:02

[QUOTE=TRam_;157586][url]http://www.trainsim.ru/forum/showpost.php?p=154822&postcount=77[/url][/QUOTE]

Сделал всё как там написано, пробовал и jkmstolb2, и оставлял kdkam, теперь такая ошибка: [CODE]Error: Script class does not match asset kind (trackside).
[/CODE]

Добрый 26.02.2010 17:39

[B]Tram[/B], это не вокзал, а километровый столб, с вокзалами решение прекрасное.
[B]Виталик[/B], у меня этот столб ошибок не выдаёт, я его исправлял, правда уже не помню как. Сейчас скрипт такой
include "common.gs"
include "trackmark.gs"
include "gs.gs"

class kdakm isclass TrackMark {

Виталик 26.02.2010 17:56

[QUOTE=Добрый;157612][B]Tram[/B], это не вокзал, а километровый столб, с вокзалами решение прекрасное.
[B]Виталик[/B], у меня этот столб ошибок не выдаёт, я его исправлял, правда уже не помню как. Сейчас скрипт такой
include "common.gs"
include "trackmark.gs"
include "gs.gs"

class kdakm isclass TrackMark {[/QUOTE]

Спасибо огромное! Помогло!:russian: Ещё такая ошибка с Русским регионом: [CODE]Error: The Tag 'carrate' is not permitted within a container of type 'region'.[/CODE]
Как это лечится?

Добрый 26.02.2010 18:19

Насколько помню, удалением, в регионе такого тега не бывает...

antikiller_bmrf 26.02.2010 19:53

Проще всего исправить в ССР, он явные ошибки выделяет желтым\красным, удаляй-не хочу.

Виталик 27.02.2010 18:05

[QUOTE=antikiller_bmrf;157669]Проще всего исправить в ССР, он явные ошибки выделяет желтым\красным, удаляй-не хочу.[/QUOTE]

Да нет, иногда бывает проще удалить вручную, в некоторых допах после удаления тега CCP начинает переставлять теги в контейнерах, и из-за этого выскакивают всё новые и новые ошибки, а при ручной правке этого как правило не бывает.

Санёк1 28.02.2010 23:02

Скажите,можно ли удалить встроенный объект?

antikiller_bmrf 01.03.2010 01:28

Нет, никоем образом.

IIvIICHAEL 05.03.2010 02:06

Подскажите пожалста, сегодня установил trainz 2010, пытался поставить допы, любые от выльника 1628 до деревьев каких то) постоянно выдает
Error: Failed to commit changes to asset <...Куид...> due to file access error

TRam_ 05.03.2010 02:34

посмотри антивирус... Если стоит win 7, то попробуй запустить в режиме совместимости с win XP SP3

IIvIICHAEL 05.03.2010 13:44

Nod отрубил, запустил Км в режиме xp sp 3, не помогло..

TRam_ 05.03.2010 13:50

а у тебя треинз на диске D ? (вообще как-то можно добавлять проги в program files в исключения с полным доступом к диску, но не знаю как)

Если он на С попробуй на D поставить...

IIvIICHAEL 05.03.2010 13:53

Не, у меня с и d системники, треинз стоит на F это логический....

IIvIICHAEL 05.03.2010 13:55

Не, у меня он стоит на F (логический диск)

antikiller_bmrf 05.03.2010 17:22

В каком виде устанавливаешь, в cdp или просто файлами?
откуда устанавливаешь?
Установленные допы остаются, но в разделе open for edit, я правильно понял?
Раньше треинз другой стоял, работало?
Какая ОС?

IIvIICHAEL 05.03.2010 21:52

[QUOTE=antikiller_bmrf;159503]В каком виде устанавливаешь, в cdp или просто файлами?
откуда устанавливаешь?
Установленные допы остаются, но в разделе open for edit, я правильно понял?
Раньше треинз другой стоял, работало?
Какая ОС?[/QUOTE]

1 Cdp
2 рабочий стол
3 пробовал, со стандартом что бы коммитил при добавлении, потом попробовал отключить( то есть сначала добавил потом коммитил вручную) , не помогло, revent тоже - 0 эмоций. Пробовал из 2009 у себя чёнить взять тоже самое.
допы остаются, то та хрень написана...
4 Да и щас стоит, всё работает..

Alexandr Vimsvei 05.03.2010 23:39

Проблема в следующем - имеется вагон "pv61 4179" <kuid:238268:2200111> при просмотре ошибок в CM их нет, но при попытке подтвердить изменения в вагоне вылезают вот такие ошибки:[CODE]
Имя файла '[Originals]' содержит неверные символы
Ошибка изменения элемента <kuid:238268:2200111>: файл поврежден
[/CODE]
Может быть кто то знает в чем проблема и как ее устранить?

antikiller_bmrf 06.03.2010 00:08

Конфиг поврежден

[B]IIvIICHAEL[/B] - тут походу переустановка только, возможно проблема в том, что стоит 2 треинза (ну как я понял еще есть 2009, в котором все работает)

IIvIICHAEL 06.03.2010 00:25

Пон, переустановлю отпишусь)

Alexandr Vimsvei 06.03.2010 00:27

[QUOTE=antikiller_bmrf;159612]Конфиг поврежден
[/QUOTE]
Если это относится к моему сообщению, то у меня тогда вопрос: ведь если поврежден конфиг, то тогда и в CCP он бы не открылся бы на редактирование, и разве при сохранении старый не должен переписаться новым файлом?

antikiller_bmrf 06.03.2010 01:29

Так хорошо, он работает? Проблема проявляется только когда открываешь для редактирования?

Alexandr Vimsvei 06.03.2010 01:52

нет так он не работает. проблема появляется при подтверждении редактирования.

antikiller_bmrf 06.03.2010 01:55

Слишком неоднозначная ошибка, трудно что-то сказать, кинь, может посмотрю что там.

Добрый 06.03.2010 11:10

Имя файла содержит неверные символы - значит, один из файлов этого ассета имеет в названии кириллический символ (по собственному опыту знаю). Надо переименовать на строго латиницу (может даже "с" быть из кириллицы - выдаст ошибку).

Damien Zhar 06.03.2010 12:04

Товарищ CM2 не только кириллицу, он и Скандинавские/Немецкие знаки не любит. По крайней мере у меня наотказ отказывается с ними работат. Вот и переименовываю.

antikiller_bmrf 06.03.2010 13:54

Странно, даже не думал об этом, у меня вроде с любыми названиями работает, только фильтр в редаторе как-то странно с нелатинскими названиями работает...

Добрый 06.03.2010 19:17

Мы не про имя ассета, а файлов, из которых он состоит, в т.ч. графических.


Текущее время: 02:42. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim