Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2010, 16:16   #1
Hidan
Новичок
Джуниор
 
Регистрация: 31.08.2010
Сообщений: 2
По умолчанию Скриптинг в играх

Здравствуйте уважаемые товарищи программисты!
Не знаю на тот форум ли я обратился, но думаю здесь знающие люди смогут помочь. А дело вот в чем.
Начну издалека чтобы было понятнее.
Достаточно давно я начал играть в франчизу Call of Duty. Думаю многие знают что это такое. Потом я узнал о создание модов и карт для этой игры. (В данный момент это КоД4). Разбирался со скриптами в модах и т.д. Скрипты все написаны на С++, потому что движок игры от Quake 3.
Так вот. Недавно в сети нашел скрипт для создания очень нужной вещицы, (пока не буду уточнять что это, ибо не так важно) но вот тут была заминка... Все скрипты которые я видел раньше были написано "аккуратно", как например тут:
Код:
main()
{
	thread secret_wall();
}

secret_wall()
{
	wall = getent("do","targetname");
	trig = getent("do1","targetname");

	while(true)
	{
		trig waittill("trigger", player);
		if (player.score > 20)
		{
			player iprintln("^1Access ^0Granted");
			wall movey (256,2,0.5,0.5); 
			wall waittill ("movedone");
			wait 3;
			wall movey (-256,2,0.5,0.5); 
			wall waittill ("movedone");
		}
		else
		{
			player iprintln("^1HaHa^0!");
		}
	}
}
А в этом скрипте все было, как бы перемешано и написано как обычный текст в книге или журнале.
Вот, собственно и этот скрипт
Код:
main()
level.rh_fighter_missiles = rat_house\rat_house::createdvar("rat_house_fighter_missiles",3,1,20,"int");if(level.rh_fighter_missile_min_dmg >= level.rh_fighter_missile_max_dmg)level.rh_fighter_missile_min_dmg = level.rh_fighter_missile_max_dmg - 1;precacheModel("projectile_at4");level.fx_fighter_mg_muzz = loadFx("rat_house/fighter/fighter_flash");level.fx_fighter_missile_muzz = loadFx("rat_house/fighter/fighter_flash_rl");level.fx_fighter_missile_trail = loadFx("rat_house/fighter/fighter_missile_trail");level.fx_fighter_trail = loadFx("rat_house/fighter/fighter_engine_trail");level.fx_fighter_death_trail = loadFx("rat_house/fighter/fighter_death_trail");level.fx_fighter_exp = loadFx("explosions/vehicle_explosion_bmp");if(level.rh_fighter_boost_blur)precacheShellshock("rh_fighter_boost");dustfighters = getentarray("fighter","targetname");
for(i=0;i<dustfighters.size;i++)dustfighters[i] thread init();}init(){self.targetname = undefined;self.link = [];stuff = getentarray(self.target, "targetname");for(i=0;i<stuff.size;i++){if(!isDefined(stuff[i].script_noteworthy))continue;else if(stuff[i].script_noteworthy == "trig")self.trigger = stuff[i];else if(stuff[i].script_noteworthy == "link")self.link[self.link.size] = stuff[i];else if(stuff[i].script_noteworthy == "fx")self.tag_fx = stuff[i];else if(stuff[i].script_noteworthy == "tag_player")self.tag_player = stuff[i];else if(stuff[i].script_noteworthy == "tag_passenger")self.tag_passenger = stuff[i];}self.target = undefined;if(!level.rh_allow_fighter){self.tag_fx delete();self.tag_player delete();self.tag_passenger delete();self.trigger thread disallowfighter();return;}oldangles = self.angles;self.angles = (0,0,0);
for(i=0;i<self.link.size;i++)self.link[i] linkto(self);self.tag_fx notsolid();self.tag_fx setcontents(0);self.tag_fx linkto(self);self.angles = oldangles;temp = self.tag_passenger.origin;self.tag_passenger delete();self.tag_passenger = temp;temp = self.tag_player.origin;self.tag_player delete();self.tag_player = temp;self.maxup = -50;self.maxdown = 50;self.restorigin = self.origin;self.restangles = self.angles;self.atrest = true;self.speed = level.rh_fighter_speed;self.crashed = false;self.wallnormal = (0,0,1);self.getoff = false;self.destroyed = false;self.attacker = undefined;self.owner = undefined;self.passenger = undefined;while(1){self.trigger waittill("trigger", player);if(isDefined(self.owner))continue;if(player.sessionstate != "playing")continue;if(isDefined(player.infighter))continue;if(isDefined(player.insam))continue;
if(isDefined(player.inturret))continue;if(isDefined(player.islaunching))continue;if(isDefined(player.ispara))continue;if(player getStance() == "prone")continue;player.infighter = true;self.owner = player;self thread init_fighter();self thread waitforpassenger();self waittill("fighter_done");self.trigger rat_house\rat_house::entityOn();}}waitforpassenger(){self endon("fighter_dead");self endon("fighter_started");while(1){self.trigger waittill("trigger",player);if(player.sessionstate != "playing")continue;if(isDefined(player.infighter))continue;if(isDefined(player.insam))continue;if(isDefined(player.inturret))continue;if(isDefined(player.islaunching))continue;if(isDefined(player.ispara))continue;
Прошу помощи в "разлиновке" этого скрипта.
P.S. Это только 1/6 всего скрипта. Если кто-то может помочь отпишитесь пожалуйста.
Hidan вне форума Ответить с цитированием
Старый 31.08.2010, 16:23   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

А в чем проблема? Тыкаете Enter после каждой точки с запятой, выравниваете лесенку по фигурным скобочкам. Работа не архисложная, хоть и слегка тягомотная.
Я если и возьмусь вам помочь, то только за небольшое вознаграждение. А так-то ничего принципиально сложного тут нет.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 31.08.2010, 16:26   #3
Hidan
Новичок
Джуниор
 
Регистрация: 31.08.2010
Сообщений: 2
По умолчанию

Хмм.. Смотря какое вознаграждение.
339-414-498
Hidan вне форума Ответить с цитированием
Старый 31.08.2010, 20:05   #4
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Код:
string line;
		vector<string> txt;
		while (getline(file, line)) {
			txt.push_back(line);
		}
		vector<string>::iterator it;
		int i;
		string::size_type lit;
		for (it = txt.begin(); it != txt.end(); ++it) {
			lit = 0;
			while(string::npos != (lit = it->find_first_of(';', lit))) {
				it->insert(lit + 1, "\n");
				++lit;
			}
		}
}
небольшой парсер вставки ентеров. Дальше чтоб привести к читабельности можно вставить табы после {}, отступы в телах функции, пробелы в некоторых местах, правильно выставить отступы во вложенных if for...
include <Qt>

Последний раз редактировалось sever-42; 31.08.2010 в 20:14.
sever-42 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Физика в 2D играх Андрей 93 Gamedev - cоздание игр: Unity, OpenGL, DirectX 172 24.04.2011 18:29
Физика в играх Andrew101095 Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 25.07.2010 17:51
Эмуляция в играх magros Общие вопросы .NET 6 21.06.2010 07:06
Сюжет в 2D играх ZotaC Свободное общение 8 05.07.2009 15:42
Анимация в играх frai Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 25.11.2007 14:28