ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
 
  |  
|   » Кодинг в обже, вопросы и ответы | страница 1 |  
 
	
		 | 
		 | 
		 | 
	 
	| 
 Канал X3: Reunion »
Модовый и скриптовый отсек X3: Reunion: «Кодинг в обже, вопросы и ответы» |  
	| 
	 |  
	 |  
	
		Chem
   780 EGP
            Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751  Откуда: Киев Зарегистрирован: 08.01.2007
       | 
         | 
		Тема создана именно для обмена опытом по внутренностям Х3. Точнее - обжи и возможно ехе. 
 
Для обсуждения новых команд скрипт-редактора - есть отдельная тема Добавляем новые команды в скрипт редактор  .
 
Для модификации - Армагеддон - тоже  .
 
 
Пока не предусматривается обсуждать в этой теме - переделки обжей. Только обмен опытом. Очень многие данные о логике работы игры были вытащены из ее внутренностей  .
 
 
Значить так - как получить читаемый текст обжа:
 
 
- Достаем последний обж - из 09.cat/dat, из папки L, имя файла - x3story.obj.
 
 - Идем в тему X2-ASM - это проcто!, и качаем дизассемблер, ну и на всякий случай - ассемблер. 
 
 
 - Меняем значение в dobj.ini, с OutFmt = HEX на OutFmt = DEC. Так же предлагаю заменить секцию [Class_X3], на предложенный мною вариант именования классов игровых объектов.
 
 - Запускаем dobj.exe x3story.obj.
 
 - На этом знатоки ассемблера могут остановиться и читать полученный ассемблерный код. 
 
Замечание: Если файл x3story.err состоит только из записей вида "Error: Overflow stack at command addr = 00005670; stack = 1 limit = 0", то это нормально
 
 - Далее идем в тему Трансляторы XC->XASM и XASM->XC, и качаем файлы xa2c.rar и xc.rar, последних версий.
 
 - Запускаем xa2c.exe x3story addx3.txt. В результате получаем файл x3story.cpp
 
Замечание, для версии 2.5 надо добавить в addx3.txt, следующие строки:
 
	  | Код: | 
	 
	
	  
 
           .extern    GetStandardTurretLaserMask, GetSpecialTurretLaserMask
 
           .extern    GetStandardMissileMask, GetSpecialMissileMask
 
           .extern    SetCurrentMissileType, GetNumMissiles
 
           .extern    SetPilotTradeSkill, GetPilotTradeSkill
 
 | 
	 
 
 
Я в них не совсем уверен, потому экспериментируйте лучше с версией 2.0.02.
 
 - Можно приступать к гаданию на внутренностях Х3.
 
  
 
Если вы таки хотите что-то подправить в полученном коде, и сделать обж, и поиграть с ним  , то
 
 
- На полученный x3story.cpp напускаете xc.exe, т.е. выполняете xc.exe x3story.cpp (в папке с ними должен находиться x3story.h), предварительно исправив параметр с GenerateEnd = 0 на GenerateEnd = 1.
 
 - Потом подправляете секцию [Class_X3] в файле xa_asm.ini, аналогично сделанному в dobj.ini. Так же исправляем с TypeName = HEX на TypeName = DEC
 
 - потом на полученный x3story.inc напускаем xa_asm.exe, т.е. выполняем xa_asm.exe x3story.inc. И если нет ошибок, то переименовываем  x3story.cod в x3story.obj.
 
 - Запаковываем x3story.obj в новый .cat/.dat и пробуем загрузиться с ним 
 
 
  
 
 
Предупреждение: Описание части функций вида XX_YYYYY, существующих вне обжа может быть получено на сайте Эгософта. Однако для этого надо зарегистрироваться на их сайте и согласиться с некими условиями. Потому здесь прямая отсылка на эту информацию не публикуется. 
 
Здесь мы делимся только тем, что смогли "раскопать" сами.
 
 
З.Ы. Немного обновил текст в следующем посте. Плюс собрал сопуствующие файлики конфигурации в один файл.
 
 
З.Ы.Ы. С этими файлами разобрал - собрал без ошибок.
	
  
	
	
		| obj2xc-conf.7z | 
	 
	
		|  Описание: | 
		
			
			
				x3story_obj_to_cpp.cmd - запуск разборки dobj.ini - конфигурация для дизассемблера addx3_25.txt - добавочный файл для 2.5 | 
			 
			 
		 | 
	 
	
		|  Имя файла: | 
		 obj2xc-conf.7z | 
	 
	
		|  Размер файла: | 
		 5.17 KB | 
	 
	
		|  Скачано: | 
		 1065 раз(а) | 
	 
	 
	
	
		| xc2obj-conf.7z | 
	 
	
		|  Описание: | 
		
			
			
				x3story_cpp_to_obj.cmd - запуск сборки xa_asm.ini - конфигурация для ассемблера xc.ini - для xc | 
			 
			 
		 | 
	 
	
		|  Имя файла: | 
		 xc2obj-conf.7z | 
	 
	
		|  Размер файла: | 
		 6.27 KB | 
	 
	
		|  Скачано: | 
		 1066 раз(а) | 
	 
	 
        	 _________________ Умножим энтропию на 0 :-) 
  Последний раз редактировалось: Gannibal (21:18 27-04-2011), всего редактировалось 1 раз Последний раз редактировалось: Chem (17:47 03-04-2008), всего редактировалось 10 раз(а) | 
		 
		
		| 
		
		 | 
         
     |  
	
		Chem
   780 EGP
            Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751  Откуда: Киев Зарегистрирован: 08.01.2007
       | 
         | 
		Предлагаемая структура секции Class_X3 для файла dobj.ini. X3store.obj - из версии 2.5 (или 2.0.02, т.к. описание лишнего количества типов данніх никому не вредит.
 
| Код класса | Идентификатор класса | Родительский класс | Описание класса |  | 1 | TX_AUDIO |   |   |  | 2 | TINIT |   |   |  | 2000 | TGALAXY |   |   |  | 2001 | TSECTOR |   |   |  | 2002 | TPLANET |   |   |  | 2003 | TRACE | TRACEBASE |   |  | 2004 | TSHIP | TSCRIPT |   |  | 2005 | TRACEBASE |   |   |  | 2006 | TFACTORY | TSTATION |   |  | 2007 | TDOCK | TSTATION |   |  | 2008 | TSUN |   |   |  | 2009 | TPLAYER |   |   |  | 2010 | TCUSTOM_GALOBJ | TGBODY |   |  | 2011 | TLASERTOWER | TSHIP_STATIONARY |   |  | 2012 | TASTEROID | TGBODY |   |  | 2014 | TGATE | TGBODY |   |  | 2015 | TPIRATES | TRACE |   |  | 2016 | TSTATION | TSCRIPT |   |  | 2017 | TGONER | TRACE |   |  | 2018 | TSPECIAL | TGBODY |   |  | 2019 | TSHIP_HUGE | TSHIP_CARRIER |   |  | 2021 | TSHIP_M1 | TSHIP_HUGE |   |  | 2022 | TSHIP_M2 | TSHIP_HUGE |   |  | 2023 | TSHIP_M3 | TSHIP_FIGHTER |   |  | 2024 | TSHIP_M4 | TSHIP_FIGHTER |   |  | 2025 | TSHIP_M5 | TSHIP_FIGHTER |   |  | 2026 | TSHIP_M6 | TSHIP_CARRIER |   |  | 2027 | TSHIP_M7 | TSHIP_CARRIER |   |  | 2030 | TSHIP_TP | TSHIP_TS |   |  | 2031 | TSHIP_TS | TSHIP_LITTLE |   |  | 2032 | TSHIP_TL | TSHIP_HUGE |   |  | 2033 | TSHIP_CARRIER | TSHIP_BIG |   |  | 2034 | TSHIP_FIGHTER | TSHIP_LITTLE |   |  | 2035 | TSHIP_TS_PIRATE | TSHIP_TS |   |  | 2037 | TSHIPYARD | TFACTORY |   |  | 2038 | TSHIP_SPEAKER | TSHIP |   |  | 2039 | TSHIP_GONER | TSHIP_LITTLE |   |  | 2042 | TDOCK_GONER | TDOCK |   |  | 2043 | TNEBULA |   |   |  | 2044 | TCOMPLEX | TFACTORY |   |  | 2045 | TCOMPLEX_HQ | TCOMPLEX |   |  | 2046 | THEAD_QUARTER | TDOCK |   |  | 2050 | TGBODY |   |   |  | 2060 | TBEACON | TSATELLITECLASS |   |  | 2061 | TDRONE_BASE_CLASS | TSHIP_LITTLE |   |  | 2064 | TSHIP_ASTRONAUT | TSHIP_SPECIAL |   |  | 2065 | TSATELLITE | TSATELLITECLASS |   |  | 2066 | TMINE | TSHIP_STATIONARY |   |  | 2067 | TFIGHTDRONE | TDRONE_BASE_CLASS |   |  | 2068 | TSHIP_UFO | TSHIP_SPECIAL |   |  | 2069 | TGLOBAL_SCRIPT_MAP |   |   |  | 2070 | TSPACEFLY | TSHIP_SPECIAL |   |  | 2071 | TREBUILD |   |   |  | 2072 | TSHIELD_RELOADER |   |   |  | 2073 | TSHIP_BIG | TSHIP_MOVEABLE |   |  | 2074 | TDOCK_TRADE | TDOCK |   |  | 2075 | TDOCK_EQUIPMENT | TDOCK |   |  | 2076 | TDOCK_PIRATEBASE | TDOCK |   |  | 2078 | TDOCK_KHAAK | TDOCK |   |  | 2079 | TSATELLITECLASS | TSHIP_STATIONARY |   |  | 2080 | TADVANCEDSATELLITE | TSATELLITE |   |  | 2081 | TSHIPYARD_SMALL | TSHIPYARD |   |  | 2082 | TSHIPYARD_BIG | TSHIPYARD |   |  | 2084 | TCRATE_FLYINGWARE | TGBODY |   |  | 2085 | TMISSILE | TGBODY |   |  | 2087 | THULL_RELOADER |   |   |  | 2088 | TDEBRIS | TGBODY |   |  | 2089 | TDEBRIS_CREATOR |   |   |  | 2090 | TWRECK | TGBODY |   |  | 2091 | TWRECK_CREATOR |   |   |  | 2092 | TFREIGHTDRONE | TDRONE_BASE_CLASS |   |  | 2100 | TCLIENT |   |   |  | 2115 | TGAMEOVER |   |   |  | 2116 | TBUILD_FACTORY |   |   |  | 2119 | TPATCH |   |   |  | 2120 | TSCRIPT_EDITOR |   |   |  | 2121 | TSCRIPT_UPDATE |   |   |  | 2122 | TPLAY_CUTSCENES |   |   |  | 2123 | TCAMERA |   |   |  | 2124 | TSCRIPT | TGBODY |   |  | 2125 | TMONITOR |   |   |  | 2126 | TMONITORCONTROL |   |   |  | 2127 | TAL_PLUGINS |   |   |  | 2128 | TGODENGINE |   |   |  | 2129 | TTRADEMASTER |   |   |  | 2130 | TSCENE3D |   |   |  | 2131 | TSHIP_KHAAKCLUSTER | TSHIP_M3 |   |  | 2132 | TOBJ_KHAAK | TRACE |   |  | 2133 | TSHIP_LITTLE | TSHIP_MOVEABLE |   |  | 2134 | TSHIP_MOVEABLE | TSHIP |   |  | 2135 | TSHIP_STATIONARY | TSHIP |   |  | 2136 | TSHIP_SPECIAL | TSHIP |   |  | 2140 | TSHIP_M5_RACING | TSHIP_M5 |   |  | 2141 | TNAV_POINT | TSPECIAL |   |  | 2142 | TJOB_MAP |   |   |  | 2150 | TMD_CUE |   |   |  | 2151 | TMISSION_DIRECTOR | TMD_CUE |   |  | 2200 | TMENU |   |   |  | 2201 | TMENU_BACKGROUND |   |   |  | 2210 | TMENU_ID | TMENU |   |  | 2211 | TMENU_SHIP | TMENU_ID |   |  | 2212 | TMENU_STATION_FABRIC | TMENU_STATION |   |  | 2213 | TMENU_STATION_DOCK | TMENU_STATION |   |  | 2214 | TMENU_PLAYER | TMENU_ID |   |  | 2216 | TMENU_SECTOR | TMENU |   |  | 2217 | TMENU_TRADE | TMENU_TRADE_BASIC |   |  | 2222 | TMENU_WARE | TMENU_ID |   |  | 2223 | TMENU_ASTEROID | TMENU_ID |   |  | 2224 | TMENU_WARPGATE | TMENU_ID |   |  | 2225 | TMENU_DIALOG | TMENU_ID |   |  | 2226 | TMENU_LOADSAVE | TMENU_ID |   |  | 2228 | TMENU_GALAXY | TMENU |   |  | 2229 | TMENU_SHIPINFO | TMENU_ID |   |  | 2230 | TMENU_SHIPLIST | TMENU |   |  | 2231 | TMENU_STATION | TMENU_ID |   |  | 2232 | TMENU_SHIPLIST_CARRIED | TMENU_SHIPLIST |   |  | 2233 | TMENU_SHIPLIST_OWNED | TMENU_SHIPLIST |   |  | 2235 | TMENU_MAIN | TMENU_ID |   |  | 2236 | TMENU_WEAPONS | TMENU_ID |   |  | 2243 | TMENU_STATIONINFO | TMENU_ID |   |  | 2245 | TMENU_BIGTEXT | TMENU_ID |   |  | 2246 | TMENU_BIGTEXT_EXT | TMENU_BIGTEXT |   |  | 2249 | TMENU_SELECTWARE | TMENU_ID |   |  | 2251 | TMENU_PLAYEROWNED | TMENU_BIGTEXT_EXT |   |  | 2252 | TMENU_INPUTSTRING | TMENU_ID |   |  | 2253 | TMENU_FREIGHTBAY | TMENU_TRADE_BASIC |   |  | 2256 | TMENU_CHANGESHIP | TMENU_SHIPLIST |   |  | 2257 | TMENU_UFOINFO | TMENU_SHIP |   |  | 2258 | TMENU_ASTRONAUT | TMENU_SHIP |   |  | 2259 | TMENU_OPTIONS | TMENU_ID |   |  | 2261 | TMENU_CHANGENAME_PLAYER | TMENU_INPUTSTRING |   |  | 2262 | TMENU_LOGENTRY | TMENU_INPUTSTRING |   |  | 2263 | TMENU_UPGRADESHIPS | TMENU_TRADE |   |  | 2264 | TMENU_TRADE_BASIC | TMENU_ID |   |  | 2265 | TMENU_CHANGENAME_OBJECT | TMENU_INPUTSTRING |   |  | 2266 | TMENU_FREIGHTEXCHANGE | TMENU_TRADE_BASIC |   |  | 2267 | TMENU_JUMPDRIVE | TMENU_ID |   |  | 2268 | TMENU_TRADEUTILITIES | TMENU_BIGTEXT |   |  | 2269 | TMENU_LOAD_TL | TMENU_ID |   |  | 2270 | TMENU_UNLOAD_TL | TMENU_ID |   |  | 2271 | TMENU_SCE | TMENU_BIGTEXT_EXT |   |  | 2272 | TMENU_SCE_INPUT | TMENU_INPUTSTRING |   |  | 2273 | TMENU_SCRIPT_INPUT | TMENU_ID |   |  | 2274 | TMENU_SCRIPT_EXECUTE | TMENU_BIGTEXT |   |  | 2275 | TMENU_SCRIPT_SELECT | TMENU_ID |   |  | 2276 | TMENU_ASK | TMENU_ID |   |  | 2277 | TMENU_QUESTION | TMENU_ASK |   |  | 2278 | TMENU_COMMAND | TMENU_ID |   |  | 2279 | TMENU_TRADE_EXT | TMENU_TRADE |   |  | 2287 | TMENU_RECORDING | TMENU_INPUTSTRING |   |  | 2288 | TMENU_BBS | TMENU_BIGTEXT_EXT |   |  | 2289 | TMENU_MESSAGES | TMENU_BIGTEXT |   |  | 2290 | TMENU_SCRIPT_DEBUG | TMENU_BIGTEXT_EXT |   |  | 2291 | TMENU_SCRIPT_GLOBALTASK | TMENU_BIGTEXT_EXT |   |  | 2292 | TMENU_PLUGIN | TMENU_BIGTEXT |   |  | 2293 | TMENU_COMMANDINFO | TMENU_ID |   |  | 2294 | TMENU_MERCHANT | TMENU_BIGTEXT |   |  | 2295 | TMENU_MERCHANTINFO | TMENU_ID |   |  | 2296 | TMENU_CONTROLS | TMENU_BIGTEXT |   |  | 2297 | TMENU_MISSIONLOG | TMENU |   |  | 2299 | TMENU_CHANGENAME_FORMATION | TMENU_INPUTSTRING |   |  | 2300 | TINPUT_CONTROL |   |   |  | 2301 | TQUEST_SHIP_CONTROLS |   |   |  | 2302 | TMENU_INTERACTIVE_ASSISTANCE_SSYSTEM | TMENU_ID |   |  | 2303 | TMENU_COMPLEX_INFO | TMENU_STATIONINFO |   |  | 2304 | TMENU_HEAD_QUARTER_INFO | TMENU_STATIONINFO |   |  | 2305 | TMENU_HEAD_QUARTER | TMENU_ID |   |  | 2306 | TMENU_MISSION_DIRECTOR | TMENU_ID |   |  | 2400 | TMENU_KEYS |   |   |  | 2401 | TMERCHANT |   |   |  | 2402 | TQUICKMENU |   |   |  | 2403 | TQUICKMENU_PLAYER_SPACE | TQUICKMENU |   |  | 2404 | TQUICKMENU_PLAYER_STATION | TQUICKMENU |   |  | 2405 | TQUICKMENU_PLAYER_NAVIGATION | TQUICKMENU |   |  | 2406 | TQUICKMENU_PLAYER_PILOT | TQUICKMENU |   |  | 2407 | TQUICKMENU_PLAYER_PERSONAL | TQUICKMENU |   |  | 2408 | TQUICKMENU_PLAYER_STATION_SUB_STATION | TQUICKMENU |   |  | 2409 | TQUICKMENU_PLAYER_ASSETS | TQUICKMENU |   |  | 2410 | TQUICKMENU_ACTION_SHIP | TQUICKMENU |   |  | 2411 | TQUICKMENU_ACTION_STATION | TQUICKMENU |   |  | 2412 | TQUICKMENU_ACTION_FWARE_WRECK | TQUICKMENU |   |  | 2413 | TQUICKMENU_ACTION_ASTEROID_DEBRIS_GATE | TQUICKMENU |   |  | 2420 | TQUICKMENU_MAIN | TQUICKMENU |   |  | 2421 | TQUICKMENU_LOAD_SAVE_LIST | TQUICKMENU |   |  | 2422 | TQUICKMENU_LOAD | TQUICKMENU_LOAD_SAVE_LIST |   |  | 2423 | TQUICKMENU_SAVE | TQUICKMENU_LOAD_SAVE_LIST |   |  | 2424 | TQUICKMENU_CONFIRM | TQUICKMENU |   |  | 2430 | TQUICKMENU_SHIP_GROUPS | TQUICKMENU |   |  | 2431 | TQUICKMENU_MANAGE_SHIP_GROUP | TQUICKMENU |   |  | 2432 | TQUICKMENU_SHIPS_IN_GROUP | TQUICKMENU |   |  | 2500 | TPLAYER_INFO |   |   |  | 2600 | TGAME_TIP |   |   |  | 2601 | TMENU_WINDOW |   |   |  | 2700 | TICON_MENU |   |   |  | 2701 | TICON_MAIL | TICON_MENU |   |  | 2702 | TICON_COCPIT | TICON_MENU |   |  | 2703 | TICON_WEAPON | TICON_MENU |   |  | 2721 | TICON_MENU_SELECTED | TICON_MENU |   |  | 3001 | TQUESTMASTER |   |   |  | 3003 | TPLOT | TQUESTMASTER_QUESTS_BASIC |   |  | 3100 | TQUEST |   |   |  | 3101 | TQUESTMASTER_QUESTS_BASIC | TQUEST |   |  | 4158 | TQUEST158 | TQUESTMASTER_QUESTS_BASIC |   |  | 4172 | TQUEST172_PIRATE_TRANSPORT_P1235 | TQUESTMASTER_QUESTS_BASIC |   |  | 4190 | TQUEST190_HITCHHIKER_P1290 | TQUESTMASTER_QUESTS_BASIC |   |  | 4193 | TQUEST193_GENERIC_TRADING_1_P1293 | TQUESTMASTER_QUESTS_BASIC |   |  | 4194 | TQUEST194_BBS_NEWS_ENGINE_P1294 | TQUESTMASTER_QUESTS_BASIC |   |  | 4214 | TQUEST214_BBS_TOURBUS_P1314 | TQUESTMASTER_QUESTS_BASIC |   |  | 4216 | TQUEST216_BBS_ASSASINATION_P1316 | TQUESTMASTER_QUESTS_BASIC |   |  | 4217 | TQUEST217_BBS_TAXI_P1317 | TQUESTMASTER_QUESTS_BASIC |   |  | 4219 | TQUEST219_BUY_SECTOR_MAP_P1319 | TQUESTMASTER_QUESTS_BASIC |   |  | 4223 | TQ223_PLOT3_P301323 | TPLOT |   |  | 4224 | TQ224_PLOT4_P301324 | TPLOT |   |  | 4225 | TQ225_PLOT5_P301325 | TPLOT |   |  | 4226 | TQ226_PLOT6_P301326 | TPLOT |   |  | 4227 | TQ227_PLOT7_P301327 | TPLOT |   |  | 4228 | TQ228_PLOT8_P301328 | TPLOT |   |  | 4235 | TQUEST235_MIRIAS_BBS_ENTRY_P301335 | TQUESTMASTER_QUESTS_BASIC |   |  | 4263 | TQUEST263_GENERIC_TRADING_B_P1363 | TQUESTMASTER_QUESTS_BASIC |   |  | 4267 | TQUEST267_BBS_LOTTERY_GAME_P1367 | TQUESTMASTER_QUESTS_BASIC |   |  | 4268 | TQUEST268_BBS_BLACK_JACK_P301368 | TQUESTMASTER_QUESTS_BASIC |   |  | 4269 | TQUEST269_BBS_PIRATE_HACKERS_P1369 | TQUESTMASTER_QUESTS_BASIC |   |  | 4270 | TQUEST270_BBS_BUY_KHAAK_SECTOR_COORDS_P1370 | TQUESTMASTER_QUESTS_BASIC |   |  | 4271 | TQUEST271_BBS_BUY_KHAAK_SPECS_P1371 | TQUESTMASTER_QUESTS_BASIC |   |  | 4275 | TQUEST275_XENON_INVASION_P1375 | TQUESTMASTER_QUESTS_BASIC |   |  | 4281 | TQUEST281_STATION_REPAIR_II_P1381 | TQUESTMASTER_QUESTS_BASIC |   |  | 4289 | TQUEST289_SCRIPT_MESSAGE_HANDLER_P301389 | TQUESTMASTER_QUESTS_BASIC |   |  | 4290 | TQUEST290_EMPTY_P1390 | TQUESTMASTER_QUESTS_BASIC |   |  | 4291 | TQUEST291_BBS_GONER_PREACHING_P301391 | TQUESTMASTER_QUESTS_BASIC |   |  | 4293 | TQUEST293_SCRIPT_QUEST_P301393 | TQUESTMASTER_QUESTS_BASIC |   |  | 4299 | TQUEST299_RACING_QUEST_P301399 | TQUESTMASTER_QUESTS_BASIC |   |  | 4300 | TQUEST300_SECTOR_AUCTION_QUEST_P301400 | TQUESTMASTER_QUESTS_BASIC |   |  | 4301 | TQUEST301_SECTOR_AUCTION_BBS_REPORTS_P301401 | TQUESTMASTER_QUESTS_BASIC |   |  | 4302 | TQUEST302_EMPTY_P1402 | TQUESTMASTER_QUESTS_BASIC |   |  | 4303 | TQUEST303_SOFT_SIGN_SCRAMBLER_P301403 | TQUESTMASTER_QUESTS_BASIC |   |  | 4304 | TQUEST304_SECTOR_AUCTION_QUEST_V2_P301404 | TQUESTMASTER_QUESTS_BASIC |   |  | 4305 | TQUEST305_SECTOR_AUCTION_BBS_REPORTS_V2_P301405 | TQUESTMASTER_QUESTS_BASIC |   |  | 4306 | TQUEST306_BBS_RACING_HANDLER_P301406 | TQUESTMASTER_QUESTS_BASIC |   |  | 4307 | TQUEST307_BALA_GI_HQ_MISSION_P301407 | TQUESTMASTER_QUESTS_BASIC |   |  | 4314 | TQUEST314_CHECK_START_POS | TQUESTMASTER_QUESTS_BASIC |   |  | 4316 | TQUEST316_BBS_QUEST_TREASURE_HUNT_P304316 | TQUESTMASTER_QUESTS_BASIC |   |  | 4317 | TQUEST317_BBS_QUEST_DONATION_P3043317 | TQUESTMASTER_QUESTS_BASIC |   |  | 4320 | TQUEST320_EMPTY_P1420 | TQUESTMASTER_QUESTS_BASIC |   |  | 4322 | TQUEST322_BBS_PIRATES_CRATE_P301422 | TQUESTMASTER_QUESTS_BASIC |   |  | 4323 | TQUEST323_BBS_QUEST_BLACKMAIL_P301422 | TQUESTMASTER_QUESTS_BASIC |   |  | 4324 | TQUEST324_SECTOR_AUCTION_QUEST_V2_P1424 | TQUESTMASTER_QUESTS_BASIC |   |  | 5000 | TUPGRADEMASTER |   |   |  | 5001 | TUPGRADE |   |   |  | 5003 | TUPGRADE1_DOCKING_COMPUTER | TUPGRADE |   |  | 5004 | TUPGRADE2_BEST_SELLING_PRICE_LOCATOR | TUPGRADE |   |  | 5005 | TUPGRADE3_TRANSPORTER_DEVICE | TUPGRADE |   |  | 5006 | TUPGRADE4_JUMPDRIVE | TUPGRADE |   |  | 5008 | TUPGRADE6_BEST_BUYS_LOCATOR | TUPGRADE |   |  | 5012 | TUPGRADE10_STRAFE_DRIVE_EXTENSION | TUPGRADE |   |  | 5013 | TUPGRADE11_CARGO_LIFESUPPORT_SYSTEM | TUPGRADE |   |  | 5014 | TUPGRADE12_BOOST_EXTENSION | TUPGRADE |   |  | 5015 | TUPGRADE13_NAVIGATION_RELAY_SATELLITE | TUPGRADE |   |  | 5016 | TUPGRADE14_SQUASH_MINE | TUPGRADE |   |  | 5017 | TUPGRADE15_LASERTOWER | TUPGRADE |   |  | 5018 | TUPGRADE16_FIGHTDRONE | TUPGRADE |   |  | 5019 | TUPGRADE17_FREIGHTDRONE | TUPGRADE |   |  | 5035 | TUPGRADE33_ADVANCEDSATELLITE | TUPGRADE |   |  | 5038 | TUPGRADE36_ORE_COLLECTOR | TUPGRADE |   |  | 5043 | TUPGRADE41_SPACEFLYCOLLECTOR | TUPGRADE |   |  | 6000 | TEVENT |   |   |  | 6001 | TEVENT_6001 | TEVENT |   |  | 6002 | TEVENT_KHAAK_INVASION | TEVENT |   |  | 6003 | TEVENT_P2203 | TEVENT |   |  | 6004 | TEVENT_STATION_DESTRUCTION | TEVENT |   |  | 6005 | TEVENT_ATTACK_P2202 | TEVENT |   |  | 8047 | TRANDOMNPC_PACK |   |   |  | 8048 | TRANDOMNPC_SHIP |   |   |  | 8060 | TX3_PLOT_SHIP_M5 | TSHIP_M5 |   |  | 8061 | TX3_PLOT_SHIP_TL | TSHIP_TL |   |  | 8070 | TX3_PLOT_SHIP_M3 | TSHIP_M3 |   |  | 8071 | TX3_PLOT_SHIP_M4 | TSHIP_M4 |   |  | 8072 | TX3_PLOT_SHIP_M6 | TSHIP_M6 |   |  | 8073 | TX3_PLOT_SHIP_TP | TSHIP_TP |   |  | 8074 | TX3_PLOT_SHIP_TS | TSHIP_TS |   |  | 8075 | TX3_PLOT_SHIP_GONER | TSHIP_GONER |   |  | 8076 | TX3_PLOT_SHIP_TL_2 | TSHIP_TL |   |  | 8077 | TX3_PLOT_SHIP_TP_2 | TSHIP_TP |   |  | 8078 | TX3_PLOT_SHIP_M6_2 | TSHIP_M6 |   |  | 8079 | TX3_PLOT_OBJECTS |   |   |  | 8080 | TWAYPOINT |   |   |  | 8081 | TCRATE_XENONCONTAINER | TCRATE_FLYINGWARE |   |  | 8082 | TX3_PLOT_SPECIAL | TSPECIAL |   |  | 8083 | TX3_PLOT_SHIP | TSHIP |   |  | 8084 | TX3_PLOT_OBJECTS_SPEAKER | TSHIP_SPEAKER |   |  | 8085 | TX3_PLOT_MARANI_STATION | TSHIPYARD_BIG |   |  | 8086 | TX3_PLOT_YAKI_STATION | TFACTORY |   |  | 8087 | TX3_PLOT_SPY_DRONE | TSHIP_M5 |   |  | 8088 | TX3_PLOT_MINE | TMINE |   |   
        	 _________________ Умножим энтропию на 0 :-) 
  Последний раз редактировалось: Chem (17:38 03-04-2008), всего редактировалось 5 раз(а) | 
		 
		
		| 
		
		 | 
         
     |  
	
		Chem
   780 EGP
            Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751  Откуда: Киев Зарегистрирован: 08.01.2007
       | 
         | 
		А вот и иерархия объектов в читаемой форме  
 
	  | Код: | 
	 
	
	  
 
TX_AUDIO
 
TINIT
 
TGALAXY
 
TSECTOR
 
TPLANET
 
TRACEBASE
 
  +--TRACE
 
     +--TPIRATES
 
     +--TGONER
 
     +--TOBJ_KHAAK
 
TSUN
 
TPLAYER
 
TNEBULA
 
TGBODY
 
  +--TCUSTOM_GALOBJ
 
  +--TASTEROID
 
  +--TGATE
 
  +--TSPECIAL
 
  |  +--TNAV_POINT
 
  |  +--TX3_PLOT_SPECIAL
 
  +--TCRATE_FLYINGWARE
 
  |  +--TCRATE_XENONCONTAINER
 
  +--TMISSILE
 
  +--TDEBRIS
 
  +--TWRECK
 
  +--TSCRIPT
 
     +--TSHIP
 
     |  +--TSHIP_SPEAKER
 
     |  |  +--TX3_PLOT_OBJECTS_SPEAKER
 
     |  +--TSHIP_MOVEABLE
 
     |  |  +--TSHIP_BIG
 
     |  |  |  +--TSHIP_CARRIER
 
     |  |  |     +--TSHIP_HUGE
 
     |  |  |     |  +--TSHIP_M1
 
     |  |  |     |  +--TSHIP_M2
 
     |  |  |     |  +--TSHIP_TL
 
     |  |  |     |     +--TX3_PLOT_SHIP_TL
 
     |  |  |     |     +--TX3_PLOT_SHIP_TL_2
 
     |  |  |     +--TSHIP_M6
 
     |  |  |     |  +--TX3_PLOT_SHIP_M6
 
     |  |  |     |  +--TX3_PLOT_SHIP_M6_2
 
     |  |  |     +--TSHIP_M7
 
     |  |  +--TSHIP_LITTLE
 
     |  |     +--TSHIP_TS
 
     |  |     |  +--TSHIP_TP
 
     |  |     |  |  +--TX3_PLOT_SHIP_TP
 
     |  |     |  |  +--TX3_PLOT_SHIP_TP_2
 
     |  |     |  +--TSHIP_TS_PIRATE
 
     |  |     |  +--TX3_PLOT_SHIP_TS
 
     |  |     +--TSHIP_FIGHTER
 
     |  |     |  +--TSHIP_M3
 
     |  |     |  |  +--TSHIP_KHAAKCLUSTER
 
     |  |     |  |  +--TX3_PLOT_SHIP_M3
 
     |  |     |  +--TSHIP_M4
 
     |  |     |  |  +--TX3_PLOT_SHIP_M4
 
     |  |     |  +--TSHIP_M5
 
     |  |     |     +--TSHIP_M5_RACING
 
     |  |     |     +--TX3_PLOT_SHIP_M5
 
     |  |     |     +--TX3_PLOT_SPY_DRONE
 
     |  |     +--TSHIP_GONER
 
     |  |     |  +--TX3_PLOT_SHIP_GONER
 
     |  |     +--TDRONE_BASE_CLASS
 
     |  |        +--TFIGHTDRONE
 
     |  |        +--TFREIGHTDRONE
 
     |  +--TSHIP_STATIONARY
 
     |  |  +--TLASERTOWER
 
     |  |  +--TMINE
 
     |  |  |  +--TX3_PLOT_MINE
 
     |  |  +--TSATELLITECLASS
 
     |  |     +--TBEACON
 
     |  |     +--TSATELLITE
 
     |  |        +--TADVANCEDSATELLITE
 
     |  +--TSHIP_SPECIAL
 
     |  |  +--TSHIP_ASTRONAUT
 
     |  |  +--TSHIP_UFO
 
     |  |  +--TSPACEFLY
 
     |  +--TX3_PLOT_SHIP
 
     +--TSTATION
 
        +--TFACTORY
 
        |  +--TSHIPYARD
 
        |  |  +--TSHIPYARD_SMALL
 
        |  |  +--TSHIPYARD_BIG
 
        |  |     +--TX3_PLOT_MARANI_STATION
 
        |  +--TCOMPLEX
 
        |  |  +--TCOMPLEX_HQ
 
        |  +--TX3_PLOT_YAKI_STATION
 
        +--TDOCK
 
           +--TDOCK_GONER
 
           +--THEAD_QUARTER
 
           +--TDOCK_TRADE
 
           +--TDOCK_EQUIPMENT
 
           +--TDOCK_PIRATEBASE
 
           +--TDOCK_KHAAK
 
TGLOBAL_SCRIPT_MAP
 
TREBUILD
 
TSHIELD_RELOADER
 
THULL_RELOADER
 
TDEBRIS_CREATOR
 
TWRECK_CREATOR
 
TCLIENT
 
TGAMEOVER
 
TBUILD_FACTORY
 
TPATCH
 
TSCRIPT_EDITOR
 
TSCRIPT_UPDATE
 
TPLAY_CUTSCENES
 
TCAMERA
 
TMONITOR
 
TMONITORCONTROL
 
TAL_PLUGINS
 
TGODENGINE
 
TTRADEMASTER
 
TSCENE3D
 
TJOB_MAP
 
TMD_CUE
 
  +--TMISSION_DIRECTOR
 
TMENU
 
  +--TMENU_ID
 
  |  +--TMENU_SHIP
 
  |  |  +--TMENU_UFOINFO
 
  |  |  +--TMENU_ASTRONAUT
 
  |  +--TMENU_PLAYER
 
  |  +--TMENU_WARE
 
  |  +--TMENU_ASTEROID
 
  |  +--TMENU_WARPGATE
 
  |  +--TMENU_DIALOG
 
  |  +--TMENU_LOADSAVE
 
  |  +--TMENU_SHIPINFO
 
  |  +--TMENU_STATION
 
  |  |  +--TMENU_STATION_FABRIC
 
  |  |  +--TMENU_STATION_DOCK
 
  |  +--TMENU_MAIN
 
  |  +--TMENU_WEAPONS
 
  |  +--TMENU_STATIONINFO
 
  |  |  +--TMENU_COMPLEX_INFO
 
  |  |  +--TMENU_HEAD_QUARTER_INFO
 
  |  +--TMENU_BIGTEXT
 
  |  |  +--TMENU_BIGTEXT_EXT
 
  |  |  |  +--TMENU_PLAYEROWNED
 
  |  |  |  +--TMENU_SCE
 
  |  |  |  +--TMENU_BBS
 
  |  |  |  +--TMENU_SCRIPT_DEBUG
 
  |  |  |  +--TMENU_SCRIPT_GLOBALTASK
 
  |  |  +--TMENU_TRADEUTILITIES
 
  |  |  +--TMENU_SCRIPT_EXECUTE
 
  |  |  +--TMENU_MESSAGES
 
  |  |  +--TMENU_PLUGIN
 
  |  |  +--TMENU_MERCHANT
 
  |  |  +--TMENU_CONTROLS
 
  |  +--TMENU_SELECTWARE
 
  |  +--TMENU_INPUTSTRING
 
  |  |  +--TMENU_CHANGENAME_PLAYER
 
  |  |  +--TMENU_LOGENTRY
 
  |  |  +--TMENU_CHANGENAME_OBJECT
 
  |  |  +--TMENU_SCE_INPUT
 
  |  |  +--TMENU_RECORDING
 
  |  |  +--TMENU_CHANGENAME_FORMATION
 
  |  +--TMENU_OPTIONS
 
  |  +--TMENU_TRADE_BASIC
 
  |  |  +--TMENU_TRADE
 
  |  |  |  +--TMENU_UPGRADESHIPS
 
  |  |  |  +--TMENU_TRADE_EXT
 
  |  |  +--TMENU_FREIGHTBAY
 
  |  |  +--TMENU_FREIGHTEXCHANGE
 
  |  +--TMENU_JUMPDRIVE
 
  |  +--TMENU_LOAD_TL
 
  |  +--TMENU_UNLOAD_TL
 
  |  +--TMENU_SCRIPT_INPUT
 
  |  +--TMENU_SCRIPT_SELECT
 
  |  +--TMENU_ASK
 
  |  |  +--TMENU_QUESTION
 
  |  +--TMENU_COMMAND
 
  |  +--TMENU_COMMANDINFO
 
  |  +--TMENU_MERCHANTINFO
 
  |  +--TMENU_INTERACTIVE_ASSISTANCE_SSYSTEM
 
  |  +--TMENU_HEAD_QUARTER
 
  |  +--TMENU_MISSION_DIRECTOR
 
  +--TMENU_SECTOR
 
  +--TMENU_GALAXY
 
  +--TMENU_SHIPLIST
 
  |  +--TMENU_SHIPLIST_CARRIED
 
  |  +--TMENU_SHIPLIST_OWNED
 
  |  +--TMENU_CHANGESHIP
 
  +--TMENU_MISSIONLOG
 
TMENU_BACKGROUND
 
TINPUT_CONTROL
 
TQUEST_SHIP_CONTROLS
 
TMENU_KEYS
 
TMERCHANT
 
TQUICKMENU
 
  +--TQUICKMENU_PLAYER_SPACE
 
  +--TQUICKMENU_PLAYER_STATION
 
  +--TQUICKMENU_PLAYER_NAVIGATION
 
  +--TQUICKMENU_PLAYER_PILOT
 
  +--TQUICKMENU_PLAYER_PERSONAL
 
  +--TQUICKMENU_PLAYER_STATION_SUB_STATION
 
  +--TQUICKMENU_PLAYER_ASSETS
 
  +--TQUICKMENU_ACTION_SHIP
 
  +--TQUICKMENU_ACTION_STATION
 
  +--TQUICKMENU_ACTION_FWARE_WRECK
 
  +--TQUICKMENU_ACTION_ASTEROID_DEBRIS_GATE
 
  +--TQUICKMENU_MAIN
 
  +--TQUICKMENU_LOAD_SAVE_LIST
 
  |  +--TQUICKMENU_LOAD
 
  |  +--TQUICKMENU_SAVE
 
  +--TQUICKMENU_CONFIRM
 
  +--TQUICKMENU_SHIP_GROUPS
 
  +--TQUICKMENU_MANAGE_SHIP_GROUP
 
  +--TQUICKMENU_SHIPS_IN_GROUP
 
TPLAYER_INFO
 
TGAME_TIP
 
TMENU_WINDOW
 
TICON_MENU
 
  +--TICON_MAIL
 
  +--TICON_COCPIT
 
  +--TICON_WEAPON
 
  +--TICON_MENU_SELECTED
 
TQUESTMASTER
 
TQUEST
 
  +--TQUESTMASTER_QUESTS_BASIC
 
     +--TPLOT
 
     |  +--TQ223_PLOT3_P301323
 
     |  +--TQ224_PLOT4_P301324
 
     |  +--TQ225_PLOT5_P301325
 
     |  +--TQ226_PLOT6_P301326
 
     |  +--TQ227_PLOT7_P301327
 
     |  +--TQ228_PLOT8_P301328
 
     +--TQUEST158
 
     +--TQUEST172_PIRATE_TRANSPORT_P1235
 
     +--TQUEST190_HITCHHIKER_P1290
 
     +--TQUEST193_GENERIC_TRADING_1_P1293
 
     +--TQUEST194_BBS_NEWS_ENGINE_P1294
 
     +--TQUEST214_BBS_TOURBUS_P1314
 
     +--TQUEST216_BBS_ASSASINATION_P1316
 
     +--TQUEST217_BBS_TAXI_P1317
 
     +--TQUEST219_BUY_SECTOR_MAP_P1319
 
     +--TQUEST235_MIRIAS_BBS_ENTRY_P301335
 
     +--TQUEST263_GENERIC_TRADING_B_P1363
 
     +--TQUEST267_BBS_LOTTERY_GAME_P1367
 
     +--TQUEST268_BBS_BLACK_JACK_P301368
 
     +--TQUEST269_BBS_PIRATE_HACKERS_P1369
 
     +--TQUEST270_BBS_BUY_KHAAK_SECTOR_COORDS_P1370
 
     +--TQUEST271_BBS_BUY_KHAAK_SPECS_P1371
 
     +--TQUEST275_XENON_INVASION_P1375
 
     +--TQUEST281_STATION_REPAIR_II_P1381
 
     +--TQUEST289_SCRIPT_MESSAGE_HANDLER_P301389
 
     +--TQUEST290_EMPTY_P1390
 
     +--TQUEST291_BBS_GONER_PREACHING_P301391
 
     +--TQUEST293_SCRIPT_QUEST_P301393
 
     +--TQUEST299_RACING_QUEST_P301399
 
     +--TQUEST300_SECTOR_AUCTION_QUEST_P301400
 
     +--TQUEST301_SECTOR_AUCTION_BBS_REPORTS_P301401
 
     +--TQUEST302_EMPTY_P1402
 
     +--TQUEST303_SOFT_SIGN_SCRAMBLER_P301403
 
     +--TQUEST304_SECTOR_AUCTION_QUEST_V2_P301404
 
     +--TQUEST305_SECTOR_AUCTION_BBS_REPORTS_V2_P301405
 
     +--TQUEST306_BBS_RACING_HANDLER_P301406
 
     +--TQUEST307_BALA_GI_HQ_MISSION_P301407
 
     +--TQUEST314_CHECK_START_POS
 
     +--TQUEST316_BBS_QUEST_TREASURE_HUNT_P304316
 
     +--TQUEST317_BBS_QUEST_DONATION_P3043317
 
     +--TQUEST320_EMPTY_P1420
 
     +--TQUEST322_BBS_PIRATES_CRATE_P301422
 
     +--TQUEST323_BBS_QUEST_BLACKMAIL_P301422
 
     +--TQUEST324_SECTOR_AUCTION_QUEST_V2_P1424
 
TUPGRADEMASTER
 
TUPGRADE
 
  +--TUPGRADE1_DOCKING_COMPUTER
 
  +--TUPGRADE2_BEST_SELLING_PRICE_LOCATOR
 
  +--TUPGRADE3_TRANSPORTER_DEVICE
 
  +--TUPGRADE4_JUMPDRIVE
 
  +--TUPGRADE6_BEST_BUYS_LOCATOR
 
  +--TUPGRADE10_STRAFE_DRIVE_EXTENSION
 
  +--TUPGRADE11_CARGO_LIFESUPPORT_SYSTEM
 
  +--TUPGRADE12_BOOST_EXTENSION
 
  +--TUPGRADE13_NAVIGATION_RELAY_SATELLITE
 
  +--TUPGRADE14_SQUASH_MINE
 
  +--TUPGRADE15_LASERTOWER
 
  +--TUPGRADE16_FIGHTDRONE
 
  +--TUPGRADE17_FREIGHTDRONE
 
  +--TUPGRADE33_ADVANCEDSATELLITE
 
  +--TUPGRADE36_ORE_COLLECTOR
 
  +--TUPGRADE41_SPACEFLYCOLLECTOR
 
TEVENT
 
  +--TEVENT_6001
 
  +--TEVENT_KHAAK_INVASION
 
  +--TEVENT_P2203
 
  +--TEVENT_STATION_DESTRUCTION
 
  +--TEVENT_ATTACK_P2202
 
TRANDOMNPC_PACK
 
TRANDOMNPC_SHIP
 
TX3_PLOT_OBJECTS
 
TWAYPOINT
 
 | 
	 
 
        	 _________________ Умножим энтропию на 0 :-) 
  Последний раз редактировалось: Chem (17:21 03-04-2008), всего редактировалось 1 раз | 
		 
		
		| 
		
		 | 
         
     |  
	
		M_A_G
   53 EGP
   Рейтинг канала: 5(142) Репутация: 2 Сообщения: 41  Откуда: Питер Зарегистрирован: 04.01.2008
      | 
         | 
		Результаты анализа класса TFACTORY в контексте потребления втор-ресов и, что оказалось приятной неожиданностью, так же потребления (утилизации) доков и торговых станций.
 
Надеюсь, я это всё сюда в тему кидаю  
 
 
Большое спасибо Chem за высланные исходники и найденные ключевые места в них, что побороло таки мою лень  
 
 
Сперва, код с комментами, выводы ниже.
 
 
	  | Код: | 
	 
	
	  
 
//при старте производства используется вычисление времени производства, в зависимости от наличия переменной TFACTORY.fa_SResEffect
 
// из TFACTORY.Production()
 
 
  if(TFACTORY.fa_SResEffect) 
 
  { 
 
    // loc3 = от 1/2 fa_SResEffect до fa_SResEffect
 
    var loc3 = (TFACTORY.fa_SResEffect + SE_Random(TFACTORY.fa_SResEffect) + 1) / 2;
 
 
    // loc3 - поправка к текущему циклу
 
    // чем больше была поправка сейчас, тем меньше останется на следующий цикл
 
 
    // fa_SResEffect = от 0 до 1/2 входной fa_SResEffect
 
    TFACTORY.fa_SResEffect = TFACTORY.fa_SResEffect - loc3;
 
 
    TFACTORY.fa_CurProdTime = (
 
        // время производства без втор ресов
 
        TFACTORY.fa_ProdTime[TFACTORY.fa_ProductType << 16 | TFACTORY.fa_ProductSubType]
 
        // минус к циклу производства в % равен ( loc3 / rel_value )
 
        *(100 - loc3 / SA_GetTypeRelValue(TFACTORY.fa_ProductType, TFACTORY.fa_ProductSubType) )
 
         )/100;
 
  } 
 
  else 
 
  { 
 
    TFACTORY.fa_CurProdTime =
 
        TFACTORY.fa_ProdTime[TFACTORY.fa_ProductType<<16|TFACTORY.fa_ProductSubType]; 
 
  }  
 
 
// Далее из функции TFACTORY.Trade()
 
// этот код находится в цикле, срабатывающем раз в среднем 61.6 секунду для фабрик и раз в 302.7 секунд для доков
 
//  точные циферки из экспериментальной статистики
 
//  в конце кода - собственно вычисление задержки, там подробней
 
// данные относятся к неактивному сектору, то есть, сектору, где нет игрока, и игрок не смотрит на него через карту
 
//   есть подозрение, что в противном случае, период будет другим
 
 
....
 
  // цикл по втор-ресам
 
  while( loc2 = SE_TableNext(TFACTORY.fa_SResources, loc2) )
 
  {
 
    // maintype
 
    var loc3 = loc2 >> 16 & 255;
 
    // subtype
 
    var loc4 = loc2 & 65535;
 
    // loc5 - объём на складе
 
    var loc5 = TSTATION.st_Wares[loc2];
 
 
    // проверка, что это оборудование и 
 
    //  добавление на склад 1 штуки, если склад был пустой
 
    // данные строки заставили предположить, что для доков и торговых станций используется этот же алгоритм
 
    //   и с точки зрения игры, товары доков - это втор-ресы =)
 
    if ( loc3 == 16 && global.ga_WareEquipmentFlags[loc4] )
 
    {
 
      if ( !loc5 )
 
      {
 
        this->AddWare(loc3, loc4, 1);
 
      }
 
      continue;
 
    }
 
 
    // если ресы есть
 
    if ( loc5 )
 
    {
 
      // если это у нас кристаллы и электростанция
 
      if ( loc3 == 16 && loc4 == 1 && SA_GetTypeGSubType(6, TSTATION.st_SubType) == 4 )
 
      {
 
        // раз в 7 циклов (минут) идём дальше
 
        if ( SE_Random(7) )
 
        {
 
          continue;
 
        }
 
 
        // то есть, электростанции не потребляют кристаллы, если производство стоит
 
        //  и потребляют они их в 7 раз меньше (реже) других
 
 
        // максимум на складе
 
        var loc6 = this->GetWareTypeMaxStore(TFACTORY.fa_ProductType, TFACTORY.fa_ProductSubType);
 
        // сколько сейчас на складе
 
        var loc7 = TSTATION.st_Wares[TFACTORY.fa_ProductType << 16 | TFACTORY.fa_ProductSubType];
 
        // если в следующем цикле получится больше, чем может влезть - пропускаем
 
        if ( loc7 + TFACTORY.fa_ProdCount[TFACTORY.fa_ProductType << 16 | TFACTORY.fa_ProductSubType]
 
            > loc6 )
 
        {
 
          continue;
 
        }
 
      }
 
 
      // в зависимости от loc3, loc6 = 6 или 12
 
      var loc6 = 0;
 
      switch (loc3 + -7)
 
      {
 
        case 1: // 8  - пушки
 
        case 2: // 9  - щиты
 
        case 3: // 10 - ракеты
 
        case 9: // 16 - hi-tech (Warheads, Crystals, Quantum Tubes, Microchips, Computer Components, Spaceflies)
 
                //  к ним же относятся - рабы =), спутники, оборудование
 
          {
 
            loc6 = 6;
 
            break; 
 
          }
 
        case 0: // 7  - корабли
 
        case 4: // 11 - батарейки
 
        case 5: // 12 - всякая фигня (не нужная)
 
        case 6: // 13 - начальные ресы
 
        case 7: // 14 - питание и редкие товары
 
        case 8: // 15 - руда, вафли, нивидиум
 
          {
 
            loc6 = 12;
 
            break; 
 
          }
 
      }
 
 
 
      //   loc6 * loc1
 
      // --------------- = loc7
 
      // rel_value * 200
 
      //
 
      // ДЛЯ ФАБРИК (loc1 от 59 до 63, в среднем 61.6)
 
      //   loc7 будет равно 0 при relvalue больше или равным 4(2)
 
      //   в скобках здесь и далее для продуктов с loc6 == 6
 
      //
 
      // ДЛЯ ДОКОВ (loc1 от 300 до 305, в среднем 302.7)
 
      //   loc7 будет равно 0 при relvalue больше 18(9)
 
      //
 
      // Если loc7 не == 0, то будем списывать каждый цикл по loc7 * размер_станции
 
      //
 
      var loc7 = ((loc1*loc6) / 200) / SA_GetTypeRelValue(loc3, loc4);
 
      if (loc7 == 0)
 
      {
 
        // rel_value * 200
 
        // --------------- = loc8
 
        //   loc6 * loc1
 
        //
 
        // то есть, loc8 = 1/loc7 (только не забываем про то, что это целочисленная арифметика!)
 
        //
 
        var loc8 = (SA_GetTypeRelValue(loc3, loc4) * 200) / (loc6*loc1);
 
 
        // если loc8 == 0, (но такого НЕ может быть, ибо мы сюда вошли по условию loc7 == 0)
 
        //  ИЛИ один_случай_из_loc8
 
        // но если loc8 == 1, то SE_Random вернёт всегда 0 (?) (по экспериментам - именно так)
 
        //
 
        // ДЛЯ ФАБРИК 
 
        //   если loc8 <= 1 ( relvalue < 8(4) ), списание каждые 60-63 сек. по 4 шт.
 
        // ДЛЯ ДОКОВ
 
        //   если loc8 <= 1 ( relvalue <= 36(18) ), списание каждые 300-305 сек. по 16 шт.
 
        //
 
        if ( !loc8 || !SE_Random(loc8))
 
        {
 
          loc7 = loc1 / 20 + 1;
 
        }
 
        else
 
        {
 
          loc7 = 0;
 
        }
 
      }
 
      // учитываем размер станции
 
      if (loc7 != 0)
 
      {
 
        loc7 = SE_MulFix(loc7, this->GetScaleFactor());
 
      }
 
      // списываем то, что есть, не больше
 
      if (loc7 > loc5)
 
      {
 
        loc7 = loc5;
 
      }
 
 
 
      // если что-то списали - считаем коэффициент к эффективности
 
      //  смысл имеет только для фабрик =)
 
      if( loc7 > 0 )
 
      {
 
        this->AddWare(loc3, loc4, -loc7);
 
 
        // loc7 фактически всегда = 4*размер_станции,
 
        //   fa_SResEffect += от 1 до ( 40 * sSize * rel_value );
 
        TFACTORY.fa_SResEffect = TFACTORY.fa_SResEffect +
 
      ( SE_Random( 10 * loc7 * SA_GetTypeRelValue(loc3, loc4)) + 1 );
 
        // fa_SResEffect в среднем будет равно relvalueS * 20 (для S станций)
 
        // и даст эффект в relvalueS * 20 / relvaluePr %
 
        //  (relvalueS - втор-ресов, relvaluePr - продукции)
 
 
        // вот оно - ограничение "не более 15%"
 
        //  но накладывается оно для текущего цикла производства,
 
        //  а учитывается fa_SResEffect в другом месте - асинхронно.
 
        //  отсюда и глюк с комплексами..
 
        var loc8 = 15 * SA_GetTypeRelValue(TFACTORY.fa_ProductType, TFACTORY.fa_ProductSubType);
 
        if (TFACTORY.fa_SResEffect > loc8)
 
        {
 
          TFACTORY.fa_SResEffect = loc8;
 
        }
 
      }
 
    }
 
  }
 
 
 
...
 
// это конец цикла, тут задаётся задержка и вычисляется loc1
 
//
 
loc4 = ((TFACTORY.fa_FocusDelay + SE_Random(3000)) * global.gs_DelayFactor) / 1000;
 
loc3 = TI_WaitForInterrupt(loc4, this);
 
// похоже, loc3 == времени, сколько оставалось ждать, когда прерывание произошло
 
//  то есть, loc1 - реально сколько прошло времени
 
//  по экспериментам, loc1 от 59 до 63, в среднем 61.6 (для фабрик)
 
//    и ни разу не было зарегистрировано времени меньшего 59 сек.
 
//  однако, когда проверял доки, бывали циклы не по 300 секунд, а по 60
 
//    но это были единичные случаи, и я забил разбираться.
 
//    есть подозрение, что случалось оно, когда я "смотрел" за станцией
 
loc1 = (loc4 - loc3) / 1000;
 
if (loc1 <= 0)
 
{
 
   loc1 = 1;
 
}
 
 | 
	 
 
 
 
 
Собственно. Что получается.
 
 
Все товары разбиты на 2 группы:
 
1. пушки, щиты, ракеты, hi-tech (Warheads, Crystals, Quantum Tubes, Microchips, Computer Components, Spaceflies), оборудование
 
2. корабли, батарейки, всякая фигня (не нужная), начальные ресы, питание и редкие товары, руда, вафли, нивидиум
 
Соответственно, некоторые циферки для них различаются, буду писать цифру для второй группы, а в скобках - для первой
 
Все вычисления целочисленные, так что, 3.9 / 2 = 1!
 
 
Правила списания в порядке приоритета для фабрик (S типа, для дркгих - результат * множитель станции):
 
1. Если relvalue втор-реса < 4(2), списание будет каждые 60-63 секунды по 3.7(1.85)/relvalue шт.
 
2. Если relvalue < 8(4), списание каждые 60-63 сек. по 4 шт.
 
3. Списание каждый из ( relvalue / 3.7(1.85) ) 60-63 сек. интервалов по 4 шт., то есть, среднее время списания = 61,6 * relvalue / 3.7(1.85)
 
 
Для солярок поправки:
 
1. Кристаллы не списываются, если производство стоит.
 
2. Скорость списания снижена в 7 раз.
 
 
То же, для доков и торговых станций:
 
1. Если relvalue втор-реса <= 18(9), списание будет каждые 300-305 секунды по 18.2(9.1)/relvalue шт.
 
2. Если relvalue <= 36(18), списание каждые 300-305 сек. по 16 шт.
 
3. Списание каждый из ( relvalue / 18.2(9.1) ) 300-305 сек. интервалов по 16 шт., то есть, среднее время списания = 302,7 * relvalue / 18.2(9.1)
 
 
Цифры 61,6 и 302,7 взяты из экспериментов.
 
Алгоритм проверен экспериментальными данными, всё очень хорошо сходиться. Не считая того, что для продуктов с большим relvalue, нужно очень много времени для сбора статистики. Я больше 20 часов не выдерживал  
 
 
Теперь, про увеличение эффективности производства:
 
Что бы длительность следующего цикла снизилась на 1%, необходимо, что бы за время цикла произошло в среднем ( relvaluePr / (relvalueS * 20 * размер_станции) ) списания втор-реса с relvalueS, для фабрики производящей relvaluePr.
 
Если просуммировать все списания всех втор-ресов за текущий цикл по формуле выше, получится поправка в % к следующему циклу.
 
Поправка обрезается до значения 15% от ТЕКУЩЕГО цикла. А если, дальше будет производиться что-то с меньшим relvalue? Да, уменьшение цикла может быть для него значительно большим.
 
При начале очередного цикла смотрится поправка и берется от 1/2 до её полного значения для уменьшения цикла. Остаток остаётся на следующий раз.
 
 
Примерчик  
 
Если у нас есть GPPC(relvalue = 15000), у которого втор-рес - кристаллы (relvalue = 60, средний цикл = 1980), то за один цикл производства GPPC мы в среднем будем набирать поправку в N * relvalueS * 20 / relvaluePr = 7 * 60 * 20 / 15000 = 0.56%
 
При начале следующего цикла, она учтется и уменьшиться, но.. менее чем на 1% цикл не уменьшится. То есть, вероятность уменьшения цикла для GPPC фабрики мизерна (если с рандомом СИЛЬНО повезёт) и уменьшение может быть максимум на 1%.
 
 
add. Забыл добавить. Товары с relvalue 36(18) будут потребляются доками и торговыми станциями с максимальной скоростью, близкой к двукратной(однократной). То есть, потребление доками таких товаров - значительное. При уменьшении relvalue, потребление будет почти линейно уменьшаться до 1(1/2) кратного при relvalue 19(9), затем резко очень сильно уменьшится. При увеличении relvalue будет колебаться в районе 1(1/2) кратного.
        	 
  Последний раз редактировалось: M_A_G (18:16 12-02-2008), всего редактировалось 3 раз(а) | 
		 
		
		| 
		
		 | 
         
     |  
	
		TechCat
   100 EGP
   Репутация: 25 Сообщения: 328 
  Зарегистрирован: 20.02.2006
       | 
         | 
		Подскажите, пожалуйста, как работать с таблицами. Что означют функции типа SE_Table...?
        	  | 
		 
		
		| 
		
		 | 
         
     |  
	
		Chem
   780 EGP
            Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751  Откуда: Киев Зарегистрирован: 08.01.2007
       | 
         | 
		
	  | WD : | 
	 
	
	  | 
Подскажите, пожалуйста, как работать с таблицами. Что означют функции типа SE_Table...?
 | 
	 
 
 
А ты где с ними собрался работать ? 
 
А по функциям - эти функции реализованы вне обжа. Получить доступ к частичному описанию таких функций, можно зарегистрировавшись на сайте Эгософта и подписавшись на доступ к ДевНету. 
 
 
добавлено спустя 2 минуты:
 
 И на будущее.
 
В явном виде распространять материалы, не предназначенные Эгософтом для публичного использования - здесь не стоит.
 
То что раскопали сами - то раскопали.
        	 _________________ Умножим энтропию на 0 :-) 
  Последний раз редактировалось: Chem (14:49 03-04-2008), всего редактировалось 1 раз | 
		 
		
		| 
		
		 | 
         
     |  
	
		Dark_
   64 EGP
   Рейтинг канала: 5(201) Репутация: 7 Сообщения: 58  Откуда: за вторым поворотом Зарегистрирован: 18.03.2008
      | 
         | 
		Chem
 
Что становится доступным при подписывании Эгософтовского NDA?
 
И напиши информацию о ДевНете в первом посте.
        	  | 
		 
		
		| 
		
		 | 
         
     |  
	
		TechCat
   100 EGP
   Репутация: 25 Сообщения: 328 
  Зарегистрирован: 20.02.2006
       | 
         | 
		
	  | Chem : | 
	 
	
	  
 
А ты где с ними собрался работать ? 
 
А по функциям - эти функции реализованы вне обжа. Получить доступ к частичному описанию таких функций, можно зарегистрировавшись на сайте Эгософта и подписавшись на доступ к ДевНету. 
 
 | 
	 
 
 
 
У меня есть помощь, но она на английском. Мне интересно, чем отличается структура vtable от array?
 
 
Самая загадочная функция - SE_TableNext. Используется очень часто в обжах. Я так и не смог преревести с английского её описание. 
 
 
З.Ы. С остальными функциями уже всё понятно.
        	  | 
		 
		
		| 
		
		 | 
         
     |  
	
		Chem
   780 EGP
            Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751  Откуда: Киев Зарегистрирован: 08.01.2007
       | 
         | 
		Признаюсь - ступил  
        	 _________________ Умножим энтропию на 0 :-) 
  Последний раз редактировалось: Chem (22:01 03-04-2008), всего редактировалось 1 раз | 
		 
		
		| 
		
		 | 
         
     |  
	
		Dark_
   64 EGP
   Рейтинг канала: 5(201) Репутация: 7 Сообщения: 58  Откуда: за вторым поворотом Зарегистрирован: 18.03.2008
      | 
         | 
		
	  | Chem : | 
	 
	
	  
 
возвращает - следующий элемент таблицы/массива. Если параметр 2 равен нулю - то возвращает первый элемент таблицы/массива. 
 | 
	 
 
 
При чём здесь вообще массив?? Функция работает только с таблицами. 0_о
 
 
Функция SE_TableNext(table, loc) принимает два аргумента
 
1 - идентификатор таблицы
 
2 - ключ из этой таблицы, относительно которого будет взят следующий элемент, или 0 если нужно получить ключ к первому элементу.
 
 
И функция возвращает ключ на элемент массива, т.е. если вызвали сначала
 
	  | Код: | 
	 
	
	  | loc1 = SE_TableNext(table, 0); | 
	 
 
 
то доступ к первому элементу таблицы осуществляется уже так:
 
	  | Код: | 
	 
	
	  | loc2 = table[loc1]; /* переменной loc2 присваивается значение первого элемента таблицы */ | 
	 
 
 
 
PS. Функция возвращает 0 в случае если таблица пуста или достигнуть её конец.
 
PSS. таблицы объявляются как .vtable и не являются линейными структурами как массивы.
 
PSSS. ключом может быть что угодно, даже обьекты.
        	  | 
		 
		
		| 
		
		 | 
         
     |  
	
		TechCat
   100 EGP
   Репутация: 25 Сообщения: 328 
  Зарегистрирован: 20.02.2006
       | 
         | 
		А возможна разбивка файла x3story на несколько частей, чтобы компилировать только ту часть, которую изменил?
 
 
Класс TREBUILD. Вот, что получилось.
 
	  | Код: | 
	 
	
	  
 
.classdef  TREBUILD, 2071d ; 0817h
 
  .vtable    rb_ships//этим кораблям разрешено перестраеваться(создаёться при ScanGalaxyShips)
 
  .vtable    rb_rebuild//эти корабли ожидают очереди на перестройку
 
  .vtable    rb_tAstRebuild//эти астеройды ожидают очереди на перестройку
 
  .vtable    rb_tStationRebuild//эти станции ожидают очереди на перестройку
 
  .func      GetRebuildTable  ; 000111F8h//возвращает rb_tStationRebuild
 
  .func      Init  ; 00011206h//запускается после построения галактики(утсановка потока перестройки)
 
  .func      RequestRebuild  ; 000114E8h//объект требует перестойки
 
  .func      ScanGalaxyShips  ; 000119E6h//поиск кораблей, которые могут восстанавливаться
 
  .func      RebuildShip  ; 00011C5Eh//Функция создает корабль в ближайшем секторе, где производят такие корабли, затем направляет корябль в сектор arg1
 
  .func      RebuildStation  ; 000122C8h//Функция создает станции
 
.endclass  TREBUILD
 
 | 
	 
 
 
 
Перестоиться только кхаки, истребители ксенов и корабли класса Big. Гонеры, пираты и корабли игрока не перестраеваются.
 
Что бы перестроить астеройд или станцию нужно ->SetRebuild(1). Комплексы перестраеваться не будут.
 
Время ожидания после подачи заявки на перестойку:
 
корабли кхаков - 5-9 минут
 
другие корабли - 15-29 минут
 
станции - 6-24 часов
 
астеройды - 3-10 дней
 
Только когда пройдет это время объект пересториться.
 
Автоматически перестраевается астеройд после удаления, станция после уничтожения или при SelfDestruct, после захвата корабля или его уничтожения.
 
Огромные корабли(TSHIP_HUGE) не создаются в секторе с игроком, и появляются на станции, а не в секторе.
 
При постройки кхакских кораблей, мы сможем заметить эффект 46. Не кхакские корабли появляются в центре сектора, а расположение кхаков 
 
	  | Код: | 
	 
	
	  
 
   var loc6=arg1->GetSize();
 
   loc2->SetPos(SE_Random(loc6/3)+loc6,SE_Random(loc6/3)+loc6,SE_Random(loc6/3)+loc6);
 
 | 
	 
 
 
Тоесть вне радиуса сектора.
        	 
  Последний раз редактировалось: TechCat (08:42 04-04-2008), всего редактировалось 1 раз | 
		 
		
		| 
		
		 | 
         
     |  
	
		Dark_
   64 EGP
   Рейтинг канала: 5(201) Репутация: 7 Сообщения: 58  Откуда: за вторым поворотом Зарегистрирован: 18.03.2008
      | 
         | 
		Расскажу маленькую сказочку почему нельзя производить операцию полной пересборки обжа 
 
"DOBJ->XA2C->XC->XASM"
 
 
Жила была процедура TPLOT.CheckShipsOnPath(), никого не трогала, 
 
а в ней после трепанации dobj'ом был код:
 
	  | Код: | 
	 
	
	  
 
001B627E: 004A                   |    6            if SP[0]<=SP[1] then push 0 else push 1
 
001B6280: 0033 000DB1A5          |    5            if SP[0]=0 then jump L001B6352
 
001B6286: 000B                   |    4            push       2
 
001B6288: 0005 0003              |    5            push       SP[2] ; loc3
 
001B628C: 0008                   |    6            get_from_array
 
001B628E: 000A                   |    5            push       1
 
001B6290: 003E                   |    6            add        SP[0],SP[1]
 
001B6292: 000B                   |    5            push       2
 
001B6294: 0005 0004              |    6            push       SP[3] ; loc3
 
001B6298: 002D                   |    7            put_to_array
 
001B629A: 000A                   |    5            push       1
 
001B629C: 003F                   |    6            sub        SP[0],SP[1]
 
001B629E: 002C                   |    5            pop
 
001B62A0: 000B                   |    4            push       2
 
001B62A2: 0005 0003              |    5            push       SP[2] ; loc3
 
001B62A6: 0008                   |    6            get_from_array
 
001B62A8: 000A                   |    5            push       1
 
001B62AA: 0005 0004              |    6            push       SP[3] ; loc3
 
001B62AE: 0008                   |    7            get_from_array
 
001B62B0: 000A                   |    6            push       1
 
001B62B2: 005A 00000117          |    7            callasm    SE_ArraySize ; 00000117 | 
	 
 
 
Вполне логичный код в котором делается примерно следующей
 
	  | Код: | 
	 
	
	  
 
if(<некое логическое выражение которое нам не итерсно>) {
 
   {
 
   (loc3[2]=loc3[2]+1)-1; // результат от -1 выкидывается, строчки asm  
 
                          // 001B629A - 001B629E 
 
                          // идёт if который выглядит примерно так:
 
if (SE_ArraySize(loc3[1]) > loc3[2]) {  //  впрочем if не важен. | 
	 
 
 
 
Теперь посмотрим на то что сгенерировал XA2C:
 
	  | Код: | 
	 
	
	  
 
if(<некое логическое выражение которое нам не итерсно>)
 
   {
 
   loc3[2]=loc3[2]+1-1;  // вот здесь наступает пипец логике кода...
 
   if(loc3[2]>=SE_ArraySize(loc3[1]))
 
    { | 
	 
 
 
XA2C каким то боком генерирует строчку "loc3[2]=loc3[2]+1-1;" которая не соотвествует асьмовому коду.
 
 
После тулы XC получим:
 
	  | Код: | 
	 
	
	             push       2
 
           push       SP[2]     ; <-- loc3
 
           get_from_array
 
           push       1
 
           add        SP[0],SP[1]
 
           push       1
 
           sub        SP[0],SP[1]
 
           push       2
 
           push       SP[3]     ; <-- loc3
 
           put_to_array
 
           pop      | 
	 
 
 
Т.е. тот самый кривой код сгенерёный XA2C.
 
 
В итоге после перекомпиляции получится обж со сдвинутой крышей...
 
 
 
	  | WD : | 
	 
	
	  | 
А возможна разбивка файла x3story на несколько частей,
 | 
	 
 
 
Читай всю первою страницу этой темы
 
Есть в ХС такая директива #include
 
	  | WD : | 
	 
	
	  | 
чтобы компилировать только ту часть, которую изменил?
 | 
	 
 
 
Писать патч на ams
        	 
  Последний раз редактировалось: Dark_ (09:02 04-04-2008), всего редактировалось 2 раз(а) | 
		 
		
		| 
		
		 | 
         
     |  
	
		Chem
   780 EGP
            Рейтинг канала: 15(2610) Репутация: 248 Сообщения: 4751  Откуда: Киев Зарегистрирован: 08.01.2007
       | 
         | 
		
	  | Dark_ : | 
	 
	
	  | 
Писать патч на ams
 | 
	 
 
 
на asm т.е.
 
И наверное - все это в баг-репорты http://www.elite-games.ru/conference/viewtopic.php?t=36933.
        	 _________________ Умножим энтропию на 0 :-)  | 
		 
		
		| 
		
		 | 
         
     |  
	
		Dark_
   64 EGP
   Рейтинг канала: 5(201) Репутация: 7 Сообщения: 58  Откуда: за вторым поворотом Зарегистрирован: 18.03.2008
      | 
         | 
		
	  | Chem : | 
	 
	
	  | 
И наверное - все это в баг-репорты
 | 
	 
 
 
Толку мало ибо к сожалению, товарищ Darth Revan через пару дней будет "Lost in space"
        	  | 
		 
		
		| 
		
		 | 
         
     |  
	
		AlexYar
   1955 EGP
                 Рейтинг канала: 13(2096) Репутация: 325 Сообщения: 33300 
  Зарегистрирован: 26.10.2003
      | 
         | 
		
	  | Dark_ : | 
	 
	
	  | 
DOBJ->XA2C->XC->XASM
 | 
	 
 
 
 
Какую версию ха2с используешь? С каким параметром запускаешь?
 
 
В старой версии был такой баг.
 
 
	  | Dark_ : | 
	 
	
	  
	  | WD : | 
	 
	
	  | 
чтобы компилировать только ту часть, которую изменил? 
 | 
	 
 
 
 
Писать патч на ams 
 | 
	 
 
 
 
Можно и на СХ  
        	  | 
		 
		
		| 
		
		 | 
         
     |  
	
		CheckerTwo
   550 EGP
       Рейтинг канала: 4(99) Репутация: 103 Сообщения: 412  Откуда: Tomsk Зарегистрирован: 18.08.2004
      | 
         | 
		
	  | AlexYar : | 
	 
	
	  | 
Какую версию ха2с используешь? С каким параметром запускаешь? 
 | 
	 
 
 
Проверил в XA2C версии 1.02, параметры не влияют.
 
Неприятный момент.  
        	 
  Последний раз редактировалось: CheckerTwo (15:54 04-04-2008), всего редактировалось 1 раз | 
		 
		
		| 
		
		 | 
         
     |  
	
		Dark_
   64 EGP
   Рейтинг канала: 5(201) Репутация: 7 Сообщения: 58  Откуда: за вторым поворотом Зарегистрирован: 18.03.2008
      | 
         | 
		
	  | AlexYar : | 
	 
	
	  
 
Какую версию ха2с используешь? С каким параметром запускаешь? 
 | 
	 
 
 
1.02 альфа
 
От параметров не зависит
 
 
	  | CheckerTwo : | 
	 
	
	  | 
Неприятный момент
 | 
	 
 
 
А фиксить надо...
        	  | 
		 
		
		| 
		
		 | 
         
     |  
	
		AlexYar
   1955 EGP
                 Рейтинг канала: 13(2096) Репутация: 325 Сообщения: 33300 
  Зарегистрирован: 26.10.2003
      | 
         | 
		А в 1.01 данный баг есть? 
 
 
добавлено спустя 5 минут:
 
 Одно радует - данный вариант кода не имеет смысла (единица от воздуха отнимается), и так как в коде таких мест немного, то их можно быстро поиском найти и руками поправить  
        	 
  Последний раз редактировалось: AlexYar (16:46 05-04-2008), всего редактировалось 1 раз | 
		 
		
		| 
		
		 | 
         
     |  
	
		AlexYar
   1955 EGP
                 Рейтинг канала: 13(2096) Репутация: 325 Сообщения: 33300 
  Зарегистрирован: 26.10.2003
      | 
         | 
		
	  | Dark_ : | 
	 
	
	  
И функция возвращает ключ на элемент массива, т.е. если вызвали сначала 
 
Код:
 
loc1 = SE_TableNext(table, 0);
 
 
то доступ к первому элементу таблицы осуществляется уже так: 
 | 
	 
 
 
 
А как тогда объяснишь работу такого кода?
 
 
	  | Код: | 
	 
	
	  
 
for(loc1=SE_TableNext(TSECTOR.sec_Suns);loc1;loc1=SE_TableNext(TSECTOR.sec_Suns,loc1))
 
  {
 
  loc1->Activate();
 
  }
 
 | 
	 
 
 
 
По-твоему, в данном случае активируется ключ на солнце, а не само солнце?  
 
 
Я понимаю, что в данной таблице ключ на объект одновременно является и объектом в таблице по этому ключу, но твоё определение в данном примере может привести к путанице  
        	  | 
		 
		
		| 
		
		 | 
         
     |  
	
		Dark_
   64 EGP
   Рейтинг канала: 5(201) Репутация: 7 Сообщения: 58  Откуда: за вторым поворотом Зарегистрирован: 18.03.2008
      | 
         | 
		Я себя процентную  
 
Смотри PSSS.  
 
	  | Dark_ : | 
	 
	
	  
 
PS. Функция возвращает 0 в случае если таблица пуста или достигнуть её конец.
 
PSS. таблицы объявляются как .vtable и не являются линейными структурами как массивы.
 
PSSS. ключом может быть что угодно, даже обьекты.
 | 
	 
 
 
 
А вот вызов без второго аргумента заметил только сейчас...
        	  | 
		 
		
		| 
		
		 | 
         
     |  
	 |  
	
		| 
		
		 | 
	 
     |  
	| 
	  Канал X3: Reunion ->
	  Модовый и скриптовый отсек X3: Reunion: «Кодинг в обже, вопросы и ответы» |  
	
		| 
		
		 | 
	 
 
      
        | К списку каналов | Наверх страницы  |  
Цитата не в тему:  Может придти Thorn и дать по морде, проверено! (шедевр WaW-а)
 
  |  
        |   » Кодинг в обже, вопросы и ответы | страница 1 |  
       
      
 |