SoC. Один из методов спавна — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

SoC. Один из методов спавна — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
м (restored)
 
(не показаны 16 промежуточные версии 4 участников)
Строка 1: Строка 1:
'''Made by Bardak'''
+
== Суть идеи ==
 
+
 
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.
 
Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.
  
Строка 31: Строка 30:
 
</code>
 
</code>
  
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read "классов" cse_alife_... в acdc.pl (это альтернативный редактор all.spawn, ссылка в ветке про bfa). Но там могут быть ошибки.
+
Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read "классов" cse_alife_... в acdc.pl (это альтернативный редактор all.spawn).  
 +
Но там могут быть ошибки.
  
Здесь пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно):
+
Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).
http://ifolder.ru/2817099
+
  
 
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.
 
Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.
  
Нюансы:
+
== Нюансы ==
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же acdc.pl методы update_read (если есть).
+
1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же '''acdc.pl''' методы update_read (если есть).
 +
 
 
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.
 
2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.
 +
 +
==Ссылки и дополнительный материал==
 +
 +
*Дополнительные ссылки
 +
[http://stalkerin.gameru.net/developer/mods/create_anom_heli.zip Example]
 +
 +
[http://stalkerin.gameru.net/developer/mods/acdc.rar ACDC]
 +
 +
*Дополнительная инфа
 +
'''ACDC''' - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.
 +
 +
 +
'''Made by Bardak'''
 +
 +
'''Added by Loxotron'''
  
 
[[Категория:Скрипты]]
 
[[Категория:Скрипты]]

Текущая версия на 15:43, 21 мая 2011

Суть идеи

Создание на лету рабочих аномалий, вертолётов, переходов между уровнями, рестрикторов, точек воспроизводства и других объектов, конструктор которых задаёт не все необходимые для полноценного функционирования параметры.

Идея проста.

1) Создаём объект стандартным методом:
local obj = alife():create(...)
 
2) Создаём экземпляр класса net_packet:
local packet = net_packet()
 
3) Сохраняем состояние объекта в пакет:
obj:STATE_Write(packet)
 
4) Считываем _все_ сохраняемые свойства в переменные:
local property1 = packet:r_u32()
...
local propertyN = packet:r_float()
 
5) Записываем эти переменные опять, меняя или дополняя необходимые параметры:
packet:w_u32(property1)
...
propertyN = new_value
packet:w_float(propertyN)
 
6) Считываем модифицированное состояние объекта:
packet:r_seek(0)
obj:STATE_Read(packet, packet:w_tell())

Где брать список сохраняемых параметров и их размеры? Самый верный способ - дизассемблирование методов STATE_Write и STATE_Read всех классов вида CSE_ALife... в xrGame.dll. Более простой - смотреть методы state_read "классов" cse_alife_... в acdc.pl (это альтернативный редактор all.spawn). Но там могут быть ошибки.

Внизу вы найдете пример кода, который скриптом создаёт рабочую электру и вертолёт (у ног игрока и на 50 метров выше игрока соответственно).

Лучше всего смотреть на Кордоне. Вертолёт ни на что не реагирует, но это нормально. Ему нужно либо логику через custom_data прописывать, либо ручками дёргать управляющие методы.

Нюансы

1) Для некоторых типов объектов желательно дёргать UPDATE_Write/UPDATE_Read. Смотрите в том же acdc.pl методы update_read (если есть).

2) Стоит попробовать поиграться с аномалиями, которые создаются при активации артефактов. Если у них таймер не внешний, то есть шанс регулировки времени жизни. Ссылку на серверный объект можно получить через биндер, например.

Ссылки и дополнительный материал

  • Дополнительные ссылки

Example

ACDC

  • Дополнительная инфа

ACDC - сборщик-разборщик двух секций в all.spawn, но подсекцию M_UPDATE он не обрабатывает пока. Вырос из автоматического обработчика.


Made by Bardak

Added by Loxotron

Другие места
LANGUAGE