Hej, przepraszam ale nie bardzo jeszcze rozumiem działanie całego mechanizmu.
Problem jest taki ze Fireeball u maga leczy zamiast zadawać dmg może ktoś wskazać problem a nie robić gotowca?![]()
/* Script generated by Pawn Studio */
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fun>
#include <fakemeta>
#include <diablo_nowe.inc>
#define PLUGIN "Diablo Mag"
#define AUTHOR "DarkGL"
#define VERSION "1.0"
#define MAX_FLASH 15
#define MAG_VIEW "models/diablomod/v_mag.mdl"
new flashlight[33]
new flashbattery[33]
new flashlight_r
new flashlight_g
new flashlight_b
new bool:bKlasa[33],bool:bFala[33];
new iFireball[33];
new pCvarCustom,pCvarDrain,pCvarCharge,pCvarRadius,pCvarDecay;
new msgFlashLight,msgFlashBat;
new sprite_beam,sprite_lgt;
new bool: speedOn[ 33 ];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
diablo_register_class("Mag",95,"<br>Strzelajac z pistoletu zamrazasz wroga i zabierasz mu 5hp co 2 sek przez 15 sek.<br> Jezeli wlaczysz latarke i najedziesz na ninje robi sie widzialny <br><br>");
pCvarCustom = register_cvar("flashlight_custom","1");
pCvarDrain = register_cvar("flashlight_drain","1.0");
pCvarCharge = register_cvar("flashlight_charge","0.5");
pCvarRadius = register_cvar("flashlight_radius","8");
pCvarDecay = register_cvar("flashlight_decay","90");
msgFlashLight = get_user_msgid("Flashlight");
msgFlashBat = get_user_msgid("FlashBat");
register_event("Flashlight","eventFlashlight","b");
}
public plugin_precache(){
precache_model(MAG_VIEW);
sprite_beam = precache_model("sprites/zbeam4.spr")
sprite_lgt = precache_model("sprites/lgtning.spr")
}
public diablo_damage_class_do( iVictim , iAttacker , &Float: fDamage , damageBits ){
remove_task( iAttacker );
set_user_maxspeed( iAttacker , 130.0 );
speedOn[ iAttacker ] = false;
set_task( 3.0 , "offSpeed" , iAttacker );
}
public offSpeed( id ){
speedOn[ id ] = false;
if( is_user_alive( id ) ) set_user_maxspeed( id , -1.0 );
}
public diablo_class_enabled(id){
bKlasa[id] = true;
}
public diablo_class_disabled(id){
bKlasa[id] = false;
}
public Float:diablo_cast_time(id,Float:standardTime){
return 4.0-(float(diablo_get_user_int(id))/30.0);
}
public diablo_cast_stop(id){
if(is_user_alive(id) && get_user_weapon(id) == CSW_KNIFE && get_entity_flags(id) & FL_ONGROUND){
return DIABLO_STOP;
}
return DIABLO_CONTINUE;
}
public diablo_cast_move(id){
return DIABLO_CONTINUE;
}
public diablo_class_skill_used(id){
if (bFala[id])
{
diablo_show_hudmsg( id, 2.0 , "Tego czaru mozesz uzyc raz na runde")
return PLUGIN_HANDLED
}
//Target nearest non-friendly player
new target = UTIL_FindNearestOpponent(id,600+diablo_get_user_int(id))
if (target == -1) return PLUGIN_HANDLED
new FalaDamage = 100 + diablo_get_user_int(id)*2
//Dagon damage done is reduced by the targets dextery
FalaDamage -= diablo_get_user_dex(target);
if (FalaDamage < 0)
FalaDamage = 0
new Hit[3]
get_user_origin(target,Hit)
//Create Lightning
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(1) // TE_BEAMENTPOINT
write_short(id)
write_coord(Hit[0])
write_coord(Hit[1])
write_coord(Hit[2])
write_short(sprite_lgt)
write_byte(0)
write_byte(1)
write_byte(3)
write_byte(100) //WITD
write_byte(60)
write_byte(0)
write_byte(0)
write_byte(175)
write_byte(200) //BRIGT
write_byte(0)
message_end()
bFala[id] = true;
//Apply damage
if( FalaDamage != 0 ){
diablo_damage(target,id,float(FalaDamage),diabloDamageGrenade);
}
diablo_display_fade( target,2600,2600,0,255,0,0,15 )
set_hudmessage ( 255, 0, 0, -1.0, 0.4 , 0, 1.0, 2.0, 0.1, 0.2, -1 )
show_hudmessage(id, "Zadales wrogowi %i", FalaDamage)
return PLUGIN_HANDLED
}
public diablo_call_cast(id){
set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2)
if(iFireball[id]>49)
{
show_hudmessage(id, "Wyczarowales juz %i fire ballow. Nie mozesz wiecej w tej rundzie",iFireball[id])
}
else
{
show_hudmessage(id, "Wyczarowales fireboll'a")
iFireball[id]++
new Float:vOrigin[3]
new fEntity
entity_get_vector(id,EV_VEC_origin, vOrigin)
fEntity = create_entity("info_target")
entity_set_model(fEntity, "models/rpgrocket.mdl")
entity_set_origin(fEntity, vOrigin)
entity_set_int(fEntity,EV_INT_effects,64)
entity_set_string(fEntity,EV_SZ_classname,"fireball")
entity_set_int(fEntity, EV_INT_solid, SOLID_BBOX)
entity_set_int(fEntity,EV_INT_movetype,5)
entity_set_edict(fEntity,EV_ENT_owner,id)
//Send forward
new Float:fl_iNewVelocity[3]
VelocityByAim(id, 500, fl_iNewVelocity)
entity_set_vector(fEntity, EV_VEC_velocity, fl_iNewVelocity)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(22)
write_short(fEntity)
write_short(sprite_beam)
write_byte(45)
write_byte(4)
write_byte(255)
write_byte(0)
write_byte(0)
write_byte(25)
message_end()
}
}
public pfn_touch ( ptr, ptd )
{
if (ptd == 0) return PLUGIN_CONTINUE
new szClassName[64]
if(pev_valid(ptd)) entity_get_string(ptd, EV_SZ_classname, szClassName, charsmax( szClassName) )
else return PLUGIN_HANDLED;
if(equal(szClassName, "fireball"))
{
new owner = pev(ptd,pev_owner)
entity_get_string(ptr, EV_SZ_classname, szClassName, charsmax( szClassName) )
if(equal(szClassName,"worldspawn") || is_user_alive(ptr) || (pev_valid(ptr) && pev(ptr,pev_solid) != SOLID_NOT && pev(ptr,pev_solid) != SOLID_TRIGGER)){
new Float:fOrigin[3]
pev(ptd,pev_origin,fOrigin)
diablo_create_explode(owner,fOrigin,55.0 + float(diablo_get_user_int(owner)),150.0,true);
remove_entity(ptd)
}
}
return PLUGIN_CONTINUE
}
public diablo_weapon_deploy(id,wpnID,weaponEnt){
if(bKlasa[id] && wpnID == CSW_KNIFE){
entity_set_string(id, EV_SZ_viewmodel, MAG_VIEW)
}
}
public diablo_clean_data(id){
iFireball[id] = 0;
flashbattery[id] = MAX_FLASH;
flashlight[id] = 0;
bFala[id] = false;
message_begin(MSG_ONE,msgFlashBat,{0,0,0},id);
write_byte(flashbattery[id]);
message_end();
message_begin(MSG_ONE,msgFlashLight,{0,0,0},id);
write_byte(flashlight[id]);
write_byte(flashbattery[id]);
message_end();
remove_task(id);
}
public diablo_set_data(id){
iFireball[id] = 0;
flashbattery[id] = MAX_FLASH;
flashlight[id] = 0;
bFala[id] = false;
message_begin(MSG_ONE,msgFlashBat,{0,0,0},id);
write_byte(flashbattery[id]);
message_end();
message_begin(MSG_ONE,msgFlashLight,{0,0,0},id);
write_byte(flashlight[id]);
write_byte(flashbattery[id]);
message_end();
remove_task(id);
}
public diablo_class_spawned(id){
iFireball[id] = 0;
flashbattery[id] = MAX_FLASH;
flashlight[id] = 0;
bFala[id] = false;
message_begin(MSG_ONE,msgFlashBat,{0,0,0},id);
write_byte(flashbattery[id]);
message_end();
message_begin(MSG_ONE,msgFlashLight,{0,0,0},id);
write_byte(flashlight[id]);
write_byte(flashbattery[id]);
message_end();
remove_task(id);
}
public diablo_class_killed(id){
iFireball[id] = 0;
flashbattery[id] = MAX_FLASH;
flashlight[id] = 0;
message_begin(MSG_ONE,msgFlashBat,{0,0,0},id);
write_byte(flashbattery[id]);
message_end();
message_begin(MSG_ONE,msgFlashLight,{0,0,0},id);
write_byte(flashlight[id]);
write_byte(flashbattery[id]);
message_end();
remove_task(id);
}
public eventFlashlight(id) {
if(!get_pcvar_num(pCvarCustom) || !is_user_alive(id)) {
return;
}
if(flashlight[id]) {
flashlight[id] = 0;
}
else if(flashbattery[id] > 0){
flashlight[id] = 1;
}
if(!task_exists(id)) {
set_task((flashlight[id]) ? get_pcvar_float(pCvarDrain) : get_pcvar_float(pCvarCharge),"charge",id,.flags = "b");
}
message_begin(MSG_ONE,msgFlashLight,{0,0,0},id);
write_byte(flashlight[id]);
write_byte(flashbattery[id]);
message_end();
entity_set_int(id,EV_INT_effects,entity_get_int(id,EV_INT_effects) & ~EF_DIMLIGHT);
}
public charge(id){
if(!get_pcvar_num(pCvarCustom) || !is_user_alive(id)) {
remove_task(id);
return;
}
if(flashlight[id]) {
flashbattery[id] -= 1;
}
else {
flashbattery[id] += 1;
}
message_begin(MSG_ONE,msgFlashBat,{0,0,0},id);
write_byte(flashbattery[id]);
message_end();
if(flashbattery[id] <= 0) {
remove_task(id);
flashbattery[id] = 0;
flashlight[id] = 0;
message_begin(MSG_ONE,msgFlashLight,{0,0,0},id);
write_byte(flashlight[id]);
write_byte(flashbattery[id]);
message_end();
}
else if(flashbattery[id] >= MAX_FLASH) {
flashbattery[id] = MAX_FLASH
remove_task(id);
}
}
public diablo_preThink(id){
if(!is_user_alive(id)) return PLUGIN_CONTINUE;
if( speedOn[ id ] ) set_user_maxspeed( id , 130.0 );
if (flashlight[id] && flashbattery[id] && get_pcvar_num(pCvarCustom)) {
new num1, num2, num3
num1=random_num(0,2)
num2=random_num(-1,1)
num3=random_num(-1,1)
flashlight_r+=1+num1
if (flashlight_r>250) flashlight_r-=245
flashlight_g+=1+num2
if (flashlight_g>250) flashlight_g-=245
flashlight_b+=-1+num3
if (flashlight_b<5) flashlight_b+=240
new origin[3];
get_user_origin(id,origin,3);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(27); // TE_DLIGHT
write_coord(origin[0]); // X
write_coord(origin[1]); // Y
write_coord(origin[2]); // Z
write_byte(get_pcvar_num(pCvarRadius)); // radius
write_byte(flashlight_r); // R
write_byte(flashlight_g); // G
write_byte(flashlight_b); // B
write_byte(1); // life
write_byte(get_pcvar_num(pCvarDecay)); // decay rate
message_end();
new index1, bodypart1
get_user_aiming(id,index1,bodypart1)
if (is_user_alive(index1) && get_user_team(id)!=get_user_team(index1) )
{
diablo_set_user_render(index1,kRenderFxGlowShell,flashlight_r,flashlight_g,flashlight_b,kRenderNormal,4,7.5);
if(diablo_is_this_class(index1,"Ninja")){
diablo_display_icon( index1 , 2 , "dmg_bio" , 255 , 0 , 0 )
remove_task( index1 + 666 )
set_task( 7.5 , "offIcon" , index1 + 666 )
}
}
}
return PLUGIN_CONTINUE;
}
public offIcon( id ){
id -= 666;
if( is_user_connected( id ) ){
diablo_display_icon( id , 0 , "dmg_bio" , 255 , 0 , 0 )
}
}
public UTIL_FindNearestOpponent(id,maxdist)
{
new best = 99999
new entfound = -1
new MyOrigin[3]
get_user_origin(id,MyOrigin)
for (new i=1; i < 33; i++)
{
if (i == id || !is_user_connected(i) || !is_user_alive(i) || get_user_team(id) == get_user_team(i) || fm_trace_line( id , id , i ) == i)
continue
new TempOrigin[3],Float:fTempOrigin[3]
get_user_origin(i,TempOrigin)
IVecFVec(TempOrigin,fTempOrigin)
new dist = get_distance ( MyOrigin,TempOrigin )
if ( dist <= maxdist && dist < best)
{
best = dist
entfound = i
}
}
return entfound
}
stock fm_trace_line(ignoreent, iStart, iEnd ){
new Float: start[ 3 ] , Float: end[ 3 ];
pev( iStart , pev_origin , start );
pev( iEnd , pev_origin , end );
engfunc(EngFunc_TraceLine, start, end, ignoreent == -1 ? 1 : 0, ignoreent, 0);
new ent = get_tr2(0, TR_pHit);
return pev_valid(ent) ? ent : 0;
}


Dodatki SourceMod













