Spoiler
Najpierw sprawdź czy masz określoną maksymalną ilość graczy, czyli
jeśli tak przechodzisz dalej, a jeśli nie dodaj to, np. pod
Znajdź
dodaj pod
znajdź
dodaj pod
znajdź w "public plugin_init"
dodaj pod
znajdź
dodaj pod
znajdź w "public reset_item_skills"
dodaj pod
znajdź w "public iteminfo", np.
dodaj pod
item dodajesz w "public award_item", np. taki
i pamiętaj o zmianie
X - wartość ostatniego itemu
na końcu kodu dodaj
#define MAX 32 //Max number of valid player entities
jeśli tak przechodzisz dalej, a jeśli nie dodaj to, np. pod
#define RESTORETIME 30.0 //How long from server start can players still get their item trasferred (s)
Znajdź
new gmsgBartimer
new gmsgScoreInfo
new gmsgHealth
dodaj pod
new g_msgHostageAdd, g_msgHostageDel; // radar
znajdź
gmsgHealth = get_user_msgid("Health");
dodaj pod
// radar
g_msgHostageAdd = get_user_msgid("HostagePos");
g_msgHostageDel = get_user_msgid("HostageK");
znajdź w "public plugin_init"
set_task(5.0, "Timed_Healing", 0, "", 0, "b");
dodaj pod
set_task(1.0, "radar_scan", _, _, _, "b"); // radar
znajdź
new player_ring[33] //ring stats bust +8
dodaj pod
new player_b_radar[33] // radar
znajdź w "public reset_item_skills"
player_ultra_armor[id] = 0
dodaj pod
player_b_radar[id] = 0
znajdź w "public iteminfo", np.
Spoiler
if(player_b_smokehit[id] > 0)
{
add(itemEffect,199,"Twoje granaty dymne zabijaja natychmiast wroga jezeli go dotkna.<br>")
}
dodaj pod
Spoiler
if(player_b_radar[id] > 0)
{
add(itemEffect, 199, "Widzisz wrogow na radarze.<br>");
}
item dodajesz w "public award_item", np. taki
Spoiler
case X:
{
player_item_name[id] = "Radar"
player_item_id[id] = rannum
player_b_radar[id] = 1
show_hudmessage(id, "Znalazles przedmiot: %s :: Widzisz wrogow na radarze", player_item_name[id])
}
i pamiętaj o zmianie
new rannum = random_num(1,X)
X - wartość ostatniego itemu
na końcu kodu dodaj
Spoiler
public radar_scan() {
for(new id=1; id<=MAX; id++) {
if(!is_user_alive(id) || !player_b_radar[id]) continue;
for(new i=1; i<=MAX; i++) {
if(!is_user_alive(i) || id == i || get_user_team(id) == get_user_team(i)) continue;
new PlayerCoords[3];
get_user_origin(i, PlayerCoords);
message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, _, id);
write_byte(id);
write_byte(i);
write_coord(PlayerCoords[0]);
write_coord(PlayerCoords[1]);
write_coord(PlayerCoords[2]);
message_end();
message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, _, id);
write_byte(i);
message_end();
}
}
}
Teleport - teleportuje w miejsce na które się celuje
Spoiler
Znajdź
dodaj pod
znajdź w "public check_magic"
dodaj pod
znajdź w "public reset_item_skills"
dodaj pod
znajdź w "public iteminfo", np.
dodaj pod
item dodajesz w "public award_item", np. taki
i pamiętaj o zmianie
X - wartość ostatniego itemu
znajdź w "public upgrade_item", np.
dodaj pod
na samym końcu kodu dodaj
znajdź
dodaj pod
znajdź w "public reset_item_skills"
dodaj pod
znajdź
dodaj pod
znajdź
dodaj pod
znajdź
dodaj pod
znajdź
dodaj pod
W załączniku daje dźwięk do teleportu, który należy wgrać "..\cstrike\sound\diablo\teleport.wav" (sprite jest w standardzie, więc nie potrzebny).
new player_ring[33] //ring stats bust +8
dodaj pod
new player_b_teleport[33] // teleport
znajdź w "public check_magic"
if(player_b_heal[id] > 0) item_totemheal(id);
dodaj pod
if(player_b_teleport[id] > 0) item_teleport(id);
znajdź w "public reset_item_skills"
player_ultra_armor[id] = 0
dodaj pod
player_b_teleport[id] = 0
znajdź w "public iteminfo", np.
Spoiler
if(player_b_ghost[id] > 0)
{
num_to_str(player_b_ghost[id],TempSkill,10)
add(itemEffect,199,"Uzyj tego przedmiotu, aby przenikac przez sciany przez ")
add(itemEffect,199,TempSkill)
add(itemEffect,199," sek.<br>")
}
dodaj pod
Spoiler
if(player_b_teleport[id] > 0)
{
num_to_str(player_b_teleport[id],TempSkill,10)
add(itemEffect,199,"Uzyj, aby teleportowac sie w wybrane miejsce. Mozesz teleportowac sie co ")
add(itemEffect,199,TempSkill)
add(itemEffect,199," sek. Pamietaj, aby nie teleportowac sie w niebo!<br>")
}
item dodajesz w "public award_item", np. taki
Spoiler
case X:
{
player_item_name[id] = "Teleport"
player_item_id[id] = rannum
player_b_teleport[id] = random_num(12,18)
show_hudmessage(id, "Znalazles przedmiot: %s :: Uzyj, aby teleportowac sie w wybrane miejsce. Mozesz teleportowac sie co %i sek.", player_item_name[id], player_b_teleport[id])
}
i pamiętaj o zmianie
new rannum = random_num(1,X)
X - wartość ostatniego itemu
znajdź w "public upgrade_item", np.
if(player_b_ghost[id]>0) player_b_ghost[id]+= random_num(0,1)
dodaj pod
if(player_b_teleport[id]>0)
{
if(player_b_teleport[id]>15) player_b_teleport[id] -= random_num(0,2)
else player_b_teleport[id] -= random_num(0,1)
}
na samym końcu kodu dodaj
Spoiler
public item_teleport(id) {
if(get_gametime()-teltimer[id] <= player_b_teleport[id]) {
hudmsg(id, 2.0, "Mozesz teleportowac sie co %i sekund!", player_b_teleport[id]);
return PLUGIN_HANDLED;
}
new OldLocation[3], NewLocation[3];
get_user_origin(id, OldLocation);
get_user_origin(id, NewLocation, 3);
new dystans = 1600+player_intelligence[id]*2;
if(NewLocation[0]-OldLocation[0] > dystans || NewLocation[1]-OldLocation[1] > dystans || NewLocation[2]-OldLocation[2] > dystans) {
hudmsg(id, 2.0, "Cel znajduje sie za daleko!");
return PLUGIN_HANDLED;
}
NewLocation[0] += ((NewLocation[0] - OldLocation[0] > 0) ? -32 : 32);
NewLocation[1] += ((NewLocation[1] - OldLocation[1] > 0) ? -32 : 32);
NewLocation[2] += ((NewLocation[2]-42 - OldLocation[2] > 0) ? -42 : 42);
new Float:forgin[3], Float:radius = 8.0, num;
IVecFVec(NewLocation, forgin);
while(num < 100) {
if(is_hull_vacant(forgin)) {
break;
}
else {
forgin[0] += random_float(-radius, radius);
forgin[1] += random_float(-radius, radius);
forgin[2] += random_float(-radius, radius);
num++;
}
}
if(!is_hull_vacant(forgin)) {
hudmsg(id, 2.0, "Teleportacja w te miejsce jest niemozliwa!");
return PLUGIN_HANDLED;
}
teltimer[id] = floatround(get_gametime());
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_SPRITETRAIL); // TE ID
write_coord(OldLocation[0]); // Start Position X
write_coord(OldLocation[1]); // Start Position Y
write_coord(OldLocation[2]+32); // Start Position Z
write_coord(OldLocation[0]); // End Position X
write_coord(OldLocation[1]); // End Position Y
write_coord(OldLocation[2]); // End Position Z
write_short(sprite_teleport); // Sprite Index
write_byte(30); // Count
write_byte(10); // Life
write_byte(1); // Scale
write_byte(50); // Velocity Along Vector
write_byte(10); // Rendomness of Velocity
message_end();
emit_sound(id, CHAN_STATIC, SOUND_TEL, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
set_pev(id, pev_origin, forgin);
return PLUGIN_HANDLED;
}
znajdź
new gravitytimer[33]
dodaj pod
new teltimer[33] // teleportowanie
znajdź w "public reset_item_skills"
gravitytimer[id] = 0
dodaj pod
teltimer[id] = 0
znajdź
new sprite_smoke = 0
dodaj pod
new sprite_teleport;
znajdź
sprite_beam = precache_model("sprites/zbeam4.spr");
dodaj pod
sprite_teleport = precache_model("sprites/blueflare2.spr");
znajdź
new cbow_bolt[] = "models/diablomod/crossbow_bolt.mdl"
dodaj pod
new SOUND_TEL[] = "diablo/teleport.wav"
znajdź
precache_sound("weapons/knife_deploy1.wav");
dodaj pod
precache_sound(SOUND_TEL);
W załączniku daje dźwięk do teleportu, który należy wgrać "..\cstrike\sound\diablo\teleport.wav" (sprite jest w standardzie, więc nie potrzebny).
Radar działa dobrze
To co skreślone zostało naprawione, nie można teleportować się w miejsce gdzie będzie nas blokować.
Załączone pliki
-
teleport.rar 34,46 KB 283 Ilość pobrań
Użytkownik sebul edytował ten post 28.08.2011 00:03