I tried.
Someone should check the buffer parts though, because I don't understand networking.
/*
Killstreak The Dice
- serversent plugin by Cerapter
- original plugin by Lorgan
- original idea by Vindicator
- original RTD plugin by Lorgan
- modified for parallel dice rolls by BTW I am Infiltrator
*/
// Killstreak part
object_event_add(Character,ev_create,0,"
killStreak = 0;
currentStreak = global.paramPlayer.stats[KILLS];
KSfactor = 0;
DiceUses = 0;
");
object_event_add(Character,ev_step,ev_step_normal,"
if (!global.isHost) {
while (PluginPacketGetBuffer(packetID) != -1) {
var BufferGet;
BufferGet = PluginPacketGetBuffer(packetID);
var InfoType;
InfoType = read_ubyte(BufferGet);
if (InfoType == 0) {
KSfactor = read_ubyte(BufferGet);
}
else if (InfoType == 1) {
DiceUses = read_ubyte(BufferGet);
}
PluginPacketPop(packetID);
}
}
else if (player.stats[KILLS] > currentStreak && player.stats[KILLS] - currentStreak != killStreak) {
var killStreakText;
killStreakText = '';
killStreak = player.stats[KILLS] - currentStreak;
var resetTimer;
resetTimer = 0;
if (killStreak == 2) {
killStreakText = ' got a double kill!';
resetTimer = 1;
}else if (killStreak == 3) {
killStreakText = ' got a triple kill!';
resetTimer = 1;
}else if (killStreak == 4){
killStreakText = ' got a mega kill!';
resetTimer = 1;
}else if (killStreak == 5){
killStreakText = ' got an ultra kill!';
resetTimer = 1;
}else if (killStreak == 6){
killStreakText = ' got a M-M-M-Monster kill!';
resetTimer = 1;
}else if (killStreak == 9){
killStreakText = ' got a ludicrous kill!';
resetTimer = 1;
}else if (killStreak == 12){
killStreakText = ' is merciless!';
resetTimer = 1;
}else if (killStreak == 15){
killStreakText = ' is unstoppable!';
resetTimer = 1;
}else if (killStreak == 20){
killStreakText = ' is GODLIKE!';
resetTimer = 1;
}else if (killStreak == 25){
killStreakText = ' is a 1337 |-|4><0|2!';
resetTimer = 1;
}else if (killStreak > 30) killStreakText = ' should stop playing this game!';
if (resetTimer >= 1) {
KSfactor += 1;
DiceUses = min(DiceUses+choose(0,0,1),3)
var KSSend, DiceSend;
KSSend = buffer_create();
write_ubyte(KSSend, 0);
write_ubyte(KSSend, KSfactor);
DiceSend = buffer_create();
write_ubyte(DiceSend, 1);
write_ubyte(DiceSend, DiceUses);
PluginPacketSendTo(argument1, KSSend, Character.player);
PluginPacketSendTo(argument1, DiceSend, Character.player);
buffer_destroy(KSSend);
buffer_destroy(DiceSend);
//send to chat if possible
if (variable_global_exists('chatLog')) {
if (string_count('v3',ds_list_find_value(global.chatLog,0)) == 1) {
with(global.chatWindow) {
_message = 'O' + other.player.name + killStreakText;
_team = 0;
event_user(2);
event_user(4);
}
} else if (string_count('v5',ds_list_find_value(global.chatLog,0)) == 1) {
with(global.chatWindow) {
playerId = 254;
_message = 'O' + other.player.name + killStreakText;
_team = 0;
event_user(2);
event_user(4);
}
event_user(4);
}
}
//send to the default message thingy
var message;
message = other.player.name + killStreakText;
ServerMessageString(message,global.sendBuffer);
with NoticeO instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = message;
}
}
")
object_event_add(Character,ev_draw,0,"
if global.myself.object == id {
if KSfactor < 3 then draw_set_color(c_green); else if KSfactor < 6 then draw_set_color(c_yellow) else draw_set_color(c_red);
draw_set_alpha(1);
draw_set_halign(fa_center);
draw_set_valign(fa_bottom);
draw_text(xr, yr-35, 'x'+string(DiceUses))
}
")
// Roll the Dice Part
global.effects = 17;
// KSfactor < 3
global.effect[0] = " was healed!";
global.effect[1] = " was damaged!"
global.effect[2] = " has increased speed for 15 seconds!";
global.effect[3] = " became slower for 15 seconds!"
global.effect[4] = " jumps higher for 15 seconds!";
global.effect[5] = " jumps lower for 15 seconds!";
// KSfactor < 6
global.effect[6] = " has increased fire speed for 15 seconds!";
global.effect[7] = " has decreased fire speed for 15 seconds!";
global.effect[8] = " regens some health every second for 15 seconds!";
global.effect[9] = " looses some health every second for 15 seconds!";
// Else
global.effect[10] = " is invulnerable for 15 seconds!"
global.effect[11] = " can instakill for 15 seconds!";
global.effect[12] = " lost ALL his health!";
global.effect[13] = " is invisible for 15 seconds!";
global.effect[14] = " has infinite ammo for 15 seconds!";
global.effect[15] = "'s team has ALL ubers ready!";
global.effect[16] = "'s team is devastated!"
object_event_add(PlayerControl,ev_create,0,"alarm[0] = 300;");
object_event_add(PlayerControl,ev_alarm,0,"
if !instance_exists(NoticeO) {
ServerMessageString('Killstreak the Dice plugin - taunt to use up a diceroll (shown above you).',global.eventBuffer);
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = 'Killstreak the Dice plugin - taunt to use up a diceroll (shown above you).';
alarm[0] = 30*5*60;
if (variable_global_exists('chatLog')) {
if (string_count('v3',ds_list_find_value(global.chatLog,0)) == 1) {
with(global.chatWindow) {
_message = 'O Killstreak the Dice plugin - taunt to use up a diceroll (shown above you). You gain dicerolls by achieving killstreaks. The diceroll number gets more red as the effect of the dicerolls get more drastic.';
_team = 0;
event_user(2);
event_user(4);
}
} else if (string_count('v5',ds_list_find_value(global.chatLog,0)) == 1) {
with(global.chatWindow) {
playerId = 254;
_message = 'O Killstreak the Dice plugin - taunt to use up a diceroll (shown above you). You gain dicerolls by achieving killstreaks. The diceroll number gets more red as the effect of the dicerolls get more drastic.';
_team = 0;
event_user(2);
event_user(4);
}
event_user(4);
}
}
} else alarm[0] = 7;
");
object_event_add(Character,ev_create,0,"effect = noone;
OriginalRefireTime = 0;");
object_event_add(Character,ev_alarm,11,"
if effect != noone {
switch(effect) {
case 8:
hp += 3*(1+(KSfactor/10));
break;
case 9:
hp -= 3*(1+(KSfactor/10));
break;
}
}
");
object_event_add(Character,ev_step,ev_step_normal,"
if effect != noone {
switch(effect) {
case 2:
case 3:
RTDtimer -= 1;
if RTDtimer <= 0 {
effect = noone;
with(NoticeO) instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = player.name + ' is back at normal speed.';
runPower = runBkp;
}
break;
case 4:
case 5:
RTDtimer -= 1;
if RTDtimer <= 0 {
effect = noone;
with(NoticeO) instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = player.name + ' jumps normally again.';
jumpStrength = 8;
}
break;
case 6:
currentWeapon.refireTime = max(1,OriginalRefireTime*(1-(KSfactor/10)))
RTDtimer -= 1;
if RTDtimer <= 0 {
effect = noone;
with(NoticeO) instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = player.name + ' has normal refire speed again.';
currentWeapon.refireTime = OriginalRefireTime;
}
break;
case 7:
currentWeapon.refireTime = OriginalRefireTime*(KSfactor/10)
RTDtimer -= 1;
if RTDtimer <= 0 {
effect = noone;
with(NoticeO) instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = player.name + ' has normal refire speed again.';
currentWeapon.refireTime = OriginalRefireTime;
}
break;
case 8:
case 9:
RTDtimer -= 1;
if RTDtimer <= 0 {
effect = noone;
with(NoticeO) instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = player.name + ' is back at default regen.';
}
break;
case 10:
hp = 255;
RTDtimer -= 1;
if RTDtimer <= 0 {
effect = noone;
with(NoticeO) instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = player.name + ' is no longer invulnerable.';
hp = hpBkp;
}
break;
case 11:
with(Character) if lastDamageDealer == other.player && timeUnscathed <= 1 hp = -999;
RTDtimer -= 1;
if RTDtimer <= 0 {
effect = noone;
with(NoticeO) instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = player.name + ' no longer has instakill.';
}
break;
case 13:
visible = 0;
RTDtimer -= 1;
if RTDtimer <= 0 {
effect = noone;
with(NoticeO) instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = player.name + ' is visible again.';
visible = 1;
}
break;
case 14:
currentWeapon.ammoCount = currentWeapon.maxAmmo;
RTDtimer -= 1;
if RTDtimer <= 0 {
effect = noone;
with(NoticeO) instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = player.name + ' has normal ammo again.';
}
break;
default:
effect = noone;
}
}
else if taunting and DiceUses > 0 {
if tauntindex == 0 or tauntindex == tauntlength {
effect = -1;
if global.isHost {
DiceUses -= 1;
if KSfactor < 3 then effect = floor(random(6));
else if KSfactor < 6 then effect = floor(random(10));
else effect = floor(random(global.effects));
ServerMessageString(player.name + global.effect[effect],global.eventBuffer);
with(NoticeO) instance_destroy();
notice = instance_create(0, 0, NoticeO);
notice.notice = NOTICE_CUSTOM;
notice.message = player.name + global.effect[effect];
player.alarm[10] = 30*60;
DiceSend = buffer_create();
write_ubyte(DiceSend, 1);
write_ubyte(DiceSend, DiceUses);
PluginPacketSendTo(argument1, DiceSend, Character.player);
EffectSend = buffer_create();
write_ubyte(EffectSend, 2);
write_ubyte(EffectSend, Character.player);
write_ubyte(EffectSend, effect);
PluginPacketSend(argument1, EffectSend);
}
else {
while (PluginPacketGetBuffer(packetID) != -1) {
var BufferGet;
BufferGet = PluginPacketGetBuffer(packetID);
var InfoType;
InfoType = read_ubyte(BufferGet);
if (InfoType == 2) {
var affectedPlayer;
affectedPlayer = read_ubyte(BufferGet);
if player == affectedPlayer then effect = read_ubyte(BufferGet);
}
PluginPacketPop(packetID);
}
switch(effect) {
case 0:
effect = noone;
hp += maxHp*(KSfactor/10);
break;
case 1:
effect = noone;
hp -= maxHp*(KSfactor/10);
break;
case 2:
RTDtimer = 15*30;
runBkp = runPower;
runPower = runPower*(1+(KSfactor/10));
break;
case 3:
RTDtimer = 15*30;
runBkp = runPower;
runPower = max(0.1,runPower*(1-(KSfactor/10)));
break;
case 4:
RTDtimer = 15*30;
jumpStrength = 8*(1+(KSfactor/10));
break;
case 5:
RTDtimer = 15*30;
jumpStrength = 8*max(0.1,runPower*(1-(KSfactor/10)));
break;
case 6:
OriginalRefireTime = currentWeapon.refireTime;
RTDtimer = 15*30;
break;
case 7:
OriginalRefireTime = currentWeapon.refireTime;
RTDtimer = 15*30;
break;
case 8:
RTDtimer = 15*30;
break;
case 9:
RTDtimer = 15*30;
break;
case 10:
hpBkp = hp;
RTDtimer = 15*30;
break;
case 11:
RTDtimer = 15*30;
break;
case 12:
hp = 1;
RTDtimer = 15*30;
break;
case 13:
RTDtimer = 15*30;
break;
case 14:
RTDtimer = 15*30;
break;
case 15:
with (Character) {
if team != other.team {
with (currentWeapon) {
if object_index == Medigun {
uberCharge = 2000;
if(global.isHost) {
sendEventUberReady(ownerPlayer);
doEventUberReady(ownerPlayer);
}
}
}
}
}
effect = noone;
break;
case 16:
with (Character) {
if team != other.team {
with (currentWeapon) {
if object_index == Medigun {
uberCharge = 0;
}
else if object_index != Rifle {
ammoCount = 0;
}
}
}
}
effect = noone;
break;
}
}
}
");