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.


Messages - Arturius

Pages: [1] 2 3 ... 7
1
Мне кажется, у меня с Райденом таких ошибок не возникало. Попробуйте.

2
Есть у меня на сервере раса "Пьяный нищий", все норм работает только есть но. Слишком много ворует золото. Как можно убавить его воровство до 1-го золото?
Раса ниже.
я бы, рекомендовал просто уменьшить шанс воровства в 2-ва раза.

new Float:Begchance[]={0.0,0.2,0.4,0.6,0.8};=>new Float:Begchance[]={0.0,0.1,0.2,0.4,0.4};

Солидарен. Так проще всего. Конечно, можно извратиться и сделать ограничение воровства до 1 золотого за раунд, и даже по одному с каждого в кого попадёт. Но стоит ли результат таких стараний?

3
Я совершенно не умею работать с оффсетами и даже приблизительно не имею понятия куда их втыкать ???.

4
Old Bugs / Re: HP Buff does not work correctly
« on: March 19, 2012, 02:13:03 AM »
But it is really necessary to use the timer for OnWar3EventSpawn? Can make it easier?
Code: [Select]
public OnWar3EventSpawn(client){
ORIGINALHP[client]=GetClientHealth(client);
if(ValidPlayer(client,true)){
new hpadd=W3GetBuffSumInt(client,iAdditionalMaxHealth);
SetEntityHealth(client,ORIGINALHP[client]+hpadd);
War3_SetMaxHP_INTERNAL(client,ORIGINALHP[client]+hpadd);
LastDamageTime[client]=GetEngineTime()-100.0;
}
}

I have checked up this variant. Here is how it works:
Quote
// Console messages
// When player spawn with periapth of health

Start OnWar3EventSpawn...
Get ORIGINALHP: 100
Get hpadd: 50
Set SetEntityHealth: 150
Set War3_SetMaxHP_INTERNAL: 150
End...

Start OnWar3Event: event==OnBuffChanged && W3GetVar(EventArg1)==iAdditionalMaxHealth && ValidPlayer(client,true)
OnWar3Event: mytimer2[client]==INVALID_HANDLE
Start CreateTimer(0.1,CheckHPBuffChange,client)...
OnWar3Event: mytimer2[client]!=INVALID_HANDLE
Start OnWar3Event: event==OnBuffChanged && W3GetVar(EventArg1)==iAdditionalMaxHealth && ValidPlayer(client,true)
End OnWar3Event: mytimer2[client]!=INVALID_HANDLE
Start CheckHPBuffChange...
Set mytimer2[client]=INVALID_HANDLE
Get oldmaxhp in CheckHPBuffChange: 150
Get hpadd in CheckHPBuffChange: 50
Get newmaxhp in CheckHPBuffChange: 150
Set War3_SetMaxHP_INTERNAL in CheckHPBuffChange: 150
Get newhp in CheckHPBuffChange: 150
Set SetEntityHealth in CheckHPBuffChange: 150
End CheckHPBuffChange...


5
Old Bugs / Re: HP Buff does not work correctly
« on: March 18, 2012, 12:41:09 PM »
are you sure smaller timer values forces triggering in that order?
Yes, I`m sure. Tested on my local server and on 195.98.160.3:27032. With Your latest change work fine.

6
Old Bugs / Re: HP Buff does not work correctly
« on: March 18, 2012, 07:00:46 AM »
To find out a problem essence, I had to check up each step.
Code: [Select]
public OnWar3EventSpawn(client){
PrintToConsole(client,"Start OnWar3EventSpawn...");
ORIGINALHP[client]=GetClientHealth(client);
PrintToConsole(client,"Get ORIGINALHP: %i",ORIGINALHP[client]);
if(mytimer[client]!=INVALID_HANDLE){
CloseHandle(mytimer[client]);
}
mytimer[client]=CreateTimer(0.1,CheckHP,client);
PrintToConsole(client,"Start CreateTimer(0.1,CheckHP,client)...");
}

public Action:CheckHP(Handle:h,any:client){
PrintToConsole(client,"Start CheckHP...");
mytimer[client]=INVALID_HANDLE;
if(ValidPlayer(client,true)){
new hpadd=W3GetBuffSumInt(client,iAdditionalMaxHealth);
PrintToConsole(client,"Get hpadd in CheckHP: %i",hpadd);
new curhp=GetClientHealth(client);
PrintToConsole(client,"Get curhp in CheckHP: %i",curhp);
SetEntityHealth(client,curhp+hpadd);
PrintToConsole(client,"Set SetEntityHealth in CheckHP: %i",curhp+hpadd);
War3_SetMaxHP_INTERNAL(client,ORIGINALHP[client]+hpadd);
PrintToConsole(client,"Set War3_SetMaxHP_INTERNAL in CheckHP: %i",ORIGINALHP[client]+hpadd);
PrintToConsole(client,"End CheckHP...");
LastDamageTime[client]=GetEngineTime()-100.0;
}
}

public OnWar3Event(W3EVENT:event,client){
if(event==OnBuffChanged)
{
if(W3GetVar(EventArg1)==iAdditionalMaxHealth&&ValidPlayer(client,true)){
PrintToConsole(client,"Start OnWar3Event: event==OnBuffChanged && W3GetVar(EventArg1)==iAdditionalMaxHealth && ValidPlayer(client,true)");
if(mytimer2[client]==INVALID_HANDLE){
PrintToConsole(client,"OnWar3Event: mytimer2[client]==INVALID_HANDLE");
mytimer2[client]=CreateTimer(0.1,CheckHPBuffChange,client);
PrintToConsole(client,"Start CreateTimer(0.1,CheckHPBuffChange,client)...");
PrintToConsole(client,"OnWar3Event: mytimer2[client]!=INVALID_HANDLE");
}
else
{
PrintToConsole(client,"End OnWar3Event: mytimer2[client]!=INVALID_HANDLE");
}
}
}
}

public Action:CheckHPBuffChange(Handle:h,any:client){
PrintToConsole(client,"Start CheckHPBuffChange...");
if(ValidPlayer(client,true)){
mytimer2[client]=INVALID_HANDLE;
PrintToConsole(client,"Set mytimer2[client]=INVALID_HANDLE");
new oldmaxhp=War3_GetMaxHP(client);
PrintToConsole(client,"Get oldmaxhp in CheckHPBuffChange: %i",oldmaxhp);
new hpadd=W3GetBuffSumInt(client,iAdditionalMaxHealth);
PrintToConsole(client,"Get hpadd in CheckHPBuffChange: %i",hpadd);
new newmaxhp=ORIGINALHP[client]+hpadd;
PrintToConsole(client,"Get newmaxhp in CheckHPBuffChange: %i",newmaxhp);
War3_SetMaxHP_INTERNAL(client,newmaxhp);
PrintToConsole(client,"Set War3_SetMaxHP_INTERNAL in CheckHPBuffChange: %i",newmaxhp);
new newhp=GetClientHealth(client)+newmaxhp-oldmaxhp;
PrintToConsole(client,"Get newhp in CheckHPBuffChange: %i",newhp);
if(newhp<1){
newhp=1;
}
SetEntityHealth(client,newhp);
PrintToConsole(client,"Set SetEntityHealth in CheckHPBuffChange: %i",newhp);
PrintToConsole(client,"End CheckHPBuffChange...");
}
}

I have found out that CheckHPBuffChange is calculated earlier than CheckHP. Here is how it works:
Quote
// Console messages
// When player put in server and first spawn
Start OnWar3EventSpawn...
Get ORIGINALHP: 100
Start CreateTimer(0.1,CheckHP,client)...
Start CheckHP...
Get hpadd in CheckHP: 0
Get curhp in CheckHP: 100
Set SetEntityHealth in CheckHP: 100
Set War3_SetMaxHP_INTERNAL in CheckHP: 100
End CheckHP...



// When player spawn second time, without periapth of health
Start OnWar3EventSpawn...
Get ORIGINALHP: 100
Start CreateTimer(0.1,CheckHP,client)...

Start OnWar3Event: event==OnBuffChanged && W3GetVar(EventArg1)==iAdditionalMaxHealth && ValidPlayer(client,true)
OnWar3Event: mytimer2[client]==INVALID_HANDLE
Start CreateTimer(0.1,CheckHPBuffChange,client)...
OnWar3Event: mytimer2[client]!=INVALID_HANDLE
Start CheckHPBuffChange...
Set mytimer2[client]=INVALID_HANDLE
Get oldmaxhp in CheckHPBuffChange: 100
Get hpadd in CheckHPBuffChange: 0
Get newmaxhp in CheckHPBuffChange: 100
Set War3_SetMaxHP_INTERNAL in CheckHPBuffChange: 100
Get newhp in CheckHPBuffChange: 100
Set SetEntityHealth in CheckHPBuffChange: 100
End CheckHPBuffChange...

Start CheckHP...
Get hpadd in CheckHP: 0
Get curhp in CheckHP: 100
Set SetEntityHealth in CheckHP: 100
Set War3_SetMaxHP_INTERNAL in CheckHP: 100
End CheckHP...



// When player buying periapth of health after spawn
Start OnWar3Event: event==OnBuffChanged && W3GetVar(EventArg1)==iAdditionalMaxHealth && ValidPlayer(client,true)
OnWar3Event: mytimer2[client]==INVALID_HANDLE
Start CreateTimer(0.1,CheckHPBuffChange,client)...
OnWar3Event: mytimer2[client]!=INVALID_HANDLE
Start CheckHPBuffChange...
Set mytimer2[client]=INVALID_HANDLE
Get oldmaxhp in CheckHPBuffChange: 100
Get hpadd in CheckHPBuffChange: 50
Get newmaxhp in CheckHPBuffChange: 150
Set War3_SetMaxHP_INTERNAL in CheckHPBuffChange: 150
Get newhp in CheckHPBuffChange: 150
Set SetEntityHealth in CheckHPBuffChange: 150
End CheckHPBuffChange...



// When player spawn with periapth of health
Start OnWar3EventSpawn...
Get ORIGINALHP: 100
Start CreateTimer(0.1,CheckHP,client)...

Start OnWar3Event: event==OnBuffChanged && W3GetVar(EventArg1)==iAdditionalMaxHealth && ValidPlayer(client,true)
OnWar3Event: mytimer2[client]==INVALID_HANDLE
Start CreateTimer(0.1,CheckHPBuffChange,client)...
OnWar3Event: mytimer2[client]!=INVALID_HANDLE
Start OnWar3Event: event==OnBuffChanged && W3GetVar(EventArg1)==iAdditionalMaxHealth && ValidPlayer(client,true)
End OnWar3Event: mytimer2[client]!=INVALID_HANDLE
Start CheckHPBuffChange...
Set mytimer2[client]=INVALID_HANDLE
Get oldmaxhp in CheckHPBuffChange: 100
Get hpadd in CheckHPBuffChange: 50
Get newmaxhp in CheckHPBuffChange: 150
Set War3_SetMaxHP_INTERNAL in CheckHPBuffChange: 150
Get newhp in CheckHPBuffChange: 150
Set SetEntityHealth in CheckHPBuffChange: 150
End CheckHPBuffChange...

Start CheckHP...
Get hpadd in CheckHP: 50
Get curhp in CheckHP: 150
Set SetEntityHealth in CheckHP: 200   //wrong result
Set War3_SetMaxHP_INTERNAL in CheckHP: 150
End CheckHP...


The easiest way to fix that - set smaller value of the first timer.
Code: [Select]
mytimer[client]=CreateTimer(0.05,CheckHP,client);
Quote
// Console messages
// When player spawn with periapth of health
Start OnWar3EventSpawn...
Get ORIGINALHP: 100
Start CreateTimer(0.05,CheckHP,client)...

Start OnWar3Event: event==OnBuffChanged && W3GetVar(EventArg1)==iAdditionalMaxHealth && ValidPlayer(client,true)
OnWar3Event: mytimer2[client]==INVALID_HANDLE
Start CreateTimer(0.1,CheckHPBuffChange,client)...
OnWar3Event: mytimer2[client]!=INVALID_HANDLE
Start OnWar3Event: event==OnBuffChanged && W3GetVar(EventArg1)==iAdditionalMaxHealth && ValidPlayer(client,true)
End OnWar3Event: mytimer2[client]!=INVALID_HANDLE

Start CheckHP...
Get hpadd in CheckHP: 50
Get curhp in CheckHP: 100
Set SetEntityHealth in CheckHP: 150
Set War3_SetMaxHP_INTERNAL in CheckHP: 150
End CheckHP...

Start CheckHPBuffChange...
Set mytimer2[client]=INVALID_HANDLE
Get oldmaxhp in CheckHPBuffChange: 150
Get hpadd in CheckHPBuffChange: 50
Get newmaxhp in CheckHPBuffChange: 150
Set War3_SetMaxHP_INTERNAL in CheckHPBuffChange: 150
Get newhp in CheckHPBuffChange: 150
Set SetEntityHealth in CheckHPBuffChange: 150
End CheckHPBuffChange...


7
Old Bugs / Re: HP Buff does not work correctly
« on: March 10, 2012, 03:12:58 AM »
Quote
//War3Source_Engine_BuffMaxHP.sp


new ORIGINALHP[MAXPLAYERSCUSTOM];
public OnWar3EventSpawn(client){
   ORIGINALHP[client]=GetClientHealth(client);
   PrintToConsole(client,"ORIGINALHP: %i",ORIGINALHP[client]);  //first spawn without periapth of health 100hp /respawn with periapth of health 100hp.
   //if(!IsFakeClient(client))
     //   DP("SPAWN set oroginal %d",ORIGINALHP[client]);
 
   
//   if(W3GetPlayerProp(client,bStatefulSpawn)){
   if(mytimer[client]!=INVALID_HANDLE){
      CloseHandle(mytimer[client]);
   }
   mytimer[client]=CreateTimer(0.1,CheckHP,client);
   //DP("TIMERCREATE");
//   }
}
public Action:CheckHP(Handle:h,any:client){
//DP("TIMERHIT");
   mytimer[client]=INVALID_HANDLE;
   if(ValidPlayer(client,true)){
      new hpadd=W3GetBuffSumInt(client,iAdditionalMaxHealth);
      //if(!IsFakeClient(client))
      //DP("oroginal %d, additonal %d",ORIGINALHP[client],hpadd);
      new curhp=GetClientHealth(client);
      PrintToConsole(client,"curhp: %i",curhp);  //first spawn without periapth of health 100hp /respawn with periapth of health 150hp.
      SetEntityHealth(client,curhp+hpadd);
      War3_SetMaxHP_INTERNAL(client,ORIGINALHP[client]+hpadd);
      //if(!IsFakeClient(client))
      //DP("was curhp %d, set to %d",curhp,GetClientHealth(client));
      LastDamageTime[client]=GetEngineTime()-100.0;
   }
}

8
Всегда бы так файл расы прикладывал, было бы проще. Я же не могу откомпилировать часть кода ;D. Там пустячные ошибочки, мог бы и сам догадаться как исправить.

9
В первом случае можно поделить так:
Code: [Select]
public OnW3TakeDmgBulletPre(victim,attacker,Float:damage)
{
if(IS_PLAYER(victim)&&IS_PLAYER(attacker)&&victim>0&&attacker>0&&attacker!=victim){
new vteam=GetClientTeam(victim);
new ateam=GetClientTeam(attacker);

if(vteam!=ateam){
new race_attacker=War3_GetRace(attacker);
new race_victim=War3_GetRace(victim);

if(race_victim==thisRaceID &&bIsActive[victim]){
if(!W3HasImmunity(attacker,Immunity_Ultimates))
{
War3_DamageModPercent(0.0);
PrintToConsole(attacker, "Damage Reduced against SpiritWalker - Ethreal");
PrintToConsole(victim, "Damage Reduced by SpiritWalker - Ethreal");
}
else
{
War3_DamageModPercent(0.5);
PrintToConsole(attacker, "Damage Reduced half against SpiritWalker");
PrintToConsole(victim, "Damage Reduced half by SpiritWalker");
}
}
}
}
}

public OnW3TakeDmgBullet(victim,attacker,Float:damage)
{
if(IS_PLAYER(victim)&&IS_PLAYER(attacker)&&victim>0&&attacker>0&&attacker!=victim){
new vteam=GetClientTeam(victim);
new ateam=GetClientTeam(attacker);

if(vteam!=ateam){
new race_attacker=War3_GetRace(attacker);
new race_victim=War3_GetRace(victim);

if(race_attacker==thisRaceID &&!bIsHit[victim]){
new skill_disenchant=War3_GetSkillLevel(attacker,thisRaceID,SKILL_DISENCHANT);
new Float:attackerPos[3];
new Float:victimPos[3];
GetClientAbsOrigin(victim,victimPos);
GetClientAbsOrigin(attacker,attackerPos);
if(GetVectorDistance(victimPos,attackerPos)<DisenchRad[skill_disenchant]){
bIsHit[victim]=true;
War3_SetBuff(victim,bBuffDenyAll,thisRaceID,true);
War3_DealDamage(victim,25,attacker,DMG_BULLET,"Disenchant");
PrintHintText(victim, "Your buffs have been destroyed");
PrintHintText(attacker, "You've disenchanted your enemy");
EmitSoundToAll(disenchant_sound,victim);
}
}
}
}
}

Во втором, проще заменить War3_DealDamage на War3_DamageModPercent:
Code: [Select]
public OnW3TakeDmgAllPre(victim,attacker,Float:damage)
{
if(IS_PLAYER(victim)&&IS_PLAYER(attacker)&&victim>0&&attacker>0&&attacker!=victim){
new vteam=GetClientTeam(victim);
new ateam=GetClientTeam(attacker);
new skill_spirit=War3_GetSkillLevel(victim,thisRaceID,SKILL_SPIRIT);
new ownerteam=GetClientTeam(victim);
new Float:allyPos[3];
new Float:clientPos[3];

GetClientAbsOrigin(victim,clientPos);
if(vteam!=ateam){
new race_victim=War3_GetRace(victim);
new players[MAXPLAYERS]=0;
if(race_victim==thisRaceID&&!bIsActive[victim]){  
if(skill_spirit>0){
if(War3_SkillNotInCooldown(victim,thisRaceID,SKILL_SPIRIT,true)){
for (new ally=1;ally<=MaxClients;ally++){
if(ValidPlayer(ally,true)&& GetClientTeam(ally)==ownerteam&&ally!=victim){
GetClientAbsOrigin(ally,allyPos);
if(GetVectorDistance(clientPos,allyPos)<LinkRad[skill_spirit]){
if(War3_GetRace(ally)!=War3_GetRaceIDByShortname("wisp")&&War3_GetRace(ally)!=thisRaceID){
if(players[victim]<4){
players[victim]++;
bInRange[ally]=true;
}
allyPos[2]+=35;
TE_SetupBeamPoints(allyPos,clientPos,BeamSprite,HaloSprite,0,1,1.0,10.0,5.0,0,1.0,{255,10,10,255},50);
TE_SendToAll();  
}
}
}
}
if(players[victim]>0){
new Float:newdamage=damage/(players[victim]+1);
if(newdamage<100){
War3_CooldownMGR(victim,1.0,thisRaceID,SKILL_SPIRIT,_,_);
for (new i=1;i<=MaxClients;i++){
if(bInRange){
War3_DamageModPercent((newdamage/100)+1.0);
bInRange=false;
EmitSoundToAll(link_sound,i);
}
}
switch (players[victim])
{
case 1:
War3_DamageModPercent(0.5);            
case 2:
War3_DamageModPercent(0.33);
case 3:
War3_DamageModPercent(0.25);
case 4:
War3_DamageModPercent(0.20);
}
PrintToConsole(attacker, "Damage Reduced against Spirit Link");
PrintToConsole(victim, "Damage Reduced by Spirit Link");
}
}
}
}
}
}
}
}
Правда я не уверен, что значение War3_DamageModPercent((newdamage/100)+1.0); должно быть именно таким.

10
Большинство ошибок, в том числе и те, которые ты приводил в расе Зевс, уже рассматривались в этой теме. Не поленись перечитать с начала.

11
вот исправленный Зевс.

12
Скрин от расы Zeus. Или выложи ошибки с Зерлингом, или выложи файл расы Zeus :)

13
Что-то вроде этого... Проверяй.
Code: [Select]
public OnW3TakeDmgBulletPre(victim,attacker,Float:damage)
{
if(IS_PLAYER(victim)&&IS_PLAYER(attacker)&&victim>0&&attacker>0&&attacker!=victim){
new vteam=GetClientTeam(victim);
new ateam=GetClientTeam(attacker);

if(vteam!=ateam){
new race_attacker=War3_GetRace(attacker);
new race_victim=War3_GetRace(victim);

if(race_attacker==thisRaceID){
if(SEFForm[attacker]==0){
new skill_brawl=War3_GetSkillLevel(attacker,thisRaceID,SKILL_BRAWL);

if(skill_brawl){
if(GetRandomFloat(0.0,1.0)<=0.1){
War3_DamageModPercent(BrawlDmg[skill_brawl]);
PrintHintText(attacker, "%T", "You deal extra damage", attacker);
}
}
}
}
if(race_victim==thisRaceID){
if(SEFForm[victim]==0){
new skill_brawl=War3_GetSkillLevel(victim,thisRaceID,SKILL_BRAWL);

if(skill_brawl){
if(GetRandomFloat(0.0,1.0)<=BrawlEvade[skill_brawl]){
War3_DamageModPercent(0.0);
PrintHintText(attacker, "%T", "evaded the attack", attacker);
PrintToConsole(attacker, "Damage Reduced against Brewmaster - Brawler");
PrintToConsole(victim, "Damage Reduced by Brewmaster - Brawler");
}
}
}
if(SEFForm[victim]==1){
if(!bCyclone[victim]){
bCyclone[victim]=true;
CreateTimer(5.0, cyclone, victim);
new Float:position[3];

GetClientAbsOrigin(victim, position);
position[2]+=10;
TE_SetupBeamRingPoint(position,0.0,200.0,BeamSprite,HaloSprite,0,15,0.3,20.0,3.0,{100,100,150,255},20,0);
TE_SendToAll();
GetClientAbsOrigin(victim,position);
TE_SetupBeamRingPoint(position, 20.0, 80.0,BeamSprite,BeamSprite, 0, 5, 2.6, 20.0, 0.0, {54,66,120,100}, 10,FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 40.0, 100.0,BeamSprite,BeamSprite, 0, 5, 2.4, 20.0, 0.0, {54,66,120,100}, 10,FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 60.0, 120.0,BeamSprite,BeamSprite, 0, 5, 2.2, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 80.0, 140.0,BeamSprite,BeamSprite, 0, 5, 2.0, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 100.0, 160.0,BeamSprite,BeamSprite, 0, 5, 1.8, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 120.0, 180.0,BeamSprite,BeamSprite, 0, 5, 1.6, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 140.0, 200.0,BeamSprite,BeamSprite, 0, 5, 1.4, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 160.0, 220.0,BeamSprite,BeamSprite, 0, 5, 1.2, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 180.0, 240.0,BeamSprite,BeamSprite, 0, 5, 1.0, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
for(new target=0;target<=MaxClients;target++){
if(ValidPlayer(target,true)){
new client_team=GetClientTeam(victim);
new target_team=GetClientTeam(target);

if(target_team!=client_team){
new Float:targetPos[3];
new Float:clientPos[3];

GetClientAbsOrigin(target, targetPos);
GetClientAbsOrigin(victim, clientPos);
if(!W3HasImmunity(target,Immunity_Skills)){
if(GetVectorDistance(targetPos,clientPos)<100.0){
new Float:velocity[3];

velocity[2]+=800.0;
SetEntDataVector(target,m_vecBaseVelocity,velocity,true);
CreateTimer(0.1,Tornado1,target);
CreateTimer(0.4,Tornado2,target);
}
}
}
}
}
}
}
}
if(bDrunk[attacker])
{
if(GetRandomFloat(0.0,1.0)<=HazeDrunk[attacker])
{
PrintHintText(attacker,"%T","You are drunk and miss",attacker);
War3_DamageModPercent(0.0);
PrintToConsole(attacker, "Damage Reduced against Brewmaster - Drunk");
PrintToConsole(victim, "Damage Reduced by Brewmaster - Drunk");
}
}
if(bTaunt[victim]){
War3_DamageModPercent(0.01);
PrintToConsole(attacker, "Damage Reduced against Brewmaster - Taunt");
PrintToConsole(victim, "Damage Reduced by Brewmaster - Taunt");
}
}
}
}

public OnW3TakeDmgBullet(victim,attacker,Float:damage)
{
if(IS_PLAYER(victim)&&IS_PLAYER(attacker)&&victim>0&&attacker>0&&attacker!=victim){
new vteam=GetClientTeam(victim);
new ateam=GetClientTeam(attacker);

if(vteam!=ateam){
new race_attacker=War3_GetRace(attacker);
if(race_attacker==thisRaceID){
if(SEFForm[attacker]==1){
PrintHintText(victim, "%T", "You've been dispelled!", victim);
War3_SetBuff(victim,bBuffDenyAll,thisRaceID,true);

if(bInvis[attacker]){
War3_DealDamage(victim,5,attacker,DMG_BULLET,"Windwalk");
bInvis[attacker]=false;
War3_SetBuff(attacker,fInvisibilitySkill,thisRaceID,1.0);
War3_SetBuff(attacker,fMaxSpeed,thisRaceID,1.2);
}

if(!bCyclone[attacker]){
bCyclone[attacker]=true;
CreateTimer(5.0, cyclone, attacker);
new Float:position[3];

GetClientAbsOrigin(attacker, position);
position[2]+=10;
TE_SetupBeamRingPoint(position,0.0,200.0,BeamSprite,HaloSprite,0,15,0.3,20.0,3.0,{100,100,150,255},20,0);
TE_SendToAll();
GetClientAbsOrigin(attacker,position);
TE_SetupBeamRingPoint(position, 20.0, 80.0,BeamSprite,BeamSprite, 0, 5, 2.6, 20.0, 0.0, {54,66,120,100}, 10,FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 40.0, 100.0,BeamSprite,BeamSprite, 0, 5, 2.4, 20.0, 0.0, {54,66,120,100}, 10,FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 60.0, 120.0,BeamSprite,BeamSprite, 0, 5, 2.2, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 80.0, 140.0,BeamSprite,BeamSprite, 0, 5, 2.0, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 100.0, 160.0,BeamSprite,BeamSprite, 0, 5, 1.8, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 120.0, 180.0,BeamSprite,BeamSprite, 0, 5, 1.6, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 140.0, 200.0,BeamSprite,BeamSprite, 0, 5, 1.4, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 160.0, 220.0,BeamSprite,BeamSprite, 0, 5, 1.2, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
position[2]+=20.0;
TE_SetupBeamRingPoint(position, 180.0, 240.0,BeamSprite,BeamSprite, 0, 5, 1.0, 20.0, 0.0, {54,66,120,100}, 10, FBEAM_HALOBEAM);
TE_SendToAll();
for(new target=0;target<=MaxClients;target++){
if(ValidPlayer(target,true)){
new client_team=GetClientTeam(attacker);
new target_team=GetClientTeam(target);

if(target_team!=client_team){
new Float:targetPos[3];
new Float:clientPos[3];

GetClientAbsOrigin(target, targetPos);
GetClientAbsOrigin(attacker, clientPos);
if(!W3HasImmunity(target,Immunity_Skills)){
if(GetVectorDistance(targetPos,clientPos)<100.0){
new Float:velocity[3];

velocity[2]+=800.0;
SetEntDataVector(target,m_vecBaseVelocity,velocity,true);
CreateTimer(0.1,Tornado1,target);
CreateTimer(0.4,Tornado2,target);
}
}
}
}
}
}
}
if(SEFForm[attacker]==2){
if(GetRandomFloat(0.0,1.0)<=0.2){
PrintHintText(attacker, "%T", "You deal extra damage", attacker);
War3_DealDamage(victim,4,attacker,DMG_BULLET,"Extra Damage");
}
}
}
if(bTaunt[victim]){
War3_DealDamage(Tauntby[victim],20,attacker,DMG_BULLET,"Extra Damage");
}
}
}
}

14
Я тут покопался у себя в загашнике и нашёл эту расу, только без перевода. При компилировании не ругается. Попробуй её.

15
Небольшой пакет рас, исправленных и с переводом, можно найти в теме [Russian] Помощь в обновлении/исправлении рас.
Часть уроков по созданию рас есть в разделе Tutorials. Всё на английском. А без знания хотя бы базового английского будет очень трудно разобраться.
Ну, и часть вопросов, связанных с программированием, можно найти в разделе War3: Source - Multilingual и по всему форуму.

16
Вроде так:
Code: [Select]
public OnW3TakeDmgBulletPre(victim,attacker,Float:damage){
if(ValidPlayer(victim,true)&&ValidPlayer(attacker,false)&&GetClientTeam(victim)!=GetClientTeam(attacker))
{
if(War3_GetRace(victim)==thisRaceID)
{
// Apply armor to victims
new skill = War3_GetSkillLevel(victim,thisRaceID,SKILL_WARCRY);
War3_DamageModPercent(WarcryArmor[skill]);
}
if(War3_GetRace(attacker)==thisRaceID)
{
if(bStrengthActivated[attacker])
{
// GODS STRENGTH!
new skill = War3_GetSkillLevel(attacker,thisRaceID,ULT_STRENGTH);
War3_DamageModPercent(GodsStrength[skill]);
}
}
}
}

public OnW3TakeDmgBullet(victim,attacker,Float:damage){
if(ValidPlayer(victim,true)&&ValidPlayer(attacker,false)&&GetClientTeam(victim)!=GetClientTeam(attacker))
{
if(War3_GetRace(attacker)==thisRaceID)
{
new skill;
// Cleave
if(bStrengthActivated[attacker])
{
skill = War3_GetSkillLevel(attacker,thisRaceID,ULT_STRENGTH);
// For Cleave...
damage = damage * GodsStrength[skill];
}
skill = War3_GetSkillLevel(attacker,thisRaceID,SKILL_CLEAVE);
new splashdmg = RoundToFloor(damage * CleaveMultiplier[skill]);
// AWP? AWP!
if(splashdmg>40)
{
splashdmg = 40;
}
new Float:dist = CleaveDistance[skill];
new AttackerTeam = GetClientTeam(attacker);
new Float:OriginalVictimPos[3];
GetClientAbsOrigin(victim,OriginalVictimPos);
new Float:VictimPos[3];

if(attacker>0)
{
for(new i=1;i<=MaxClients;i++)
{
if(ValidPlayer(i,true)&&(GetClientTeam(i)!=AttackerTeam)&&(victim!=i))
{
GetClientAbsOrigin(i,VictimPos);
if(GetVectorDistance(OriginalVictimPos,VictimPos)<=dist)
{
War3_DealDamage(i,splashdmg,attacker,DMG_BURN,"greatcleave",W3DMGORIGIN_SKILL);
}
}
}
}
}
}
}
Проверяй...

17
Old Bugs / Re: iAdditionalMaxHealth buff
« on: February 27, 2012, 03:36:27 PM »
And with how much hp spawn Human?

18
Это ещё что... Я на этом коде бесшумности слепил шопитемс, так все игроки на одном сервере сидя бегали :D. Такая умора... ;D . Убрал потом к чертям.

19
Почему у Headcrab очень много здоровья?
Когда идёшь с бомбой, он её поставить не может. Пишет что должен быть на земле.
Много здоровья быть не должно. А вот бомбу поставить не может из-за беззвучных шагов. Как вариант, можно устроить танцы с бубнами на планте - зажать левую клавишу мыши и прыгать в присядку, пока бомба не начнёт ставиться. Сам так делал ;D.

20
Я далеко не силён в HookEvent и их работа для меня тёмный лес. Покопался по форумам на подобную тему, но окончательного решения так и не нашёл. Везде какие-то косяки или недоработки выскакивают. Но в одном файле, мне так кажется, есть нечто очень напоминающее работоспособный вариант. Правда он для ТФ2, но возможно и подойдёт. Приведу только интересующую нас часть кода, убрав всё лишнее:
Code: [Select]
#include <sourcemod>
#include <sdktools>

public Plugin:myinfo =
{
name = "[TF2] Be a Cacodemon",
author = "FlaminSarge [EDITED HEAVILY BY GAGE]",
description = "Become the Cacodemon from Doom",
version = PLUGIN_VERSION,
url = ""
}

public OnPluginStart()
{
AddNormalSoundHook(HorsemannSH);
}

public Action:HorsemannSH(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)
{
if (!IsValidClient(entity)) return Plugin_Continue;
if (strncmp(sample, "player/footsteps/", 17, false) == 0)
{
if (StrContains(sample, "1.wav", false) != -1 || StrContains(sample, "3.wav", false) != -1) sample = LEFTFOOT;
else if (StrContains(sample, "2.wav", false) != -1 || StrContains(sample, "4.wav", false) != -1) sample = RIGHTFOOT;
EmitSoundToAll(sample, entity, _, 150);
return Plugin_Changed;
}
return Plugin_Continue;
}
LEFTFOOT и RIGHTFOOT в коде нигде значений не заимствовали и откуда они взялись - осталось для меня загадкой. Но не это главное. Главное суть самой идеи. Я пробовал подобный код, только с выборкой клиентов из массива clients[64]. Что-то мудрёное и в результате не получилось как надо. Вот только мне не приходило в голову использовать в качестве клиента параметр &entity, как это сделано здесь. Можно попробовать поэкспериментировать. Если у кого-то что-то получится, прошу отписаться)

21
Разве что сделать простым способом: убрать звуки шагов и уменьшить скорость...
А ты знаешь простой способ убрать звуки шагов? :) Только не надо предлагать то, что ты вставил в хэдкраба. Да, звуки шагов убираются, но только потому, что игрок считается не на земле, со всеми вытекающими отсюда последствиями. Изменять MOVETYPE тоже не вариант. Вот я и подумал, нет ли вариантов поиграться с кнопками, типа SetEntProp(client, Prop_Data, "m_nButtons", IN_WALK); ?

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

23
Не думаю, что без использования особых текстур это возможно. Одно из свойств воды/стекла - преломление света. А как создать такое преломление без использования текстуры?

24
Да, для компиляции нужен haaaxfunctions.inc

25
... я писал что я сменил значение War3_DealDamage на
War3_DamageModPercent(i,splashdmg,attacker,DMG_BURN,"greatcleave",W3DMGORIGIN_SKILL);
и при компилировании идет ошибка именно на эту строку
вот тип ошибки: warning 213: tag mismatch.
error 092:number of aruments does not match definition
И правильная ошибка, потому что War3_DamageModPercent может иметь только один параметр, а у тебя их целых 6. Вот посмотри сам в коде, чуть выше, там есть целых две War3_DamageModPercent и всё с одним параметром.
Quote
War3_DamageModPercent(WarcryArmor[skill]);
....
War3_DamageModPercent(GodsStrength[skill]);

Pages: [1] 2 3 ... 7