#(c) 2012 savagerebirth.com
from silverback import *;
import savage;
autoItem = { 'human' : ["human_medkit", "human_medkit", "human_medkit"], 'beast' : ["beast_rabid"]};
def handleDuelChallenge(c, t):
target = None;
challenger = savage.getGameObject(c);
#Mode logic
if t == -1:
if challenger.getDuelingPhase() == DP_READY:
challenger.setDuelingPhase(DP_NOTDUELING);
silverback.SV_ClientEcho(c, "^gNow in FFA mode\n");
elif challenger.getDuelingPhase() == DP_CHALLENGING:
silverback.SV_ClientEcho(c, "^cYou have cancelled your challenge!\n");
silverback.SV_ClientEcho(t, "^c"+challenger.getName()+" ^chas cancelled their challenge!\n");
challenger.setDuelingPhase(DP_READY);
elif challenger.getDuelingPhase() == DP_DUELING:
pass; #TODO: forfiet!
else:
challenger.setDuelingPhase(DP_READY);
silverback.SV_ClientEcho(c, "^gNow in DUEL mode\n");
challenger.setDueling(-1);
return;
#now we can get our target, since we know we have one
target = savage.getGameObject(t);
if challenger.getDuelingPhase() == DP_NOTDUELING:
silverback.SV_ClientEcho(c, "^cYou are currently in ^gFFA ^cmode. Aim at the ground and use your officer command (default: ^yF^c)!\n");
return;
#Other guy is switched off
if target.getDuelingPhase() == DP_NOTDUELING:
silverback.SV_ClientEcho(c, "^rThis person is not in duel mode!\n");
return;
#reminders and cancel
if challenger.getDueling() > -1:
if challenger.getDueling() == t and challenger.getDuelingPhase() == DP_CHALLENGING:
silverback.SV_ClientEcho(t, "^c"+challenger.getName()+" ^greminds you of his/her challenge!\n");
silverback.SV_ClientEcho(c, "^gYou have reminded ^c"+target.getName()+" ^gof your challenge!\n");
if cvar_getvalue("sv_duelwaypoints") > 0:
challenger.targetObject(t, GOAL_ATTACK_OBJECT);
elif challenger.getDuelingPhase() == DP_CHALLENGING and target.getDuelingPhase() != DP_DUELING:
silverback.SV_ClientEcho(t, "^c"+challenger.getName()+" ^ghas cancelled the challenge.\n");
return;
#let's do this!
if target.getDueling() > -1:
if target.getDueling() == challenger.objectId:
#CHALLENGE ACCEPTED!
target.setDuelingPhase(DP_DUELING);
challenger.setDueling(t);
challenger.setDuelingPhase(DP_DUELING);
silverback.SV_ClientEcho(t, "^c"+challenger.getName()+" ^ghas accepted your challenge!\n");
silverback.SV_ClientEcho(c, "^gYou have accepted ^c"+target.getName()+"'s ^gchallenge!\n");
if cvar_getvalue("sv_duelautoheal")>0:
challenger.setHealth(challenger.getMaxHealth());
target.setHealth(target.getMaxHealth());
target.clearInventory();
challenger.clearInventory();
if cvar_getvalue("sv_duelautoitem")>0:
team = savage.Team(target.getTeam());
for typeName in duels.autoItem[team.getRace()]:
obj = savage.getObjectType(typeName);
if obj.isMeleeType():
target.giveItem(obj, 0);
else:
target.giveItem(obj);
team = savage.Team(challenger.getTeam());
for typeName in duels.autoItem[team.getRace()]:
obj = savage.getObjectType(typeName);
if obj.isMeleeType():
challenger.giveItem(obj, 0);
else:
challenger.giveItem(obj);
return;
elif target.getDualingPhase() > DP_READY:
silverback.SV_ClientEcho(c, "^cThis player is already engaged in combat!\n");
return;
silverback.SV_ClientEcho(c, "^gYou have challenged ^c"+target.getName()+" ^gto a duel!\n");
silverback.SV_ClientEcho(t, "^c"+challenger.getName()+" ^ghas challenged you to a duel!\n");
challenger.setDuelingPhase(DP_CHALLENGING);
challenger.setDueling(t);