Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Arturius

Pages: [1]
1
Раз пошла такая пьянка... Тоже задам хитроумный вопрос ;D. Как можно назначить игроку двигаться шагом, как при нажатой клавише Shift? Нет, изменение скорости при помощи fSlow мне не подходит. Надо чтобы движение игрока определялось именно как "шагом".

2
War3: Source - Multilingual / [Russian] Расчёт расстояния
« on: November 19, 2011, 03:49:26 AM »
Помогите мне решить такую задачку. У расы Light Bender есть ултимат, который телепортирует случайного противника к себе над головой на постоянное расстояние. Проблема в том, что его телепорт не проверяет наличие текстур и зачастую противник в них застревает. Мне пришло в голову использовать для телепортации код из расы Human Alliance:
Code: [Select]
if(War3_SkillNotInCooldown(client,thisRaceID,ULT_TELEPORT,true)) //not in the 0.2 second delay when we check stuck via moving
{
new bool:success = War3_Teleport(client,TeleportDistance[ult_level]);
if(success)
{
new Float:cooldown=GetConVarFloat(ultCooldownCvar);
War3_CooldownMGR(client,cooldown,thisRaceID,ULT_TELEPORT,_,_);
}
}
Но для War3_Teleport мне нужно рассчитать расстояние TeleportDistance. Если Человек телепортирует сам себя, то в моём случае телепортируется противник. Значит TeleportDistance для противника должен быть = "Текущее расстояние между двумя игроками" минус "Конечное расстояние между двумя игроками". Конечное расстояние - то расстояние на которое должен быть телепортирован противник перед атакером. Как мне это вычислить?

3
Стал замечать, что во многих нестандартных расах у меня не работает иммунитет от их скилов и/или ультиматов.
Вот например в расе Lucky Strike:

Code: [Select]
public OnW3TakeDmgBulletPre( victim, client, Float:damage )
{
if( IS_PLAYER( victim ) && IS_PLAYER( client ) && victim > 0 && client > 0 && victim != client && IsPlayerAlive( victim ) && IsPlayerAlive( client ) )
{
new vteam = GetClientTeam( victim );
new ateam = GetClientTeam( client );

new race_victim = War3_GetRace( victim );
new race_attack = War3_GetRace( client );

if( vteam != ateam )
{
new skill_steal = War3_GetSkillLevel( client, thisRaceID, SKILL_STEAL );
if( race_attack == thisRaceID && skill_steal > 0 && !Hexed( client, false ) && !W3HasImmunity( client, Immunity_Skills ) )
{
if( GetRandomFloat( 0.0, 1.0 ) <= 0.30 )
{
new stolen = StealMoney[skill_steal];

new dec_money = GetMoney( victim ) - stolen;
new inc_money = GetMoney( client ) + stolen;

if( dec_money < 0 ) dec_money = 0;
if( inc_money > 16000 ) inc_money = 16000;

SetMoney( victim, dec_money );
SetMoney( client, inc_money );

W3MsgStoleMoney( victim, client, StealMoney[skill_steal] );
W3FlashScreen( client, RGBA_COLOR_BLUE );
}
}

new skill_evade = War3_GetSkillLevel( victim, thisRaceID, SKILL_EVADE );
if( race_victim == thisRaceID && skill_evade > 0 && !Hexed( victim, false ) && !W3HasImmunity( client, Immunity_Skills ) )
{
if( GetRandomInt( RandMin, RandMax[skill_evade] ) <= 10 )
{
W3FlashScreen( victim, RGBA_COLOR_BLUE );

War3_DamageModPercent( 0.0 );

W3MsgEvaded( victim, client );
}
}
}
}
}

Как бы понятно, что в этом коде присутствует иммунитет от SKILL_STEAL и SKILL_EVADE. Про второй скилл мне трудно сказать, но от SKILL_STEAL иммунитет не работает. Деньги вычитаются как по расписанию. Так же у расы The Risen (Зомби) не работае иммунитет от заражения. Может что-то поменялось в написании фунций или ещё чего? Или в коде здесь что-то не так? Не могу разобраться.

4
Прежде всего, надо отредактировать код в файле расы.
Откройте файл <ваша_раса>.sp текстовым редактором.
Добавьте в функцию public OnPluginStart() следующую строку:

Code: [Select]
LoadTranslations("w3s.race.<Краткое_название_расы>.phrases");
Где <Краткое_название_расы> - имя вашей расы. Например: paladin => w3s.race.paladin.phrases

После этого, вам необходимо изменить несколько параметров в public OnWar3LoadRaceOrItemOrdered2()

Пример без перевода:

Code: [Select]
thisRaceID=War3_CreateNewRace("Полное_название_расы","Краткое_название_расы");
SKILL_DEFENSIVE=War3_AddRaceSkill(thisRaceID,"Название_скила1","Описание_скила1",false,4);
SKILL_OFFENSIVE=War3_AddRaceSkill(thisRaceID,"Название_скила2","Описание_скила2",false,4);
SKILL_HEALING=War3_AddRaceSkill(thisRaceID,"Название_скила3","Описание_скила3",false,4);
ULT_OVERDRIVE=War3_AddRaceSkill(thisRaceID,"Название_скила4","Описание_скила4",true,4);
War3_CreateRaceEnd(thisRaceID);

Должно выглядеть так:

Quote
thisRaceID=War3_CreateNewRaceT("Краткое_название_расы");
SKILL_DEFENSIVE=War3_AddRaceSkillT(thisRaceID,"Название_скила1",false,4);
SKILL_OFFENSIVE=War3_AddRaceSkillT(thisRaceID,"Название_скила2",false,4);
SKILL_HEALING=War3_AddRaceSkillT(thisRaceID,"Название_скила3",false,4);
ULT_OVERDRIVE=War3_AddRaceSkillT(thisRaceID,"Название_скила4",true,4);
War3_CreateRaceEnd(thisRaceID);

Обратите внимание на литеру Т в конце War3_AddRaceSkill. Только с этой литерой перевод будет работать.
Удалите "Полное_название_расы". В нём нет необходимости.
"Краткое_название_расы" и "Название_скила" могут содержать только латинские буквы!
Вы должны удалить "Описание_скила", т.к. оно будет добавлено позже в файле перевода.
"Название_скила" должно быть без пробелов!

Готовый к переводу пример:
Quote
       thisRaceID=War3_CreateNewRaceT("paladin");
        SKILL_DEFENSIVE=War3_AddRaceSkillT(thisRaceID,"DefensiveAura",false,4);
        SKILL_OFFENSIVE=War3_AddRaceSkillT(thisRaceID,"OffensiveAura",false,4);
        SKILL_HEALING=War3_AddRaceSkillT(thisRaceID,"HealingAura",false,4);
        ULT_OVERDRIVE=War3_AddRaceSkillT(thisRaceID,"AuraOverdrive",true,4);
        War3_CreateRaceEnd(thisRaceID);

Сохраните файл...

Теперь создадим текстовой файл и добавим перевод.
Пример перевода:

Code: [Select]
"Phrases"
{
//<shortname>_RaceName
"<Краткое_название_расы>_RaceName"
{
"en" "Полное_название_расы"
}

//skills:
//<shortname>_skill_<SkillNameIdentifier> for the skill name
//<shortname>_skill_<SkillNameIdentifier>_desc for the skill description
"<Краткое_название_расы>_skill_<Название_скила1>"
{
"en" "Название скила 1"
}
"<Краткое_название_расы>_skill_<Название_скила1>_desc"
{
"en" "Описание скила 1"
}

"<Краткое_название_расы>_skill_<Название_скила2>"
{
"en" "Название скила 2"
}
"<Краткое_название_расы>_skill_<Название_скила2>_desc"
{
"en" "Описание скила 2"
}

"<Краткое_название_расы>_skill_<Название_скила3>"
{
"en" "Название скила 3"
}
"<Краткое_название_расы>_skill_<Название_скила3>_desc"
{
"en" "Описание скила 3"
}

"<Краткое_название_расы>_skill_<Название_скила4>"
{
"en" "Название скила 4"
}
"<Краткое_название_расы>_skill_<Название_скила4>_desc"
{
"en" "Описание скила 4"
}
}

"<Краткое_название_расы>_RaceName" - для имени расы. Например: "paladin_RaceName"
"<Краткое_название_расы>_skill_<Название_скила1>" - для названия скила. Например: "paladin_skill_DefensiveAura"
"<Краткое_название_расы>_skill_<Название_скила1>_desc" - для описания скила. Например: "paladin_skill_DefensiveAura_desc"

Если вы хотите добавить другой язык, замените "en" на ваш язык (например "ru") и переведите названия с описаниями.

Как это выглядит:
Английский вариант перевода:
Code: [Select]
"Phrases"
{
//<shortname>_RaceName
"paladin_RaceName"
{
"en" "Paladin[RoC]"
}

//skills:
//<shortname>_skill_<SkillNameIdentifier> for the skill name
//<shortname>_skill_<SkillNameIdentifier>_desc for the skill description
"paladin_skill_DefensiveAura"
{
"en" "Defensive Aura"
}
"paladin_skill_DefensiveAura_desc"
{
"en" "Give your teammates extra armor."
}

"paladin_skill_OffensiveAura"
{
"en" "Offensive Aura"
}
"paladin_skill_OffensiveAura_desc"
{
"en" "Give your teammates extra damage."
}

"paladin_skill_HealingAura"
{
"en" "Healing Aura"
}
"paladin_skill_HealingAura_desc"
{
"en" "Give your teammates passive regeneration."
}

"paladin_skill_AuraOverdrive"
{
"en" "Aura Overdrive"
}
"paladin_skill_AuraOverdrive_desc"
{
"en" "Activate all auras at once."
}

}

Русский вариант перевода:
Code: [Select]
"Phrases"
{
//<shortname>_RaceName
"paladin_RaceName"
{
"ru" "Паладин"
}

//skills:
//<shortname>_skill_<SkillNameIdentifier> for the skill name
//<shortname>_skill_<SkillNameIdentifier>_desc for the skill description
"paladin_skill_DefensiveAura"
{
"ru" "Защитная аура"
}
"paladin_skill_DefensiveAura_desc"
{
"ru" "Уменьшает получаемый союзниками урон. Вы получаете половину эффекта."
}

"paladin_skill_OffensiveAura"
{
"ru" "Атакующая Аура"
}
"paladin_skill_OffensiveAura_desc"
{
"ru" "Увеличивает урон союзников. Вы получаете половину эффекта."
}

"paladin_skill_HealingAura"
{
"ru" "Лечащая Аура"
}
"paladin_skill_HealingAura_desc"
{
"ru" "Лечит союзников. Вы получаете половину эффекта."
}

"paladin_skill_AuraOverdrive"
{
"ru" "Сверх Аура"
}
"paladin_skill_AuraOverdrive_desc"
{
"ru" "Включает одновременно все Ауры. Вы получаете весь эффект."
}

}

Наконец, сохраните свой файл перевода. Если вы переводили на русский, не забудьте, что кодировка должна быть UTF8 - без BOM.
Файл перевода должен иметь имя w3s.race.<Краткое_название_расы>.phrases.txt (например: w3s.race.paladin.phrases.txt)

Думаю, это всё...
Скомпилируйте файл расы, загрузите его на сервер и поместите файл перевода в папку ..translations/ru/


Перевод урока rostex - [How To] Add translation in custom race

5
Прошу помощи у знающих людей, так как своего ума ещё не нарастил :D.
У расы Strider Hiryu во время работы абилити совершается полёт, во время которого он становится невидимым и оружие должно сменятся на нож. А после завершения абилити, оружие должно возвращаться. И вот именно в этой смене загвоздка. В коде это реализовано так:
Code: [Select]
//Объявлены глобальные переменные
new String:Temp1[MAXPLAYERS][32], String:Temp2[MAXPLAYERS][32];

//Далее в коде абилити при нажатии кнопки
...
new wep1 = GetPlayerWeaponSlot( client, CS_SLOT_PRIMARY );
new wep2 = GetPlayerWeaponSlot( client, CS_SLOT_SECONDARY );
new wep3 = GetPlayerWeaponSlot( client, 2 );

EquipPlayerWeapon( client, wep3 );

if( IsValidEdict( wep1 ) )
GetEdictClassname( wep1, Temp1[client], 32 );

if( IsValidEdict( wep2 ) )
GetEdictClassname( wep2, Temp2[client], 32 );

if( IsValidEdict( wep1 ) )
UTIL_Remove( wep1 );

if( IsValidEdict( wep2 ) )
UTIL_Remove( wep2 );

War3_WeaponRestrictTo( client, thisRaceID, "weapon_knife" );
...

//Далее в коде абилити при отпускании кнопки
...
GivePlayerItem( client, Temp1[client] );
GivePlayerItem( client, Temp2[client] );
...

Загвоздка в том, что new wep3 = GetPlayerWeaponSlot( client, 2 ); не работает, т.к. слот 2 в cstrike.inc никак не обозначен и вызывает ошибку. Я закомментировал строки new wep3 = GetPlayerWeaponSlot( client, 2 ); и EquipPlayerWeapon( client, wep3 );, но эффекта не достиг. Кроме того, даже выбросив оружие во время игры до включения абилити, после завершения абилити оно возвращается. Так ведь можно сбросить кому-то авп, включить абилку и получить себе новую бесплатно :D. Подскажите, как возможно с этим справиться?

6
War3: Source - Multilingual / [Russian] sm_beacon
« on: October 18, 2011, 04:46:23 AM »
В одной из рас для подсветки игрока маяком используется следующая строка:
Code: [Select]
ServerCommand( "sm_beacon #%d 1", GetClientUserId( victim ) );Как я понимаю, sm_beacon вешает маяк на игрока и выдаёт сообщение в чате, что Админ повесил маяк на игроке Х. Есть ли возможность не выводить такое сообщение в чате, чтобы не вводить игроков в заблуждение?

Pages: [1]