Szerző Téma: Fade\'s damage behaviour V2.0  (Megtekintve 3229 alkalommal)

Nem elérhető Fade

  • 322
    • Profil megtekintése
Fade\'s damage behaviour V2.0
« Dátum: 2012. július 26. - 21:53:38 »
+17 Show voters
Üdv!
Eléggé régen publikáltam egy script-et Hurt Script néven (a neve rohadtul nem illett hozzá, ezért neveztem most át), és ez annak a frissítése lenne.
V2.0 változásai:
- Kocsiból kirepülés szebbítve, korrigálva.
- Gyalogosként egy új rendszer beiktatva.
- Bugjavítások.
- Enyhe optimalizáláson esett át a script.
- Felállás után is szédül a player egy kis ideig.
Features:
- Ha autóval nekimész egy falnak, vagy egyéb tárgynak, úgy hogy minimum 150-et sebez az autóba, akkor kirepülsz az autó haladási sebességével egyenlõ erõvel.
- Ha kirepülsz autóból, fekve landolsz, és 5 mp-ig nem tudsz felkelni, szédülsz.
- Ha gyalogosként 20, és 40 közötti sebzést kapsz, beszédülsz.
- Ha gyalogosként 40 fölött sebzõdsz kifekszel (fõleg esésre vonatkozik, de lövésre is, ez késõbb változik majd), 5mp-ig nem tudsz felkelni, szédülsz.
- Ha 10, vagy kevesebb életed van, véglegesen szédülsz, amig 10 fölé nem megy az életed.
Videó:
http://www.youtube.com/watch?v=u7Vtrpjd5u4
(a 10 életes dolog nem látható a videóban, de az eddig is benne volt a script-ben)
Letöltés [AMX + PWN]:
http://www.solidfiles.com/d/d333ff99a0/
Forráskód [PWN] (Optimized by Zsolesszka):
 
#include <a_samp>
 
new Float:vhealth[MAX_PLAYERS];
new Float:velX[MAX_PLAYERS], Float:velY[MAX_PLAYERS], Float:velZ[MAX_PLAYERS];
 
forward OnVehicleLoseHealth(playerid, vehid, health);
 
forward DrunkClean(playerid);
forward Refix(playerid);
forward FallSet(playerid);
forward Controllable(playerid);
 
public
        OnFilterScriptInit()
{
        print(\"\\n--------------------------------------\");
        print(\"     Damage behaviour v2.0 by Fade      \");
        print(\"--------------------------------------\\n\");
        return 1;
}
 
public
        OnPlayerStateChange(playerid, newstate, oldstate)
{
        if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
        {
                GetVehicleHealth(GetPlayerVehicleID(playerid), vhealth[playerid]);
        }
        return 1;
}
 
public
        OnVehicleRespray(playerid, vehicleid, color1, color2)
{
        GetVehicleHealth(vehicleid, vhealth[playerid]);
        return 1;
}
 
public
        OnVehicleLoseHealth(playerid, vehid, health)
{
        if(health >= 150)
        {
                new
                        Float:x,
                        Float:y,
                        Float:z,
                        Float:a;
                GetVehiclePos(vehid, x, y, z);
                GetVehicleZAngle(vehid, a);
                SetPlayerPos(playerid, x, y, z+2);
                GetVehicleVelocity(vehid, x, y, z);
                SetPlayerVelocity(playerid, velX[playerid], velY[playerid], z+1);
                SetPlayerDrunkLevel(playerid, 10000);
                SetTimerEx(\"FallSet\", 500, 0, \"i\", playerid);
        }
        if(health >= 500) SetPlayerHealth(playerid, 0);
        return 1;
}
 
public
        OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
        new
                Float:hp;
        GetPlayerHealth(playerid, hp);
        if(20 <= amount <= 40)
        {
                SetPlayerDrunkLevel(playerid, 25000);
                SetTimerEx(\"DrunkClean\", 5000, 0, \"i\", playerid);
        }
        else if(40 <= amount <= hp)
        {
                ClearAnimations(playerid);
                TogglePlayerControllable(playerid, 0);
                ApplyAnimation(playerid, \"PARACHUTE\", \"FALL_skyDive_DIE\",4,0,0,0,1,0);
                SetPlayerDrunkLevel(playerid, 10000);
                SetTimerEx(\"Refix\", 5000, 0, \"i\", playerid);
        }
        return 1;
}
 
public
        Refix(playerid)
{
        ApplyAnimation(playerid, \"ped\", \"getup_front\",4,0,0,0,0,0);
        SetTimerEx(\"Controllable\",1800,0,\"i\",playerid);
        SetTimerEx(\"DrunkClean\",3000,0,\"i\",playerid);
        return 1;
}
 
public Controllable(playerid) return TogglePlayerControllable(playerid, 1);
public FallSet(playerid) return SetPVarInt(playerid, \"FallFromVeh\", 1);
 
public
        DrunkClean(playerid)
{
        SetPlayerDrunkLevel(playerid,0);
        return 1;
}
 
public
        OnPlayerUpdate(playerid)
{
        new
                Float:hp;
        GetPlayerHealth(playerid, hp);
        if(hp >= 99) SetPlayerDrunkLevel(playerid, 0);
        else if(hp <= 10) SetPlayerDrunkLevel(playerid, 1000);
 
        new
                vehicleid = GetPlayerVehicleID(playerid);
        if(vehicleid)
        {
                GetVehicleHealth(vehicleid, hp);
                if(hp != vhealth[playerid])
                {
                        if(hp < vhealth[playerid]) OnVehicleLoseHealth(playerid, vehicleid, floatround(vhealth[playerid] - hp));
                        vhealth[playerid] = hp;
                }
                GetVehicleVelocity(vehicleid, velX[playerid], velY[playerid], velZ[playerid]);
        }
        if(GetPVarInt(playerid, \"FallFromVeh\") == 1)
        {
                new
                        Float:vX,
                        Float:vY,
                        Float:vZ;
                GetPlayerVelocity(playerid ,vX, vY, vZ);
                if(vZ == 0)
                {
                        ClearAnimations(playerid);
                        GetPlayerHealth(playerid, hp);
                        hp -= 30.0;
                        SetPlayerHealth(playerid, hp);
                        if(hp <= 0.0)
                        {
                                SetPlayerDrunkLevel(playerid, 0);
                        } else {
                                SetPlayerDrunkLevel(playerid, 10000);
                                SetTimerEx(\"Refix\", 5000, 0, \"i\", playerid);
                                TogglePlayerControllable(playerid, 0);
                                ApplyAnimation(playerid, \"PARACHUTE\", \"FALL_skyDive_DIE\",4,0,0,0,1,0);
                        }
                        SetPVarInt(playerid, \"FallFromVeh\", 0);
                }
        }
        return 1;
}

 
A GetXYInFrontOfPlayer függvény tesztnek volt berakva, nem kell vele foglalkozni, komiba raktam.
« Utoljára szerkesztve: 2012. augusztus 06. - 22:27:21 írta ɐʞzssǝlosz »

Nem elérhető nyE

  • 1745
    • Profil megtekintése
Fade\'s damage behaviour V2.0
« Válasz #1 Dátum: 2012. július 26. - 22:13:47 »
0 Show voters
Ez nagyon durva! Szép munka grat! ;)

Nem elérhető SnicK

  • 7521
    • Profil megtekintése
Fade\'s damage behaviour V2.0
« Válasz #2 Dátum: 2012. július 26. - 22:16:42 »
0 Show voters
Ez igen szép munka, grat! :)

Fade\'s damage behaviour V2.0
« Válasz #3 Dátum: 2012. július 26. - 22:21:17 »
0 Show voters
tetszik jó munka grat .d

Fade\'s damage behaviour V2.0
« Válasz #4 Dátum: 2012. július 26. - 22:34:39 »
0 Show voters
Grat.
Egy pár megjegyzés:
AZ OnPlayerUpdate alatti részt igen csak lehetne optimalizálni.
Az OnPlayerStateChange alatti rész se teljesen korrekt.
Az OnPlayerGetHealth meg nincs használva sehol sem.
Még egy:
Ennek a global változónak a használata meg felesleges. new Float:vhp;
Ha gondolod átírhatom egy általam optimalizált verzióra.
« Utoljára szerkesztve: 2012. július 26. - 22:39:09 írta ɐʞzssǝlosz »

Fade\'s damage behaviour V2.0
« Válasz #5 Dátum: 2012. július 26. - 22:52:50 »
0 Show voters
Szuper lett! Elismerésem.

SuBaRu

  • Vendég
Fade\'s damage behaviour V2.0
« Válasz #6 Dátum: 2012. július 26. - 22:53:51 »
0 Show voters
ez durva! jó munka grat!! 0.3d-re is jó????

Nem elérhető Fade

  • 322
    • Profil megtekintése
Fade\'s damage behaviour V2.0
« Válasz #7 Dátum: 2012. július 26. - 23:32:24 »
0 Show voters
Idézetet írta: ɐʞzssǝlosz date=1343334879\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"25061\" data-ipsquote-contentclass=\"forums_Topic
Grat.
Egy pár megjegyzés:
AZ OnPlayerUpdate alatti részt igen csak lehetne optimalizálni.
Az OnPlayerStateChange alatti rész se teljesen korrekt.
Az OnPlayerGetHealth meg nincs használva sehol sem.
Még egy:
Ennek a global változónak a használata meg felesleges. new Float:vhp;
Ha gondolod átírhatom egy általam optimalizált verzióra.
 
Megköszönném, mert elég gyorsan írtam így is, kevés idõm van ilyenekre... :D
Az OnPlayerGetHealth valószínüleg azért maradt benne (megint a siedtség), mert 0.3c eleje fele írhattam ezt, akkor ezt kellett használnom, de most már ugye van integrálva ilyen a szerverbe.
Ha átírtad, majd rakd ki ide, berakom fõpostba Zsolesszka edition néven... :)
Amúgy köszi mindenkinek!

Fade\'s damage behaviour V2.0
« Válasz #8 Dátum: 2012. július 27. - 00:03:26 »
+2 Show voters
Ok elvileg meg is lenne gondolkoztam OnVehicleDamageStatusUpdate alkalmazásán is de ahhoz tesztelni kellene. (Az egész a jármû élet csökkenésének megállapításának a ténye.)
Na mindegy a kód optimalizálásán alkottam kicsit, kivettem pár nem használt és felesleges dolgot, és átírtam pár vizsgálatokat. (az OnPlayerUpdate alatt változott talán a legtöbbet)
Lehetne még optimalizálni, de ahhoz több teszt és idõ legfõképp idõ kellene.  ;D
Jha igen nem kell a nevemet feltüntetni nem az én szkriptem.
Akkor a változat:
 
#include <a_samp>
new Float:vhealth[MAX_PLAYERS];
new Float:velX[MAX_PLAYERS], Float:velY[MAX_PLAYERS], Float:velZ[MAX_PLAYERS];
forward OnVehicleLoseHealth(playerid, vehid, health);
forward DrunkClean(playerid);
forward Refix(playerid);
forward FallSet(playerid);
forward Controllable(playerid);
public
OnFilterScriptInit()
{
print(\"\\n--------------------------------------\");
print(\"     Damage behaviour v2.0 by Fade      \");
print(\"--------------------------------------\\n\");
return 1;
}
public
OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
{
GetVehicleHealth(GetPlayerVehicleID(playerid), vhealth[playerid]);
}
return 1;
}
public
OnVehicleRespray(playerid, vehicleid, color1, color2)
{
GetVehicleHealth(vehicleid, vhealth[playerid]);
return 1;
}
public
OnVehicleLoseHealth(playerid, vehid, health)
{
if(health >= 150)
{
new
   Float:x,
   Float:y,
   Float:z,
   Float:a;
GetVehiclePos(vehid, x, y, z);
GetVehicleZAngle(vehid, a);
SetPlayerPos(playerid, x, y, z+2);
GetVehicleVelocity(vehid, x, y, z);
SetPlayerVelocity(playerid, velX[playerid], velY[playerid], z+1);
SetPlayerDrunkLevel(playerid, 10000);
SetTimerEx(\"FallSet\", 500, 0, \"i\", playerid);
}
if(health >= 500) SetPlayerHealth(playerid, 0);
return 1;
}
public
OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
new
Float:hp;
GetPlayerHealth(playerid, hp);
if(20 <= amount <= 40)
{
SetPlayerDrunkLevel(playerid, 25000);
SetTimerEx(\"DrunkClean\", 5000, 0, \"i\", playerid);
}
else if(40 <= amount <= hp)
{
ClearAnimations(playerid);
TogglePlayerControllable(playerid, 0);
ApplyAnimation(playerid, \"PARACHUTE\", \"FALL_skyDive_DIE\",4,0,0,0,1,0);
SetPlayerDrunkLevel(playerid, 10000);
SetTimerEx(\"Refix\", 5000, 0, \"i\", playerid);
}
return 1;
}
public
Refix(playerid)
{
ApplyAnimation(playerid, \"ped\", \"getup_front\",4,0,0,0,0,0);
SetTimerEx(\"Controllable\",1800,0,\"i\",playerid);
SetTimerEx(\"DrunkClean\",3000,0,\"i\",playerid);
return 1;
}
public Controllable(playerid) return TogglePlayerControllable(playerid, 1);
public FallSet(playerid) return SetPVarInt(playerid, \"FallFromVeh\", 1);
public
DrunkClean(playerid)
{
SetPlayerDrunkLevel(playerid,0);
return 1;
}
public
OnPlayerUpdate(playerid)
{
new
Float:hp;
GetPlayerHealth(playerid, hp);
if(hp >= 99) SetPlayerDrunkLevel(playerid, 0);
else if(hp <= 10) SetPlayerDrunkLevel(playerid, 1000);
new
vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid)
{
GetVehicleHealth(vehicleid, hp);
if(hp != vhealth[playerid])
{
   if(hp < vhealth[playerid]) OnVehicleLoseHealth(playerid, vehicleid, floatround(vhealth[playerid] - hp));
   vhealth[playerid] = hp;
}
GetVehicleVelocity(vehicleid, velX[playerid], velY[playerid], velZ[playerid]);
}
if(GetPVarInt(playerid, \"FallFromVeh\") == 1)
{
new
   Float:vX,
   Float:vY,
   Float:vZ;
GetPlayerVelocity(playerid ,vX, vY, vZ);
if(vZ == 0)
{
   ClearAnimations(playerid);
   GetPlayerHealth(playerid, hp);
   hp -= 30.0;
   SetPlayerHealth(playerid, hp);
   if(hp <= 0.0)
   {
      SetPlayerDrunkLevel(playerid, 0);
   } else {
      SetPlayerDrunkLevel(playerid, 10000);
      SetTimerEx(\"Refix\", 5000, 0, \"i\", playerid);
      TogglePlayerControllable(playerid, 0);
      ApplyAnimation(playerid, \"PARACHUTE\", \"FALL_skyDive_DIE\",4,0,0,0,1,0);
   }
   SetPVarInt(playerid, \"FallFromVeh\", 0);
}
}
return 1;
}

 
Edit:
Az OnVehicleDamageStatusUpdate nem jó erre a célra mivel nem tartalmazza a jármû élet csökkenését. ( a szkript jármû élet csökkentéshez van írva de lehet ha frontális ütközés lenne ellenõrizve akkor lehet beválna)
Pontosítva: Elõbb kerül meghívásra ez a callback mintsem a jármû élet csökkentésre kerül, tehát alatta a GetVehicleHealth se mûködik megfelelõen.
« Utoljára szerkesztve: 2012. július 29. - 10:19:08 írta ɐʞzssǝlosz »

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
Fade\'s damage behaviour V2.0
« Válasz #9 Dátum: 2012. július 27. - 00:19:10 »
0 Show voters
Ezt a repûlést nem lehet egy kicsit lejjebb vinni? Vagyis kb 2 métre lökjön ell?? :D  :hmmm:

Nem elérhető Amf

  • 1459
    • Profil megtekintése
Fade\'s damage behaviour V2.0
« Válasz #10 Dátum: 2012. július 27. - 01:52:54 »
0 Show voters
Brutális bazdmeg! Amikor bezzeg kerestem ilyet nem volt!

Nem elérhető Fade

  • 322
    • Profil megtekintése
Fade\'s damage behaviour V2.0
« Válasz #11 Dátum: 2012. július 27. - 12:35:19 »
0 Show voters
Idézetet írta: ZyZu date=1343341150\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"25061\" data-ipsquote-contentclass=\"forums_Topic
Ezt a repûlést nem lehet egy kicsit lejjebb vinni? Vagyis kb 2 métre lökjön ell?? :D  :hmmm:
 
Azért szerintem nem reális ha 100-al nekimész a falnak, és csak 2 métert repülsz... :D
Jó, végülis ha a fizikában számolunk, ez sem tökéletes, mert csak a sebesség egyenlõ, az erõ-ellenerõ törvényt kevésbé alkalmaztam... (ugye, SA-ban ahhoz meg kéne tudni a jármû tömegét, azt meg nem egyszerû, max egyenletekkel)
Így, csak annyit tudtam megoldani, hogy ugyanolyan sebességgel repülsz ki, mint amekkorával nekicsapódsz.
 

Ok elvileg meg is lenne gondolkoztam OnVehicleDamageStatusUpdate alkalmazásán is de ahhoz tesztelni kellene. (Az egész a jármû élet csökkenésének megállapításának a ténye.)
Na mindegy a kód optimalizálásán alkottam kicsit, kivettem pár nem használt és felesleges dolgot, és átírtam pár vizsgálatokat. (az OnPlayerUpdate alatt változott talán a legtöbbet)
Lehetne még optimalizálni, de ahhoz több teszt és idõ legfõképp idõ kellene.  ;D
Jha igen nem kell a nevemet feltüntetni nem az én szkriptem.
Akkor a változat:
 
#include <a_samp>
new Float:vhealth[MAX_PLAYERS];
new Float:velX[MAX_PLAYERS], Float:velY[MAX_PLAYERS], Float:velZ[MAX_PLAYERS];
forward OnVehicleLoseHealth(playerid, vehid, health);
forward DrunkClean(playerid);
forward Refix(playerid);
forward FallSet(playerid);
forward Controllable(playerid);
public
OnFilterScriptInit()
{
print(\"\\n--------------------------------------\");
print(\"     Damage behaviour v2.0 by Fade      \");
print(\"--------------------------------------\\n\");
return 1;
}
public
OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
{
GetVehicleHealth(GetPlayerVehicleID(playerid), vhealth[playerid]);
}
return 1;
}
public
OnVehicleRespray(playerid, vehicleid, color1, color2)
{
GetVehicleHealth(vehicleid, vhealth[playerid]);
return 1;
}
public
OnVehicleLoseHealth(playerid, vehid, health)
{
if(health >= 150)
{
new
   Float:x,
   Float:y,
   Float:z,
   Float:a;
GetVehiclePos(vehid, x, y, z);
GetVehicleZAngle(vehid, a);
SetPlayerPos(playerid, x, y, z+2);
GetVehicleVelocity(vehid, x, y, z);
SetPlayerVelocity(playerid, velX[playerid], velY[playerid], z+1);
SetPlayerDrunkLevel(playerid, 10000);
SetTimerEx(\"FallSet\", 500, 0, \"i\", playerid);
}
if(health >= 500) SetPlayerHealth(playerid, 0);
return 1;
}
public
OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
new
Float:hp;
GetPlayerHealth(playerid, hp);
if(20 <= amount <= 40)
{
SetPlayerDrunkLevel(playerid, 25000);
SetTimerEx(\"DrunkClean\", 5000, 0, \"i\", playerid);
}
else if(40 <= amount <= hp)
{
ClearAnimations(playerid);
TogglePlayerControllable(playerid, 0);
ApplyAnimation(playerid, \"PARACHUTE\", \"FALL_skyDive_DIE\",4,0,0,0,1,0);
SetPlayerDrunkLevel(playerid, 10000);
SetTimerEx(\"Refix\", 5000, 0, \"i\", playerid);
}
return 1;
}
public
Refix(playerid)
{
ApplyAnimation(playerid, \"ped\", \"getup_front\",4,0,0,0,0,0);
SetTimerEx(\"Controllable\",1800,0,\"i\",playerid);
SetTimerEx(\"DrunkClean\",3000,0,\"i\",playerid);
return 1;
}
public Controllable(playerid) return TogglePlayerControllable(playerid, 1);
public FallSet(playerid) return SetPVarInt(playerid, \"FallFromVeh\", 1);
public
DrunkClean(playerid)
{
SetPlayerDrunkLevel(playerid,0);
return 1;
}
public
OnPlayerUpdate(playerid)
{
new
Float:hp;
GetPlayerHealth(playerid, hp);
if(hp >= 99) SetPlayerDrunkLevel(playerid, 0);
else if(hp <= 10) SetPlayerDrunkLevel(playerid, 1000);
new
vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid)
{
GetVehicleHealth(vehicleid, hp);
if(hp != vhealth[playerid])
{
   if(hp < vhealth[playerid]) OnVehicleLoseHealth(playerid, vehicleid, floatround(vhealth[playerid] - hp));
   vhealth[playerid] = hp;
}
GetVehicleVelocity(vehicleid, velX[playerid], velY[playerid], velZ[playerid]);
}
if(GetPVarInt(playerid, \"FallFromVeh\") == 1)
{
new
   Float:vX,
   Float:vY,
   Float:vZ;
GetPlayerVelocity(playerid ,vX, vY, vZ);
if(vZ == 0)
{
   ClearAnimations(playerid);
   GetPlayerHealth(playerid, hp);
   hp -= 30.0;
   SetPlayerHealth(playerid, hp);
   if(hp <= 0.0)
   {
      SetPlayerDrunkLevel(playerid, 0);
   } else {
      SetPlayerDrunkLevel(playerid, 10000);
      SetTimerEx(\"Refix\", 5000, 0, \"i\", playerid);
      TogglePlayerControllable(playerid, 0);
      ApplyAnimation(playerid, \"PARACHUTE\", \"FALL_skyDive_DIE\",4,0,0,0,1,0);
   }
   SetPVarInt(playerid, \"FallFromVeh\", 0);
}
}
return 1;
}

 

[/quote]
Köszönöm. Azért megemlítettem a neved, hogy te optimalizáltad. :)

Fade\'s damage behaviour V2.0
« Válasz #12 Dátum: 2012. július 30. - 18:13:47 »
0 Show voters
Ez zsír lett Fade! :D

Valami ilyesmit kerestem!


Szép munka!

Nem elérhető T0ny

  • 524
    • Profil megtekintése
Fade\'s damage behaviour V2.0
« Válasz #13 Dátum: 2012. július 30. - 18:17:43 »
0 Show voters
Ez nagyon fa**a lett ! :D
Szép munka! :)

Nem elérhető IXT

  • 2502
  • Steph Curry
    • Profil megtekintése
Fade\'s damage behaviour V2.0
« Válasz #14 Dátum: 2012. július 31. - 08:43:44 »
0 Show voters
Ez szép Fade,minden elismerésem  ;)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal