Форум программистов, компьютерный форум CyberForum.ru

Скрипт на С++ (AngelScripts) - C++

Восстановить пароль Регистрация
 
Vladimir12356
Сообщений: n/a
22.01.2013, 20:48     Скрипт на С++ (AngelScripts) #1
Это скрипт дымовой гранаты в игре.Он делает чтобы в игрока находящегося в дыме все промахивались.Помогите с реализацией тепловизара. Тепловизор должен повышать шанс на попадание на 60%.
знаю что нужно в
Код
uint GetSmokePenalty( Map@ map, Critter@ attacker, Critter@ target )
добавить проверку на наличие какого либо специального предмета у атакующего.

Код
// Author: rifleman17

#include "_macros.fos"

#define MAX_STEP               ( 5 )
#define SMOKE_TOHIT_PENALTY    # (attacker) ( attacker.IsPlayer() ? 80 : 40 )
#define GAS_TOHIT_PENALTY      # (attacker) ( attacker.IsPlayer() ? 50 : 25 )
#define RND                    # ( v1, v2 )( Random( v1, v2 ) == 1 )

import void AffectPoison( Critter& cr, int value ) from "poison";
import void InjureCritter( Critter& cr, uint dmg, uint dmgType, uint8 dir, uint attackerId )  from "combat";

uint GetSmokePenalty( Map@ map, Critter@ attacker, Critter@ target )
{
    if( valid( map ) )
    {
        if( valid( attacker ) && valid( map.GetItem( attacker.HexX, attacker.HexY, PID_SMOKE ) ) )
            return SMOKE_TOHIT_PENALTY( attacker );
        if( valid( target ) && valid( map.GetItem( target.HexX, target.HexY, PID_SMOKE ) ) )
            return SMOKE_TOHIT_PENALTY( attacker );
        if( valid( attacker ) && valid( map.GetItem( attacker.HexX, attacker.HexY, PID_MUSTARD_GAS ) ) )
            return GAS_TOHIT_PENALTY( attacker );
        if( valid( target ) && valid( map.GetItem( target.HexX, target.HexY, PID_MUSTARD_GAS ) ) )
            return GAS_TOHIT_PENALTY( attacker );
    }
    return 0;
	
	
}

void SmokeBlast( Map& map, uint16 hexX, uint16 hexY, uint16 smokePid, uint ownerId )
{
    uint[] values = { map.Id, hexX, hexY, 0, smokePid, ownerId };
    CreateTimeEvent( __FullSecond, "e_SmokeBlast", values, false );
}

uint e_SmokeBlast( uint[] @ values )
{
    Map@   map = GetMap( values[ 0 ] );
    uint16 hexX = values[ 1 ];
    uint16 hexY = values[ 2 ];
    uint8  step = values[ 3 ];
    uint16 pid = values[ 4 ];
    uint   ownerId = values[ 5 ];
    uint   penaltyLowSkill = 0;
    if( ownerId > 0 )
    {
        Critter@ cr = GetCritter( ownerId );
        if( valid( cr ) )
        {
            penaltyLowSkill = 4 - uint( CLAMP( cr.Skill[ SK_THROWING ], 0, 100 ) / 25 );
        }
    }
    if( step > ( MAX_STEP - penaltyLowSkill ) )
        return 0;
    uint[] smokeIds;
    map.PlaySound( "gas.wav", hexX, hexY, 25 );
    AddSmoke( map, hexX, hexY, ( step == 0 || ( step < 2 && RND( 1, 2 ) ) ), pid, ownerId, smokeIds );

    for( uint curStep = 1; curStep < step; curStep++ )
    {
        hexX = values[ 1 ];
        hexY = values[ 2 ];
        map.MoveHexByDir( hexX, hexY, 4, curStep );
        for( uint i = 0; i < 6; i++ )
        {
            for( uint j = 0; j < curStep; j++ )
            {
                map.MoveHexByDir( hexX, hexY, i, 1 );
                AddSmoke( map, hexX, hexY, ( curStep + 2 > step ) || ( ( curStep + 3 > step ) && RND( 1, 2 ) ) || RND( 1, 3 ), pid, ownerId, smokeIds );
            }
        }
    }
    if( smokeIds.length() > 0 )
        CreateTimeEvent( __FullSecond + uint( REAL_SECOND( Random( 4, 6 ) ) * ( 12 - step ) * ( 5 - penaltyLowSkill ) / 5 ), "e_DeleteSmokes", smokeIds, true );
    values[ 3 ]++;
    return 5;
}

uint e_DeleteSmokes( uint[] @ values )
{
    for( uint i = 0, l = values.length(); i < l; i++ )
    {
        if( values[ i ] == 0 )
            continue;
        Item@ item = GetItem( values[ i ] );
        if( valid( item ) )
            DeleteItem( item );
    }
    return 0;
}

void _SmokeInit( Item& item, bool firstTime )
{
    if( !firstTime )
        DeleteItem( item );
    else
    {
        SETFLAG( item.Flags, ITEM_NO_BLOCK );
        SETFLAG( item.Flags, ITEM_SHOOT_THRU );
        if( item.GetProtoId() == PID_MUSTARD_GAS )
        {
            item.SetEvent( ITEM_EVENT_WALK, "_MustardGasWalk" );
        }
        // item.SetEvent(ITEM_EVENT_FINISH, "_SmokeFinish");
    }
}

void _MustardGasWalk( Item& mine, Critter& cr, bool entered, uint8 dir )
{
    if( entered )
    {
        if( cr.IsPlayer() && cr.Mode[ MODE_NO_PVP ] == 0 )
            AffectPoison( cr, Random( 3, 5 ) );
        else
        {
            if( cr.Mode[ MODE_INVULNERABLE ] == 0 )
                InjureCritter( cr, Random( 1, 2 ), DAMAGE_NORMAL, 0, mine.Val0 );
        }
    }
}

void AddSmoke( Map@ map, uint16 hexX, uint16 hexY, bool place, int16 pid, int ownerId, uint[]& ids )
{
    if( valid( map ) && place && ( map.IsHexPassed( hexX, hexY ) || valid( map.GetCritter( hexX, hexY ) ) ) )
    {
        Item@ item = map.AddItem( hexX, hexY, pid, 1 );
        if( valid( item ) )
        {
            item.Val0 = ownerId;
            ids.insertLast( item.Id );
            item.SetScript( "_SmokeInit" );
        }
    }
}

void SmokeBlast( Critter& cr, int pid, int, int )
{
    SmokeBlast( cr.GetMap(), cr.HexX, cr.HexY, uint16( pid ), cr.Id );
}
Думаю вот это поможет. http://fodocs.arcreborn.ru/
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2013, 20:48     Скрипт на С++ (AngelScripts)
Посмотрите здесь:

Скрипт для автоматизации забивания инфы C++
Скрипт боса C++
C++ Скрипт открытия интернет ссылки
C++ нужен скрипт
Создать скрипт C++
C++ Cgi скрипт на C++
C++ Скрипт на python переделать на С++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
22.01.2013, 21:47     Скрипт на С++ (AngelScripts) #2
Vladimir12356, эм, по-моему это objective-C, или что-то из диалектов обычно C, не C++.
Yandex
Объявления
22.01.2013, 21:47     Скрипт на С++ (AngelScripts)
Ответ Создать тему
Опции темы

Текущее время: 21:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru