Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 28 мар 2024, 20:15

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Monster plugin. Компиляция под Linux
СообщениеДобавлено: 03 ноя 2015, 22:14 
Не в сети
Аватара пользователя
Зарегистрирован:
21 мар 2012, 13:21
Последнее посещение:
27 дек 2023, 02:51
Сообщения: 165
Возникла необходимость скомплить metamod плагин Monster Plugin (http://hpb-bot.bots-united.com/monster.html) под Linux.
Познания в C++ и GoldSource у меня к сожалению небольшие, поэтому возникли трудности. Не компилится!

Буду подробно описывать свои действия, чтобы было понятнее. Первым делом я скачал сорцы с сайта Monster Plugin, скачал metamod и hlsdk с сайта metamod.org. Закинул их в корневую директорию. В итоге имею три директории:
hlsdk
metamod-1.20
monster_plugin

В файле monster_plugin/dlls/Makefile я изменил
Цитата:
CPPFLAGS = ${BASEFLAGS} -m386 -O2 -w -I. -I../engine -I../common -I../pm_shared -I../../metamod
на
Цитата:
CPPFLAGS = ${BASEFLAGS} -m32 -O2 -w -I. -I../engine -I../common -I../pm_shared -I../../metamod-1.20

Попытка #1
Код:
nikita@nikita-Lenovo-B570e:~/Documents/sources/monster_plugin/dlls$ make
gcc -Dstricmp=strcasecmp -Dstrcmpi=strcasecmp -m32 -O2 -w -I. -I../engine -I../common -I../pm_shared -I../../metamod-1.20 -c agrunt.cpp -o agrunt.o
In file included from agrunt.cpp:20:0:
util.h: In function ‘BOOL FStrEq(const char*, const char*)’:
util.h:182:27: error: ‘strcmp’ was not declared in this scope
  { return (strcmp(sz1, sz2) == 0); }
                           ^
In file included from agrunt.cpp:21:0:
effects.h: In member function ‘void CMSprite::AnimateAndDie(float)’:
cmbase.h:296:81: error: cannot convert ‘CMSprite::AnimateUntilDead’ from type ‘void (CMSprite::)()’ to type ‘void (CMBaseEntity::*)()’
 #define SetThink( a ) m_pfnThink = static_cast <void (CMBaseEntity::*)(void)> (a)
                                                                                 ^
effects.h:82:3: note: in expansion of macro ‘SetThink’
   SetThink(AnimateUntilDead);
   ^
effects.h: In member function ‘void CMBeam::LiveForTime(float)’:
cmbase.h:296:81: error: cannot convert ‘CMBaseEntity::SUB_Remove’ from type ‘void (CMBaseEntity::)()’ to type ‘void (CMBaseEntity::*)()’
 #define SetThink( a ) m_pfnThink = static_cast <void (CMBaseEntity::*)(void)> (a)
                                                                                 ^
effects.h:168:42: note: in expansion of macro ‘SetThink’
  inline void LiveForTime( float time ) { SetThink(SUB_Remove); pev->nextthink = gpGlobals->time + time; }
                                          ^
In file included from agrunt.cpp:22:0:
cmbasemonster.h: At global scope:
cmbasemonster.h:486:14: error: extra qualification ‘CMHoundeye::’ on member ‘GetSchedule’ [-fpermissive]
  Schedule_t *CMHoundeye :: GetSchedule( void );
              ^
agrunt.cpp: In member function ‘virtual int CMAGrunt::IRelationship(CMBaseEntity*)’:
agrunt.cpp:128:62: error: ‘strcmp’ was not declared in this scope
  if ( strcmp(STRING(pTarget->pev->model), "models/hgrunt.mdl") == 0 )
                                                              ^
make: *** [agrunt.o] Ошибка 1

Эту проблему я решил исправить добавлением строчки в monster_plugin/dlls/agrunt.cpp
Код:
#include <string.h>

Попытка #2
Код:
nikita@nikita-Lenovo-B570e:~/Documents/sources/monster_plugin/dlls$ make
gcc -Dstricmp=strcasecmp -Dstrcmpi=strcasecmp -m32 -O2 -w -I. -I../engine -I../common -I../pm_shared -I../../metamod-1.20 -c agrunt.cpp -o agrunt.o
In file included from agrunt.cpp:23:0:
effects.h: In member function ‘void CMSprite::AnimateAndDie(float)’:
cmbase.h:296:81: error: cannot convert ‘CMSprite::AnimateUntilDead’ from type ‘void (CMSprite::)()’ to type ‘void (CMBaseEntity::*)()’
 #define SetThink( a ) m_pfnThink = static_cast <void (CMBaseEntity::*)(void)> (a)
                                                                                 ^
effects.h:82:3: note: in expansion of macro ‘SetThink’
   SetThink(AnimateUntilDead);
   ^
effects.h: In member function ‘void CMBeam::LiveForTime(float)’:
cmbase.h:296:81: error: cannot convert ‘CMBaseEntity::SUB_Remove’ from type ‘void (CMBaseEntity::)()’ to type ‘void (CMBaseEntity::*)()’
 #define SetThink( a ) m_pfnThink = static_cast <void (CMBaseEntity::*)(void)> (a)
                                                                                 ^
effects.h:168:42: note: in expansion of macro ‘SetThink’
  inline void LiveForTime( float time ) { SetThink(SUB_Remove); pev->nextthink = gpGlobals->time + time; }
                                          ^
In file included from agrunt.cpp:24:0:
cmbasemonster.h: At global scope:
cmbasemonster.h:486:14: error: extra qualification ‘CMHoundeye::’ on member ‘GetSchedule’ [-fpermissive]
  Schedule_t *CMHoundeye :: GetSchedule( void );
              ^
make: *** [agrunt.o] Ошибка 1


Вложения:
monster_plugin_source.zip [340.81 КБ]
Скачиваний: 372
Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Monster plugin. Компиляция под Linux
СообщениеДобавлено: 04 ноя 2015, 02:04 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
ImperNik писал(а):
cannot convert ‘CMSprite::AnimateUntilDead’ from type ‘void (CMSprite::)()’ to type ‘void (CMBaseEntity::*)()’
Проблема старого HLSDK. Надо заменить все
Код:
SetThink(AnimateUntilDead)
на
Код:
SetThink(&CMSprite::AnimateUntilDead)
т.е. поставить знак взятия адреса '&' (нам надо тут адрес функции) и указать тип в котором функция определена.

ImperNik писал(а):
extra qualification ‘CMHoundeye::’ on member ‘GetSchedule’
Просто удалить
Код:
CMHoundeye::


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Monster plugin. Компиляция под Linux
СообщениеДобавлено: 04 ноя 2015, 04:12 
Не в сети
Аватара пользователя
Зарегистрирован:
21 мар 2012, 13:21
Последнее посещение:
27 дек 2023, 02:51
Сообщения: 165
Спасибо. Править пришлось много.

Теперь появились ошибки
Код:
skill.cpp:118: undefined reference to `META_CONS(char const*, ...)'
log_meta.h подключил.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Monster plugin. Компиляция под Linux
СообщениеДобавлено: 04 ноя 2015, 20:10 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
Поправь в util.cpp
Код:
void META_CONS(char *fmt, ...) {
на
Код:
void META_CONS(const char *fmt, ...) {


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB