1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-09-18 16:32:32 +02:00

Merge pull request #141 from danhedron/fix/opcodes-1

Fix opcodes 0121 & 0395
This commit is contained in:
Daniel Evans 2016-06-11 13:44:52 +01:00 committed by GitHub
commit ce4d5061e8
2 changed files with 7 additions and 21 deletions

View File

@ -985,6 +985,10 @@ void game_clear_area(const ScriptArguments& args)
for(auto& p : gw->pedestrianPool.objects)
{
// Hack: Not sure what other objects are exempt from this opcode
if (p.second->getLifetime() == GameObject::PlayerLifetime) {
continue;
}
if( glm::distance(position, p.second->getPosition()) < radius )
{
gw->destroyObjectQueued(p.second);

View File

@ -475,9 +475,10 @@ bool game_vehicle_dead(const ScriptArguments& args)
return vehicle == nullptr;
}
template <class T>
bool game_character_in_zone(const ScriptArguments& args)
{
auto character = static_cast<CharacterObject*>(args.getObject<CharacterObject>(0));
auto character = static_cast<CharacterObject*>(args.getObject<T>(0));
std::string zname(args[1].string);
auto zfind = args.getWorld()->data->zones.find(zname);
@ -494,25 +495,6 @@ bool game_character_in_zone(const ScriptArguments& args)
return false;
}
bool game_player_in_zone(const ScriptArguments& args)
{
auto character = static_cast<CharacterObject*>(args.getPlayerCharacter(0));
std::string zname(args[1].string);
auto zfind = args.getWorld()->data->zones.find(zname);
if( zfind != args.getWorld()->data->zones.end() ) {
auto player = character->getPosition();
auto& min = zfind->second.min;
auto& max = zfind->second.max;
if( player.x > min.x && player.y > min.y && player.z > min.z &&
player.x < max.x && player.y < max.y && player.z < max.z ) {
return true;
}
}
return false;
}
bool game_player_pressing_horn(const ScriptArguments& args)
{
auto character = static_cast<CharacterObject*>(args.getPlayerCharacter(0));
@ -1280,7 +1262,7 @@ ObjectModule::ObjectModule()
bindUnimplemented(0x011C, game_character_clear_objective, 1, "Clear Character Objective" );
bindFunction(0x0121, game_player_in_zone, 2, "Is Player In Zone" );
bindFunction(0x0121, game_character_in_zone<PlayerController>, 2, "Is Player In Zone" );
bindFunction(0x0122, game_player_pressing_horn, 1, "Is Player Pressing Horn" );
bindFunction(0x0126, game_character_objective_passed, 1, "Character Objective Passed" );